Fixes <http://bugs.gnu.org/15187>.
Reported by Mark H. Weaver <mhw@netris.org>.
* gnu/packages/linux.scm (module-init-tools): Remove reference to
Gentoo's pre-built man pages and 'unpack-man-pages' phase. Add
'fake-docbook' phases.
* gnu/system/dmd.scm (static-networking-service)[start]: Sleep before
running 'route', to leave time for the interface to come up.
[stop]: Run "route del -net default".
* gnu/system/vm.scm (qemu-image): Change the store's mode to #o1775.
Support 'populate' clauses that specify a UID and GID.
(system-qemu-image): Make sure /nix/store has owner 'root' and group
'guixbuild'. Set the right owner for /home/guest. Create
/var/nix/profiles/per-user/{root,guest}.
* gnu/system/shadow.scm (guix-build-accounts): New procedure.
* gnu/system/vm.scm (system-qemu-image): Use it. Add the "guixbuild"
group.
* gnu/system/dmd.scm (guix-service): Add 'builder-group' parameter.
Pass 'guix-daemon' the '--build-users-group' option.
* scripts/guix.in: Change '-s' to '--no-auto-compile'. This avoids
annoying messages about auto-compilation, and avoids permission denied
issues when running without write access in the usual places.
* gnu/system/vm.scm (system-qemu-image): Add a "guest" user and a
"users" user group. Make /home/guest. Add /etc/group. Update
/etc/issue to mention it.
* guix/build-system/trivial.scm (trivial-build): When SOURCE is true,
add it to INPUTS.
(trivial-cross-build): Likewise.
* tests/packages.scm ("trivial with source"): New test.
* guix/scripts/package.scm (switch-to-previous-generation): New function.
(roll-back): Use the new function instead of 'switch-link'.
(show-help): Add '--delete-generations'.
(%options): Likewise.
(guix-package)[process-actions]: Add 'current-generation-number',
'display-and-delete', and 'delete-generation'. Add support for
'--delete-generations', and reindent the code.
* tests/guix-package.sh: Test '--delete-generations'.
* doc/guix.texi (Invoking guix-package): Document '--delete-generations'.
* gnu/system/vm.scm (system-qemu-image): Use
'static-networking-service'. Add /etc/resolv.conf. Add Inetutils to
the profile.
* gnu/system/dmd.scm (static-networking-service): New procedure.
* gnu/system/dmd.scm (host-name-service): New procedure.
(mingetty-service): Require the 'host-name' service.
* gnu/system/vm.scm (system-qemu-image): Add the 'host-name' service.
Set PS1 in /etc/bashrc to something sensible.
* gnu/system/vm.scm (system-qemu-image): Build a 'motd' and an 'issue'
file. Pass 'unix-pam-service' that motd. Have /etc/issue point to
the 'issue' file.
* gnu/system/vm.scm (qemu-image): Add Guix as an input when
INITIALIZE-STORE?.
(union): New procedure.
(system-qemu-image): Use it. Build /etc/profile. Pass PROFILE among
#:inputs-to-copy instead of listing all the individual profiles.
Remove explicit 'build-derivations' call.
* gnu/system/vm.scm (expression->derivation-in-linux-vm)[input-alist]:
Add case for derivation? objects.
Same for #:inputs values.
(qemu-image)[input->name+derivation]: Likewise.
* guix/scripts/package.scm (guix-package)[process-query]: Show that a
generation is the current one if the profile points to it.
* tests/guix-package.sh: Test it.
* guix/scripts/package.scm (guix-package)[process-query]: Change
'list-generation' to not list the zeroth generation.
* tests/guix-package.sh: Test it.
* doc/guix.texi (Invoking guix package): Document it, and use the
right term when talking about generations.
* guix/scripts/package.scm (guix-package)[process-query]: Exit with 1
when a generation does not exist or the profile points to the zeroth
generation.
* tests/guix-package.sh: Test the former case.
* gnu/packages/fontutils.scm (fontconfig): Add gs-fonts as an input and
register it in the configuration file; so any porgram using fontconfig
should at least have the gs-fonts at its disposal.
This fixes a bug whereby 'guix-register' would bail out when trying to
create NIX_STORE_DIR/.links when NIX_STORE_DIR is read-only.
* nix/guix-register/guix-register.cc (parse_opt): Initialize
'settings.nixStore' to PREFIX + NIX_STORE_DIR.
(main): Change 'settings.nixStore' once the 'LocalStore' has been
instantiated.
* nix/guix-register/guix-register.cc (prefix): New variable.
(parse_opt): Use it.
(register_validity): Change 'info.path' to the final store name.
Hash the final under its real path.
* tests/guix-register.sh: Adjust the contents of $closure accordingly.
Rename 'NIX_LOCALSTATE_DIR' to 'NIX_STATE_DIR'. Don't try to call
'valid-path?'. Add test using 'sqlite3'.
* build-aux/list-packages.scm (package->sxml): Add parameters previous,
description-ids and remaining, update docstring accordingly. Introduce logic
for fold-values process.
(insert-tr): Moved sxml package table-row generation to new function; remove
<a> elements and JS function calls. These are created through JS
(prep_pkg_descs). Add insert-js-call for every 15th package, and the last.
(insert-js-call): New function.
(packages->sxml): Change map to fold values; add init params.
(insert-js): show_hide: add compatibility check, introduce, use thingLink
prep: new JS function.
bulk_show_hide: new JS function.
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
Suggested by Andreas Enge <andreas@enge.fr>.
* guix/scripts/package.scm (guix-package)[list-generations,
list-installed]: Reverse the result of 'manifest-packages'.
* doc/guix.texi (Invoking guix package): Document the order of packages
for '--list-generations' and '--list-installed'.
* build-aux/hydra/gnu-system.scm (package->alist): Call
'derivation-file-name' on the result of 'package-derivation'.
* build-aux/hydra/guix.scm (package->alist): Likewise.
* build-aux/hydra/guix.scm (tarball-package): Add 'nix-checkout'
parameter. Replace 'patch-bootstrap-script' phase by
'set-nix-module'.
(hydra-jobs): Get the 'nix' value from ARGUMENTS, and pass it to
'tarball-package'.
* 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.
* 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.
* guix/scripts/package.scm (profile-numbers): Rename to 'generation-numbers'.
(previous-profile-number): Rename to 'previous-generation-number'.
(profile-number): Rename to 'generation-number'.
(roll-back): Rename 'previous-profile' to 'previous-generation'.
Fixes compilation with the forthcoming libgcrypt 1.6.x.
Reported by Matthias Wachs <wachs@net.in.tum.de>
and NIIBE Yutaka <gniibe@fsij.org>.
* nix/libutil/gcrypt-hash.cc (guix_hash_init, guix_hash_final): Use
'int' as the type of the 'algo' parameter.
* nix/libutil/gcrypt-hash.hh: Update declarations accordingly.
* gnu/system/vm.scm (example2): Use 'pam-services->directory'. Change
POPULATE to create /etc/pam.d, /etc/login.defs, and /var/run. Change
BOOT to spawn syslogd; boot to Bash. Add inputs.
* gnu/packages/linux.scm (<pam-service>, <pam-entry>): New record
types.
(pam-service->configuration, pam-services->directory,
unix-pam-service): New procedures.
(%pam-other-services): New variable.
* guix/store.scm (add-text-to-store): Make 'references' optional.
* tests/store.scm ("dead-paths", "references"): Use 'add-text-to-store'
with no optional argument.
* doc/guix.texi (The Store): Adjust accordingly.
* gnu/system/vm.scm (/etc/passwd): Rename to...
(passwd-file): ... this. Add 'shadow?' keyword parameter. Change
format of ACCOUNTS, and fix CONTENTS.
(example2): Adjust accordingly. Create both /etc/shadow and
/etc/passwd, the latter being used by getpwnam(3) & co. when nscd is
not running.
to compile with Python 2 instead of the default Python 3.
* guix/build-system/python.scm (default-python2, package-with-explicit-python,
package-with-python2): New procedures.
* guix/build-system/python.scm (python2-pytz, python2-babel): Use
package-with-python2.
* build-aux/hydra/gnu-system.scm (%core-packages): New variable.
(%packages-to-cross-build): Make an alias for %CORE-PACKAGES.
(hydra-jobs): Check for the 'subset' argument, and honor it for values
"all" and "core".
* gnu/packages/grub.scm (<menu-entry>): New record type.
(grub-configuration-file): New procedure.
* gnu/system/vm.scm (qemu-image): Remove parameters 'linux',
'linux-arguments', and 'initrd'. Add 'grub-configuration' parameter.
Honor them, and remove grub.cfg generation code accordingly.
(example2): Use `grub-configuration-file', and adjust accordingly.
* gnu/system/vm.scm (qemu-image): Add 'populate' keyword parameter and
honor it; make it an input.
(/etc/shadow): New procedure.
(example2): Call it; build 'populate' script, and pass it to
'qemu-image'.
* gnu/system/vm.scm (qemu-image): Use (guix build linux-initrd). Remove
'mknod' calls; use 'make-essential-device-nodes' to populate /dev on
the target image.
* gnu/packages/linux-initrd.scm (qemu-initrd): When /root/dev exists,
don't call 'make-essential-device-nodes'.
* gnu/packages/python.scm (pytz): Rename this ...
* gnu/packages/python.scm (python-pytz): ... to this
* gnu/packages/python.scm (python2-pytz): New variable, input python-2.
* gnu/packages/python.scm (babel): Rename this ...
* gnu/packages/python.scm (python-babel): ... to this
* gnu/packages/python.scm (python2-babel): New variable, input python-2.
build system (switches to Python 3) and compute python-version instead of
passing it as a parameter.
* guix/build-system/python.scm (default-python): Switch to python-wrapper.
* guix/build-system/python.scm (python-build): Drop parameter #:python-version.
* guix/build/python-build-system.scm (wrap): Compute python version from input.
* guix/scripts/substitute-binary.scm (guix-substitute-binary)["--substitute"]:
Show the Nar size, when available.
* guix/ui.scm (show-what-to-build): Add 'TODO'.
This significantly reduces I/O when building profiles, especially with
lots of package-specific sub-directories (such as 'share/emacs/24.3',
'texmf', etc.)
* guix/build/union.scm (union-build)[file-tree](others-have-it?): New
procedure. Use it in the 'enter?' parameter of 'file-system-fold';
change 'skip' parameter accordingly.
* tests/union.scm ("union-build"): Ensure that 'include' is a symlink
and 'bin' is a directory.
* gnu/packages/python.scm (python-2): Rename this to...
* gnu/packages/python.scm (python): ...this, rename this to...
* gnu/packages/python.scm (python-3): ...this. Reverts to version 2 as the
default input for packages requiring Python.
* gnu/system/vm.scm (qemu-image): Add #:inputs-to-copy and
#:boot-expression parameters. Honor them. Append INPUTS-TO-COPY to
the #:inputs argument for `expression->derivation-in-linux-vm'.
(example2): Add #:boot-expression and #:inputs-to-copy arguments.
* gnu/packages/linux-initrd.scm (qemu-initrd): Add (guix build utils) to
#:modules, and use it. Copy .scm and .go files to /root.
* guix/build/linux-initrd.scm (bind-mount): New procedure.
Fixes <http://bugs.gnu.org/15194>.
Reported by Mark H Weaver <mhw@netris.org>.
* gnu/packages/patches/hop-bigloo-4.0b.patch: New file.
* gnu-system.am (dist_patch_DATA): Add it.
* gnu/packages/scheme.scm (hop): Use it.
* doc/guix.texi: Add second copyright notice again inside @ifinfo, needed
since the first one does not appear in the info output.
Partially undoes commit da7cabd.
This undoes commit 575ed8d ("doc: Create own Makefile.am in subdirectory."),
and fixes a bug whereby "make pdf" or "make ps" wouldn't do anything.
* doc/Makefile.am: Remove.
* doc.am: New file. Use `-local' rules to build the image.
* Makefile.am: Include it.
* configure.ac: Use `-Woverride' to avoid undesired overridding of
Automake rules.
* gnu/packages/linux-initrd.scm (qemu-initrd): Add #:modules argument.
Factorize and move some of the code to...
* guix/build/linux-initrd.scm: ... here. New file.
* Makefile.am (MODULES): Add it.
* guix/derivations.scm (derivation, build-expression->derivation):
Rename #:dependency-graphs to #:references-graphs, for consistency in
the terminology.
* tests/derivations.scm: Adjust accordingly.
* 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.
Fixes <http://bugs.gnu.org/15182>.
Reported by Mark H Weaver <mhw@netris.org>.
* guix/download.scm (%mirrors)[kernel.org]: Add ftp.be.debian.org and
mirror.linux.org.au.
* guix/build/gnu-dist.scm: New file.
* Makefile.am (MODULES): Add it.
* guix/build-system/gnu.scm (%default-modules): New variable.
(gnu-build): Use it.
(dist-package): New procedure.
* guix/packages.scm (package-source-derivation): Add cases for SOURCE as
a store path or user file.
* tests/packages.scm ("package-source-derivation, file",
"package-source-derivation, store path"): New tests.
This fixes Guile version comparisons when (version) has a
vendor-specific suffix.
Reported by Andreas Enge <andreas@enge.fr>.
* guix/utils.scm (guile-version>?): New procedure.
* tests/utils.scm ("guile-version>? 1.8", "guile-version>? 10.5"): New
tests.
* guix/scripts/substitute-binary.scm (fetch, progress-report-port): Use
`guile-version>?' instead of `version>?'.
* guix/http-client.scm (when-guile<=2.0.5, http-fetch): Likewise.
* guix/scripts/substitute-binary.scm (fetch): In the `file' case, open
with the `b' flag, so that the coding cookie reading thing doesn't
lead to buffering some of the data (on 2.0.5).
* tests/utils.scm ("filtered-port, file"): Open with `r0b'. Fixes a
test failure with Guile 2.0.5 whereby the first byte of FILE would be
missing from DECOMPRESSED.
Before that, the ‘guile’ binary from ‘guile-static-stripped’ would abort
as it tries and fails to open an iconv descriptor for ISO-8859-1.
* gnu/packages/patches/guile-default-utf8.patch: Add missing hunk for
Guile 2.0.9.
* gnu/packages/scheme.scm (bigloo): Update to 4.0b. Patch the
`configure-gc' scripts. Remove `patch-absolute-file-names' phase.
* gnu/packages/patches/bigloo-gc-shebangs.patch: Adjust to new version.
* gnu/packages/qemu.scm (qemu-kvm): Remove.
(qemu): Incorporate parts of QEMU-KVM that used to be inherited.
(qemu-kvm/smb-shares): Rename to...
(qemu/smb-shares): ... this.
* gnu/system/vm.scm (expression->derivation-in-linux-vm): Adjust
accordingly.
* build-aux/list-packages.scm (package->sxml)[license, status]: Add
title for <a> element.
Add alt and title for gnu-logo <img> element. Add title to package
website <a> element.
(packages->sxml): Wrap <div id="intro"> intro paragraph in <p> element.
Add table header row to <table id="packages">
Add <a> back to top of the page beneath table.
(insert-css, insert-js): New procedures.
(list-packages): Move JavaScript to 'insert-js', and CSS to 'insert-css'.
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* build-aux/list-packages.scm (package-logo): Assign class of
'package-description' to package synopsis div; 'package-logo'. Move inline
CSS where possible.
(packages->sxml): Assign id of 'intro' to intro div, 'packages' to the
table. Move inline CSS.
(list-packages): Create new <style> section, containing all inline CSS.
Move JavaScript <script> section to above banner include to place it in
<head>.
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* README (Requirements): Remove Nixpkgs. Remove mentions of building
from Git.
(Installation): Refer to the manual.
* HACKING: List requirements for when building from Git.
Remove the `dot: Command not found' error.
Fixes <http://bugs.gnu.org/14851>.
Reported by Andreas Enge <andreas@enge.fr>.
* gnu/packages/linux.scm (linux-libre-urls): New procedure.
(linux-libre-headers, linux-libre): Use it.
* doc/guix.texi (Adding New Packages): New section.
(Packaging Guidelines): Make a subsection thereof.
(From the Source Tarball to the Package): New subsection.
(Contributing): Link to "Adding New Packages".
(Package Modules): Link to modules in Guile's manual.
* srfi/srfi-37.scm.in: New file, taken from Guile 2.0.9.
* m4/guix.m4: New macro.
* configure.ac: Use it. Define Automake conditional `INSTALL_SRFI_37'.
* Makefile.am (nobase_nodist_guilemodule_DATA)[INSTALL_SRFI_37]: Add
srfi/srfi-37.scm.
(GOBJECTS)[INSTALL_SRFI_37]: Add srfi/srfi-37.go.
(srfi/srfi-37.scm)[INSTALL_SRFI_37]: New target.
(EXTRA_DIST): Add srfi/srfi-37.scm.in.
* gnu/packages/version-control.scm (subversion): Use the http:// URL
to work around <http://bugs.gnu.org/14884>. Reported by Mark Weaver
and Andreas Enge.
* build-aux/list-packages.scm (package->sxml)[status]: New procedure.
Use it at the end of each description.
(packages->sxml): Add link to hydra.gnu.org.
* build-aux/hydra/gnu-system.scm (hydra-jobs): Pick all the `system'
keys in ARGUMENTS.
[cross-jobs]: Turn into a procedure, with a `system' parameter.
Build packages for all of SYSTEMS and %CROSS-TARGETS.
* guix/scripts/package.scm (guix-package)[process-actions](same-package?):
New procedure. Use it instead of `alist-delete' when filtering out
duplicate packages from the profile.
This fixes a bug whereby a command like
guix package -e '(@@ (gnu packages base) gnu-make-boot0)'
would only succeed when the outputs of that package are available, and
otherwise fail with "/nix/store/... is not valid".
* guix/scripts/package.scm (guix-package)[process-action](package->tuple):
Leave P as is in the result. Move `package->tuple' call from INSTALL*
to INSTALL.
* guix/gnu-maintenance.scm (latest-release): Add `ftp-close' and
`ftp-open' keyword parameters.
* guix/scripts/package.scm (ftp-open*): New variable.
(check-package-freshness): Call `latest-release' with `ftp-open*' and
a no-op procedure.
* gnu-system.am (dist_patch_DATA): Add it.
* gnu/packages/patches/plotutils-libpng-jmpbuf.patch: New file.
* gnu/packages/plotutils.scm (plotutils): Add
`plotutils-libpng-jmpbuf.patch' as an input, and apply it.
* guix/scripts/substitute-binary.scm (%regexp-exec-mutex, string->uri):
Remove.
(regexp-exec): Replace this global binding by a thread-safety wrapper.
(fields->alist): Remove `with-mutex', and directly alias `recutils->alist'.
* guix/gnu-maintenance.scm (%gsrc-package-list-url): New variable.
(<gnu-package-descriptor>): Add `doc-description' field.
(official-gnu-packages)[group-package-fields]: Rename to...
[read-records]: ... this. Reverse the result.
[gsrc-description]: New procedure.
Add the "description" field to the alist passed to `alist->record'.
* guix/records.scm (%recutils-plus-rx): New variable.
(recutils->alist): Use it to read + lines.
* tests/records.scm ("recutils->alist with + lines"): New test.
* guix/gnu-maintenance.scm (official-gnu-packages)[group-package-fields]:
Rewrite in terms of `recutils->alist'. Remove `state' parameter.
Specify "doc-url" and "language" as multiple-value keys in the
`alist->record' call.
* guix/records.scm (%recutils-field-rx): New variable.
(recutils->alist): New procedure, formerly known as `fields->alist'.
* guix/scripts/substitute-binary.scm (fields->alist): Use it.
* tests/records.scm ("recutils->alist"): New test.
* tests/packages.scm ("package-field-location"): Check the result of
`read-at' against both VALUE and (FIELD VALUE).
Reported by Matthew Lien - 練喆明" <bluet@bluet.org>.
* gnu/packages/gettext.scm (gettext): Upgrade to 0.18.3.
Remove patch. Change `patch-tests' phase to use (which "sh'); keep it
regardless of whether we're cross compiling.
* doc/guix.texi (Package Modules): New node, with material formerly
under "GNU Distribution".
(Bootstrapping): New node.
* Makefile.am (EXTRA_DIST): Add doc/images/bootstrap-graph.dot and
doc/images/bootstrap-graph.eps.
(infoimagedir, dist_infoimage_DATA, DOT_OPTIONS): New variable.
(.dot.png, .dot.eps, doc/guix.pdf, doc/guix.info, doc/guix.ps): New
targets.
* doc/images/bootstrap-graph.dot: New file.
* gnu/packages/qemu.scm (qemu-kvm): Add `--cc' configure option.
Add PIXMAN and ALSA-LIB as inputs.
(qemu): Upgrade to 1.5.1 Remove autotool hack for pixman. Patch
tests/libqtest.c. Remove Autoconf, Automake, and Libtool from the
inputs. Fix `home-page'.
* 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.
* guix/hash.scm (GCRY_MD_SHA256): New macro.
(sha256): Use it.
(open-sha256-md, md-write, md-read, md-close, open-sha256-port,
port-sha256): New procedures.
* tests/hash.scm: New file.
* Makefile.am (SCM_TESTS): Add it.
* gnu/packages/lsh.scm (liboop): Fix home page. Improve `synopsis' and
`description'. Thanks to carl hansen <carlhansen1234@gmail.com>, who
raised it on bug-gsrc@gnu.org.
Reported by Nikita Karetnikov and Cyril Roelandt.
* guix/ui.scm (show-what-to-build): Call `substitutable-path-info'
only when USE-SUBSTITUTES? is true.
* guix/web.scm (open-socket-for-uri): New procedure.
(http-fetch): Add `port' keyword parameter; use it.
* guix/scripts/substitute-binary.scm (%random-state): New variable.
(with-timeout): Wait a little before retrying.
(fetch): Use `open-socket-for-uri', and keep a copy of the socket in
variable `port'. Close PORT upon timeout.
* gnu/packages/patches/gnutls-fix-tests-on-32-bits-system.patch: New file.
* gnu-system.am: Add it here...
* gnu/packages/gnutls.scm (gnutls): ... and use it here.
Thanks to Nikos Mavrogiannopoulos for providing this patch:
http://permalink.gmane.org/gmane.comp.encryption.gpg.gnutls.devel/6778
* gnu/packages/cross-base.scm (gcc-configure-flags-for-triplet): Move to...
* gnu/packages/gcc.scm (gcc-configure-flags-for-triplet): ... here. New
procedure.
(gcc-4.7): Use it when (%current-target-system) is true.
* gnu/packages/cross-base.scm (gcc-configure-flags-for-triplet): New
procedure.
(cross-gcc): Use it.
(xgcc-mips64el): Use *-gnuabi64 instead of the N32 ABI.
* gnu/packages/bootstrap.scm (glibc-dynamic-linker): Determine SYSTEM
based on (%current-target-system) when it's true.
* gnu/packages/cross-base.scm (cross-gcc): Directly call
(package-arguments gcc-4.7) from the body of `arguments'.
* gnu/packages/make-bootstrap.scm (package-with-relocatable-glibc): Turn
`inputs' into a thunk. Add `native-inputs', and pass it to
`package-with-explicit-inputs'.
(%static-inputs): Add %BASH-STATIC as an input to gawk when cross
building.
(%glibc-stripped): When cross compiling,
use (glibc-for-bootstrap (cross-libc)) as the basis.
(%gcc-static): Base on GCC-4.7, not GCC-FINAL.
(tarball-package): TAR and XZ are native inputs. Choose the tarball
file name based on (%current-target-system) too.
* guix/build-system/trivial.scm (trivial-cross-build): Don't bind
`%target' here since this causes problem when BUILDER
contains (use-modules ...) clauses, and can be achieved differently
anyway.
* guix/build/utils.scm (set-path-environment-variable): When VALUE is
the empty string, call `unsetenv' instead of `setenv'.
* gnu/packages/guile.scm (guile-2.0)[arguments]: Remove `unsetenv'
trick.
* guix/scripts/substitute-binary.scm (decompressed-port): Improve docstring.
(progress-report-port): New procedure.
(guix-substitute-binary)["--substitute"]: Use it to report progress.
* guix/build/download.scm: Export `progress-proc' and `uri-abbreviation'.
* gnu/packages/ld-wrapper.scm (pure-file-name?): As a last resort, when
%BUILD-DIRECTORY is false, check whether FILE is a symlink, and loop
over it to check whether its target is in the store.
* guix/gnu-maintenance.scm (download-tarball): Add a 'key-download'
keyword argument and pass it to 'gnupg-verify*'. Make
'archive-type' a keyword argument.
(package-update): Add a 'key-download' keyword argument. Pass
'archive-type' and 'key-download' keyword arguments to
'download-tarball'.
* guix/gnupg.scm: Import (ice-9 i18n) and (guix ui).
(gnupg-verify*): Add a 'key-download' keyword argument and adjust
'gnupg-verify*' to use it. Make 'server' a keyword argument.
* guix/scripts/refresh.scm (show-help, %options): Add and document
'--key-download'.
(update-package): Add a 'key-download' keyword argument and pass it
to 'package-update'.
(guix-refresh): Pass 'key-download' to 'update-package'. Limit
lines to a maximum of 79 characters.
* gnu/packages/glib.scm (glib): Update to 2.37.1. Add Bash and tzdata
as inputs. Remove `glib-tests-timezone.patch'. Augment `pre-build'
phase to set `TZDIR', `XDG_CACHE_HOME', and to modify makefiles to
honor $(TESTS_ENVIRONMENT).
* gnu/packages/patches/glib-tests-desktop.patch,
gnu/packages/patches/glib-tests-homedir.patch: Update.
* gnu/packages/patches/glib-tests-timezone.patch: Remove.
* Makefile.am (dist_patch_DATA): Update accordingly.
* gnu/packages/subversion.scm (subversion): Download from archive.apache.org,
where versions are kept for a longer period of time. Previously, we
downloaded from the mirrors, which keep only the most recent versions.
* gnu/packages/bash.scm (bash-light): Add (guix build gnu-cross-build)
to #:modules when (%current-target-system) is true.
Add `bash_cv_job_control_missing=no' to #:configure-flags
when (%current-target-system) is true.
* guix/build-system/gnu.scm (static-package): Call `package-arguments'
from within the `arguments' field, so it see the
right (%current-target-system).
* HACKING: Update the command names from `guix-build' to `guix build' & co.
(Submitting Patches, Packaging Guidelines): New sections.
* doc/guix.texi (Contributing): New section.
* guix/ui.scm (define-diagnostic): Use `free-identifier=?' to compare
the user's input with `_' and `N-". This should fix builds with Guile 2.1.
Reported by Cojocaru Alexandru <xojoc@gmx.com>.
This fixes a circular dependency introduced in commit acc26ff ("gnu: Add
pytz.").
* guix/build-system/python.scm (default-python): New procedure.
(python-build): Use it.
Suggested by Andreas Enge <andreas@enge.fr>.
* guix/scripts/substitute-binary.scm (with-networking): New macro.
(guix-substitute-binary): Wrap the body in `with-networking'.
* guix/packages.scm (&package-cross-build-system-error): New condition type.
(package-cross-derivation): Raise &package-cross-build-system-error
when the build system doesn't support cross builds.
* guix/ui.scm (call-with-error-handling): Add
package-cross-build-system-error? case.
* tests/packages.scm ("package-cross-derivation, no cross builder"): New test.
This fixes resolution of DT_NEEDED entries in cross-built libraries.
For instance, if ltdl.so needs libdl.so and has it in its RUNPATH, then
libdl.so is searched for in the right place.
* gnu/packages/cross-base.scm (cross-binutils): Pass
`--with-sysroot=/no-such-path'.
* gnu/packages/guile.scm (guile-2.0): Add Bash as an input
when (%current-target-system) is true. Use %standard-cross-phases as
a basis when (%current-target-system) is true.
* gnu/packages/ncurses.scm (ncurses): Add `cross-pre-install-phase'.
Use different phases when (%current-target-system) is true.
* gnu/packages/readline.scm (readline): Use %standard-cross-phases as
the base when (%current-target-system) is true.
* gnu/packages/libffi.scm (libffi): Use %standard-cross-phases as the
base when cross-compiling. Add (guix build gnu-cross-build) to the
#:modules when cross-compiling. Improve synopsis.
* gnu/packages/gawk.scm (gawk)[arguments]: Use `set-shell-file-name'
phase that works when cross-compiling; use `%standard-cross-phases' as
the base when (%current-target-system) is true.
* gnu/packages/base.scm (coreutils): Remove Perl input
when (%current-target-system) is true. Use %standard-cross-phases as
the base when (%current-target-system) is true.
* guix/build-system/trivial.scm (guile-for-build): New procedure.
(trivial-build): Use it.
(trivial-cross-build): New procedure.
(trivial-build-system): Use it.
* guix/scripts/package.scm (guix-package)[ensure-default-profile]: Check
whether S is true before checking its owner. Fixes the case where we
built %PROFILE-DIRECTORY just above.
* guix/build-system/gnu.scm (inputs-search-paths): New procedure.
(standard-search-paths): Use it.
(expand-inputs): New procedure.
(standard-inputs): Use it.
(standard-cross-packages, standard-cross-inputs,
standard-cross-search-paths, gnu-cross-build): New procedures.
(gnu-build-system): Set `cross-build' field to `gnu-cross-build'.
* gnu/packages/cross-base.scm: Export `cross-gcc', `cross-binutils', and
`cross-libc'.
* guix/build/gnu-cross-build.scm: New file.
* Makefile.am (MODULES): Add it.
* gnu/packages/patches/gcc-cross-environment-variables.patch: Add two
hunks, most notably one that changes GCC to honor LIBRARY_PATH_ENV
when cross-compiling.
* guix/packages.scm (expand-input): New procedure, moved out of...
(package-derivation): ... here. Adjust accordingly.
(package-cross-derivation): Add `cross-system' and `system'
parameters.
* gnu/packages/autotools.scm (autoconf-wrapper): Wrap `configure' files
regardless of the exit code of `autoconf'. Triggered by Automake's
`t/am-prog-cc-stdc.sh'.
(automake): Update to 1.13.2.
* guix/scripts/package.scm (guix-package)[ensure-default-profile]: Check
the owner of %PROFILE-DIRECTORY. Report an error when the owner is
not the current user. Add `rtfm' procedure.
* doc/guix.texi (Invoking guix package): Mention the ownership test.
This fixes a bug whereby `read-response' would read more than just the
response, with the extra data going into the port's buffer; the
"bzip2 -dc" process spawned by `filtered-port' would not see the those
buffered data, which are definitely lost, and would bail out with
"bzip2: (stdin) is not a bzip2 file."
* guix/utils.scm (filtered-port): Document that INPUT must be
unbuffered.
* guix/web.scm (http-fetch): Add `buffered?' parameter. Call
`open-socket-for-uri' explicitly, and call `setvbuf' when BUFFERED? is
false. Pass the port to `http-get'. Close it upon 301/302.
* guix/scripts/substitute-binary.scm (fetch): Add `buffered?'
parameter. Pass it to `http-fetch'; honor it for `file' URIs.
(guix-substitute-binary): Call `fetch' with #:buffered? #f for port RAW.
* tests/utils.scm ("filtered-port, file"): Open FILE as unbuffered.
* guix/scripts/substitute-binary.scm (%regexp-exec-mutex): New variable.
(string->uri): New procedure.
(fields->alist): Wrap `regexp-exec' call in `with-mutex'.
* guix/ftp-client.scm (ftp-open): Let exceptions through.
* guix/scripts/package.scm (waiting): Wrap EXP in a `dynamic-wind', so
the line is always cleared.
* guix/scripts/hash.scm (guix-hash)[eof->null]: New procedure.
Use it to convert the EOF object to the empty bytevector.
* tests/guix-hash.sh: New file.
* Makefile.am (SH_TESTS): Add it.
* guix/scripts/refresh.scm (%options): Add `--key-server' and `--gpg'.
(show-help): Update accordingly.
(update-package): New procedure, formerly in `guix-refresh'.
(guix-refresh): Use it. Parameterize `%openpgp-key-server' and
`%gpg-command'.
* guix/gnupg.scm (%gpg-command): Turn into a SRFI-39 parameter.
(%openpgp-key-server): Likewise. Default to pgp.mit.edu, as
keys.gnupg.net is unreliable.
Update users.
* guix/ui.scm (show-guix-usage): Mention `guix --help'.
Suggested by Mark H. Weaver.
(run-guix-command): Invoke it when a command is not found.
(guix-main): Adjust accordingly.
* guix/scripts/package.scm (guix-package)[process-actions](package->tuple):
Put the output path in the tuple, not the derivation path.
* tests/guix-package.sh: Add test.
Before this, something like "guix package -i glibc" could fail because
glibc lists linux-libre-headers as a propagated input (which would be
added as a dependency in the manifest) but the linux-libre-headers
output could be unavailable, leading to an error like this:
path `/nix/store/4v2bk8sx5cm166gks3fi3q7d9zchibnk-linux-libre-headers-3.3.8' is not valid
This patch adds such dependencies as inputs of the profile derivation.
* guix/scripts/package.scm (profile-derivation): Accept package objects
in the `deps' field of an element of PACKAGES. Convert them to their
output path for BUILDER, and add them to the inputs of the
`build-expression->derivation' call.
(input->name+path): When INPUT doesn't contain a package object,
return it as is.
(guix-package)[process-actions](canonicalize-deps): Expect DEPS to
contain package objects, and leave them as is.
* guix/scripts/refresh.scm (guix-refresh): When updating a source file,
gracefully handle the case where TARBALL is #f.
Reported by Nikita Karetnikov <nikita@karetnikov.org>.
* guix/ui.scm (run-guix-command): Can `resolve-interface' errors and
report them with `leave'. Parameterize `program-name' from here.
(guix-main): Remove parameterization of `program-name'.
This would manifest when downloading a large file such as the Bazaar
tarball, leading to an "Error in the pull function" GnuTLS exception.
* guix/build/download.scm (add-weak-reference): New procedure.
(tls-wrap): Add (add-weak-reference record port).
* guix/scripts/package.scm (search-path-environment-variables): Prefer
%USER-ENVIRONMENT-DIRECTORY when it points to PROFILE.
(display-search-paths): Use 3 spaces for indentation.
* guix/build/rpath.scm: New file.
* Makefile.am (MODULES): Add it.
* gnu/packages/python.scm (python): Use it; remove local copy of
the *rpath* procedures.
* gnu/packages/samba.scm (samba): Likewise.
* guix/scripts/package.scm (guix-package)[find-package]: Add optional
parameter `output'. Use it.
[process-actions]: When computing UPGRADE, pass OUTPUT to
`find-package'.
* gnu/packages/ghostscript.scm (ghostscript): Remove libxext and libxt
as inputs.
(gv): Move to...
* gnu/packages/gv.scm (gv): ... here. New file.
(ghostscript/x): Variant of GHOSTSCRIPT with libxt and libxext as
inputs.
* guix/build/utils.scm (wrap-program): Fix computation of PROG-REAL and
PROG-TMP when PROG is an absolute file name. Add "$@" in the
generated script, and quote PROG-REAL.
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* guix/scripts/substitute-binary.scm (filtered-port): Move to utils.scm.
(decompressed-port): Upon "none", return '() as the second value.
(guix-substitute-binary): Expect `decompressed-port' to return a list
of PIDs as its second value.
* guix/utils.scm (filtered-port): New procedure. Add case for when
INPUT is not `file-port?'.
* tests/utils.scm ("filtered-port, file", "filtered-port, non-file"):
New tests.
* guix/gnu-maintenance.scm (latest-release): Filter out directories
whose name does not contain digits early in the process. This fixes
(latest-release "gnupg").
* guix/scripts/refresh.scm (%options): Add `--select'.
(show-help): Likewise. Augment initial help text.
(guix-refresh)[core-package?]: New procedure.
Use it when selecting packages.
This should fix `substitute-binary --query' on Guile 2.0.5.
* guix/web.scm: New file.
* Makefile.am (MODULES): Add it.
* po/POTFILES.in: Add it.
* guix/gnu-maintenance.scm (http-fetch): Remove.
(%package-list-url): Turn into a URI.
(official-gnu-packages): Add #:text? #t to `http-fetch' call.
* guix/scripts/substitute-binary.scm (fetch): Remove `http' case, and
use `http-fetch' instead.
* guix/gnu-maintenance.scm (tarball-regexp, sans-extension,
release-file): New procedures.
(%alpha-tarball-rx): New variable.
(releases): Use them instead of local copies.
(latest-release): Rewrite to not do a recursive search of all
versions and instead jump directly to the latest.
* guix/packages.scm (package-field-location): Rewrite using `read' and
source properties. Change to return #f upon failure.
* tests/packages.scm ("package-field-location"): Check for #f upon failure.
* build-aux/sync-synopses.scm: Adjust accordingly.
* guix/packages.scm (package-field-location): New procedure.
* build-aux/sync-synopses.scm: Use it instead of `package-location'.
* tests/packages.scm ("package-field-location"): New test.
* guix/ui.scm (define-diagnostic, warning, report-error, leave): Move
definitions before any use. Reported by Nikita Karetnikov.
(install-locale): Move back close to `initialize-guix'.
* guix/scripts/hash.scm: New file.
* Makefile.am (MODULES): Add it.
* po/POTFILES.in: Add it.
* doc/guix.texi (Invoking guix hash): New node.
(Defining Packages): Add a cross-reference to the 'Invoking guix
hash' node.
* guix/ui.scm (define-diagnostic): New macro, which is based on the
previous version of 'warning'.
(warning, leave): Redefine using 'define-diagnostic'.
(report-error): New macro.
(install-locale): Use 'warning' instead of 'format'.
(call-with-error-handling): Adjust 'leave'.
* gnu/packages.scm (package-files): Use 'warning' instead of 'format'.
* guix/gnu-maintenance.scm (http-fetch): Use 'warning' and 'leave'.
* guix/scripts/build.scm (derivations-from-package-expressions, guix-build):
Adjust 'leave'.
* guix/scripts/download.scm (guix-download): Adjust 'leave'.
* guix/scripts/gc.scm (size->number, %options): Adjust 'leave'.
* guix/scripts/package.scm (roll-back, guix-package): Adjust 'leave'.
* po/POTFILES.in: Add 'guix/gnu-maintenance.scm'.
Suggested by Mark H. Weaver.
* nix/nix-daemon/guix-daemon.cc (GUIX_OPT_NO_SUBSTITUTES): New macro.
(options): Add `--no-substitutes'.
(parse_opt): Add `GUIX_OPT_NO_SUBSTITUTES' case.
(main): Leave `settings.substituters' empty when
`settings.useSubstitutes' is false.
* 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.
* guix/scripts/packages.scm (guix-package) [process-actions]: When upgrading,
use "" when REGEXP is #f.
* doc/guix.texi: update the documentation accordingly.
* gnu/packages/python.scm: bump to version 2.7.4, remove references to
python-fix-dbm.patch.
* Makefile.am: remove references to python-fix-dbm.patch
* gnu/packages/patches/python-fix-dbm.patch: remove it.
Reported by Andreas Enge <andreas@enge.fr>.
* guix/build-system/gnu.scm (standard-search-paths): New procedure.
(gnu-build): Use it.
* guix/build-system/perl.scm (perl-build):
Append (standard-search-paths) to the search paths of PERL.
* guix/build-system/cmake.scm (cmake-build):
Append (standard-search-paths) to SEARCH-PATHS.
* guix/scripts/substitute-binary.scm (lookup-narinfo): Force CACHE when
passing it to `fetch-narinfo'.
(guix-substitute-binary): Delay calls to `open-cache'.
* guix/scripts/substitute-binary.scm (%narinfo-cache-directory,
%narinfo-ttl, %narinfo-negative-ttl): New variables.
(with-atomic-file-output, object->fields, read-narinfo,
write-narinfo, narinfo->string, string->narinfo, lookup-narinfo): New
procedures.
(fetch-narinfo): Adjust to use `read-narinfo'.
(guix-substitute-binary): Ensure the existence of
%NARINFO-CACHE-DIRECTORY. Use `lookup-narinfo' instead of
`fetch-narinfo'.
* gnu/packages.scm (fold2): Remove.
* guix/utils.scm (fold2): New procedure. Generalization of the above to
one and two lists.
* tests/utils.scm ("fold2, 1 list", "fold2, 2 lists"): New tests.
* guix/store.scm: Remove unneeded (ice-9 rdelim) import. In Guile 2.0.9
that module exports `read-string', which conflicts with that of (guix
serialization).
* guix/scripts/package.scm (roll-back): Use `format', not `leave' when
indicating "already at the empty profile". Fixes a regression
introduced in a2011be5df. Reported by
Nikita Karetnikov <nikita@karetnikov.org>.
This allows build outputs to be transparently downloaded from
http://hydra.gnu.org, for example.
* config-daemon.ac: Check for `gzip', `bzip2', and `xz'.
* guix/config.scm.in (%gzip, %bzip2, %xz): New variable.
* guix/scripts/substitute-binary.scm (fetch): Return SIZE as a second value.
(<narinfo>): Change `url' to `uri'.
(make-narinfo): Rename to...
(narinfo-maker): ... this. Handle relative URLs.
(fetch-narinfo): Adjust accordingly.
(filtered-port, decompressed-port): New procedures.
(guix-substitute-binary): Implement the `--substitute' case.
* tests/store.scm ("substitute query"): Use (%store-prefix) instead
of (getenv "NIX_STORE_DIR").
("substitute"): New test.
* guix/nar.scm (write-file): Add case for type `symlink'.
(restore-file): Likewise.
* tests/nar.scm (random-file-size, make-file-tree, delete-file-tree,
with-file-tree, file-tree-equal?, make-random-bytevector,
populate-file): New procedures.
(%test-dir): New variable.
("write-file + restore-file"): Use `%test-dir' and `file-tree-equal?'.
("write-file + restore-file with symlinks"): New test.
* guix/ui.scm (program-name, guix-warning-port): New variables.
(warning): New macro.
(guix-main): Parametrize PROGRAM-NAME.
* guix/scripts/build.scm, guix/scripts/download.scm,
guix/scripts/gc.scm, guix/scripts/package.scm: Adjust to use `leave'
and `warning' consistently.
* guix/nar.scm (&nar-error, &nar-read-error): New condition types.
(dump): New procedure.
(write-contents)[dump]: Remove. Use the one above instead.
(read-contents, write-file, restore-file): New procedures.
(%archive-version-1): New variable.
This commit enables the bz2, dbm, readline, ssl and zlib modules.
* gnu/packages/gdbm.scm: Enable the compatibility mode.
* gnu/packages/python.scm: Enable a few modules from the standard library.
* gnu/packages/patches/python-fix-dbm.patch: New file.
* Makefile.am: Add it.
* guix/scripts/substitute-binary.scm (guix-substitute-binary)["--query"]:
Emit blank lines only after the complete list of store paths has been
returned.
* guix/scripts/substitute-binary.scm: New file.
* Makefile.am (MODULES): Add it.
* nix/scripts/substitute-binary.in: New file.
* config-daemon.ac: Produce nix/scripts/substitute-binary.
* daemon.am (nodist_pkglibexec_SCRIPTS): Add
nix/scripts/substitute-binary.
* guix/store.scm (substitutable-path-info): Use the
`query-substitutable-path-infos' RPC.
* nix/nix-daemon/guix-daemon.cc (main): Honor `NIX_SUBSTITUTERS'.
* pre-inst-env.in: Set `NIX_SUBSTITUTERS'.
* test-env.in: Leave `NIX_SUBSTITUTERS' unchanged. Set
`GUIX_BINARY_SUBSTITUTE_URL, and create
$NIX_STATE_DIR/substituter-data.
Run `guix-daemon' within `./pre-inst-env'.
* tests/store.scm ("substitute query"): New test.
* guix/gnu-maintenance.scm (http-fetch): Try #:streaming? #t, or
'http-get*', or 'http-get' as a last resort. Check whether DATA is
#f, a string, or an input port.
* guix/store.scm: Remove unneeded (ice-9 rdelim) import. In Guile 2.0.9
that module exports `read-string', which conflicts with that of (guix
serialization).
* guix/scripts/package.scm (roll-back): Use `format', not `leave' when
indicating "already at the empty profile". Fixes a regression
introduced in a2011be5df. Reported by
Nikita Karetnikov <nikita@karetnikov.org>.
This allows build outputs to be transparently downloaded from
http://hydra.gnu.org, for example.
* config-daemon.ac: Check for `gzip', `bzip2', and `xz'.
* guix/config.scm.in (%gzip, %bzip2, %xz): New variable.
* guix/scripts/substitute-binary.scm (fetch): Return SIZE as a second value.
(<narinfo>): Change `url' to `uri'.
(make-narinfo): Rename to...
(narinfo-maker): ... this. Handle relative URLs.
(fetch-narinfo): Adjust accordingly.
(filtered-port, decompressed-port): New procedures.
(guix-substitute-binary): Implement the `--substitute' case.
* tests/store.scm ("substitute query"): Use (%store-prefix) instead
of (getenv "NIX_STORE_DIR").
("substitute"): New test.
* guix/nar.scm (write-file): Add case for type `symlink'.
(restore-file): Likewise.
* tests/nar.scm (random-file-size, make-file-tree, delete-file-tree,
with-file-tree, file-tree-equal?, make-random-bytevector,
populate-file): New procedures.
(%test-dir): New variable.
("write-file + restore-file"): Use `%test-dir' and `file-tree-equal?'.
("write-file + restore-file with symlinks"): New test.
Fixes a regression introduced in a18eda2.
Reported by Nikita Karetnikov <nikita@karetnikov.org>.
* tests/builders.scm (%bootstrap-search-paths): New variable.
("gnu-build"): Pass #:search-paths.
* guix/ui.scm (program-name, guix-warning-port): New variables.
(warning): New macro.
(guix-main): Parametrize PROGRAM-NAME.
* guix/scripts/build.scm, guix/scripts/download.scm,
guix/scripts/gc.scm, guix/scripts/package.scm: Adjust to use `leave'
and `warning' consistently.
Reported by Andreas Enge <andreas@enge.fr>.
* guix/build-system/gnu.scm (standard-packages): New procedure.
(standard-inputs): Use it instead of resolving things locally.
(gnu-build)[implicit-search-paths]: Map over (standard-packages), not
over STANDARD-INPUTS.
* guix/nar.scm (&nar-error, &nar-read-error): New condition types.
(dump): New procedure.
(write-contents)[dump]: Remove. Use the one above instead.
(read-contents, write-file, restore-file): New procedures.
(%archive-version-1): New variable.
This commit enables the bz2, dbm, readline, ssl and zlib modules.
* gnu/packages/gdbm.scm: Enable the compatibility mode.
* gnu/packages/python.scm: Enable a few modules from the standard library.
* gnu/packages/patches/python-fix-dbm.patch: New file.
* Makefile.am: Add it.
* guix/scripts/substitute-binary.scm (guix-substitute-binary)["--query"]:
Emit blank lines only after the complete list of store paths has been
returned.
* guix/scripts/substitute-binary.scm: New file.
* Makefile.am (MODULES): Add it.
* nix/scripts/substitute-binary.in: New file.
* config-daemon.ac: Produce nix/scripts/substitute-binary.
* daemon.am (nodist_pkglibexec_SCRIPTS): Add
nix/scripts/substitute-binary.
* guix/store.scm (substitutable-path-info): Use the
`query-substitutable-path-infos' RPC.
* nix/nix-daemon/guix-daemon.cc (main): Honor `NIX_SUBSTITUTERS'.
* pre-inst-env.in: Set `NIX_SUBSTITUTERS'.
* test-env.in: Leave `NIX_SUBSTITUTERS' unchanged. Set
`GUIX_BINARY_SUBSTITUTE_URL, and create
$NIX_STATE_DIR/substituter-data.
Run `guix-daemon' within `./pre-inst-env'.
* tests/store.scm ("substitute query"): New test.
* guix/gnu-maintenance.scm (http-fetch): Try #:streaming? #t, or
'http-get*', or 'http-get' as a last resort. Check whether DATA is
#f, a string, or an input port.
* gnu/packages/lesstif.scm (lesstif): Add propagated input printproto;
include/Xm/Print.h from lesstif includes X11/extensions/Print.h from
printproto.
* gnu/packages/autotools.scm (automake)[native-search-paths]: New field.
* gnu/packages/guile.scm (guile-1.8)[native-search-paths]: New field.
(guile-2.0)[native-search-paths]: New field.
* gnu/packages/python.scm (python)[native-search-paths]: New field.
* gnu/packages/xorg.scm (xf86-video-glide): Comment variable; driver for
obsolete graphics cards, depends on libglide, last updated in 2003,
and which does not compile out of the box any more.
* guix/gnu-maintenance.scm (http-fetch): Return an input port.
(<gnu-package-descriptor>): Add it.
(official-gnu-packages): Use <gnu-package-descriptor>.
(find-packages): Add it.
(gnu-package?): Adjust accordingly.
* guix/store.scm (write-contents)[call-with-binary-input-file]: New
procedure.
Use `sendfile' instead of `dump' when available. Add `size'
parameter.
(write-file): Update caller.
* release.nix (unchrootedNixpkgs): New function.
(jobs)[tarball, build, build_disable_daemon, distro): Use it.
Should fix <http://hydra.gnu.org:3000/build/7279>.
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.
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.
* guix/gnu-maintenance.scm (http-fetch): Error out when DATA is #f.
* guix/scripts/package.scm (check-package-freshness): Wrap
`gnu-package?' call in `false-if-exception'.
Reported by Cyril Roelandt <tipecaml@gmail.com>.
* gnu/packages/xorg.scm (mesa): New variable, only version 8.0.5 compiles.
* gnu/packages/xorg.scm (libdrm-2.4.33): New variable, required by mesa 8.0.5.
* guix/store.scm (&nix-connection-error): New condition type.
(open-connection): Translate `system-error' during the `connect' call
into `&nix-connection-error'.
* guix/ui.scm (call-with-error-handling): Add case for `nix-connection-error?'.
* guix/scripts/package.scm (guix-package): Move `open-connection' call
within `with-error-handling'.
* guix/scripts/pull.scm (guix-pull): Likewise.
* guix/scripts/download.scm (guix-download): Move body within
`with-error-handling'.
Comment out packages with non-free license, without license, or
not available on the ftp servers.
Remove package not present in the distribution.
* gnu/packages/xorg.scm (*): Add licenses.
* gnu/packages/xorg.scm (libxp): Remove variable of package that is not
present in the R7.7 distribution.
* gnu/packages/xorg.scm (libpthread, libxcb): Comment out variables, which
are referenced, but not present on the ftp servers.
* gnu/packages/xorg.scm (font-adobe-utopia-100dpi, font-adobe-utopia-75dpi,
font-adobe-utopia-type1, font-bh-100dpi, font-bh-75dpi,
font-bh-lucidatypewriter-100dpi, font-bh-lucidatypewriter-75dpi,
font-bh-type1, font-bitstream-100dpi, font-bitstream-75dpi,
font-daewoo-misc, font-ibm-type1, font-jis-misc, font-misc-meltho,
xf86-video-dummy):
Comment out variables, packages have non-free licenses.
* gnu/packages/xorg.scm (font-cursor-misc, xf86-video-v4l, xorg-docs):
Comment out variables, packages have no license.
* gnu/packages/xorg.scm: Remove packages not from
ftp://ftp.freedesktop.org/pub/xorg/X11R7.7/src/everything/ .
Add missing packages, for the time being with a 0 hash and
without dependencies.
Correct spelling (all lower case for package names).
* guix/gnu-maintenance.scm (gnu-package?): New procedure.
* guix/scripts/package.scm (waiting): New macro.
(check-package-freshness): New procedure.
(guix-package)[process-actions]: Use it.
* doc/guix.texi (Invoking guix package): Mention the feature.
* gnu/packages/vpn.scm: New file.
* Makefile.am (MODULES): Add it.
* gnu/packages/patches/vpnc-script.patch: New file.
* Makefile.am (dist_patch_DATA): Add it.
* guix/scripts/package.scm (read/eval-package-expression): New
procedure.
(show-help): Add `-e'.
(%options): Likewise.
(guix-package)[process-actions]: Handle ('install . p) pairs, where P
is a package.
* tests/guix-package.sh: Add `boot_make_drv'. Use `-i $boot_make_drv'
once, and then use `-e $boot_make'.
* doc/guix.texi (Invoking guix package): Document `-e'.
* gnu/packages/cross-base.scm: New file.
* gnu/packages/patches/gcc-cross-environment-variables.patch: New file.
* Makefile.am (MODULES): Add cross-base.scm.
(dist_patch_DATA): Add gcc-cross-environment-variables.patch.
* gnu/packages/base.scm (gcc-4.7): Use `LDFLAGS_FOR_TARGET' instead of
`LDFLAGS_FOR_BUILD', and use `-B' instead of `-L'.
* gnu/packages/bootstrap.scm (glibc-dynamic-linker): Add case for
"mips64el-linux".
* guix/ui.scm (show-what-to-build): Return (length req*).
* guix/scripts/pull.scm (guix-pull): Print an "already up to date"
message when there's nothing to build.
* guix/scripts/pull.scm: New file.
* Makefile.am (MODULES): Add it.
* doc/guix.texi (Invoking guix pull): New node.
(Invoking guix package): Add cross-ref to it.
* guix/ui.scm (config-directory): New procedure.
* scripts/guix.in: When `GUIX_UNINSTALLED' is undefined, add
$XDG_CONFIG_HOME/guix/latest to the search path.
* po/POTFILES.in: Add guix/scripts/pull.scm.
* gnu/packages/guile.scm (guile-reader): Change the character preceding the
guile version number from '-' to '_' so that it will not be misinterpreted
as the package version number.
* gnu/packages/qemu.scm (qemu-kvm/smb-shares): New variable.
* gnu/packages/patches/qemu-multiple-smb-shares.patch: New file.
* Makefile.am (dist_patch_DATA): Add it.
* gnu/packages/make-bootstrap.scm (%guile-static): Add
`guile-linux-syscalls.patch' as an input, and use it.
* gnu/packages/patches/guile-linux-syscalls.patch: New file.
* Makefile.am (dist_patch_DATA): Add it.
* gnu/packages/linux.scm (linux-libre): Choose "defconfig" instead of
"allmodconfig" since the latter enables all debugging features. Add
`CONFIG_CIFS=m'.
* gnu/packages.scm (find-newest-available-packages):
New exported procedure.
* guix-build.in (newest-available-packages, find-best-packages-by-name):
New procedures.
(find-package): Use find-best-packages-by-name, to guarantee that
if a version number is not specified, only the newest versions will
be considered.
* guix-package.in (%options): Add --upgrade/-u option.
(newest-available-packages, find-best-packages-by-name, upgradeable?):
New procedures.
(find-package): Use find-best-packages-by-name, to guarantee that
if a version number is not specified, only the newest versions will
be considered.
(process-actions): Implement upgrade option.
* doc/guix.texi (Invoking guix-package): In the description of --install,
mention that if no version number is specified, the newest available
version will be selected.
* gnu/packages/make-bootstrap.scm (%guile-static): Use libgc build with
CPPFLAGS=-DUSE_LIBC_PRIVATES.
* gnu/packages/bdw-gc.scm (libgc): Add TODO to always do it.
* guix/utils.scm (version-compare, version>?): New exported procedures,
based on version-string>?, which was formerly in gnu-maintenance.scm.
* guix/gnu-maintenance.scm (version-string>?): Removed procedure.
(latest-release): Use 'version>?' instead of 'version-string>?'.
* guix/build/utils.scm (patch-shebang): Do not add a space after a command
interpreter not followed by an argument; this made two tests of
coreutils fail.
* guix/ui.scm (show-what-to-build): Return (length req*).
* guix/scripts/pull.scm (guix-pull): Print an "already up to date"
message when there's nothing to build.
* guix/scripts/pull.scm: New file.
* Makefile.am (MODULES): Add it.
* doc/guix.texi (Invoking guix pull): New node.
(Invoking guix package): Add cross-ref to it.
* guix/ui.scm (config-directory): New procedure.
* scripts/guix.in: When `GUIX_UNINSTALLED' is undefined, add
$XDG_CONFIG_HOME/guix/latest to the search path.
* po/POTFILES.in: Add guix/scripts/pull.scm.
* gnu/packages/guile.scm (guile-reader): Change the character preceding the
guile version number from '-' to '_' so that it will not be misinterpreted
as the package version number.
* gnu/packages/qemu.scm (qemu-kvm/smb-shares): New variable.
* gnu/packages/patches/qemu-multiple-smb-shares.patch: New file.
* Makefile.am (dist_patch_DATA): Add it.
* gnu/packages/make-bootstrap.scm (%guile-static): Add
`guile-linux-syscalls.patch' as an input, and use it.
* gnu/packages/patches/guile-linux-syscalls.patch: New file.
* Makefile.am (dist_patch_DATA): Add it.
* gnu/packages/linux.scm (linux-libre): Choose "defconfig" instead of
"allmodconfig" since the latter enables all debugging features. Add
`CONFIG_CIFS=m'.
* gnu/packages.scm (find-newest-available-packages):
New exported procedure.
* guix-build.in (newest-available-packages, find-best-packages-by-name):
New procedures.
(find-package): Use find-best-packages-by-name, to guarantee that
if a version number is not specified, only the newest versions will
be considered.
* guix-package.in (%options): Add --upgrade/-u option.
(newest-available-packages, find-best-packages-by-name, upgradeable?):
New procedures.
(find-package): Use find-best-packages-by-name, to guarantee that
if a version number is not specified, only the newest versions will
be considered.
(process-actions): Implement upgrade option.
* doc/guix.texi (Invoking guix-package): In the description of --install,
mention that if no version number is specified, the newest available
version will be selected.
* gnu/packages/make-bootstrap.scm (%guile-static): Use libgc build with
CPPFLAGS=-DUSE_LIBC_PRIVATES.
* gnu/packages/bdw-gc.scm (libgc): Add TODO to always do it.
* guix/utils.scm (version-compare, version>?): New exported procedures,
based on version-string>?, which was formerly in gnu-maintenance.scm.
* guix/gnu-maintenance.scm (version-string>?): Removed procedure.
(latest-release): Use 'version>?' instead of 'version-string>?'.
* guix-package.in (profile-manifest): Return "version 1" manifests.
(manifest-packages): Likewise. When MANIFEST is "version 0", add
'() as the list of "propagated inputs" of each package.
(profile-derivation): Produce "version 1" manifests. Pass each
PACKAGES item's propagated inputs as an input for BUILDER.
(input->name+path): New procedure.
(guix-package)[find-package]: Add the transitive propagated inputs of
each selected package as the last item of the tuple.
[canonicalize-deps]: New procedure.
[process-actions]: Adjust to support propagated inputs as the last item.
[process-query]: Likewise.
* guix/build/union.scm (union-build): Prepend "." to the result of
`union-tree', to match the expectations of `delete-duplicate-leaves'.
Don't do mkdir when SUBDIR is ".".
* tests/union.scm ("union-build"): Keep duplicates in %BOOTSTRAP-INPUTS.
* gnu/packages/make-bootstrap.scm (%binutils-static-stripped): Add
distinguishing `name' field. Add `output' field to have a single
"out" output (followup to 4873f8e). Reported by Nikita.
* gnu/packages/multiprecision.scm (mpfr): Change GMP to a propagated input.
(mpc): Likewise for GMP and MPFR.
Reported by Andreas Enge <andreas@enge.fr>.
* guix/store.scm (%protocol-version): Bump.
(operation-id): Comment out `query-substitutable-path-info'.
Rename `query-valid-paths' to `query-all-valid-paths'. Add
`query-path-from-hash-part', `query-substitutable-path-infos',
`query-valid-paths', and `query-substitutable-paths'.
(set-build-options): Add `binary-caches' keyword parameter. When
using a server >= 1.12, send the list of binary caches.
(query-path-hash): Use the `store-path' type, for clarity.
* tests/derivations.scm ("derivation with local file as input"): Return
a Boolean instead of a bytevector. Don't attempt to compare the
content of the result with that of the input.
* guix/ui.scm (fill-paragraph, string->recutils, package->recutils): New
procedures.
* guix-package.in (guix-package)[process-query]: Use `package->recutils'
to display package meta-data.
* tests/guix-package.sh: Adjust test.
* tests/ui.scm: New file.
* Makefile.am (TESTS): Add it.
* doc/guix.texi (Invoking guix-package): Adjust `--search'
documentation, and give an example.
* 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.
* guix/store.scm (open-connection): Call `make-hash-table' with 100.
(add-text-to-store): Move TEXT first in ARGS, for better `hash'
results.
(add-to-store): Likewise, move ST first.
* 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.
* guix/store.scm (operation): New macro.
(define-operation): Define in terms of `operation'.
(add-text-to-store): Define using `operation', and remove now
unnecessary `set!'.
(add-to-store): Likewise.
(add-text-to-store/cached, add-to-store/cached): Remove.
* guix/store.scm (write-string): Optimize to write the length, contents,
and padding all at once. This yields a 2% improvement on the
execution time of "guix-build gdb".
* guix/ui.scm (install-locale): New procedure.
* guix-build.in, guix-download.in, guix-gc.in, guix-import.in,
guix-package.in: Use it instead of (setlocale LC_ALL "").
* guix/store.scm (<nix-server>)[atts-cache]: New field.
(add-text-to-store/cached): New procedure. Use it as a wrapper around
`add-text-to-store'.
When running "guix-build gdb", this reduces the number of RPCs from
3048 to 289, and execution time from 4.7s to 2.6s.
* guix/store.scm (<nix-server>)[ats-cache]: New field.
(open-connection): Update accordingly.
(add-to-store/cached): Use (nix-server-add-to-store-cache SERVER)
instead of a weak hash table.
* guix/store.scm (add-to-store/cached): New variable.
Use it as the new `add-to-store'.
This reduces the number of RPCs when doing "guix-build gdb" from 5009
to 3053, and the execution time from 7s to 3.9s.
Suggested by Andreas Enge <andreas@enge.fr> at
<http://lists.gnu.org/archive/html/bug-guix/2013-01/msg00325.html>.
* guix-package.in (latest-profile-number): Remove.
(switch-symlinks): New procedure.
(roll-back)[switch-link]: Use it.
(guix-package)[process-actions]: Always choose NUMBER + 1 for the new
profile. Use `switch-symlinks' instead of `symlink'. Remove code to
delete PROFILE when it exists since `switch-symlinks' has the same
effect.
* tests/guix-package.sh: Adjust existing `--roll-back' tests.
* doc/guix.texi (Invoking guix-package): Document this `--roll-back'
behavior.
Suggested by Andreas Enge <andreas@enge.fr> at
<http://lists.gnu.org/archive/html/bug-guix/2013-01/msg00316.html>.
* guix-package.in (roll-back): Check whether PROFILE is valid using
`file-exists?'. When NUMBER is zero, just emit a notice. When
PREVIOUS-NUMBER is zero and PREVIOUS-PROFILE does not exist, build the
empty profile, and link to it.
* tests/guix-package.sh: Add tests.
* doc/guix.texi (Invoking guix-package): Document the new behavior.
* guix/packages.scm (<package>)[inputs]: Mark as thunked.
(package-derivation)[expand-input]: Remove case where the input is a
procedure.
* tests/packages.scm ("trivial with system-dependent input"): Remove
`lambda', and use (%current-system).
* gnu/packages/bootstrap.scm (package-from-tarball): Likewise for `inputs'.
(%bootstrap-glibc, %bootstrap-gcc): Likewise.
* gnu/packages/scheme.scm (mit-scheme): Likewise.
* guix-package.in (guix-package)[parse-options]: Call `leave' when
passed a non-option argument.
Reported by Andreas Enge <andreas@enge.fr>.
* tests/guix-package.sh: Add test.
* guix/packages.scm (<package>): Mark `arguments' as thunked.
(package-derivation): Adjust accordingly. Parameterize
%CURRENT-SYSTEM to SYSTEM, so that arguments can refer to it.
* guix/build-system/gnu.scm (package-with-explicit-inputs): Expect
`package-arguments' to always return a list, and return a list.
(package-with-extra-configure-variable): Likewise.
(static-package): Likewise.
* gnu/packages/base.scm (patch, findutils, gcc-4.7, binutils-boot0,
gcc-boot0, glibc-final-with-bootstrap-bash, cross-gcc-wrapper,
static-bash-for-glibc, binutils-final, gcc-final): Change `arguments'
from a lambda to a list, and use (%current-system) as needed.
(nix-system->gnu-triplet, boot-triplet): Have the first argument
default to (%current-system).
* gnu/packages/bootstrap.scm (glibc-dynamic-linker): Have `system'
default to (%current-system).
(%bootstrap-gcc): Change `arguments' to a list.
* gnu/packages/gawk.scm (gawk): Likewise.
* gnu/packages/m4.scm (m4): Likewise.
* gnu/packages/make-bootstrap.scm (%glibc-for-bootstrap): Likewise, and
expect `package-arguments' to return a list.
(%static-inputs, %gcc-static, tarball-package): Likewise.
* gnu/packages/ncurses.scm (ncurses): Likewise.
* guix/utils.scm (define-record-type*)[make-syntactic-constructor]: Add
a `thunked' parameter.
(thunked-field?, field-bindings): New procedures. Use the latter when
generating `letrec*' bindings.
[thunked-field?, thunked-field-accessor-name, field-spec->srfi-9,
thunked-field-accessor-name]: New procedures.
Use them when generating the `define-record-type' form, and to
generated thunk field accessors, along call to
`make-syntactic-constructor' with the new argument.
* tests/utils.scm ("define-record-type* & thunked",
"define-record-type* & thunked & default",
"define-record-type* & thunked & inherited"): New tests.
* doc/guix.texi (Invoking guix-build): Make it clear that `guix-build'
doesn't access the user's profile, and add cross-ref to `guix-package'.
Suggested by Nikita Karetnikov <nikita@karetnikov.org>.
* guix-package.in (roll-back): Fix file name of PREVIOUS-PROFILE, which
could end up containing the dirname twice.
Reported by Nikita and Andreas.
* tests/guix-package.sh: Add test.
* guix-build.in (guix-build)[find-package]: New procedure.
Use it instead of using `find-packages-by-name' directly.
Suggested by Andreas Enge <andreas@enge.fr>.
* tests/guix-build.sh: Add tests.
* doc/guix.texi (Invoking guix-build): Add `coreutils-8.20' as an
example. Fix guile-1.8 example.
* gnu/packages/autotools.scm (autoconf-wrapper): New variable.
(automake): Use AUTOCONF-WRAPPER instead of AUTOCONF.
Add `automake-skip-amhello-tests.patch' as an input.
Add #:patches and #:phases arguments.
* gnu/packages/patches/automake-skip-amhello-tests.patch: New file.
* Makefile.am (dist_patch_DATA): Add it.
* guix/build/download.scm: Autoload (gnutls).
(tls-wrap): New procedure.
(open-connection-for-uri): Add support for `https'. Wrap the socket
with `tls-wrap' in that case.
(url-fetch): Add `https'.
* guix/download.scm (gnutls-derivation): New procedure.
(url-fetch)[need-gnutls?]: New variable.
Call `gnutls-derivation' when NEED-GNUTLS? is true, and add its output
to the `GUILE_LOAD_PATH' env. var. in that case.
* guix/packages.scm (cache): Change the `drv' argument to `thunk'.
Memoize all the return values of THUNK.
(cached-derivation): Remove.
(cached): New macro.
(package-derivation): Use `cached' instead of `(or (cached-derivation) …)'.
* doc/guix.texi (Defining Packages): Update accordingly.
* distro/packages/glib.scm: Rename to...
* gnu/packages/glib.scm: ... this. Update module declaration
accordingly.
(dbus): New variable.
(glib): Change version number to 2.34.3, and adjust URL accordingly.
Add a "doc" output. Add #:configure-flags, #:patches, and #:phases
arguments. Add DBUS as an input, as well a three patches.
* Makefile.am (MODULES): Adjust to file renaming.
(dist_patch_DATA): Add `glib-tests-timezone.patch',
`glib-tests-homedir.patch', and `glib-tests-desktop.patch'.
* gnu/packages/gnutls.scm (gnutls): Remove the #:parallel-build?
argument, which is no longer needed. Remove the commented-out LZO
input, since GnuTLS no longer supports it since 3.0.0.
* guix-package.in (profile-numbers): New procedure.
(latest-profile-number): Use it.
(previous-profile-number): New procedure.
(roll-back): Use it lieu of `1-'. Check whether PREVIOUS-NUMBER is
zero, and raise an error when it is.
* tests/guix-package.sh: Test whether we can roll back over a "hole".
Based on a patch by Nikita Karetnikov <nikita@karetnikov.org>.
* guix-package.in (profile-regexp): New procedure.
(latest-profile-number): Remove `%profile-rx', and use
`profile-regexp' instead.
(profile-number, roll-back): New procedure.
(show-help): Add `--roll-back'.
(%options): Likewise.
(guix-package)[process-actions]: First check whether `roll-back?' is
among OPTS, and call `roll-back' if it is, followed by a recursive
call to `process-actions'. Emit the "nothing to be done" message only
when INSTALL or REMOVE is non-empty.
* tests/guix-package.sh (readlink_base): New function.
Add tests for `--roll-back'.
* doc/guix.texi (Invoking guix-package): Document `--roll-back'.
* guix-package.in (%store): Change to a SRFI-39 parameter. Update all users.
(guix-package): Parametrize %STORE to an open connection after
`parse-options' has been called.
Reported by Andreas Enge.
* guix-package.in (%profile-directory): Honor $NIX_STATE_DIR.
(guix-package)[ensure-default-profile]: Use it.
[process-actions]: Call it when the `profile' option is
%CURRENT-PROFILE.
* tests/guix-package.sh: Add installation test with $HOME set, using the
default profile.
* guix-package.in (guix-package): When testing whether
%USER-ENVIRONMENT-DIRECTORY exists, use `lstat' instead of
`file-exists?'. Reported by Andreas Enge.
* doc/guix.texi: Set @documentlanguage.
(Installation): Add reference to `INSTALL' and `README'.
(Requirements): Mention store sharing with Nix.
(Defining Packages): Update example to include `use-modules' clauses
and to use (guix licenses).
* guix/build/download.scm (uri-abbreviation): New procedure.
(ftp-fetch, http-fetch): Use it instead of `uri->string' when calling
`progress-proc'. Reported by Andreas Enge.
* distro/packages/libsigsegv.scm (libsigsegv): Use just a single output,
otherwise nothing ends up in `out' as a consequence of commit a06a99f.
Reported by Andreas Enge <andreas@enge.fr>.
* guix/build/gnu-build-system.scm (configure)[package-name]: New
procedure.
When LIBDIR is true and INCLUDEDIR is false, add
--includedir=LIBDIR/include.
Add support for --docdir when a "doc" output exists.
* guix/build/union.scm (delete-duplicate-leaves): New procedure.
(union-build)[leaf=?, resolve-collision]: New procedures.
Use `delete-duplicate-leaves' on the result of `tree-union'.
* tests/union.scm ("delete-duplicate-leaves, default",
"delete-duplicate-leaves, file names"): New tests.
* guix-package.in (guix-package): Create the %USER-ENVIRONMENT-DIRECTORY
symlink if it doesn't exist yet.
* doc/guix.texi (Invoking guix-package): Document it.
* guix-package.in (guix-package)[process-query]: For `list-available',
show the outputs of each package.
* doc/guix.texi (Invoking guix-package): Update accordingly.
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.
* guix-package.in (guix-package)[guile-missing?]: New procedure.
(guix-package): Always redirect `current-build-output-port' to
`current-error-port' when (guile-missing?).
* guix-package.in (%options): Remove #\b as an alternate for
"bootstrap".
(show-help): Adjust accordingly.
* tests/guix-package.sh: Use `--bootstrap' instead of `-b'.
* guix/build/download.scm (http-fetch): Rename `bv' to `bv-or-port'.
Use `http-get*' followed by `dump-port' when the former is available,
and pass a progress procedure to `dump-port'.
* guix/build/download.scm (progress-proc): New procedure.
(ftp-fetch): Call `ftp-size' on URI. Use `progress-proc', and pass
the result to `dump-port', along with #:buffer-size.
* guix-build.in (guix-build)[register-root]: Change first argument to
`paths', which should be a list of store paths. Update caller to call
`derivation-path->output-paths' on DRV. When `derivations-only?',
also register root for .drv files.
* distro/packages/ncurses.scm (ncurses): Remove #:patch-shebangs?
argument since it now has no effect. Simplify PATCH-MAKEFILE-PHASE.
Add `configure-phase', and use it.
* distro/packages/base.scm (coreutils): Set #:parallel-build? #f. Add
`patch-shell-references' phase. Add 'acl', 'gmp', and 'perl' as
inputs, as suggested by Nikita Karetnikov.
* tests/derivations.scm (%bash): New variable.
Replace occurrences of "/bin/sh" by %BASH.
* tests/union.scm ("union-build"): Delete duplicates from
%BOOTSTRAP-INPUTS.
* distro/packages/base.scm (glibc): Expect "static-bash" to be a
directory, not a single file. Call `remove-store-references' on the
"bash" binary that is copied. Add an `sh' -> `bash' symlink. Change
the "static-bash" input to (static-package bash-light).
(glibc-final): Rename to...
(glibc-final-with-bootstrap-bash): ... this. Change `name' to
"glibc-intermediate". Remove #:patch-shebangs? setting.
(cross-gcc-wrapper): New procedure, with code formerly in
GCC-BOOT0-WRAPPED.
(gcc-boot0-wrapped): Use it.
(static-bash-for-glibc): New variable.
(glibc-final): Inherit from GLIBC-FINAL-WITH-BOOTSTRAP-BASH, and use
STATIC-BASH-FOR-GLIBC as the "static-bash" input.
* distro/packages/readline.scm (readline): Add `pre-configure-phase' to
patch `MAKE_SHELL' in `configure. Move `post-install-phase' body to
a variable.
* distro/packages/bash.scm (bash): Likewise.
* distro/packages/base.scm (guile-final): Add workaround on top of
GUILE-2.0/FIXED to avoid `patch-source-shebangs' failure on one of the
source files.
Use bootstrap binaries that were generated with the `make-bootstrap'
changes introduced in previous commit.
* Makefile.am (nodist_bootstrap_x86_64_linux_DATA,
nodist_bootstrap_i686_linux_DATA): Change Guile tarball name.
(distro/packages/bootstrap/x86_64-linux/guile-2.0.7.tar.xz,
distro/packages/bootstrap/i686-linux/guile-2.0.7.tar.xz): New targets.
(distro/packages/bootstrap/x86_64-linux/guile-bootstrap-2.0.6.tar.xz,
distro/packages/bootstrap/i686-linux/guile-bootstrap-2.0.6.tar.xz):
Remove.
* build-aux/download.scm (file-name->uri): Use "20121219" directory.
* distro/packages/bootstrap.scm (%bootstrap-guile): Update file name.
(%bootstrap-coreutils&co, %bootstrap-binutils, %bootstrap-glibc,
%bootstrap-gcc): Update directory name and hashes.
* distro/packages/make-bootstrap.scm (%glibc-with-relocatable-system,
%standard-inputs-with-relocatable-glibc): New variables.
(%static-inputs)[gawk]: Apply `gawk-shell.patch'.
[finalize]: New procedure.
Build all the packages against %STANDARD-INPUTS-WITH-RELOCATABLE-GLIBC.
(%glibc-stripped): Inherit from %GLIBC-WITH-RELOCATABLE-SYSTEM.
(%gcc-static, %guile-static): Build against
%STANDARD-INPUTS-WITH-RELOCATABLE-GLIBC.
* distro/packages/patches/gawk-shell.patch,
distro/packages/patches/glibc-bootstrap-system.patch: New files.
* Makefile.am (dist_patch_DATA): Add them.
* distro/packages/base.scm (glibc): Pass `ac_cv_path_BASH_SHELL' in the
configure flags. During the `pre-configure' phase, copy the
"static-bash" input to $out/bin, and change `system' and `popen' to
use it instead of /bin/sh. Add the "static-bash" input.
Suggested by Shea Levy <shea@shealevy.com> and
Lluís Batlle i Rossell <viric@viric.name>.
* distro/packages/ld-wrapper.scm: Use @BASH@ in shebang. Change module
name to (gnu build-support ld-wrapper).
* distro/packages/base.scm (ld-wrapper-boot3): Substitute @BASH@.
(ld-wrapper): Use BASH-FINAL.
* guix/build/gnu-build-system.scm (patch-source-shebangs): Add a newline
after the "SHELL =" line in po/Makefile.in.in.
(%standard-phases): Move `patch-source-shebangs' after `patch'.
This allows many packages to build in a chroot that lacks /bin and
thus /bin/sh.
* guix/build/gnu-build-system.scm (patch-source-shebangs): New
procedure.
(%standard-phases): Add it.
* guix/build/utils.scm (executable-file?): New procedure.
* distro/packages/perl.scm (perl): Don't use /bin/sh to run `Configure'.
* daemon.am (libexec_PROGRAMS, nix_setuid_helper_SOURCES,
nix_setuid_helper_CPPFLAGS, nix_setuid_helper_LDADD): New variables.
* test-env.in: Set and export `NIX_SETUID_HELPER'.
* README (Installing Guix as non-root): New section.
* guix/build/gnu-build-system.scm (configure): Add `inputs' keyword
parameter. Take Bash from there, falling back to /bin/sh. Set
`CONFIG_SHELL' and `SHELL' to that Bash. Run "bash ./configure"
instead of just "./configure".
* distro/packages/bootstrap.scm (%bootstrap-inputs): Add "bash".
* distro/packages/base.scm (gcc-boot0-wrapped): Use "bash" from
%BOOT1-INPUTS instead of /bin/sh.
* tests/builders.scm (network-reachable?): New variable.
("url-fetch", "gnu-build"): Skip unless NETWORK-REACHABLE?.
* tests/derivations.scm (%coreutils): Check for network access.
("build-expression->derivation with one input"): Skip when %COREUTILS
is #f.
* tests/guix-package.sh: Skip installation of GNU Make when the network
is unreachable.
* tests/packages.scm ("GNU Make, bootstrap"): Likewise.
* tests/union.scm ("union-build"): Likewise.
* config-daemon.ac: Move AC_ARG_ENABLE([daemon]...)...
* configure.ac: ... here.
When Nix programs are not found, error out only when
$guix_build_daemon is no.
* tests/base32.scm (%nix-hash): When `getenv' returns the empty string,
ignore it.
(%have-nix-hash?): New variable. Update `test-skip' clause to use it.
* guix-package.in (guix-package)[process-actions]: Compute PACKAGES such
that packages listed in INSTALL* are first removed from the remainder
of the list. When PROF is equal to the previous profile's store path,
do nothing. Reported by Andreas Enge <andreas@enge.fr>.
* tests/guix-package.sh: Test the behavior of installing the same store
path twice. When removing a package, omit its version number.
* guix/store.scm (gc-action): New enumerate type.
(read-long-long, read-string-list, write-store-path,
write-store-path-list, read-store-path-list): New procedures.
(write-arg): Add support for `store-path' and `store-path-list'.
(read-arg): Add support for `store-path-list'.
(define-operation): Add support for multiple-value returns.
(run-gc, live-paths, dead-paths, collect-garbage, delete-paths): New
procedures.
(%long-long-max): New macro.
* tests/store.scm: New file.
* Makefile.am (TESTS): Add it.
* configure.ac: Compute and substitute `guix_localstatedir'.
* m4/guix.m4: Substitute `guix_system'.
* guix/config.scm.in (%store-directory, %store-directory, %system): New
variables.
* guix/store.scm (%nix-state-dir): Remove.
(%default-socket-path): Use %STATE-DIRECTORY as the default.
(%store-prefix): Use %STORE-DIRECTORY as the default.
* guix/utils.scm (%current-system): Default to %SYSTEM.
* test-env.in: New file.
* configure.ac: Add it to `AC_CONFIG_FILES' and `commands-exec'.
* config-daemon.ac: Set and substitute `GUIX_TEST_ROOT'.
* Makefile.am (SCM_LOG_COMPILER, SH_LOG_COMPILER): Use it in lieu of
`pre-inst-env'.
* daemon.am (test_root): Remove
(AM_TESTS_ENVIRONMENT): Remove `TEST_ROOT'.
(clean-local): Use $(GUIX_TEST_ROOT); make files writable before
removing them.guix_test_root
* tests/guix-daemon.sh: Remove `NIX_' variable settings; don't launch
`guix-daemon'.
* nix/scripts/list-runtime-roots.in: New file.
* config-daemon.ac: Add `AC_CONFIG_FILES' invocation for it.
* daemon.am (nodist_pkglibexec_SCRIPTS): New variable.
(AM_TESTS_ENVIRONMENT): Define `top_builddir'.
* tests/guix-daemon.sh: Export `NIX_ROOT_FINDER'.
* nix/sync-with-upstream: Substitute the path to the root finder in
libstore/gc.cc.
* nix/nix-daemon/guix-daemon.cc (options)[!HAVE_CHROOT]: Mention that
`--disable-chroot' has no effect.
(main)[!HAVE_CHROOT]: Set `useChroot' to false.
* nix/libutil/md5.h (MD5_Final): Pass RESBUF as the first argument to
`guix_hash_final'.
* nix/libutil/sha1.h (SHA1_Final): Likewise.
* nix/libutil/sha256.h (SHA256_Final): Likewise.
* guix-build.in (%store): Turn into a SRFI-39 parameter. Update users.
(guix-build): Set %STORE and call `open-connection' only after
`parse-options' has been called.
* 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.
* Makefile.am (patchdir, bootstrapdir): Change to be sub-directories of
$(guilemoduledir).
(.scm.go): Remove `DISTRO_' environment variables.
* distro.scm (not-colon): Remove.
(%patch-path, %bootstrap-binaries-path): Default to sub-directories of
the entries in %LOAD-PATH.
* pre-inst-env.in: Remove definition of `DISTRO_' environment variables.
* hydra.scm: Redirect the output port to the error port.
(package-job): Return a name/thunk pair.
(hydra-jobs)[system]: Use either the `system' key (a symbol) in
ARGUMENTS, or (%current-system)'.
* distro.scm (fold-packages): New procedure.
(find-packages-by-name): Use it instead of hand-written traversal;
remove `package?' checks from `right-package?'.
* tests/packages.scm ("fold-packages"): New test.
* configure.ac: Change package name to "GNU Guix", and bug-report
address to `gnu-system-discuss@gnu.org'.
* doc/guix.texi: Replace "Guix" by "GNU Guix" in some places.
(Top, Introduction): Mention "for the GNU system".
* HACKING, README: Use "GNU Guix" instead of "Guix" in some places.
These new binaries are built with the `--with-lib-path' and
`--with-local-prefix' flags, respectively, as introduced in commit
01d4540.
* distro/packages/bootstrap.scm (%bootstrap-coreutils&co,
%bootstrap-glibc): Update URL.
(%bootstrap-binutils, %bootstrap-gcc): Update URL and hashes.
* build-aux/download.scm (file-name->uri): Update URL.
* guix-download.in (http-fetch, ftp-fetch): Remove.
(fetch-and-store): Replace `uri' parameter with `name', for the output
file name. Redirect the output of `fetch' to the error port.
(guix-download): Call `url-fetch' for all URI schemes except `file'.
Handle PATH equal to #f.
* guix/download.scm: Export `%mirrors'.
* tests/guix-download.sh: Change erroneous URL, because URLs at
example.com are all valid redirections.
* guix-download.in (fetch-and-store): New procedure.
(guix-download): Use it to compute PATH. Call `add-to-store' when
a `file' URI scheme is used.
* Makefile.am (AM_TESTS_ENVIRONMENT): New variable.
* tests/guix-download.sh: Add test.
* guix-download.in (guix-download): Error out when `string->uri'
returns #f. Use `leave' when the scheme is unknown.
* tests/guix-download.sh: Add tests.
* tests/derivations.scm ("build-expression->derivation for fixed-output
derivation"): Remove test. It is redundant with that in builders.scm,
and doesn't work out of the box with the statically-linked
%BOOTSTRAP-GUILE.
* guix/download.scm (%mirrors): New variable. Mirror lists taken from
Nixpkgs.
(url-fetch): New `mirrors' keyword parameter.
[builder]: Pass it.
* guix/build/download.scm (url-fetch): New `mirrors' keyword parameter.
[maybe-expand-mirrors]: New procedure.
[uri]: Use it.
* 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.
* tests/derivations.scm ("fixed-output derivation"): Add comment that
the reference to BUILDER is optional.
("fixed-output derivation: output paths are equal",
"derivation with a fixed-output input",
"build-expression->derivation: same fixed-output path"): New tests.
* guix-download.in (http-fetch): Leave with an error message when
RESPONSE's code is not 200.
* tests/guix-download.sh: New file.
* Makefile.am (TESTS): Add it.
* guix-build.in (derivations-from-package-expressions): Leave with an
error message when SOURCE? is #t and P has no source.
* tests/guix-build.sh: Add test.
* guix-package.in (guix-package)[find-package]: Return the correct NAME
and SUB-DRV when NAME contains #\:.
* tests/guix-package.sh (profile): Add test.
The alternative, which was to use one module per category, would
probably not scale well. First, because many packages could fall into
several categories (does GnuTLS go into "networking", "security", or
"libraries"?). Second, because that could easily lead to circular
dependencies among modules ("security" and "networking" depend on each
other, etc.)
* distro/packages/databases.scm: Rename to...
* distro/packages/recutils.scm: ... this.
* distro/packages/typesetting.scm: Rename to...
* distro/packages/lout.scm: ... this.
* Makefile.am (MODULES): Adjust accordingly.
* po/POTFILES.in: Likewise.
* guix/utils.scm (package-name->name+version): New procedure.
* guix-package.in (guix-package)[find-package]: Use it.
* tests/utils.scm ("package-name->name+version"): New test.
* configure.ac: Always show the result of checking for Nixpkgs. Don't
warn when Nixpkgs is not found.
* Makefile.am (AM_DISTCHECK_CONFIGURE_FLAGS): Remove `--with-nixpkgs'
flag.
* guix/utils.scm (%nixpkgs-directory): Use either the compile-time or
the run-time `NIXPKGS' environment variable.
* release.nix (jobs.tarball, jobs.build): Remove `--with-nixpkgs'
configure flag.
* README: Mark Nixpkgs as optional.
* distro/packages/databases.scm, distro/packages/guile.scm,
distro/packages/typesetting.scm: Change uses of `nixpkgs-derivation*'
to `nixpkgs-derivation', to avoid failing at compile-time.
* guix/ui.scm: New file.
* Makefile.am (MODULES): Add it.
* po/POTFILES.in: Add it.
* guix-build.in: Use it.
(_, N_, leave): Remove.
(guix-build): Use `with-error-handling' instead of the `guard' form.
* guix-download.in: Use it.
(_, N_, leave): Remove.
* guix/store.scm (add-indirect-root): New operation.
* guix-build.in (show-help): Document `--root'.
(%options): Add `--root'.
(guix-build)[register-root]: New procedure. Call it when `--root' is
passed.
* release.nix (distro.hello)[buildPhase]: Tee the log to $out. Add a
`name' attribute; remove `buildInputs' and instead use the full path
to `guix-build'.
* tests/builders.scm (%bootstrap-inputs): Use %BOOT0-INPUTS from the distro.
* tests/packages.scm (%bootstrap-inputs): Likewise.
* tests/derivations.scm (%coreutils): Alias for %BOOTSTRAP-COREUTILS&CO.
* distro.scm (not-colon): New variable.
(%patch-directory): Rename to...
(%patch-path): ... this. Turn into a list. Expect $DISTRO_PATCH_PATH
to be a colon-separated search path.
(%bootstrap-binaries-directory): Rename to...
(%bootstrap-binaries-path): ... this. Likewise.
(search-patch, search-bootstrap-binary): Adjust accordingly.
* pre-inst-env.in: Change to use `DISTRO_PATCH_PATH' and
`DISTRO_BOOTSTRAP_PATH'.
* Makefile.am (.scm.go): Use `pre-inst-env' instead of re-defining the
environment variables, except for `DISTRO_INSTALLED_PATCH_DIRECTORY'
and `DISTRO_INSTALLED_BOOTSTRAP_DIRECTORY'.
* distro/packages/base.scm (gcc-4.7)[arguments]: In the `pre-configure'
phase, patch all the relevant gcc/config files, not just those for
x86_64-linux-gnu.
* guix/build/utils.scm (substitute*): Remove special syntax for
list-of-files; instead, check whether FILE is `list?' at run time.
* distro/packages/base.scm (gcc-4.7, %binutils-static): Adjust
accordingly.
* guix/packages.scm (package-source-derivation): Add `system'
parameter. Pass it to METHOD.
(package-derivation)[expand-input]: Pass SYSTEM to
`package-derivation' and `package-source-derivation'.
* distro/packages/base.scm (package-with-bootstrap-guile)[boot]: Pass
SYSTEM to FETCH.
* 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'.
* 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.
* distro/packages/base.scm (%glibc-stripped): Copy all of Linux-Libre's
`include/asm' directory; copy a few linux/ headers too.
(%bootstrap-glibc): Update tarball hash.
* distro/packages/base.scm (%static-inputs): Add an `awk' -> `gawk', and
`sh' -> `bash' symlinks. Add `fgrep' and `egrep'.
(%bootstrap-coreutils&co): Use new tarball that contains that
symlink.
* distro/packages/bootstrap/x86_64-linux/bash,
distro/packages/bootstrap/x86_64-linux/mkdir,
distro/packages/bootstrap/x86_64-linux/tar,
distro/packages/bootstrap/x86_64-linux/xz: Use binaries from that
tarball (the previous binaries hadn't gone through
`remove-store-references', which is fixed now.)
* 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.
* guix/packages.scm (package-derivation)[intern]: New procedure. Pass
#t as the `recursive?' argument, instead of #f.
[expand-input]: New procedure, with code formerly in the body.
Support inputs where the input is a procedure returning a file name or
an <origin>.
Use `expand-input' in the body.
* tests/packages.scm ("trivial with system-dependent input"): New test.
* distro/packages/base.scm (tarball-package): New procedure.
(%bootstrap-binaries-tarball): New variable.
(%guile-bootstrap-tarball): Define in terms of `tarball-package'.
* guix-build.in (derivations-from-package-expressions): New `system'
parameter. Pass it to `package-derivation'.
(%default-options): Add `system' pair.
(show-help): Describe `--system'.
(%options): Add it.
(guix-build): Check the `system' pair in OPTS; pass it to
`derivations-from-package-expressions' and `package-derivation'.
* guix/build/http.scm (open-connection-for-uri): New procedure.
(http-fetch): Use it. Pass the result as a #:port argument to
`http-get'.
Add hack to modify the `set-port-encoding!' binding in (web response).
* guix/ftp-client.scm (ftp-open): Add optional `port' parameter,
defaulting to 21. When calling `getaddrinfo', convert PORT to a
string and pass AI_NUMERICSERV when PORT is a number.
* distro/patches/guile-default-utf8.patch: New file.
* Makefile.am (dist_patch_DATA): Add it.
* distro/packages/base.scm (%guile-static): Use it.
(%guile-static-stripped): Add call to `remove-store-references'.
* distro/patches/guile-relocatable.patch: Change to use /proc/self/exe
instead of PROGRAM_INVOCATION_NAME. Useful because Nix itself passes
just the basename of builders that it executes.
* distro/packages/base.scm (%guile-static, %guile-static-stripped): New
variables.
* distro/patches/guile-relocatable.patch: New file.
* Makefile.am (dist_patch_DATA): Add it.
* doc/guix.texi: New file.
* doc/fdl-1.3.texi: New file, copied from Gnulib.
* Makefile.am (info_TEXINFOS): New variable.
(EXTRA_DIST): Add `doc/fdl-1.3.texi'.
* guix/packages.scm (%derivation-cache): Pass an initial size of 100.
(cache): Use `hashq-set!', and use a SYSTEM/DRV pair as the value.
(cached-derivation): Update accordingly.
* tests/builders.scm (%bootstrap-inputs, %bootstrap-guile): New
variables.
("gnu-build"): Use them, by setting `#:implicit-inputs? #f' and `#:guile'.
* tests/packages.scm (%bootstrap-inputs, %bootstrap-guile): New
variables.
("trivial"): Pass `#:guile %bootstrap-guile'.
("GNU Hello"): Use `package-with-explicit-inputs' to use
%BOOTSTRAP-GUILE and %BOOTSTRAP-INPUTS.
* guix/build-system/gnu.scm (package-with-explicit-inputs): New `guile'
keyword parameter. Add it to P's arguments, and pass it in recursive
calls.
(gnu-build): New `guile' keyword parameter; new `guile-for-build'
variable. Pass it as the `#:guile-for-build' parameter of
`build-expression->derivation'.
* guix/build-system/trivial.scm (trivial-build): Likewise.
* guix/build/gnu-build-system.scm (%parallel-job-count): New variable.
(build, check): Use it instead of $NIX_BUILD_CORES.
* guix-build.in (guix-build): Default to 0 for the #:build-cores option.
* distro/ld-wrapper.scm: New file.
* Makefile.am (MODULES): Add it.
* distro/base.scm (ld-wrapper-boot3): New variable.
(%boot3-inputs): Add LD-WRAPPER-BOOT3.
(bash-final, guile-final, ld-wrapper): New final.
(%final-inputs): Use BASH-FINAL; add LD-WRAPPER.
(gcc-4.7): Remove the `-rpath' trick from the `lib' spec string.
* distro/base.scm (gcc-4.7): Patch `LIB_SPEC' to add `-rpath' for each
`-L'. Spec string suggested by Marc Glisse <marc.glisse@inria.fr>.
(libtool): Add `libtool-skip-tests.patch'.
* distro/patches/libtool-skip-tests.patch: New file.
* Makefile.am (dist_patch_DATA): Add it.
This allows the final toolchain to be completely independent of
%BOOTSTRAP-INPUTS.
* distro/base.scm (glibc-dynamic-linker): New procedure.
(gcc-4.7): Remove #:path-exclusions argument. Check whether LIBC is
#f before using it.
(glibc): Remove "libc_cv_as_needed" hack. Patch `Makeconfig' to
remove `-lgcc_s'.
(nix-system->gnu-triplet, boot-triplet): New variables.
(binutils-boot0): Turn into a cross-Binutils targeting (boot-triplet
SYSTEM).
(gcc-boot0): Likewise. Add configure options to make a smaller
build. Remove "binutils-source" from the input, and use
BINUTILS-BOOT0 instead.
(glibc-final): Cross-build using GCC-BOOT0 and BINUTILS-BOOT0.
(gcc-boot0-wrapped): New variable.
(%boot2-inputs): Use it.
(m4-boot2, gmp-boot2, mpfr-boot2, mpc-boot2): Remove.
(binutils-final): New variable.
(gcc-final): Turn into a joint build with GMP/MPFR/MPC. Use
BINUTILS-FINAL.
(%boot3-inputs): Adjust accordingly.
(%boot4-inputs): Remove.
(%final-inputs): Use %BOOT3-INPUTS.
* guix/build-system/trivial.scm: New file.
* Makefile.am (MODULES): Add it.
* tests/packages.scm ("trivial"): New test.
* guix/packages.scm (package-derivation): Allow SOURCE to be #f.
* distro/base.scm (%bootstrap-inputs): Remove GMP, MPFR, and MPC.
(substitute-keyword-arguments): New macro.
(gcc-boot0): Add dependency on the Binutils, GMP, MPFR, and MPC
tarballs. Add a `unpack-binutils&co' phase to unpack them and symlink
them so they get built, and to patch errors in `configure'.
(glibc-final): Use `substitute-keyword-arguments' instead of a loop.
(gcc-final): Inherit from GCC-4.7 instead of GCC-BOOT0.
This is a first step towards bootstrapping from a set of pre-built,
statically-linked binaries.
* guix/build-system/gnu.scm (package-with-explicit-inputs,
standard-inputs): New procedure.
(%store): New variable.
(%standard-inputs): Remove.
(gnu-build): New `implicit-inputs?' keyword parameter. Use it to
choose whether to use `(standard-inputs SYSTEM)' or the empty list.
* distro/base.scm (guile-2.0): Remove dependency on XZ, which is now
implicit.
(%bootstrap-inputs, gcc-boot0, binutils-boot0, linux-headers-boot0,
%boot1-inputs, glibc-final, %boot2-inputs, m4-boot2, gmp-boot2,
mpfr-boot2, mpc-boot2, %boot3-inputs, gcc-final, %boot4-inputs,
%final-inputs): New variables.
* guix/packages.scm (transitive-inputs): New procedure.
(package-transitive-inputs): Rewrite in terms of `transitive-inputs'.
(package-transitive-propagated-inputs): New procedure.
* guix/build/utils.scm (substitute): Do not pass the OUT to PROC; use
`list-matches' instead of `regexp-exec' and pass a list of matches to
PROC. Expect PROC to return a string, and output that. Fold over
RX+PROC in order. Use `(read-line p 'concat)' to include the trailing
delimiter in LINE.
(substitute*): Produce code to iterate over the matches, and return a
string, which includes anything from the original line that's in
between matches.
* distro/base.scm (gcc-4.7, glibc): Adjust accordingly: remove use
of (ice-9 regex) and `regexp-substitute/global'; return a string.
* guix/derivations.scm (%guile-for-build): Use `nixpkgs-derivation*'
instead of `nixpkgs-derivation'.
(build-expression->derivation): New `guile-for-build' keyword
parameter. Use it.
* guix/build/gnu-build-system.scm (set-paths): Add new `path-exclusions'
parameter; honor it.
* guix/build-system/gnu.scm (gnu-build): New `path-exclusions' keyword
parameter; pass it to BUILDER.
* distro/base.scm (gcc-4.7): Exclude "libc" from $LIBRARY_PATH.
* guix/build/gnu-build-system.scm (strip): New procedure.
(%standard-phases): Add it.
* guix/build-system/gnu.scm (gnu-build): New `strip-binaries?',
`strip-flags', and `strip-directories' keyword parameters. Pass them
to BUILDER.
* guix/packages.scm (&package-error, &package-input-error): New
condition types.
(package-derivation): Raise a `&package-input-error' when no match is
made.
* distro/base.scm (coreutils)[arguments]: Remove
"FORCE_UNSAFE_CONFIGURE" setting, since in fact, this is no problem
when using Nix with separate build users.
* guix/build/utils.scm (patch-shebang): Add an optional `path'
parameter. Change SHEBANG-RX to match the whole interpreter file
name. Don't patch when BIN and CMD are the same. Add docstring.
* guix/build/gnu-build-system.scm (patch-shebangs): New procedure.
(%standard-phases): Add it.
* guix/build-system/gnu.scm (gnu-build): New `patch-shebangs?' keyword
parameter. Pass it to the builder's `gnu-build'.
* Makefile.am (.scm.go): Define $NIX_INSTANTIATE.
(TESTS_ENVIRONMENT): Likewise, and define $NIX_HASH.
* guix/utils.scm (nixpkgs-derivation): Use $NIX_INSTANTIATE when
defined.
* tests/utils.scm (%nix-hash): New variable.
("sha256 & bytevector->nix-base32-string"): Use it.
* distro/base.scm (readline): New variable.
(guile-1.8, guile-2.0): Use it.
* distro/readline-link-ncurses.patch: New file.
* Makefile.am (nobase_dist_guilemodule_DATA): Add it.
* Makefile.am (TESTS_ENVIRONMENT): Remove `guile' invocation. Add
semicolons, and export the variables as shown in the Automake 1.12
manual.
(LOG_COMPILER): New variable, with `guile' invocation.
* guix/packages.scm (package-transitive-inputs): New procedure.
(package-derivation): Use it to compute INPUTS.
* tests/packages.scm (dummy-package): New macro.
("package-transitive-inputs"): New test.
* guix/build/utils.scm (substitute): Change to accept a `pattern+procs'
parameter. Iterate over it.
(substitute*): Adjust accordingly.
* distro/base.scm (guile-1.8): Adjust accordingly.
* guix-build.in (leave): New macro, formerly in `guix-build'.
(show-help): Document `--cores'.
(%options): Add `--cores'.
(guix-build): Remove `leave' macro from here. Pass the `cores' option
value to `set-build-options'.
* guix/build/utils.scm (let-matches, substitute*): New macros.
* distro/base.scm (guile-1.8): Use `substitute*' instead of
`substitute'. Remove the #:modules argument.
* guix/build/gnu-build-system.scm (set-paths): Dump the value of
environment variables in the `environment-variables' files, similar to
what Nixpkgs does.
* guix/build/gnu-build-system.scm (patch): New procedure.
(%standard-phases): Add `patch'.
* guix/build-system/gnu.scm (gnu-build): Add `patches' and `patch-flags'
parameters. Pass them on.
* guix/packages.scm (<package-source>): Rename to...
(<origin>): ... this. Update users.
* distro/base.scm (libsigsegv, gawk, hello): Adjust to renaming; refer
to VERSION to build the URL.
* guix/utils.scm (define-record-type*)[make-syntactic-constructor]: Bind
all the ((FIELD VALUE) ...) in a `letrec*'. Adjust `field-value'
accordingly.
* tests/utils.scm ("define-record-type* with letrec* behavior"): New
test.
* guix/packages.scm (package-derivation): When ARGS is a procedure, call
(ARGS SYSTEM).
* distro/base.scm (gawk)[arguments]: Turn into a procedure, to disable
tests on Cygwin.
* 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.
We were already relying on the new version in `set-build-options', so
this patch fixes that.
* guix/store.scm (%protocol-version): Increase.
(open-connection)[reserve-space?]: New argument. Pass it to the
server when it's recent enough.
* 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.
* guix/store.scm (valid-path?): New procedure.
* tests/builders.scm ("http-fetch", "gnu-build"): Use it.
* tests/derivations.scm ("add-to-store, flat", "add-to-store,
recursive", "derivation with no inputs", "build derivation with 1
source", "build derivation with coreutils",
"build-expression->derivation with expression returning #f"):
Likewise.
* guix/store.scm (set-build-options)[build-cores, use-substitutes?]: New
keyword parameters.
[send]: Change to expect a type, and use `write-arg'.
Send settings for BUILD-CORES and USE-SUBSTITUTES? when the server
supports it.
* guix/packages.scm (<package>)[arguments]: Default to '().
* distro/base.scm (libsigsegv, gawk): New packages.
(hello): Use GAWK instead of (nixpkgs-derivation "gawk").
* guix/packages.scm (<location>): New record type.
(location, source-properties->location): New procedures.
(<package>)[location]: New field.
* tests/packages.scm ("GNU Hello"): Test `package-location'.
* Makefile.am (MODULES): Add `guix/packages.scm' and `distro/base.scm'.
(TESTS): Add `tests/packages.scm'.
(EXTRA_DIST): New variable.
* guix/packages.scm, distro/base.scm, tests/packages.scm: New files.
* guix/http.scm (http-fetch): Make `name' an optional argument, to match
the expectations of `package-source-derivation'.
* 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.
* guix/build/gnu-build-system.scm (set-paths, build, check, install):
New procedures.
(unpack): Make `source' a keyword arg; add `#:allow-other-keys'.
(configure): Likewise.
(%standard-phases): New variable.
(gnu-build): Make `source', `outputs', and `inputs' keyword arguments;
add `phases' keyword argument; #:allow-other-keys; add rest arguments
`args'. Invoke each of PHASES in order within `every'.
* guix/gnu-build-system.scm (gnu-build): Add `make-flags' and `phases'
keyword arguments. Update builder's `gnu-build' call to match the new
convention.
* 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.
* guix/store.scm (current-build-output-port): New variable.
(process-stderr): Add docstring. Always return #f, except upon
%STDERR-LAST. Upon %STDERR-NEXT, write to
`current-build-output-port', not `current-error-port'.
(set-build-options): Loop until `process-stderr' returns true.
(define-operation): Likewise.
(build-derivations): Update docstring to mention that it's
synchronous.
* 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.
* guix/derivations.scm (build-expression->derivation): Add all of INPUTS
as inputs to the final derivation.
* guix/build/gnu-build-system.scm, guix/build/utils.scm,
guix/gnu-build-system.scm: New files.
* tests/builders.scm ("gnu-build"): New test.
* guix/derivations.scm (imported-files)[builder]: For TAIL, check
whether it exists before (mkdir TAIL).
* tests/derivations.scm ("imported-files"): Add file with a common
prefix.
* guix/derivations.scm (imported-modules): New procedure.
(build-expression->derivation): New keyword argument `modules'.
Use `imported-modules' when MODULES is non-empty, and pass it with
`-L' to GUILE.
* guix/build/http.scm, guix/http.scm, tests/builders.scm: New files.
* guix/derivations.scm (imported-files): New procedure.
(build-expression->derivation): Correctly handle inputs that are
sources and not derivation paths.
* tests/derivations.scm ("imported-files"): New test.
* guix/utils.scm (gnu-triplet->nix-system): New procedure.
(%current-system): New variable.
* tests/utils.scm ("gnu-triplet->nix-system"): New test.
* tests/derivations.scm (%current-system): Remove. Update users to
use (%current-system) instead.
* guix/derivations.scm (build-expression->derivation): Add `outputs'
keyword parameter; pass it to `derivation'. Define `%outputs' in the
prologue.
* tests/derivations.scm ("build-expression->derivation with two
outputs"): New test.
* guix/derivations.scm (build-expression->derivation): Pass HASH and
HASH-ALGO to `derivation'.
* tests/derivations.scm ("build-expression->derivation for fixed-output
derivation"): New test.
* guix/derivations.scm (read-derivation)[outputs->alist]: For
fixed-outputs, convert HASH with `base16-string->bytevector'.
(write-derivation): Likewise, convert HASH-ALGO to a string and HASH
to a base16 string.
(derivation-hash): Expect HASH to be a bytevector, not a string;
convert HASH with `bytevector->base16-string'.
* tests/derivations.scm ("fixed-output derivation"): New test.
* guix/derivations.scm (%guile-for-build): New parameter.
(build-expression->derivation): New procedure.
* tests/derivations.scm ("build-expression->derivation without inputs",
"build-expression->derivation with one input"): New tests.
* guix/derivations.scm (derivation-path->output-path): New procedure.
(derivation-hash): Call `memoize'. In the fixed-output case, convert
HASH-ALGO to a string. In the other case, sort inputs in the
alphabetical order of their hex hash. For inputs with no sub-drvs,
add "out" as the sub-drv.
* guix/utils.scm (%nixpkgs-directory): New parameter.
(nixpkgs-derivation, memoize): New procedures.
* tests/derivations.scm ("build derivation with 1 source"): Remove
useless shebang.
(%coreutils): New variable.
("build derivation with coreutils"): New test.
* guix/store.scm (%store-prefix): New parameter.
(store-path?, derivation-path?): New procedures.
* guix/derivations.scm (write-derivation): Pass SOURCES through
`object->string'.
(compressed-hash, store-path, output-path, derivation): New
procedures.
* tests/derivations.scm (%store): New global variable.
("derivation with no inputs"): New test.
* guix/utils.scm (bytevector-quintet-ref-right,
bytevector-quintet-fold): New procedures.
(bytevector-quintet-fold-right): Add `quintet-fold' parameter; use it
instead of `bytevector-quintet-fold'.
(bytevector->base32-string): Pass BYTEVECTOR-QUINTET-FOLD as the
first parameter.
(bytevector->nix-base32-string): Pass BYTEVECTOR-QUINTET-FOLD-RIGHT as
the first parameter.
* tests/utils.scm ("sha256 & bytevector->nix-base32-string"): New test.
* guix/store.scm (&nix-error, &nix-protocol-error): New SRFI-35
condition types.
(process-stderr): Raise an error condition upon protocol errors
instead of returning to the caller. This allows the connection to be
reused for further interactions.
* guix/derivations.scm: Export `read-derivation' and `write-derivation'.
* srfi/srfi-64.scm, srfi/srfi-64.upstream.scm: New files, from libchop.
* tests/derivations.scm, tests/test.drv: New files.
The ‘pre-inst-env’ script sets up all the environment variables
necessary to support this.
* The Perfect Setup
The Perfect Setup to hack on Guix is basically the perfect setup used
for Guile hacking (info "(guile) Using Guile in Emacs"). First, you
need more than an editor, you need [[http://www.gnu.org/software/emacs][Emacs]], empowered by the wonderful
[[http://nongnu.org/geiser/][Geiser]].
Geiser allows for interactive and incremental development from within
Emacs: code compilation and evaluation from within buffers, access to
on-line documentation (docstrings), context-sensitive completion, M-. to
jump to an object definition, a REPL to try out your code, and more.
To actually edit the code, Emacs already has a neat Scheme mode. But in
addition to that, you must not miss [[http://www.emacswiki.org/emacs/ParEdit][Paredit]]. It provides facilities to
directly operate on the syntax tree, such as raising an s-expression or
wrapping it, swallowing or rejecting the following s-expression, etc.
* Submitting Patches
Development is done using the Git distributed version control system. Thus,
access to the repository is not strictly necessary. We welcome contributions
in the form of patches as produced by ‘git format-patch’ sent to
guix-devel@gnu.org. Please write commit logs in the [[http://www.gnu.org/prep/standards/html_node/Change-Logs.html#Change-Logs][GNU ChangeLog format]].
As you become a regular contributor, you may find it convenient to have write
access to the repository (see below.)
* Coding Style
In general our code follows the [[info:standards][GNU Coding Standards]] (GCS). However, the GCS
do not say much about Scheme, so here are some additional rules.
** Programming Paradigm
Scheme code in Guix is written in a purely functional style. One exception is
code that involves input/output, and procedures that implement low-level
concepts, such as the ‘memoize’ procedure.
** Modules
Guile modules that are meant to be used on the builder side must live in the
(guix build …) name space. They must not refer to other Guix or GNU modules.
However, it is OK for a “host-side” module to use a build-side module.
Modules that deal with the broader GNU system should be in the (gnu …) name
space rather than (guix …).
** Data Types and Pattern Matching
The tendency in classical Lisp is to use lists to represent everything, and
then to browse them “by hand” using ‘car’, ‘cdr’, ‘cadr’, and co. There are
several problems with that style, notably the fact that it is hard to read,
error-prone, and a hindrance to proper type error reports.
Guix code should define appropriate data types (for instance, using
‘define-record-type*’) rather than abuse lists. In addition, it should use
pattern matching, via Guile’s (ice-9 match) module, especially when matching
lists.
** Formatting Code
When writing Scheme code, we follow common wisdom among Scheme programmers.
In general, we follow the [[http://mumble.net/~campbell/scheme/style.txt][Riastradh's Lisp Style Rules]]. This document happens
to describe the conventions mostly used in Guile’s code too. It is very
thoughtful and well written, so please do read it.
Some special forms introduced in Guix, such as the ‘substitute*’ macro, have
special indentation rules. These are defined in the .dir-locals.el file,
which Emacs automatically uses. If you do not use Emacs, please make sure to
let your editor know the rules.
We require all top-level procedures to carry a docstring. This requirement
can be relaxed for simple private procedures in the (guix build …) name space,
though.
Procedures should not have more than four positional parameters. Use keyword
parameters for procedures that take more than four parameters.
* Commit Access
For frequent contributors, having write access to the repository is
convenient. When you deem it necessary, feel free to ask for it on the
mailing list. When you get commit access, please make sure to follow the
policy below (discussions of the policy can take place on guix-devel@gnu.org.)
Non-trivial patches should always be posted to guix-devel@gnu.org (trivial
patches include fixing typos, etc.)
For patches that just add a new package, and a simple one, it’s OK to commit,
if you’re confident (which means you successfully built it in a chroot setup,
and have done a reasonable copyright and license auditing.) Likewise for
package upgrades. We have a mailing list for commit notifications
(guix-commits@gnu.org), so people can notice. Before pushing your changes,
make sure to run ‘git pull --rebase’.
For anything else, please post to guix-devel@gnu.org and leave time for a
review, without committing anything. If you didn’t receive any reply
after two weeks, and if you’re confident, it’s OK to commit.
That last part is subject to being adjusted, allowing individuals to commit
directly on non-controversial changes on parts they’re familiar with.
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.