summary refs log tree commit diff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2016-01-31 21:33:08 +0100
committerLudovic Courtès <ludo@gnu.org>2016-02-01 08:59:13 +0100
commitb8638f03471a0c45f441caef1acf2dad7c457661 (patch)
tree678b499b6cf6d1bc60174b3335d0623f18a62765
parent88ad6deda6dc25ac752074d402879594142a5a9f (diff)
downloadguix-b8638f03471a0c45f441caef1acf2dad7c457661.tar.gz
guix package: Support package transformation options.
* guix/scripts/package.scm (show-help): Call
'show-transformation-options-help'.
(%options): Append %TRANSFORMATION-OPTIONS.
(process-actions)[transform, transform-entry]: New procedures.
* doc/guix.texi (Invoking guix package): Mention package
transformations.
(Package Transformation Options): Mention 'guix package'.
-rw-r--r--doc/guix.texi19
-rw-r--r--guix/scripts/package.scm16
2 files changed, 26 insertions, 9 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index 10ca9b76ad..dcced797f7 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -1643,7 +1643,13 @@ Consequently, this command must be used with care.
 
 Finally, since @command{guix package} may actually start build
 processes, it supports all the common build options (@pxref{Common Build
-Options}).
+Options}).  It also support package transformation options, such as
+@option{--with-source} (@pxref{Package Transformation Options}).
+However, note that package transformations are lost when upgrading; to
+preserve transformation across upgrades, you should define your own
+package variant in a Guile module and add it to @code{GUIX_PACKAGE_PATH}
+(@pxref{Defining Packages}).
+
 
 @node Substitutes
 @section Substitutes
@@ -3946,11 +3952,12 @@ the parsed command-line options.
 
 @cindex package variants
 Another set of command-line options supported by @command{guix build}
-are @dfn{package transformation options}.  These are options that allow,
-from the command-line, to define @dfn{package variants}---for instance,
-packages built from different source code.  This is a convenient way to
-create customized packages on the fly without having to type in the
-definitions of package variants (@pxref{Defining Packages}).
+and also @command{guix package} are @dfn{package transformation
+options}.  These are options that allow you to define @dfn{package
+variants}---for instance, packages built from different source code.
+This is a convenient way to create customized packages on the fly
+without having to type in the definitions of package variants
+(@pxref{Defining Packages}).
 
 @table @code
 
diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm
index 02eb600c43..b93ffb0b6b 100644
--- a/guix/scripts/package.scm
+++ b/guix/scripts/package.scm
@@ -379,6 +379,8 @@ Install, remove, or upgrade packages in a single transaction.\n"))
   (newline)
   (show-build-options-help)
   (newline)
+  (show-transformation-options-help)
+  (newline)
   (display (_ "
   -h, --help             display this help and exit"))
   (display (_ "
@@ -511,7 +513,8 @@ kind of search path~%")
                                  result)
                            #f)))
 
-         %standard-build-options))
+         (append %transformation-options
+                 %standard-build-options)))
 
 (define (options->upgrade-predicate opts)
   "Return a predicate based on the upgrade/do-not-upgrade regexps in OPTS
@@ -789,6 +792,12 @@ processed, #f otherwise."
   (define bootstrap? (assoc-ref opts 'bootstrap?))
   (define substitutes? (assoc-ref opts 'substitutes?))
   (define profile  (or (assoc-ref opts 'profile) %current-profile))
+  (define transform (options->transformation opts))
+
+  (define (transform-entry entry)
+    (manifest-entry
+      (inherit entry)
+      (item (transform store (manifest-entry-item entry)))))
 
   ;; First, process roll-backs, generation removals, etc.
   (for-each (match-lambda
@@ -803,8 +812,9 @@ processed, #f otherwise."
   (let* ((manifest    (profile-manifest profile))
          (install     (options->installable opts manifest))
          (remove      (options->removable opts manifest))
-         (transaction (manifest-transaction (install install)
-                                            (remove remove)))
+         (transaction (manifest-transaction
+                       (install (map transform-entry install))
+                       (remove remove)))
          (new         (manifest-perform-transaction manifest transaction)))
 
     (unless (and (null? install) (null? remove))