~ruther/guix-local

4979ee04f07defb55dc448a5682913dc41935760 — Ludovic Courtès 12 years ago 07fb21b + eafee15
Merge branch 'core-updates'
M build-aux/check-available-binaries.scm => build-aux/check-available-binaries.scm +2 -1
@@ 1,5 1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 48,6 48,7 @@
                    drv)
            #f))))

  (set-build-options store #:use-substitutes? #t)
  (let ((result (every (compose (warn (cut has-substitutes? store <>))
                                derivation->output-path)
                       total)))

M build-aux/hydra/gnu-system.scm => build-aux/hydra/gnu-system.scm +16 -11
@@ 41,6 41,7 @@
             (guix derivations)
             ((guix utils) #:select (%current-system))
             (gnu packages)
             (gnu packages gcc)
             (gnu packages base)
             (gnu packages gawk)
             (gnu packages guile)


@@ 87,7 88,11 @@ SYSTEM."
           (cut package-cross-derivation <> <> target <>))))

(define %core-packages
  (list gmp mpfr mpc coreutils findutils diffutils patch sed grep
  ;; Note: Don't put the '-final' package variants because (1) that's
  ;; implicit, and (2) they cannot be cross-built (due to the explicit input
  ;; chain.)
  (list gcc-4.8 gcc-4.7 glibc binutils
        gmp mpfr mpc coreutils findutils diffutils patch sed grep
        gawk gnu-gettext hello guile-2.0 zlib gzip xz
        %bootstrap-binaries-tarball
        %binutils-bootstrap-tarball


@@ 106,15 111,8 @@ SYSTEM."
(define (hydra-jobs store arguments)
  "Return Hydra jobs."
  (define systems
    (match (filter-map (match-lambda
                        (('system . value)
                         value)
                        (_ #f))
                       arguments)
      ((lst ..1)
       lst)
      (_
       (list (%current-system)))))
    ;; Systems we want to build for.
    '("x86_64-linux" "i686-linux"))

  (define subset
    (match (assoc-ref arguments 'subset)


@@ 125,12 123,19 @@ SYSTEM."
    (compose string->symbol package-full-name))

  (define (cross-jobs system)
    (define (from-32-to-64? target)
      ;; Return true if SYSTEM is 32-bit and TARGET is 64-bit.
      ;; This hacks prevents known-to-fail cross-builds from i686-linux to
      ;; mips64el-linux-gnuabi64.
      (and (string-prefix? "i686-" system)
           (string-suffix? "64" target)))

    (append-map (lambda (target)
                  (map (lambda (package)
                         (package-cross-job store (job-name package)
                                            package target system))
                       %packages-to-cross-build))
                %cross-targets))
                (remove from-32-to-64? %cross-targets)))

  ;; Return one job for each package, except bootstrap packages.
  (let ((base-packages (delete-duplicates

M gnu-system.am => gnu-system.am +3 -3
@@ 253,12 253,13 @@ dist_patch_DATA =						\
  gnu/packages/patches/avahi-localstatedir.patch		\
  gnu/packages/patches/bigloo-gc-shebangs.patch			\
  gnu/packages/patches/binutils-ld-new-dtags.patch		\
  gnu/packages/patches/binutils-loongson-madd-fix.patch		\
  gnu/packages/patches/binutils-loongson-workaround.patch	\
  gnu/packages/patches/bitlbee-fix-tests.patch			\
  gnu/packages/patches/bitlbee-memset-fix.patch			\
  gnu/packages/patches/cdparanoia-fpic.patch			\
  gnu/packages/patches/cmake-fix-tests.patch			\
  gnu/packages/patches/coreutils-dummy-man.patch		\
  gnu/packages/patches/coreutils-skip-nohup.patch		\
  gnu/packages/patches/cpio-gets-undeclared.patch		\
  gnu/packages/patches/curl-fix-test172.patch			\
  gnu/packages/patches/dbus-localstatedir.patch			\


@@ 278,7 279,6 @@ dist_patch_DATA =						\
  gnu/packages/patches/glib-tests-prlimit.patch			\
  gnu/packages/patches/glibc-bootstrap-system.patch		\
  gnu/packages/patches/glibc-ldd-x86_64.patch			\
  gnu/packages/patches/glibc-make-4.0.patch			\
  gnu/packages/patches/gnunet-fix-scheduler.patch		\
  gnu/packages/patches/gnunet-fix-tests.patch    		\
  gnu/packages/patches/gobject-introspection-cc.patch		\


@@ 312,7 312,7 @@ dist_patch_DATA =						\
  gnu/packages/patches/perl-no-sys-dirs.patch			\
  gnu/packages/patches/plotutils-libpng-jmpbuf.patch		\
  gnu/packages/patches/procps-make-3.82.patch			\
  gnu/packages/patches/python-fix-dbm.patch			\
  gnu/packages/patches/python-fix-tests.patch			\
  gnu/packages/patches/qemu-make-4.0.patch			\
  gnu/packages/patches/qemu-multiple-smb-shares.patch		\
  gnu/packages/patches/qt4-tests.patch				\

M gnu/packages/base.scm => gnu/packages/base.scm +76 -34
@@ 1,5 1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
;;;


@@ 32,6 32,8 @@
  #:use-module (gnu packages multiprecision)
  #:use-module (gnu packages perl)
  #:use-module (gnu packages linux)
  #:use-module (gnu packages texinfo)
  #:use-module (gnu packages pkg-config)
  #:use-module (guix packages)
  #:use-module (guix download)
  #:use-module (guix build-system gnu)


@@ 69,14 71,14 @@ command-line arguments, multiple languages, and so on.")
(define-public grep
  (package
   (name "grep")
   (version "2.15")
   (version "2.18")
   (source (origin
            (method url-fetch)
            (uri (string-append "mirror://gnu/grep/grep-"
                                version ".tar.xz"))
            (sha256
             (base32
              "052kjsafg2x7n2zpy3iw4pzwf8fdfng5pcvi9v3chx3rb1786nmz"))))
              "08773flbnx28ksy0y4mzd4iifysh7yysmzn8rkz9f57sfx86whz6"))))
   (build-system gnu-build-system)
   (synopsis "Print lines matching a pattern")
   (description


@@ 231,22 233,28 @@ used to apply commands with arbitrarily long arguments.")
(define-public coreutils
  (package
   (name "coreutils")
   (version "8.21")
   (version "8.22")
   (source (origin
            (method url-fetch)
            (uri (string-append "mirror://gnu/coreutils/coreutils-"
                                version ".tar.xz"))
            (sha256
             (base32
              "064f512185iysqqcvhnhaf3bfmzrvcgs7n405qsyp99zmfyl9amd"))))
              "04hjzzv434fb8ak3hh3dyhdvg3hqjjwvjmjxqzk1gh2jh6cr8gjv"))
            (patches (list (search-patch "coreutils-dummy-man.patch")
                           ;; TODO: remove this patch for >= 8.23
                           (search-patch "coreutils-skip-nohup.patch")))))
   (build-system gnu-build-system)
   (inputs `(("acl"  ,acl)                        ; TODO: add SELinux
             ("gmp"  ,gmp)

             ;; Perl is needed to run tests; remove it from cross builds.
             ,@(if (%current-target-system)
                   '()
                   `(("perl" ,perl)))))
             ("gmp"  ,gmp)))
   (native-inputs
    ;; Perl is needed to run tests in native builds, and to run the bundled
    ;; copy of help2man.  However, don't pass it when cross-compiling since
    ;; that would lead it to try to run programs to get their '--help' output
    ;; for help2man.
    (if (%current-target-system)
        '()
        `(("perl" ,perl))))
   (outputs '("out" "debug"))
   (arguments
    `(#:parallel-build? #f            ; help2man may be called too early


@@ 285,6 293,7 @@ functionality beyond that which is outlined in the POSIX standard.")
              "1nyvn8mknw0mf7727lprva3lisl1y0n03lvar342rrpdmz3qc1p6"))
            (patches (list (search-patch "make-impure-dirs.patch")))))
   (build-system gnu-build-system)
   (native-inputs `(("pkg-config", pkg-config)))  ; to detect Guile
   (inputs `(("guile" ,guile-2.0)))
   (outputs '("out" "debug"))
   (arguments


@@ 312,24 321,18 @@ change.  GNU make offers many powerful extensions over the standard utility.")
(define-public binutils
  (package
   (name "binutils")
   (version "2.23.2")
   (version "2.24")
   (source (origin
            (method url-fetch)
            (uri (string-append "mirror://gnu/binutils/binutils-"
                                version ".tar.bz2"))
            (sha256
             (base32
              "15qhbkz3r266xaa52slh857qn3abw7rb2x2jnhpfrafpzrb4x4gy"))
              "0ds1y7qa0xqihw4ihnsgg6bxanmb228r228ddvwzgrv4jszcbs75"))
            (patches (list (search-patch "binutils-ld-new-dtags.patch")
                           (search-patch "binutils-loongson-workaround.patch")
                           (search-patch "binutils-loongson-madd-fix.patch")))))
                           (search-patch "binutils-loongson-workaround.patch")))))
   (build-system gnu-build-system)

   ;; Split Binutils in several outputs, mostly to avoid collisions in
   ;; user profiles with GCC---e.g., libiberty.a.
   (outputs '("out"                        ; ar, ld, binutils.info, etc.
              "lib"))                      ; libbfd.a, bfd.h, etc.

   ;; TODO: Add dependency on zlib + those for Gold.
   (arguments
    `(#:configure-flags '(;; Add `-static-libgcc' to not retain a dependency


@@ 341,7 344,15 @@ change.  GNU make offers many powerful extensions over the standard utility.")

                          ;; Glibc 2.17 has a "comparison of unsigned
                          ;; expression >= 0 is always true" in wchar.h.
                          "--disable-werror")))
                          "--disable-werror"

                          ;; Install BFD.  It ends up in a hidden directory,
                          ;; but it's here.
                          "--enable-install-libbfd"

                          ;; Make sure 'ar' and 'ranlib' produce archives in a
                          ;; deterministic fashion.
                          "--enable-deterministic-archives")))

   (synopsis "Binary utilities: bfd gas gprof ld")
   (description


@@ 356,14 367,14 @@ library for working with executable and object formats is also included.")
(define-public glibc
  (package
   (name "glibc")
   (version "2.18")
   (version "2.19")
   (source (origin
            (method url-fetch)
            (uri (string-append "mirror://gnu/glibc/glibc-"
                                version ".tar.xz"))
            (sha256
             (base32
              "18spla703zav8dq9fw7rbzkyv9qfisxb26p7amg1x3wjh7iy3d1c"))
              "18m2dssd6ja5arxmdxinc90xvpqcsnqjfwmjl2as07j0i3srff9d"))
            (snippet
             ;; Disable 'ldconfig' and /etc/ld.so.cache.  The latter is
             ;; required on LFS distros to avoid loading the distro's libc.so


@@ 372,10 383,7 @@ library for working with executable and object formats is also included.")
                (("use_ldconfig=yes")
                 "use_ldconfig=no")))
            (modules '((guix build utils)))
            (imported-modules modules)
            (patches (map search-patch
                          '("glibc-ldd-x86_64.patch"
                            "glibc-make-4.0.patch")))))
            (patches (list (search-patch "glibc-ldd-x86_64.patch")))))
   (build-system gnu-build-system)

   ;; Glibc's <limits.h> refers to <linux/limit.h>, for instance, so glibc


