summaryrefslogtreecommitdiff
path: root/guix/derivations.scm
AgeCommit message (Expand)Author
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
2013-01-30derivations: Memoize `read-derivation'....* guix/derivations.scm (read-derivation): Rename to... (%read-derivation): ... this. (read-derivation): New procedure. This reduces the execution of "guix-build gdb" from 2.5s to 1.7s. Ludovic Courtès
2013-01-30store: Remove the `fixed?' parameter from `add-to-store'....* guix/store.scm (add-to-store): Remove the `fixed?' parameter from the public interface. * gnu/packages/bootstrap.scm, guix-download.in, guix/derivations.scm, guix/packages.scm, tests/derivations.scm: Update all callers accordingly. Ludovic Courtès
2013-01-16doc: Start documenting derivations....* doc/guix.texi (Defining Packages): Add cross-reference to "Derivations". (The Store): Add `build-derivations'. (Derivations): Populate. Ludovic Courtès
2013-01-09derivations: Fix `derivation-prerequisites-to-build' when outputs are there....Before it would list inputs not built, even if the outputs of the given derivation were already available. * guix/derivations.scm (derivation-prerequisites-to-build): Add `outputs' keyword parameter. [built?, derivation-built?]: New procedures. [loop]: Add `sub-drvs' parameter. Use `derivation-built?' to check if the SUB-DRVS of DRV are built before checking its inputs. Ludovic Courtès
2013-01-06Update license headers....Change all license headers, except guix/build/* and ld-wrapper.scm, with this code: (use-modules (guix build utils) (srfi srfi-1)) (fluid-set! %default-port-encoding "UTF-8") (substitute* (remove (lambda (f) (or (string-contains f ".tar.") (string-contains f ".git/") (string-contains f ".so") (string-suffix? ".o" f) (string-suffix? ".a" f) (string-suffix? ".go" f) (string-suffix? ".pdf" f) (string-suffix? ".png" f) (string-suffix? ".info" f) (equal? (basename f) "guix-daemon") (equal? (basename f) "nix-setuid-helper") (string-contains f "nix-upstream/") (string-contains f "distro/packages/bootstrap/"))) (find-files "." "\\.[a-z]+$")) (("^([[:graph:]]+) This file is part of Guix." _ comment-start) (string-append comment-start " This file is part of GNU Guix.")) (("^([[:graph:]]+) Guix --- Nix package management.*" _ comment-start) (string-append comment-start " GNU Guix --- Functional package management for GNU\n")) (("^([[:graph:]]+) Guix is " _ comment-start) (string-append comment-start " GNU Guix is ")) (("^([[:graph:]]+) along with Guix." _ comment-start) (string-append comment-start " along with GNU Guix.")) (("^([[:graph:]]+) Copyright \\(C\\)" _ comment-start) (string-append comment-start " Copyright ©"))) Change headers using C-style comments manually. Ludovic Courtès
2013-01-05derivations: Add `derivation-path->output-paths'....* guix/derivations.scm (derivation-path->output-paths): New procedure. * tests/derivations.scm ("multiple-output derivation"): Test it. Ludovic Courtès
2012-12-10derivations: Distinguish direct store paths from files within a store path....* guix/derivations.scm (derivation)[direct-store-path?]: New procedure. Use it to determine which inputs must be added to the store. Ludovic Courtès
2012-12-04derivations: Fix erroneous call to `add-to-store' for local files as input....* guix/derivations.scm (derivation)[inputs]: Fix typo in call to `add-to-store'. * tests/derivations.scm ("derivation with local file as input"): New test. * tests/packages.scm ("trivial with local file as input"): New test. Ludovic Courtès
2012-11-11Move base32 code to (guix base32)....* guix/utils.scm (bytevector-quintet-ref, bytevector-quintet-ref-right, bytevector-quintet-length, bytevector-quintet-fold, bytevector-quintet-fold-right, make-bytevector->base32-string, %nix-base32-chars, %rfc4648-base32-chars, bytevector->base32-string, bytevector->nix-base32-string, bytevector-quintet-set!, bytevector-quintet-set-right!, base32-string-unfold, base32-string-unfold-right, make-base32-string->bytevector, base32-string->bytevector, nix-base32-string->bytevector): Move to... * guix/base32.scm: ... here. New file. * tests/utils.scm (%nix-hash, "bytevector->base32-string", "base32-string->bytevector", "nix-base32-string->bytevector", "sha256 & bytevector->base32-string"): Move to... * tests/base32.scm: ... here. New file * guix-download.in, guix/derivations.scm, guix/packages.scm, guix/snix.scm, tests/builders.scm, tests/derivations.scm: Adjust accordingly. * guix.scm (%public-modules): Add `base32'. Ludovic Courtès
2012-11-09derivations: build-expression->derivation: Builder only refers to sources....* guix/derivations.scm (build-expression->derivation)[source-path]: New procedure. [builder]: Pass only sources as references. This fixes a bug whereby changing a fixed-output drv referred to by a builder would cause the builder's hash to change, thereby leading to a full rebuild. * tests/derivations.scm ("build-expression->derivation with a fixed-output input"): New test. Ludovic Courtès
2012-10-25derivations: Make sure `build-expression->derivation' & co. pass `system'....* guix/derivations.scm (imported-files): Call `build-expression->derivation' with SYSTEM, not (%current-system). (build-expression->derivation): Pass SYSTEM to `imported-modules' and `compiled-modules'. Ludovic Courtès
2012-10-25derivations: Pass the derivation of guile-for-build to `imported-files' & co....* guix/derivations.scm (%guile-for-build): Initialize to #f. (imported-files, imported-modules, compiled-modules): Add `guile' keyword parameter. Pass it down to `build-expression->derivation'. (build-expression->derivation)[guile-drv]: New variable. Pass it as the #:guile parameter for `imported-modules' and `compiled-modules'. * tests/derivations.scm: Set %GUILE-FOR-BUILD to the derivation of %BOOTSTRAP-GUILE. Ludovic Courtès
2012-10-24derivations: Compile the #:modules passed to `build-expression->derivation'....* guix/derivations.scm (imported-files)[parent-dirs]: Move to... (parent-directories): ... here. New procedure. (compiled-modules): New procedure. (build-expression->derivation): Use it. * tests/derivations.scm ("build-expression->derivation with modules"): New test. Ludovic Courtès
2012-10-07derivations: Set input port to UTF-8 in `read-derivation'....* guix/derivations.scm (read-derivation): Set DRV-PORT's encoding to UTF-8. Ludovic Courtès
2012-09-02Optimize `write-derivation' and `derivation-path->output-path'....* guix/derivations.scm (write-derivation): Explicitly use `simple-format'. (derivation-path->output-path): Memoize. Ludovic Courtès
2012-09-01Add a `guile-for-build' parameter to `build-expression->derivation'....* guix/derivations.scm (%guile-for-build): Use `nixpkgs-derivation*' instead of `nixpkgs-derivation'. (build-expression->derivation): New `guile-for-build' keyword parameter. Use it. Ludovic Courtès
2012-09-01Add an `env-vars' keyword parameter to `build-expression->derivation'....* guix/derivations.scm (build-expression->derivation): New `env-vars' keyword parameter; default to '(). Use it. Ludovic Courtès
2012-07-07Unset `LD_LIBRARY_PATH' in `build-expression->derivation'....* guix/derivations.scm (build-expression->derivation)[prolog]: Unset `LD_LIBRARY_PATH'. Ludovic Courtès
2012-07-02derivation: Coalesce multiple occurrences of the same input....* guix/derivations.scm (write-derivation)[coalesce-duplicate-inputs]: New procedure. Use it to process INPUTS. * tests/derivations.scm ("user of multiple-output derivation"): New test. Ludovic Courtès
2012-07-02derivation: Move sorting code to `write-derivation'....* guix/derivations.scm (write-derivation): Sorte OUTPUTS, INPUTS, SOURCES, and ENV-VARS alphabetically. (derivation-hash): Leave INPUTS, SOURCES, and OUTPUTS unsorted. (derivation)[env-vars-with-empty-outputs]: Leave ENV-VARS unsorted. Ludovic Courtès
2012-07-02Fix `derivation-hash' for outputs not sorted alphabetically....* guix/derivations.scm (derivation-hash): Reorder OUTPUTS. * tests/derivations.scm ("multiple-output derivation, non-alphabetic order"): New test. Ludovic Courtès
2012-07-01Add `derivation-prerequisites' and `derivation-prerequisites-to-build'....* guix/derivations.scm (derivation-prerequisites, derivation-prerequisites-to-build): New procedures. * tests/derivations.scm ("build-expression->derivation and derivation-prerequisites", "build-expression->derivation and derivation-prerequisites-to-build"): New tests. Ludovic Courtès
2012-06-29derivation: Remove duplicate inputs....* guix/derivations.scm (derivation): Remove duplicates from INPUT. Ludovic Courtès
2012-06-17build-expression->derivation: Move module forms at the top-level....* guix/derivations.scm (build-expression->derivation)[module-form?]: New procedure. [prologue]: Add any form of EXP that matches MODULE-FORM?. [builder]: Remove any MODULE-FORM? from EXP. Ludovic Courtès
2012-06-16build-expression->derivation: Have the build fail when EXP returns #f....* guix/derivations.scm (build-expression->derivation)[builder]: Pass the result of EXP to `exit'. * tests/derivations.scm ("build-expression->derivation with expression returning #f"): New test. Ludovic Courtès
2012-06-13Change `build-expression->derivation' to support sub-derivation inputs....* guix/derivations.scm (build-expression->derivation): Change to expect INPUTS to have the form (NAME DRV-PATH SUB-DRV) or (NAME DRV-PATH), instead of (NAME . DRV-PATH). Update callers accordingly. * guix/gnu-build-system.scm, tests/builders.scm, tests/derivations.scm: Update accordingly. Ludovic Courtès