Hello,

I have a guile application that I would like to wrap using wrap-program.
For that I need to set multiple environment variables based on the
search-paths.  In the end I have managed to get it working, but the code
is *very* verbose, so I keep thinking there just has to be a better way.
I cannot be the first person who want to do this, so I assume I have
just missed something obvious in the manual.  Would anyone be able to
suggest a better way to approach this?

My current version:

--8<---------------cut here---------------start------------->8---
(arguments
 (list
  #:imported-modules (append (source-module-closure '((guix search-paths)))
                             %default-gnu-imported-modules)
  #:modules `((guix search-paths)
              ,@%default-gnu-modules)
  #:phases
  #~(modify-phases %standard-phases
      (add-after 'install 'wrap
        (λ _
          (let* ((build-inputs (map cdr %build-inputs))
                 (directories (cons #$output build-inputs))

                 (locale-path #$(file-append glibc-locales "/lib/locale"))
                 (guile-bin #$(file-append guile-3.0 "/bin"))

                 (load-path
                  (cdar (evaluate-search-paths
                         (list (search-path-specification
                                (variable "GUILE_LOAD_PATH")
                                (files '("share/guile/site/3.0"))))
                         directories)))
                 (load-compiled-path
                  (cdar (evaluate-search-paths
                         (list (search-path-specification
                                (variable "GUILE_LOAD_COMPILED_PATH")
                                (files '("lib/guile/3.0/site-ccache"
                                         "share/guile/site/3.0"))))
                         directories)))
                 (extension-path
                  (cdar (evaluate-search-paths
                         (list (search-path-specification
                                (variable "GUILE_EXTENSIONS_PATH")
                                (files (list "lib/guile/3.0/extensions"))))
                         directories))))
            (wrap-program (string-append #$output "/bin/watcher")
              `("LC_CTYPE"                 = ("C.UTF-8"))
              `("GUIX_LOCPATH"             = (,locale-path))
              `("GUILE_LOAD_PATH"          = (,load-path))
              `("GUILE_LOAD_COMPILED_PATH" = (,load-compiled-path))
              `("GUILE_EXTENSIONS_PATH"    = (,extension-path))
              `("PATH"                     = (,guile-bin)))))))))
--8<---------------cut here---------------end--------------->8---

Thanks,
Tomas

-- 
There are only two hard things in Computer Science:
cache invalidation, naming things and off-by-one errors.

Attachment: signature.asc
Description: PGP signature

Reply via email to