~ruther/guix-local

0d2794005caa627965fd6256f28f94e36cd4b5a0 — David Thompson 10 years ago 83bde59
scripts: package: Add --install-from-file option.

* guix/scripts/package.scm (show-help): Add help text for --install-from-file
  option.
  (%options): Add --install-from-file option.
* tests/guix-package.sh: Test it.
* doc/guix.texi ("invoking guix package"): Document it.
* doc/package-hello.scm: New file.
* doc.am (EXTRA_DIST): Add it.
5 files changed, 55 insertions(+), 1 deletions(-)

M doc.am
M doc/guix.texi
A doc/package-hello.scm
M guix/scripts/package.scm
M tests/guix-package.sh
M doc.am => doc.am +2 -1
@@ 26,7 26,8 @@ EXTRA_DIST +=					\
  doc/images/bootstrap-graph.eps		\
  doc/images/bootstrap-graph.pdf		\
  doc/images/coreutils-size-map.eps		\
  doc/environment-gdb.scm
  doc/environment-gdb.scm			\
  doc/package-hello.scm

OS_CONFIG_EXAMPLES_TEXI =			\
  doc/os-config-bare-bones.texi			\

M doc/guix.texi => doc/guix.texi +16 -0
@@ 1167,6 1167,22 @@ Note that this option installs the first output of the specified
package, which may be insufficient when needing a specific output of a
multiple-output package.

@item --install-from-file=@var{file}
@itemx -f @var{file}
Install the package that the code within @var{file} evaluates to.

As an example, @var{file} might contain a definition like this
(@pxref{Defining Packages}):

@example
@verbatiminclude package-hello.scm
@end example

Developers may find it useful to include such a @file{package.scm} file
in the root of their project's source tree that can be used to test
development snapshots and create reproducible development environments
(@pxref{Invoking guix environment}).

@item --remove=@var{package} @dots{}
@itemx -r @var{package} @dots{}
Remove the specified @var{package}s.

A doc/package-hello.scm => doc/package-hello.scm +18 -0
@@ 0,0 1,18 @@
(use-modules (guix)
             (guix build-system gnu)
             (guix licenses))

(package
  (name "hello")
  (version "2.8")
  (source (origin
            (method url-fetch)
            (uri (string-append "mirror://gnu/hello/hello-" version
                                ".tar.gz"))
            (sha256
             (base32 "0wqd8sjmxfskrflaxywc7gqw7sfawrfvdxd9skxawzfgyy0pzdz6"))))
  (build-system gnu-build-system)
  (synopsis "Hello, GNU world: An example GNU package")
  (description "Guess what GNU Hello prints!")
  (home-page "http://www.gnu.org/software/hello/")
  (license gpl3+))

M guix/scripts/package.scm => guix/scripts/package.scm +10 -0
@@ 381,6 381,10 @@ Install, remove, or upgrade packages in a single transaction.\n"))
  -e, --install-from-expression=EXP
                         install the package EXP evaluates to"))
  (display (_ "
  -f, --install-from-file=FILE
                         install the package that the code within FILE
                         evaluates to"))
  (display (_ "
  -r, --remove PACKAGE ...
                         remove PACKAGEs"))
  (display (_ "


@@ 454,6 458,12 @@ Install, remove, or upgrade packages in a single transaction.\n"))
                   (values (alist-cons 'install (read/eval-package-expression arg)
                                       result)
                           #f)))
         (option '(#\f "install-from-file") #t #f
                 (lambda (opt name arg result arg-handler)
                   (values (alist-cons 'install
                                       (load* arg (make-user-module '()))
                                       result)
                           #f)))
         (option '(#\r "remove") #f #t
                 (lambda (opt name arg result arg-handler)
                   (let arg-handler ((arg arg) (result result))

M tests/guix-package.sh => tests/guix-package.sh +9 -0
@@ 225,6 225,15 @@ cat > "$module_dir/foo.scm"<<EOF
EOF
guix package -i emacs-foo-bar-patched -n

# Make sure installing from a file works.
cat > "$module_dir/package.scm"<<EOF
(use-modules (gnu))
(use-package-modules bootstrap)

%bootstrap-guile
EOF
guix package --bootstrap --install-from-file="$module_dir/package.scm"

# This one should not show up in searches since it's no supported on the
# current system.
test "`guix package -A super-non-portable-emacs`" = ""