Subject: bug#74845: [PATCH v2] gnu: racket: Ensure package launchers reference config directory.

From: "Suhail Singh" <[email-masked]>
Date: Mon, 16 Dec 2024 15:25:48 -0500

* gnu/packages/patches/racket-launcher-config-dir.patch: New file.  With this
patch, packages installed at runtime via raco have configuration directory
correctly set.
* gnu/local.mk (dist_patch_DATA): Register it.
* gnu/packages/racket.scm (%racket-origin): Use it.

Change-Id: Ibba2d73b72a66e58a3c51dad8cf4fbf0c8969c4e
---
 gnu/local.mk                                  |  1 +
 .../patches/racket-launcher-config-dir.patch  | 65 +++++++++++++++++++
 gnu/packages/racket.scm                       |  1 +
 3 files changed, 67 insertions(+)
 create mode 100644 gnu/packages/patches/racket-launcher-config-dir.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index bbe6fe4fce..9690bbe647 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -2165,6 +2165,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/rpcbind-CVE-2017-8779.patch		\
   %D%/packages/patches/rtags-separate-rct.patch			\
   %D%/packages/patches/racket-chez-scheme-bin-sh.patch		\
+  %D%/packages/patches/racket-launcher-config-dir.patch		\
   %D%/packages/patches/racket-rktio-bin-sh.patch		\
   %D%/packages/patches/reduce-unbundle-libffi.patch             \
   %D%/packages/patches/remake-impure-dirs.patch			\
diff --git a/gnu/packages/patches/racket-launcher-config-dir.patch b/gnu/packages/patches/racket-launcher-config-dir.patch
new file mode 100644
index 0000000000..9a1eec6e8b
--- /dev/null
+++ b/gnu/packages/patches/racket-launcher-config-dir.patch
@@ -0,0 +1,65 @@
+From 6b3aed3d71ea9481762de7bd42395704176b6625 Mon Sep 17 00:00:00 2001
+From: Suhail <[email-masked]>
+Date: Mon, 16 Dec 2024 15:07:55 -0500
+Subject: [PATCH v2] racket: raco: Ensure launchers of packages include config
+ directory.
+
+Currently, binaries installed via "raco" (included in Guix's "racket" package)
+don't include the -G / --config configuration option specifying the "Main
+configuration directory".  This is problematic.
+
+Specifically, when installing "rash" via raco using the below:
+
+#+begin_src sh
+  raco pkg install rash
+#+end_src
+
+The resulting rash-repl binary (which is missing the -G configuration option
+in the call to the racket binary), when invoked, results in the following
+error:
+
+#+begin_src sh
+  standard-module-name-resolver: collection not found
+    for module path: (lib "rash/repl.rkt")
+    collection: "rash"
+    in collection directories:
+     ${HOME}/.local/share/racket/8.14/collects
+     /gnu/store/vn20i9xk22czljr9drwzwpgw209l49s8-racket-vm-cs-8.14/opt/racket-vm/collects/
+#+end_src
+
+Adding the -G configuration option in the call to the racket binary fixes the
+above error.
+
+The executable scripts (at least on linux) are generated via
+make-unix-launcher in ./racket/collects/launcher/launcher.rkt .  The patch
+below ensures that the -G flag is added to such launcher scripts.  The patch
+is conservative in that it allows it to be overwritten by callers of
+launcher.rkt as desired.
+
+---
+ racket/collects/launcher/launcher.rkt | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/racket/collects/launcher/launcher.rkt b/racket/collects/launcher/launcher.rkt
+index 0faacec4ce..2c77d55caf 100644
+--- a/racket/collects/launcher/launcher.rkt
++++ b/racket/collects/launcher/launcher.rkt
+@@ -405,7 +405,14 @@
+          [x-flags? (and (eq? kind 'mred)
+                         (eq? (cross-system-type) 'unix)
+                         (not (script-variant? variant)))]
+-         [flags (let ([m (assq 'wm-class aux)])
++         [flags (let ([m (assq 'wm-class aux)]
++                      [flags (if (or (member "-G" flags)
++                                     (member "--config" flags))
++                                 flags
++                                 (list* "-G"
++                                        (format "~a"
++                                                (find-system-path 'config-dir))
++                                        flags))])
+                   (if m
+                       (list* "-J" (cdr m) flags)
+                       flags))]
+-- 
+2.47.1
+
diff --git a/gnu/packages/racket.scm b/gnu/packages/racket.scm
index 2ff1d159fa..30c8e4df53 100644
--- a/gnu/packages/racket.scm
+++ b/gnu/packages/racket.scm
@@ -214,6 +214,7 @@ (define %racket-origin
      (base32 "1lci426vvi64s077vwkxdgpkda4aggafxz52k7km2p8ngwmg9f78"))
     (file-name (git-file-name "racket" %racket-version))
     (patches (search-patches "racket-chez-scheme-bin-sh.patch"
+                             "racket-launcher-config-dir.patch"
                              "racket-rktio-bin-sh.patch"))
     (modules '((guix build utils)))
     (snippet

base-commit: 1afbf48b250f667ce45de40a6c275e3e42ade67c