summaryrefslogtreecommitdiff
path: root/guix/derivations.scm
AgeCommit message (Expand)Author
2015-02-02store: Remove 'build-derivations'....* guix/store.scm (build-derivations): Remove. * guix/derivations.scm (build-derivations): Write in terms of 'build-things'. * doc/guix.texi (Invoking guix build): Adjust text accordingly. Ludovic Courtès
2015-01-24derivations: Raise an error for references to non-existent outputs....Fixes <http://bugs.gnu.org/19630>. Reported by Ricardo Wurmus <ricardo.wurmus@mdc-berlin.de>. * guix/derivations.scm (&derivation-error, &derivation-missing-output-error): New error conditions. (derivation->output-path): Raise a '&derivation-missing-output-error' if OUTPUT is not an output of DRV. * guix/ui.scm (call-with-error-handling): Add case for 'derivation-missing-output-error?'. (show-what-to-build): Check whether (derivation-outputs drv) is empty. * tests/packages.scm ("reference to non-existent output"): Add test. Ludovic Courtès
2015-01-14monads: Move '%store-monad' and related procedures where they belong....This turns (guix monads) into a generic module for monads, and moves the store monad and related monadic procedures in their corresponding module. * guix/monads.scm (store-return, store-bind, %store-monad, store-lift, text-file, interned-file, package-file, package->derivation, package->cross-derivation, origin->derivation, imported-modules, compiled, modules, built-derivations, run-with-store): Move to... * guix/store.scm (store-return, store-bind, %store-monad, store-lift, text-file, interned-file): ... here. (%guile-for-build): New variable. (run-with-store): Moved from monads.scm. Remove default value for #:guile-for-build. * guix/packages.scm (default-guile): Export. (set-guile-for-build): New procedure. (package-file, package->derivation, package->cross-derivation, origin->derivation): Moved from monads.scm. * guix/derivations.scm (%guile-for-build): Remove. (imported-modules): Rename to... (%imported-modules): ... this. (compiled-modules): Rename to... (%compiled-modules): ... this. (built-derivations, imported-modules, compiled-modules): New procedures. * gnu/services/avahi.scm, gnu/services/base.scm, gnu/services/dbus.scm, gnu/services/dmd.scm, gnu/services/networking.scm, gnu/services/ssh.scm, gnu/services/xorg.scm, gnu/system/install.scm, gnu/system/linux-initrd.scm, gnu/system/shadow.scm, guix/download.scm, guix/gexp.scm, guix/git-download.scm, guix/profiles.scm, guix/svn-download.scm, tests/monads.scm: Adjust imports accordingly. * guix/monad-repl.scm (default-guile-derivation): New procedure. (store-monad-language, run-in-store): Use it. * build-aux/hydra/gnu-system.scm (qemu-jobs): Add explicit 'set-guile-for-build' call. * guix/scripts/archive.scm (derivation-from-expression): Likewise. * guix/scripts/build.scm (options/resolve-packages): Likewise. * guix/scripts/environment.scm (guix-environment): Likewise. * guix/scripts/system.scm (guix-system): Likewise. * doc/guix.texi (The Store Monad): Adjust module names accordingly. Ludovic Courtès
2015-01-11derivations: Use a set for 'substitution-oracle'....* guix/derivations.scm (substitution-oracle): Use sets instead of lists. Ludovic Courtès
2015-01-11derivations: Use sets for 'derivations-prerequisites'....This yields a 46% improvement in 'derivation-prerequisites' invocations on the Emacs derivation. * guix/derivations.scm (derivation-prerequisites): Add 'input-set' variable, and use it in iterations. Ludovic Courtès
2015-01-10derivations: Add 'substitution-oracle' and use it....This makes 'guix environment PACKAGE' significantly faster when substitutes are enabled. Before that, it would lead to many invocations of 'guix substitute-binary', one per 'derivation-prerequisites-to-build' call. Now, all these are replaced by a single invocation. * guix/derivations.scm (derivation-output-paths, substitution-oracle): New procedures. (derivation-prerequisites-to-build): Replace #:use-substitutes? with #:substitutable?. Remove the local 'derivation-output-paths' and 'substitutable?'. * guix/ui.scm (show-what-to-build): Add 'substitutable?'. Pass it to 'derivation-prerequisites-to-build'. [built-or-substitutable?]: Use it instead of 'has-substitutes?'. * tests/derivations.scm ("derivation-prerequisites-to-build and substitutes"): Use #:substitutable? instead of #:use-substitutes?. Ludovic Courtès
2015-01-09derivations: Add 'derivation-output-names'....* guix/derivations.scm (derivation-output-names): New procedure. (derivation-prerequisites-to-build): Use it for #:outputs. (map-derivation): Likewise. * tests/derivations.scm ("derivation-output-names"): New test. Ludovic Courtès
2014-12-02derivations: Export 'derivation-builder'....* guix/derivations.scm: Export 'derivation-builder'. Ludovic Courtès
2014-11-13derivations: Clarify message produced by 'graft-derivation'....* guix/derivations.scm (graft-derivation): Use the term "grafting" in the build message. Ludovic Courtès
2014-11-02derivations: Add 'derivation-name'....* guix/derivations.scm (derivation-name): New procedure. * tests/derivations.scm ("derivation-name"): New test. Ludovic Courtès
2014-10-29derivations: Fix 'derivation-prerequisites-to-build' when #:local-build?....* guix/derivations.scm (derivation-prerequisites-to-build)[derivation-substitutable?]: Call 'substitutable-derivation?'. <body>: When 'substitutable-derivation?' returns #f, add DRV to BUILD. Ludovic Courtès
2014-10-29derivations: Add 'offloadable-derivation?' and 'substitutable-derivation?'....* guix/derivations.scm (offloadable-derivation?, substitutable-derivation?): New procedures. * tests/derivations.scm ("offloadable-derivation?"): New test. Ludovic Courtès
2014-10-17derivations: 'graft-derivation' correctly handles multiple-output sources....* guix/derivations.scm (graft-derivation): Add DRV as input for each one of OUTPUT-NAMES. Ludovic Courtès
2014-10-17derivations: Add #:system parameter to 'graft-derivation'....* guix/derivations.scm (graft-derivation): Add #:system parameter. Ludovic Courtès
2014-10-17derivations: Introduce 'graft' record type....* guix/derivations.scm (<graft>): New record type. (graft-derivation): Rename 'replacements' to 'grafts', and expect it to be a list of <graft> records. Adjust accordingly. * tests/derivations.scm ("graft-derivation"): Use 'graft' instead of pairs in argument to 'graft-derivation'. Ludovic Courtès
2014-10-13derivations: Micro-optimize 'imported-modules'....This reduces run time of (package-derivation s emacs) by ~5%. * guix/derivations.scm (search-path*): New procedure. (imported-modules): Use it instead of 'search-path'. Ludovic Courtès
2014-10-13derivations: Memoize 'derivation-path->base16-hash'....This reduces run time of (package-derivation s emacs) by ~10%. * guix/derivations.scm (derivation-path->base16-hash): New procedure. (derivation-hash): Use it. Ludovic Courtès
2014-10-12derivations: Add #:guile parameter to 'graft-derivation'....* guix/derivations.scm (graft-derivation): Add #:guile parameter; pass it to 'build-expression->derivation'. Ludovic Courtès
2014-10-08derivations: Add 'graft-derivation'....* guix/derivations.scm (graft-derivation): New procedure. * guix/build/graft.scm: New file. * Makefile.am (MODULES): Add it. * tests/derivations.scm ("graft-derivation"): New test. Ludovic Courtès
2014-06-06derivations: 'build-expression->derivation' supports #:allowed-references....* guix/derivations.scm (build-expression->derivation): Add #:allowed-references and pass it to 'derivation. * doc/guix.texi (Derivations): Adjust accordingly. Ludovic Courtès
2014-06-01derivations: Add #:allowed-references 'derivation' parameter....* guix/derivations.scm (derivation): Add #:allowed-references parameter. [user+system-env-vars]: Honor it. * tests/derivations.scm ("derivation #:allowed-references, ok", "derivation #:allowed-references, not allowed", "derivation #:allowed-references, self allowed", "derivation #:allowed-references, self not allowed"): New tests. * doc/guix.texi (Derivations): Document #:allowed-references. Ludovic Courtès
2014-04-29derivations: Micro-optimize 'derivation'....* guix/derivations.scm (derivation->string): New procedure. (derivation-hash, derivation): Use it. Memoization here yields a 5% improvement on "guix build -e '(@ (gnu packages emacs) emacs)' -n --no-substitutes". Ludovic Courtès
2014-04-13derivations: Fix 'fixed-output-derivation?'....Reported by Nikita Karetnikov <nikita@karetnikov.org>. * guix/derivations.scm (fixed-output-derivation?): Fix pattern. * tests/derivations.scm ("fixed-output-derivation?"): Add test. Ludovic Courtès
2014-03-17Merge branch 'master' into core-updatesLudovic Courtès
2014-03-10More /gnu/store replacements....* gnu/packages/gcc.scm (gcc-4.7): Change /nix/store in comment. * gnu/system/vm.scm (operating-system-default-contents): Use (%store-prefix) instead of "/nix/store". * guix/derivations.scm (derivation-path->output-path, derivation-path->output-paths): Change to /gnu/store in docstring. Ludovic Courtès
2014-02-22Merge branch 'master' into core-updates...Conflicts: gnu-system.am Ludovic Courtès
2014-02-21derivations: Remove unused 'derivation' parameter....* guix/derivations.scm (derivation): Remove unused #:hash-mode parameter. * doc/guix.texi (Derivations): Adjust accordingly. Ludovic Courtès
2014-02-21derivations: Add support for recursive fixed-output derivations....* guix/derivations.scm (<derivation-output>): Add 'recursive?' field. Adjust 'make-derivation-output' callers. (%read-derivation) <fixed-output>: When HASH-ALGO starts with 'r:', set the 'recursive?' field and drop 'r:' from the hash algo name. (write-derivation)[write-output]: Write the algo as 'r:HASH-ALGO' when the RECURSIVE? field is set. (derivation-hash) <fixed-output>: Prepend "r:" when RECURSIVE? is set. (fixed-output-path): New procedure. (derivation): Add #:recursive? parameter. Use 'fixed-output-path' to compute the output file name of a fixed output derivation. (build-expression->derivation): Add #:recursive? parameter. Pass it to 'derivation'. * tests/derivations.scm ("fixed-output derivation, recursive", "build-expression->derivation produces recursive fixed-output", "build-expression->derivation uses recursive fixed-output"): New tests. * doc/guix.texi (Derivations): Document #:recursive? for 'derivation'. Add #:recursive? for 'build-expression->derivation'. Ludovic Courtès
2014-01-25Prefer local builds for "small" derivations....* gnu/system.scm (union, file-union, links): Pass #:local-build? #t to 'derivation-expression'. * guix/derivations.scm (imported-files, compiled-modules): Likewise. * guix/profiles.scm (profile-derivation): Likewise. Ludovic Courtès
2014-01-25derivations: Add #:local-build? parameter for derivations....* guix/derivations.scm (derivation): Add #:local-build? parameter and honor it. (build-expression->derivation): Likewise. * doc/guix.texi (Derivations): Update documentation of these procedures. Ludovic Courtès
2013-12-04derivations: Use more keyword parameters for 'build-expression->derivation'....* guix/derivations.scm (build-expression->derivation): Turn 'system' and 'inputs' into keyword parameters. Adjust callers accordingly. * gnu/system/linux.scm, gnu/system/vm.scm, guix/build-system/cmake.scm, guix/build-system/gnu.scm, guix/build-system/perl.scm, guix/build-system/python.scm, guix/build-system/trivial.scm, guix/download.scm, guix/packages.scm, guix/profiles.scm, guix/scripts/pull.scm, tests/derivations.scm, tests/guix-build.sh, tests/monads.scm, tests/store.scm, tests/union.scm: Adjust users of 'build-expression->derivation' and 'derivation-expression' accordingly. * doc/guix.texi (Derivations): Adjust 'build-expression->derivation' documentation accordingly. (The Store Monad): Likewise for 'derivation-expression'. Ludovic Courtès
2013-11-13derivations: Allow 'map-derivations' to replace sources....* guix/derivations.scm (map-derivation)[input->output-paths]: Allow non-derivation inputs. Allow replacements to be store files. Replace in SOURCES too. * tests/derivations.scm ("map-derivation, sources"): New test. Ludovic Courtès
2013-11-13store: Make 'direct-store-path?' public....* guix/store.scm (direct-store-path?): New procedure. * guix/derivations.scm (derivation)[direct-store-path?]: Remove. * tests/store.scm ("direct-store-path?"): New test. Ludovic Courtès
2013-11-13derivations: Add 'map-derivation'....* guix/derivations.scm (map-derivation): New procedure. * tests/derivations.scm ("map-derivation"): New test. Ludovic Courtès
2013-10-30derivations: 'derivation-path->output-path' honors the 'output' parameter....* guix/derivations.scm (derivation-path->output-path): Pass OUTPUT. * tests/derivations.scm ("multiple-output derivation, derivation-path->output-path"): New test. Ludovic Courtès
2013-09-18derivations: 'derivation' and related procedures return a single value....* guix/derivations.scm (derivation->output-path, derivation->output-paths): New procedures. (derivation-path->output-path): Use 'derivation->output-path'. (derivation-path->output-paths): Use 'derivation->output-paths'. (derivation): Accept 'derivation?' objects as inputs. Return a single value. (build-derivations): New procedure. (compiled-modules): Use 'derivation->output-paths'. (build-expression->derivation)[source-path]: Add case for when the input matches 'derivation?'. [prologue]: Accept 'derivation?' objects in INPUTS. [mod-dir, go-dir]: Use 'derivation->output-path'. * guix/download.scm (url-fetch): Adjust to the single-value return. * guix/packages.scm (package-output): Use 'derivation->output-path'. * guix/scripts/build.scm (guix-build): When the argument is 'derivation-path?', pass it through 'read-derivation'. Use 'derivation-file-name' to print out the .drv file names, and to register them. Use 'derivation->output-path' instead of 'derivation-path->output-path'. * guix/scripts/package.scm (roll-back): Adjust to the single-value return. (guix-package): Use 'derivation->output-path'. * guix/ui.scm (show-what-to-build): Adjust to deal with 'derivation?' objects instead of .drv file names. * gnu/system/grub.scm (grub-configuration-file): Use 'derivation->output-path' instead of 'derivation-path->output-path'. * gnu/system/vm.scm (qemu-image, system-qemu-image): Likewise. * tests/builders.scm, tests/derivations.scm, tests/packages.scm, tests/store.scm, tests/union.scm: Adjust to the new calling convention. * doc/guix.texi (Defining Packages, The Store, Derivations): Adjust accordingly. Ludovic Courtès
2013-09-18derivations: Add a nicer printer....* guix/derivations.scm (<derivation>): Add a printer. Ludovic Courtès
2013-09-17derivations: Keep the .drv file name in <derivation> objects....* guix/derivations.scm (<derivation>): Add 'file-name' field. (%read-derivation): Use (port-filename DRV-PORT) as the file name for the result. (derivation): Set the 'file-name' field in the result. * tests/derivations.scm ("build derivation with 1 source"): Assert that 'derivation-file-name' returns the right thing. Ludovic Courtès
2013-08-29gnu: linux-initrd: Allow Guile modules to be embedded in the initrd....* gnu/packages/linux-initrd.scm (raw-build-system): New macro. (module-package, compiled-module-package): New procedures. (expression->initrd): Add `modules' keyword parameter. Add "modules" and "modules/compiled" inputs; copy them onto the initrd. * guix/derivations.scm (imported-modules, compiled-modules): Publicize. Ludovic Courtès
2013-08-28derivations: Rename #:dependency-graphs to #:references-graphs....* guix/derivations.scm (derivation, build-expression->derivation): Rename #:dependency-graphs to #:references-graphs, for consistency in the terminology. * tests/derivations.scm: Adjust accordingly. Ludovic Courtès
2013-08-26derivations: Add #:dependency-graphs to `build-expression->derivation'....* guix/derivations.scm (build-expression->derivation): Add #:dependency-graphs keyword argument. Pass it to `derivation'. * tests/derivations.scm ("build-expression->derivation with #:dependency-graphs"): New test. * doc/guix.texi (Derivations): Update `build-expression->derivation' description. Ludovic Courtès
2013-08-26derivations: Add #:dependency-graphs `derivation' parameter....* guix/derivations.scm (derivation): Add `dependency-graphs' keyword parameter; honor it. * tests/derivations.scm (bootstrap-binary): New procedure. (%bash): Use it. (%mkdir): New variable. (directory-contents): Add `slurp' optional parameter. ("derivation with #:dependency-graphs"): New test. * doc/guix.texi (Derivations): Update accordingly. Ludovic Courtès
2013-08-26derivations: Move 3 positional parameters into keyword parameters....* guix/derivations.scm (derivation): Turn `system', `env-vars', and `inputs' into keyword parameters. (build-expression->derivation): Adjust accordingly. * gnu/packages/bootstrap.scm (%bootstrap-guile): Likewise. * tests/derivations.scm, tests/store.scm: Likewise. * doc/guix.texi (Derivations): Likewise. Ludovic Courtès
2013-07-03Use `port-sha256' and `open-sha256-port'....* guix/derivations.scm (derivation-hash): Add comment as to why we keep the plain `sha256' call. * guix/scripts/download.scm (guix-download): Use `port-sha256' instead of (compose sha256 get-bytevector-all). * guix/scripts/refresh.scm (update-package): Likewise. Ludovic Courtès
2013-07-01Move `sha256' to (guix hash)....* guix/utils.scm (sha256): Move to... * guix/hash.scm: ... here. New file. * Makefile.am (MODULES): Add it. * guix/derivations.scm, guix/scripts/download.scm, guix/scripts/hash.scm, guix/scripts/refresh.scm, tests/base32.scm, tests/derivations.scm, tests/store.scm: Use (guix hash). Ludovic Courtès
2013-06-14derivations: Micro-optimize `derivation-hash'....* guix/derivations.scm (derivation-hash): Use a UTF-8-encoded string output port. This makes things deterministic, and slightly faster. Ludovic Courtès
2013-04-17scripts: Report what will be substituted....* guix/derivations.scm (derivation-input-output-paths): New procedure. (derivation-prerequisites-to-build): New `use-substitutes?' keyword argument. Change two return the list of substitutable paths as a second argument. * guix/ui.scm (show-what-to-build): Turn `dry-run?' into a keyword argument. New `use-substitutes?' keyword argument. Use `fold2' and adjust to use both return values of `derivation-prerequisites-to-build'. Display what will/would be downloaded. * guix/scripts/build.scm (guix-build): Adjust accordingly. * guix/scripts/package.scm (guix-package): Likewise. * tests/derivations.scm ("derivation-prerequisites-to-build and substitutes"): New test. Ludovic Courtès
2013-03-16derivations: Optimize `build-expression->derivation'....This reduces the execution time of "guix build -e '(@ (gnu packages emacs) emacs)' -d" by 6%, from 1.15s to 1.08s. * guix/derivations.scm (build-expression->derivation): Write the builder as UTF-8. Ludovic Courtès
2013-03-16derivations: Optimize `write-derivation'....This reduces the execution time of "guix build -e '(@ (gnu packages emacs) emacs)' -d" by 25%, from 1.54 s. to 1.15s. * guix/derivations.scm (write-sequence, write-list, write-tuple): New procedures. (write-derivation)[list->string, write-list]: Remove. [write-string-list, write-output, write-input, write-env-var]: New helpers. Rewrite in terms of these new helpers. Ludovic Courtès
2013-02-20derivations: Add a search path parameter for module derivations....* guix/derivations.scm (imported-modules, compiled-modules): Add a `module-path' parameter. Use it instead of %LOAD-PATH. Ludovic Courtès