#!@GUILE@ -s -*- 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 . (use-modules (ice-9 regex)) (let () (define-syntax-rule (push! elt v) (set! v (cons elt v))) (define config-lookup (let ((config '(("prefix" . "@prefix@") ("datarootdir" . "@datarootdir@") ("guilemoduledir" . "@guilemoduledir@"))) (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"))) (push! module-dir %load-path) (push! module-dir %load-compiled-path)))) (define (run-script name args) (let* ((symbol (string->symbol name)) (module (resolve-interface `(guix scripts ,symbol))) (script (module-ref module symbol))) (apply script args))) (define (main arg0 . args) (setlocale LC_ALL "") ; XXX Is there a reason not to do this? (maybe-augment-load-paths!) (let ((cmd (basename arg0))) (cond ((string-prefix? "guix-" cmd) (run-script cmd args)) ((not (null? args)) (run-script (string-append "guix-" (car args)) (cdr args))) (else ;; TODO: Dynamically generate a summary of available commands. (format (current-error-port) "Usage: guix []~%") (exit 1))))) (apply main (command-line)))