@@ 466,7 474,17 @@ library for working with executable and object formats is also included.")
                    ;; Same for `popen'.
                    (substitute* "libio/iopopen.c"
                      (("/bin/sh")
                       (string-append out "/bin/bash")))))
                       (string-append out "/bin/bash")))

                    ;; Make sure we don't retain a reference to the
                    ;; bootstrap Perl.
                    (substitute* "malloc/mtrace.pl"
                      (("^#!.*")
                       ;; The shebang can be omitted, because there's the
                       ;; "bilingual" eval/exec magic at the top of the file.
                       "")
                      (("exec @PERL@")
                       "exec perl"))))
                (alist-cons-after
                 'install 'install-locales
                 (lambda _


@@ 474,6 492,11 @@ library for working with executable and object formats is also included.")
                 %standard-phases))))

   (inputs `(("static-bash" ,(static-package bash-light))))

   ;; To build the manual, we need Texinfo and Perl.
   (native-inputs `(("texinfo" ,texinfo)
                    ("perl" ,perl)))

   (synopsis "The GNU C Library")
   (description
    "Any Unix-like operating system needs a C library: the library which


@@ 584,6 607,7 @@ and daylight-saving rules.")
                             (copy-file "make"
                                        (string-append bin "/make"))))
                ,phases))))))
     (native-inputs '())                          ; no need for 'pkg-config'
     (inputs %bootstrap-inputs))))

(define diffutils-boot0


@@ 736,6 760,13 @@ identifier SYSTEM."
     (native-inputs (alist-delete "texinfo"
                                  (package-native-inputs gcc-4.8))))))

(define perl-boot0
  (package-with-bootstrap-guile
   (package-with-explicit-inputs perl
                                 %boot0-inputs
                                 (current-source-location)
                                 #:guile %bootstrap-guile)))

(define (linux-libre-headers-boot0)
  "Return Linux-Libre header files for the bootstrap environment."
  ;; Note: this is wrapped in a thunk to nicely handle circular dependencies


@@ 746,12 777,20 @@ identifier SYSTEM."
                  #:implicit-inputs? #f
                  ,@(package-arguments linux-libre-headers)))
     (native-inputs
      (let ((perl (package-with-explicit-inputs perl
                                                %boot0-inputs
                                                (current-source-location)
                                                #:guile %bootstrap-guile)))
        `(("perl" ,perl)
          ,@%boot0-inputs))))))
      `(("perl" ,perl-boot0)
        ,@%boot0-inputs)))))

(define texinfo-boot0
  ;; Texinfo used to build libc's manual.
  ;; We build without ncurses because it fails to build at this stage, and
  ;; because we don't need the stand-alone Info reader.
  ;; Also, use %BOOT0-INPUTS to avoid building Perl once more.
  (let ((texinfo (package (inherit texinfo)
                   (inputs (alist-delete "ncurses" (package-inputs texinfo))))))
    (package-with-bootstrap-guile
     (package-with-explicit-inputs texinfo %boot0-inputs
                                   (current-source-location)
                                   #:guile %bootstrap-guile))))

(define %boot1-inputs
  ;; 2nd stage inputs.


@@ 785,6 824,9 @@ identifier SYSTEM."
                            "--enable-obsolete-rpc")
                      ,flags)))))
     (propagated-inputs `(("linux-headers" ,(linux-libre-headers-boot0))))
     (native-inputs
      `(("texinfo" ,texinfo-boot0)
        ("perl" ,perl-boot0)))
     (inputs
      `( ;; A native GCC is needed to build `cross-rpcgen'.
        ("native-gcc" ,@(assoc-ref %boot0-inputs "gcc"))

M gnu/packages/bash.scm => gnu/packages/bash.scm +2 -2
@@ 51,14 51,14 @@
                 (symlink "bash" "sh"))))))
    (package
     (name "bash")
     (version "4.2")
     (version "4.3")
     (source (origin
              (method url-fetch)
              (uri (string-append
                    "mirror://gnu/bash/bash-" version ".tar.gz"))
              (sha256
               (base32
                "1n5kbblp5ykbz5q8aq88lsif2z0gnvddg9babk33024wxiwi2ym2"))))
                "1m14s1f61mf6bijfibcjm9y6pkyvz6gibyl8p4hxq90fisi8gimg"))))
     (build-system gnu-build-system)
     (inputs `(("readline" ,readline)
               ("ncurses" ,ncurses)))             ; TODO: add texinfo

M gnu/packages/bdw-gc.scm => gnu/packages/bdw-gc.scm +5 -5
@@ 23,17 23,17 @@
  #:use-module (guix build-system gnu)
  #:use-module (gnu packages pkg-config))

(define-public libgc
(define-public libgc-7.2
  (package
   (name "libgc")
   (version "7.2d")
   (version "7.2e")
   (source (origin
            (method url-fetch)
            (uri (string-append "http://www.hboehm.info/gc/gc_source/gc-"
                                version ".tar.gz"))
            (sha256
             (base32
              "0phwa5driahnpn79zqff14w9yc8sn3599cxz91m78hqdcpl0mznr"))))
              "0jxgr71rhk58dzc1ihqs51vldh2qs1m154bn41qh6q1dm145nc89"))))
   (build-system gnu-build-system)
   (arguments
    ;; Make it so that we don't rely on /proc.  This is especially useful in


@@ 86,8 86,8 @@ lock-free code, experiment with thread programming paradigms, etc.")
    ;; Some source files are X11-style, others are GPLv2+.
    (license gpl2+)))

