Merge branch 'core-updates'

Conflicts:
	gnu/packages/bootstrap.scm
This commit is contained in:
Ludovic Courtès 2015-01-16 13:27:03 +01:00
commit 57b7e1a62d
98 changed files with 2277 additions and 987 deletions

1
.gitignore vendored
View File

@ -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

View File

@ -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,11 +28,8 @@
(srfi srfi-1)
(srfi srfi-26))
(define %supported-systems
'("x86_64-linux" "i686-linux"))
(let* ((store (open-connection))
(native (append-map (lambda (system)
(with-store store
(let* ((native (append-map (lambda (system)
(map (cut package-derivation store <> system)
(list %bootstrap-tarballs emacs)))
%supported-systems))
@ -40,19 +37,19 @@
%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))))
(define (warn item system)
(format (current-error-port) "~a (~a) is not substitutable~%"
item system)
#f)
(set-build-options store #:use-substitutes? #t)
(let ((result (every (compose (warn (cut has-substitutes? store <>))
derivation->output-path)
(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)))
(exit result))))

View File

@ -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

View File

@ -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)

View File

@ -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.

View File

@ -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"

View File

@ -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

View File

@ -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,62 +238,6 @@ Makefile, simplifying the entire process for the developer.")
(define-public libtool
(package
(name "libtool")
(version "2.4.2")
(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")))))
(build-system gnu-build-system)
(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.
(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)))
;; 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
presenting a single consistent, portable interface that hides the usual
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)
@ -303,17 +247,66 @@ complexity of working with shared libraries across platforms.")
(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)))
(list (search-patch "libtool-skip-tests.patch")))))
(build-system gnu-build-system)
(propagated-inputs `(("m4" ,m4)))
(native-inputs `(("m4" ,m4)
("perl" ,perl)
("automake" ,automake) ;some tests rely on 'aclocal'
("autoconf" ,(autoconf-wrapper)))) ;others on 'autom4te'
(arguments
`(;; 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>.
(if (string-prefix? "mips64el"
(or (%current-target-system) (%current-system)))
`(#:tests? #f
,@(package-arguments libtool))
(package-arguments libtool)))))
#: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)))
(synopsis "Generic shared library support tools")
(description
"GNU Libtool helps in the creation and use of shared libraries, by
presenting a single consistent, portable interface that hides the usual
complexity of working with shared libraries across platforms.")
(license gpl3+)
(home-page "http://www.gnu.org/software/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
'(#: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+)))

View File

@ -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))))

View File

@ -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."

View File

@ -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")
'()))))

View File

@ -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)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -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)

View File

@ -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")
@ -170,21 +164,17 @@ file; as a result, it is often used in conjunction with \"tar\", resulting in
;; Cross-compilation: use the cross tools.
`(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))))
%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)))))
(alist-delete 'configure %standard-phases))))
#:make-flags (list (string-append "PREFIX="
(assoc-ref %outputs "out")))

View File

@ -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
(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

View File

@ -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)

View File

@ -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)))

View File

@ -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

View File

@ -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")
(version "5.22")
(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")))))
(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"))))))

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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."

View File

@ -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)

View File

@ -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)))

View File

@ -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

View File

@ -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="

View File

@ -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)

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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,55 +104,59 @@ 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)))
;; `-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))
(define (rpath-arguments lib-path library-files)
;; Return the `-rpath' argument list for each of LIBRARY-FILES found in
;; LIB-PATH.
(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)
(pure-file-name? file))
(cons* "-rpath" (dirname file) args)
(begin
(format (current-error-port)
"ld-wrapper: error: attempt to use impure library ~s~%"
absolute)
(exit 1)))
args)))
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?
(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))

View File

@ -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)

View File

@ -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)))

View File

@ -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

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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")

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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.

View File

@ -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

View File

@ -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))

View File

@ -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,

View File

@ -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)

View File

@ -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" \

View File

@ -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

View File

@ -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
(

View File

@ -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 \

View File

@ -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
Also skip the nopic test on ARM and MIPS systems.
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
--- 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])
--- 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
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
(

View File

@ -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);

View File

@ -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

View File

@ -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

View File

@ -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++){

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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")

View File

@ -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

View File

@ -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)))

View File

@ -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)

View File

@ -77,8 +77,7 @@
(native-search-paths
(list (search-path-specification
(variable "GEM_PATH")
(directories
(list (string-append "lib/ruby/gems/"
(files (list (string-append "lib/ruby/gems/"
(version-major+minor version)
".0"))))))
(synopsis "Programming language interpreter")

View File

@ -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)))

View File

@ -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")

View File

@ -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"))

View File

@ -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

View File

@ -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

View File

@ -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)))

View File

@ -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 ??)

View File

@ -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)

View File

@ -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

View File

@ -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")

View File

@ -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

View File

@ -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)

View File

@ -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
(define bin-directories
(match-lambda
((_ . dir)
(list (string-append dir "/bin")
(string-append dir "/sbin"))))
outputs))
(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)

View File

@ -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)

View File

@ -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.

View File

@ -45,8 +45,7 @@ path value is appended."
(($ <search-path-specification>
variable directories separator)
(let* ((current (getenv variable))
(path ((@@ (guix build utils) search-path-as-list)
directories paths))
(path (search-path-as-list directories paths))
(value (list->search-path-as-string path separator)))
(proc variable
(if (and current (not pure?))
@ -54,8 +53,7 @@ path value is appended."
value)))))
(cons* (search-path-specification
(variable "PATH")
(directories '("bin" "sbin"))
(separator ":"))
(files '("bin" "sbin")))
(delete-duplicates
(append-map package-native-search-paths inputs))))))

View File

@ -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)
(($ <search-path-specification> variable files separator
type pattern)
(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)
;; 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

View File

@ -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.

View File

@ -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

View File

@ -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")