On Tue, Aug 18, 2015 at 3:30 PM, Ludovic Courtès <l...@gnu.org> wrote: > David Thompson <dthomps...@worcester.edu> skribis: > >> In my personal projects, I keep a 'package.scm' file in the root of the >> source tree for use with 'guix environment -l'. However, it's also >> handy to install that package by using 'guix package -e': >> >> guix package -e '(primitive-load "package.scm")' >> >> This patch adds a shorthand for this: >> >> guix package -f package.scm > > Makes sense. > >> The motivation for this is to ultimately encourage other people to keep >> a 'package.scm' file in their own repos for building reproducible >> development environments and easily testing development snapshots, like >> what we do with our 'guix-devel' package. > > Nice. The bottom line though is that we don’t quite guarantee stability > of the “API” of the package modules.
Understood. In practice, I haven't found this to be a big deal. I provide package.scm files in all of my projects now and it's been a huge win for making it easier to quickly get hacking on a new machine. >> I'd like to add the same option for 'guix build', if this is approved. > > Sure. Great. :) >> From 07c9b35facf810872f3bc8342e18b33033714adf Mon Sep 17 00:00:00 2001 >> From: David Thompson <dthomps...@worcester.edu> >> Date: Sun, 9 Aug 2015 11:35:51 -0400 >> Subject: [PATCH] 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. >> * doc/guix.texi ("invoking guix package"): Document it. > > [...] > >> +(use-modules (guix packages) >> + (guix download) >> + (guix build-system gnu) >> + (guix licenses)) > > Just (use-modules (guix) (guix licenses))? I needed: (use-modules (guix) (guix build-system gnu) (guix licenses)) > Can you put the example in a separate file (like > doc/environment-gdb.scm)? That will allow us to easily check that the > file is indeed valid. Done. >> + (arguments `(#:configure-flags '("--enable-silent-rules"))) >> + (inputs `(("gawk" ,gawk))) > > I think these two lines can be removed. Yeah. BTW, I copy/pasted this from the "Defining Packages" section, and that example appears to be broken because it doesn't import the (gnu packages gawk) module. >> +@end example > > Here it would be good to add a sentence or two like the paragraph you > wrote above about the motivation for all this. Added a sentence about it. > Could you send an updated patch? Attached. Thanks for the review. - Dave
From 471fff182b632fc3b6f99925ff6c7bd25850a841 Mon Sep 17 00:00:00 2001 From: David Thompson <dthomps...@worcester.edu> Date: Sun, 9 Aug 2015 11:35:51 -0400 Subject: [PATCH] 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. * doc/guix.texi ("invoking guix package"): Document it. * doc/package-hello.scm: New file. * doc.am (EXTRA_DIST): Add it. --- doc.am | 3 ++- doc/guix.texi | 18 +++++++++++++++++- doc/package-hello.scm | 18 ++++++++++++++++++ guix/scripts/package.scm | 10 ++++++++++ 4 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 doc/package-hello.scm diff --git a/doc.am b/doc.am index 02b80ec..1f0b832 100644 --- a/doc.am +++ b/doc.am @@ -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 \ diff --git a/doc/guix.texi b/doc/guix.texi index a20bca6..5550582 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -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. @@ -2841,7 +2857,7 @@ omitted since it will take place implicitly, as we will see later @end example @c See -@c <https://syntaxexclamation.wordpress.com/2014/06/26/escaping-continuations/> +@c <https://syntaxexclamation.wordpress.com/2014/06/26/escaping-continuations/> @c for the funny quote. Calling the monadic @code{sh-symlink} has no effect. As someone once said, ``you exit a monad like you exit a building on fire: by running''. diff --git a/doc/package-hello.scm b/doc/package-hello.scm new file mode 100644 index 0000000..b3fcd4f --- /dev/null +++ b/doc/package-hello.scm @@ -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+)) diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm index b545ea2..23f1597 100644 --- a/guix/scripts/package.scm +++ b/guix/scripts/package.scm @@ -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)) -- 2.4.3