(define-public libgc-7.4
  (package (inherit libgc)
(define-public libgc
  (package (inherit libgc-7.2)
    (version "7.4.0")
    (source (origin
              (method url-fetch)

M gnu/packages/compression.scm => gnu/packages/compression.scm +2 -1
@@ 1,6 1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 100,7 101,7 @@ file; as a result, it is often used in conjunction with \"tar\", resulting in
         '(lambda* (#:key outputs #:allow-other-keys)
            (with-directory-excursion (assoc-ref outputs "out")
              (mkdir "share")
              (rename-file "man" "share"))))
              (rename-file "man" "share/man"))))
        (build-shared-lib
         ;; Build a shared library.
         '(lambda* (#:key inputs #:allow-other-keys)

M gnu/packages/gettext.scm => gnu/packages/gettext.scm +2 -2
@@ 34,14 34,14 @@
(define-public gnu-gettext
  (package
    (name "gettext")
    (version "0.18.3.1")
    (version "0.18.3.2")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/gettext/gettext-"
                                 version ".tar.gz"))
             (sha256
              (base32
               "0p940zmmw1lndvdhck2vrazikjhr02affwy47mmpfxqvacrrm3qd"))))
               "1my5njl7mp663abpdn8qsm5i462wlhlnb5q50fmhgd0fsr9f996i"))))
    (build-system gnu-build-system)
    (inputs
     `(("expat" ,expat)))

M gnu/packages/gnupg.scm => gnu/packages/gnupg.scm +0 -4
@@ 50,10 50,6 @@
       (base32
        "0pz58vr12qihq2f0bypjxsb6cf6ajq5258fmfm8s6lvwm3b9xz6a"))))
    (build-system gnu-build-system)
    (arguments
     (if (%current-target-system)
         '(#:configure-flags '("CC_FOR_BUILD=gcc"))
         '()))
    (home-page "http://gnupg.org")
    (synopsis
     "Libgpg-error, a small library that defines common error values for all GnuPG components")

M gnu/packages/guile.scm => gnu/packages/guile.scm +6 -17
@@ 1,5 1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 108,14 109,14 @@ without requiring the source code to be rewritten.")
(define-public guile-2.0
  (package
   (name "guile")
   (version "2.0.9")
   (version "2.0.11")
   (source (origin
            (method url-fetch)
            (uri (string-append "mirror://gnu/guile/guile-" version
                                ".tar.xz"))
            (sha256
             (base32
              "0nw9y8vjyz4r61v06p9msks5lm58pd91irmzg4k487vmv743h2pp"))))
              "1qh3j7308qvsjgwf7h94yqgckpbgz2k3yqdkzsyhqcafvfka9l5f"))))
   (build-system gnu-build-system)
   (native-inputs `(("pkgconfig" ,pkg-config)))
   (inputs `(("libffi" ,libffi)


@@ 136,7 137,7 @@ without requiring the source code to be rewritten.")

      ;; The headers and/or `guile-2.0.pc' refer to these packages, so they
      ;; must be propagated.
      ("bdw-gc" ,libgc-7.4)
      ("bdw-gc" ,libgc)
      ("gmp" ,gmp)))

   (self-native-input? #t)


@@ 152,11 153,7 @@ without requiring the source code to be rewritten.")
                    (substitute* "module/ice-9/popen.scm"
                      (("/bin/sh")
                       (string-append bash "/bin/bash")))))
                %standard-phases)

      ,@(if (%current-target-system)
            '(#:configure-flags '("CC_FOR_BUILD=gcc"))
            '())))
                %standard-phases)))

   (native-search-paths
    (list (search-path-specification


@@ 179,15 176,7 @@ without requiring the source code to be rewritten.")
(define-public guile-2.0/fixed
  ;; A package of Guile 2.0 that's rarely changed.  It is the one used
  ;; in the `base' module, and thus changing it entails a full rebuild.
  (package (inherit guile-2.0)
    (location (source-properties->location (current-source-location)))

    ;; Keep using the stable libgc.
    (propagated-inputs (map (match-lambda
                             (("bdw-gc" _)
                              `("bdw-gc" ,libgc))
                             (x x))
                            (package-propagated-inputs guile-2.0)))))
  guile-2.0)


;;;

