summaryrefslogtreecommitdiff
path: root/guix/gexp.scm
AgeCommit message (Collapse)Author
2020-01-04gexp: Add 'raw-derivation-file'.Ludovic Courtès
* guix/gexp.scm (<raw-derivation-file>): New record type. (raw-derivation-file-compiler): New gexp compiler. * tests/gexp.scm ("lower-gexp, raw-derivation-file") ("raw-derivation-file"): New tests.
2020-01-03gexp: 'gexp->script' marks its result as non-offloadable and non-substitutable.Ludovic Courtès
* guix/gexp.scm (gexp->script): Pass #:local-build? and #:substitutable? to 'gexp->derivation'.
2019-12-22gexp: Add system and target support to gexp->file.Mathieu Othacehe
* guix/gexp.scm (gexp->file): Add system and target arguments and pass them to gexp->derivation and load-path-expression calls, (scheme-file-compiler): adapt accordingly to pass system and target arguments.
2019-12-18gexp: Allow character literals in GEXP->SEXP.Marius Bakke
Fixes <https://bugs.gnu.org/38628>. * tests/gexp.scm ("lower-gexp, character literal"): New test. * guix/gexp.scm (gexp->sexp)[self-quoting?]: Add CHAR? to the tested types. * guix/repl.scm (self-quoting?): Likewise. * gnu/tests.scm (marionette-shepherd-service)[self-quoting?]: Likewise.
2019-11-30gexp: 'local-file' properly resolves non-literal relative file names.Ludovic Courtès
* guix/gexp.scm (local-file): Distinguish the case where FILE is a literal string and when it's not. Add a clause for when FILE is not a literal string. * tests/gexp.scm ("local-file, non-literal relative file name"): New test. * doc/guix.texi (G-Expressions): Update accordingly.
2019-10-27gexp: Cache the module to derivation mappings.Ludovic Courtès
This reduces the number of 'add-data-to-store' cache lookups from 3329 to 2743 (hit rate: 27% to 11%) when running: GUIX_PROFILING=add-data-to-store-cache guix build libreoffice -nd Execution time of "guix build libreoffice -nd" goes from 1.86s to 1.80s. * guix/gexp.scm (imported+compiled-modules): Wrap body in 'mcached'.
2019-10-27gexp: Add 'imported+compiled-modules'.Ludovic Courtès
* guix/gexp.scm (imported+compiled-modules): New procedure. (lower-gexp): Use it instead of separate calls to 'imported-modules' and 'compiled-modules'.
2019-10-14gexp: Use cross extensions when cross-compiling.Mathieu Othacehe
* guix/gexp.scm (load-path-expression): Use ungexp-splicing instead of ungexp-native-splicing so that the cross extensions are used when target is set.
2019-10-06Merge branch 'master' into core-updatesRicardo Wurmus
2019-10-03gexp: 'load-path-expression' produces an expression that deletes duplicates.Ludovic Courtès
Fixes <https://bugs.gnu.org/37531>. "herd eval root '(length %load-path)'" on a freshly-booted bare-bones system now returns 8 instead of 119 before. * guix/gexp.scm (load-path-expression): Rewrite expression to that it deletes duplicates.
2019-09-24Merge branch 'master' into core-updatesLudovic Courtès
2019-09-23gexp: Remove unused procedure.Ludovic Courtès
* guix/gexp.scm (syntax-location-string): Remove.
2019-09-23gexp: Catch and report non-self-quoting gexp inputs.Ludovic Courtès
Previously we would, for example, generate build scripts in the store; when trying to run them, we'd get a 'read' error due to the presence of #<foo> syntax in there. * guix/gexp.scm (gexp->sexp)[self-quoting?]: New procedure. [reference->sexp]: Check whether the argument in a <gexp-input> box is self-quoting. Raise a '&gexp-input-error' condition if it's not. * tests/gexp.scm ("lower-gexp, non-self-quoting input"): New test.
2019-07-31Merge branch 'master' into core-updatesMarius Bakke
2019-07-26gexp: 'program-file' honors the current system and cross-compilation target.Ludovic Courtès
Fixes <https://bugs.gnu.org/36813>. Reported by Jakob L. Kreuze <zerodaysfordays.sdf.org@sdf.org>. * guix/gexp.scm (program-file-compiler): Pass #:system and #:target to 'gexp->script'. (load-path-expression): Add #:system and #:target and honor them. (gexp->script): Likewise. * tests/gexp.scm ("program-file #:system"): New test. * doc/guix.texi (G-Expressions): Adjust accordingly.
2019-07-26gexp: 'compiled-modules' can cross-compile.Ludovic Courtès
* guix/gexp.scm (compiled-modules): Add #:target and honor it.
2019-07-17Merge branch 'master' into core-updatesLudovic Courtès
2019-07-15gexp: 'lowered-gexp-guile' now returns a <derivation-input>.Ludovic Courtès
* guix/derivations.scm (derivation-input-output-path): New procedure. * guix/gexp.scm (lower-gexp): Wrap GUILE in a <derivation-input>. (gexp->derivation): Adjust accordingly. * guix/remote.scm (remote-pipe-for-gexp, remote-eval): Adjust accordingly. * tests/gexp.scm ("lower-gexp"): Adjust accordingly.
2019-07-15gexp: <lowered-gexp> separates sources from derivation inputs.Ludovic Courtès
* guix/gexp.scm (lower-inputs): Return either <derivation-input> records or store items. (lower-reference-graphs): Return file/input pairs. (<lowered-gexp>)[sources]: New field. (lower-gexp): Adjust accordingly. (gexp->input-tuple): Remove. (gexp->derivation)[graphs-file-names]: Handle only the 'derivation-input?' and 'string?' cases. Pass #:sources to 'raw-derivation'; ensure #:inputs contains only <derivation-input> records. * guix/remote.scm (remote-eval): Adjust to the new <lowered-gexp> interface. * tests/gexp.scm ("lower-gexp"): Adjust to expect <derivation-input> records instead of <gexp-input>
2019-07-12Merge branch 'master' into core-updatesMarius Bakke
Conflicts: gnu/local.mk gnu/packages/python-xyz.scm gnu/packages/xml.scm guix/gexp.scm po/guix/POTFILES.in
2019-07-04gexp: Add 'lower-gexp' and express 'gexp->derivation' in terms of it.Ludovic Courtès
* guix/gexp.scm (gexp-input-thing, gexp-input-output) (gexp-input-native?): Export. (lower-inputs): Return <gexp-input> records instead of tuples. (lower-reference-graphs): Adjust accordingly. (<lowered-gexp>): New record type. (lower-gexp, gexp-input->tuple): New procedure. (gexp->derivation)[%modules]: Remove. [requested-graft?]: New variable. [add-modules]: New procedure. Rewrite in terms of 'lower-gexp'. (gexp-inputs): Add TODO comment. * tests/gexp.scm ("lower-gexp"): New test.
2019-06-17gexp: Remove #:pre-load-modules? parameter.Ludovic Courtès
* guix/gexp.scm (gexp->derivation): Remove #:pre-load-modules?. (compiled-modules): Likewise. Inline the case correspoding to PRE-LOAD-MODULES? = #t. * guix/packages.scm (patch-and-repack): Remove #:pre-load-modules?.
2019-04-04gexp: 'compiled-modules' loads modules before compiling them.Ludovic Courtès
This works around <https://bugs.gnu.org/15602> in the context of modules specified with 'with-imported-modules'. * guix/gexp.scm (gexp->derivation): Add #:pre-load-modules? parameter and pass it to 'compiled-modules'. (compiled-modules): Add #:pre-load-modules? parameter and honor it. * guix/packages.scm (patch-and-repack): Pass #:pre-load-modules? to 'gexp->derivation'.
2019-02-06monads, gexp: Prevent redefinition of syntax parameters.Ludovic Courtès
Fixes <https://bugs.gnu.org/27476>. This fixes multi-threaded compilation of this code where syntax parameters could end up being redefined and where a race condition could lead a thread to see the "wrong" value of the syntax parameter. * guix/monads.scm (define-syntax-parameter-once): New macro. (>>=, return): Use it. * guix/gexp.scm (define-syntax-parameter-once): New macro. (current-imported-modules, current-imported-extensions): Use it.
2019-01-07gexp: 'gexp->script' does not emit load-path expression when unnecessary.Ludovic Courtès
This removes two elements from %LOAD-PATH and %LOAD-COMPILED-PATH of the 'guix' command and thus further reduces the number of 'stat' calls it makes. * guix/gexp.scm (load-path-expression): Return #f when MODULES and EXTENSIONS are both empty. (gexp->script): Don't emit anything when SET-LOAD-PATH is #f.
2019-01-05gexp: Lowering a <computed-file> honors SYSTEM and TARGET.Ludovic Courtès
* guix/gexp.scm (computed-file-compiler): Pass #:system and #:target to 'gexp->derivation'. * tests/gexp.scm ("lower-object, computed-file, #:system"): New test.
2018-12-19Use 'mapm' instead of 'sequence' + 'map'.Ludovic Courtès
Previously we'd use the (sequence M (map P L)) idiom just because 'mapm' was slower (not specialized for the given monad). This is no longer the case since commit dcb95c1fc936d74dfdf84b7e59eff66cb99c5a63. * guix/gexp.scm (lower-inputs): Use (mapm M P L) instead of (sequence M (map P L)). (lower-references, gexp->sexp, imported-files): Likewise. * guix/profiles.scm (profile-derivation): Likewise. * guix/scripts/environment.scm (inputs->requisites): Likewise. * guix/scripts/system.scm (copy-closure): Likewise.
2018-11-29Merge branch 'master' into core-updatesMarius Bakke
2018-11-28derivations: Add properties.Ludovic Courtès
* guix/derivations.scm (derivation): Add #:properties parameter. [user+system-env-vars]: Honor it. (derivation-properties): New procedure. (build-expression->derivation): Add #:properties and pass it to 'derivation'. * guix/gexp.scm (gexp->derivation): Likewise. * tests/derivations.scm ("derivation-properties"): New test. * tests/gexp.scm ("gexp->derivation properties"): New test. * doc/guix.texi (Derivations, G-Expressions): Adjust accordingly.
2018-11-14Merge branch 'master' into core-updatesMarius Bakke
2018-11-12store: Add a functional object cache and use it in 'lower-object'.Ludovic Courtès
This leads to ~25% improvements on things like: guix system build desktop.tmpl --no-grafts -d * guix/store.scm (<nix-server>)[object-cache]: New field. * guix/store.scm (open-connection): Initialize it. (cache-object-mapping, lookup-cached-object, %mcached): New procedures. (mcached): New macro. * guix/gexp.scm (lower-object): Use it. * guix/grafts.scm (grafting?): New procedure.
2018-11-05Merge branch 'master' into core-updatesMarius Bakke
2018-10-27gexp: 'gexp-modules' now consistently deletes duplicates.Ludovic Courtès
Fixes <https://bugs.gnu.org/32966>. Reported by Clément Lassieur <clement@lassieur.org>. * guix/gexp.scm (gexp-attribute): Add 'equal?' optional parameter; pass it to 'delete-duplicates'. (gexp-modules)[module=?]: New procedure. Pass it to 'gexp-attribute'. * tests/gexp.scm ("gexp-modules deletes duplicates"): New test.
2018-10-21Merge branch 'master' into core-updatesMarius Bakke
2018-10-18services: dhcp-client: Deprecate 'dhcp-client-service' procedure.Ludovic Courtès
* gnu/services/networking.scm (dhcp-client-service-type): Add default value. * gnu/system/examples/bare-bones.tmpl: Use (service dhcp-client-service-type) instead of (dhcp-client-service). * gnu/system/examples/beaglebone-black.tmpl: Likewise. * gnu/tests/base.scm (%avahi-os): Likewise. * gnu/tests/databases.scm (%memcached-os): Likewise. (%mongodb-os): Likewise. * gnu/tests/dict.scm (%dicod-os): Likewise. * gnu/tests/mail.scm (%opensmtpd-os): Likewise. (%exim-os): Likewise. (%dovecot-os): Likewise. * gnu/tests/messaging.scm (run-xmpp-test): Likewise. (run-bitlbee-test): Likewise. * gnu/tests/monitoring.scm (%prometheus-node-exporter-os): Likewise. * gnu/tests/networking.scm (%inetd-os): Likewise. (run-iptables-test): Likewise. * gnu/tests/nfs.scm (%base-os): Likewise. * gnu/tests/rsync.scm (%rsync-os): Likewise. * gnu/tests/ssh.scm (run-ssh-test): Likewise. * gnu/tests/version-control.scm (%cgit-os): Likewise. (%git-http-os): Likewise. (%gitolite-os): Likewise. * gnu/tests/virtualization.scm (%libvirt-os): Likewise. * gnu/tests/web.scm (%httpd-os): Likewise. (%nginx-os): Likewise. (%varnish-os): Likewise. (%php-fpm-os): Likewise. (%hpcguix-web-os): Likewise. (%tailon-os): Likewise. * tests/guix-system.sh: Likewise. * doc/guix.texi (Networking Services): Document 'dhcp-client-service-type' and remove 'dhcp-client-service'.
2018-09-09Merge branch 'master' into core-updatesMarius Bakke
2018-09-08gexp: 'file-union' accepts directory names.Ludovic Courtès
* guix/gexp.scm (file-union): Import (guix build utils). Make the parent directories of TARGET. * tests/gexp.scm ("file-union"): New test.
2018-07-27gexp: Remove #:deprecation-warnings from 'imported-files'.Ludovic Courtès
This is a followup to 30d722c392960373bb45c3248d318ef6e248fb67. * guix/gexp.scm (imported-files/derivation): Remove #:deprecation-warnings. Pass "GUILE_WARN_DEPRECATED=no" unconditionally to #:env-vars of 'gexp->derivation'. Adjust caller. (imported-files): Remove #:deprecation-warnings and adjust callers. (imported-modules): Likewise. (compiled-modules, gexp->derivation): Adjust accordingly.
2018-07-27gexp: Inline bug-fix in 'compiled-modules'.Ludovic Courtès
This is a followup to 5d669883ecc104403c5d3ba7d172e9c02234577c. * guix/gexp.scm (compiled-modules)[build-utils-hack?]: Remove. Inline everything as if BUILD-UTILS-HACK? is true.
2018-07-26gexp: Remove backward compatibility hack for 'imported-files'.Ludovic Courtès
* guix/gexp.scm (gexp->derivation): Remove #:import-creates-derivation?. (imported-files): Remove #:derivation? and adjust callers. (imported-modules), compiled-modules): Likewise. * guix/packages.scm (patch-and-repack): Adjust 'gexp->derivation' call.
2018-07-19gexp: 'imported-files/derivation' can copy files instead of symlinking.Ludovic Courtès
* guix/gexp.scm (imported-files/derivation): Add #:symlink? and honor it. (imported-files): Pass #:symlink? to 'imported-files/derivation'. * tests/gexp.scm ("imported-files with file-like objects"): Add 'file=?' and use it instead of calling 'readlink'.
2018-07-19gexp: 'imported-files' no longer creates a derivation by default.Ludovic Courtès
* guix/gexp.scm (gexp->derivation): Add #:import-creates-derivation?. Pass #:derivation? to 'imported-modules' and 'compiled-modules'. In -L argument, check whether MODULES is a derivation. (%not-slash): New variable. (file-mapping->tree): New procedure. (imported-files): Rename to... (imported-files/derivation): ... this. (imported-files): New procedure. Rewrite in terms of 'interned-file-tree' when possible; add #:derivation? parameter. (imported-modules, compiled-modules): Add #:derivation? parameter and pass it to 'imported-files'. * guix/packages.scm (patch-and-repack): Pass #:import-creates-derivation? to 'gexp->derivation'. * tests/gexp.scm ("imported-files"): Adjust to no longer expect a derivation.
2018-07-19gexp: Remove unnecessary 'mlet'.Ludovic Courtès
* guix/gexp.scm (imported-modules): Use 'let' instead of 'mlet'.
2018-07-12gexp: Allow bytevector as content of `plain-file'.Jan Nieuwenhuizen
This allows for using a package source directly from git, doing something like (define (command->bytevector command) (let ((port (apply open-pipe* OPEN_READ command))) (let ((output (get-bytevector-all port))) (close-port port) output))) (define-public hello-git (package (name "hello") (version "git") (source (let* ((commit "stable-2.0") (content (command->bytevector `("git" "archive" "--format" "tar" "--prefix" ,(string-append commit "/") ,commit))) (file-name (string-append "hello-" commit))) (plain-file file-name content))) ... )) * guix/gexp.scm (<plain-file>): Also allow bytevector content. (plain-file-compiler): Handle bytevector content. * doc/guix.texi (G-Expressions): Describe plain-file now also taking bytevectors.
2018-06-01Merge branch 'master' into core-updatesLudovic Courtès
2018-06-01gexp: Add 'with-extensions'.Ludovic Courtès
* guix/gexp.scm (<gexp>)[extensions]: New field. (gexp-attribute): New procedure. (gexp-modules): Write in terms of 'gexp-attribute'. (gexp-extensions): New procedure. (gexp->derivation): Add #:effective-version. [extension-flags]: New procedure. Honor extensions of EXP. (current-imported-extensions): New syntax parameter. (with-extensions): New macro. (gexp): Honor CURRENT-IMPORTED-EXTENSIONS. (compiled-modules): Add #:extensions and honor it. (load-path-expression): Likewise. (gexp->script, gexp->file): Honor extensions. * tests/gexp.scm (%extension-package): New variable. ("gexp-extensions & ungexp") ("gexp-extensions & ungexp-splicing") ("gexp-extensions and literal Scheme object") ("gexp->derivation & with-extensions") ("program-file & with-extensions"): New tests. * doc/guix.texi (G-Expressions): Document 'with-extensions'.
2018-06-01gexp: 'compiled-modules' no longer overrides (guix build utils).Ludovic Courtès
Until now 'compiled-modules' would override (guix build utils) with its own. Thus, when asked to build a different (guix build utils), via #:module-path, it would fail badly because a (guix build utils) module was already loaded and possibly incompatible with the new one. This happened when running 'guix pull --branch=core-updates' from current master: in 'core-updates', (guix build utils) exports 'ignore-error?' but in 'master' it does not. Thus, 'guix pull' would fail with: no binding `invoke-error?' in module (guix build utils) builder for `/gnu/store/…-module-import-compiled.drv' failed with exit code 1 cannot build derivation `/gnu/store/…-compute-guix-derivation.drv': 1 dependencies couldn't be built This patch fixes it. * guix/gexp.scm (compiled-modules)[build-utils-hack?]: New variable. [build]: Load MODULES/build/utils.scm when it exists.
2018-05-17Merge branch 'master' into core-updatesMark H Weaver
2018-05-15gexp: Disable deprecation warnings for 'imported-modules'.Ludovic Courtès
Fixes <https://bugs.gnu.org/31450>. Reported by Martin Castillo <castilma@uni-bremen.de>. * guix/gexp.scm (gexp->derivation): Pass #:deprecation-warnings to 'imported-modules'. (imported-files): Add #:deprecation-warnings and pass #:env-vars to 'gexp->derivation'. (imported-modules): Add #:deprecation-warnings and pass it to 'imported-files'.
2018-04-11Merge branch 'master' into core-updatesMark H Weaver