Subject: Re: [PATCH v2 1/3] gnu: racket: Update to 8.2.

From: Philip McGrath <[email-masked]>
Date: Mon, 19 Jul 2021 17:46:54 -0400

Hi,

On 7/19/21 3:46 PM, Leo Prikler wrote:
> Am Montag, den 19.07.2021, 02:31 -0400 schrieb Philip McGrath:
>> * gnu/packages/racket.scm (racket-minimal, racket): Update to 8.2.
>> * gnu/packages/racket.scm (racket-minimal)[#:arguments]: Fix
>> patch-config.rktd-lib-search-dirs phase. When a config.rktd file
>> doesn't contain an entry for `lib-search-dirs`, the default is
>> equivalent to `'(#f)`, not `'()`.
> What is the point of this value?  Can we use a (sequence of) string(s)
> in its stead?

As you'd probably guess, `lib-search-dirs` and other `-search-dirs` 
"config.rktd" entries specify search paths. The `#f` value is used to 
specify the point at which the default search path should be spliced 
into the list: a configuration file can ignore the default altogether or 
exercise fine-grained control over the search order. Using `#f` also 
helps to maintain something closer to a single point of control, rather 
than hard-code the same string constants in several places.

Most importantly, the default value is not always a constant: for 
example, command-line flags and Racket parameters control whether 
user-specific paths are included.

(For `lib-search-dirs` in particular, it's also worth noting that these 
are Racket-specific search directories: it does not control the use of 
OS-level defaults for e.g. `dlopen`.)

The problems with omitting `#f` from `lib-search-dirs` were not very 
noticeable until the patch to start using layered and tethered 
installations. For a more obvious example, if `catalogs` is `'()`, `raco 
pkg` won't consult any package catalogs, whereas `'(#f)` will cause it 
to use the default catalogs.

The documentation for these configuration options is here: 
https://docs.racket-lang.org/raco/config-file.html#(idx._(gentag._70._(lib._scribblings%2Fraco%2Fraco..scrbl)))

(As of this writing, the docs on the website are still at 8.1---the 
whole package catalog is rebuilt after a new Racket release, which takes 
a little while to finish. You could alternatively apply this patch and 
run `lynx "file://"$(./pre-inst-env guix build 
racket)"/share/doc/racket/raco/config-file.html#(idx._(gentag._70._(lib._scribblings%2Fraco%2Fraco..scrbl)))"`.)

-Philip