M gnu/packages/ld-wrapper.scm => gnu/packages/ld-wrapper.scm +2 -2
@@ 11,7 11,7 @@ main="(@ (gnu build-support ld-wrapper) ld-wrapper)"
exec @GUILE@ -c "(load-compiled \"$0.go\") (apply $main (cdr (command-line)))" "$@"
!#
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 63,7 63,7 @@ exec @GUILE@ -c "(load-compiled \"$0.go\") (apply $main (cdr (command-line)))" "

(define %store-directory
  ;; File name of the store.
  (or (getenv "NIX_STORE") "/nix/store"))
  (or (getenv "NIX_STORE") "/gnu/store"))

(define %temporary-directory
  ;; Temporary directory.

M gnu/packages/libffi.scm => gnu/packages/libffi.scm +6 -14
@@ 1,5 1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 25,18 25,12 @@

(define-public libffi
  (let ((post-install-phase
         ;; Install headers in the right place.
         ;; Keep headers where libffi.pc expects them, but also make them
         ;; available in $includedir where some users expect them.
         '(lambda* (#:key outputs #:allow-other-keys)
            (define out (assoc-ref outputs "out"))
            (mkdir (string-append out "/include"))
            (with-directory-excursion
                (string-append out "/lib/libffi-3.0.13/include")
              (for-each (lambda (h)
                          (format #t "moving `~a' to includedir~%" h)
                          (rename-file h (string-append out "/include/" h)))
                        (scandir "."
                                 (lambda (x)
                                   (not (member x '("." ".."))))))))))
            (symlink (string-append out "/lib/libffi-3.0.13/include")
                     (string-append out "/include")))))
   (package
    (name "libffi")
    (version "3.0.13")


@@ 50,9 44,7 @@
               "077ibkf84bvcd6rw1m6jb107br63i2pp301rkmsbgg6300adxp8x"))
             (patches (list (search-patch "libffi-mips-n32-fix.patch")))))
    (build-system gnu-build-system)
    (arguments `(#:modules ((guix build utils) (guix build gnu-build-system)
                            (ice-9 ftw) (srfi srfi-26))
                 #:phases (alist-cons-after 'install 'post-install
    (arguments `(#:phases (alist-cons-after 'install 'post-install
                                            ,post-install-phase
                                            %standard-phases)))
    (outputs '("out" "debug"))

M gnu/packages/lsh.scm => gnu/packages/lsh.scm +0 -2
@@ 71,8 71,6 @@ basis for almost any application.")
              (modules '((guix build utils)))
              (snippet
               '(begin
                  (use-modules (guix build utils))

                  (substitute* "src/testsuite/functions.sh"
                    (("localhost")
                     ;; Avoid host name lookups since they don't work in

M gnu/packages/make-bootstrap.scm => gnu/packages/make-bootstrap.scm +1 -4
@@ 502,10 502,7 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
                   `(;; When `configure' checks for ltdl availability, it
                     ;; doesn't try to link using libtool, and thus fails
                     ;; because of a missing -ldl.  Work around that.
                     #:configure-flags '("LDFLAGS=-ldl"
                                         ,@(if (%current-target-system)
                                               '("CC_FOR_BUILD=gcc")
                                               '()))
                     #:configure-flags '("LDFLAGS=-ldl")

                     #:phases (alist-cons-before
                               'configure 'static-guile

M gnu/packages/multiprecision.scm => gnu/packages/multiprecision.scm +2 -2
@@ 77,13 77,13 @@ floating-point computations with correct rounding.")
(define-public mpc
  (package
   (name "mpc")
   (version "1.0.1")
   (version "1.0.2")
   (source (origin
            (method url-fetch)
            (uri (string-append
                  "mirror://gnu/mpc/mpc-" version ".tar.gz"))
            (sha256 (base32
                     "1zq0fidp1jii2j5k5n9hmx55a6wwid33gjzhimvxq9d5zrf82npd"))))
                     "1264h3ivldw5idph63x35dqqdzqqbxrm5vlir0xyx727i96zaqdm"))))
   (build-system gnu-build-system)
   (outputs '("out" "debug"))
   (propagated-inputs `(("gmp" ,gmp)              ; <mpc.h> refers to both

M gnu/packages/ncurses.scm => gnu/packages/ncurses.scm +6 -0
@@ 1,5 1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 99,6 100,11 @@
          ,(string-append "--includedir=" (assoc-ref %outputs "out")
                          "/include")

          ;; By default man pages land in PREFIX/man, but we want them
          ;; in PREFIX/share/man.
          ,(string-append "--mandir=" (assoc-ref %outputs "out")
                          "/share/man")

          ;; C++ bindings fail to build on
          ;; `i386-pc-solaris2.11' with GCC 3.4.3:
          ;; <http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6395191>.

D gnu/packages/patches/binutils-loongson-madd-fix.patch => gnu/packages/patches/binutils-loongson-madd-fix.patch +0 -44
@@ 1,44 0,0 @@
Fix the Loongson 2F specific fused multiply-add instructions on paired singles to
use the encoding recognized by the processor, as opposed to the mistaken english
Loongson 2F documentation.

Patch by Mark H Weaver <mhw@netris.org>.

--- binutils/opcodes/mips-opc.c.orig	2012-09-04 10:21:10.000000000 -0400
+++ binutils/opcodes/mips-opc.c	2013-10-06 02:23:33.679983766 -0400
@@ -931,7 +931,7 @@
 {"madd.s",	"D,S,T",	0x72000018,	0xffe0003f,	RD_S|RD_T|WR_D|FP_S,	0,	IL2F	},
 {"madd.ps", "D,R,S,T",	0x4c000026, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D,    0,		I5_33	},
 {"madd.ps",	"D,S,T",	0x45600018,	0xffe0003f,	RD_S|RD_T|WR_D|FP_D,	0,	IL2E	},
-{"madd.ps",	"D,S,T",	0x71600018,	0xffe0003f,	RD_S|RD_T|WR_D|FP_D,	0,	IL2F	},
+{"madd.ps",	"D,S,T",	0x72c00018,	0xffe0003f,	RD_S|RD_T|WR_D|FP_D,	0,	IL2F	},
 {"madd",    "s,t",      0x0000001c, 0xfc00ffff, RD_s|RD_t|WR_HILO,           0,		L1	},
 {"madd",    "s,t",      0x70000000, 0xfc00ffff, RD_s|RD_t|MOD_HILO,          0,		I32|N55	},
 {"madd",    "s,t",      0x70000000, 0xfc00ffff, RD_s|RD_t|WR_HILO|IS_M,      0,		G1	},
@@ -1041,7 +1041,7 @@
 {"msub.s",	"D,S,T",	0x72000019,	0xffe0003f,	RD_S|RD_T|WR_D|FP_S,	0,	IL2F	},
 {"msub.ps", "D,R,S,T",	0x4c00002e, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0,		I5_33	},
 {"msub.ps",	"D,S,T",	0x45600019,	0xffe0003f,	RD_S|RD_T|WR_D|FP_D,	0,	IL2E	},
-{"msub.ps",	"D,S,T",	0x71600019,	0xffe0003f,	RD_S|RD_T|WR_D|FP_D,	0,	IL2F	},
+{"msub.ps",	"D,S,T",	0x72c00019,	0xffe0003f,	RD_S|RD_T|WR_D|FP_D,	0,	IL2F	},
 {"msub",    "s,t",      0x0000001e, 0xfc00ffff, RD_s|RD_t|WR_HILO,	0,		L1    	},
 {"msub",    "s,t",      0x70000004, 0xfc00ffff, RD_s|RD_t|MOD_HILO,     0,		I32|N55 },
 {"msub",    "7,s,t",	0x70000004, 0xfc00e7ff, MOD_a|RD_s|RD_t,        0,              D32	},
@@ -1157,7 +1157,7 @@
 {"nmadd.s",	"D,S,T",	0x7200001a,	0xffe0003f,	RD_S|RD_T|WR_D|FP_S,	0,	IL2F	},
 {"nmadd.ps","D,R,S,T",	0x4c000036, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0,		I5_33	},
 {"nmadd.ps",	"D,S,T",	0x4560001a,	0xffe0003f,	RD_S|RD_T|WR_D|FP_D,	0,	IL2E	},
-{"nmadd.ps",	"D,S,T",	0x7160001a,	0xffe0003f,	RD_S|RD_T|WR_D|FP_D,	0,	IL2F	},
+{"nmadd.ps",	"D,S,T",	0x72c0001a,	0xffe0003f,	RD_S|RD_T|WR_D|FP_D,	0,	IL2F	},
 {"nmsub.d", "D,R,S,T",	0x4c000039, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0,		I4_33	},
 {"nmsub.d",	"D,S,T",	0x4620001b,	0xffe0003f,	RD_S|RD_T|WR_D|FP_D,	0,	IL2E	},
 {"nmsub.d",	"D,S,T",	0x7220001b,	0xffe0003f,	RD_S|RD_T|WR_D|FP_D,	0,	IL2F	},
@@ -1166,7 +1166,7 @@
 {"nmsub.s",	"D,S,T",	0x7200001b,	0xffe0003f,	RD_S|RD_T|WR_D|FP_S,	0,	IL2F	},
 {"nmsub.ps","D,R,S,T",	0x4c00003e, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0,		I5_33	},
 {"nmsub.ps",	"D,S,T",	0x4560001b,	0xffe0003f,	RD_S|RD_T|WR_D|FP_D,	0,	IL2E	},
-{"nmsub.ps",	"D,S,T",	0x7160001b,	0xffe0003f,	RD_S|RD_T|WR_D|FP_D,	0,	IL2F	},
+{"nmsub.ps",	"D,S,T",	0x72c0001b,	0xffe0003f,	RD_S|RD_T|WR_D|FP_D,	0,	IL2F	},
 /* nop is at the start of the table.  */
 {"nor",     "d,v,t",	0x00000027, 0xfc0007ff,	WR_d|RD_s|RD_t,		0,		I1	},
 {"nor",     "t,r,I",	0,    (int) M_NOR_I,	INSN_MACRO,		0,		I1	},

A gnu/packages/patches/coreutils-dummy-man.patch => gnu/packages/patches/coreutils-dummy-man.patch +21 -0
@@ 0,0 1,21 @@
Patch adapted from <http://git.yoctoproject.org/cgit.cgi/poky/plain/meta/recipes-core/coreutils/coreutils-8.22/fix-for-dummy-man-usage.patch>.

Fix for 'dummy-man' usage, when cross-compiling.

The options should be before the final argument, otherwise, the following error
would appear when compiling:

  dummy-man: too many non-option arguments

--- coreutils-8.22/Makefile.in	2013-12-13 16:20:00.000000000 +0100
+++ coreutils-8.22/Makefile.in	2014-02-28 10:53:27.000000000 +0100
@@ -9977,8 +9977,8 @@ man/yes.1:       src/yes
 	  && $(run_help2man)						\
 		     --source='$(PACKAGE_STRING)'			\
 		     --include=$(srcdir)/man/$$name.x			\
-		     --output=$$t/$$name.1 $$t/$$name			\
 		     --info-page='coreutils \(aq'$$name' invocation\(aq' \
+		     --output=$$t/$$name.1 $$t/$$name			\
 	  && sed \
 	       -e 's|$*\.td/||g' \
 	       -e '/For complete documentation/d' \

A gnu/packages/patches/coreutils-skip-nohup.patch => gnu/packages/patches/coreutils-skip-nohup.patch +28 -0
@@ 0,0 1,28 @@
commit 5dce6bdfafc930dfd17d5d16aea7d1add3472066
Author: Pádraig Brady <P@draigBrady.com>
Date:   Wed Mar 5 15:14:07 2014 +0000

    tests: fix false failure in nohup.sh in non tty builds
    
    * tests/misc/nohup.sh: When running tests without a controlling tty,
    an exec failure is triggered in a subshell, which causes POSIX
    shells to immediately exit the subshell.  This was brought
    to notice by the newly conforming bash 4.3.
    Fixes http:/bugs.gnu.org/16940

diff --git a/tests/misc/nohup.sh b/tests/misc/nohup.sh
index 6d2b515..2328b43 100755
--- a/tests/misc/nohup.sh
+++ b/tests/misc/nohup.sh
@@ -63,6 +63,11 @@ rm -f nohup.out err
 # to stderr must be fatal.  Requires stdout to be terminal.
 if test -w /dev/full && test -c /dev/full; then
 (
+  # POSIX shells immediately exit the subshell on exec error.
+  # So check we can write to /dev/tty before the exec, which
+  # isn't possible if we've no controlling tty for example.
+  test -c /dev/tty && >/dev/tty || exit 0
+
   exec >/dev/tty
   test -t 1 || exit 0
   nohup echo hi 2> /dev/full

D gnu/packages/patches/glibc-make-4.0.patch => gnu/packages/patches/glibc-make-4.0.patch +0 -12
@@ 1,12 0,0 @@
Allow libc to be compiled with GNU Make 4.0.

--- glibc-2.18/configure	2013-08-11 00:52:55.000000000 +0200
+++ glibc-2.18/configure	2013-10-16 16:53:09.000000000 +0200
@@ -4772,7 +4772,7 @@ $as_echo_n "checking version of $MAKE...
   ac_prog_version=`$MAKE --version 2>&1 | sed -n 's/^.*GNU Make[^0-9]*\([0-9][0-9.]*\).*$/\1/p'`
   case $ac_prog_version in
     '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
-    3.79* | 3.[89]*)
+    3.79* | 3.[89]* | 4.*)
        ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
     *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;

D gnu/packages/patches/python-fix-dbm.patch => gnu/packages/patches/python-fix-dbm.patch +0 -20
@@ 1,20 0,0 @@
This patch allows the dbm module to be built using the compatibility mode of
gdbm. It will not be needed any more with Python 2.7.4.
--- setup.py	2013-04-06 00:53:37.000000000 +0200
+++ setup.py.new	2013-04-06 19:55:05.000000000 +0200
@@ -1158,10 +1158,14 @@
             for cand in dbm_order:
                 if cand == "ndbm":
                     if find_file("ndbm.h", inc_dirs, []) is not None:
-                        # Some systems have -lndbm, others don't
+                        # Some systems have -lndbm, some have -lgdbm_compat,
+                        # others have no particular linker flags.
                         if self.compiler.find_library_file(lib_dirs,
                                                                'ndbm'):
                             ndbm_libs = ['ndbm']
+                        elif self.compiler.find_library_file(lib_dirs,
+                                                             'gdbm_compat'):
+                            ndbm_libs = ['gdbm_compat']
                         else:
                             ndbm_libs = []
                         print "building dbm using ndbm"

A gnu/packages/patches/python-fix-tests.patch => gnu/packages/patches/python-fix-tests.patch +66 -0
@@ 0,0 1,66 @@
See the discussion about the issues fixed here at:
http://bugs.python.org/issue20868 .

--- Lib/test/test_shutil.py     2014-03-01 03:02:36.088311000 +0100
+++ Lib/test/test_shutil.py     2014-03-01 04:56:37.768311000 +0100
@@ -1053,6 +1053,7 @@
         self.assertRaises(ValueError, make_archive, base_name, 'xxx')
 
     @requires_zlib
+    @unittest.skipIf(True, "getgrgid(0)[0] raises a KeyError on Guix")
     def test_make_archive_owner_group(self):
         # testing make_archive with owner and group, with various combinations
         # this works even if there's not gid/uid support
@@ -1081,6 +1082,7 @@
 
 
     @requires_zlib
+    @unittest.skipIf(True, "getgrgid(0)[0] raises a KeyError on Guix")
     @unittest.skipUnless(UID_GID_SUPPORT, "Requires grp and pwd support")
     def test_tarfile_root_owner(self):
         tmpdir, tmpdir2, base_name =  self._create_files()

--- Lib/test/test_posixpath.py	2014-03-01 05:46:56.984311000 +0100
+++ Lib/test/test_posixpath.py	2014-03-07 00:59:20.888311000 +0100
@@ -319,7 +319,11 @@
                 del env['HOME']
                 home = pwd.getpwuid(os.getuid()).pw_dir
                 # $HOME can end with a trailing /, so strip it (see #17809)
-                self.assertEqual(posixpath.expanduser("~"), home.rstrip("/"))
+                # The Guix builders have '/' as a home directory, so
+                # home.rstrip("/") will be an empty string and the test will
+                # fail. Let's just disable it since it does not really make
+                # sense with such a bizarre setup.
+                # self.assertEqual(posixpath.expanduser("~"), home.rstrip("/"))
 
     def test_normpath(self):
         self.assertEqual(posixpath.normpath(""), ".")
--- Lib/test/test_socket.py.orig	2014-03-02 22:14:12.264311000 +0100
+++ Lib/test/test_socket.py	2014-03-21 03:50:45.660311000 +0100
@@ -819,6 +819,8 @@
             self.assertRaises(OverflowError, socket.htonl, k)
             self.assertRaises(OverflowError, socket.htons, k)
 
+    @unittest.skipUnless(os.path.exists("/etc/services"),
+                         "getservbyname uses /etc/services, which is not in the chroot")
     def testGetServBy(self):
         eq = self.assertEqual
         # Find one service that exists, then check all the related interfaces.
@@ -1104,6 +1106,8 @@
         self.assertRaises(ValueError, s.ioctl, -1, None)
         s.ioctl(socket.SIO_KEEPALIVE_VALS, (1, 100, 100))
 
+    @unittest.skipUnless(os.path.exists("/etc/gai.conf"),
+                         "getaddrinfo() will fail")
     def testGetaddrinfo(self):
         try:
             socket.getaddrinfo('localhost', 80)
@@ -1174,6 +1178,8 @@
         # only IP addresses are allowed
         self.assertRaises(socket.error, socket.getnameinfo, ('mail.python.org',0), 0)
 
+    @unittest.skipUnless(os.path.exists("/etc/gai.conf"),
+                         "getaddrinfo() will fail")
     @unittest.skipUnless(support.is_resource_enabled('network'),
                          'network is not enabled')
     def test_idna(self):

M gnu/packages/python.scm => gnu/packages/python.scm +36 -1
@@ 28,9 28,11 @@
  #:use-module (gnu packages compression)
  #:use-module (gnu packages gdbm)
  #:use-module (gnu packages icu4c)
  #:use-module (gnu packages libffi)
  #:use-module (gnu packages readline)
  #:use-module (gnu packages openssl)
  #:use-module (gnu packages elf)
  #:use-module (gnu packages pkg-config)
  #:use-module (gnu packages sqlite)
  #:use-module (guix packages)
  #:use-module (guix download)


@@ 99,10 101,12 @@
       #:configure-flags
        (let ((bz2 (assoc-ref %build-inputs "bzip2"))
              (gdbm (assoc-ref %build-inputs "gdbm"))
              (libffi (assoc-ref %build-inputs "libffi"))
              (openssl (assoc-ref %build-inputs "openssl"))
              (readline (assoc-ref %build-inputs "readline"))
              (zlib (assoc-ref %build-inputs "zlib")))
         (list "--enable-shared"                  ; allow embedding
               "--with-system-ffi"                ; build ctypes
               (string-append "CPPFLAGS="
                "-I" bz2 "/include "
                "-I" gdbm "/include "


@@ 112,6 116,7 @@
               (string-append "LDFLAGS="
                "-L" bz2 "/lib "
                "-L" gdbm "/lib "
                "-L" libffi "/lib "
                "-L" openssl "/lib "
                "-L" readline "/lib "
                "-L" zlib "/lib")))


@@ 134,14 139,34 @@
             (with-directory-excursion out
               (for-each (cut augment-rpath <> lib)
                         (find-files "bin" ".*")))))
         %standard-phases)))
         (alist-replace
          'configure
          (lambda* (#:key outputs #:allow-other-keys #:rest args)
            (let ((configure (assoc-ref %standard-phases 'configure)))
             (substitute* "Lib/subprocess.py"
               (("args = \\[\"/bin/sh")
                (string-append "args = [\"" (which "sh"))))
             (substitute*
               '("Lib/distutils/tests/test_spawn.py"
                 "Lib/test/test_subprocess.py")
               (("/bin/sh") (which "sh")))
             (apply configure args)))
          (alist-cons-before
           'check 'pre-check
           (lambda _
             ;; 'Lib/test/test_site.py' needs a valid $HOME
             (setenv "HOME" (getcwd)))
           %standard-phases)))))
    (inputs
     `(("bzip2" ,bzip2)
       ("gdbm" ,gdbm)
       ("libffi" ,libffi)                         ; for ctypes
       ("openssl" ,openssl)
       ("readline" ,readline)
       ("zlib" ,zlib)
       ("patchelf" ,patchelf)))                   ; for (guix build rpath)
    (native-inputs
     `(("pkg-config" ,pkg-config)))
    (native-search-paths
     (list (search-path-specification
            (variable "PYTHONPATH")


@@ 167,9 192,19 @@ data types.")
      (method url-fetch)
      (uri (string-append "https://www.python.org/ftp/python/"
                          version "/Python-" version ".tar.xz"))
       (patches (list (search-patch "python-fix-tests.patch")))
       (patch-flags '("-p0"))
      (sha256
       (base32
        "11f6hg9wdhm6hyzj49gxlvvp1s0l5hqgcsq1i4ayygqs1arpb4ik"))))
    (arguments
     (let ((args `(#:modules ((guix build gnu-build-system)
                              (guix build utils)
                             (srfi srfi-1)
                              (srfi srfi-26))
                   ,@(package-arguments python-2))))
       (substitute-keyword-arguments args
         ((#:tests? _) #t))))
    (native-search-paths
     (list (search-path-specification
            (variable "PYTHONPATH")

M gnu/packages/readline.scm => gnu/packages/readline.scm +10 -4
@@ 1,5 1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 38,14 38,14 @@
                        (find-files lib "\\.a"))))))
    (package
      (name "readline")
      (version "6.2")
      (version "6.3")
      (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/readline/readline-"
                                   version ".tar.gz"))
               (sha256
                (base32
                 "10ckm2bd2rkxhvdmj7nmbsylmihw0abwcsnxf8y27305183rd9kr"))
                 "0hzxr9jxqqx5sxsv9vmlxdnvlr9vi4ih1avjb869hbs6p5qn1fjn"))
               (patches (list (search-patch "readline-link-ncurses.patch")))
               (patch-flags '("-p0"))))
      (build-system gnu-build-system)


@@ 53,7 53,13 @@
      (arguments `(#:configure-flags
                   (list (string-append "LDFLAGS=-Wl,-rpath -Wl,"
                                        (assoc-ref %build-inputs "ncurses")
                                        "/lib"))
                                        "/lib")

                         ;; This test does an 'AC_TRY_RUN', which aborts when
                         ;; cross-compiling, so provide the correct answer.
                         ,@(if (%current-target-system)
                               '("bash_cv_wcwidth_broken=no")
                               '()))

                   #:phases (alist-cons-after
                             'install 'post-install

M gnu/packages/web.scm => gnu/packages/web.scm +6 -16
@@ 93,22 93,12 @@ related documentation.")
    (build-system gnu-build-system)

    (arguments
     '(#:phases (alist-replace
                 'unpack
                 ;; FIXME: Remove this when gnu-build-system handles that
                 ;; case correctly.
                 (lambda* (#:key source #:allow-other-keys)
                   (mkdir "source")
                   (chdir "source")
                   (copy-recursively source ".")
                   #t)

                 (alist-cons-before
                  'configure 'bootstrap
                  (lambda _
                    (chmod "libwebsockets-api-doc.html" #o666)
                    (zero? (system* "./autogen.sh")))
                  %standard-phases))))
     '(#:phases (alist-cons-before
                 'configure 'bootstrap
                 (lambda _
                   (chmod "libwebsockets-api-doc.html" #o666)
                   (zero? (system* "./autogen.sh")))
                 %standard-phases)))

    (native-inputs `(("autoconf" ,autoconf)
                     ("automake" ,automake)

M gnu/packages/xorg.scm => gnu/packages/xorg.scm +17 -0
@@ 1,5 1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 1742,6 1743,22 @@ tracking.")
            "1vbmrcn5n3wp4pyw0n4c3pyvzlc4yf7jzgngavfdq5zwfbgfsybx"))))
    (build-system gnu-build-system)
    (native-inputs `(("pkg-config" ,pkg-config)))
    (arguments
     `(#:phases (alist-cons-after
                 'unpack 'fix-makefile-in
                 (lambda _
                   (substitute* "Makefile.in"
                     ;; Install xorg-macros.pc in PREFIX/lib/pkgconfig,
                     ;; not PREFIX/share/pkgconfig.
                     (("\\$\\(datadir\\)/pkgconfig") "$(libdir)/pkgconfig")))
                 (alist-cons-after
                  'install 'post-install-cleanup
                  (lambda* (#:key outputs #:allow-other-keys)
                    (let ((out (assoc-ref outputs "out")))
                      (with-directory-excursion out
                        (delete-file "share/util-macros/INSTALL")
                        (rmdir "share/util-macros"))))
                  %standard-phases))))
    (home-page "http://www.x.org/wiki/")
    (synopsis "xorg implementation of the X Window System")
    (description "X.org provides an implementation of the X Window System")

M gnu/system.scm => gnu/system.scm +6 -3
@@ 149,7 149,8 @@ input tuples."
                           #:system system
                           #:inputs inputs
                           #:modules '((guix build union))
                           #:guile-for-build guile)))
                           #:guile-for-build guile
                           #:local-build? #t)))

(define* (file-union files
                     #:key (inputs '()) (name "file-union"))


@@ 187,7 188,8 @@ as an inputs; additional inputs, such as derivations, are taken from INPUTS."
                                         `(symlink ,target ,name)))
                                       files))

                             #:inputs inputs))))
                             #:inputs inputs
                             #:local-build? #t))))

(define (links inputs)
  "Return a directory with symbolic links to all of INPUTS.  This is


@@ 209,7 211,8 @@ directories or regular files."

  (mlet %store-monad ((inputs (lower-inputs inputs)))
    (derivation-expression "links" builder
                           #:inputs inputs)))
                           #:inputs inputs
                           #:local-build? #t)))

(define* (etc-directory #:key
                        (locale "C") (timezone "Europe/Paris")

M guix/build/gnu-build-system.scm => guix/build/gnu-build-system.scm +17 -5
@@ 1,5 1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 90,8 90,17 @@
  #t)

(define* (unpack #:key source #:allow-other-keys)
  (and (zero? (system* "tar" "xvf" source))
       (chdir (first-subdirectory "."))))
  "Unpack SOURCE in the working directory, and change directory within the
source.  When SOURCE is a directory, copy it in a sub-directory of the current
working directory."
  (if (file-is-directory? source)
      (begin
        (mkdir "source")
        (chdir "source")
        (copy-recursively source ".")
        #t)
      (and (zero? (system* "tar" "xvf" source))
           (chdir (first-subdirectory ".")))))

(define* (patch-source-shebangs #:key source #:allow-other-keys)
  "Patch shebangs in all source files; this includes non-executable


@@ 136,7 145,10 @@ makefiles."
         (bash       (or (and=> (assoc-ref (or native-inputs inputs) "bash")
                                (cut string-append <> "/bin/bash"))
                         "/bin/sh"))
         (flags      `(,(string-append "CONFIG_SHELL=" bash)
         (flags      `(,@(if target             ; cross building
                             '("CC_FOR_BUILD=gcc")
                             '())
                       ,(string-append "CONFIG_SHELL=" bash)
                       ,(string-append "SHELL=" bash)
                       ,(string-append "--prefix=" prefix)
                       "--enable-fast-install"    ; when using Libtool


@@ 160,7 172,7 @@ makefiles."
                             '())
                       ,@(if docdir
                             (list (string-append "--docdir=" docdir
                                                  "/doc/" (package-name)))
                                                  "/share/doc/" (package-name)))
                             '())
                       ,@(if target               ; cross building
                             (list (string-append "--host=" target))

M guix/build/utils.scm => guix/build/utils.scm +10 -5
@@ 1,5 1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
;;;


@@ 29,7 29,8 @@
  #:use-module (rnrs io ports)
  #:re-export (alist-cons
               alist-delete)
  #:export (directory-exists?
  #:export (%store-directory
            directory-exists?
            executable-file?
            call-with-ascii-input-file
            with-directory-excursion


@@ 62,6 63,11 @@
;;; Directories.
;;;

(define (%store-directory)
  "Return the directory name of the store."
  (or (getenv "NIX_STORE")
      "/gnu/store"))

(define (directory-exists? dir)
  "Return #t if DIR exists and is a directory."
  (let ((s (stat dir #f)))


@@ 443,7 449,7 @@ all subject to the substitutions."


;;;
;;; Patching shebangs---e.g., /bin/sh -> /nix/store/xyz...-bash/bin/sh.
;;; Patching shebangs---e.g., /bin/sh -> /gnu/store/xyz...-bash/bin/sh.
;;;

(define* (dump-port in out


@@ 630,8 636,7 @@ for each unmatched character."
                   (unmatched (car matched) result)))))))

(define* (remove-store-references file
                                  #:optional (store (or (getenv "NIX_STORE")
                                                        "/nix/store")))
                                  #:optional (store (%store-directory)))
  "Remove from FILE occurrences of file names in STORE; return #t when
store paths were encountered in FILE, #f otherwise.  This procedure is
known as `nuke-refs' in Nixpkgs."

M guix/derivations.scm => guix/derivations.scm +4 -2
@@ 870,7 870,8 @@ system, imported, and appears under FINAL-PATH in the resulting store path."
    (build-expression->derivation store name builder
                                  #:system system
                                  #:inputs files
                                  #:guile-for-build guile)))
                                  #:guile-for-build guile
                                  #:local-build? #t)))

(define* (imported-modules store modules
                           #:key (name "module-import")


@@ 936,7 937,8 @@ they can refer to each other."
    (build-expression->derivation store name builder
                                  #:inputs `(("modules" ,module-drv))
                                  #:system system
                                  #:guile-for-build guile)))
                                  #:guile-for-build guile
                                  #:local-build? #t)))

(define* (build-expression->derivation store name exp
                                       #:key

M guix/packages.scm => guix/packages.scm +47 -19
@@ 315,6 315,20 @@ IMPORTED-MODULES specify modules to use/import for use by SNIPPET."
           (dash (string-index sans #\-)))
      (string-drop sans (+ 1 dash))))

  (define (numeric-extension? file-name)
    ;; Return true if FILE-NAME ends with digits.
    (string-every char-set:hex-digit (file-extension file-name)))

  (define (tarxz-name file-name)
    ;; Return a '.tar.xz' file name based on FILE-NAME.
    (let ((base (if (numeric-extension? file-name)
                    original-file-name
                    (file-sans-extension file-name))))
      (string-append base
                     (if (equal? (file-extension base) "tar")
                         ".xz"
                         ".tar.xz"))))

  (define patch-inputs
    (map (lambda (number patch)
           (list (string-append "patch" (number->string number))


@@ 327,7 341,8 @@ IMPORTED-MODULES specify modules to use/import for use by SNIPPET."
  (define builder
    `(begin
       (use-modules (ice-9 ftw)
                    (srfi srfi-1))
                    (srfi srfi-1)
                    (guix build utils))

       (let ((out     (assoc-ref %outputs "out"))
             (xz      (assoc-ref %build-inputs "xz"))


@@ 342,14 357,27 @@ IMPORTED-MODULES specify modules to use/import for use by SNIPPET."
             (format (current-error-port) "applying '~a'...~%" patch*)
             (zero? (system* patch "--batch" ,@flags "--input" patch*))))

         (define (first-file directory)
           ;; Return the name of the first file in DIRECTORY.
           (car (scandir directory
                         (lambda (name)
                           (not (member name '("." "..")))))))

         (setenv "PATH" (string-append xz "/bin" ":"
                                       decomp "/bin"))
         (and (zero? (system* tar "xvf" source))
              (let ((directory (car (scandir "."
                                             (lambda (name)
                                               (not
                                                (member name
                                                        '("." ".."))))))))

         ;; SOURCE may be either a directory or a tarball.
         (and (if (file-is-directory? source)
                  (let* ((store     (or (getenv "NIX_STORE") "/gnu/store"))
                         (len       (+ 1 (string-length store)))
                         (base      (string-drop source len))
                         (dash      (string-index base #\-))
                         (directory (string-drop base (+ 1 dash))))
                    (mkdir directory)
                    (copy-recursively source directory)
                    #t)
                  (zero? (system* tar "xvf" source)))
              (let ((directory (first-file ".")))
                (format (current-error-port)
                        "source is under '~a'~%" directory)
                (chdir directory)


@@ 375,23 403,23 @@ IMPORTED-MODULES specify modules to use/import for use by SNIPPET."
                     (zero? (system* tar "cvfa" out directory))))))))


  (let ((name   (string-append (file-sans-extension original-file-name)
                               ".xz"))
        (inputs (filter-map (match-lambda
                             ((name (? package? p))
                              (and (member name (cons decompression-type
                                                      '("tar" "xz" "patch")))
                                   (list name
                                         (package-derivation store p
                                                             system)))))
                            (or inputs (%standard-patch-inputs)))))
  (let ((name    (tarxz-name original-file-name))
        (inputs  (filter-map (match-lambda
                              ((name (? package? p))
                               (and (member name (cons decompression-type
                                                       '("tar" "xz" "patch")))
                                    (list name
                                          (package-derivation store p
                                                              system)))))
                             (or inputs (%standard-patch-inputs))))
        (modules (delete-duplicates (cons '(guix build utils) modules))))

   (build-expression->derivation store name builder
    (build-expression->derivation store name builder
                                 #:inputs `(("source" ,source)
                                            ,@inputs
                                            ,@patch-inputs)
                                 #:system system
                                 #:modules imported-modules
                                 #:modules modules
                                 #:guile-for-build guile-for-build)))

(define* (package-source-derivation store source

M guix/profiles.scm => guix/profiles.scm +2 -1
@@ 257,7 257,8 @@ the given MANIFEST."
                                              ;; already valid.
                                              `((,name ,path) ,@deps)))
                                            (manifest-entries manifest))
                                #:modules '((guix build union))))
                                #:modules '((guix build union))
                                #:local-build? #t))

(define (profile-regexp profile)
  "Return a regular expression that matches PROFILE's name and number."

M tests/guix-package.sh => tests/guix-package.sh +1 -1
@@ 159,7 159,7 @@ fi
guix package --bootstrap -i guile gcc -p "$profile" -n

# Make sure the `:' syntax works.
guix package --bootstrap -i "binutils:lib" -p "$profile" -n
guix package --bootstrap -i "glibc:debug" -p "$profile" -n

# Make sure nonexistent outputs are reported.
guix package --bootstrap -i "guile-bootstrap:out" -p "$profile" -n