diff options
author | Ricardo Wurmus <rekado@elephly.net> | 2019-03-20 21:01:42 +0100 |
---|---|---|
committer | Ricardo Wurmus <rekado@elephly.net> | 2019-03-20 21:04:31 +0100 |
commit | ceab33feee33ce7d680717604bb8336299423924 (patch) | |
tree | 07ae567a2a467ec974d104945b2a85aac63ba89e /gnu | |
parent | 6854a5d5f7a4ca41b786fadfafe97978a5b45f14 (diff) | |
download | guix-ceab33feee33ce7d680717604bb8336299423924.tar.gz |
gnu: guile-wm: Compile and use canonical directories.
Fixes <https://bugs.gnu.org/34922>. * gnu/packages/guile-wm.scm (guile-wm)[arguments]: Rename "set-go-directory" phase to "set-module-directory"; change "set-load-path" phase to wrap executable in the correct environment variables; add phase "install-go-files".
Diffstat (limited to 'gnu')
-rw-r--r-- | gnu/packages/guile-wm.scm | 69 |
1 files changed, 52 insertions, 17 deletions
diff --git a/gnu/packages/guile-wm.scm b/gnu/packages/guile-wm.scm index 7b1731171a..2955c06a0d 100644 --- a/gnu/packages/guile-wm.scm +++ b/gnu/packages/guile-wm.scm @@ -1,7 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2016 Alex ter Weele <alex.ter.weele@gmail.com> -;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net> +;;; Copyright © 2017, 2019 Ricardo Wurmus <rekado@elephly.net> ;;; Copyright © 2017 ng0 <ng0@n0.is> ;;; ;;; This file is part of GNU Guix. @@ -87,39 +87,74 @@ dependencies.") "086dijnpl5dpglf70d6f9sizyakr313y7blpdjrmbi687j1x3qcl")))) (build-system gnu-build-system) (arguments - `( ;; The '.scm' files go to $(datadir), so set that to the + `(#:modules ((guix build gnu-build-system) + (guix build utils) + (ice-9 rdelim) + (ice-9 popen)) + ;; The '.scm' files go to $(datadir), so set that to the ;; standard value. #:configure-flags (list (string-append "--datadir=" (assoc-ref %outputs "out") "/share/guile/site/2.2")) #:phases (modify-phases %standard-phases - (add-before 'configure 'set-go-directory + (add-before 'configure 'set-module-directory (lambda* (#:key outputs #:allow-other-keys) - ;; Install .go files to $out/share/guile/site/2.2. - (let ((out (assoc-ref outputs "out"))) + ;; Install .scm files to $out/share/guile/site/2.2. + (let ((out (assoc-ref outputs "out")) + (effective (read-line + (open-pipe* OPEN_READ + "guile" "-c" + "(display (effective-version))")))) (substitute* "module/Makefile.in" (("^wmdir = .*$") (string-append "wmdir = " out - "/share/guile/site/2.2\n")))) + "/share/guile/site/" + effective "\n")))) #t)) (add-after 'install 'set-load-path (lambda* (#:key inputs outputs #:allow-other-keys) ;; Put Guile-XCB's and Guile-WM's modules in the ;; search path of PROG. - (let* ((out (assoc-ref outputs "out")) - (prog (string-append out "/bin/guile-wm")) - (mods (string-append - out "/share/guile/site/2.2")) - (xcb (string-append - (assoc-ref inputs "guile-xcb") - "/share/guile/site/2.2"))) - (wrap-program - prog - `("GUILE_LOAD_PATH" ":" prefix (,mods ,xcb)) + (let* ((out (assoc-ref outputs "out")) + (effective (read-line + (open-pipe* OPEN_READ + "guile" "-c" + "(display (effective-version))"))) + (prog (string-append out "/bin/guile-wm")) + (mods (string-append out "/share/guile/site/" effective)) + (gos (string-append out "/lib/guile/" effective "/site-ccache")) + (xcb (assoc-ref inputs "guile-xcb"))) + (wrap-program prog + `("GUILE_AUTO_COMPILE" ":" = ("0")) + `("GUILE_LOAD_PATH" ":" prefix + (,mods ,(string-append xcb "/share/guile/site/" effective))) `("GUILE_LOAD_COMPILED_PATH" ":" prefix - (,mods ,xcb)))) + (,gos ,(string-append xcb "/lib/guile/" + effective "/site-ccache"))))) #t)) + (add-after 'install 'install-go-files + (lambda* (#:key outputs inputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (effective (read-line + (open-pipe* OPEN_READ + "guile" "-c" + "(display (effective-version))"))) + (module-dir (string-append out "/share/guile/site/" + effective)) + (object-dir (string-append out "/lib/guile/" effective + "/site-ccache")) + (prefix (string-length module-dir))) + (setenv "GUILE_AUTO_COMPILE" "0") + ;; compile to the destination + (for-each (lambda (file) + (let* ((base (string-drop (string-drop-right file 4) + prefix)) + (go (string-append object-dir base ".go"))) + (invoke "guild" "compile" "-L" module-dir + file "-o" go))) + (find-files module-dir "\\.scm$")) + #t))) (add-after 'install 'install-xsession (lambda* (#:key outputs #:allow-other-keys) ;; add a .desktop file to xsessions |