summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--build-aux/check-available-binaries.scm53
-rw-r--r--build-aux/check-final-inputs-self-contained.scm5
-rw-r--r--build-aux/download.scm8
-rw-r--r--doc/guix.texi4
-rw-r--r--gnu-system.am29
-rw-r--r--gnu/packages/apr.scm2
-rw-r--r--gnu/packages/autotools.scm123
-rw-r--r--gnu/packages/base.scm41
-rw-r--r--gnu/packages/bash.scm8
-rw-r--r--gnu/packages/boost.scm4
-rw-r--r--gnu/packages/bootstrap.scm67
-rwxr-xr-xgnu/packages/bootstrap/armhf-linux/bashbin0 -> 802224 bytes
-rwxr-xr-xgnu/packages/bootstrap/armhf-linux/mkdirbin0 -> 401544 bytes
-rwxr-xr-xgnu/packages/bootstrap/armhf-linux/tarbin0 -> 755356 bytes
-rwxr-xr-xgnu/packages/bootstrap/armhf-linux/xzbin0 -> 502884 bytes
-rw-r--r--gnu/packages/commencement.scm15
-rw-r--r--gnu/packages/compression.scm24
-rw-r--r--gnu/packages/cross-base.scm30
-rw-r--r--gnu/packages/curl.scm6
-rw-r--r--gnu/packages/databases.scm8
-rw-r--r--gnu/packages/elf.scm26
-rw-r--r--gnu/packages/file.scm28
-rw-r--r--gnu/packages/fontutils.scm3
-rw-r--r--gnu/packages/games.scm2
-rw-r--r--gnu/packages/gawk.scm24
-rw-r--r--gnu/packages/gcc.scm74
-rw-r--r--gnu/packages/gd.scm22
-rw-r--r--gnu/packages/gettext.scm4
-rw-r--r--gnu/packages/glib.scm4
-rw-r--r--gnu/packages/global.scm4
-rw-r--r--gnu/packages/gnome.scm11
-rw-r--r--gnu/packages/gnunet.scm4
-rw-r--r--gnu/packages/gnutls.scm6
-rw-r--r--gnu/packages/gps.scm12
-rw-r--r--gnu/packages/graphviz.scm4
-rw-r--r--gnu/packages/gtk.scm15
-rw-r--r--gnu/packages/guile.scm29
-rw-r--r--gnu/packages/icu4c.scm31
-rw-r--r--gnu/packages/image.scm6
-rw-r--r--gnu/packages/ld-wrapper.scm95
-rw-r--r--gnu/packages/libcanberra.scm4
-rw-r--r--gnu/packages/libevent.scm4
-rw-r--r--gnu/packages/linux.scm90
-rw-r--r--gnu/packages/m4.scm3
-rw-r--r--gnu/packages/mail.scm6
-rw-r--r--gnu/packages/make-bootstrap.scm14
-rw-r--r--gnu/packages/man.scm2
-rw-r--r--gnu/packages/mit-krb5.scm8
-rw-r--r--gnu/packages/mp3.scm4
-rw-r--r--gnu/packages/multiprecision.scm15
-rw-r--r--gnu/packages/ncurses.scm7
-rw-r--r--gnu/packages/openldap.scm4
-rw-r--r--gnu/packages/openssl.scm6
-rw-r--r--gnu/packages/patches/curl-gss-api-fix.patch38
-rw-r--r--gnu/packages/patches/file-CVE-2014-3587.patch16
-rw-r--r--gnu/packages/patches/gcc-fix-pr61801.patch25
-rw-r--r--gnu/packages/patches/gd-mips64-deplibs-fix.patch17
-rw-r--r--gnu/packages/patches/glibc-CVE-2012-3406.patch282
-rw-r--r--gnu/packages/patches/glibc-CVE-2014-7817.patch171
-rw-r--r--gnu/packages/patches/glibc-mips-dangling-vfork-ref.patch45
-rw-r--r--gnu/packages/patches/gmp-arm-asm-nothumb.patch21
-rw-r--r--gnu/packages/patches/guile-arm-fixes.patch203
-rw-r--r--gnu/packages/patches/libtool-2.4-skip-tests.patch24
-rw-r--r--gnu/packages/patches/libtool-skip-tests-for-mips.patch12
-rw-r--r--gnu/packages/patches/libtool-skip-tests.patch82
-rw-r--r--gnu/packages/patches/m4-readlink-EINVAL.patch18
-rw-r--r--gnu/packages/patches/patchelf-page-size.patch33
-rw-r--r--gnu/packages/patches/patchelf-rework-for-arm.patch473
-rw-r--r--gnu/packages/patches/sqlite-large-page-size-fix.patch180
-rw-r--r--gnu/packages/patchutils.scm2
-rw-r--r--gnu/packages/perl.scm2
-rw-r--r--gnu/packages/photo.scm4
-rw-r--r--gnu/packages/pkg-config.scm7
-rw-r--r--gnu/packages/pth.scm9
-rw-r--r--gnu/packages/pulseaudio.scm6
-rw-r--r--gnu/packages/python.scm4
-rw-r--r--gnu/packages/ruby.scm7
-rw-r--r--gnu/packages/ssh.scm2
-rw-r--r--gnu/packages/swig.scm13
-rw-r--r--gnu/packages/tcl.scm10
-rw-r--r--gnu/packages/texlive.scm3
-rw-r--r--gnu/packages/tre.scm14
-rw-r--r--gnu/packages/version-control.scm2
-rw-r--r--gnu/packages/web.scm16
-rw-r--r--gnu/packages/weechat.scm6
-rw-r--r--gnu/packages/xfce.scm2
-rw-r--r--gnu/packages/xiph.scm7
-rw-r--r--gnu/packages/xml.scm14
-rw-r--r--gnu/packages/xorg.scm4
-rw-r--r--guix/build/gnu-build-system.scm173
-rw-r--r--guix/build/utils.scm164
-rw-r--r--guix/packages.scm20
-rw-r--r--guix/scripts/environment.scm8
-rw-r--r--guix/scripts/package.scm28
-rw-r--r--guix/utils.scm24
-rw-r--r--m4/guix.m413
-rw-r--r--tests/packages.scm55
98 files changed, 2274 insertions, 984 deletions
diff --git a/.gitignore b/.gitignore
index bcb82aa26d..3ec36366e3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -67,6 +67,7 @@ config.cache
/doc/version.texi
/gnu/packages/bootstrap/x86_64-linux/guile-2.0.9.tar.xz
/gnu/packages/bootstrap/i686-linux/guile-2.0.9.tar.xz
+/gnu/packages/bootstrap/armhf-linux/guile-2.0.11.tar.xz
/gnu/packages/bootstrap/mips64el-linux/guile-2.0.9.tar.xz
/guix/config.scm
/nix/nix-daemon/nix-daemon.cc
diff --git a/build-aux/check-available-binaries.scm b/build-aux/check-available-binaries.scm
index d5163a9503..7ac4352839 100644
--- a/build-aux/check-available-binaries.scm
+++ b/build-aux/check-available-binaries.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -28,31 +28,28 @@
(srfi srfi-1)
(srfi srfi-26))
-(define %supported-systems
- '("x86_64-linux" "i686-linux"))
+(with-store store
+ (let* ((native (append-map (lambda (system)
+ (map (cut package-derivation store <> system)
+ (list %bootstrap-tarballs emacs)))
+ %supported-systems))
+ (cross (map (cut package-cross-derivation store
+ %bootstrap-tarballs <>)
+ '("mips64el-linux-gnuabi64")))
+ (total (append native cross)))
+ (define (warn item system)
+ (format (current-error-port) "~a (~a) is not substitutable~%"
+ item system)
+ #f)
-(let* ((store (open-connection))
- (native (append-map (lambda (system)
- (map (cut package-derivation store <> system)
- (list %bootstrap-tarballs emacs)))
- %supported-systems))
- (cross (map (cut package-cross-derivation store
- %bootstrap-tarballs <>)
- '("mips64el-linux-gnuabi64")))
- (total (append native cross)))
- (define (warn proc)
- (lambda (drv)
- (or (proc drv)
- (begin
- (format (current-error-port) "~a is not substitutable~%"
- drv)
- #f))))
-
- (set-build-options store #:use-substitutes? #t)
- (let ((result (every (compose (warn (cut has-substitutes? store <>))
- derivation->output-path)
- total)))
- (when result
- (format (current-error-port) "~a packages found substitutable~%"
- (length total)))
- (exit result)))
+ (set-build-options store #:use-substitutes? #t)
+ (let* ((substitutable? (substitution-oracle store total))
+ (result (every (lambda (drv)
+ (let ((out (derivation->output-path drv)))
+ (or (substitutable? out)
+ (warn out (derivation-system drv)))))
+ total)))
+ (when result
+ (format (current-error-port) "~a packages found substitutable~%"
+ (length total)))
+ (exit result))))
diff --git a/build-aux/check-final-inputs-self-contained.scm b/build-aux/check-final-inputs-self-contained.scm
index ade4e98001..ca7e8030b4 100644
--- a/build-aux/check-final-inputs-self-contained.scm
+++ b/build-aux/check-final-inputs-self-contained.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -29,9 +29,6 @@
(srfi srfi-1)
(srfi srfi-26))
-(define %supported-systems
- '("x86_64-linux" "i686-linux"))
-
(define (final-inputs store system)
"Return the list of outputs directories of the final inputs for SYSTEM."
(append-map (match-lambda
diff --git a/build-aux/download.scm b/build-aux/download.scm
index 50123f59d2..a107a887dc 100644
--- a/build-aux/download.scm
+++ b/build-aux/download.scm
@@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -45,7 +46,12 @@
(match (string-tokenize file (char-set-complement (char-set #\/)))
((_ ... system basename)
(string->uri (string-append %url-base "/" system
- "/20131110/" basename)))))
+ (match system
+ ("armhf-linux"
+ "/20150101/")
+ (_
+ "/20131110/"))
+ basename)))))
(match (command-line)
((_ file expected-hash)
diff --git a/doc/guix.texi b/doc/guix.texi
index c052804a45..7febee48ac 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -3275,6 +3275,10 @@ Intel/AMD @code{x86_64} architecture, Linux-Libre kernel;
@item i686-linux
Intel 32-bit architecture (IA32), Linux-Libre kernel;
+@item armhf-linux
+ARMv7-A architecture with hard float, Thumb-2 and VFP3D16 coprocessor,
+using the EABI hard-float ABI, and Linux-Libre kernel.
+
@item mips64el-linux
little-endian 64-bit MIPS processors, specifically the Loongson series,
n32 application binary interface (ABI), and Linux-Libre kernel.
diff --git a/gnu-system.am b/gnu-system.am
index 8e331e136b..58baec7313 100644
--- a/gnu-system.am
+++ b/gnu-system.am
@@ -1,7 +1,7 @@
# GNU Guix --- Functional package management for GNU
# Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
# Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr>
-# Copyright © 2013, 2014 Mark H Weaver <mhw@netris.org>
+# Copyright © 2013, 2014, 2015 Mark H Weaver <mhw@netris.org>
#
# This file is part of GNU Guix.
#
@@ -347,6 +347,7 @@ dist_patch_DATA = \
gnu/packages/patches/cpio-gets-undeclared.patch \
gnu/packages/patches/cssc-gets-undeclared.patch \
gnu/packages/patches/cssc-missing-include.patch \
+ gnu/packages/patches/curl-gss-api-fix.patch \
gnu/packages/patches/cursynth-wave-rand.patch \
gnu/packages/patches/dbus-localstatedir.patch \
gnu/packages/patches/diffutils-gets-undeclared.patch \
@@ -356,21 +357,22 @@ dist_patch_DATA = \
gnu/packages/patches/duplicity-piped-password.patch \
gnu/packages/patches/duplicity-test_selection-tmp.patch \
gnu/packages/patches/eudev-rules-directory.patch \
- gnu/packages/patches/file-CVE-2014-3587.patch \
gnu/packages/patches/findutils-absolute-paths.patch \
gnu/packages/patches/flashrom-use-libftdi1.patch \
gnu/packages/patches/flex-bison-tests.patch \
gnu/packages/patches/gawk-shell.patch \
gnu/packages/patches/gcc-cross-environment-variables.patch \
- gnu/packages/patches/gcc-fix-pr61801.patch \
- gnu/packages/patches/gd-mips64-deplibs-fix.patch \
gnu/packages/patches/glib-tests-desktop.patch \
gnu/packages/patches/glib-tests-homedir.patch \
gnu/packages/patches/glib-tests-prlimit.patch \
gnu/packages/patches/glib-tests-timer.patch \
gnu/packages/patches/glib-tests-gapplication.patch \
+ gnu/packages/patches/glibc-CVE-2012-3406.patch \
+ gnu/packages/patches/glibc-CVE-2014-7817.patch \
gnu/packages/patches/glibc-bootstrap-system.patch \
gnu/packages/patches/glibc-ldd-x86_64.patch \
+ gnu/packages/patches/glibc-mips-dangling-vfork-ref.patch \
+ gnu/packages/patches/gmp-arm-asm-nothumb.patch \
gnu/packages/patches/gnunet-fix-scheduler.patch \
gnu/packages/patches/gnunet-fix-tests.patch \
gnu/packages/patches/gobject-introspection-cc.patch \
@@ -378,6 +380,7 @@ dist_patch_DATA = \
gnu/packages/patches/gstreamer-0.10-bison3.patch \
gnu/packages/patches/gstreamer-0.10-silly-test.patch \
gnu/packages/patches/guile-1.8-cpp-4.5.patch \
+ gnu/packages/patches/guile-arm-fixes.patch \
gnu/packages/patches/guile-default-utf8.patch \
gnu/packages/patches/guile-linux-syscalls.patch \
gnu/packages/patches/guile-relocatable.patch \
@@ -405,13 +408,10 @@ dist_patch_DATA = \
gnu/packages/patches/libmad-mips-newgcc.patch \
gnu/packages/patches/libtheora-config-guess.patch \
gnu/packages/patches/libtool-skip-tests.patch \
- gnu/packages/patches/libtool-skip-tests-for-mips.patch \
- gnu/packages/patches/libtool-2.4-skip-tests.patch \
gnu/packages/patches/libssh-CVE-2014-0017.patch \
gnu/packages/patches/lm-sensors-hwmon-attrs.patch \
gnu/packages/patches/luit-posix.patch \
gnu/packages/patches/m4-gets-undeclared.patch \
- gnu/packages/patches/m4-readlink-EINVAL.patch \
gnu/packages/patches/make-impure-dirs.patch \
gnu/packages/patches/mc-fix-ncurses-build.patch \
gnu/packages/patches/mcron-install.patch \
@@ -428,6 +428,7 @@ dist_patch_DATA = \
gnu/packages/patches/orpheus-cast-errors-and-includes.patch \
gnu/packages/patches/ots-no-include-missing-file.patch \
gnu/packages/patches/patchelf-page-size.patch \
+ gnu/packages/patches/patchelf-rework-for-arm.patch \
gnu/packages/patches/patchutils-xfail-gendiff-tests.patch \
gnu/packages/patches/perl-no-sys-dirs.patch \
gnu/packages/patches/perl-tk-x11-discover.patch \
@@ -457,7 +458,6 @@ dist_patch_DATA = \
gnu/packages/patches/slim-sigusr1.patch \
gnu/packages/patches/soprano-find-clucene.patch \
gnu/packages/patches/source-highlight-regexrange-test.patch \
- gnu/packages/patches/sqlite-large-page-size-fix.patch \
gnu/packages/patches/superlu-dist-scotchmetis.patch \
gnu/packages/patches/tcsh-fix-autotest.patch \
gnu/packages/patches/teckit-cstdio.patch \
@@ -496,6 +496,7 @@ dist_patch_DATA = \
bootstrapdir = $(guilemoduledir)/gnu/packages/bootstrap
bootstrap_x86_64_linuxdir = $(bootstrapdir)/x86_64-linux
bootstrap_i686_linuxdir = $(bootstrapdir)/i686-linux
+bootstrap_armhf_linuxdir = $(bootstrapdir)/armhf-linux
bootstrap_mips64el_linuxdir = $(bootstrapdir)/mips64el-linux
dist_bootstrap_x86_64_linux_DATA = \
@@ -510,6 +511,12 @@ dist_bootstrap_i686_linux_DATA = \
gnu/packages/bootstrap/i686-linux/tar \
gnu/packages/bootstrap/i686-linux/xz
+dist_bootstrap_armhf_linux_DATA = \
+ gnu/packages/bootstrap/armhf-linux/bash \
+ gnu/packages/bootstrap/armhf-linux/mkdir \
+ gnu/packages/bootstrap/armhf-linux/tar \
+ gnu/packages/bootstrap/armhf-linux/xz
+
dist_bootstrap_mips64el_linux_DATA = \
gnu/packages/bootstrap/mips64el-linux/bash \
gnu/packages/bootstrap/mips64el-linux/mkdir \
@@ -522,6 +529,8 @@ nodist_bootstrap_x86_64_linux_DATA = \
gnu/packages/bootstrap/x86_64-linux/guile-2.0.9.tar.xz
nodist_bootstrap_i686_linux_DATA = \
gnu/packages/bootstrap/i686-linux/guile-2.0.9.tar.xz
+nodist_bootstrap_armhf_linux_DATA = \
+ gnu/packages/bootstrap/armhf-linux/guile-2.0.11.tar.xz
nodist_bootstrap_mips64el_linux_DATA = \
gnu/packages/bootstrap/mips64el-linux/guile-2.0.9.tar.xz
@@ -533,6 +542,7 @@ set-bootstrap-executable-permissions:
DISTCLEANFILES = \
$(nodist_bootstrap_x86_64_linux_DATA) \
$(nodist_bootstrap_i686_linux_DATA) \
+ $(nodist_bootstrap_armhf_linux_DATA) \
$(nodist_bootstrap_mips64el_linux_DATA)
# Method to download a file from an external source.
@@ -547,6 +557,9 @@ gnu/packages/bootstrap/x86_64-linux/guile-2.0.9.tar.xz:
gnu/packages/bootstrap/i686-linux/guile-2.0.9.tar.xz:
$(MKDIR_P) `dirname "$@"`
$(DOWNLOAD_FILE) "$@" "b757cd46bf13ecac83fb8e955fb50096ac2d17bb610ca8eb816f29302a00a846"
+gnu/packages/bootstrap/armhf-linux/guile-2.0.11.tar.xz:
+ $(MKDIR_P) `dirname "$@"`
+ $(DOWNLOAD_FILE) "$@" "e551d05d4d385d6706ab8d574856a087758294dc90ab4c06e70a157a685e23d6"
gnu/packages/bootstrap/mips64el-linux/guile-2.0.9.tar.xz:
$(MKDIR_P) `dirname "$@"`
$(DOWNLOAD_FILE) "$@" "994680f0001346864aa2c2cc5110f380ee7518dcd701c614291682b8e948f73b"
diff --git a/gnu/packages/apr.scm b/gnu/packages/apr.scm
index cedeea8a14..3e53a614fc 100644
--- a/gnu/packages/apr.scm
+++ b/gnu/packages/apr.scm
@@ -48,7 +48,7 @@
'(#:parallel-build? #f
#:parallel-tests? #f))
(inputs `(("perl" ,perl)
- ("libtool" ,libtool)))
+ ("libltdl" ,libltdl)))
(home-page "http://apr.apache.org/")
(synopsis "The Apache Portable Runtime Library")
(description
diff --git a/gnu/packages/autotools.scm b/gnu/packages/autotools.scm
index 3db3f45949..8e72562444 100644
--- a/gnu/packages/autotools.scm
+++ b/gnu/packages/autotools.scm
@@ -178,7 +178,7 @@ exec ~a --no-auto-compile \"$0\" \"$@\"
(native-search-paths
(list (search-path-specification
(variable "ACLOCAL_PATH")
- (directories '("share/aclocal")))))
+ (files '("share/aclocal")))))
(arguments
'(#:modules ((guix build gnu-build-system)
(guix build utils)
@@ -238,52 +238,48 @@ Makefile, simplifying the entire process for the developer.")
(define-public libtool
(package
(name "libtool")
- (version "2.4.2")
+ (version "2.4.4")
(source (origin
- (method url-fetch)
- (uri (string-append "mirror://gnu/libtool/libtool-"
- version ".tar.gz"))
- (sha256
- (base32
- "0649qfpzkswgcj9vqkkr9rn4nlcx80faxpyqscy2k1x9c94f93dk"))
- (patches
- (list (search-patch "libtool-skip-tests.patch")
- (search-patch "libtool-skip-tests-for-mips.patch")))))
+ (method url-fetch)
+ (uri (string-append "mirror://gnu/libtool/libtool-"
+ version ".tar.xz"))
+ (sha256
+ (base32
+ "0v3zq08qxv7k5067mpqrkjkjl3wphhg06i696mka90mzadc5nad8"))
+ (patches
+ (list (search-patch "libtool-skip-tests.patch")))))
(build-system gnu-build-system)
+ (propagated-inputs `(("m4" ,m4)))
(native-inputs `(("m4" ,m4)
- ("perl" ,perl)))
-
- ;; Separate binaries from the rest. During bootstrap, only ltdl is
- ;; used; not depending on the binaries allows us to avoid retaining
- ;; a reference to the bootstrap bash.
- (outputs '("bin" ; libtoolize, libtool, etc.
- "out")) ; libltdl.so, ltdl.h, etc.
+ ("perl" ,perl)
+ ("automake" ,automake) ;some tests rely on 'aclocal'
+ ("autoconf" ,(autoconf-wrapper)))) ;others on 'autom4te'
(arguments
- (if (%current-target-system)
- '() ; no `check' phase when cross-building
- '(#:phases (alist-cons-before
- 'check 'pre-check
- (lambda* (#:key inputs #:allow-other-keys)
- ;; Run the test suite in parallel, if possible.
- (let ((ncores
- (cond
- ((getenv "NIX_BUILD_CORES")
- =>
- (lambda (n)
- (if (zero? (string->number n))
- (number->string (current-processor-count))
- n)))
- (else "1"))))
- (setenv "TESTSUITEFLAGS"
- (string-append "-j" ncores)))
+ `(;; Libltdl is provided as a separate package, so don't install it here.
+ #:configure-flags '("--disable-ltdl-install")
+
+ ;; XXX: There are test failures on mips64el-linux starting from 2.4.4:
+ ;; <http://hydra.gnu.org/build/181662>.
+ #:tests? ,(not (string-prefix? "mips64"
+ (or (%current-target-system)
+ (%current-system))))
+
+ #:phases (alist-cons-before
+ 'check 'pre-check
+ (lambda* (#:key inputs #:allow-other-keys)
+ ;; Run the test suite in parallel, if possible.
+ (setenv "TESTSUITEFLAGS"
+ (string-append
+ "-j"
+ (number->string (parallel-job-count))))
- ;; Path references to /bin/sh.
- (let ((bash (assoc-ref inputs "bash")))
- (substitute* "tests/testsuite"
- (("/bin/sh")
- (string-append bash "/bin/bash")))))
- %standard-phases))))
+ ;; Path references to /bin/sh.
+ (let ((bash (assoc-ref inputs "bash")))
+ (substitute* "tests/testsuite"
+ (("/bin/sh")
+ (string-append bash "/bin/bash")))))
+ %standard-phases)))
(synopsis "Generic shared library support tools")
(description
"GNU Libtool helps in the creation and use of shared libraries, by
@@ -292,28 +288,25 @@ complexity of working with shared libraries across platforms.")
(license gpl3+)
(home-page "http://www.gnu.org/software/libtool/")))
-(define-public libtool-2.4.4
- (package (inherit libtool)
- (version "2.4.4")
- (source (origin
- (method url-fetch)
- (uri (string-append "mirror://gnu/libtool/libtool-"
- version ".tar.xz"))
- (sha256
- (base32
- "0v3zq08qxv7k5067mpqrkjkjl3wphhg06i696mka90mzadc5nad8"))
- (patches
- (list (search-patch "libtool-2.4-skip-tests.patch")))))
-
- (native-inputs `(("automake" ,automake) ;some tests rely on 'aclocal'
- ("autoconf" ,(autoconf-wrapper)) ;others on 'autom4te'
- ,@(package-native-inputs libtool)))
-
+(define-public libltdl
+ ;; This is a libltdl package separate from the libtool package. This is
+ ;; useful because, unlike libtool, it has zero extra dependencies (making it
+ ;; readily usable during bootstrap), and it builds very quickly since
+ ;; Libtool's extensive test suite isn't run.
+ (package
+ (name "libltdl")
+ (version (package-version libtool))
+ (source (package-source libtool))
+ (build-system gnu-build-system)
(arguments
- ;; XXX: There are test failures on mips64el-linux starting from 2.4.4:
- ;; <http://hydra.gnu.org/build/181662>.
- (if (string-prefix? "mips64el"
- (or (%current-target-system) (%current-system)))
- `(#:tests? #f
- ,@(package-arguments libtool))
- (package-arguments libtool)))))
+ '(#:configure-flags '("--enable-ltdl-install") ;really install it
+ #:phases (alist-cons-before
+ 'configure 'change-directory
+ (lambda _
+ (chdir "libltdl"))
+ %standard-phases)))
+
+ (synopsis "System-independent dlopen wrapper of GNU libtool")
+ (description (package-description libtool))
+ (home-page (package-home-page libtool))
+ (license lgpl2.1+)))
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index 85e92aad3b..1f479ccbbe 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -65,14 +65,14 @@ command-line arguments, multiple languages, and so on.")
(define-public grep
(package
(name "grep")
- (version "2.20")
+ (version "2.21")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnu/grep/grep-"
version ".tar.xz"))
(sha256
(base32
- "0rcs0spsxdmh6yz8y4frkqp6f5iw19mdbdl9s2v6956hq0mlbbzh"))))
+ "1pp5n15qwxrw1pibwjhhgsibyv5cafhamf8lwzjygs6y00fa2i2j"))))
(build-system gnu-build-system)
(synopsis "Print lines matching a pattern")
(description
@@ -312,14 +312,14 @@ change. GNU make offers many powerful extensions over the standard utility.")
(define-public binutils
(package
(name "binutils")
- (version "2.24")
+ (version "2.25")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnu/binutils/binutils-"
version ".tar.bz2"))
(sha256
(base32
- "0ds1y7qa0xqihw4ihnsgg6bxanmb228r228ddvwzgrv4jszcbs75"))
+ "08r9i26b05zcwb9zxb6zllpfdiiicdfsgbpsjlrjmvx3rxjzrpi2"))
(patches (list (search-patch "binutils-ld-new-dtags.patch")
(search-patch "binutils-loongson-workaround.patch")))))
(build-system gnu-build-system)
@@ -375,32 +375,37 @@ included.")
(("use_ldconfig=yes")
"use_ldconfig=no")))
(modules '((guix build utils)))
- (patches (list (search-patch "glibc-ldd-x86_64.patch")))))
+ (patches (list (search-patch "glibc-CVE-2014-7817.patch")
+ (search-patch "glibc-CVE-2012-3406.patch")
+ (search-patch "glibc-mips-dangling-vfork-ref.patch")
+ (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
;; users should automatically pull Linux headers as well.
(propagated-inputs `(("linux-headers" ,linux-libre-headers)))
- ;; Store the locales separately (~100 MiB). Note that "out" retains a
- ;; reference to them anyway, so there's no space savings here.
- ;; TODO: Eventually we may want to add a $LOCALE_ARCHIVE search path like
- ;; Nixpkgs does.
- (outputs '("out" "locales" "debug"))
+ (outputs '("out" "debug"))
(arguments
`(#:out-of-source? #t
#:configure-flags
(list "--enable-add-ons"
"--sysconfdir=/etc"
- (string-append "--localedir=" (assoc-ref %outputs "locales")
- "/share/locale")
+ ;; Installing a locale archive with all the locales is to
+ ;; expensive (~100 MiB), so we rely on users to install the
+ ;; locales they really want.
+ ;;
+ ;; Set the default locale path. In practice, $LOCPATH may be
+ ;; defined to point whatever locales users want. However, setuid
+ ;; binaries don't honor $LOCPATH, so they'll instead look into
+ ;; $libc_cv_localedir; we choose /run/current-system/locale, with
+ ;; the idea that it is going to be populated by the sysadmin.
+ ;;
;; `--localedir' is not honored, so work around it.
;; See <http://sourceware.org/ml/libc-alpha/2013-03/msg00093.html>.
- (string-append "libc_cv_localedir="
- (assoc-ref %outputs "locales")
- "/share/locale")
+ (string-append "libc_cv_localedir=/run/current-system/locale")
(string-append "--with-headers="
(assoc-ref %build-inputs "linux-headers")
@@ -477,11 +482,7 @@ included.")
"")
(("exec @PERL@")
"exec perl"))))
- (alist-cons-after
- 'install 'install-locales
- (lambda _
- (zero? (system* "make" "localedata/install-locales")))
- %standard-phases))))
+ %standard-phases)))
(inputs `(("static-bash" ,(static-package bash-light))))
diff --git a/gnu/packages/bash.scm b/gnu/packages/bash.scm
index 8a589395f3..f565c1a876 100644
--- a/gnu/packages/bash.scm
+++ b/gnu/packages/bash.scm
@@ -1,6 +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>
+;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -81,8 +81,10 @@
(27 "1gnsfvq6bhb3srlbh0cannj2hackdsipcg7z0ds7zlk1hp96mdqy")
(28 "17a65c4fn4c5rgsiw9gqqnzhznh3gwnd2xzzv2dppyi48znxpc78") ;CVE-2014-7186
(29 "14k27p28r5l2fz3r03kd0x72vvsq8bja8c6hjz5kxikbzsbs7i2c") ;CVE-2014-6277
- (30 "0nrqb0m7s89qsrbfaffpilc5gcf82bx9yvgzld4hr79p5y54yhw5"))) ;CVE-2014-6278
-
+ (30 "0nrqb0m7s89qsrbfaffpilc5gcf82bx9yvgzld4hr79p5y54yhw5") ;CVE-2014-6278
+ (31 "07d62bl3z7qa8v6kgk47vzzazw563mlk9zhrsr4xsbqgvmcrylnd")
+ (32 "0jjgapfq4qhmndfrw8c3q3lva8xjdhlbd9cc631v41b0kb95g4w8")
+ (33 "05ma5rlxiadnfh925p4y7s0vvk917kmsdb1mfdx05gizl63pfapv")))
(define (download-patches store count)
"Download COUNT Bash patches into store. Return a list of
number/base32-hash tuples, directly usable in the 'patch-series' form."
diff --git a/gnu/packages/boost.scm b/gnu/packages/boost.scm
index 3e8d2b8a02..1767681955 100644
--- a/gnu/packages/boost.scm
+++ b/gnu/packages/boost.scm
@@ -1,6 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2014 John Darrington <jmd@gnu.org>
-;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -53,7 +53,7 @@
;; Boost's 'context' library is not yet supported on mips64, so
;; we disable it. The 'coroutine' library depends on 'context',
;; so we disable that too.
- ,@(if (equal? "mips64el-linux" (or (%current-target-system)
+ ,@(if (string-prefix? "mips64" (or (%current-target-system)
(%current-system)))
'("--without-context" "--without-coroutine")
'()))))
diff --git a/gnu/packages/bootstrap.scm b/gnu/packages/bootstrap.scm
index 56c26eef18..1f0fe16688 100644
--- a/gnu/packages/bootstrap.scm
+++ b/gnu/packages/bootstrap.scm
@@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -87,10 +88,13 @@
(patch patch))
(origin-patches source))))))
-(define (package-from-tarball name source program-to-test description)
+(define* (package-from-tarball name source program-to-test description
+ #:key snippet)
"Return a package that correspond to the extraction of SOURCE.
PROGRAM-TO-TEST is a program to run after extraction of SOURCE, to
-check whether everything is alright."
+check whether everything is alright. If SNIPPET is provided, it is
+evaluated after extracting SOURCE. SNIPPET should return true if
+successful, or false to signal an error."
(package
(name name)
(version "0")
@@ -112,6 +116,7 @@ check whether everything is alright."
(with-directory-excursion out
(and (zero? (system* tar "xvf"
(string-append builddir "/binaries.tar")))
+ ,@(if snippet (list snippet) '())
(zero? (system* (string-append "bin/" ,program-to-test)
"--version"))))))))
(inputs
@@ -157,6 +162,7 @@ check whether everything is alright."
"Return the name of Glibc's dynamic linker for SYSTEM."
(cond ((string=? system "x86_64-linux") "/lib/ld-linux-x86-64.so.2")
((string=? system "i686-linux") "/lib/ld-linux.so.2")
+ ((string=? system "armhf-linux") "/lib/ld-linux-armhf.so.3")
((string=? system "mips64el-linux") "/lib/ld.so.1")
;; XXX: This one is used bare-bones, without a libc, so add a case
@@ -186,7 +192,11 @@ check whether everything is alright."
(xz (->store "xz"))
(mkdir (->store "mkdir"))
(bash (->store "bash"))
- (guile (->store "guile-2.0.9.tar.xz"))
+ (guile (->store (match system
+ ("armhf-linux"
+ "guile-2.0.11.tar.xz")
+ (_
+ "guile-2.0.9.tar.xz"))))
(builder
(add-text-to-store store
"build-bootstrap-guile.sh"
@@ -246,7 +256,11 @@ $out/bin/guile --version~%"
(origin
(method url-fetch)
(uri (map (cut string-append <> "/" system
- "/20131110/static-binaries.tar.xz")
+ (match system
+ ("armhf-linux"
+ "/20150101/static-binaries.tar.xz")
+ (_
+ "/20131110/static-binaries.tar.xz")))
%bootstrap-base-urls))
(sha256
(match system
@@ -256,11 +270,21 @@ $out/bin/guile --version~%"
("i686-linux"
(base32
"0s5b3jb315n13m1k8095l0a5hfrsz8g0fv1b6riyc5hnxqyphlak"))
+ ("armhf-linux"
+ (base32
+ "0gf0fn2kbpxkjixkmx5f4z6hv6qpmgixl69zgg74dbsfdfj8jdv5"))
("mips64el-linux"
(base32
"072y4wyfsj1bs80r6vbybbafy8ya4vfy7qj25dklwk97m6g71753"))))))
- "true" ; the program to test
- "Bootstrap binaries of Coreutils, Awk, etc."))
+ "fgrep" ; the program to test
+ "Bootstrap binaries of Coreutils, Awk, etc."
+ #:snippet
+ '(let ((path (list (string-append (getcwd) "/bin"))))
+ (chmod "bin" #o755)
+ (patch-shebang "bin/egrep" path)
+ (patch-shebang "bin/fgrep" path)
+ (chmod "bin" #o555)
+ #t)))
(define %bootstrap-binutils
(package-from-tarball "binutils-bootstrap"
@@ -268,7 +292,11 @@ $out/bin/guile --version~%"
(origin
(method url-fetch)
(uri (map (cut string-append <> "/" system
- "/20131110/binutils-2.23.2.tar.xz")
+ (match system
+ ("armhf-linux"
+ "/20150101/binutils-2.25.tar.xz")
+ (_
+ "/20131110/binutils-2.23.2.tar.xz")))
%bootstrap-base-urls))
(sha256
(match system
@@ -278,6 +306,9 @@ $out/bin/guile --version~%"
("i686-linux"
(base32
"14jgwf9gscd7l2pnz610b1zia06dvcm2qyzvni31b8zpgmcai2v9"))
+ ("armhf-linux"
+ (base32
+ "1v7dj6bzn6m36f20gw31l99xaabq4xrhrx3gwqkhhig0mdlmr69q"))
("mips64el-linux"
(base32
"1x8kkhcxmfyzg1ddpz2pxs6fbdl6412r7x0nzbmi5n7mj8zw2gy7"))))))
@@ -322,7 +353,11 @@ $out/bin/guile --version~%"
(origin
(method url-fetch)
(uri (map (cut string-append <> "/" (%current-system)
- "/20131110/glibc-2.18.tar.xz")
+ (match (%current-system)
+ ("armhf-linux"
+ "/20150101/glibc-2.20.tar.xz")
+ (_
+ "/20131110/glibc-2.18.tar.xz")))
%bootstrap-base-urls))
(sha256
(match (%current-system)
@@ -332,6 +367,9 @@ $out/bin/guile --version~%"
("i686-linux"
(base32
"1hgrccw1zqdc7lvgivwa54d9l3zsim5pqm0dykxg0z522h6gr05w"))
+ ("armhf-linux"
+ (base32
+ "18cmgvpllqfpn6khsmivqib7ys8ymnq0hdzi3qp24prik0ykz8gn"))
("mips64el-linux"
(base32
"0k97a3whzx3apsi9n2cbsrr79ad6lh00klxph9hw4fqyp1abkdsg")))))))))
@@ -393,7 +431,11 @@ exec ~a/bin/.gcc-wrapped -B~a/lib \
(origin
(method url-fetch)
(uri (map (cut string-append <> "/" (%current-system)
- "/20131110/gcc-4.8.2.tar.xz")
+ (match (%current-system)
+ ("armhf-linux"
+ "/20150101/gcc-4.8.4.tar.xz")
+ (_
+ "/20131110/gcc-4.8.2.tar.xz")))
%bootstrap-base-urls))
(sha256
(match (%current-system)
@@ -403,16 +445,19 @@ exec ~a/bin/.gcc-wrapped -B~a/lib \
("i686-linux"
(base32
"150c1arrf2k8vfy6dpxh59vcgs4p1bgiz2av5m19dynpks7rjnyw"))
+ ("armhf-linux"
+ (base32
+ "0ghz825yzp43fxw53kd6afm8nkz16f7dxi9xi40bfwc8x3nbbr8v"))
("mips64el-linux"
(base32
"1m5miqkyng45l745n0sfafdpjkqv9225xf44jqkygwsipj2cv9ks")))))))))
(native-search-paths
(list (search-path-specification
(variable "CPATH")
- (directories '("include")))
+ (files '("include")))
(search-path-specification
(variable "LIBRARY_PATH")
- (directories '("lib" "lib64")))))
+ (files '("lib" "lib64")))))
(synopsis "Bootstrap binaries of the GNU Compiler Collection")
(description #f)
(home-page #f)
diff --git a/gnu/packages/bootstrap/armhf-linux/bash b/gnu/packages/bootstrap/armhf-linux/bash
new file mode 100755
index 0000000000..212a22c8ce
--- /dev/null
+++ b/gnu/packages/bootstrap/armhf-linux/bash
Binary files differ
diff --git a/gnu/packages/bootstrap/armhf-linux/mkdir b/gnu/packages/bootstrap/armhf-linux/mkdir
new file mode 100755
index 0000000000..c3e5246e92
--- /dev/null
+++ b/gnu/packages/bootstrap/armhf-linux/mkdir
Binary files differ
diff --git a/gnu/packages/bootstrap/armhf-linux/tar b/gnu/packages/bootstrap/armhf-linux/tar
new file mode 100755
index 0000000000..5a6aac8a58
--- /dev/null
+++ b/gnu/packages/bootstrap/armhf-linux/tar
Binary files differ
diff --git a/gnu/packages/bootstrap/armhf-linux/xz b/gnu/packages/bootstrap/armhf-linux/xz
new file mode 100755
index 0000000000..a77aebc268
--- /dev/null
+++ b/gnu/packages/bootstrap/armhf-linux/xz
Binary files differ
diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm
index 20831de997..8fa90fed3f 100644
--- a/gnu/packages/commencement.scm
+++ b/gnu/packages/commencement.scm
@@ -122,19 +122,6 @@
("file" ,file-boot0)
,@%bootstrap-inputs))
-(define* (nix-system->gnu-triplet
- #:optional (system (%current-system)) (vendor "unknown"))
- "Return an a guess of the GNU triplet corresponding to Nix system
-identifier SYSTEM."
- (let* ((dash (string-index system #\-))
- (arch (substring system 0 dash))
- (os (substring system (+ 1 dash))))
- (string-append arch
- "-" vendor "-"
- (if (string=? os "linux")
- "linux-gnu"
- os))))
-
(define* (boot-triplet #:optional (system (%current-system)))
;; Return the triplet used to create the cross toolchain needed in the
;; first bootstrapping stage.
@@ -544,7 +531,7 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
(native-inputs `(("texinfo" ,texinfo-boot0)
,@(package-native-inputs gcc-boot0)))
- (inputs `(("gmp-source" ,(package-source gmp))
+ (inputs `(("gmp-source" ,(bootstrap-origin (package-source gmp)))
("mpfr-source" ,(package-source mpfr))
("mpc-source" ,(package-source mpc))
("binutils" ,binutils-final)
diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm
index f2736b9eb3..cda1984f6a 100644
--- a/gnu/packages/compression.scm
+++ b/gnu/packages/compression.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
;;;
@@ -115,13 +115,7 @@ file; as a result, it is often used in conjunction with \"tar\", resulting in
(home-page "http://www.gnu.org/software/gzip/")))
(define-public bzip2
- (let ((fix-man-dir
- ;; Move man pages to $out/share/.
- '(lambda* (#:key outputs #:allow-other-keys)
- (with-directory-excursion (assoc-ref outputs "out")
- (mkdir "share")
- (rename-file "man" "share/man"))))
- (build-shared-lib
+ (let ((build-shared-lib
;; Build a shared library.
'(lambda* (#:key inputs #:allow-other-keys)
(patch-makefile-SHELL "Makefile-libbz2_so")
@@ -171,20 +165,16 @@ file; as a result, it is often used in conjunction with \"tar\", resulting in
`(alist-cons-before
'build 'build-shared-lib ,build-shared-lib
(alist-cons-after
- 'install 'fix-man-dir ,fix-man-dir
- (alist-cons-after
- 'install 'install-shared-lib ,install-shared-lib
- (alist-replace 'configure ,set-cross-environment
- %standard-phases))))
+ 'install 'install-shared-lib ,install-shared-lib
+ (alist-replace 'configure ,set-cross-environment
+ %standard-phases)))
;; Native compilation: build the shared library.
`(alist-cons-before
'build 'build-shared-lib ,build-shared-lib
(alist-cons-after
- 'install 'fix-man-dir ,fix-man-dir
- (alist-cons-after
- 'install 'install-shared-lib ,install-shared-lib
- (alist-delete 'configure %standard-phases)))))
+ 'install 'install-shared-lib ,install-shared-lib
+ (alist-delete 'configure %standard-phases))))
#:make-flags (list (string-append "PREFIX="
(assoc-ref %outputs "out")))
diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index 74809d08f9..5a67d4b6ac 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -88,7 +89,6 @@ may be either a libc package or #f.)"
(substitute-keyword-arguments (package-arguments gcc-4.8)
((#:configure-flags flags)
`(append (list ,(string-append "--target=" target)
- ,@(gcc-configure-flags-for-triplet target)
,@(if libc
'()
`( ;; Disable features not needed at this stage.
@@ -234,10 +234,10 @@ GCC that does not target a libc; otherwise, target that libc."
(search-paths
(list (search-path-specification
(variable "CROSS_CPATH")
- (directories '("include")))
+ (files '("include")))
(search-path-specification
(variable "CROSS_LIBRARY_PATH")
- (directories '("lib" "lib64")))))
+ (files '("lib" "lib64")))))
(native-search-paths '())))
(define* (cross-libc target
@@ -308,10 +308,16 @@ XBINUTILS and the cross tool chain."
;;;
(define-public xgcc-mips64el
- (let ((triplet "mips64el-linux-gnuabi64")) ; N64 ABI
- (cross-gcc triplet
- (cross-binutils triplet)
- (cross-libc triplet))))
+ (let* ((triplet "mips64el-linux-gnuabi64") ;N64 ABI
+ (xgcc (cross-gcc triplet
+ (cross-binutils triplet)
+ (cross-libc triplet))))
+ ;; Don't attempt to build this cross-compiler on i686;
+ ;; see <http://bugs.gnu.org/19598>.
+ (package (inherit xgcc)
+ (supported-systems (fold delete
+ (package-supported-systems xgcc)
+ '("mips64el-linux" "i686-linux"))))))
(define-public xgcc-avr
;; AVR cross-compiler, used to build AVR-Libc.
@@ -323,6 +329,14 @@ XBINUTILS and the cross tool chain."
;; Bare-bones Xtensa cross-compiler, used to build the Atheros firmware.
(cross-gcc "xtensa-elf"))
+(define-public xgcc-armhf
+ (let* ((triplet "arm-linux-gnueabihf")
+ (xgcc (cross-gcc triplet
+ (cross-binutils triplet)
+ (cross-libc triplet))))
+ (package (inherit xgcc)
+ (supported-systems (delete "armhf-linux" %supported-systems)))))
+
;; (define-public xgcc-armel
;; (let ((triplet "armel-linux-gnueabi"))
;; (cross-gcc triplet
diff --git a/gnu/packages/curl.scm b/gnu/packages/curl.scm
index f595e7259c..8792ddceaf 100644
--- a/gnu/packages/curl.scm
+++ b/gnu/packages/curl.scm
@@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr>
+;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -36,14 +37,15 @@
(define-public curl
(package
(name "curl")
- (version "7.37.1")
+ (version "7.40.0")
(source (origin
(method url-fetch)
(uri (string-append "http://curl.haxx.se/download/curl-"
version ".tar.lzma"))
(sha256
(base32
- "10yfh4hy8wbkj43la238hg6h8i9wyp1cvvk8kl0giac1020imn5d"))))
+ "1a15fdc26b3vwwmchzzpd3l1hfyhx06dn7b6lkikqd7kgwvg5ps7"))
+ (patches (list (search-patch "curl-gss-api-fix.patch")))))
(build-system gnu-build-system)
(inputs `(("gnutls" ,gnutls)
("gss" ,gss)
diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index 5a7b9950a1..8d21248fe5 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -3,7 +3,7 @@
;;; Copyright © 2012, 2014 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
;;; Copyright © 2014 David Thompson <davet@gnu.org>
-;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -213,7 +213,7 @@ types are supported, as is encryption.")
(define-public sqlite
(package
(name "sqlite")
- (version "3.8.4.3")
+ (version "3.8.7.4")
(source (origin
(method url-fetch)
;; TODO: Download from sqlite.org once this bug :
@@ -233,9 +233,7 @@ types are supported, as is encryption.")
"/sqlite-autoconf-" numeric-version ".tar.gz")))
(sha256
(base32
- "0rcdsk5sz34w8vy0g5yhfms4saiq81i872jxx5m5sjij7bi9bsg0"))
- (patches
- (list (search-patch "sqlite-large-page-size-fix.patch")))))
+ "1v2rhgsx27in6dcvxk0pkxc0zrbl38biimjg6c1zxz85jh9hydw6"))))
(build-system gnu-build-system)
(inputs
`(("readline" ,readline)))
diff --git a/gnu/packages/elf.scm b/gnu/packages/elf.scm
index 248297bbbb..46c59c3a3b 100644
--- a/gnu/packages/elf.scm
+++ b/gnu/packages/elf.scm
@@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -87,7 +88,7 @@ addr2line, and more.")
(define-public patchelf
(package
(name "patchelf")
- (version "0.6")
+ (version "0.8")
(source (origin
(method url-fetch)
(uri (string-append
@@ -96,9 +97,30 @@ addr2line, and more.")
"/patchelf-" version ".tar.bz2"))
(sha256
(base32
- "00bw29vdsscsili65wcb5ay0gvg1w0ljd00sb5xc6br8bylpyzpw"))
+ "1rqpg84wrd3fa16wa9vqdvasnc05yz49w207cz1l0wrl4k8q97y9"))
(patches (list (search-patch "patchelf-page-size.patch")))))
(build-system gnu-build-system)
+
+ ;; XXX: The upstream 'patchelf' doesn't support ARM. The only available
+ ;; patch makes significant changes to the algorithm, possibly
+ ;; introducing bugs. So, we apply the patch only on ARM systems.
+ (inputs
+ (if (string-prefix? "arm" (or (%current-target-system) (%current-system)))
+ `(("patch/rework-for-arm" ,(search-patch
+ "patchelf-rework-for-arm.patch")))
+ '()))
+ (arguments
+ (if (string-prefix? "arm" (or (%current-target-system) (%current-system)))
+ `(#:phases (alist-cons-after
+ 'unpack 'patch/rework-for-arm
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((patch-file
+ (assoc-ref inputs "patch/rework-for-arm")))
+ (zero? (system* "patch" "--force" "-p1"
+ "--input" patch-file))))
+ %standard-phases))
+ '()))
+
(home-page "http://nixos.org/patchelf.html")
(synopsis "Modify the dynamic linker and RPATH of ELF executables")
(description
diff --git a/gnu/packages/file.scm b/gnu/packages/file.scm
index 070695ec2c..161df544de 100644
--- a/gnu/packages/file.scm
+++ b/gnu/packages/file.scm
@@ -1,6 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -27,14 +27,14 @@
(define-public file
(package
(name "file")
- (version "5.19")
- (source (origin
- (method url-fetch)
- (uri (string-append "ftp://ftp.astron.com/pub/file/file-"
- version ".tar.gz"))
- (sha256 (base32
- "0z1sgrcfy6d285kj5izy1yypf371bjl3247plh9ppk0svaxv714l"))
- (patches (list (search-patch "file-CVE-2014-3587.patch")))))
+ (version "5.22")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "ftp://ftp.astron.com/pub/file/file-"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "02zw14hw3gqlw91w2f2snbirvyrp7r83irvnnkjcb25q9kjaiqy4"))))
(build-system gnu-build-system)
;; When cross-compiling, this package depends upon a native install of
@@ -50,13 +50,3 @@ of the file.")
(license bsd-2)
(home-page "http://www.darwinsys.com/file/")))
-(define-public file-5.20 ;fix for CVE-2014-3710
- (package (inherit file)
- (version "5.20")
- (source (origin
- (method url-fetch)
- (uri (string-append "ftp://ftp.astron.com/pub/file/file-"
- version ".tar.gz"))
- (sha256
- (base32
- "0iyjs9z8kp43gz7gva4j67h4p0n53f7q8x3ibai9s01sp3xnphsv"))))))
diff --git a/gnu/packages/fontutils.scm b/gnu/packages/fontutils.scm
index 0f4f109046..646e12c806 100644
--- a/gnu/packages/fontutils.scm
+++ b/gnu/packages/fontutils.scm
@@ -281,8 +281,7 @@ smooth contours with constant curvature at the spline joins.")
(build-system gnu-build-system)
(native-inputs `(("autoconf" ,autoconf)
("automake" ,automake)
- ("libtool" ,libtool)
- ("libtool-bin" ,libtool "bin")))
+ ("libtool" ,libtool)))
(arguments
`(#:phases (alist-cons-before
'configure 'bootstrap
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index c7630fc349..f206d3caca 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -717,7 +717,7 @@ for common mesh file formats, and collision detection.")
(native-search-paths
(list (search-path-specification
(variable "MINETEST_SUBGAME_PATH")
- (directories '("share/minetest/games")))))
+ (files '("share/minetest/games")))))
(native-inputs
`(("pkg-config" ,pkg-config)))
(inputs
diff --git a/gnu/packages/gawk.scm b/gnu/packages/gawk.scm
index 10506197f3..e0d3f41ac2 100644
--- a/gnu/packages/gawk.scm
+++ b/gnu/packages/gawk.scm
@@ -1,6 +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>
+;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -55,16 +55,18 @@
'((substitute* "extension/Makefile.in"
(("^.*: check-for-shared-lib-support" match)
(string-append "### " match))))
- '())
-
- ;; XXX FIXME prerelease libtool fails on MIPS in the
- ;; absence of /usr/bin/file.
- ,@(if (equal? "mips64el-linux" (or (%current-target-system)
- (%current-system)))
- '((substitute* "extension/configure"
- (("/usr/bin/file") (which "file"))))
'())))
- %standard-phases)))
+
+ (alist-cons-before
+ 'check 'install-locales
+ (lambda _
+ ;; A bunch of tests require the availability of a UTF-8
+ ;; locale and otherwise fail. Give them what they want.
+ (setenv "LOCPATH" (getcwd))
+ (zero? (system* "localedef" "--no-archive"
+ "--prefix" (getcwd) "-i" "en_US"
+ "-f" "UTF-8" "./en_US.UTF-8")))
+ %standard-phases))))
(inputs `(("libsigsegv" ,libsigsegv)
,@(if (%current-target-system)
diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm
index b28b3e0588..276b986331 100644
--- a/gnu/packages/gcc.scm
+++ b/gnu/packages/gcc.scm
@@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -35,7 +36,7 @@
;; Base URL for GCC's infrastructure.
"ftp://gcc.gnu.org/pub/gcc/infrastructure/")
-(define-public (gcc-configure-flags-for-triplet target)
+(define (gcc-configure-flags-for-triplet target)
"Return a list of additional GCC `configure' flags for TARGET, a GNU triplet.
The purpose of this procedure is to translate extended GNU triplets---e.g.,
@@ -45,8 +46,17 @@ where the OS part is overloaded to denote a specific ABI---into GCC
;; Triplets recognized by glibc as denoting the N64 ABI; see
;; ports/sysdeps/mips/preconfigure.
'("--with-abi=64"))
+
+ ((string-match "^arm.*-gnueabihf$" target)
+ '("--with-arch=armv7-a"
+ "--with-float=hard"
+ "--with-mode=thumb"
+
+ ;; See <https://wiki.debian.org/ArmHardFloatPort/VfpComparison#FPU>
+ "--with-fpu=vfpv3-d16"))
+
(else
- ;; TODO: Add `armel.*gnueabi', `hf', etc.
+ ;; TODO: Add `arm.*-gnueabi', etc.
'())))
(define-public gcc-4.7
@@ -101,11 +111,11 @@ where the OS part is overloaded to denote a specific ABI---into GCC
"/include")
"--without-headers")))
- ;; When cross-compiling GCC, pass the right options for the
- ;; target triplet.
- (or (and=> (%current-target-system)
- gcc-configure-flags-for-triplet)
- '())
+ ;; Pass the right options for the target triplet.
+ (let ((triplet
+ (or (%current-target-system)
+ (nix-system->gnu-triplet (%current-system)))))
+ (gcc-configure-flags-for-triplet triplet))
(maybe-target-tools))))))
(package
@@ -178,9 +188,19 @@ where the OS part is overloaded to denote a specific ABI---into GCC
;; The following is not performed for `--without-headers'
;; cross-compiler builds.
+ ;; Join multi-line definitions of GLIBC_DYNAMIC_LINKER* into a
+ ;; single line, to allow the next step to work properly.
+ (for-each
+ (lambda (x)
+ (substitute* (find-files "gcc/config"
+ "^linux(64|-elf|-eabi)?\\.h$")
+ (("(#define GLIBC_DYNAMIC_LINKER.*)\\\\\n$" _ line)
+ line)))
+ '(1 2 3))
+
;; Fix the dynamic linker's file name.
(substitute* (find-files "gcc/config"
- "^linux(64|-elf)?\\.h$")
+ "^linux(64|-elf|-eabi)?\\.h$")
(("#define GLIBC_DYNAMIC_LINKER([^ ]*).*$" _ suffix)
(format #f "#define GLIBC_DYNAMIC_LINKER~a \"~a\"~%"
suffix
@@ -197,6 +217,11 @@ where the OS part is overloaded to denote a specific ABI---into GCC
;; libgcc_s.so when pthread_cancel support is needed, but
;; having it in the application's RUNPATH isn't enough; see
;; <http://sourceware.org/ml/libc-help/2013-11/msg00023.html>.)
+ ;;
+ ;; NOTE: The '-lgcc_s' added below needs to be removed in a
+ ;; later phase of %gcc-static. If you change the string
+ ;; below, make sure to update the relevant code in
+ ;; %gcc-static package as needed.
(format #f "#define GNU_USER_TARGET_LIB_SPEC \
\"-L~a/lib %{!static:-rpath=~a/lib %{!static-libgcc:-rpath=~a/lib64 -rpath=~a/lib -lgcc_s}} \" ~a"
libc libc libdir libdir suffix))
@@ -245,10 +270,10 @@ where the OS part is overloaded to denote a specific ABI---into GCC
(native-search-paths
(list (search-path-specification
(variable "CPATH")
- (directories '("include")))
+ (files '("include")))
(search-path-specification
(variable "LIBRARY_PATH")
- (directories '("lib" "lib64")))))
+ (files '("lib" "lib64")))))
(properties `((gcc-libc . ,(assoc-ref inputs "libc"))))
(synopsis "GNU Compiler Collection")
@@ -261,15 +286,14 @@ Go. It also includes runtime support libraries for these languages.")
(define-public gcc-4.8
(package (inherit gcc-4.7)
- (version "4.8.3")
+ (version "4.8.4")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnu/gcc/gcc-"
version "/gcc-" version ".tar.bz2"))
(sha256
(base32
- "07hg10zs7gnqz58my10ch0zygizqh0z0bz6pv4pgxx45n48lz3ka"))
- (patches (list (search-patch "gcc-fix-pr61801.patch")))))))
+ "15c6gwm6dzsaagamxkak5smdkf1rdfbqqjs9jdbrp3lbg4ism02a"))))))
(define-public gcc-4.9
(package (inherit gcc-4.7)
@@ -280,29 +304,7 @@ Go. It also includes runtime support libraries for these languages.")
version "/gcc-" version ".tar.bz2"))
(sha256
(base32
- "1pbjp4blk2ycaa6r3jmw4ky5f1s9ji3klbqgv8zs2sl5jn1cj810"))))
-
- ;; TODO: In core-updates, improve the 'pre-configure phase of the main
- ;; 'gcc' package so that the 'join-two-line-dynamic-linker-defns phase is
- ;; no longer needed here. Then the entire 'arguments' override below can
- ;; be removed.
- (arguments
- (substitute-keyword-arguments (package-arguments gcc-4.7)
- ((#:phases phases)
- `(alist-cons-before
- 'pre-configure 'join-two-line-dynamic-linker-defns
- (lambda* (#:key inputs outputs #:allow-other-keys)
- (let ((libc (assoc-ref inputs "libc")))
- (when libc
- ;; Join two-line definitions of GLIBC_DYNAMIC_LINKER* into a
- ;; single line, to allow the 'pre-configure phase to work
- ;; properly.
- (substitute* (find-files "gcc/config"
- "^linux(64|-elf)?\\.h$")
- (("(#define GLIBC_DYNAMIC_LINKER[^ ]*.*)\\\\\n$" _ line)
- line)))
- #t))
- ,phases))))))
+ "1pbjp4blk2ycaa6r3jmw4ky5f1s9ji3klbqgv8zs2sl5jn1cj810"))))))
(define* (custom-gcc gcc name languages #:key (separate-lib-output? #t))
"Return a custom version of GCC that supports LANGUAGES."
diff --git a/gnu/packages/gd.scm b/gnu/packages/gd.scm
index caeaeae36b..2d6ccb8d7d 100644
--- a/gnu/packages/gd.scm
+++ b/gnu/packages/gd.scm
@@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -24,6 +25,7 @@
#:use-module (gnu packages image)
#:use-module (gnu packages fontutils)
#:use-module (gnu packages compression)
+ #:use-module (gnu packages pkg-config)
#:use-module ((guix licenses) #:select (bsd-style)))
(define-public gd
@@ -31,25 +33,21 @@
(name "gd")
;; Note: With libgd.org now pointing to bitbucket.org, genuine old
- ;; tarballs are no longer available. Notably, versions 2.0.34 and .35 are
+ ;; tarballs are no longer available. Notably, versions 2.0.x are
;; missing.
- (version "2.0.33")
+ (version "2.1.1")
(source (origin
(method url-fetch)
- (uri "https://bitbucket.org/libgd/gd-libgd/get/GD_2_0_33.tar.gz")
+ (uri (string-append
+ "https://bitbucket.org/libgd/gd-libgd/downloads/"
+ "libgd-" version ".tar.xz"))
(sha256
(base32
- "0yrbx8mj9pykyzm0zl1q86xlkdvkajcsf5jmg688vhw9yc5wmbbw"))
- (patches
- (list (search-patch "gd-mips64-deplibs-fix.patch")))))
+ "11djy9flzxczphigqgp7fbbblbq35gqwwhn9xfcckawlapa1xnls"))))
(build-system gnu-build-system)
- (arguments
- '(#:phases (alist-cons-after
- 'unpack 'chdir
- (lambda _
- (chdir "src"))
- %standard-phases)))
+ (native-inputs
+ `(("pkg-config" ,pkg-config)))
(inputs
`(("freetype" ,freetype)
("libpng" ,libpng)
diff --git a/gnu/packages/gettext.scm b/gnu/packages/gettext.scm
index bbdf0c5862..dd86fe4c5b 100644
--- a/gnu/packages/gettext.scm
+++ b/gnu/packages/gettext.scm
@@ -35,14 +35,14 @@
(define-public gnu-gettext
(package
(name "gettext")
- (version "0.19.3")
+ (version "0.19.4")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnu/gettext/gettext-"
version ".tar.gz"))
(sha256
(base32
- "1xmkxviqnq60h4wmh3bi6b1zkc9qsk3l1lv91k0iwfrxb982v5ck"))))
+ "0gvz86m4cs8bdf3mwmwsyx6lrq4ydfxgadrgd9jlx32z3bnz3jca"))))
(build-system gnu-build-system)
(inputs
`(("expat" ,expat)))
diff --git a/gnu/packages/glib.scm b/gnu/packages/glib.scm
index 83d55d64ff..5a5b4dfd0a 100644
--- a/gnu/packages/glib.scm
+++ b/gnu/packages/glib.scm
@@ -189,7 +189,7 @@ shared NFS home directories.")
;; by 'glib-compile-schemas'.
(list (search-path-specification
(variable "XDG_DATA_DIRS")
- (directories '("share")))))
+ (files '("share")))))
(search-paths native-search-paths)
(synopsis "Thread-safe general utility library; basis of GTK+ and GNOME")
@@ -231,7 +231,7 @@ dynamic loading, and an object system.")
(native-search-paths
(list (search-path-specification
(variable "GI_TYPELIB_PATH")
- (directories '("lib/girepository-1.0")))))
+ (files '("lib/girepository-1.0")))))
(search-paths native-search-paths)
(arguments
`(#:phases
diff --git a/gnu/packages/global.scm b/gnu/packages/global.scm
index f7377def0a..72a53ad4a8 100644
--- a/gnu/packages/global.scm
+++ b/gnu/packages/global.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2015 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -38,7 +38,7 @@
"0j828dg2cjf77rx71cw68jpk7jl119v6nyb0kyvirr5i1860j1fx"))))
(build-system gnu-build-system)
(inputs `(("ncurses" ,ncurses)
- ("libtool" ,libtool)))
+ ("libltdl" ,libltdl)))
(arguments
`(#:configure-flags
(list (string-append "--with-ncurses="
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index 4fea27a865..408ba4e816 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -143,17 +143,6 @@ The gnome-about program helps find which version of GNOME is installed.")
(base32
"19n4x25ndzngaciiyd8dd6s2mf9gv6nv3wv27ggns2smm7zkj1nb"))))
(build-system gnu-build-system)
- (arguments
- `(#:phases
- (alist-cons-before
- 'check 'pre-check
- (lambda* (#:key inputs #:allow-other-keys #:rest args)
- ;; This is needed, because without it, xmlint etc tries
- ;; to download docbookx.dtd from the net
- (setenv "XML_CATALOG_FILES"
- (string-append (assoc-ref inputs "docbook-xml")
- "/xml/dtd/docbook/catalog.xml")))
- %standard-phases)))
(native-inputs
`(("intltool" ,intltool)
("docbook-xml" ,docbook-xml-4.4)
diff --git a/gnu/packages/gnunet.scm b/gnu/packages/gnunet.scm
index 249971becd..f7063ead11 100644
--- a/gnu/packages/gnunet.scm
+++ b/gnu/packages/gnunet.scm
@@ -85,7 +85,7 @@
("libjpeg" ,libjpeg)
("libogg" ,libogg)
("libtiff" ,libtiff)
- ("libtool" ,libtool)
+ ("libltdl" ,libltdl)
("libvorbis" ,libvorbis)
("zlib" ,zlib)))
(native-inputs
@@ -213,7 +213,7 @@ supports HTTPS, HTTPS and GnuTLS.")
("libgcrypt" ,libgcrypt)
("libidn" ,libidn)
("libmicrohttpd" ,libmicrohttpd)
- ("libtool" ,libtool)
+ ("libltdl" ,libltdl)
("libunistring" ,libunistring)
("openssl" ,openssl)
("opus" ,opus)
diff --git a/gnu/packages/gnutls.scm b/gnu/packages/gnutls.scm
index 7ac7a9e304..4f6bd22977 100644
--- a/gnu/packages/gnutls.scm
+++ b/gnu/packages/gnutls.scm
@@ -1,6 +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>
+;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net>
;;;
;;; This file is part of GNU Guix.
@@ -63,7 +63,7 @@ specifications.")
(define-public gnutls
(package
(name "gnutls")
- (version "3.2.20")
+ (version "3.2.21")
(source (origin
(method url-fetch)
(uri
@@ -74,7 +74,7 @@ specifications.")
"/gnutls-" version ".tar.xz"))
(sha256
(base32
- "165mpmm506jgpiffgf0s01rrn8c14qkan1saaa79dvf3g1z0arvr"))))
+ "0zq8syiq51ls5g0f32nglvps330h5llpyrs1z2gjn5pr9hjrchc2"))))
(build-system gnu-build-system)
(arguments
'(#:configure-flags
diff --git a/gnu/packages/gps.scm b/gnu/packages/gps.scm
index 1fbf38f125..231b1d1b04 100644
--- a/gnu/packages/gps.scm
+++ b/gnu/packages/gps.scm
@@ -100,17 +100,7 @@ manipulate maps.")
(substitute* "Makefile"
(("prefix[[:blank:]]*=.*$")
(string-append "prefix = " (assoc-ref outputs "out")
- "\n")))
-
- ;; Make sure the DocBook XML and XSL files are found.
- ;; Note: this is a space-separated list.
- (setenv "XML_CATALOG_FILES"
- (string-append (assoc-ref inputs "docbook-xml")
- "/xml/dtd/docbook/catalog.xml "
- (assoc-ref inputs "docbook-xsl")
- "/xml/xsl/"
- ,(package-full-name docbook-xsl)
- "/catalog.xml")))
+ "\n"))))
%standard-phases)
#:tests? #f))
(inputs
diff --git a/gnu/packages/graphviz.scm b/gnu/packages/graphviz.scm
index dc477f30b3..52522af446 100644
--- a/gnu/packages/graphviz.scm
+++ b/gnu/packages/graphviz.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2015 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -69,7 +69,7 @@
("pango" ,pango)
("fontconfig" ,fontconfig)
("freetype" ,freetype)
- ("libltdl" ,libtool)
+ ("libltdl" ,libltdl)
("libXaw" ,libxaw)
("expat" ,expat)
("libjpeg" ,libjpeg)
diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm
index ce1c533df8..dae3bac567 100644
--- a/gnu/packages/gtk.scm
+++ b/gnu/packages/gtk.scm
@@ -1,7 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
;;;
;;; This file is part of GNU Guix.
@@ -418,18 +418,9 @@ application suites.")
("pkg-config" ,pkg-config)
("gobject-introspection" ,gobject-introspection)
("python-wrapper" ,python-wrapper)
-
- ;; FIXME: The Xorg server is needed to run the tests, but it currently
- ;; fails to build on mips64el, so remove it in the meantime.
- ,@(if (string=? (or (%current-target-system) (%current-system))
- "mips64el-linux")
- '()
- `(("xorg-server" ,xorg-server)))))
+ ("xorg-server" ,xorg-server)))
(arguments
- `(;; FIXME: See above.
- #:tests? ,(not (string=? (or (%current-target-system) (%current-system))
- "mips64el-linux"))
- #:phases
+ `(#:phases
(alist-replace
'configure
(lambda* (#:key inputs #:allow-other-keys #:rest args)
diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm
index 6a76bafe84..c0c5ced0f3 100644
--- a/gnu/packages/guile.scm
+++ b/gnu/packages/guile.scm
@@ -1,6 +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>
+;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -87,7 +87,7 @@
;; Since `guile-1.8.pc' has "Libs: ... -lgmp -lltdl", these must be
;; propagated.
(propagated-inputs `(("gmp" ,gmp)
- ("libtool" ,libtool)))
+ ("libltdl" ,libltdl)))
;; When cross-compiling, a native version of Guile itself is needed.
(self-native-input? #t)
@@ -95,7 +95,7 @@
(native-search-paths
(list (search-path-specification
(variable "GUILE_LOAD_PATH")
- (directories '("share/guile/site")))))
+ (files '("share/guile/site")))))
(synopsis "Scheme implementation intended especially for extensions")
(description
@@ -117,7 +117,8 @@ without requiring the source code to be rewritten.")
".tar.xz"))
(sha256
(base32
- "1qh3j7308qvsjgwf7h94yqgckpbgz2k3yqdkzsyhqcafvfka9l5f"))))
+ "1qh3j7308qvsjgwf7h94yqgckpbgz2k3yqdkzsyhqcafvfka9l5f"))
+ (patches (list (search-patch "guile-arm-fixes.patch")))))
(build-system gnu-build-system)
(native-inputs `(("pkgconfig" ,pkg-config)))
(inputs `(("libffi" ,libffi)
@@ -130,7 +131,10 @@ without requiring the source code to be rewritten.")
;; `-L' flags. As for why the `.la' file lacks the `-L' flags, see
;; <http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/18903>.
("libunistring" ,libunistring)
- ("libtool" ,libtool)
+
+ ;; Depend on LIBLTDL, not LIBTOOL. That way, we avoid some the extra
+ ;; dependencies that LIBTOOL has, which is helpful during bootstrap.
+ ("libltdl" ,libltdl)
;; The headers and/or `guile-2.0.pc' refer to these packages, so they
;; must be propagated.
@@ -155,10 +159,10 @@ without requiring the source code to be rewritten.")
(native-search-paths
(list (search-path-specification
(variable "GUILE_LOAD_PATH")
- (directories '("share/guile/site/2.0")))
+ (files '("share/guile/site/2.0")))
(search-path-specification
(variable "GUILE_LOAD_COMPILED_PATH")
- (directories '("share/guile/site/2.0")))))
+ (files '("share/guile/site/2.0")))))
(synopsis "Scheme implementation intended especially for extensions")
(description
@@ -258,7 +262,16 @@ many readers as needed).")
(("\"libguile-ncurses\"")
(format #f "\"~a/lib/libguile-ncurses\""
out)))))
- %standard-phases)))
+ (alist-cons-before
+ 'check 'install-locales
+ (lambda _
+ ;; One of the tests requires the availability of a UTF-8
+ ;; locale and otherwise fails.
+ (setenv "LOCPATH" (getcwd))
+ (zero? (system* "localedef" "--no-archive"
+ "--prefix" (getcwd) "-i" "en_US"
+ "-f" "UTF-8" "./en_US.utf8")))
+ %standard-phases))))
(home-page "http://www.gnu.org/software/guile-ncurses/")
(synopsis "Guile bindings to ncurses")
(description
diff --git a/gnu/packages/icu4c.scm b/gnu/packages/icu4c.scm
index ea5aecc21f..a575e91c8c 100644
--- a/gnu/packages/icu4c.scm
+++ b/gnu/packages/icu4c.scm
@@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
+;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -18,7 +19,6 @@
(define-module (gnu packages icu4c)
#:use-module (gnu packages)
- #:use-module (gnu packages elf)
#:use-module (gnu packages perl)
#:use-module (guix licenses)
#:use-module (guix packages)
@@ -40,16 +40,14 @@
(base32 "1cwapgjmvrcv1n2wjspj3vahidg596gjfp4jn1gcb4baralcjayl"))))
(build-system gnu-build-system)
(inputs
- `(("patchelf" ,patchelf)
- ("perl" ,perl)))
+ `(("perl" ,perl)))
(arguments
- `(#:modules ((guix build gnu-build-system)
- (guix build utils)
- (guix build rpath)
- (srfi srfi-26))
- #:imported-modules ((guix build gnu-build-system)
- (guix build utils)
- (guix build rpath))
+ `(#:configure-flags
+ '("--enable-rpath"
+ ,@(if (string-prefix? "arm" (or (%current-target-system)
+ (%current-system)))
+ '("--with-data-packaging=archive")
+ '()))
#:phases
(alist-cons-after
'unpack 'chdir-to-source
@@ -62,18 +60,7 @@
(substitute* "configure"
(("`/bin/sh")
(string-append "`" (which "bash")))))
- (alist-cons-after
- 'strip 'add-lib-to-runpath
- (lambda* (#:key outputs #:allow-other-keys)
- (let* ((out (assoc-ref outputs "out"))
- (lib (string-append out "/lib")))
- ;; Add LIB to the RUNPATH of all the libraries and binaries.
- (with-directory-excursion out
- (for-each (cut augment-rpath <> lib)
- (append (find-files "lib" ".*")
- (find-files "bin" ".*")
- (find-files "sbin" ".*"))))))
- %standard-phases)))))
+ %standard-phases))))
(synopsis "International Components for Unicode")
(description
"ICU is a set of C/C++ and Java libraries providing Unicode and
diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm
index cdb9c1cfb2..07669a1803 100644
--- a/gnu/packages/image.scm
+++ b/gnu/packages/image.scm
@@ -1,6 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2014 Alex Kost <alezost@gmail.com>
;;; Copyright © 2014 Ricardo Wurmus <rekado@elephly.net>
;;;
@@ -39,7 +39,7 @@
(define-public libpng
(package
(name "libpng")
- (version "1.5.17")
+ (version "1.5.21")
(source (origin
(method url-fetch)
@@ -50,7 +50,7 @@
"ftp://ftp.simplesystems.org/pub/libpng/png/src"
"/libpng15/libpng-" version ".tar.xz")))
(sha256
- (base32 "19wj293r4plbfgb43yhrc2qx8bsch9gbazazfqrj9haa7lsk29jp"))))
+ (base32 "19yvzw6sf9gf7v25ha9bla8bw1nijh82wj8ag6brjj3hpij1q5dm"))))
(build-system gnu-build-system)
;; libpng.la says "-lz", so propagate it.
diff --git a/gnu/packages/ld-wrapper.scm b/gnu/packages/ld-wrapper.scm
index d3eb083f2f..19856176b3 100644
--- a/gnu/packages/ld-wrapper.scm
+++ b/gnu/packages/ld-wrapper.scm
@@ -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, 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -30,6 +30,7 @@ exec @GUILE@ -c "(load-compiled \"$0.go\") (apply $main (cdr (command-line)))" "
(define-module (gnu build-support ld-wrapper)
#:use-module (srfi srfi-1)
+ #:use-module (ice-9 match)
#:export (ld-wrapper))
;;; Commentary:
@@ -103,58 +104,62 @@ exec @GUILE@ -c "(load-compiled \"$0.go\") (apply $main (cdr (command-line)))" "
(< depth %max-symlink-depth)
(loop (readlink file) (+ 1 depth))))))))
-(define (switch-arguments switch args)
- ;; Return the arguments passed for the occurrences of SWITCH--e.g.,
- ;; "-L"--in ARGS.
- (let ((prefix-len (string-length switch)))
- (fold-right (lambda (arg path)
- (if (string-prefix? switch arg)
- (cons (substring arg prefix-len) path)
- path))
- '()
- args)))
-
-(define (library-path args)
- ;; Return the library search path extracted from `-L' switches in ARGS.
- ;; Note: allow references to out-of-store directories. When this leads to
- ;; actual impurities, this is caught later.
- (switch-arguments "-L" args))
-
(define (library-files-linked args)
;; Return the file names of shared libraries explicitly linked against via
- ;; `-l' in ARGS.
- (map (lambda (lib)
- (string-append "lib" lib ".so"))
- (switch-arguments "-l" args)))
-
-(define (rpath-arguments lib-path library-files)
- ;; Return the `-rpath' argument list for each of LIBRARY-FILES found in
- ;; LIB-PATH.
+ ;; `-l' or with an absolute file name in ARGS.
+ (define path+files
+ (fold (lambda (argument result)
+ (match result
+ ((library-path . library-files)
+ (cond ((string-prefix? "-L" argument) ;augment the search path
+ (cons (append library-path
+ (list (string-drop argument 2)))
+ library-files))
+ ((string-prefix? "-l" argument) ;add library
+ (let* ((lib (string-append "lib"
+ (string-drop argument 2)
+ ".so"))
+ (full (search-path library-path lib)))
+ (if full
+ (cons library-path
+ (cons full library-files))
+ result)))
+ ((and (string-prefix? %store-directory argument)
+ (string-suffix? ".so" argument)) ;add library
+ (cons library-path
+ (cons argument library-files)))
+ (else
+ result)))))
+ (cons '() '())
+ args))
+
+ (match path+files
+ ((path . files)
+ (reverse files))))
+
+(define (rpath-arguments library-files)
+ ;; Return the `-rpath' argument list for each of LIBRARY-FILES, a list of
+ ;; absolute file names.
(fold-right (lambda (file args)
- (let ((absolute (search-path lib-path file)))
- (if absolute
- (if (or %allow-impurities?
- (pure-file-name? absolute))
- (cons* "-rpath" (dirname absolute)
- args)
- (begin
- (format (current-error-port)
- "ld-wrapper: error: attempt to use impure library ~s~%"
- absolute)
- (exit 1)))
- args)))
+ (if (or %allow-impurities?
+ (pure-file-name? file))
+ (cons* "-rpath" (dirname file) args)
+ (begin
+ (format (current-error-port)
+ "ld-wrapper: error: attempt to use impure library ~s~%"
+ file)
+ (exit 1))))
'()
library-files))
(define (ld-wrapper . args)
;; Invoke the real `ld' with ARGS, augmented with `-rpath' switches.
- (let* ((lib-path (library-path args))
- (libs (library-files-linked args))
- (args (append args (rpath-arguments lib-path libs))))
- (if %debug?
- (format (current-error-port)
- "ld-wrapper: invoking `~a' with ~s~%"
- %real-ld args))
+ (let* ((libs (library-files-linked args))
+ (args (append args (rpath-arguments libs))))
+ (when %debug?
+ (format (current-error-port)
+ "ld-wrapper: invoking `~a' with ~s~%"
+ %real-ld args))
(apply execl %real-ld (basename %real-ld) args)))
;;; ld-wrapper.scm ends here
diff --git a/gnu/packages/libcanberra.scm b/gnu/packages/libcanberra.scm
index 3d43c4f98e..0ffae1f674 100644
--- a/gnu/packages/libcanberra.scm
+++ b/gnu/packages/libcanberra.scm
@@ -1,6 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -67,7 +67,7 @@
`(("alsa-lib" ,alsa-lib)
("gstreamer" ,gstreamer)
("gtk+" ,gtk+)
- ("libtool" ,libtool)
+ ("libltdl" ,libltdl)
("libvorbis" ,libvorbis)
("pulseaudio" ,pulseaudio)
("udev" ,eudev)
diff --git a/gnu/packages/libevent.scm b/gnu/packages/libevent.scm
index 27416a0e59..64892bf878 100644
--- a/gnu/packages/libevent.scm
+++ b/gnu/packages/libevent.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -85,7 +85,7 @@ loop.")
#:tests? #f))
(native-inputs `(("autoconf" ,(autoconf-wrapper))
("automake" ,automake)
- ("libtool" ,libtool "bin")
+ ("libtool" ,libtool)
;; libuv.pc is installed only when pkg-config is found.
("pkg-config" ,pkg-config)))
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index eab6c54a65..f8bb6e2c1f 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -196,7 +196,7 @@ for SYSTEM, or #f if there is no configuration for SYSTEM."
(build-phase
'(lambda* (#:key system inputs #:allow-other-keys #:rest args)
;; Apply the neat patch.
- (system* "patch" "-p1" "--batch"
+ (system* "patch" "-p1" "--force"
"-i" (assoc-ref inputs "patch/freedo+gnu"))
(let ((arch (car (string-split system #\-))))
@@ -825,7 +825,7 @@ manpages.")
'unpack 'patch
(lambda* (#:key inputs #:allow-other-keys)
(define (apply-patch file)
- (zero? (system* "patch" "-p1" "--batch"
+ (zero? (system* "patch" "-p1" "--force"
"--input" file)))
(let ((patch.gz (assoc-ref inputs "patch")))
@@ -1414,55 +1414,9 @@ kmod. The aim is to be compatible with tools, configurations and indices
from the module-init-tools project.")
(license gpl2+))) ; library under lgpl2.1+
-(define-public udev
- ;; The last pre-systemd version.
- (package
- (name "udev")
- (version "182")
- (source (origin
- (method url-fetch)
- (uri (string-append
- "mirror://kernel.org/linux/utils/kernel/hotplug/udev-"
- version ".tar.xz"))
- (sha256
- (base32
- "1awp7p07gi083w0dwqhhbbas68a7fx2sbm1yf1ip2jwf7cpqkf5d"))
- (patches (list (search-patch "udev-gir-libtool.patch")))))
- (build-system gnu-build-system)
- (arguments
- `(#:configure-flags (list (string-append
- "--with-pci-ids-path="
- (assoc-ref %build-inputs "pciutils")
- "/share/pci.ids.gz")
-
- "--with-firmware-path=/no/firmware"
-
- ;; Work around undefined reference to
- ;; 'mq_getattr' in sc-daemon.c.
- "LDFLAGS=-lrt")))
- (native-inputs
- `(("pkg-config" ,pkg-config)
- ("gperf" ,gperf)
- ("glib" ,glib "bin") ; glib-genmarshal, etc.
- ("perl" ,perl) ; for the tests
- ("python" ,python-2))) ; ditto
- (inputs
- `(("kmod" ,kmod)
- ("pciutils" ,pciutils)
- ("usbutils" ,usbutils)
- ("util-linux" ,util-linux)
- ("glib" ,glib)
- ("gobject-introspection" ,gobject-introspection)))
- (home-page "http://www.freedesktop.org/software/systemd/libudev/")
- (synopsis "Userspace device management")
- (description "Udev is a daemon which dynamically creates and removes
-device nodes from /dev/, handles hotplug events and loads drivers at boot
-time.")
- (license gpl2+))) ; libudev is under lgpl2.1+
-
(define-public eudev
;; The post-systemd fork, maintained by Gentoo.
- (package (inherit udev)
+ (package
(name "eudev")
(version "1.10")
(source (origin
@@ -1483,11 +1437,39 @@ time.")
'(substitute* "configure"
(("linux/btrfs\\.h")
"")))))
+ (build-system gnu-build-system)
+ (native-inputs
+ `(("pkg-config" ,pkg-config)
+ ("gperf" ,gperf)
+ ("glib" ,glib "bin") ; glib-genmarshal, etc.
+ ("perl" ,perl) ; for the tests
+ ("python" ,python-2))) ; ditto
+ (inputs
+ `(("kmod" ,kmod)
+ ("pciutils" ,pciutils)
+ ("usbutils" ,usbutils)
+ ("util-linux" ,util-linux)
+ ("glib" ,glib)
+ ("gobject-introspection" ,gobject-introspection)))
(arguments
- (substitute-keyword-arguments (package-arguments udev)
- ((#:configure-flags flags)
- `(cons "--enable-libkmod" ,flags))))
- (home-page "http://www.gentoo.org/proj/en/eudev/")))
+ `(#:configure-flags (list "--enable-libkmod"
+
+ (string-append
+ "--with-pci-ids-path="
+ (assoc-ref %build-inputs "pciutils")
+ "/share/pci.ids.gz")
+
+ "--with-firmware-path=/no/firmware"
+
+ ;; Work around undefined reference to
+ ;; 'mq_getattr' in sc-daemon.c.
+ "LDFLAGS=-lrt")))
+ (home-page "http://www.gentoo.org/proj/en/eudev/")
+ (synopsis "Userspace device management")
+ (description "Udev is a daemon which dynamically creates and removes
+device nodes from /dev/, handles hotplug events and loads drivers at boot
+time.")
+ (license gpl2+)))
(define-public lvm2
(package
@@ -1516,7 +1498,7 @@ time.")
`(("pkg-config" ,pkg-config)
("procps" ,procps))) ;tests use 'pgrep'
(inputs
- `(("udev" ,udev)))
+ `(("udev" ,eudev)))
(arguments
'(#:phases (alist-cons-after
'configure 'set-makefile-shell
diff --git a/gnu/packages/m4.scm b/gnu/packages/m4.scm
index 0915fde4f2..b3b3a00fde 100644
--- a/gnu/packages/m4.scm
+++ b/gnu/packages/m4.scm
@@ -33,8 +33,7 @@
version ".tar.bz2"))
(sha256
(base32
- "0w0da1chh12mczxa5lnwzjk9czi3dq6gnnndbpa6w4rj76b1yklf"))
- (patches (list (search-patch "m4-readlink-EINVAL.patch")))))
+ "0w0da1chh12mczxa5lnwzjk9czi3dq6gnnndbpa6w4rj76b1yklf"))))
(build-system gnu-build-system)
(arguments
;; XXX: Disable tests on those platforms with know issues.
diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index 8424d8ccbe..62f86ef839 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net>
;;; Copyright © 2014 Sou Bunnbu <iyzsong@gmail.com>
@@ -113,7 +113,7 @@
("readline" ,readline-6.2)
("linux-pam" ,linux-pam)
- ("libtool" ,libtool)
+ ("libltdl" ,libltdl)
("gdbm" ,gdbm)))
(home-page "http://www.gnu.org/software/mailutils/")
(synopsis "Utilities and library for reading and serving mail")
@@ -419,7 +419,7 @@ useful features.")
(build-system gnu-build-system)
(native-inputs `(("autoconf" ,(autoconf-wrapper))
("automake" ,automake)
- ("libtool" ,libtool "bin")
+ ("libtool" ,libtool)
("pkg-config" ,pkg-config)))
(propagated-inputs
;; 'libetpan-config --libs' returns '-lssl -lcrypto -lsasl2', so these
diff --git a/gnu/packages/make-bootstrap.scm b/gnu/packages/make-bootstrap.scm
index f6ef2e326a..88fad0e604 100644
--- a/gnu/packages/make-bootstrap.scm
+++ b/gnu/packages/make-bootstrap.scm
@@ -430,7 +430,19 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
"--disable-libquadmath"
"--disable-decimal-float")
(remove (cut string-match "--(.*plugin|enable-languages)" <>)
- ,flags))))))
+ ,flags)))
+ ((#:phases phases)
+ `(alist-cons-after
+ 'pre-configure 'remove-lgcc_s
+ (lambda _
+ ;; Remove the '-lgcc_s' added to GNU_USER_TARGET_LIB_SPEC in
+ ;; the 'pre-configure phase of our main gcc package, because
+ ;; that shared library is not present in this static gcc. See
+ ;; <https://lists.gnu.org/archive/html/guix-devel/2015-01/msg00008.html>.
+ (substitute* (find-files "gcc/config"
+ "^gnu-user.*\\.h$")
+ ((" -lgcc_s}}") "}}")))
+ ,phases)))))
(native-inputs
(if (%current-target-system)
`(;; When doing a Canadian cross, we need GMP/MPFR/MPC both
diff --git a/gnu/packages/man.scm b/gnu/packages/man.scm
index 028403ce74..712622aee8 100644
--- a/gnu/packages/man.scm
+++ b/gnu/packages/man.scm
@@ -105,7 +105,7 @@ a flexible and convenient way.")
(native-search-paths
(list (search-path-specification
(variable "MANPATH")
- (directories '("share/man")))))
+ (files '("share/man")))))
(home-page "http://man-db.nongnu.org/")
(synopsis "Standard Unix documentation system")
(description
diff --git a/gnu/packages/mit-krb5.scm b/gnu/packages/mit-krb5.scm
index 2528f46157..0a107a8bec 100644
--- a/gnu/packages/mit-krb5.scm
+++ b/gnu/packages/mit-krb5.scm
@@ -41,11 +41,7 @@
(native-inputs
`(("patch/init-fix" ,(search-patch "mit-krb5-init-fix.patch"))
("bison" ,bison)
- ("perl" ,perl)
-
- ;; XXX: When built with GCC 4.8, the 'db_test' test program enters an
- ;; infinite loop. As a stopgap measure, build with GCC 4.7.
- ("gcc" ,gcc-4.7)))
+ ("perl" ,perl)))
(arguments
'(#:phases
(alist-replace
@@ -62,7 +58,7 @@
;; XXX The current patch system does not support unusual
;; source unpack methods, so we have to apply this patch in a
;; non-standard way.
- (zero? (system* "patch" "-p1" "--batch" "-i"
+ (zero? (system* "patch" "-p1" "--force" "-i"
(assoc-ref %build-inputs "patch/init-fix"))))))
(alist-replace
'check
diff --git a/gnu/packages/mp3.scm b/gnu/packages/mp3.scm
index 1731cd59af..55ab4b497c 100644
--- a/gnu/packages/mp3.scm
+++ b/gnu/packages/mp3.scm
@@ -1,6 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -231,7 +231,7 @@ pre-defined or user-specifiable output format.")
(inputs `(("libid3tag" ,libid3tag)
("libmad" ,libmad)
("libogg" ,libogg)
- ("libtool" ,libtool)
+ ("libltdl" ,libltdl)
("libvorbid" ,libvorbis)
("pcre" ,pcre)))
(native-inputs
diff --git a/gnu/packages/multiprecision.scm b/gnu/packages/multiprecision.scm
index 377d922a09..ddbfc79965 100644
--- a/gnu/packages/multiprecision.scm
+++ b/gnu/packages/multiprecision.scm
@@ -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.
;;;
@@ -22,6 +23,7 @@
#:use-module (gnu packages m4)
#:use-module (guix packages)
#:use-module (guix download)
+ #:use-module (guix utils)
#:use-module (guix build-system gnu))
(define-public gmp
@@ -35,7 +37,8 @@
version ".tar.xz"))
(sha256
(base32
- "0r5pp27cy7ch3dg5v0rsny8bib1zfvrza6027g2mp5f6v8pd6mli"))))
+ "0r5pp27cy7ch3dg5v0rsny8bib1zfvrza6027g2mp5f6v8pd6mli"))
+ (patches (list (search-patch "gmp-arm-asm-nothumb.patch")))))
(build-system gnu-build-system)
(native-inputs `(("m4" ,m4)))
(outputs '("out" "debug"))
@@ -43,7 +46,15 @@
'(;; Build a "fat binary", with routines for several
;; sub-architectures.
"--enable-fat"
- "--enable-cxx")))
+ "--enable-cxx"
+
+ ;; FIXME: gmp-6.0.0a's config.guess fails on
+ ;; multi-core armhf systems.
+ ,@(if (%current-target-system)
+ '()
+ (let ((triplet
+ (nix-system->gnu-triplet (%current-system))))
+ (list (string-append "--build=" triplet)))))))
(synopsis "Multiple-precision arithmetic library")
(description
"GMP is a library for arbitrary precision arithmetic, operating on
diff --git a/gnu/packages/ncurses.scm b/gnu/packages/ncurses.scm
index de7e6f6721..0dbc583f79 100644
--- a/gnu/packages/ncurses.scm
+++ b/gnu/packages/ncurses.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
@@ -99,11 +99,6 @@
,(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")
-
;; Make sure programs like 'tic', 'reset', and 'clear' have a
;; correct RUNPATH.
,(string-append "LDFLAGS=-Wl,-rpath=" (assoc-ref %outputs "out")
diff --git a/gnu/packages/openldap.scm b/gnu/packages/openldap.scm
index 23c32488e9..a6c4cb0d93 100644
--- a/gnu/packages/openldap.scm
+++ b/gnu/packages/openldap.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
;;;
;;; This file is part of GNU Guix.
@@ -52,8 +52,8 @@
;; FIXME: currently, openldap requires openssl or gnutls<3, see
;; http://www.openldap.org/its/index.cgi/Incoming?id=7430;page=17
;; Once this is fixed, switch to gnutls.
- ("libtool" ,libtool "bin")
("zlib" ,zlib)))
+ (native-inputs `(("libtool" ,libtool)))
(arguments
`(#:tests? #f
#:phases
diff --git a/gnu/packages/openssl.scm b/gnu/packages/openssl.scm
index 141e105a2d..7764fc462b 100644
--- a/gnu/packages/openssl.scm
+++ b/gnu/packages/openssl.scm
@@ -1,6 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -29,14 +29,14 @@
(define-public openssl
(package
(name "openssl")
- (version "1.0.1j")
+ (version "1.0.1k")
(source (origin
(method url-fetch)
(uri (string-append "ftp://ftp.openssl.org/source/openssl-" version
".tar.gz"))
(sha256
(base32
- "1wzdaiix40lz0rsyf51qv0wiq4ywp29j5ni0xzl06vxsi63wlq0v"))))
+ "0754wzmzr90hiiqs5cy6g3cf8as75ljkhppgyirfg26hpapax7wg"))))
(build-system gnu-build-system)
(native-inputs `(("perl" ,perl)))
(arguments
diff --git a/gnu/packages/patches/curl-gss-api-fix.patch b/gnu/packages/patches/curl-gss-api-fix.patch
new file mode 100644
index 0000000000..ea838ae8c7
--- /dev/null
+++ b/gnu/packages/patches/curl-gss-api-fix.patch
@@ -0,0 +1,38 @@
+Copied from upstream:
+https://github.com/bagder/curl/commit/5c0e66d63214e0306197c5a3f162441e074f3401.patch
+
+From 5c0e66d63214e0306197c5a3f162441e074f3401 Mon Sep 17 00:00:00 2001
+From: Steve Holme <steve_holme@hotmail.com>
+Date: Thu, 8 Jan 2015 19:23:53 +0000
+Subject: [PATCH] sasl_gssapi: Fixed build on NetBSD with built-in GSS-API
+
+Bug: http://curl.haxx.se/bug/view.cgi?id=1469
+Reported-by: Thomas Klausner
+---
+ lib/curl_sasl_gssapi.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/lib/curl_sasl_gssapi.c b/lib/curl_sasl_gssapi.c
+index 6dda0e9..a50646a 100644
+--- a/lib/curl_sasl_gssapi.c
++++ b/lib/curl_sasl_gssapi.c
+@@ -6,6 +6,7 @@
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 2014, Steve Holme, <steve_holme@hotmail.com>.
++ * Copyright (C) 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+@@ -126,7 +127,7 @@ CURLcode Curl_sasl_create_gssapi_user_message(struct SessionHandle *data,
+
+ /* Import the SPN */
+ gss_major_status = gss_import_name(&gss_minor_status, &spn_token,
+- gss_nt_service_name, &krb5->spn);
++ GSS_C_NT_HOSTBASED_SERVICE, &krb5->spn);
+ if(GSS_ERROR(gss_major_status)) {
+ Curl_gss_log_error(data, gss_minor_status, "gss_import_name() failed: ");
+
+--
+2.2.1
+
diff --git a/gnu/packages/patches/file-CVE-2014-3587.patch b/gnu/packages/patches/file-CVE-2014-3587.patch
deleted file mode 100644
index cf88bf5f3e..0000000000
--- a/gnu/packages/patches/file-CVE-2014-3587.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-Fixes CVE-2014-3587. Copied from upstream commit
-0641e56be1af003aa02c7c6b0184466540637233.
-
---- file-5.19/src/cdf.c.orig 2014-06-09 09:04:37.000000000 -0400
-+++ file-5.19/src/cdf.c 2014-08-26 11:55:23.887118898 -0400
-@@ -824,6 +824,10 @@
- q = (const uint8_t *)(const void *)
- ((const char *)(const void *)p + ofs
- - 2 * sizeof(uint32_t));
-+ if (q < p) {
-+ DPRINTF(("Wrapped around %p < %p\n", q, p));
-+ goto out;
-+ }
- if (q > e) {
- DPRINTF(("Ran of the end %p > %p\n", q, e));
- goto out;
diff --git a/gnu/packages/patches/gcc-fix-pr61801.patch b/gnu/packages/patches/gcc-fix-pr61801.patch
deleted file mode 100644
index e9cd92aa1c..0000000000
--- a/gnu/packages/patches/gcc-fix-pr61801.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-GCC bug fix for <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61801>.
-Initially discussed at
- <http://lists.gnu.org/archive/html/guix-devel/2014-09/msg00283.html>.
-Patch from <https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=212740>.
-
-2014-07-17 Richard Biener <rguenther@suse.de>
-
- PR rtl-optimization/61801
-
- * sched-deps.c (sched_analyze_2): For ASM_OPERANDS and
- ASM_INPUT don't set reg_pending_barrier if it appears in a
- debug-insn.
-
---- gcc-4_8-branch/gcc/sched-deps.c 2014/07/17 07:48:49 212739
-+++ gcc-4_8-branch/gcc/sched-deps.c 2014/07/17 07:49:44 212740
-@@ -2744,7 +2744,8 @@
- Consider for instance a volatile asm that changes the fpu rounding
- mode. An insn should not be moved across this even if it only uses
- pseudo-regs because it might give an incorrectly rounded result. */
-- if (code != ASM_OPERANDS || MEM_VOLATILE_P (x))
-+ if ((code != ASM_OPERANDS || MEM_VOLATILE_P (x))
-+ && !DEBUG_INSN_P (insn))
- reg_pending_barrier = TRUE_BARRIER;
-
- /* For all ASM_OPERANDS, we must traverse the vector of input operands.
diff --git a/gnu/packages/patches/gd-mips64-deplibs-fix.patch b/gnu/packages/patches/gd-mips64-deplibs-fix.patch
deleted file mode 100644
index 6231310cdb..0000000000
--- a/gnu/packages/patches/gd-mips64-deplibs-fix.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-Patch configure script to choose pass_all deplibs check method for
-linux-gnu* systems on mips64. This is a temporary hack until libgd
-bootstraps their build system with a newer libtool.
-
-Patch by Mark H Weaver <mhw@netris.org>.
-
---- libgd-gd/src/configure.orig 2006-04-05 11:56:57.000000000 -0400
-+++ libgd-gd/src/configure 2013-11-02 17:56:19.123995838 -0400
-@@ -4457,7 +4457,7 @@
- # This must be Linux ELF.
- linux-gnu*)
- case $host_cpu in
-- alpha* | hppa* | i*86 | mips | mipsel | powerpc* | sparc* | ia64* | s390* | x86_64*)
-+ alpha* | hppa* | i*86 | mips | mipsel | mips64 | mips64el | powerpc* | sparc* | ia64* | s390* | x86_64*)
- lt_cv_deplibs_check_method=pass_all ;;
- *)
- # glibc up to 2.1.1 does not perform some relocations on ARM
diff --git a/gnu/packages/patches/glibc-CVE-2012-3406.patch b/gnu/packages/patches/glibc-CVE-2012-3406.patch
new file mode 100644
index 0000000000..9147a2aeee
--- /dev/null
+++ b/gnu/packages/patches/glibc-CVE-2012-3406.patch
@@ -0,0 +1,282 @@
+Fix CVE-2012-3406: Stack overflow in vfprintf [BZ #16617]
+
+Note: Here the ChangeLog and NEWS updates are removed from Jeff's
+ patch, since they depend on other earlier commits.
+
+From: Jeff Law <law@redhat.com>
+Date: Mon, 15 Dec 2014 09:09:32 +0000 (+0100)
+Subject: CVE-2012-3406: Stack overflow in vfprintf [BZ #16617]
+X-Git-Url: https://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff_plain;h=a3a1f4163c4d0f9a36056c8640661a88674ae8a2
+
+CVE-2012-3406: Stack overflow in vfprintf [BZ #16617]
+
+A larger number of format specifiers coudld cause a stack overflow,
+potentially allowing to bypass _FORTIFY_SOURCE format string
+protection.
+
+(cherry picked from commit a5357b7ce2a2982c5778435704bcdb55ce3667a0)
+(cherry picked from commit ae61fc7b33d9d99d2763c16de8275227dc9748ba)
+
+Conflicts:
+ NEWS
+---
+
+diff --git a/stdio-common/Makefile b/stdio-common/Makefile
+index 5f8e534..e5e45b6 100644
+--- a/stdio-common/Makefile
++++ b/stdio-common/Makefile
+@@ -57,7 +57,7 @@ tests := tstscanf test_rdwr test-popen tstgetln test-fseek \
+ bug19 bug19a tst-popen2 scanf13 scanf14 scanf15 bug20 bug21 bug22 \
+ scanf16 scanf17 tst-setvbuf1 tst-grouping bug23 bug24 \
+ bug-vfprintf-nargs tst-long-dbl-fphex tst-fphex-wide tst-sprintf3 \
+- bug25 tst-printf-round bug26
++ bug25 tst-printf-round bug23-2 bug23-3 bug23-4 bug26
+
+ test-srcs = tst-unbputc tst-printf
+
+diff --git a/stdio-common/bug23-2.c b/stdio-common/bug23-2.c
+new file mode 100644
+index 0000000..9e0cfe6
+--- /dev/null
++++ b/stdio-common/bug23-2.c
+@@ -0,0 +1,70 @@
++#include <stdio.h>
++#include <string.h>
++#include <stdlib.h>
++
++static const char expected[] = "\
++\n\
++a\n\
++abbcd55\
++\n\
++a\n\
++abbcd55\
++\n\
++a\n\
++abbcd55\
++\n\
++a\n\
++abbcd55\
++\n\
++a\n\
++abbcd55\
++\n\
++a\n\
++abbcd55\
++\n\
++a\n\
++abbcd55\
++\n\
++a\n\
++abbcd55\
++\n\
++a\n\
++abbcd55\
++\n\
++a\n\
++abbcd55\
++\n\
++a\n\
++abbcd55\
++\n\
++a\n\
++abbcd55\
++\n\
++a\n\
++abbcd55%%%%%%%%%%%%%%%%%%%%%%%%%%\n";
++
++static int
++do_test (void)
++{
++ char *buf = malloc (strlen (expected) + 1);
++ snprintf (buf, strlen (expected) + 1,
++ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d"
++ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d"
++ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d"
++ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d"
++ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d"
++ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d"
++ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d"
++ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d"
++ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d"
++ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d"
++ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d"
++ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d"
++ "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d"
++ "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n",
++ "a", "b", "c", "d", 5);
++ return strcmp (buf, expected) != 0;
++}
++
++#define TEST_FUNCTION do_test ()
++#include "../test-skeleton.c"
+diff --git a/stdio-common/bug23-3.c b/stdio-common/bug23-3.c
+new file mode 100644
+index 0000000..57c8cef
+--- /dev/null
++++ b/stdio-common/bug23-3.c
+@@ -0,0 +1,50 @@
++#include <stdio.h>
++#include <string.h>
++#include <stdlib.h>
++
++int
++do_test (void)
++{
++ size_t instances = 16384;
++#define X0 "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d"
++ const char *item = "\na\nabbcd55";
++#define X3 X0 X0 X0 X0 X0 X0 X0 X0
++#define X6 X3 X3 X3 X3 X3 X3 X3 X3
++#define X9 X6 X6 X6 X6 X6 X6 X6 X6
++#define X12 X9 X9 X9 X9 X9 X9 X9 X9
++#define X14 X12 X12 X12 X12
++#define TRAILER "%%%%%%%%%%%%%%%%%%%%%%%%%%"
++#define TRAILER2 TRAILER TRAILER
++ size_t length = instances * strlen (item) + strlen (TRAILER) + 1;
++
++ char *buf = malloc (length + 1);
++ snprintf (buf, length + 1,
++ X14 TRAILER2 "\n",
++ "a", "b", "c", "d", 5);
++
++ const char *p = buf;
++ size_t i;
++ for (i = 0; i < instances; ++i)
++ {
++ const char *expected;
++ for (expected = item; *expected; ++expected)
++ {
++ if (*p != *expected)
++ {
++ printf ("mismatch at offset %zu (%zu): expected %d, got %d\n",
++ (size_t) (p - buf), i, *expected & 0xFF, *p & 0xFF);
++ return 1;
++ }
++ ++p;
++ }
++ }
++ if (strcmp (p, TRAILER "\n") != 0)
++ {
++ printf ("mismatch at trailer: [%s]\n", p);
++ return 1;
++ }
++ free (buf);
++ return 0;
++}
++#define TEST_FUNCTION do_test ()
++#include "../test-skeleton.c"
+diff --git a/stdio-common/bug23-4.c b/stdio-common/bug23-4.c
+new file mode 100644
+index 0000000..a478564
+--- /dev/null
++++ b/stdio-common/bug23-4.c
+@@ -0,0 +1,31 @@
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include <sys/resource.h>
++
++#define LIMIT 1000000
++
++int
++main (void)
++{
++ struct rlimit lim;
++ getrlimit (RLIMIT_STACK, &lim);
++ lim.rlim_cur = 1048576;
++ setrlimit (RLIMIT_STACK, &lim);
++ char *fmtstr = malloc (4 * LIMIT + 1);
++ if (fmtstr == NULL)
++ abort ();
++ char *output = malloc (LIMIT + 1);
++ if (output == NULL)
++ abort ();
++ for (size_t i = 0; i < LIMIT; i++)
++ memcpy (fmtstr + 4 * i, "%1$d", 4);
++ fmtstr[4 * LIMIT] = '\0';
++ int ret = snprintf (output, LIMIT + 1, fmtstr, 0);
++ if (ret != LIMIT)
++ abort ();
++ for (size_t i = 0; i < LIMIT; i++)
++ if (output[i] != '0')
++ abort ();
++ return 0;
++}
+diff --git a/stdio-common/vfprintf.c b/stdio-common/vfprintf.c
+index c4ff833..429a3d1 100644
+--- a/stdio-common/vfprintf.c
++++ b/stdio-common/vfprintf.c
+@@ -263,6 +263,12 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
+ /* For the argument descriptions, which may be allocated on the heap. */
+ void *args_malloced = NULL;
+
++ /* For positional argument handling. */
++ struct printf_spec *specs;
++
++ /* Track if we malloced the SPECS array and thus must free it. */
++ bool specs_malloced = false;
++
+ /* This table maps a character into a number representing a
+ class. In each step there is a destination label for each
+ class. */
+@@ -1679,8 +1685,8 @@ do_positional:
+ size_t nspecs = 0;
+ /* A more or less arbitrary start value. */
+ size_t nspecs_size = 32 * sizeof (struct printf_spec);
+- struct printf_spec *specs = alloca (nspecs_size);
+
++ specs = alloca (nspecs_size);
+ /* The number of arguments the format string requests. This will
+ determine the size of the array needed to store the argument
+ attributes. */
+@@ -1721,11 +1727,39 @@ do_positional:
+ if (nspecs * sizeof (*specs) >= nspecs_size)
+ {
+ /* Extend the array of format specifiers. */
++ if (nspecs_size * 2 < nspecs_size)
++ {
++ __set_errno (ENOMEM);
++ done = -1;
++ goto all_done;
++ }
+ struct printf_spec *old = specs;
+- specs = extend_alloca (specs, nspecs_size, 2 * nspecs_size);
++ if (__libc_use_alloca (2 * nspecs_size))
++ specs = extend_alloca (specs, nspecs_size, 2 * nspecs_size);
++ else
++ {
++ nspecs_size *= 2;
++ specs = malloc (nspecs_size);
++ if (specs == NULL)
++ {
++ __set_errno (ENOMEM);
++ specs = old;
++ done = -1;
++ goto all_done;
++ }
++ }
+
+ /* Copy the old array's elements to the new space. */
+ memmove (specs, old, nspecs * sizeof (*specs));
++
++ /* If we had previously malloc'd space for SPECS, then
++ release it after the copy is complete. */
++ if (specs_malloced)
++ free (old);
++
++ /* Now set SPECS_MALLOCED if needed. */
++ if (!__libc_use_alloca (nspecs_size))
++ specs_malloced = true;
+ }
+
+ /* Parse the format specifier. */
+@@ -2046,6 +2080,8 @@ do_positional:
+ }
+
+ all_done:
++ if (specs_malloced)
++ free (specs);
+ if (__glibc_unlikely (args_malloced != NULL))
+ free (args_malloced);
+ if (__glibc_unlikely (workstart != NULL))
diff --git a/gnu/packages/patches/glibc-CVE-2014-7817.patch b/gnu/packages/patches/glibc-CVE-2014-7817.patch
new file mode 100644
index 0000000000..14c885523c
--- /dev/null
+++ b/gnu/packages/patches/glibc-CVE-2014-7817.patch
@@ -0,0 +1,171 @@
+Fix CVE-2014-7817: wordexp fails to honour WRDE_NOCMD.
+
+Note: Here the ChangeLog and NEWS updates are removed from Carlos's
+ patch, since they depend on other earlier commits.
+
+From: Carlos O'Donell <carlos@redhat.com>
+Date: Wed, 19 Nov 2014 16:44:12 +0000 (-0500)
+Subject: CVE-2014-7817: wordexp fails to honour WRDE_NOCMD.
+X-Git-Url: https://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff_plain;h=33ceaf6187b31ea15284ac65131749e1cb68d2ae
+
+CVE-2014-7817: wordexp fails to honour WRDE_NOCMD.
+
+The function wordexp() fails to properly handle the WRDE_NOCMD
+flag when processing arithmetic inputs in the form of "$((... ``))"
+where "..." can be anything valid. The backticks in the arithmetic
+epxression are evaluated by in a shell even if WRDE_NOCMD forbade
+command substitution. This allows an attacker to attempt to pass
+dangerous commands via constructs of the above form, and bypass
+the WRDE_NOCMD flag. This patch fixes this by checking for WRDE_NOCMD
+in exec_comm(), the only place that can execute a shell. All other
+checks for WRDE_NOCMD are superfluous and removed.
+
+We expand the testsuite and add 3 new regression tests of roughly
+the same form but with a couple of nested levels.
+
+On top of the 3 new tests we add fork validation to the WRDE_NOCMD
+testing. If any forks are detected during the execution of a wordexp()
+call with WRDE_NOCMD, the test is marked as failed. This is slightly
+heuristic since vfork might be used in the future, but it provides a
+higher level of assurance that no shells were executed as part of
+command substitution with WRDE_NOCMD in effect. In addition it doesn't
+require libpthread or libdl, instead we use the public implementation
+namespace function __register_atfork (already part of the public ABI
+for libpthread).
+
+Tested on x86_64 with no regressions.
+
+(cherry picked from commit a39208bd7fb76c1b01c127b4c61f9bfd915bfe7c)
+---
+
+diff --git a/posix/wordexp-test.c b/posix/wordexp-test.c
+index 4957006..bdd65e4 100644
+--- a/posix/wordexp-test.c
++++ b/posix/wordexp-test.c
+@@ -27,6 +27,25 @@
+
+ #define IFS " \n\t"
+
++extern void *__dso_handle __attribute__ ((__weak__, __visibility__ ("hidden")));
++extern int __register_atfork (void (*) (void), void (*) (void), void (*) (void), void *);
++
++static int __app_register_atfork (void (*prepare) (void), void (*parent) (void), void (*child) (void))
++{
++ return __register_atfork (prepare, parent, child,
++ &__dso_handle == NULL ? NULL : __dso_handle);
++}
++
++/* Number of forks seen. */
++static int registered_forks;
++
++/* For each fork increment the fork count. */
++static void
++register_fork (void)
++{
++ registered_forks++;
++}
++
+ struct test_case_struct
+ {
+ int retval;
+@@ -206,6 +225,12 @@ struct test_case_struct
+ { WRDE_SYNTAX, NULL, "$((2+))", 0, 0, { NULL, }, IFS },
+ { WRDE_SYNTAX, NULL, "`", 0, 0, { NULL, }, IFS },
+ { WRDE_SYNTAX, NULL, "$((010+4+))", 0, 0, { NULL }, IFS },
++ /* Test for CVE-2014-7817. We test 3 combinations of command
++ substitution inside an arithmetic expression to make sure that
++ no commands are executed and error is returned. */
++ { WRDE_CMDSUB, NULL, "$((`echo 1`))", WRDE_NOCMD, 0, { NULL, }, IFS },
++ { WRDE_CMDSUB, NULL, "$((1+`echo 1`))", WRDE_NOCMD, 0, { NULL, }, IFS },
++ { WRDE_CMDSUB, NULL, "$((1+$((`echo 1`))))", WRDE_NOCMD, 0, { NULL, }, IFS },
+
+ { -1, NULL, NULL, 0, 0, { NULL, }, IFS },
+ };
+@@ -258,6 +283,15 @@ main (int argc, char *argv[])
+ return -1;
+ }
+
++ /* If we are not allowed to do command substitution, we install
++ fork handlers to verify that no forks happened. No forks should
++ happen at all if command substitution is disabled. */
++ if (__app_register_atfork (register_fork, NULL, NULL) != 0)
++ {
++ printf ("Failed to register fork handler.\n");
++ return -1;
++ }
++
+ for (test = 0; test_case[test].retval != -1; test++)
+ if (testit (&test_case[test]))
+ ++fail;
+@@ -367,6 +401,9 @@ testit (struct test_case_struct *tc)
+
+ printf ("Test %d (%s): ", ++tests, tc->words);
+
++ if (tc->flags & WRDE_NOCMD)
++ registered_forks = 0;
++
+ if (tc->flags & WRDE_APPEND)
+ {
+ /* initial wordexp() call, to be appended to */
+@@ -378,6 +415,13 @@ testit (struct test_case_struct *tc)
+ }
+ retval = wordexp (tc->words, &we, tc->flags);
+
++ if ((tc->flags & WRDE_NOCMD)
++ && (registered_forks > 0))
++ {
++ printf ("FAILED fork called for WRDE_NOCMD\n");
++ return 1;
++ }
++
+ if (tc->flags & WRDE_DOOFFS)
+ start_offs = sav_we.we_offs;
+
+diff --git a/posix/wordexp.c b/posix/wordexp.c
+index b6b65dd..26f3a26 100644
+--- a/posix/wordexp.c
++++ b/posix/wordexp.c
+@@ -893,6 +893,10 @@ exec_comm (char *comm, char **word, size_t *word_length, size_t *max_length,
+ pid_t pid;
+ int noexec = 0;
+
++ /* Do nothing if command substitution should not succeed. */
++ if (flags & WRDE_NOCMD)
++ return WRDE_CMDSUB;
++
+ /* Don't fork() unless necessary */
+ if (!comm || !*comm)
+ return 0;
+@@ -2082,9 +2086,6 @@ parse_dollars (char **word, size_t *word_length, size_t *max_length,
+ }
+ }
+
+- if (flags & WRDE_NOCMD)
+- return WRDE_CMDSUB;
+-
+ (*offset) += 2;
+ return parse_comm (word, word_length, max_length, words, offset, flags,
+ quoted? NULL : pwordexp, ifs, ifs_white);
+@@ -2196,9 +2197,6 @@ parse_dquote (char **word, size_t *word_length, size_t *max_length,
+ break;
+
+ case '`':
+- if (flags & WRDE_NOCMD)
+- return WRDE_CMDSUB;
+-
+ ++(*offset);
+ error = parse_backtick (word, word_length, max_length, words,
+ offset, flags, NULL, NULL, NULL);
+@@ -2357,12 +2355,6 @@ wordexp (const char *words, wordexp_t *pwordexp, int flags)
+ break;
+
+ case '`':
+- if (flags & WRDE_NOCMD)
+- {
+- error = WRDE_CMDSUB;
+- goto do_error;
+- }
+-
+ ++words_offset;
+ error = parse_backtick (&word, &word_length, &max_length, words,
+ &words_offset, flags, pwordexp, ifs,
diff --git a/gnu/packages/patches/glibc-mips-dangling-vfork-ref.patch b/gnu/packages/patches/glibc-mips-dangling-vfork-ref.patch
new file mode 100644
index 0000000000..852b6de669
--- /dev/null
+++ b/gnu/packages/patches/glibc-mips-dangling-vfork-ref.patch
@@ -0,0 +1,45 @@
+Avoid a dangling `vfork@GLIBC_2.0' reference on MIPS.
+
+Note: Here the ChangeLog and NEWS updates are removed from Maciej's
+ patch, since they depend on other earlier commits.
+
+From: Maciej W. Rozycki <macro@codesourcery.com>
+Date: Wed, 22 Oct 2014 14:20:37 +0000 (+0100)
+Subject: MIPS: Avoid a dangling `vfork@GLIBC_2.0' reference
+X-Git-Url: https://sourceware.org/git/?p=glibc.git;a=commitdiff_plain;h=c14e752fc73d34c75d4f84f37fea8e0b1734cf98
+
+MIPS: Avoid a dangling `vfork@GLIBC_2.0' reference
+
+This satisfies a symbol reference created with:
+
+ .symver __libc_vfork, vfork@GLIBC_2.0
+
+where `__libc_vfork' has not been defined or referenced. In this case
+the `vfork@GLIBC_2.0' reference is supposed to be discarded, however a
+bug present in GAS since forever causes an undefined symbol table entry
+to be created. This in turn triggers a problem in the linker that can
+manifest itself by link errors such as:
+
+ld: libpthread.so: invalid string offset 2765592330 >= 5154 for section `.dynstr'
+
+The GAS and linker bugs need to be resolved, but we can avoid them too
+by providing a `__libc_vfork' definition just like our other platforms.
+
+ [BZ #17485]
+ * sysdeps/unix/sysv/linux/mips/vfork.S (__libc_vfork): Define.
+
+(cherry picked from commit b5af9297d51a43f96c5be1bafab032184690dd6f)
+
+Conflicts:
+ NEWS
+---
+
+diff --git a/sysdeps/unix/sysv/linux/mips/vfork.S b/sysdeps/unix/sysv/linux/mips/vfork.S
+index 80c362d..2c1a747 100644
+--- a/sysdeps/unix/sysv/linux/mips/vfork.S
++++ b/sysdeps/unix/sysv/linux/mips/vfork.S
+@@ -108,3 +108,4 @@ L(error):
+
+ libc_hidden_def(__vfork)
+ weak_alias (__vfork, vfork)
++strong_alias (__vfork, __libc_vfork)
diff --git a/gnu/packages/patches/gmp-arm-asm-nothumb.patch b/gnu/packages/patches/gmp-arm-asm-nothumb.patch
new file mode 100644
index 0000000000..666cf58cf6
--- /dev/null
+++ b/gnu/packages/patches/gmp-arm-asm-nothumb.patch
@@ -0,0 +1,21 @@
+
+# HG changeset patch
+# User Torbjorn Granlund <tege@gmplib.org>
+# Date 1396602422 -7200
+# Node ID 676e2d0f0e4dd301a7066079d2c9326c25c34a40
+# Parent 0194a75b56b21a9196626430af86c5bd9110c42d
+Conditionalise ARM asm on !__thumb__.
+
+diff -r 0194a75b56b2 -r 676e2d0f0e4d mpn/generic/div_qr_1n_pi1.c
+--- a/mpn/generic/div_qr_1n_pi1.c Thu Apr 03 23:58:51 2014 +0200
++++ b/mpn/generic/div_qr_1n_pi1.c Fri Apr 04 11:07:02 2014 +0200
+@@ -130,7 +130,7 @@
+ "%2" ((UDItype)(a0)), "r" ((UDItype)(b0)) __CLOBBER_CC)
+ #endif
+
+-#if defined (__arm__) && W_TYPE_SIZE == 32
++#if defined (__arm__) && !defined (__thumb__) && W_TYPE_SIZE == 32
+ #define add_mssaaaa(m, sh, sl, ah, al, bh, bl) \
+ __asm__ ( "adds %2, %5, %6\n\t" \
+ "adcs %1, %3, %4\n\t" \
+
diff --git a/gnu/packages/patches/guile-arm-fixes.patch b/gnu/packages/patches/guile-arm-fixes.patch
new file mode 100644
index 0000000000..62bcf0fa7b
--- /dev/null
+++ b/gnu/packages/patches/guile-arm-fixes.patch
@@ -0,0 +1,203 @@
+Apply fixes for ARM to Guile.
+
+From df8c52e93dfa3965e4714275f4b8cea2c8e0170b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= <ludo@gnu.org>
+Date: Fri, 4 Jul 2014 15:35:06 +0200
+Subject: [PATCH] Recognize arm-* target triplets.
+
+Reported by Sylvain Beucler <beuc@beuc.net>.
+
+* module/system/base/target.scm (cpu-endianness): Add case where CPU is
+ "arm".
+* test-suite/tests/asm-to-bytecode.test ("cross-compilation")["arm-unknown-linux-androideabi"]:
+ New test.
+---
+ module/system/base/target.scm | 4 +++-
+ test-suite/tests/asm-to-bytecode.test | 5 ++++-
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/module/system/base/target.scm b/module/system/base/target.scm
+index c74ae67..cefa951 100644
+--- a/module/system/base/target.scm
++++ b/module/system/base/target.scm
+@@ -1,6 +1,6 @@
+ ;;; Compilation targets
+
+-;; Copyright (C) 2011, 2012, 2013 Free Software Foundation, Inc.
++;; Copyright (C) 2011, 2012, 2013, 2014 Free Software Foundation, Inc.
+
+ ;; This library is free software; you can redistribute it and/or
+ ;; modify it under the terms of the GNU Lesser General Public
+@@ -72,6 +72,8 @@
+ (endianness big))
+ ((string-match "^arm.*el" cpu)
+ (endianness little))
++ ((string=? "arm" cpu) ;ARMs are LE by default
++ (endianness little))
+ (else
+ (error "unknown CPU endianness" cpu)))))
+
+diff --git a/test-suite/tests/asm-to-bytecode.test b/test-suite/tests/asm-to-bytecode.test
+index 6d2f20e..62ea0ed 100644
+--- a/test-suite/tests/asm-to-bytecode.test
++++ b/test-suite/tests/asm-to-bytecode.test
+@@ -1,6 +1,6 @@
+ ;;;; Assembly to bytecode compilation -*- mode: scheme; coding: utf-8; -*-
+ ;;;;
+-;;;; Copyright (C) 2010, 2011, 2012, 2013 Free Software Foundation, Inc.
++;;;; Copyright (C) 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc.
+ ;;;;
+ ;;;; This library is free software; you can redistribute it and/or
+ ;;;; modify it under the terms of the GNU Lesser General Public
+@@ -205,6 +205,9 @@
+ (test-target "x86_64-unknown-linux-gnux32" ; x32 ABI (Debian tuplet)
+ (endianness little) 4)
+
++ (test-target "arm-unknown-linux-androideabi"
++ (endianness little) 4)
++
+ (pass-if-exception "unknown target"
+ exception:miscellaneous-error
+ (call-with-values (lambda ()
+--
+2.1.2
+
+From ffd3e55cfd12a3559621e3130d613d319243512d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= <ludo@gnu.org>
+Date: Fri, 4 Jul 2014 17:26:41 +0200
+Subject: [PATCH] Recognize more ARM targets.
+
+Suggested by Dale P. Smith.
+
+* module/system/base/target.scm (cpu-endianness): Add cases for
+ "arm.*eb", "^aarch64.*be", and "aarch64". Change "arm" case to
+ "arm.*".
+ (triplet-pointer-size): Allow underscore as in 'aarch64_be'.
+* test-suite/tests/asm-to-bytecode.test ("cross-compilation")["armeb-unknown-linux-gnu",
+ "aarch64-linux-gnu", "aarch64_be-linux-gnu"]: New tests.
+---
+ module/system/base/target.scm | 10 ++++++++--
+ test-suite/tests/asm-to-bytecode.test | 6 ++++++
+ 2 files changed, 14 insertions(+), 2 deletions(-)
+
+diff --git a/module/system/base/target.scm b/module/system/base/target.scm
+index cefa951..31e3fea 100644
+--- a/module/system/base/target.scm
++++ b/module/system/base/target.scm
+@@ -72,7 +72,13 @@
+ (endianness big))
+ ((string-match "^arm.*el" cpu)
+ (endianness little))
+- ((string=? "arm" cpu) ;ARMs are LE by default
++ ((string-match "^arm.*eb" cpu)
++ (endianness big))
++ ((string-prefix? "arm" cpu) ;ARMs are LE by default
++ (endianness little))
++ ((string-match "^aarch64.*be" cpu)
++ (endianness big))
++ ((string=? "aarch64" cpu)
+ (endianness little))
+ (else
+ (error "unknown CPU endianness" cpu)))))
+@@ -97,7 +103,7 @@
+ ((string-match "^x86_64-.*-gnux32" triplet) 4) ; x32
+
+ ((string-match "64$" cpu) 8)
+- ((string-match "64[lbe][lbe]$" cpu) 8)
++ ((string-match "64_?[lbe][lbe]$" cpu) 8)
+ ((member cpu '("sparc" "powerpc" "mips" "mipsel")) 4)
+ ((string-match "^arm.*" cpu) 4)
+ (else (error "unknown CPU word size" cpu)))))
+diff --git a/test-suite/tests/asm-to-bytecode.test b/test-suite/tests/asm-to-bytecode.test
+index 62ea0ed..8aeba84 100644
+--- a/test-suite/tests/asm-to-bytecode.test
++++ b/test-suite/tests/asm-to-bytecode.test
+@@ -207,6 +207,12 @@
+
+ (test-target "arm-unknown-linux-androideabi"
+ (endianness little) 4)
++ (test-target "armeb-unknown-linux-gnu"
++ (endianness big) 4)
++ (test-target "aarch64-linux-gnu"
++ (endianness little) 8)
++ (test-target "aarch64_be-linux-gnu"
++ (endianness big) 8)
+
+ (pass-if-exception "unknown target"
+ exception:miscellaneous-error
+--
+2.1.2
+
+From a85c78ea1393985fdb6e6678dea19135c553d341 Mon Sep 17 00:00:00 2001
+From: Mark H Weaver <mhw@netris.org>
+Date: Fri, 19 Sep 2014 21:18:09 -0400
+Subject: [PATCH] VM: ASM_MUL for ARM: Add earlyclobber constraint to the SMULL
+ outputs.
+
+Reported by Rob Browning <rlb@defaultvalue.org>.
+
+* libguile/vm-i-scheme.c (ASM_MUL)[ARM]: Add earlyclobber (&) constraint
+ to the SMULL output registers.
+---
+ libguile/vm-i-scheme.c | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/libguile/vm-i-scheme.c b/libguile/vm-i-scheme.c
+index 587aa95..162efab 100644
+--- a/libguile/vm-i-scheme.c
++++ b/libguile/vm-i-scheme.c
+@@ -1,5 +1,4 @@
+-/* Copyright (C) 2001, 2009, 2010, 2011, 2012, 2013,
+- * 2014 Free Software Foundation, Inc.
++/* Copyright (C) 2001, 2009-2014 Free Software Foundation, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+@@ -363,7 +362,7 @@ VM_DEFINE_FUNCTION (149, ge, "ge?", 2)
+ { \
+ scm_t_signed_bits rlo, rhi; \
+ asm ("smull %0, %1, %2, %3\n" \
+- : "=r" (rlo), "=r" (rhi) \
++ : "=&r" (rlo), "=&r" (rhi) \
+ : "r" (SCM_UNPACK (x) - scm_tc2_int), \
+ "r" (SCM_I_INUM (y))); \
+ if (SCM_LIKELY (SCM_SRS (rlo, 31) == rhi)) \
+--
+2.1.2
+
+From bed025bd2569b1c033f24d7d9e660e39ebf65cac Mon Sep 17 00:00:00 2001
+From: Mark H Weaver <mhw@netris.org>
+Date: Sat, 20 Sep 2014 03:59:51 -0400
+Subject: [PATCH] VM: Allow the C compiler to choose FP_REG on ARM.
+
+Reported by Rob Browning <rlb@defaultvalue.org>.
+
+* libguile/vm-engine.h (IP_REG)[__arm__]: Remove explicit register
+ choice ("r7") for FP_REG, which was reported to cause compilation
+ failures on ARM.
+---
+ libguile/vm-engine.h | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/libguile/vm-engine.h b/libguile/vm-engine.h
+index 46d4cff..e618be7 100644
+--- a/libguile/vm-engine.h
++++ b/libguile/vm-engine.h
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 2001, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
++/* Copyright (C) 2001, 2009-2012, 2014 Free Software Foundation, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+@@ -81,7 +81,7 @@
+ #ifdef __arm__
+ #define IP_REG asm("r9")
+ #define SP_REG asm("r8")
+-#define FP_REG asm("r7")
++#define FP_REG
+ #endif
+ #endif
+
+--
+2.1.2
+
diff --git a/gnu/packages/patches/libtool-2.4-skip-tests.patch b/gnu/packages/patches/libtool-2.4-skip-tests.patch
deleted file mode 100644
index 95747dfef0..0000000000
--- a/gnu/packages/patches/libtool-2.4-skip-tests.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-Because our GCC 'lib' spec automatically adds '-rpath' for each '-L'
-and a couple more '-rpath, there are two test failures:
-one in demo.test, and one in destdir.at. Disable these.
-
---- libtool-2.4.4/tests/testsuite 2014-11-29 17:43:11.000000000 +0100
-+++ libtool-2.4.4/tests/testsuite 2015-01-03 23:00:09.367775122 +0100
-@@ -9185,7 +9185,7 @@ read at_status <"$at_status_file"
- #AT_START_33
- at_fn_group_banner 33 'demo.at:548' \
- "hardcoding library path" " " 3
--at_xfail=no
-+at_xfail=yes
- test no = "$ACLOCAL" && at_xfail=yes
- test no = "$AUTOHEADER" && at_xfail=yes
- test no = "$AUTOMAKE" && at_xfail=yes
-@@ -27052,7 +27052,7 @@ read at_status <"$at_status_file"
- #AT_START_97
- at_fn_group_banner 97 'destdir.at:75' \
- "DESTDIR with in-package deplibs" " " 7
--at_xfail=no
-+at_xfail=yes
- eval `$LIBTOOL --config | $GREP '^fast_install='`
- case $fast_install in no) :;; *) false;; esac && at_xfail=yes
- (
diff --git a/gnu/packages/patches/libtool-skip-tests-for-mips.patch b/gnu/packages/patches/libtool-skip-tests-for-mips.patch
deleted file mode 100644
index 36587d23c2..0000000000
--- a/gnu/packages/patches/libtool-skip-tests-for-mips.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-TEMPORARY HACK: Disable a test that fails on MIPS.
-
---- libtool/Makefile.in.orig 2011-10-17 06:18:55.000000000 -0400
-+++ libtool/Makefile.in 2013-10-12 20:41:50.669067382 -0400
-@@ -890,7 +890,6 @@
- tests/demo-pic-make.test \
- tests/demo-pic-exec.test \
- tests/demo-nopic.test \
-- tests/demo-nopic-make.test \
- tests/demo-nopic-exec.test \
- tests/cdemo-shared.test \
- tests/cdemo-shared-make.test \
diff --git a/gnu/packages/patches/libtool-skip-tests.patch b/gnu/packages/patches/libtool-skip-tests.patch
index 6e12615d51..6082c3f1f1 100644
--- a/gnu/packages/patches/libtool-skip-tests.patch
+++ b/gnu/packages/patches/libtool-skip-tests.patch
@@ -1,37 +1,55 @@
-Because our GCC `lib' spec automatically adds `-rpath' for each `-L'
-and a couple more `-rpath, there are two test failures:
-demo-hardcode.test, and destdir.at. Disable these.
+Because our GCC 'lib' spec automatically adds '-rpath' for each '-L'
+and a couple more '-rpath, there are two test failures:
+one in demo.test, and one in destdir.at. Disable these.
---- libtool-2.4.2/Makefile.in 2011-10-17 12:18:55.000000000 +0200
-+++ libtool-2.4.2/Makefile.in 2012-09-13 23:50:37.000000000 +0200
-@@ -909,7 +908,7 @@ COMMON_TESTS = \
- # but they depend on the other tests being run beforehand.
- INTERACTIVE_TESTS = tests/demo-shared.test tests/demo-shared-make.test \
- tests/demo-shared-exec.test tests/demo-shared-inst.test \
-- tests/demo-hardcode.test tests/demo-relink.test \
-+ tests/demo-relink.test \
- tests/demo-noinst-link.test tests/demo-shared-unst.test \
- tests/depdemo-shared.test tests/depdemo-shared-make.test \
- tests/depdemo-shared-exec.test tests/depdemo-shared-inst.test \
-@@ -2580,8 +2579,7 @@ tests/cdemo-static-make.log: tests/cdemo
-
- tests/demo-shared-unst.log: tests/demo-noinst-link.log
- tests/demo-noinst-link.log: tests/demo-relink.log
--tests/demo-relink.log: tests/demo-hardcode.log
--tests/demo-hardcode.log: tests/demo-shared-inst.log
-+tests/demo-relink.log: tests/demo-shared-inst.log
- tests/demo-shared-inst.log: tests/demo-shared-exec.log
- tests/demo-shared-exec.log: tests/demo-shared-make.log
- tests/demo-shared-make.log: tests/demo-shared.log
+Also skip the nopic test on ARM and MIPS systems.
---- libtool-2.4.2/tests/testsuite 2011-10-17 12:19:52.000000000 +0200
-+++ libtool-2.4.2/tests/testsuite 2012-09-14 00:28:45.000000000 +0200
-@@ -14443,6 +14443,6 @@ read at_status <"$at_status_file"
- #AT_START_69
- at_fn_group_banner 69 'destdir.at:75' \
- "DESTDIR with in-package deplibs" " " 4
+--- libtool-2.4.4/tests/demo.at.orig 2014-11-19 07:28:51.000000000 -0500
++++ libtool-2.4.4/tests/demo.at 2015-01-07 17:30:46.482247718 -0500
+@@ -510,7 +510,7 @@
+ AT_SETUP([force non-PIC objects])
+
+ AT_CHECK([case $host in
+-hppa*|x86_64*|s390*)
++hppa*|x86_64*|s390*|arm*|mips*)
+ # These hosts cannot use non-PIC shared libs
+ exit 77 ;;
+ *-solaris*|*-sunos*)
+--- libtool-2.4.4/tests/testsuite.orig 2014-11-29 11:43:11.000000000 -0500
++++ libtool-2.4.4/tests/testsuite 2015-01-07 17:24:51.424672582 -0500
+@@ -8633,7 +8633,7 @@
+
+ { set +x
+ $as_echo "$at_srcdir/demo.at:535: case \$host in
+-hppa*|x86_64*|s390*)
++hppa*|x86_64*|s390*|arm*|mips*)
+ # These hosts cannot use non-PIC shared libs
+ exit 77 ;;
+ *-solaris*|*-sunos*)
+@@ -8658,7 +8658,7 @@
+ "
+ at_fn_check_prepare_notrace 'a `...` command substitution' "demo.at:535"
+ ( $at_check_trace; case $host in
+-hppa*|x86_64*|s390*)
++hppa*|x86_64*|s390*|arm*|mips*)
+ # These hosts cannot use non-PIC shared libs
+ exit 77 ;;
+ *-solaris*|*-sunos*)
+@@ -9185,7 +9185,7 @@ read at_status <"$at_status_file"
+ #AT_START_33
+ at_fn_group_banner 33 'demo.at:548' \
+ "hardcoding library path" " " 3
-at_xfail=no
+at_xfail=yes
- eval `$LIBTOOL --config | grep '^fast_install='`
+ test no = "$ACLOCAL" && at_xfail=yes
+ test no = "$AUTOHEADER" && at_xfail=yes
+ test no = "$AUTOMAKE" && at_xfail=yes
+@@ -27052,7 +27052,7 @@ read at_status <"$at_status_file"
+ #AT_START_97
+ at_fn_group_banner 97 'destdir.at:75' \
+ "DESTDIR with in-package deplibs" " " 7
+-at_xfail=no
++at_xfail=yes
+ eval `$LIBTOOL --config | $GREP '^fast_install='`
case $fast_install in no) :;; *) false;; esac && at_xfail=yes
-
+ (
diff --git a/gnu/packages/patches/m4-readlink-EINVAL.patch b/gnu/packages/patches/m4-readlink-EINVAL.patch
deleted file mode 100644
index dd371584a7..0000000000
--- a/gnu/packages/patches/m4-readlink-EINVAL.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-Newer Linux kernels would return EINVAL instead of ENOENT.
-The patch below, taken from Gnulib, allows the test to pass when
-these Linux versions are in use:
-https://lists.gnu.org/archive/html/bug-gnulib/2011-03/msg00308.html .
-
-diff --git a/tests/test-readlink.h b/tests/test-readlink.h
-index 08d5662..7247fc4 100644
---- a/tests/test-readlink.h
-+++ b/tests/test-readlink.h
-@@ -38,7 +38,7 @@ test_readlink (ssize_t (*func) (char const *, char *, size_t), bool print)
- ASSERT (errno == ENOENT);
- errno = 0;
- ASSERT (func ("", buf, sizeof buf) == -1);
-- ASSERT (errno == ENOENT);
-+ ASSERT (errno == ENOENT || errno == EINVAL);
- errno = 0;
- ASSERT (func (".", buf, sizeof buf) == -1);
- ASSERT (errno == EINVAL);
diff --git a/gnu/packages/patches/patchelf-page-size.patch b/gnu/packages/patches/patchelf-page-size.patch
index 2528b604e5..1c14047512 100644
--- a/gnu/packages/patches/patchelf-page-size.patch
+++ b/gnu/packages/patches/patchelf-page-size.patch
@@ -28,42 +28,43 @@ Patch by Mark H Weaver <mhw@netris.org>.
#endif
---- patchelf/tests/no-rpath.sh.orig 1969-12-31 19:00:01.000000000 -0500
-+++ patchelf/tests/no-rpath.sh 2014-02-16 20:44:12.036376953 -0500
-@@ -1,22 +1,22 @@
+--- patchelf/tests/no-rpath.sh.orig 2014-01-14 08:17:47.000000000 -0500
++++ patchelf/tests/no-rpath.sh 2015-01-06 18:31:53.418172797 -0500
+@@ -1,23 +1,23 @@
#! /bin/sh -e
+ SCRATCH=scratch/$(basename $0 .sh)
--rm -rf scratch
--mkdir -p scratch
+-rm -rf ${SCRATCH}
+-mkdir -p ${SCRATCH}
+if [ "$(uname -m)" = i686 -a "$(uname -s)" = Linux ]; then
-+ rm -rf scratch
-+ mkdir -p scratch
++ rm -rf ${SCRATCH}
++ mkdir -p ${SCRATCH}
--cp no-rpath scratch/
-+ cp no-rpath scratch/
+-cp ${srcdir}/no-rpath ${SCRATCH}/
++ cp ${srcdir}/no-rpath ${SCRATCH}/
--oldRPath=$(../src/patchelf --print-rpath scratch/no-rpath)
+-oldRPath=$(../src/patchelf --print-rpath ${SCRATCH}/no-rpath)
-if test -n "$oldRPath"; then exit 1; fi
-../src/patchelf \
- --set-interpreter "$(../src/patchelf --print-interpreter ../src/patchelf)" \
-- --set-rpath /foo:/bar:/xxxxxxxxxxxxxxx scratch/no-rpath
-+ oldRPath=$(../src/patchelf --print-rpath scratch/no-rpath)
+- --set-rpath /foo:/bar:/xxxxxxxxxxxxxxx ${SCRATCH}/no-rpath
++ oldRPath=$(../src/patchelf --print-rpath ${SCRATCH}/no-rpath)
+ if test -n "$oldRPath"; then exit 1; fi
+ ../src/patchelf \
+ --set-interpreter "$(../src/patchelf --print-interpreter ../src/patchelf)" \
-+ --set-rpath /foo:/bar:/xxxxxxxxxxxxxxx scratch/no-rpath
++ --set-rpath /foo:/bar:/xxxxxxxxxxxxxxx ${SCRATCH}/no-rpath
--newRPath=$(../src/patchelf --print-rpath scratch/no-rpath)
+-newRPath=$(../src/patchelf --print-rpath ${SCRATCH}/no-rpath)
-if ! echo "$newRPath" | grep -q '/foo:/bar'; then
- echo "incomplete RPATH"
- exit 1
-fi
-+ newRPath=$(../src/patchelf --print-rpath scratch/no-rpath)
++ newRPath=$(../src/patchelf --print-rpath ${SCRATCH}/no-rpath)
+ if ! echo "$newRPath" | grep -q '/foo:/bar'; then
+ echo "incomplete RPATH"
+ exit 1
+ fi
-if [ "$(uname -m)" = i686 -a "$(uname -s)" = Linux ]; then
- cd scratch && ./no-rpath
+ cd ${SCRATCH} && ./no-rpath
fi
diff --git a/gnu/packages/patches/patchelf-rework-for-arm.patch b/gnu/packages/patches/patchelf-rework-for-arm.patch
new file mode 100644
index 0000000000..6f4eb8f72b
--- /dev/null
+++ b/gnu/packages/patches/patchelf-rework-for-arm.patch
@@ -0,0 +1,473 @@
+Rework the growing algorithm in patchelf to support ARM systems.
+See <https://github.com/NixOS/patchelf/issues/8>.
+This patch copied from:
+<https://github.com/sriemer/patchelf/commit/0a96239cea6b97b9a0fff80da576e58ca2dfb2a2>
+
+From 0a96239cea6b97b9a0fff80da576e58ca2dfb2a2 Mon Sep 17 00:00:00 2001
+From: Sebastian Parschauer <s.parschauer@gmx.de>
+Date: Sat, 28 Jun 2014 01:24:57 +0200
+Subject: [PATCH] Rework the growing algorithm
+
+On ARM systems there is no space in virtual memory for another LOAD
+area in front of the code LOAD area. So insert data to its end
+instead. At this location there should be enough space in virtual
+memory due to alignment. We can extend it until the end of the
+alignment but the file shift may be greater as it must be aligned
+to the page size. Do the same for the data LOAD area.
+---
+ src/patchelf.cc | 357 ++++++++++++++++++++++----------------------------------
+ 1 file changed, 142 insertions(+), 215 deletions(-)
+
+diff --git a/src/patchelf.cc b/src/patchelf.cc
+index dcbfd38..4fce9e6 100644
+--- a/src/patchelf.cc
++++ b/src/patchelf.cc
+@@ -116,7 +116,11 @@ private:
+
+ void sortShdrs();
+
+- void shiftFile(unsigned int extraPages, Elf_Addr startPage);
++ void shiftFileSingle(size_t fileShift, Elf_Off insertOff);
++
++ void shiftFile(size_t neededCode, size_t neededData,
++ Elf_Off codeOff[], Elf_Off dataOff[],
++ Elf_Addr *codePage, Elf_Addr *dataPage);
+
+ string getSectionName(const Elf_Shdr & shdr);
+
+@@ -130,13 +134,11 @@ private:
+ unsigned int size);
+
+ void writeReplacedSections(Elf_Off & curOff,
+- Elf_Addr startAddr, Elf_Off startOffset);
++ Elf_Addr startAddr, Elf_Off startOffset, bool isData);
+
+ void rewriteHeaders(Elf_Addr phdrAddress);
+
+- void rewriteSectionsLibrary();
+-
+- void rewriteSectionsExecutable();
++ void rewriteSectionsBinary();
+
+ public:
+
+@@ -391,46 +393,119 @@ static unsigned int roundUp(unsigned int n, unsigned int m)
+
+
+ template<ElfFileParams>
+-void ElfFile<ElfFileParamNames>::shiftFile(unsigned int extraPages, Elf_Addr startPage)
++void ElfFile<ElfFileParamNames>::shiftFileSingle(size_t fileShift,
++ Elf_Off insertOff)
+ {
+- /* Move the entire contents of the file `extraPages' pages
+- further. */
+ unsigned int oldSize = fileSize;
+- unsigned int shift = extraPages * pageSize;
+- growFile(fileSize + extraPages * pageSize);
+- memmove(contents + extraPages * pageSize, contents, oldSize);
+- memset(contents + sizeof(Elf_Ehdr), 0, shift - sizeof(Elf_Ehdr));
++
++ /* Grow at the end */
++ growFile(fileSize + fileShift);
++
++ /* move the data from the insertion point
++ to the end and zero inserted space */
++ memmove(contents + insertOff + fileShift,
++ contents + insertOff, oldSize - insertOff);
++ memset(contents + insertOff, 0, fileShift);
+
+ /* Adjust the ELF header. */
+ wri(hdr->e_phoff, sizeof(Elf_Ehdr));
+- wri(hdr->e_shoff, rdi(hdr->e_shoff) + shift);
++ if (rdi(hdr->e_shoff) >= insertOff)
++ wri(hdr->e_shoff, rdi(hdr->e_shoff) + fileShift);
+
+ /* Update the offsets in the section headers. */
+- for (int i = 1; i < rdi(hdr->e_shnum); ++i)
+- wri(shdrs[i].sh_offset, rdi(shdrs[i].sh_offset) + shift);
++ for (int i = 1; i < rdi(hdr->e_shnum); ++i) {
++ if (rdi(shdrs[i].sh_offset) >= insertOff)
++ wri(shdrs[i].sh_offset, rdi(shdrs[i].sh_offset) + fileShift);
++ }
+
+ /* Update the offsets in the program headers. */
+ for (int i = 0; i < rdi(hdr->e_phnum); ++i) {
+- wri(phdrs[i].p_offset, rdi(phdrs[i].p_offset) + shift);
+- if (rdi(phdrs[i].p_align) != 0 &&
+- (rdi(phdrs[i].p_vaddr) - rdi(phdrs[i].p_offset)) % rdi(phdrs[i].p_align) != 0) {
+- debug("changing alignment of program header %d from %d to %d\n", i,
+- rdi(phdrs[i].p_align), pageSize);
+- wri(phdrs[i].p_align, pageSize);
++ if (rdi(phdrs[i].p_offset) >= insertOff)
++ wri(phdrs[i].p_offset, rdi(phdrs[i].p_offset) + fileShift);
++ /* Check for ELF load command alignment issue the same
++ way as glibc/elf/dl-load.c does. This gives us the
++ chance to run an interpreter explicitly. */
++ if (rdi(phdrs[i].p_type) == PT_LOAD && ((rdi(phdrs[i].p_vaddr) -
++ rdi(phdrs[i].p_offset)) & (rdi(phdrs[i].p_align) - 1)) != 0) {
++ debug("changing alignment of program header %d from %d to %d\n",
++ i, rdi(phdrs[i].p_align), pageSize);
++ wri(phdrs[i].p_align, pageSize);
+ }
+ }
++}
++
++template<ElfFileParams>
++void ElfFile<ElfFileParamNames>::shiftFile(size_t neededCode,
++ size_t neededData, Elf_Off codeOff[], Elf_Off dataOff[],
++ Elf_Addr *codePage, Elf_Addr *dataPage)
++{
++ /* Move some contents of the file further. The binary has one LOAD area
++ * for code and one for data. There is virtual memory space between
++ * these which we can use due to alignment.
++ */
++ unsigned int memShift = neededCode;
++ unsigned int fileShift = roundUp(neededCode, pageSize);
++ unsigned int maxMemShift = 0;
++
++ if (neededCode > 0) {
++ /* find the LOAD program header for code and extend it */
++ for (int i = 0; i < rdi(hdr->e_phnum); ++i) {
++ if (rdi(phdrs[i].p_type) == PT_LOAD &&
++ rdi(phdrs[i].p_flags) & PF_X) {
++ codeOff[1] = rdi(phdrs[i].p_filesz);
++ codeOff[0] = codeOff[1] + rdi(phdrs[i].p_offset);
++ maxMemShift = rdi(phdrs[i].p_memsz) % rdi(phdrs[i].p_align);
++ if (maxMemShift == 0)
++ continue;
++ maxMemShift = rdi(phdrs[i].p_align) - maxMemShift;
++ if (maxMemShift == 0 || memShift > maxMemShift)
++ continue;
++ *codePage = rdi(phdrs[i].p_vaddr);
++ wri(phdrs[i].p_filesz, rdi(phdrs[i].p_filesz) + memShift);
++ wri(phdrs[i].p_memsz, rdi(phdrs[i].p_memsz) + memShift);
++ break;
++ }
++ }
++ debug("codeOff: %#lx, memShift: %d, maxMemShift: %d, fileShift: %d\n",
++ codeOff[1], memShift, maxMemShift, fileShift);
++ if (codeOff[1] == 0 || maxMemShift == 0)
++ goto out;
++
++ shiftFileSingle(fileShift, codeOff[0]);
++ }
++
++ /* +++ Do the same for the data LOAD area +++ */
++ memShift = neededData;
++ fileShift = roundUp(neededData, pageSize);
++ maxMemShift = 0;
++ if (neededData > 0) {
++ /* find the LOAD program header for data and extend it */
++ for (int i = 0; i < rdi(hdr->e_phnum); ++i) {
++ if (rdi(phdrs[i].p_type) == PT_LOAD &&
++ rdi(phdrs[i].p_flags) & PF_W) {
++ dataOff[1] = rdi(phdrs[i].p_filesz);
++ dataOff[0] = dataOff[1] + rdi(phdrs[i].p_offset);
++ maxMemShift = rdi(phdrs[i].p_memsz) % rdi(phdrs[i].p_align);
++ if (maxMemShift == 0)
++ continue;
++ maxMemShift = rdi(phdrs[i].p_align) - maxMemShift;
++ if (maxMemShift == 0 || memShift > maxMemShift)
++ continue;
++ *dataPage = rdi(phdrs[i].p_vaddr);
++ wri(phdrs[i].p_filesz, rdi(phdrs[i].p_filesz) + memShift);
++ wri(phdrs[i].p_memsz, rdi(phdrs[i].p_memsz) + memShift);
++ break;
++ }
++ }
++ debug("dataOff: %#lx, memShift: %d, maxMemShift: %d, fileShift: %d\n",
++ dataOff[1], memShift, maxMemShift, fileShift);
++ if (dataOff[1] == 0 || maxMemShift == 0)
++ goto out;
+
+- /* Add a segment that maps the new program/section headers and
+- PT_INTERP segment into memory. Otherwise glibc will choke. */
+- phdrs.resize(rdi(hdr->e_phnum) + 1);
+- wri(hdr->e_phnum, rdi(hdr->e_phnum) + 1);
+- Elf_Phdr & phdr = phdrs[rdi(hdr->e_phnum) - 1];
+- wri(phdr.p_type, PT_LOAD);
+- wri(phdr.p_offset, 0);
+- wri(phdr.p_vaddr, wri(phdr.p_paddr, startPage));
+- wri(phdr.p_filesz, wri(phdr.p_memsz, shift));
+- wri(phdr.p_flags, PF_R | PF_W);
+- wri(phdr.p_align, pageSize);
++ shiftFileSingle(fileShift, dataOff[0]);
++ }
++out:
++ return;
+ }
+
+
+@@ -491,7 +566,7 @@ string & ElfFile<ElfFileParamNames>::replaceSection(const SectionName & sectionN
+
+ template<ElfFileParams>
+ void ElfFile<ElfFileParamNames>::writeReplacedSections(Elf_Off & curOff,
+- Elf_Addr startAddr, Elf_Off startOffset)
++ Elf_Addr startAddr, Elf_Off startOffset, bool isData = false)
+ {
+ /* Overwrite the old section contents with 'X's. Do this
+ *before* writing the new section contents (below) to prevent
+@@ -501,6 +576,9 @@ void ElfFile<ElfFileParamNames>::writeReplacedSections(Elf_Off & curOff,
+ {
+ string sectionName = i->first;
+ Elf_Shdr & shdr = findSection(sectionName);
++ if ((!isData && rdi(shdr.sh_flags) & SHF_WRITE) ||
++ (isData && ~(rdi(shdr.sh_flags)) & SHF_WRITE))
++ continue;
+ memset(contents + rdi(shdr.sh_offset), 'X', rdi(shdr.sh_size));
+ }
+
+@@ -509,6 +587,9 @@ void ElfFile<ElfFileParamNames>::writeReplacedSections(Elf_Off & curOff,
+ {
+ string sectionName = i->first;
+ Elf_Shdr & shdr = findSection(sectionName);
++ if ((!isData && rdi(shdr.sh_flags) & SHF_WRITE) ||
++ (isData && ~(rdi(shdr.sh_flags)) & SHF_WRITE))
++ continue;
+ debug("rewriting section `%s' from offset 0x%x (size %d) to offset 0x%x (size %d)\n",
+ sectionName.c_str(), rdi(shdr.sh_offset), rdi(shdr.sh_size), curOff, i->second.size());
+
+@@ -546,201 +627,47 @@ void ElfFile<ElfFileParamNames>::writeReplacedSections(Elf_Off & curOff,
+ curOff += roundUp(i->second.size(), sectionAlignment);
+ }
+
+- replacedSections.clear();
++ if (isData)
++ replacedSections.clear();
+ }
+
+
+ template<ElfFileParams>
+-void ElfFile<ElfFileParamNames>::rewriteSectionsLibrary()
++void ElfFile<ElfFileParamNames>::rewriteSectionsBinary()
+ {
+- /* For dynamic libraries, we just place the replacement sections
+- at the end of the file. They're mapped into memory by a
+- PT_LOAD segment located directly after the last virtual address
+- page of other segments. */
+- Elf_Addr startPage = 0;
+- for (unsigned int i = 0; i < phdrs.size(); ++i) {
+- Elf_Addr thisPage = roundUp(rdi(phdrs[i].p_vaddr) + rdi(phdrs[i].p_memsz), pageSize);
+- if (thisPage > startPage) startPage = thisPage;
+- }
+-
+- debug("last page is 0x%llx\n", (unsigned long long) startPage);
++ Elf_Off codeOff[2] = {0}, dataOff[2] = {0};
++ Elf_Addr codePage = 0, dataPage = 0;
++ size_t neededCode = 0, neededData = 0, oldCode = 0, oldData = 0;
++ Elf_Shdr shdr = findSection(".text");
++ Elf_Addr firstPage = rdi(shdr.sh_addr) - rdi(shdr.sh_offset);
+
++ debug("first page is 0x%llx\n", (unsigned long long) firstPage);
+
+- /* Compute the total space needed for the replaced sections and
+- the program headers. */
+- off_t neededSpace = (phdrs.size() + 1) * sizeof(Elf_Phdr);
++ /* Compute the total space needed for the replaced sections */
+ for (ReplacedSections::iterator i = replacedSections.begin();
+- i != replacedSections.end(); ++i)
+- neededSpace += roundUp(i->second.size(), sectionAlignment);
+- debug("needed space is %d\n", neededSpace);
+-
+-
+- size_t startOffset = roundUp(fileSize, pageSize);
+-
+- growFile(startOffset + neededSpace);
+-
+-
+- /* Even though this file is of type ET_DYN, it could actually be
+- an executable. For instance, Gold produces executables marked
+- ET_DYN. In that case we can still hit the kernel bug that
+- necessitated rewriteSectionsExecutable(). However, such
+- executables also tend to start at virtual address 0, so
+- rewriteSectionsExecutable() won't work because it doesn't have
+- any virtual address space to grow downwards into. As a
+- workaround, make sure that the virtual address of our new
+- PT_LOAD segment relative to the first PT_LOAD segment is equal
+- to its offset; otherwise we hit the kernel bug. This may
+- require creating a hole in the executable. The bigger the size
+- of the uninitialised data segment, the bigger the hole. */
+- if (isExecutable) {
+- if (startOffset >= startPage) {
+- debug("shifting new PT_LOAD segment by %d bytes to work around a Linux kernel bug\n", startOffset - startPage);
+- } else {
+- size_t hole = startPage - startOffset;
+- /* Print a warning, because the hole could be very big. */
+- fprintf(stderr, "warning: working around a Linux kernel bug by creating a hole of %zu bytes in ‘%s’\n", hole, fileName.c_str());
+- assert(hole % pageSize == 0);
+- /* !!! We could create an actual hole in the file here,
+- but it's probably not worth the effort. */
+- growFile(fileSize + hole);
+- startOffset += hole;
+- }
+- startPage = startOffset;
+- }
+-
+-
+- /* Add a segment that maps the replaced sections and program
+- headers into memory. */
+- phdrs.resize(rdi(hdr->e_phnum) + 1);
+- wri(hdr->e_phnum, rdi(hdr->e_phnum) + 1);
+- Elf_Phdr & phdr = phdrs[rdi(hdr->e_phnum) - 1];
+- wri(phdr.p_type, PT_LOAD);
+- wri(phdr.p_offset, startOffset);
+- wri(phdr.p_vaddr, wri(phdr.p_paddr, startPage));
+- wri(phdr.p_filesz, wri(phdr.p_memsz, neededSpace));
+- wri(phdr.p_flags, PF_R | PF_W);
+- wri(phdr.p_align, pageSize);
+-
+-
+- /* Write out the replaced sections. */
+- Elf_Off curOff = startOffset + phdrs.size() * sizeof(Elf_Phdr);
+- writeReplacedSections(curOff, startPage, startOffset);
+- assert((off_t) curOff == startOffset + neededSpace);
+-
+-
+- /* Move the program header to the start of the new area. */
+- wri(hdr->e_phoff, startOffset);
+-
+- rewriteHeaders(startPage);
+-}
+-
+-
+-template<ElfFileParams>
+-void ElfFile<ElfFileParamNames>::rewriteSectionsExecutable()
+-{
+- /* Sort the sections by offset, otherwise we won't correctly find
+- all the sections before the last replaced section. */
+- sortShdrs();
+-
+-
+- /* What is the index of the last replaced section? */
+- unsigned int lastReplaced = 0;
+- for (unsigned int i = 1; i < rdi(hdr->e_shnum); ++i) {
+- string sectionName = getSectionName(shdrs[i]);
+- if (replacedSections.find(sectionName) != replacedSections.end()) {
+- debug("using replaced section `%s'\n", sectionName.c_str());
+- lastReplaced = i;
+- }
+- }
+-
+- assert(lastReplaced != 0);
+-
+- debug("last replaced is %d\n", lastReplaced);
+-
+- /* Try to replace all sections before that, as far as possible.
+- Stop when we reach an irreplacable section (such as one of type
+- SHT_PROGBITS). These cannot be moved in virtual address space
+- since that would invalidate absolute references to them. */
+- assert(lastReplaced + 1 < shdrs.size()); /* !!! I'm lazy. */
+- size_t startOffset = rdi(shdrs[lastReplaced + 1].sh_offset);
+- Elf_Addr startAddr = rdi(shdrs[lastReplaced + 1].sh_addr);
+- string prevSection;
+- for (unsigned int i = 1; i <= lastReplaced; ++i) {
+- Elf_Shdr & shdr(shdrs[i]);
+- string sectionName = getSectionName(shdr);
+- debug("looking at section `%s'\n", sectionName.c_str());
+- /* !!! Why do we stop after a .dynstr section? I can't
+- remember! */
+- if ((rdi(shdr.sh_type) == SHT_PROGBITS && sectionName != ".interp")
+- || prevSection == ".dynstr")
+- {
+- startOffset = rdi(shdr.sh_offset);
+- startAddr = rdi(shdr.sh_addr);
+- lastReplaced = i - 1;
+- break;
++ i != replacedSections.end(); ++i) {
++ shdr = findSection(i->first);
++ if (rdi(shdr.sh_flags) & SHF_WRITE) {
++ oldData += rdi(shdr.sh_size);
++ neededData += roundUp(i->second.size(), sectionAlignment);
+ } else {
+- if (replacedSections.find(sectionName) == replacedSections.end()) {
+- debug("replacing section `%s' which is in the way\n", sectionName.c_str());
+- replaceSection(sectionName, rdi(shdr.sh_size));
+- }
++ oldCode += rdi(shdr.sh_size);
++ neededCode += roundUp(i->second.size(), sectionAlignment);
+ }
+- prevSection = sectionName;
+ }
+
+- debug("first reserved offset/addr is 0x%x/0x%llx\n",
+- startOffset, (unsigned long long) startAddr);
+-
+- assert(startAddr % pageSize == startOffset % pageSize);
+- Elf_Addr firstPage = startAddr - startOffset;
+- debug("first page is 0x%llx\n", (unsigned long long) firstPage);
+-
+- /* Right now we assume that the section headers are somewhere near
+- the end, which appears to be the case most of the time.
+- Therefore they're not accidentally overwritten by the replaced
+- sections. !!! Fix this. */
+- assert((off_t) rdi(hdr->e_shoff) >= startOffset);
+-
+-
+- /* Compute the total space needed for the replaced sections, the
+- ELF header, and the program headers. */
+- size_t neededSpace = sizeof(Elf_Ehdr) + phdrs.size() * sizeof(Elf_Phdr);
+- for (ReplacedSections::iterator i = replacedSections.begin();
+- i != replacedSections.end(); ++i)
+- neededSpace += roundUp(i->second.size(), sectionAlignment);
+-
+- debug("needed space is %d\n", neededSpace);
+-
+- /* If we need more space at the start of the file, then grow the
+- file by the minimum number of pages and adjust internal
+- offsets. */
+- if (neededSpace > startOffset) {
+-
+- /* We also need an additional program header, so adjust for that. */
+- neededSpace += sizeof(Elf_Phdr);
+- debug("needed space is %d\n", neededSpace);
+-
+- unsigned int neededPages = roundUp(neededSpace - startOffset, pageSize) / pageSize;
+- debug("needed pages is %d\n", neededPages);
+- if (neededPages * pageSize > firstPage)
+- error("virtual address space underrun!");
+-
+- firstPage -= neededPages * pageSize;
+- startOffset += neededPages * pageSize;
+-
+- shiftFile(neededPages, firstPage);
+- }
+-
+-
+- /* Clear out the free space. */
+- Elf_Off curOff = sizeof(Elf_Ehdr) + phdrs.size() * sizeof(Elf_Phdr);
+- debug("clearing first %d bytes\n", startOffset - curOff);
+- memset(contents + curOff, 0, startOffset - curOff);
++ debug("needed space is C: %d, D: %d\n", neededCode, neededData);
+
++ /* If we need more space within the file, then grow the
++ file and adjust internal offsets. */
++ shiftFile(neededCode, neededData, codeOff, dataOff, &codePage,
++ &dataPage);
++ assert(codeOff[0] > 0);
+
+ /* Write out the replaced sections. */
+- writeReplacedSections(curOff, firstPage, 0);
+- assert((off_t) curOff == neededSpace);
+-
++ debug("codePage: %#lx, dataPage: %#lx\n", codePage, dataPage);
++ writeReplacedSections(codeOff[0], codePage + codeOff[1], codeOff[0]);
++ writeReplacedSections(dataOff[0], dataPage + dataOff[1], dataOff[0], true);
+
+ rewriteHeaders(firstPage + rdi(hdr->e_phoff));
+ }
+@@ -758,10 +685,10 @@ void ElfFile<ElfFileParamNames>::rewriteSections()
+
+ if (rdi(hdr->e_type) == ET_DYN) {
+ debug("this is a dynamic library\n");
+- rewriteSectionsLibrary();
++ rewriteSectionsBinary();
+ } else if (rdi(hdr->e_type) == ET_EXEC) {
+ debug("this is an executable\n");
+- rewriteSectionsExecutable();
++ rewriteSectionsBinary();
+ } else error("unknown ELF type");
+ }
+
+--
+2.1.2
+
diff --git a/gnu/packages/patches/sqlite-large-page-size-fix.patch b/gnu/packages/patches/sqlite-large-page-size-fix.patch
deleted file mode 100644
index c561fa20a2..0000000000
--- a/gnu/packages/patches/sqlite-large-page-size-fix.patch
+++ /dev/null
@@ -1,180 +0,0 @@
-Add an experimental fix to avoid attempting to mmap memory from an
-offset that is not a multiple of the system page size on systems with
-page sizes larger than 32KB.
-
-Patch by Dan Kennedy <danielk1977@gmail.com>.
-
---- sqlite-autoconf/sqlite3.c.orig 2014-03-22 23:44:47.055908203 -0400
-+++ sqlite-autoconf/sqlite3.c 2014-03-22 23:44:06.716552734 -0400
-@@ -24010,6 +24010,7 @@
-
- /* Forward reference */
- static int openDirectory(const char*, int*);
-+static int unixGetpagesize(void);
-
- /*
- ** Many system calls are accessed through pointer-to-functions so that
-@@ -24133,6 +24134,9 @@
- #define osMremap ((void*(*)(void*,size_t,size_t,int,...))aSyscall[23].pCurrent)
- #endif
-
-+ { "getpagesize", (sqlite3_syscall_ptr)unixGetpagesize, 0 },
-+#define osGetpagesize ((int(*)(void))aSyscall[24].pCurrent)
-+
- }; /* End of the overrideable system calls */
-
- /*
-@@ -27792,6 +27796,36 @@
- return rc;
- }
-
-+/*
-+** Return the system page size.
-+**
-+** This function should not be called directly by other code in this file.
-+** Instead, it should be called via macro osGetpagesize().
-+*/
-+static int unixGetpagesize(void){
-+#if defined(_BSD_SOURCE)
-+ return getpagesize();
-+#else
-+ return (int)sysconf(_SC_PAGESIZE);
-+#endif
-+}
-+
-+/*
-+** Return the minimum number of 32KB shm regions that should be mapped at
-+** a time, assuming that each mapping must be an integer multiple of the
-+** current system page-size.
-+**
-+** Usually, this is 1. The exception seems to be systems that are configured
-+** to use 64KB pages - in this case each mapping must cover at least two
-+** shm regions.
-+*/
-+static int unixShmRegionPerMap(void){
-+ int shmsz = 32*1024; /* SHM region size */
-+ int pgsz = osGetpagesize(); /* System page size */
-+ assert( ((pgsz-1)&pgsz)==0 ); /* Page size must be a power of 2 */
-+ if( pgsz<shmsz ) return 1;
-+ return pgsz/shmsz;
-+}
-
- /*
- ** Purge the unixShmNodeList list of all entries with unixShmNode.nRef==0.
-@@ -27803,10 +27837,11 @@
- unixShmNode *p = pFd->pInode->pShmNode;
- assert( unixMutexHeld() );
- if( p && p->nRef==0 ){
-+ int nShmPerMap = unixShmRegionPerMap();
- int i;
- assert( p->pInode==pFd->pInode );
- sqlite3_mutex_free(p->mutex);
-- for(i=0; i<p->nRegion; i++){
-+ for(i=0; i<p->nRegion; i+=nShmPerMap){
- if( p->h>=0 ){
- osMunmap(p->apRegion[i], p->szRegion);
- }else{
-@@ -28013,6 +28048,8 @@
- unixShm *p;
- unixShmNode *pShmNode;
- int rc = SQLITE_OK;
-+ int nShmPerMap = unixShmRegionPerMap();
-+ int nReqRegion;
-
- /* If the shared-memory file has not yet been opened, open it now. */
- if( pDbFd->pShm==0 ){
-@@ -28028,9 +28065,12 @@
- assert( pShmNode->h>=0 || pDbFd->pInode->bProcessLock==1 );
- assert( pShmNode->h<0 || pDbFd->pInode->bProcessLock==0 );
-
-- if( pShmNode->nRegion<=iRegion ){
-+ /* Minimum number of regions required to be mapped. */
-+ nReqRegion = ((iRegion+nShmPerMap) / nShmPerMap) * nShmPerMap;
-+
-+ if( pShmNode->nRegion<nReqRegion ){
- char **apNew; /* New apRegion[] array */
-- int nByte = (iRegion+1)*szRegion; /* Minimum required file size */
-+ int nByte = nReqRegion*szRegion; /* Minimum required file size */
- struct stat sStat; /* Used by fstat() */
-
- pShmNode->szRegion = szRegion;
-@@ -28079,17 +28119,19 @@
-
- /* Map the requested memory region into this processes address space. */
- apNew = (char **)sqlite3_realloc(
-- pShmNode->apRegion, (iRegion+1)*sizeof(char *)
-+ pShmNode->apRegion, nReqRegion*sizeof(char *)
- );
- if( !apNew ){
- rc = SQLITE_IOERR_NOMEM;
- goto shmpage_out;
- }
- pShmNode->apRegion = apNew;
-- while(pShmNode->nRegion<=iRegion){
-+ while( pShmNode->nRegion<nReqRegion ){
-+ int nMap = szRegion*nShmPerMap;
-+ int i;
- void *pMem;
- if( pShmNode->h>=0 ){
-- pMem = osMmap(0, szRegion,
-+ pMem = osMmap(0, nMap,
- pShmNode->isReadonly ? PROT_READ : PROT_READ|PROT_WRITE,
- MAP_SHARED, pShmNode->h, szRegion*(i64)pShmNode->nRegion
- );
-@@ -28105,8 +28147,11 @@
- }
- memset(pMem, 0, szRegion);
- }
-- pShmNode->apRegion[pShmNode->nRegion] = pMem;
-- pShmNode->nRegion++;
-+
-+ for(i=0; i<nShmPerMap; i++){
-+ pShmNode->apRegion[pShmNode->nRegion+i] = &((char*)pMem)[szRegion*i];
-+ }
-+ pShmNode->nRegion += nShmPerMap;
- }
- }
-
-@@ -28321,19 +28366,6 @@
- }
-
- /*
--** Return the system page size.
--*/
--static int unixGetPagesize(void){
--#if HAVE_MREMAP
-- return 512;
--#elif defined(_BSD_SOURCE)
-- return getpagesize();
--#else
-- return (int)sysconf(_SC_PAGESIZE);
--#endif
--}
--
--/*
- ** Attempt to set the size of the memory mapping maintained by file
- ** descriptor pFd to nNew bytes. Any existing mapping is discarded.
- **
-@@ -28369,8 +28401,12 @@
- if( (pFd->ctrlFlags & UNIXFILE_RDONLY)==0 ) flags |= PROT_WRITE;
-
- if( pOrig ){
-- const int szSyspage = unixGetPagesize();
-+#if HAVE_MREMAP
-+ i64 nReuse = pFd->mmapSize;
-+#else
-+ const int szSyspage = osGetpagesize();
- i64 nReuse = (pFd->mmapSize & ~(szSyspage-1));
-+#endif
- u8 *pReq = &pOrig[nReuse];
-
- /* Unmap any pages of the existing mapping that cannot be reused. */
-@@ -31116,7 +31152,7 @@
-
- /* Double-check that the aSyscall[] array has been constructed
- ** correctly. See ticket [bb3a86e890c8e96ab] */
-- assert( ArraySize(aSyscall)==24 );
-+ assert( ArraySize(aSyscall)==25 );
-
- /* Register all VFSes defined in the aVfs[] array */
- for(i=0; i<(sizeof(aVfs)/sizeof(sqlite3_vfs)); i++){
diff --git a/gnu/packages/patchutils.scm b/gnu/packages/patchutils.scm
index 3dbf72435e..48f4d29584 100644
--- a/gnu/packages/patchutils.scm
+++ b/gnu/packages/patchutils.scm
@@ -96,7 +96,7 @@ listing the files modified by a patch.")
(build-system gnu-build-system)
(inputs `(("perl" ,perl)
("less" ,less)
- ("file" ,file-5.20) ;work around CVE-2014-3710
+ ("file" ,file)
("ed" ,ed)))
(arguments
'(#:parallel-tests? #f
diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm
index 03cad3e25f..699fe751de 100644
--- a/gnu/packages/perl.scm
+++ b/gnu/packages/perl.scm
@@ -66,7 +66,7 @@
%standard-phases)))
(native-search-paths (list (search-path-specification
(variable "PERL5LIB")
- (directories '("lib/perl5/site_perl")))))
+ (files '("lib/perl5/site_perl")))))
(synopsis "Implementation of the Perl programming language")
(description
"Perl 5 is a highly capable, feature-rich programming language with over
diff --git a/gnu/packages/photo.scm b/gnu/packages/photo.scm
index 4f1787fe75..164f6e27ea 100644
--- a/gnu/packages/photo.scm
+++ b/gnu/packages/photo.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -64,7 +64,7 @@ data as produced by digital cameras.")
(native-inputs `(("pkg-config" ,pkg-config)))
(inputs
`(;; ("libjpeg-turbo" ,libjpeg-turbo)
- ("libtool" ,libtool)
+ ("libltdl" ,libltdl)
("libusb" ,libusb)))
(propagated-inputs
`(;; The .pc refers to libexif.
diff --git a/gnu/packages/pkg-config.scm b/gnu/packages/pkg-config.scm
index 62b0d5f65c..dd5120c474 100644
--- a/gnu/packages/pkg-config.scm
+++ b/gnu/packages/pkg-config.scm
@@ -30,7 +30,7 @@
(define-public %pkg-config
(package
(name "pkg-config")
- (version "0.27.1")
+ (version "0.28")
(source (origin
(method url-fetch)
(uri (string-append
@@ -38,14 +38,13 @@
version ".tar.gz"))
(sha256
(base32
- "05wc5nwkqz7saj2v33ydmz1y6jdg659dll4jjh91n41m63gx0qsg"))))
+ "0igqq5m204w71m11y0nipbdf5apx87hwfll6axs12hn4dqfb6vkb"))))
(build-system gnu-build-system)
(arguments `(#:configure-flags '("--with-internal-glib")))
(native-search-paths
(list (search-path-specification
(variable "PKG_CONFIG_PATH")
- (directories '("lib/pkgconfig" "lib64/pkgconfig"
- "share/pkgconfig")))))
+ (files '("lib/pkgconfig" "lib64/pkgconfig" "share/pkgconfig")))))
(home-page "http://www.freedesktop.org/wiki/Software/pkg-config")
(license gpl2+)
(synopsis "Helper tool used when compiling applications and libraries")
diff --git a/gnu/packages/pth.scm b/gnu/packages/pth.scm
index ba5fb8216d..50385b14f8 100644
--- a/gnu/packages/pth.scm
+++ b/gnu/packages/pth.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2015 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
@@ -37,12 +37,7 @@
"0ckjqw5kz5m30srqi87idj7xhpw6bpki43mj07bazjm2qmh3cdbj"))))
(build-system gnu-build-system)
(arguments
- '(#:parallel-build? #f
- ;; By default, man pages are put in PREFIX/man,
- ;; but we want them in PREFIX/share/man.
- #:configure-flags (list (string-append "--mandir="
- (assoc-ref %outputs "out")
- "/share/man"))))
+ '(#:parallel-build? #f))
(home-page "http://www.gnu.org/software/pth")
(synopsis "Portable thread library")
(description
diff --git a/gnu/packages/pulseaudio.scm b/gnu/packages/pulseaudio.scm
index 61e0d029f5..1e9fe41b47 100644
--- a/gnu/packages/pulseaudio.scm
+++ b/gnu/packages/pulseaudio.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
@@ -24,7 +24,7 @@
#:use-module (guix build-system gnu)
#:use-module (gnu packages)
#:use-module (gnu packages algebra)
- #:use-module ((gnu packages autotools) #:select (libtool))
+ #:use-module ((gnu packages autotools) #:select (libltdl))
#:use-module (gnu packages avahi)
#:use-module (gnu packages check)
#:use-module (gnu packages gdbm)
@@ -157,7 +157,7 @@ rates. ")
("intltool" ,intltool)
("pkg-config" ,pkg-config)
("m4" ,m4)
- ("libtool" ,libtool)
+ ("libltdl" ,libltdl)
("fftwf" ,fftwf)
("avahi" ,avahi)
("check" ,check)))
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index 162acec639..c2eab7dc6d 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -198,7 +198,7 @@
(native-search-paths
(list (search-path-specification
(variable "PYTHONPATH")
- (directories '("lib/python2.7/site-packages")))))
+ (files '("lib/python2.7/site-packages")))))
(home-page "http://python.org")
(synopsis
"High-level, dynamically-typed programming language")
@@ -237,7 +237,7 @@ data types.")
(native-search-paths
(list (search-path-specification
(variable "PYTHONPATH")
- (directories '("lib/python3.3/site-packages")))))))
+ (files '("lib/python3.3/site-packages")))))))
(define-public python-wrapper
(package (inherit python)
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index 4b6665cb6b..f8276db698 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -77,10 +77,9 @@
(native-search-paths
(list (search-path-specification
(variable "GEM_PATH")
- (directories
- (list (string-append "lib/ruby/gems/"
- (version-major+minor version)
- ".0"))))))
+ (files (list (string-append "lib/ruby/gems/"
+ (version-major+minor version)
+ ".0"))))))
(synopsis "Programming language interpreter")
(description "Ruby is a dynamic object-oriented programming language with
a focus on simplicity and productivity.")
diff --git a/gnu/packages/ssh.scm b/gnu/packages/ssh.scm
index c39d5f82be..79e8077cdf 100644
--- a/gnu/packages/ssh.scm
+++ b/gnu/packages/ssh.scm
@@ -226,7 +226,7 @@ Additionally, various channel-specific options can be negotiated.")
#:parallel-tests? #f))
(native-inputs `(("autoconf" ,autoconf)
("automake" ,automake)
- ("libtool" ,libtool "bin")
+ ("libtool" ,libtool)
("texinfo" ,texinfo)
("pkg-config" ,pkg-config)
("which" ,which)))
diff --git a/gnu/packages/swig.scm b/gnu/packages/swig.scm
index ce91df5eda..a978dec681 100644
--- a/gnu/packages/swig.scm
+++ b/gnu/packages/swig.scm
@@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -53,6 +54,18 @@
;; The python part probably never worked and does not seem to
;; be needed for currently dependent packages.
;; ("python" ,python-wrapper)))
+ (arguments
+ `(#:phases
+ (alist-cons-before
+ 'check 'install-locales
+ (lambda _
+ ;; One of the tests requires the availability of a UTF-8
+ ;; locale and otherwise fails.
+ (setenv "LOCPATH" (getcwd))
+ (zero? (system* "localedef" "--no-archive"
+ "--prefix" (getcwd) "-i" "en_US"
+ "-f" "UTF-8" "./en_US.utf8")))
+ %standard-phases)))
(home-page "http://swig.org/")
(synopsis
"Interface compiler that connects C/C++ code to higher-level languages")
diff --git a/gnu/packages/tcl.scm b/gnu/packages/tcl.scm
index d988249c4c..67510eb41f 100644
--- a/gnu/packages/tcl.scm
+++ b/gnu/packages/tcl.scm
@@ -1,6 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
;;;
;;; This file is part of GNU Guix.
@@ -63,8 +63,10 @@
"tclsh")))))
%standard-phases))
- ;; By default, man pages are put in PREFIX/man,
- ;; but we want them in PREFIX/share/man.
+ ;; By default, man pages are put in PREFIX/man, but we want them in
+ ;; PREFIX/share/man. The 'validate-documentation-location' phase is
+ ;; not able to fix this up because the default install populates both
+ ;; PREFIX/man and PREFIX/share/man.
#:configure-flags (list (string-append "--mandir="
(assoc-ref %outputs "out")
"/share/man"))
diff --git a/gnu/packages/texlive.scm b/gnu/packages/texlive.scm
index f14bbb8c06..e3321401c3 100644
--- a/gnu/packages/texlive.scm
+++ b/gnu/packages/texlive.scm
@@ -1,6 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -123,7 +124,7 @@
;; Disable tests on mips64 to cope with a failure of luajiterr.test.
;; XXX FIXME fix luajit properly on mips64.
- #:tests? ,(not (equal? "mips64el-linux" (or (%current-target-system)
+ #:tests? ,(not (string-prefix? "mips64" (or (%current-target-system)
(%current-system))))
#:phases
(alist-cons-after
diff --git a/gnu/packages/tre.scm b/gnu/packages/tre.scm
index 33d2cff093..1a1aa02ec9 100644
--- a/gnu/packages/tre.scm
+++ b/gnu/packages/tre.scm
@@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright 2014 John Darrington
+;;; Copyright © 2014 John Darrington
+;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -37,6 +38,17 @@
(base32 "0n36cgqys59r2gmb7jzbqiwsy790v8nbxk82d2n2saz0rp145ild"))))
(build-system gnu-build-system)
+ (arguments
+ `(#:phases (alist-cons-before
+ 'check 'install-locales
+ (lambda _
+ ;; The tests require the availability of the
+ ;; 'en_US.ISO-8859-1' locale.
+ (setenv "LOCPATH" (getcwd))
+ (zero? (system* "localedef" "--no-archive"
+ "--prefix" (getcwd) "-i" "en_US"
+ "-f" "ISO-8859-1" "./en_US.ISO-8859-1")))
+ %standard-phases)))
(synopsis "Approximate regex matching library and agrep utility")
(description "Superset of the POSIX regex API, enabling approximate
matching. Also ships a version of the agrep utility which behaves similar to
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index 53e3be7ba9..59ca166416 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -696,7 +696,7 @@ accessed and migrated on modern systems.")
(inputs
`(("e2fsprogs" ,e2fsprogs)
("curl" ,curl)
- ("file" ,file-5.20) ;work around CVE-2014-3710
+ ("file" ,file)
("libxml2" ,libxml2)
("zlib" ,zlib)
("gettext" ,gnu-gettext)))
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index 1ff3dfb5a5..554f2a3ae4 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -1,7 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2013 Aljosha Papsch <misc@rpapsch.de>
-;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
@@ -231,8 +231,7 @@ for efficient socket-like bidirectional reliable communication channels.")
("automake" ,automake)
("gettext" ,gnu-gettext)
("which" ,which)
- ("libtool" ,libtool)
- ("libtool" ,libtool "bin")))
+ ("libtool" ,libtool)))
(arguments
`(#:phases (alist-cons-before
'bootstrap 'fix-autogen-shebang
@@ -644,16 +643,7 @@ help you implement simple HTTP servers.")
;; Uncommenting the next two lines may assist in debugging
;; (substitute* "docs/man5/Makefile" (("a2x") "a2x -v"))
;; (setenv "XML_DEBUG_CATALOG" "1")
-
- (setenv "XML_CATALOG_FILES"
- (string-append
- (assoc-ref inputs "docbook-xsl")
- "/xml/xsl/docbook-xsl-1.78.1/catalog.xml"
- ;; Contrary to the documentation, the file names must
- ;; be separated by a space, not a colon.
- " "
- (assoc-ref inputs "docbook-xml")
- "/xml/dtd/docbook/catalog.xml")))
+ #t)
%standard-phases)))
;; All of the below are used to generate the documentation
;; (Should they be propagated inputs of asciidoc ??)
diff --git a/gnu/packages/weechat.scm b/gnu/packages/weechat.scm
index 5555601d47..a2e53481c3 100644
--- a/gnu/packages/weechat.scm
+++ b/gnu/packages/weechat.scm
@@ -58,12 +58,12 @@
("pkg-config" ,pkg-config)
("file" ,file)
("autogen" ,autogen)
- ("automake" ,automake)))
+ ("automake" ,automake)
+ ("libtool" ,libtool)))
(inputs `(("ncurses" ,ncurses)
("diffutils" ,diffutils)
("gettext" ,gnu-gettext)
- ("libtool" ,libtool "bin")
- ("libtool" ,libtool "out")
+ ("libltdl" ,libltdl)
("libgcrypt" ,libgcrypt "out")
("zlib" ,zlib)
("aspell" ,aspell)
diff --git a/gnu/packages/xfce.scm b/gnu/packages/xfce.scm
index 2b15c3e35c..17b2b4d9f7 100644
--- a/gnu/packages/xfce.scm
+++ b/gnu/packages/xfce.scm
@@ -267,7 +267,7 @@ management D-Bus specification.")
(native-search-paths
(list (search-path-specification
(variable "X_XFCE4_LIB_DIRS")
- (directories '("lib/xfce4")))))
+ (files '("lib/xfce4")))))
(home-page "http://www.xfce.org/")
(synopsis "Xfce desktop panel")
(description
diff --git a/gnu/packages/xiph.scm b/gnu/packages/xiph.scm
index 77b732ba35..e6700c4c27 100644
--- a/gnu/packages/xiph.scm
+++ b/gnu/packages/xiph.scm
@@ -202,12 +202,7 @@ OpenBSD's sndio.")
"1p0hh190kqvpkbk1bbajd81jfbmkyl4fn2i7pggk2zppq6m68bgs"))))
(build-system gnu-build-system)
(arguments
- `(#:parallel-tests? #f
- ;; By default, man pages are put in PREFIX/man,
- ;; but we want them in PREFIX/share/man.
- #:configure-flags (list (string-append "--mandir="
- (assoc-ref %outputs "out")
- "/share/man"))))
+ `(#:parallel-tests? #f))
;; FIXME: configure also looks for xmms, input could be added once it exists
(inputs `(("libogg" ,libogg)))
(synopsis "Free lossless audio codec")
diff --git a/gnu/packages/xml.scm b/gnu/packages/xml.scm
index 76366db58c..f2b3baa418 100644
--- a/gnu/packages/xml.scm
+++ b/gnu/packages/xml.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
;;;
;;; This file is part of GNU Guix.
@@ -68,6 +68,18 @@ things the parser might find in the XML document (like start tags).")
(inputs `(("zlib" ,zlib)))
(native-inputs `(("perl" ,perl)
("python" ,python-2))) ; incompatible with Python 3 (print syntax)
+
+
+ ;; $XML_CATALOG_FILES lists 'catalog.xml' files found in under the 'xml'
+ ;; sub-directory of any given package.
+ (native-search-paths (list (search-path-specification
+ (variable "XML_CATALOG_FILES")
+ (separator " ")
+ (files '("xml"))
+ (file-pattern "^catalog\\.xml$")
+ (file-type 'regular))))
+ (search-paths native-search-paths)
+
(arguments
`(#:phases
(alist-replace
diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm
index e898c1c935..ff4488b8ef 100644
--- a/gnu/packages/xorg.scm
+++ b/gnu/packages/xorg.scm
@@ -4400,7 +4400,7 @@ kernel mode setting (KMS).")
(define-public xorg-server
(package
(name "xorg-server")
- (version "1.16.2.901")
+ (version "1.16.3")
(source
(origin
(method url-fetch)
@@ -4409,7 +4409,7 @@ kernel mode setting (KMS).")
name "-" version ".tar.bz2"))
(sha256
(base32
- "19jb8v26wc332ramwjdg5vjh3s36kr7n46s6fdfaxrj1wif5m27g"))))
+ "1yxhc3aw2cadf77w48d2glc5j6w6hairiskfiys7h45g70r483sy"))))
(build-system gnu-build-system)
(propagated-inputs
`(("dri2proto" ,dri2proto)
diff --git a/guix/build/gnu-build-system.scm b/guix/build/gnu-build-system.scm
index 17fa7afd8d..2880168273 100644
--- a/guix/build/gnu-build-system.scm
+++ b/guix/build/gnu-build-system.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -20,6 +20,7 @@
#:use-module (guix build utils)
#:use-module (ice-9 ftw)
#:use-module (ice-9 match)
+ #:use-module (ice-9 regex)
#:use-module (ice-9 format)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-26)
@@ -72,19 +73,23 @@
input-directories)))
(for-each (match-lambda
- ((env-var (directories ...) separator)
- (set-path-environment-variable env-var directories
+ ((env-var (files ...) separator type pattern)
+ (set-path-environment-variable env-var files
input-directories
- #:separator separator)))
+ #:separator separator
+ #:type type
+ #:pattern pattern)))
search-paths)
(when native-search-paths
;; Search paths for native inputs, when cross building.
(for-each (match-lambda
- ((env-var (directories ...) separator)
- (set-path-environment-variable env-var directories
+ ((env-var (files ...) separator type pattern)
+ (set-path-environment-variable env-var files
native-input-directories
- #:separator separator)))
+ #:separator separator
+ #:type type
+ #:pattern pattern)))
native-search-paths))
#t)
@@ -110,29 +115,15 @@ working directory."
(define* (patch-usr-bin-file #:key native-inputs inputs
(patch-/usr/bin/file? #t)
#:allow-other-keys)
- "Patch occurrences of /usr/bin/file in configure, if present."
+ "Patch occurrences of \"/usr/bin/file\" in all the executable 'configure'
+files found in the source tree. This works around Libtool's Autoconf macros,
+which generates invocations of \"/usr/bin/file\" that are used to determine
+things like the ABI being used."
(when patch-/usr/bin/file?
- (let ((file "configure")
- (file-command (or (and=> (assoc-ref (or native-inputs inputs) "file")
- (cut string-append <> "/bin/file"))
- (which "file"))))
- (cond ((not (file-exists? file))
- (format (current-error-port)
- "patch-usr-bin-file: warning: `~a' not found~%"
- file))
- ((not file-command)
- (format (current-error-port)
- "patch-usr-bin-file: warning: `file' not found in PATH~%"))
- (else
- (let ((st (stat file)))
- (substitute* file
- (("/usr/bin/file")
- (begin
- (format (current-error-port)
- "patch-usr-bin-file: ~a: changing `~a' to `~a'~%"
- file "/usr/bin/file" file-command)
- file-command)))
- (set-file-time file st))))))
+ (for-each (lambda (file)
+ (when (executable-file? file)
+ (patch-/usr/bin/file file)))
+ (find-files "." "^configure$")))
#t)
(define* (patch-source-shebangs #:key source #:allow-other-keys)
@@ -236,18 +227,11 @@ makefiles."
(string-append srcdir "/configure")
flags))))
-(define %parallel-job-count
- ;; String to be passed next to GNU Make's `-j' argument.
- (match (getenv "NIX_BUILD_CORES")
- (#f "1")
- ("0" (number->string (current-processor-count)))
- (x x)))
-
(define* (build #:key (make-flags '()) (parallel-build? #t)
#:allow-other-keys)
(zero? (apply system* "make"
`(,@(if parallel-build?
- `("-j" ,%parallel-job-count)
+ `("-j" ,(number->string (parallel-job-count)))
'())
,@make-flags))))
@@ -257,7 +241,7 @@ makefiles."
(if tests?
(zero? (apply system* "make" test-target
`(,@(if parallel-tests?
- `("-j" ,%parallel-job-count)
+ `("-j" ,(number->string (parallel-job-count)))
'())
,@make-flags)))
(begin
@@ -267,7 +251,7 @@ makefiles."
(define* (install #:key (make-flags '()) #:allow-other-keys)
(zero? (apply system* "make" "install" make-flags)))
-(define* (patch-shebangs #:key outputs (patch-shebangs? #t)
+(define* (patch-shebangs #:key inputs outputs (patch-shebangs? #t)
#:allow-other-keys)
(define (list-of-files dir)
(map (cut string-append dir "/" <>)
@@ -276,20 +260,26 @@ makefiles."
(eq? 'regular (stat:type s)))))
'())))
- (define bindirs
- (append-map (match-lambda
- ((_ . dir)
- (list (string-append dir "/bin")
- (string-append dir "/sbin"))))
- outputs))
+ (define bin-directories
+ (match-lambda
+ ((_ . dir)
+ (list (string-append dir "/bin")
+ (string-append dir "/sbin")))))
+
+ (define output-bindirs
+ (append-map bin-directories outputs))
+
+ (define input-bindirs
+ ;; Shebangs should refer to binaries of the target system---i.e., from
+ ;; "inputs", not from "native-inputs".
+ (append-map bin-directories inputs))
(when patch-shebangs?
- (let ((path (append bindirs
- (search-path-as-string->list (getenv "PATH")))))
+ (let ((path (append output-bindirs input-bindirs)))
(for-each (lambda (dir)
(let ((files (list-of-files dir)))
(for-each (cut patch-shebang <> path) files)))
- bindirs)))
+ output-bindirs)))
#t)
(define* (strip #:key target outputs (strip-binaries? #t)
@@ -350,7 +340,9 @@ makefiles."
debug-output objcopy-command))
(file-system-fold (const #t)
(lambda (path stat result) ; leaf
- (and (or (not debug-output)
+ (and (file-exists? path) ;discard dangling symlinks
+ (or (elf-file? path) (ar-file? path))
+ (or (not debug-output)
(make-debug-file path))
(zero? (apply system* strip-command
(append strip-flags (list path))))
@@ -377,6 +369,85 @@ makefiles."
strip-directories)))
outputs))))
+(define* (validate-documentation-location #:key outputs
+ #:allow-other-keys)
+ "Documentation should go to 'share/info' and 'share/man', not just 'info/'
+and 'man/'. This phase moves directories to the right place if needed."
+ (define (validate-sub-directory output sub-directory)
+ (let ((directory (string-append output "/" sub-directory)))
+ (when (directory-exists? directory)
+ (let ((target (string-append output "/share/" sub-directory)))
+ (format #t "moving '~a' to '~a'~%" directory target)
+ (mkdir-p (dirname target))
+ (rename-file directory target)))))
+
+ (define (validate-output output)
+ (for-each (cut validate-sub-directory output <>)
+ '("man" "info")))
+
+ (match outputs
+ (((names . directories) ...)
+ (for-each validate-output directories)))
+ #t)
+
+(define* (compress-documentation #:key outputs
+ (compress-documentation? #t)
+ (documentation-compressor "gzip")
+ (documentation-compressor-flags
+ '("--best" "--no-name"))
+ (compressed-documentation-extension ".gz")
+ #:allow-other-keys)
+ "When COMPRESS-DOCUMENTATION? is true, compress man pages and Info files
+found in OUTPUTS using DOCUMENTATION-COMPRESSOR, called with
+DOCUMENTATION-COMPRESSOR-FLAGS."
+ (define (retarget-symlink link)
+ (let ((target (readlink link)))
+ (delete-file link)
+ (symlink (string-append target compressed-documentation-extension)
+ link)))
+
+ (define (has-links? file)
+ ;; Return #t if FILE has hard links.
+ (> (stat:nlink (lstat file)) 1))
+
+ (define (maybe-compress-directory directory regexp)
+ (or (not (directory-exists? directory))
+ (match (find-files directory regexp)
+ (() ;nothing to compress
+ #t)
+ ((files ...) ;one or more files
+ (format #t
+ "compressing documentation in '~a' with ~s and flags ~s~%"
+ directory documentation-compressor
+ documentation-compressor-flags)
+ (call-with-values
+ (lambda ()
+ (partition symbolic-link? files))
+ (lambda (symlinks regular-files)
+ ;; Compress the non-symlink files, and adjust symlinks to refer
+ ;; to the compressed files. Leave files that have hard links
+ ;; unchanged ('gzip' would refuse to compress them anyway.)
+ (and (zero? (apply system* documentation-compressor
+ (append documentation-compressor-flags
+ (remove has-links? regular-files))))
+ (every retarget-symlink
+ (filter (cut string-match regexp <>)
+ symlinks)))))))))
+
+ (define (maybe-compress output)
+ (and (maybe-compress-directory (string-append output "/share/man")
+ "\\.[0-9]+$")
+ (maybe-compress-directory (string-append output "/share/info")
+ "\\.info(-[0-9]+)?$")))
+
+ (if compress-documentation?
+ (match outputs
+ (((names . directories) ...)
+ (every maybe-compress directories)))
+ (begin
+ (format #t "not compressing documentation~%")
+ #t)))
+
(define %standard-phases
;; Standard build phases, as a list of symbol/procedure pairs.
(let-syntax ((phases (syntax-rules ()
@@ -385,7 +456,9 @@ makefiles."
patch-usr-bin-file
patch-source-shebangs configure patch-generated-file-shebangs
build check install
- patch-shebangs strip)))
+ patch-shebangs strip
+ validate-documentation-location
+ compress-documentation)))
(define* (gnu-build #:key (source #f) (outputs #f) (inputs #f)
diff --git a/guix/build/utils.scm b/guix/build/utils.scm
index cda4fb12ef..4407f9af23 100644
--- a/guix/build/utils.scm
+++ b/guix/build/utils.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
;;;
@@ -31,15 +31,21 @@
#:re-export (alist-cons
alist-delete)
#:export (%store-directory
+ parallel-job-count
+
directory-exists?
executable-file?
+ symbolic-link?
call-with-ascii-input-file
+ elf-file?
+ ar-file?
with-directory-excursion
mkdir-p
copy-recursively
delete-file-recursively
find-files
+ search-path-as-list
set-path-environment-variable
search-path-as-string->list
list->search-path-as-string
@@ -55,6 +61,7 @@
set-file-time
patch-shebang
patch-makefile-SHELL
+ patch-/usr/bin/file
fold-port-matches
remove-store-references
wrap-program))
@@ -69,6 +76,14 @@
(or (getenv "NIX_STORE")
"/gnu/store"))
+(define parallel-job-count
+ ;; Number of processes to be passed next to GNU Make's `-j' argument.
+ (make-parameter
+ (match (getenv "NIX_BUILD_CORES") ;set by the daemon
+ (#f 1)
+ ("0" (current-processor-count))
+ (x (or (string->number x) 1)))))
+
(define (directory-exists? dir)
"Return #t if DIR exists and is a directory."
(let ((s (stat dir #f)))
@@ -81,6 +96,10 @@
(and s
(not (zero? (logand (stat:mode s) #o100))))))
+(define (symbolic-link? file)
+ "Return #t if FILE is a symbolic link (aka. \"symlink\".)"
+ (eq? (stat:type (lstat file)) 'symlink))
+
(define (call-with-ascii-input-file file proc)
"Open FILE as an ASCII or binary file, and pass the resulting port to
PROC. FILE is closed when PROC's dynamic extent is left. Return the
@@ -96,6 +115,42 @@ return values of applying PROC to the port."
(lambda ()
(close-input-port port)))))
+(define (file-header-match header)
+ "Return a procedure that returns true when its argument is a file starting
+with the bytes in HEADER, a bytevector."
+ (define len
+ (bytevector-length header))
+
+ (lambda (file)
+ "Return true if FILE starts with the right magic bytes."
+ (define (get-header)
+ (call-with-input-file file
+ (lambda (port)
+ (get-bytevector-n port len))
+ #:binary #t #:guess-encoding #f))
+
+ (catch 'system-error
+ (lambda ()
+ (equal? (get-header) header))
+ (lambda args
+ (if (= EISDIR (system-error-errno args))
+ #f ;FILE is a directory
+ (apply throw args))))))
+
+(define %elf-magic-bytes
+ ;; Magic bytes of ELF files. See <elf.h>.
+ (u8-list->bytevector (map char->integer (string->list "\x7FELF"))))
+
+(define elf-file?
+ (file-header-match %elf-magic-bytes))
+
+(define %ar-magic-bytes
+ ;; Magic bytes of archives created by 'ar'. See <ar.h>.
+ (u8-list->bytevector (map char->integer (string->list "!<arch>\n"))))
+
+(define ar-file?
+ (file-header-match %ar-magic-bytes))
+
(define-syntax-rule (with-directory-excursion dir body ...)
"Run BODY with DIR as the process's current directory."
(let ((init (getcwd)))
@@ -237,23 +292,37 @@ matches REGEXP."
;;; Search paths.
;;;
-(define (search-path-as-list sub-directories input-dirs)
- "Return the list of directories among SUB-DIRECTORIES that exist in
-INPUT-DIRS. Example:
+(define* (search-path-as-list files input-dirs
+ #:key (type 'directory) pattern)
+ "Return the list of directories among FILES of the given TYPE (a symbol as
+returned by 'stat:type') that exist in INPUT-DIRS. Example:
(search-path-as-list '(\"share/emacs/site-lisp\" \"share/emacs/24.1\")
(list \"/package1\" \"/package2\" \"/package3\"))
=> (\"/package1/share/emacs/site-lisp\"
\"/package3/share/emacs/site-lisp\")
+When PATTERN is true, it is a regular expression denoting file names to look
+for under the directories designated by FILES. For example:
+
+ (search-path-as-list '(\"xml\") (list docbook-xml docbook-xsl)
+ #:type 'regular
+ #:pattern \"^catalog\\\\.xml$\")
+ => (\"/…/xml/dtd/docbook/catalog.xml\"
+ \"/…/xml/xsl/docbook-xsl-1.78.1/catalog.xml\")
"
(append-map (lambda (input)
- (filter-map (lambda (dir)
- (let ((dir (string-append input "/"
- dir)))
- (and (directory-exists? dir)
- dir)))
- sub-directories))
+ (append-map (lambda (file)
+ (let ((file (string-append input "/" file)))
+ ;; XXX: By using 'find-files', we implicitly
+ ;; assume #:type 'regular.
+ (if pattern
+ (find-files file pattern)
+ (let ((stat (stat file #f)))
+ (if (and stat (eq? type (stat:type stat)))
+ (list file)
+ '())))))
+ files))
input-dirs))
(define (list->search-path-as-string lst separator)
@@ -262,16 +331,31 @@ INPUT-DIRS. Example:
(define* (search-path-as-string->list path #:optional (separator #\:))
(string-tokenize path (char-set-complement (char-set separator))))
-(define* (set-path-environment-variable env-var sub-directories input-dirs
- #:key (separator ":"))
- "Look for each of SUB-DIRECTORIES in INPUT-DIRS. Set ENV-VAR to a
-SEPARATOR-separated path accordingly. Example:
+(define* (set-path-environment-variable env-var files input-dirs
+ #:key
+ (separator ":")
+ (type 'directory)
+ pattern)
+ "Look for each of FILES of the given TYPE (a symbol as returned by
+'stat:type') in INPUT-DIRS. Set ENV-VAR to a SEPARATOR-separated path
+accordingly. Example:
(set-path-environment-variable \"PKG_CONFIG\"
'(\"lib/pkgconfig\")
(list package1 package2))
+
+When PATTERN is not #f, it must be a regular expression (really a string)
+denoting file names to look for under the directories designated by FILES:
+
+ (set-path-environment-variable \"XML_CATALOG_FILES\"
+ '(\"xml\")
+ (list docbook-xml docbook-xsl)
+ #:type 'regular
+ #:pattern \"^catalog\\\\.xml$\")
"
- (let* ((path (search-path-as-list sub-directories input-dirs))
+ (let* ((path (search-path-as-list files input-dirs
+ #:type type
+ #:pattern pattern))
(value (list->search-path-as-string path separator)))
(if (string-null? value)
(begin
@@ -365,10 +449,11 @@ PROC's result is returned."
(false-if-exception (delete-file template))))))
(define (substitute file pattern+procs)
- "PATTERN+PROCS is a list of regexp/two-argument procedure. For each line
-of FILE, and for each PATTERN that it matches, call the corresponding PROC
-as (PROC LINE MATCHES); PROC must return the line that will be written as a
-substitution of the original line."
+ "PATTERN+PROCS is a list of regexp/two-argument-procedure pairs. For each
+line of FILE, and for each PATTERN that it matches, call the corresponding
+PROC as (PROC LINE MATCHES); PROC must return the line that will be written as
+a substitution of the original line. Be careful about using '$' to match the
+end of a line; by itself it won't match the terminating newline of a line."
(let ((rx+proc (map (match-lambda
(((? regexp? pattern) . proc)
(cons pattern proc))
@@ -428,7 +513,10 @@ When one of the MATCH-VAR is `_', no variable is bound to the corresponding
match substring.
Alternatively, FILE may be a list of file names, in which case they are
-all subject to the substitutions."
+all subject to the substitutions.
+
+Be careful about using '$' to match the end of a line; by itself it won't
+match the terminating newline of a line."
((substitute* file ((regexp match-var ...) body ...) ...)
(let ()
(define (substitute-one-file file-name)
@@ -572,9 +660,7 @@ When KEEP-MTIME? is true, the atime/mtime of FILE are kept unchanged."
;; XXX: Unlike with `patch-shebang', FILE is always touched.
(define (find-shell name)
- (let ((shell
- (search-path (search-path-as-string->list (getenv "PATH"))
- name)))
+ (let ((shell (which name)))
(unless shell
(format (current-error-port)
"patch-makefile-SHELL: warning: no binary for shell `~a' found in $PATH~%"
@@ -583,7 +669,7 @@ When KEEP-MTIME? is true, the atime/mtime of FILE are kept unchanged."
(let ((st (stat file)))
(substitute* file
- (("^ *SHELL[[:blank:]]*=[[:blank:]]*([[:graph:]]*/)([[:graph:]]+)(.*)$"
+ (("^ *SHELL[[:blank:]]*:?=[[:blank:]]*([[:graph:]]*/)([[:graph:]]+)(.*)$"
_ dir shell args)
(let* ((old (string-append dir shell))
(new (or (find-shell shell) old)))
@@ -596,6 +682,29 @@ When KEEP-MTIME? is true, the atime/mtime of FILE are kept unchanged."
(when keep-mtime?
(set-file-time file st))))
+(define* (patch-/usr/bin/file file
+ #:key
+ (file-command (which "file"))
+ (keep-mtime? #t))
+ "Patch occurrences of \"/usr/bin/file\" in FILE, replacing them with
+FILE-COMMAND. When KEEP-MTIME? is true, keep FILE's modification time
+unchanged."
+ (if (not file-command)
+ (format (current-error-port)
+ "patch-/usr/bin/file: warning: \
+no replacement 'file' command, doing nothing~%")
+ (let ((st (stat file)))
+ (substitute* file
+ (("/usr/bin/file")
+ (begin
+ (format (current-error-port)
+ "patch-/usr/bin/file: ~a: changing `~a' to `~a'~%"
+ file "/usr/bin/file" file-command)
+ file-command)))
+
+ (when keep-mtime?
+ (set-file-time file st)))))
+
(define* (fold-port-matches proc init pattern port
#:optional (unmatched (lambda (_ r) r)))
"Read from PORT character-by-character; for each match against
@@ -707,7 +816,7 @@ contents:
#!location/of/bin/bash
export PATH=\"/gnu/.../bar/bin\"
export CERT_PATH=\"$CERT_PATH${CERT_PATH:+:}/gnu/.../baz/certs:/qux/certs\"
- exec location/of/.foo-real
+ exec -a location/of/foo location/of/.foo-real \"$@\"
This is useful for scripts that expect particular programs to be in $PATH, for
programs that expect particular shared libraries to be in $LD_LIBRARY_PATH, or
@@ -731,6 +840,7 @@ the previous wrapper."
(copy-file prog prog-real)
prog-real)
(wrapper-file-name number)))
+
(let* ((number (next-wrapper-number))
(target (wrapper-target number))
(wrapper (wrapper-file-name (1+ number)))
@@ -760,10 +870,11 @@ the previous wrapper."
(with-output-to-file prog-tmp
(lambda ()
(format #t
- "#!~a~%~a~%exec \"~a\" \"$@\"~%"
+ "#!~a~%~a~%exec -a \"~a\" \"~a\" \"$@\"~%"
(which "bash")
(string-join (map export-variable vars)
"\n")
+ (canonicalize-path prog)
(canonicalize-path target))))
(chmod prog-tmp #o755)
@@ -773,6 +884,7 @@ the previous wrapper."
;;; Local Variables:
;;; eval: (put 'call-with-output-file/atomic 'scheme-indent-function 1)
+;;; eval: (put 'call-with-ascii-input-file 'scheme-indent-function 1)
;;; eval: (put 'with-throw-handler 'scheme-indent-function 1)
;;; eval: (put 'let-matches 'scheme-indent-function 3)
;;; eval: (put 'with-atomic-file-replacement 'scheme-indent-function 1)
diff --git a/guix/packages.scm b/guix/packages.scm
index 05ba389ad6..db14f9e0b8 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -180,16 +180,21 @@ representation."
(define-record-type* <search-path-specification>
search-path-specification make-search-path-specification
search-path-specification?
- (variable search-path-specification-variable)
- (directories search-path-specification-directories)
- (separator search-path-specification-separator (default ":")))
+ (variable search-path-specification-variable) ;string
+ (files search-path-specification-files) ;list of strings
+ (separator search-path-specification-separator ;string
+ (default ":"))
+ (file-type search-path-specification-file-type ;symbol
+ (default 'directory))
+ (file-pattern search-path-specification-file-pattern ;#f | string
+ (default #f)))
(define (search-path-specification->sexp spec)
"Return an sexp representing SPEC, a <search-path-specification>. The sexp
corresponds to the arguments expected by `set-path-environment-variable'."
(match spec
- (($ <search-path-specification> variable directories separator)
- `(,variable ,directories ,separator))))
+ (($ <search-path-specification> variable files separator type pattern)
+ `(,variable ,files ,separator ,type ,pattern))))
(define %supported-systems
;; This is the list of system types that are supported. By default, we
@@ -410,7 +415,10 @@ IMPORTED-MODULES specify modules to use/import for use by SNIPPET."
(define (apply-patch input)
(let ((patch* (assoc-ref %build-inputs input)))
(format (current-error-port) "applying '~a'...~%" patch*)
- (zero? (system* patch "--batch" ,@flags "--input" patch*))))
+
+ ;; Use '--force' so that patches that do not apply perfectly are
+ ;; rejected.
+ (zero? (system* patch "--force" ,@flags "--input" patch*))))
(define (first-file directory)
;; Return the name of the first file in DIRECTORY.
diff --git a/guix/scripts/environment.scm b/guix/scripts/environment.scm
index af196036d5..ffa3a09799 100644
--- a/guix/scripts/environment.scm
+++ b/guix/scripts/environment.scm
@@ -45,17 +45,15 @@ path value is appended."
(($ <search-path-specification>
variable directories separator)
(let* ((current (getenv variable))
- (path ((@@ (guix build utils) search-path-as-list)
- directories paths))
- (value (list->search-path-as-string path separator)))
+ (path (search-path-as-list directories paths))
+ (value (list->search-path-as-string path separator)))
(proc variable
(if (and current (not pure?))
(string-append value separator current)
value)))))
(cons* (search-path-specification
(variable "PATH")
- (directories '("bin" "sbin"))
- (separator ":"))
+ (files '("bin" "sbin")))
(delete-duplicates
(append-map package-native-search-paths inputs))))))
diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm
index 21dc66cb75..30b0658198 100644
--- a/guix/scripts/package.scm
+++ b/guix/scripts/package.scm
@@ -29,7 +29,8 @@
#:use-module (guix utils)
#:use-module (guix config)
#:use-module (guix scripts build)
- #:use-module ((guix build utils) #:select (directory-exists? mkdir-p))
+ #:use-module ((guix build utils)
+ #:select (directory-exists? mkdir-p search-path-as-list))
#:use-module (ice-9 format)
#:use-module (ice-9 match)
#:use-module (ice-9 regex)
@@ -362,19 +363,24 @@ current settings and report only settings not already effective."
(define search-path-definition
(match-lambda
- (($ <search-path-specification> variable directories separator)
- (let ((values (or (and=> (getenv variable)
- (cut string-tokenize* <> separator))
- '()))
- (directories (filter file-exists?
- (map (cut string-append profile
- "/" <>)
- directories))))
- (if (every (cut member <> values) directories)
+ (($ <search-path-specification> variable files separator
+ type pattern)
+ (let* ((values (or (and=> (getenv variable)
+ (cut string-tokenize* <> separator))
+ '()))
+ ;; Add a trailing slash to force symlinks to be treated as
+ ;; directories when 'find-files' traverses them.
+ (files (if pattern
+ (map (cut string-append <> "/") files)
+ files))
+ (path (search-path-as-list files (list profile)
+ #:type type
+ #:pattern pattern)))
+ (if (every (cut member <> values) path)
#f
(format #f "export ~a=\"~a\""
variable
- (string-join directories separator)))))))
+ (string-join path separator)))))))
(let* ((packages (filter-map manifest-entry->package entries))
(search-paths (delete-duplicates
diff --git a/guix/utils.scm b/guix/utils.scm
index d0d2e8a3d4..1c619c3ef9 100644
--- a/guix/utils.scm
+++ b/guix/utils.scm
@@ -1,6 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2013 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2013, 2014, 2015 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net>
;;;
@@ -61,6 +61,7 @@
location-column
source-properties->location
+ nix-system->gnu-triplet
gnu-triplet->nix-system
%current-system
%current-target-system
@@ -476,6 +477,23 @@ previous value of the keyword argument."
(()
(reverse before)))))))
+(define* (nix-system->gnu-triplet
+ #:optional (system (%current-system)) (vendor "unknown"))
+ "Return a guess of the GNU triplet corresponding to Nix system
+identifier SYSTEM."
+ (match system
+ ("armhf-linux"
+ (string-append "arm-" vendor "-linux-gnueabihf"))
+ (_
+ (let* ((dash (string-index system #\-))
+ (arch (substring system 0 dash))
+ (os (substring system (+ 1 dash))))
+ (string-append arch
+ "-" vendor "-"
+ (if (string=? os "linux")
+ "linux-gnu"
+ os))))))
+
(define (gnu-triplet->nix-system triplet)
"Return the Nix system type corresponding to TRIPLET, a GNU triplet as
returned by `config.guess'."
@@ -484,7 +502,9 @@ returned by `config.guess'."
(lambda (m)
(string-append "i686-" (match:substring m 1))))
(else triplet))))
- (cond ((string-match "^([^-]+)-([^-]+-)?linux-gnu.*" triplet)
+ (cond ((string-match "^arm[^-]*-([^-]+-)?linux-gnueabihf" triplet)
+ "armhf-linux")
+ ((string-match "^([^-]+)-([^-]+-)?linux-gnu.*" triplet)
=>
(lambda (m)
;; Nix omits `-gnu' for GNU/Linux.
diff --git a/m4/guix.m4 b/m4/guix.m4
index 19e041a72c..d4415598b0 100644
--- a/m4/guix.m4
+++ b/m4/guix.m4
@@ -1,5 +1,6 @@
dnl GNU Guix --- Functional package management for GNU
dnl Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
+dnl Copyright © 2014 Mark H Weaver <mhw@netris.org>
dnl
dnl This file is part of GNU Guix.
dnl
@@ -50,6 +51,16 @@ AC_DEFUN([GUIX_SYSTEM_TYPE], [
machine_name="i686";;
amd64)
machine_name="x86_64";;
+ arm*)
+ # TODO: If not cross-compiling, add a sanity check to make
+ # sure this build machine has the needed features to
+ # support executables compiled using our armhf gcc,
+ # configured with:
+ # --with-arch=armv7-a
+ # --with-float=hard
+ # --with-mode=thumb
+ # --with-fpu=vfpv3-d16
+ machine_name="armhf";;
*)
machine_name="$host_cpu";;
esac
@@ -86,7 +97,7 @@ courageous and port the GNU System distribution to it (see
# Currently only Linux-based systems are supported, and only on some
# platforms.
case "$guix_system" in
- x86_64-linux|i686-linux|mips64el-linux)
+ x86_64-linux|i686-linux|armhf-linux|mips64el-linux)
;;
*)
if test "x$guix_courageous" = "xyes"; then
diff --git a/tests/packages.scm b/tests/packages.scm
index 3ee44adc98..bd5ba3ee92 100644
--- a/tests/packages.scm
+++ b/tests/packages.scm
@@ -19,6 +19,7 @@
(define-module (test-packages)
#:use-module (guix tests)
#:use-module (guix store)
+ #:use-module (guix monads)
#:use-module ((guix utils)
;; Rename the 'location' binding to allow proper syntax
;; matching when setting the 'location' field of a package.
@@ -31,10 +32,13 @@
#:use-module (guix build-system)
#:use-module (guix build-system trivial)
#:use-module (guix build-system gnu)
+ #:use-module (guix profiles)
+ #:use-module (guix scripts package)
#:use-module (gnu packages)
#:use-module (gnu packages base)
#:use-module (gnu packages guile)
#:use-module (gnu packages bootstrap)
+ #:use-module (gnu packages xml)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-26)
#:use-module (srfi srfi-34)
@@ -328,10 +332,10 @@
search-paths)))))))
(x (list (search-path-specification
(variable "GUILE_LOAD_PATH")
- (directories '("share/guile/site/2.0")))
+ (files '("share/guile/site/2.0")))
(search-path-specification
(variable "GUILE_LOAD_COMPILED_PATH")
- (directories '("share/guile/site/2.0")))))
+ (files '("share/guile/site/2.0")))))
(a (package (inherit (dummy-package "guile"))
(build-system s)
(native-search-paths x)))
@@ -527,6 +531,53 @@
(((? (cut eq? hello <>))) #t)
(wrong (pk 'find-packages-by-name wrong #f))))
+(test-assert "--search-paths with pattern"
+ ;; Make sure 'guix package --search-paths' correctly reports environment
+ ;; variables when file patterns are used (in particular, it must follow
+ ;; symlinks when looking for 'catalog.xml'.) To do that, we rely on the
+ ;; libxml2 package specification, which contains such a definition.
+ (let* ((p1 (package
+ (name "foo") (version "0") (source #f)
+ (build-system trivial-build-system)
+ (arguments
+ `(#:guile ,%bootstrap-guile
+ #:modules ((guix build utils))
+ #:builder (begin
+ (use-modules (guix build utils))
+ (let ((out (assoc-ref %outputs "out")))
+ (mkdir-p (string-append out "/xml/bar/baz"))
+ (call-with-output-file
+ (string-append out "/xml/bar/baz/catalog.xml")
+ (lambda (port)
+ (display "xml? wat?!" port)))))))
+ (synopsis #f) (description #f)
+ (home-page #f) (license #f)))
+ (p2 (package
+ ;; Provide a fake libxml2 to avoid building the real one. This
+ ;; is OK because 'guix package' gets search path specifications
+ ;; from the same-named package found in the distro.
+ (name "libxml2") (version "0.0.0") (source #f)
+ (build-system trivial-build-system)
+ (arguments
+ `(#:guile ,%bootstrap-guile
+ #:builder (mkdir (assoc-ref %outputs "out"))))
+ (native-search-paths (package-native-search-paths libxml2))
+ (synopsis #f) (description #f)
+ (home-page #f) (license #f)))
+ (prof (run-with-store %store
+ (profile-derivation
+ (manifest (map package->manifest-entry
+ (list p1 p2)))
+ #:info-dir? #f)
+ #:guile-for-build (%guile-for-build))))
+ (build-derivations %store (list prof))
+ (string-match (format #f "^export XML_CATALOG_FILES=\"~a/xml/+bar/baz/catalog\\.xml\"\n"
+ (derivation->output-path prof))
+ (with-output-to-string
+ (lambda ()
+ (guix-package "-p" (derivation->output-path prof)
+ "--search-paths"))))))
+
(test-end "packages")