Merge branch 'core-updates'
Conflicts: gnu/packages/bootstrap.scm
This commit is contained in:
commit
57b7e1a62d
|
@ -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
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
|
@ -28,31 +28,28 @@
|
|||
(srfi srfi-1)
|
||||
(srfi srfi-26))
|
||||
|
||||
(define %supported-systems
|
||||
'("x86_64-linux" "i686-linux"))
|
||||
(with-store store
|
||||
(let* ((native (append-map (lambda (system)
|
||||
(map (cut package-derivation store <> system)
|
||||
(list %bootstrap-tarballs emacs)))
|
||||
%supported-systems))
|
||||
(cross (map (cut package-cross-derivation store
|
||||
%bootstrap-tarballs <>)
|
||||
'("mips64el-linux-gnuabi64")))
|
||||
(total (append native cross)))
|
||||
(define (warn item system)
|
||||
(format (current-error-port) "~a (~a) is not substitutable~%"
|
||||
item system)
|
||||
#f)
|
||||
|
||||
(let* ((store (open-connection))
|
||||
(native (append-map (lambda (system)
|
||||
(map (cut package-derivation store <> system)
|
||||
(list %bootstrap-tarballs emacs)))
|
||||
%supported-systems))
|
||||
(cross (map (cut package-cross-derivation store
|
||||
%bootstrap-tarballs <>)
|
||||
'("mips64el-linux-gnuabi64")))
|
||||
(total (append native cross)))
|
||||
(define (warn proc)
|
||||
(lambda (drv)
|
||||
(or (proc drv)
|
||||
(begin
|
||||
(format (current-error-port) "~a is not substitutable~%"
|
||||
drv)
|
||||
#f))))
|
||||
|
||||
(set-build-options store #:use-substitutes? #t)
|
||||
(let ((result (every (compose (warn (cut has-substitutes? store <>))
|
||||
derivation->output-path)
|
||||
total)))
|
||||
(when result
|
||||
(format (current-error-port) "~a packages found substitutable~%"
|
||||
(length total)))
|
||||
(exit result)))
|
||||
(set-build-options store #:use-substitutes? #t)
|
||||
(let* ((substitutable? (substitution-oracle store total))
|
||||
(result (every (lambda (drv)
|
||||
(let ((out (derivation->output-path drv)))
|
||||
(or (substitutable? out)
|
||||
(warn out (derivation-system drv)))))
|
||||
total)))
|
||||
(when result
|
||||
(format (current-error-port) "~a packages found substitutable~%"
|
||||
(length total)))
|
||||
(exit result))))
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
;; 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)))))
|
||||
`(;; Libltdl is provided as a separate package, so don't install it here.
|
||||
#:configure-flags '("--disable-ltdl-install")
|
||||
|
||||
;; XXX: There are test failures on mips64el-linux starting from 2.4.4:
|
||||
;; <http://hydra.gnu.org/build/181662>.
|
||||
#:tests? ,(not (string-prefix? "mips64"
|
||||
(or (%current-target-system)
|
||||
(%current-system))))
|
||||
|
||||
#:phases (alist-cons-before
|
||||
'check 'pre-check
|
||||
(lambda* (#:key inputs #:allow-other-keys)
|
||||
;; Run the test suite in parallel, if possible.
|
||||
(setenv "TESTSUITEFLAGS"
|
||||
(string-append
|
||||
"-j"
|
||||
(number->string (parallel-job-count))))
|
||||
|
||||
;; Path references to /bin/sh.
|
||||
(let ((bash (assoc-ref inputs "bash")))
|
||||
(substitute* "tests/testsuite"
|
||||
(("/bin/sh")
|
||||
(string-append bash "/bin/bash")))))
|
||||
%standard-phases)))
|
||||
(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+)))
|
||||
|
|
|
@ -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))))
|
||||
|
||||
|
|
|
@ -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."
|
||||
|
|
|
@ -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")
|
||||
'()))))
|
||||
|
|
|
@ -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.
|
@ -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)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
|
||||
;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
|
||||
;;;
|
||||
|
@ -115,13 +115,7 @@ file; as a result, it is often used in conjunction with \"tar\", resulting in
|
|||
(home-page "http://www.gnu.org/software/gzip/")))
|
||||
|
||||
(define-public bzip2
|
||||
(let ((fix-man-dir
|
||||
;; Move man pages to $out/share/.
|
||||
'(lambda* (#:key outputs #:allow-other-keys)
|
||||
(with-directory-excursion (assoc-ref outputs "out")
|
||||
(mkdir "share")
|
||||
(rename-file "man" "share/man"))))
|
||||
(build-shared-lib
|
||||
(let ((build-shared-lib
|
||||
;; Build a shared library.
|
||||
'(lambda* (#:key inputs #:allow-other-keys)
|
||||
(patch-makefile-SHELL "Makefile-libbz2_so")
|
||||
|
@ -171,20 +165,16 @@ file; as a result, it is often used in conjunction with \"tar\", resulting in
|
|||
`(alist-cons-before
|
||||
'build 'build-shared-lib ,build-shared-lib
|
||||
(alist-cons-after
|
||||
'install 'fix-man-dir ,fix-man-dir
|
||||
(alist-cons-after
|
||||
'install 'install-shared-lib ,install-shared-lib
|
||||
(alist-replace 'configure ,set-cross-environment
|
||||
%standard-phases))))
|
||||
'install 'install-shared-lib ,install-shared-lib
|
||||
(alist-replace 'configure ,set-cross-environment
|
||||
%standard-phases)))
|
||||
|
||||
;; Native compilation: build the shared library.
|
||||
`(alist-cons-before
|
||||
'build 'build-shared-lib ,build-shared-lib
|
||||
(alist-cons-after
|
||||
'install 'fix-man-dir ,fix-man-dir
|
||||
(alist-cons-after
|
||||
'install 'install-shared-lib ,install-shared-lib
|
||||
(alist-delete 'configure %standard-phases)))))
|
||||
'install 'install-shared-lib ,install-shared-lib
|
||||
(alist-delete 'configure %standard-phases))))
|
||||
|
||||
#:make-flags (list (string-append "PREFIX="
|
||||
(assoc-ref %outputs "out")))
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
|
@ -88,7 +89,6 @@ may be either a libc package or #f.)"
|
|||
(substitute-keyword-arguments (package-arguments gcc-4.8)
|
||||
((#:configure-flags flags)
|
||||
`(append (list ,(string-append "--target=" target)
|
||||
,@(gcc-configure-flags-for-triplet target)
|
||||
,@(if libc
|
||||
'()
|
||||
`( ;; Disable features not needed at this stage.
|
||||
|
@ -234,10 +234,10 @@ GCC that does not target a libc; otherwise, target that libc."
|
|||
(search-paths
|
||||
(list (search-path-specification
|
||||
(variable "CROSS_CPATH")
|
||||
(directories '("include")))
|
||||
(files '("include")))
|
||||
(search-path-specification
|
||||
(variable "CROSS_LIBRARY_PATH")
|
||||
(directories '("lib" "lib64")))))
|
||||
(files '("lib" "lib64")))))
|
||||
(native-search-paths '())))
|
||||
|
||||
(define* (cross-libc target
|
||||
|
@ -308,10 +308,16 @@ XBINUTILS and the cross tool chain."
|
|||
;;;
|
||||
|
||||
(define-public xgcc-mips64el
|
||||
(let ((triplet "mips64el-linux-gnuabi64")) ; N64 ABI
|
||||
(cross-gcc triplet
|
||||
(cross-binutils triplet)
|
||||
(cross-libc triplet))))
|
||||
(let* ((triplet "mips64el-linux-gnuabi64") ;N64 ABI
|
||||
(xgcc (cross-gcc triplet
|
||||
(cross-binutils triplet)
|
||||
(cross-libc triplet))))
|
||||
;; Don't attempt to build this cross-compiler on i686;
|
||||
;; see <http://bugs.gnu.org/19598>.
|
||||
(package (inherit xgcc)
|
||||
(supported-systems (fold delete
|
||||
(package-supported-systems xgcc)
|
||||
'("mips64el-linux" "i686-linux"))))))
|
||||
|
||||
(define-public xgcc-avr
|
||||
;; AVR cross-compiler, used to build AVR-Libc.
|
||||
|
@ -323,6 +329,14 @@ XBINUTILS and the cross tool chain."
|
|||
;; Bare-bones Xtensa cross-compiler, used to build the Atheros firmware.
|
||||
(cross-gcc "xtensa-elf"))
|
||||
|
||||
(define-public xgcc-armhf
|
||||
(let* ((triplet "arm-linux-gnueabihf")
|
||||
(xgcc (cross-gcc triplet
|
||||
(cross-binutils triplet)
|
||||
(cross-libc triplet))))
|
||||
(package (inherit xgcc)
|
||||
(supported-systems (delete "armhf-linux" %supported-systems)))))
|
||||
|
||||
;; (define-public xgcc-armel
|
||||
;; (let ((triplet "armel-linux-gnueabi"))
|
||||
;; (cross-gcc triplet
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)))
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
|
||||
;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
|
||||
;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
|
@ -27,14 +27,14 @@
|
|||
(define-public file
|
||||
(package
|
||||
(name "file")
|
||||
(version "5.19")
|
||||
(source (origin
|
||||
(method url-fetch)
|
||||
(uri (string-append "ftp://ftp.astron.com/pub/file/file-"
|
||||
version ".tar.gz"))
|
||||
(sha256 (base32
|
||||
"0z1sgrcfy6d285kj5izy1yypf371bjl3247plh9ppk0svaxv714l"))
|
||||
(patches (list (search-patch "file-CVE-2014-3587.patch")))))
|
||||
(version "5.22")
|
||||
(source (origin
|
||||
(method url-fetch)
|
||||
(uri (string-append "ftp://ftp.astron.com/pub/file/file-"
|
||||
version ".tar.gz"))
|
||||
(sha256
|
||||
(base32
|
||||
"02zw14hw3gqlw91w2f2snbirvyrp7r83irvnnkjcb25q9kjaiqy4"))))
|
||||
(build-system gnu-build-system)
|
||||
|
||||
;; When cross-compiling, this package depends upon a native install of
|
||||
|
@ -50,13 +50,3 @@ of the file.")
|
|||
(license bsd-2)
|
||||
(home-page "http://www.darwinsys.com/file/")))
|
||||
|
||||
(define-public file-5.20 ;fix for CVE-2014-3710
|
||||
(package (inherit file)
|
||||
(version "5.20")
|
||||
(source (origin
|
||||
(method url-fetch)
|
||||
(uri (string-append "ftp://ftp.astron.com/pub/file/file-"
|
||||
version ".tar.gz"))
|
||||
(sha256
|
||||
(base32
|
||||
"0iyjs9z8kp43gz7gva4j67h4p0n53f7q8x3ibai9s01sp3xnphsv"))))))
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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."
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)))
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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="
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -11,7 +11,7 @@ main="(@ (gnu build-support ld-wrapper) ld-wrapper)"
|
|||
exec @GUILE@ -c "(load-compiled \"$0.go\") (apply $main (cdr (command-line)))" "$@"
|
||||
!#
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
|
@ -30,6 +30,7 @@ exec @GUILE@ -c "(load-compiled \"$0.go\") (apply $main (cdr (command-line)))" "
|
|||
|
||||
(define-module (gnu build-support ld-wrapper)
|
||||
#:use-module (srfi srfi-1)
|
||||
#:use-module (ice-9 match)
|
||||
#:export (ld-wrapper))
|
||||
|
||||
;;; Commentary:
|
||||
|
@ -103,58 +104,62 @@ exec @GUILE@ -c "(load-compiled \"$0.go\") (apply $main (cdr (command-line)))" "
|
|||
(< depth %max-symlink-depth)
|
||||
(loop (readlink file) (+ 1 depth))))))))
|
||||
|
||||
(define (switch-arguments switch args)
|
||||
;; Return the arguments passed for the occurrences of SWITCH--e.g.,
|
||||
;; "-L"--in ARGS.
|
||||
(let ((prefix-len (string-length switch)))
|
||||
(fold-right (lambda (arg path)
|
||||
(if (string-prefix? switch arg)
|
||||
(cons (substring arg prefix-len) path)
|
||||
path))
|
||||
'()
|
||||
args)))
|
||||
|
||||
(define (library-path args)
|
||||
;; Return the library search path extracted from `-L' switches in ARGS.
|
||||
;; Note: allow references to out-of-store directories. When this leads to
|
||||
;; actual impurities, this is caught later.
|
||||
(switch-arguments "-L" args))
|
||||
|
||||
(define (library-files-linked args)
|
||||
;; Return the file names of shared libraries explicitly linked against via
|
||||
;; `-l' in ARGS.
|
||||
(map (lambda (lib)
|
||||
(string-append "lib" lib ".so"))
|
||||
(switch-arguments "-l" args)))
|
||||
;; `-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)
|
||||
(begin
|
||||
(format (current-error-port)
|
||||
"ld-wrapper: error: attempt to use impure library ~s~%"
|
||||
absolute)
|
||||
(exit 1)))
|
||||
args)))
|
||||
(if (or %allow-impurities?
|
||||
(pure-file-name? file))
|
||||
(cons* "-rpath" (dirname file) args)
|
||||
(begin
|
||||
(format (current-error-port)
|
||||
"ld-wrapper: error: attempt to use impure library ~s~%"
|
||||
file)
|
||||
(exit 1))))
|
||||
'()
|
||||
library-files))
|
||||
|
||||
(define (ld-wrapper . args)
|
||||
;; Invoke the real `ld' with ARGS, augmented with `-rpath' switches.
|
||||
(let* ((lib-path (library-path args))
|
||||
(libs (library-files-linked args))
|
||||
(args (append args (rpath-arguments lib-path libs))))
|
||||
(if %debug?
|
||||
(format (current-error-port)
|
||||
"ld-wrapper: invoking `~a' with ~s~%"
|
||||
%real-ld args))
|
||||
(let* ((libs (library-files-linked args))
|
||||
(args (append args (rpath-arguments libs))))
|
||||
(when %debug?
|
||||
(format (current-error-port)
|
||||
"ld-wrapper: invoking `~a' with ~s~%"
|
||||
%real-ld args))
|
||||
(apply execl %real-ld (basename %real-ld) args)))
|
||||
|
||||
;;; ld-wrapper.scm ends here
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)))
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
@ -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;
|
|
@ -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.
|
|
@ -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
|
|
@ -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))
|
|
@ -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,
|
|
@ -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)
|
|
@ -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" \
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
(
|
|
@ -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 \
|
|
@ -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.
|
||||
|
||||
--- 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])
|
||||
|
||||
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.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
|
||||
|
||||
(
|
||||
|
|
|
@ -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);
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
@ -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++){
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)))
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -77,10 +77,9 @@
|
|||
(native-search-paths
|
||||
(list (search-path-specification
|
||||
(variable "GEM_PATH")
|
||||
(directories
|
||||
(list (string-append "lib/ruby/gems/"
|
||||
(version-major+minor version)
|
||||
".0"))))))
|
||||
(files (list (string-append "lib/ruby/gems/"
|
||||
(version-major+minor version)
|
||||
".0"))))))
|
||||
(synopsis "Programming language interpreter")
|
||||
(description "Ruby is a dynamic object-oriented programming language with
|
||||
a focus on simplicity and productivity.")
|
||||
|
|
|
@ -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)))
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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"))
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)))
|
||||
|
|
|
@ -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 ??)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
|
@ -20,6 +20,7 @@
|
|||
#:use-module (guix build utils)
|
||||
#:use-module (ice-9 ftw)
|
||||
#:use-module (ice-9 match)
|
||||
#:use-module (ice-9 regex)
|
||||
#:use-module (ice-9 format)
|
||||
#:use-module (srfi srfi-1)
|
||||
#:use-module (srfi srfi-26)
|
||||
|
@ -72,19 +73,23 @@
|
|||
input-directories)))
|
||||
|
||||
(for-each (match-lambda
|
||||
((env-var (directories ...) separator)
|
||||
(set-path-environment-variable env-var directories
|
||||
((env-var (files ...) separator type pattern)
|
||||
(set-path-environment-variable env-var files
|
||||
input-directories
|
||||
#:separator separator)))
|
||||
#:separator separator
|
||||
#:type type
|
||||
#:pattern pattern)))
|
||||
search-paths)
|
||||
|
||||
(when native-search-paths
|
||||
;; Search paths for native inputs, when cross building.
|
||||
(for-each (match-lambda
|
||||
((env-var (directories ...) separator)
|
||||
(set-path-environment-variable env-var directories
|
||||
((env-var (files ...) separator type pattern)
|
||||
(set-path-environment-variable env-var files
|
||||
native-input-directories
|
||||
#:separator separator)))
|
||||
#:separator separator
|
||||
#:type type
|
||||
#:pattern pattern)))
|
||||
native-search-paths))
|
||||
|
||||
#t)
|
||||
|
@ -110,29 +115,15 @@ working directory."
|
|||
(define* (patch-usr-bin-file #:key native-inputs inputs
|
||||
(patch-/usr/bin/file? #t)
|
||||
#:allow-other-keys)
|
||||
"Patch occurrences of /usr/bin/file in configure, if present."
|
||||
"Patch occurrences of \"/usr/bin/file\" in all the executable 'configure'
|
||||
files found in the source tree. This works around Libtool's Autoconf macros,
|
||||
which generates invocations of \"/usr/bin/file\" that are used to determine
|
||||
things like the ABI being used."
|
||||
(when patch-/usr/bin/file?
|
||||
(let ((file "configure")
|
||||
(file-command (or (and=> (assoc-ref (or native-inputs inputs) "file")
|
||||
(cut string-append <> "/bin/file"))
|
||||
(which "file"))))
|
||||
(cond ((not (file-exists? file))
|
||||
(format (current-error-port)
|
||||
"patch-usr-bin-file: warning: `~a' not found~%"
|
||||
file))
|
||||
((not file-command)
|
||||
(format (current-error-port)
|
||||
"patch-usr-bin-file: warning: `file' not found in PATH~%"))
|
||||
(else
|
||||
(let ((st (stat file)))
|
||||
(substitute* file
|
||||
(("/usr/bin/file")
|
||||
(begin
|
||||
(format (current-error-port)
|
||||
"patch-usr-bin-file: ~a: changing `~a' to `~a'~%"
|
||||
file "/usr/bin/file" file-command)
|
||||
file-command)))
|
||||
(set-file-time file st))))))
|
||||
(for-each (lambda (file)
|
||||
(when (executable-file? file)
|
||||
(patch-/usr/bin/file file)))
|
||||
(find-files "." "^configure$")))
|
||||
#t)
|
||||
|
||||
(define* (patch-source-shebangs #:key source #:allow-other-keys)
|
||||
|
@ -236,18 +227,11 @@ makefiles."
|
|||
(string-append srcdir "/configure")
|
||||
flags))))
|
||||
|
||||
(define %parallel-job-count
|
||||
;; String to be passed next to GNU Make's `-j' argument.
|
||||
(match (getenv "NIX_BUILD_CORES")
|
||||
(#f "1")
|
||||
("0" (number->string (current-processor-count)))
|
||||
(x x)))
|
||||
|
||||
(define* (build #:key (make-flags '()) (parallel-build? #t)
|
||||
#:allow-other-keys)
|
||||
(zero? (apply system* "make"
|
||||
`(,@(if parallel-build?
|
||||
`("-j" ,%parallel-job-count)
|
||||
`("-j" ,(number->string (parallel-job-count)))
|
||||
'())
|
||||
,@make-flags))))
|
||||
|
||||
|
@ -257,7 +241,7 @@ makefiles."
|
|||
(if tests?
|
||||
(zero? (apply system* "make" test-target
|
||||
`(,@(if parallel-tests?
|
||||
`("-j" ,%parallel-job-count)
|
||||
`("-j" ,(number->string (parallel-job-count)))
|
||||
'())
|
||||
,@make-flags)))
|
||||
(begin
|
||||
|
@ -267,7 +251,7 @@ makefiles."
|
|||
(define* (install #:key (make-flags '()) #:allow-other-keys)
|
||||
(zero? (apply system* "make" "install" make-flags)))
|
||||
|
||||
(define* (patch-shebangs #:key outputs (patch-shebangs? #t)
|
||||
(define* (patch-shebangs #:key inputs outputs (patch-shebangs? #t)
|
||||
#:allow-other-keys)
|
||||
(define (list-of-files dir)
|
||||
(map (cut string-append dir "/" <>)
|
||||
|
@ -276,20 +260,26 @@ makefiles."
|
|||
(eq? 'regular (stat:type s)))))
|
||||
'())))
|
||||
|
||||
(define bindirs
|
||||
(append-map (match-lambda
|
||||
((_ . dir)
|
||||
(list (string-append dir "/bin")
|
||||
(string-append dir "/sbin"))))
|
||||
outputs))
|
||||
(define bin-directories
|
||||
(match-lambda
|
||||
((_ . dir)
|
||||
(list (string-append dir "/bin")
|
||||
(string-append dir "/sbin")))))
|
||||
|
||||
(define output-bindirs
|
||||
(append-map bin-directories outputs))
|
||||
|
||||
(define input-bindirs
|
||||
;; Shebangs should refer to binaries of the target system---i.e., from
|
||||
;; "inputs", not from "native-inputs".
|
||||
(append-map bin-directories inputs))
|
||||
|
||||
(when patch-shebangs?
|
||||
(let ((path (append bindirs
|
||||
(search-path-as-string->list (getenv "PATH")))))
|
||||
(let ((path (append output-bindirs input-bindirs)))
|
||||
(for-each (lambda (dir)
|
||||
(let ((files (list-of-files dir)))
|
||||
(for-each (cut patch-shebang <> path) files)))
|
||||
bindirs)))
|
||||
output-bindirs)))
|
||||
#t)
|
||||
|
||||
(define* (strip #:key target outputs (strip-binaries? #t)
|
||||
|
@ -350,7 +340,9 @@ makefiles."
|
|||
debug-output objcopy-command))
|
||||
(file-system-fold (const #t)
|
||||
(lambda (path stat result) ; leaf
|
||||
(and (or (not debug-output)
|
||||
(and (file-exists? path) ;discard dangling symlinks
|
||||
(or (elf-file? path) (ar-file? path))
|
||||
(or (not debug-output)
|
||||
(make-debug-file path))
|
||||
(zero? (apply system* strip-command
|
||||
(append strip-flags (list path))))
|
||||
|
@ -377,6 +369,85 @@ makefiles."
|
|||
strip-directories)))
|
||||
outputs))))
|
||||
|
||||
(define* (validate-documentation-location #:key outputs
|
||||
#:allow-other-keys)
|
||||
"Documentation should go to 'share/info' and 'share/man', not just 'info/'
|
||||
and 'man/'. This phase moves directories to the right place if needed."
|
||||
(define (validate-sub-directory output sub-directory)
|
||||
(let ((directory (string-append output "/" sub-directory)))
|
||||
(when (directory-exists? directory)
|
||||
(let ((target (string-append output "/share/" sub-directory)))
|
||||
(format #t "moving '~a' to '~a'~%" directory target)
|
||||
(mkdir-p (dirname target))
|
||||
(rename-file directory target)))))
|
||||
|
||||
(define (validate-output output)
|
||||
(for-each (cut validate-sub-directory output <>)
|
||||
'("man" "info")))
|
||||
|
||||
(match outputs
|
||||
(((names . directories) ...)
|
||||
(for-each validate-output directories)))
|
||||
#t)
|
||||
|
||||
(define* (compress-documentation #:key outputs
|
||||
(compress-documentation? #t)
|
||||
(documentation-compressor "gzip")
|
||||
(documentation-compressor-flags
|
||||
'("--best" "--no-name"))
|
||||
(compressed-documentation-extension ".gz")
|
||||
#:allow-other-keys)
|
||||
"When COMPRESS-DOCUMENTATION? is true, compress man pages and Info files
|
||||
found in OUTPUTS using DOCUMENTATION-COMPRESSOR, called with
|
||||
DOCUMENTATION-COMPRESSOR-FLAGS."
|
||||
(define (retarget-symlink link)
|
||||
(let ((target (readlink link)))
|
||||
(delete-file link)
|
||||
(symlink (string-append target compressed-documentation-extension)
|
||||
link)))
|
||||
|
||||
(define (has-links? file)
|
||||
;; Return #t if FILE has hard links.
|
||||
(> (stat:nlink (lstat file)) 1))
|
||||
|
||||
(define (maybe-compress-directory directory regexp)
|
||||
(or (not (directory-exists? directory))
|
||||
(match (find-files directory regexp)
|
||||
(() ;nothing to compress
|
||||
#t)
|
||||
((files ...) ;one or more files
|
||||
(format #t
|
||||
"compressing documentation in '~a' with ~s and flags ~s~%"
|
||||
directory documentation-compressor
|
||||
documentation-compressor-flags)
|
||||
(call-with-values
|
||||
(lambda ()
|
||||
(partition symbolic-link? files))
|
||||
(lambda (symlinks regular-files)
|
||||
;; Compress the non-symlink files, and adjust symlinks to refer
|
||||
;; to the compressed files. Leave files that have hard links
|
||||
;; unchanged ('gzip' would refuse to compress them anyway.)
|
||||
(and (zero? (apply system* documentation-compressor
|
||||
(append documentation-compressor-flags
|
||||
(remove has-links? regular-files))))
|
||||
(every retarget-symlink
|
||||
(filter (cut string-match regexp <>)
|
||||
symlinks)))))))))
|
||||
|
||||
(define (maybe-compress output)
|
||||
(and (maybe-compress-directory (string-append output "/share/man")
|
||||
"\\.[0-9]+$")
|
||||
(maybe-compress-directory (string-append output "/share/info")
|
||||
"\\.info(-[0-9]+)?$")))
|
||||
|
||||
(if compress-documentation?
|
||||
(match outputs
|
||||
(((names . directories) ...)
|
||||
(every maybe-compress directories)))
|
||||
(begin
|
||||
(format #t "not compressing documentation~%")
|
||||
#t)))
|
||||
|
||||
(define %standard-phases
|
||||
;; Standard build phases, as a list of symbol/procedure pairs.
|
||||
(let-syntax ((phases (syntax-rules ()
|
||||
|
@ -385,7 +456,9 @@ makefiles."
|
|||
patch-usr-bin-file
|
||||
patch-source-shebangs configure patch-generated-file-shebangs
|
||||
build check install
|
||||
patch-shebangs strip)))
|
||||
patch-shebangs strip
|
||||
validate-documentation-location
|
||||
compress-documentation)))
|
||||
|
||||
|
||||
(define* (gnu-build #:key (source #f) (outputs #f) (inputs #f)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -45,17 +45,15 @@ path value is appended."
|
|||
(($ <search-path-specification>
|
||||
variable directories separator)
|
||||
(let* ((current (getenv variable))
|
||||
(path ((@@ (guix build utils) search-path-as-list)
|
||||
directories paths))
|
||||
(value (list->search-path-as-string path separator)))
|
||||
(path (search-path-as-list directories paths))
|
||||
(value (list->search-path-as-string path separator)))
|
||||
(proc variable
|
||||
(if (and current (not pure?))
|
||||
(string-append value separator current)
|
||||
value)))))
|
||||
(cons* (search-path-specification
|
||||
(variable "PATH")
|
||||
(directories '("bin" "sbin"))
|
||||
(separator ":"))
|
||||
(files '("bin" "sbin")))
|
||||
(delete-duplicates
|
||||
(append-map package-native-search-paths inputs))))))
|
||||
|
||||
|
|
|
@ -29,7 +29,8 @@
|
|||
#:use-module (guix utils)
|
||||
#:use-module (guix config)
|
||||
#:use-module (guix scripts build)
|
||||
#:use-module ((guix build utils) #:select (directory-exists? mkdir-p))
|
||||
#:use-module ((guix build utils)
|
||||
#:select (directory-exists? mkdir-p search-path-as-list))
|
||||
#:use-module (ice-9 format)
|
||||
#:use-module (ice-9 match)
|
||||
#:use-module (ice-9 regex)
|
||||
|
@ -362,19 +363,24 @@ current settings and report only settings not already effective."
|
|||
|
||||
(define search-path-definition
|
||||
(match-lambda
|
||||
(($ <search-path-specification> variable directories separator)
|
||||
(let ((values (or (and=> (getenv variable)
|
||||
(cut string-tokenize* <> separator))
|
||||
'()))
|
||||
(directories (filter file-exists?
|
||||
(map (cut string-append profile
|
||||
"/" <>)
|
||||
directories))))
|
||||
(if (every (cut member <> values) directories)
|
||||
(($ <search-path-specification> variable files separator
|
||||
type pattern)
|
||||
(let* ((values (or (and=> (getenv variable)
|
||||
(cut string-tokenize* <> separator))
|
||||
'()))
|
||||
;; Add a trailing slash to force symlinks to be treated as
|
||||
;; directories when 'find-files' traverses them.
|
||||
(files (if pattern
|
||||
(map (cut string-append <> "/") files)
|
||||
files))
|
||||
(path (search-path-as-list files (list profile)
|
||||
#:type type
|
||||
#:pattern pattern)))
|
||||
(if (every (cut member <> values) path)
|
||||
#f
|
||||
(format #f "export ~a=\"~a\""
|
||||
variable
|
||||
(string-join directories separator)))))))
|
||||
(string-join path separator)))))))
|
||||
|
||||
(let* ((packages (filter-map manifest-entry->package entries))
|
||||
(search-paths (delete-duplicates
|
||||
|
|
|
@ -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.
|
||||
|
|
13
m4/guix.m4
13
m4/guix.m4
|
@ -1,5 +1,6 @@
|
|||
dnl GNU Guix --- Functional package management for GNU
|
||||
dnl Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
|
||||
dnl Copyright © 2014 Mark H Weaver <mhw@netris.org>
|
||||
dnl
|
||||
dnl This file is part of GNU Guix.
|
||||
dnl
|
||||
|
@ -50,6 +51,16 @@ AC_DEFUN([GUIX_SYSTEM_TYPE], [
|
|||
machine_name="i686";;
|
||||
amd64)
|
||||
machine_name="x86_64";;
|
||||
arm*)
|
||||
# TODO: If not cross-compiling, add a sanity check to make
|
||||
# sure this build machine has the needed features to
|
||||
# support executables compiled using our armhf gcc,
|
||||
# configured with:
|
||||
# --with-arch=armv7-a
|
||||
# --with-float=hard
|
||||
# --with-mode=thumb
|
||||
# --with-fpu=vfpv3-d16
|
||||
machine_name="armhf";;
|
||||
*)
|
||||
machine_name="$host_cpu";;
|
||||
esac
|
||||
|
@ -86,7 +97,7 @@ courageous and port the GNU System distribution to it (see
|
|||
# Currently only Linux-based systems are supported, and only on some
|
||||
# platforms.
|
||||
case "$guix_system" in
|
||||
x86_64-linux|i686-linux|mips64el-linux)
|
||||
x86_64-linux|i686-linux|armhf-linux|mips64el-linux)
|
||||
;;
|
||||
*)
|
||||
if test "x$guix_courageous" = "xyes"; then
|
||||
|
|
|
@ -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")
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue