X-Git-Url: https://git.hcoop.net/jackhill/guix/guix.git/blobdiff_plain/378de69c59ee0700c67b10b38592c213821b41f2..434f378dff3ac0d51f3f81d93d7157ffbfecbdb2:/scripts/guix.in diff --git a/scripts/guix.in b/scripts/guix.in dissimilarity index 69% index e20c274242..e0194d6ea2 100644 --- a/scripts/guix.in +++ b/scripts/guix.in @@ -1,77 +1,50 @@ -#!@GUILE@ --no-auto-compile --*- scheme -*- -!# -;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013 Mark H Weaver -;;; -;;; This file is part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see . - -;; IMPORTANT: We must avoid loading any modules from Guix here, -;; because we need to adjust the guile load paths first. -;; It's okay to import modules from core Guile though. -(use-modules (ice-9 regex) - (srfi srfi-26)) - -(let () - (define-syntax-rule (push! elt v) (set! v (cons elt v))) - - (define config-lookup - (let ((config '(("prefix" . "@prefix@") - ("exec_prefix" . "@exec_prefix@") - ("datarootdir" . "@datarootdir@") - ("guilemoduledir" . "@guilemoduledir@") - ("guileobjectdir" . "@guileobjectdir@") - ("localedir" . "@localedir@"))) - (var-ref-regexp (make-regexp "\\$\\{([a-z_]+)\\}"))) - (define (expand-var-ref match) - (lookup (match:substring match 1))) - (define (expand str) - (regexp-substitute/global #f var-ref-regexp str - 'pre expand-var-ref 'post)) - (define (lookup name) - (expand (assoc-ref config name))) - lookup)) - - (define (maybe-augment-load-paths!) - (unless (getenv "GUIX_UNINSTALLED") - (let ((module-dir (config-lookup "guilemoduledir")) - (object-dir (config-lookup "guileobjectdir"))) - (push! module-dir %load-path) - (push! object-dir %load-compiled-path)) - (let ((updates-dir (and=> (or (getenv "XDG_CONFIG_HOME") - (and=> (getenv "HOME") - (cut string-append <> "/.config"))) - (cut string-append <> "/guix/latest")))) - (when (and updates-dir (file-exists? updates-dir)) - ;; XXX: Currently 'guix pull' puts both .scm and .go files in - ;; UPDATES-DIR. - (push! updates-dir %load-path) - (push! updates-dir %load-compiled-path))))) - - (define (run-guix-main) - (let ((guix-main (module-ref (resolve-interface '(guix ui)) - 'guix-main))) - (bindtextdomain "guix" (config-lookup "localedir")) - (bindtextdomain "guix-packages" (config-lookup "localedir")) - (apply guix-main (command-line)))) - - (maybe-augment-load-paths!) - - ;; XXX: It would be more convenient to change it to: - ;; (exit (run-guix-main)) - ;; but since the 'guix' command is not updated by 'guix pull', we cannot - ;; really do it now. - (run-guix-main)) +#!@abs_top_builddir@/guile \ +--no-auto-compile -e main -s +!# +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2013 Mark H Weaver +;;; Copyright © 2018 Mathieu Lirzin +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see . + +;; IMPORTANT: We must avoid loading any modules from Guix here, +;; because we need to adjust the guile load paths first. +;; It's okay to import modules from core Guile though. + +(define-syntax-rule (push! elt v) (set! v (cons elt v))) + +(define (augment-load-paths!) + ;; Add installed modules to load-path. + (push! "@guilemoduledir@" %load-path) + (push! "@guileobjectdir@" %load-compiled-path)) + +(define* (main #:optional (args (command-line))) + (unless (getenv "GUIX_UNINSTALLED") + (augment-load-paths!)) + + (let ((guix-main (module-ref (resolve-interface '(guix ui)) + 'guix-main))) + (bindtextdomain "guix" "@localedir@") + (bindtextdomain "guix-packages" "@localedir@") + ;; XXX: It would be more convenient to change it to: + ;; (exit (apply guix-main (command-line))) + ;; but since the 'guix' command is not updated by 'guix pull', we cannot + ;; really do it now. + (apply guix-main args))) + +;;; Local Variables: +;;; mode: scheme +;;; End: