diff options
Diffstat (limited to 'doc/guix.texi')
-rw-r--r-- | doc/guix.texi | 87 |
1 files changed, 78 insertions, 9 deletions
diff --git a/doc/guix.texi b/doc/guix.texi index b0f4e1ad81..09ed39213c 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -548,7 +548,7 @@ on the kernel version number. @item --lose-logs Do not keep build logs. By default they are kept under -@code{@var{localstatedir}/nix/log}. +@code{@var{localstatedir}/guix/log}. @item --system=@var{system} Assume @var{system} as the current system type. By default it is the @@ -1937,6 +1937,33 @@ effect, one must use @code{run-with-store}: @result{} /gnu/store/...-profile.sh @end example +Note that the @code{(guix monad-repl)} module extends Guile's REPL with +new ``meta-commands'' to make it easier to deal with monadic procedures: +@code{run-in-store}, and @code{enter-store-monad}. The former, is used +to ``run'' a single monadic value through the store: + +@example +scheme@@(guile-user)> ,run-in-store (package->derivation hello) +$1 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}> +@end example + +The latter enters a recursive REPL, where all the return values are +automatically run through the store: + +@example +scheme@@(guile-user)> ,enter-store-monad +store-monad@@(guile-user) [1]> (package->derivation hello) +$2 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}> +store-monad@@(guile-user) [1]> (text-file "foo" "Hello!") +$3 = "/gnu/store/@dots{}-foo" +store-monad@@(guile-user) [1]> ,q +scheme@@(guile-user)> +@end example + +@noindent +Note that non-monadic values cannot be returned in the +@code{store-monad} REPL. + The main syntactic forms to deal with monads in general are described below. @@ -2038,15 +2065,19 @@ The example below adds a file to the store, under two different names: @end deffn @deffn {Monadic Procedure} package-file @var{package} [@var{file}] @ - [#:system (%current-system)] [#:output "out"] Return as a monadic + [#:system (%current-system)] [#:target #f] @ + [#:output "out"] Return as a monadic value in the absolute file name of @var{file} within the @var{output} directory of @var{package}. When @var{file} is omitted, return the name -of the @var{output} directory of @var{package}. +of the @var{output} directory of @var{package}. When @var{target} is +true, use it as a cross-compilation target triplet. @end deffn @deffn {Monadic Procedure} package->derivation @var{package} [@var{system}] -Monadic version of @code{package-derivation} (@pxref{Defining -Packages}). +@deffnx {Monadic Procedure} package->cross-derivation @var{package} @ + @var{target} [@var{system}] +Monadic version of @code{package-derivation} and +@code{package-cross-derivation} (@pxref{Defining Packages}). @end deffn @@ -2129,8 +2160,32 @@ substituted to the reference to the @var{coreutils} package in the actual build code, and @var{coreutils} is automatically made an input to the derivation. Likewise, @code{#$output} (equivalent to @code{(ungexp output)}) is replaced by a string containing the derivation's output -directory name. The syntactic form to construct gexps is summarized -below. +directory name. + +@cindex cross compilation +In a cross-compilation context, it is useful to distinguish between +references to the @emph{native} build of a package---that can run on the +host---versus references to cross builds of a package. To that end, the +@code{#+} plays the same role as @code{#$}, but is a reference to a +native package build: + +@example +(gexp->derivation "vi" + #~(begin + (mkdir #$output) + (system* (string-append #+coreutils "/bin/ln") + "-s" + (string-append #$emacs "/bin/emacs") + (string-append #$output "/bin/vi"))) + #:target "mips64el-linux") +@end example + +@noindent +In the example above, the native build of @var{coreutils} is used, so +that @command{ln} can actually run on the host; but then the +cross-compiled build of @var{emacs} is referenced. + +The syntactic form to construct gexps is summarized below. @deffn {Scheme Syntax} #~@var{exp} @deffnx {Scheme Syntax} (gexp @var{exp}) @@ -2159,6 +2214,13 @@ This is like the form above, but referring explicitly to the @var{package-or-derivation} produces multiple outputs (@pxref{Packages with Multiple Outputs}). +@item #+@var{obj} +@itemx #+@var{obj}:output +@itemx (ungexp-native @var{obj}) +@itemx (ungexp-native @var{obj} @var{output}) +Same as @code{ungexp}, but produces a reference to the @emph{native} +build of @var{obj} when used in a cross compilation context. + @item #$output[:@var{output}] @itemx (ungexp output [@var{output}]) Insert a reference to derivation output @var{output}, or to the main @@ -2171,6 +2233,11 @@ This only makes sense for gexps passed to @code{gexp->derivation}. Like the above, but splices the contents of @var{lst} inside the containing list. +@item #+@@@var{lst} +@itemx (ungexp-native-splicing @var{lst}) +Like the above, but refers to native builds of the objects listed in +@var{lst}. + @end table G-expressions created by @code{gexp} or @code{#~} are run-time objects @@ -2187,13 +2254,15 @@ below allow you to do that (@pxref{The Store Monad}, for more information about monads.) @deffn {Monadic Procedure} gexp->derivation @var{name} @var{exp} @ - [#:system (%current-system)] [#:inputs '()] @ + [#:system (%current-system)] [#:target #f] [#:inputs '()] @ [#:hash #f] [#:hash-algo #f] @ [#:recursive? #f] [#:env-vars '()] [#:modules '()] @ [#:references-graphs #f] [#:local-build? #f] @ [#:guile-for-build #f] Return a derivation @var{name} that runs @var{exp} (a gexp) with -@var{guile-for-build} (a derivation) on @var{system}. +@var{guile-for-build} (a derivation) on @var{system}. When @var{target} +is true, it is used as the cross-compilation target triplet for packages +referred to by @var{exp}. Make @var{modules} available in the evaluation context of @var{EXP}; @var{MODULES} is a list of names of Guile modules from the current |