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 @@ (define (show-help) (newline) (show-build-options-help) (newline) + (show-transformation-options-help) + (newline) (display (_ " -h, --help display this help and exit")) (display (_ " @@ -511,7 +513,8 @@ (define %options 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 @@ (define dry-run? (assoc-ref opts 'dry-run?)) (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 @@ (define profile (or (assoc-ref opts 'profile) %current-profile)) (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))