Merge branch 'core-updates'
Conflicts: gnu/packages/bootstrap.scm
This commit is contained in:
		
						commit
						57b7e1a62d
					
				
					 98 changed files with 2277 additions and 987 deletions
				
			
		
							
								
								
									
										1
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							|  | @ -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) | ||||
|  |  | |||
							
								
								
									
										
											BIN
										
									
								
								gnu/packages/bootstrap/armhf-linux/bash
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								gnu/packages/bootstrap/armhf-linux/bash
									
										
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								gnu/packages/bootstrap/armhf-linux/mkdir
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								gnu/packages/bootstrap/armhf-linux/mkdir
									
										
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								gnu/packages/bootstrap/armhf-linux/tar
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								gnu/packages/bootstrap/armhf-linux/tar
									
										
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								gnu/packages/bootstrap/armhf-linux/xz
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								gnu/packages/bootstrap/armhf-linux/xz
									
										
									
									
									
										Executable file
									
								
							
										
											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 | ||||
|  |  | |||
							
								
								
									
										38
									
								
								gnu/packages/patches/curl-gss-api-fix.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								gnu/packages/patches/curl-gss-api-fix.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,38 @@ | |||
| Copied from upstream: | ||||
| https://github.com/bagder/curl/commit/5c0e66d63214e0306197c5a3f162441e074f3401.patch | ||||
| 
 | ||||
| From 5c0e66d63214e0306197c5a3f162441e074f3401 Mon Sep 17 00:00:00 2001 | ||||
| From: Steve Holme <steve_holme@hotmail.com> | ||||
| Date: Thu, 8 Jan 2015 19:23:53 +0000 | ||||
| Subject: [PATCH] sasl_gssapi: Fixed build on NetBSD with built-in GSS-API | ||||
| 
 | ||||
| Bug: http://curl.haxx.se/bug/view.cgi?id=1469 | ||||
| Reported-by: Thomas Klausner | ||||
| ---
 | ||||
|  lib/curl_sasl_gssapi.c | 3 ++- | ||||
|  1 file changed, 2 insertions(+), 1 deletion(-) | ||||
| 
 | ||||
| diff --git a/lib/curl_sasl_gssapi.c b/lib/curl_sasl_gssapi.c
 | ||||
| index 6dda0e9..a50646a 100644
 | ||||
| --- a/lib/curl_sasl_gssapi.c
 | ||||
| +++ b/lib/curl_sasl_gssapi.c
 | ||||
| @@ -6,6 +6,7 @@
 | ||||
|   *                             \___|\___/|_| \_\_____| | ||||
|   * | ||||
|   * Copyright (C) 2014, Steve Holme, <steve_holme@hotmail.com>. | ||||
| + * Copyright (C) 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
 | ||||
|   * | ||||
|   * This software is licensed as described in the file COPYING, which | ||||
|   * you should have received as part of this distribution. The terms | ||||
| @@ -126,7 +127,7 @@ CURLcode Curl_sasl_create_gssapi_user_message(struct SessionHandle *data,
 | ||||
|   | ||||
|      /* Import the SPN */ | ||||
|      gss_major_status = gss_import_name(&gss_minor_status, &spn_token, | ||||
| -                                       gss_nt_service_name, &krb5->spn);
 | ||||
| +                                       GSS_C_NT_HOSTBASED_SERVICE, &krb5->spn);
 | ||||
|      if(GSS_ERROR(gss_major_status)) { | ||||
|        Curl_gss_log_error(data, gss_minor_status, "gss_import_name() failed: "); | ||||
|   | ||||
| -- 
 | ||||
| 2.2.1 | ||||
| 
 | ||||
|  | @ -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 | ||||
							
								
								
									
										282
									
								
								gnu/packages/patches/glibc-CVE-2012-3406.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										282
									
								
								gnu/packages/patches/glibc-CVE-2012-3406.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,282 @@ | |||
| Fix CVE-2012-3406: Stack overflow in vfprintf [BZ #16617] | ||||
| 
 | ||||
| Note: Here the ChangeLog and NEWS updates are removed from Jeff's | ||||
|       patch, since they depend on other earlier commits. | ||||
| 
 | ||||
| From: Jeff Law <law@redhat.com> | ||||
| Date: Mon, 15 Dec 2014 09:09:32 +0000 (+0100) | ||||
| Subject: CVE-2012-3406: Stack overflow in vfprintf [BZ #16617] | ||||
| X-Git-Url: https://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff_plain;h=a3a1f4163c4d0f9a36056c8640661a88674ae8a2 | ||||
| 
 | ||||
| CVE-2012-3406: Stack overflow in vfprintf [BZ #16617] | ||||
| 
 | ||||
| A larger number of format specifiers coudld cause a stack overflow, | ||||
| potentially allowing to bypass _FORTIFY_SOURCE format string | ||||
| protection. | ||||
| 
 | ||||
| (cherry picked from commit a5357b7ce2a2982c5778435704bcdb55ce3667a0) | ||||
| (cherry picked from commit ae61fc7b33d9d99d2763c16de8275227dc9748ba) | ||||
| 
 | ||||
| Conflicts: | ||||
| 	NEWS | ||||
| ---
 | ||||
| 
 | ||||
| diff --git a/stdio-common/Makefile b/stdio-common/Makefile
 | ||||
| index 5f8e534..e5e45b6 100644
 | ||||
| --- a/stdio-common/Makefile
 | ||||
| +++ b/stdio-common/Makefile
 | ||||
| @@ -57,7 +57,7 @@ tests := tstscanf test_rdwr test-popen tstgetln test-fseek \
 | ||||
|  	 bug19 bug19a tst-popen2 scanf13 scanf14 scanf15 bug20 bug21 bug22 \ | ||||
|  	 scanf16 scanf17 tst-setvbuf1 tst-grouping bug23 bug24 \ | ||||
|  	 bug-vfprintf-nargs tst-long-dbl-fphex tst-fphex-wide tst-sprintf3 \ | ||||
| -	 bug25 tst-printf-round bug26
 | ||||
| +	 bug25 tst-printf-round bug23-2 bug23-3 bug23-4 bug26
 | ||||
|   | ||||
|  test-srcs = tst-unbputc tst-printf | ||||
|   | ||||
| diff --git a/stdio-common/bug23-2.c b/stdio-common/bug23-2.c
 | ||||
| new file mode 100644 | ||||
| index 0000000..9e0cfe6
 | ||||
| --- /dev/null
 | ||||
| +++ b/stdio-common/bug23-2.c
 | ||||
| @@ -0,0 +1,70 @@
 | ||||
| +#include <stdio.h>
 | ||||
| +#include <string.h>
 | ||||
| +#include <stdlib.h>
 | ||||
| +
 | ||||
| +static const char expected[] = "\
 | ||||
| +\n\
 | ||||
| +a\n\
 | ||||
| +abbcd55\
 | ||||
| +\n\
 | ||||
| +a\n\
 | ||||
| +abbcd55\
 | ||||
| +\n\
 | ||||
| +a\n\
 | ||||
| +abbcd55\
 | ||||
| +\n\
 | ||||
| +a\n\
 | ||||
| +abbcd55\
 | ||||
| +\n\
 | ||||
| +a\n\
 | ||||
| +abbcd55\
 | ||||
| +\n\
 | ||||
| +a\n\
 | ||||
| +abbcd55\
 | ||||
| +\n\
 | ||||
| +a\n\
 | ||||
| +abbcd55\
 | ||||
| +\n\
 | ||||
| +a\n\
 | ||||
| +abbcd55\
 | ||||
| +\n\
 | ||||
| +a\n\
 | ||||
| +abbcd55\
 | ||||
| +\n\
 | ||||
| +a\n\
 | ||||
| +abbcd55\
 | ||||
| +\n\
 | ||||
| +a\n\
 | ||||
| +abbcd55\
 | ||||
| +\n\
 | ||||
| +a\n\
 | ||||
| +abbcd55\
 | ||||
| +\n\
 | ||||
| +a\n\
 | ||||
| +abbcd55%%%%%%%%%%%%%%%%%%%%%%%%%%\n";
 | ||||
| +
 | ||||
| +static int
 | ||||
| +do_test (void)
 | ||||
| +{
 | ||||
| +  char *buf = malloc (strlen (expected) + 1);
 | ||||
| +  snprintf (buf, strlen (expected) + 1,
 | ||||
| +	    "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d"
 | ||||
| +	    "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d"
 | ||||
| +	    "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d"
 | ||||
| +	    "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d"
 | ||||
| +	    "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d"
 | ||||
| +	    "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d"
 | ||||
| +	    "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d"
 | ||||
| +	    "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d"
 | ||||
| +	    "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d"
 | ||||
| +	    "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d"
 | ||||
| +	    "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d"
 | ||||
| +	    "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d"
 | ||||
| +	    "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d"
 | ||||
| +	    "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n",
 | ||||
| +	    "a", "b", "c", "d", 5);
 | ||||
| +  return strcmp (buf, expected) != 0;
 | ||||
| +}
 | ||||
| +
 | ||||
| +#define TEST_FUNCTION do_test ()
 | ||||
| +#include "../test-skeleton.c"
 | ||||
| diff --git a/stdio-common/bug23-3.c b/stdio-common/bug23-3.c
 | ||||
| new file mode 100644 | ||||
| index 0000000..57c8cef
 | ||||
| --- /dev/null
 | ||||
| +++ b/stdio-common/bug23-3.c
 | ||||
| @@ -0,0 +1,50 @@
 | ||||
| +#include <stdio.h>
 | ||||
| +#include <string.h>
 | ||||
| +#include <stdlib.h>
 | ||||
| +
 | ||||
| +int
 | ||||
| +do_test (void)
 | ||||
| +{
 | ||||
| +  size_t instances = 16384;
 | ||||
| +#define X0 "\n%1$s\n" "%1$s" "%2$s" "%2$s" "%3$s" "%4$s" "%5$d" "%5$d"
 | ||||
| +  const char *item = "\na\nabbcd55";
 | ||||
| +#define X3 X0 X0 X0 X0 X0 X0 X0 X0
 | ||||
| +#define X6 X3 X3 X3 X3 X3 X3 X3 X3
 | ||||
| +#define X9 X6 X6 X6 X6 X6 X6 X6 X6
 | ||||
| +#define X12 X9 X9 X9 X9 X9 X9 X9 X9
 | ||||
| +#define X14 X12 X12 X12 X12
 | ||||
| +#define TRAILER "%%%%%%%%%%%%%%%%%%%%%%%%%%"
 | ||||
| +#define TRAILER2 TRAILER TRAILER
 | ||||
| +  size_t length = instances * strlen (item) + strlen (TRAILER) + 1;
 | ||||
| +
 | ||||
| +  char *buf = malloc (length + 1);
 | ||||
| +  snprintf (buf, length + 1,
 | ||||
| +	    X14 TRAILER2 "\n",
 | ||||
| +	    "a", "b", "c", "d", 5);
 | ||||
| +
 | ||||
| +  const char *p = buf;
 | ||||
| +  size_t i;
 | ||||
| +  for (i = 0; i < instances; ++i)
 | ||||
| +    {
 | ||||
| +      const char *expected;
 | ||||
| +      for (expected = item; *expected; ++expected)
 | ||||
| +	{
 | ||||
| +	  if (*p != *expected)
 | ||||
| +	    {
 | ||||
| +	      printf ("mismatch at offset %zu (%zu): expected %d, got %d\n",
 | ||||
| +		      (size_t) (p - buf), i, *expected & 0xFF, *p & 0xFF);
 | ||||
| +	      return 1;
 | ||||
| +	    }
 | ||||
| +	  ++p;
 | ||||
| +	}
 | ||||
| +    }
 | ||||
| +  if (strcmp (p, TRAILER "\n") != 0)
 | ||||
| +    {
 | ||||
| +      printf ("mismatch at trailer: [%s]\n", p);
 | ||||
| +      return 1;
 | ||||
| +    }
 | ||||
| +  free (buf);
 | ||||
| +  return 0;
 | ||||
| +}
 | ||||
| +#define TEST_FUNCTION do_test ()
 | ||||
| +#include "../test-skeleton.c"
 | ||||
| diff --git a/stdio-common/bug23-4.c b/stdio-common/bug23-4.c
 | ||||
| new file mode 100644 | ||||
| index 0000000..a478564
 | ||||
| --- /dev/null
 | ||||
| +++ b/stdio-common/bug23-4.c
 | ||||
| @@ -0,0 +1,31 @@
 | ||||
| +#include <stdio.h>
 | ||||
| +#include <stdlib.h>
 | ||||
| +#include <string.h>
 | ||||
| +#include <sys/resource.h>
 | ||||
| +
 | ||||
| +#define LIMIT 1000000
 | ||||
| +
 | ||||
| +int
 | ||||
| +main (void)
 | ||||
| +{
 | ||||
| +  struct rlimit lim;
 | ||||
| +  getrlimit (RLIMIT_STACK, &lim);
 | ||||
| +  lim.rlim_cur = 1048576;
 | ||||
| +  setrlimit (RLIMIT_STACK, &lim);
 | ||||
| +  char *fmtstr = malloc (4 * LIMIT + 1);
 | ||||
| +  if (fmtstr == NULL)
 | ||||
| +    abort ();
 | ||||
| +  char *output = malloc (LIMIT + 1);
 | ||||
| +  if (output == NULL)
 | ||||
| +    abort ();
 | ||||
| +  for (size_t i = 0; i < LIMIT; i++)
 | ||||
| +    memcpy (fmtstr + 4 * i, "%1$d", 4);
 | ||||
| +  fmtstr[4 * LIMIT] = '\0';
 | ||||
| +  int ret = snprintf (output, LIMIT + 1, fmtstr, 0);
 | ||||
| +  if (ret != LIMIT)
 | ||||
| +    abort ();
 | ||||
| +  for (size_t i = 0; i < LIMIT; i++)
 | ||||
| +    if (output[i] != '0')
 | ||||
| +      abort ();
 | ||||
| +  return 0;
 | ||||
| +}
 | ||||
| diff --git a/stdio-common/vfprintf.c b/stdio-common/vfprintf.c
 | ||||
| index c4ff833..429a3d1 100644
 | ||||
| --- a/stdio-common/vfprintf.c
 | ||||
| +++ b/stdio-common/vfprintf.c
 | ||||
| @@ -263,6 +263,12 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
 | ||||
|    /* For the argument descriptions, which may be allocated on the heap.  */ | ||||
|    void *args_malloced = NULL; | ||||
|   | ||||
| +  /* For positional argument handling.  */
 | ||||
| +  struct printf_spec *specs;
 | ||||
| +
 | ||||
| +  /* Track if we malloced the SPECS array and thus must free it.  */
 | ||||
| +  bool specs_malloced = false;
 | ||||
| +
 | ||||
|    /* This table maps a character into a number representing a | ||||
|       class.  In each step there is a destination label for each | ||||
|       class.  */ | ||||
| @@ -1679,8 +1685,8 @@ do_positional:
 | ||||
|      size_t nspecs = 0; | ||||
|      /* A more or less arbitrary start value.  */ | ||||
|      size_t nspecs_size = 32 * sizeof (struct printf_spec); | ||||
| -    struct printf_spec *specs = alloca (nspecs_size);
 | ||||
|   | ||||
| +    specs = alloca (nspecs_size);
 | ||||
|      /* The number of arguments the format string requests.  This will | ||||
|         determine the size of the array needed to store the argument | ||||
|         attributes.  */ | ||||
| @@ -1721,11 +1727,39 @@ do_positional:
 | ||||
|  	if (nspecs * sizeof (*specs) >= nspecs_size) | ||||
|  	  { | ||||
|  	    /* Extend the array of format specifiers.  */ | ||||
| +	    if (nspecs_size * 2 < nspecs_size)
 | ||||
| +	      {
 | ||||
| +		__set_errno (ENOMEM);
 | ||||
| +		done = -1;
 | ||||
| +		goto all_done;
 | ||||
| +	      }
 | ||||
|  	    struct printf_spec *old = specs; | ||||
| -	    specs = extend_alloca (specs, nspecs_size, 2 * nspecs_size);
 | ||||
| +	    if (__libc_use_alloca (2 * nspecs_size))
 | ||||
| +	      specs = extend_alloca (specs, nspecs_size, 2 * nspecs_size);
 | ||||
| +	    else
 | ||||
| +	      {
 | ||||
| +		nspecs_size *= 2;
 | ||||
| +		specs = malloc (nspecs_size);
 | ||||
| +		if (specs == NULL)
 | ||||
| +		  {
 | ||||
| +		    __set_errno (ENOMEM);
 | ||||
| +		    specs = old;
 | ||||
| +		    done = -1;
 | ||||
| +		    goto all_done;
 | ||||
| +		  }
 | ||||
| +	      }
 | ||||
|   | ||||
|  	    /* Copy the old array's elements to the new space.  */ | ||||
|  	    memmove (specs, old, nspecs * sizeof (*specs)); | ||||
| +
 | ||||
| +	    /* If we had previously malloc'd space for SPECS, then
 | ||||
| +	       release it after the copy is complete.  */
 | ||||
| +	    if (specs_malloced)
 | ||||
| +	      free (old);
 | ||||
| +
 | ||||
| +	    /* Now set SPECS_MALLOCED if needed.  */
 | ||||
| +	    if (!__libc_use_alloca (nspecs_size))
 | ||||
| +	      specs_malloced = true;
 | ||||
|  	  } | ||||
|   | ||||
|  	/* Parse the format specifier.  */ | ||||
| @@ -2046,6 +2080,8 @@ do_positional:
 | ||||
|    } | ||||
|   | ||||
|  all_done: | ||||
| +  if (specs_malloced)
 | ||||
| +    free (specs);
 | ||||
|    if (__glibc_unlikely (args_malloced != NULL)) | ||||
|      free (args_malloced); | ||||
|    if (__glibc_unlikely (workstart != NULL)) | ||||
							
								
								
									
										171
									
								
								gnu/packages/patches/glibc-CVE-2014-7817.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										171
									
								
								gnu/packages/patches/glibc-CVE-2014-7817.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,171 @@ | |||
| Fix CVE-2014-7817: wordexp fails to honour WRDE_NOCMD. | ||||
| 
 | ||||
| Note: Here the ChangeLog and NEWS updates are removed from Carlos's | ||||
|       patch, since they depend on other earlier commits. | ||||
| 
 | ||||
| From: Carlos O'Donell <carlos@redhat.com> | ||||
| Date: Wed, 19 Nov 2014 16:44:12 +0000 (-0500) | ||||
| Subject: CVE-2014-7817: wordexp fails to honour WRDE_NOCMD. | ||||
| X-Git-Url: https://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff_plain;h=33ceaf6187b31ea15284ac65131749e1cb68d2ae | ||||
| 
 | ||||
| CVE-2014-7817: wordexp fails to honour WRDE_NOCMD. | ||||
| 
 | ||||
| The function wordexp() fails to properly handle the WRDE_NOCMD | ||||
| flag when processing arithmetic inputs in the form of "$((... ``))" | ||||
| where "..." can be anything valid. The backticks in the arithmetic | ||||
| epxression are evaluated by in a shell even if WRDE_NOCMD forbade | ||||
| command substitution. This allows an attacker to attempt to pass | ||||
| dangerous commands via constructs of the above form, and bypass | ||||
| the WRDE_NOCMD flag. This patch fixes this by checking for WRDE_NOCMD | ||||
| in exec_comm(), the only place that can execute a shell. All other | ||||
| checks for WRDE_NOCMD are superfluous and removed. | ||||
| 
 | ||||
| We expand the testsuite and add 3 new regression tests of roughly | ||||
| the same form but with a couple of nested levels. | ||||
| 
 | ||||
| On top of the 3 new tests we add fork validation to the WRDE_NOCMD | ||||
| testing. If any forks are detected during the execution of a wordexp() | ||||
| call with WRDE_NOCMD, the test is marked as failed. This is slightly | ||||
| heuristic since vfork might be used in the future, but it provides a | ||||
| higher level of assurance that no shells were executed as part of | ||||
| command substitution with WRDE_NOCMD in effect. In addition it doesn't | ||||
| require libpthread or libdl, instead we use the public implementation | ||||
| namespace function __register_atfork (already part of the public ABI | ||||
| for libpthread). | ||||
| 
 | ||||
| Tested on x86_64 with no regressions. | ||||
| 
 | ||||
| (cherry picked from commit a39208bd7fb76c1b01c127b4c61f9bfd915bfe7c) | ||||
| ---
 | ||||
| 
 | ||||
| diff --git a/posix/wordexp-test.c b/posix/wordexp-test.c
 | ||||
| index 4957006..bdd65e4 100644
 | ||||
| --- a/posix/wordexp-test.c
 | ||||
| +++ b/posix/wordexp-test.c
 | ||||
| @@ -27,6 +27,25 @@
 | ||||
|   | ||||
|  #define IFS " \n\t" | ||||
|   | ||||
| +extern void *__dso_handle __attribute__ ((__weak__, __visibility__ ("hidden")));
 | ||||
| +extern int __register_atfork (void (*) (void), void (*) (void), void (*) (void), void *);
 | ||||
| +
 | ||||
| +static int __app_register_atfork (void (*prepare) (void), void (*parent) (void), void (*child) (void))
 | ||||
| +{
 | ||||
| +  return __register_atfork (prepare, parent, child,
 | ||||
| +			    &__dso_handle == NULL ? NULL : __dso_handle);
 | ||||
| +}
 | ||||
| +
 | ||||
| +/* Number of forks seen.  */
 | ||||
| +static int registered_forks;
 | ||||
| +
 | ||||
| +/* For each fork increment the fork count.  */
 | ||||
| +static void
 | ||||
| +register_fork (void)
 | ||||
| +{
 | ||||
| +  registered_forks++;
 | ||||
| +}
 | ||||
| +
 | ||||
|  struct test_case_struct | ||||
|  { | ||||
|    int retval; | ||||
| @@ -206,6 +225,12 @@ struct test_case_struct
 | ||||
|      { WRDE_SYNTAX, NULL, "$((2+))", 0, 0, { NULL, }, IFS }, | ||||
|      { WRDE_SYNTAX, NULL, "`", 0, 0, { NULL, }, IFS }, | ||||
|      { WRDE_SYNTAX, NULL, "$((010+4+))", 0, 0, { NULL }, IFS }, | ||||
| +    /* Test for CVE-2014-7817. We test 3 combinations of command
 | ||||
| +       substitution inside an arithmetic expression to make sure that
 | ||||
| +       no commands are executed and error is returned.  */
 | ||||
| +    { WRDE_CMDSUB, NULL, "$((`echo 1`))", WRDE_NOCMD, 0, { NULL, }, IFS },
 | ||||
| +    { WRDE_CMDSUB, NULL, "$((1+`echo 1`))", WRDE_NOCMD, 0, { NULL, }, IFS },
 | ||||
| +    { WRDE_CMDSUB, NULL, "$((1+$((`echo 1`))))", WRDE_NOCMD, 0, { NULL, }, IFS },
 | ||||
|   | ||||
|      { -1, NULL, NULL, 0, 0, { NULL, }, IFS }, | ||||
|    }; | ||||
| @@ -258,6 +283,15 @@ main (int argc, char *argv[])
 | ||||
|  	  return -1; | ||||
|      } | ||||
|   | ||||
| +  /* If we are not allowed to do command substitution, we install
 | ||||
| +     fork handlers to verify that no forks happened.  No forks should
 | ||||
| +     happen at all if command substitution is disabled.  */
 | ||||
| +  if (__app_register_atfork (register_fork, NULL, NULL) != 0)
 | ||||
| +    {
 | ||||
| +      printf ("Failed to register fork handler.\n");
 | ||||
| +      return -1;
 | ||||
| +    }
 | ||||
| +
 | ||||
|    for (test = 0; test_case[test].retval != -1; test++) | ||||
|      if (testit (&test_case[test])) | ||||
|        ++fail; | ||||
| @@ -367,6 +401,9 @@ testit (struct test_case_struct *tc)
 | ||||
|   | ||||
|    printf ("Test %d (%s): ", ++tests, tc->words); | ||||
|   | ||||
| +  if (tc->flags & WRDE_NOCMD)
 | ||||
| +    registered_forks = 0;
 | ||||
| +
 | ||||
|    if (tc->flags & WRDE_APPEND) | ||||
|      { | ||||
|        /* initial wordexp() call, to be appended to */ | ||||
| @@ -378,6 +415,13 @@ testit (struct test_case_struct *tc)
 | ||||
|      } | ||||
|    retval = wordexp (tc->words, &we, tc->flags); | ||||
|   | ||||
| +  if ((tc->flags & WRDE_NOCMD)
 | ||||
| +      && (registered_forks > 0))
 | ||||
| +    {
 | ||||
| +	  printf ("FAILED fork called for WRDE_NOCMD\n");
 | ||||
| +	  return 1;
 | ||||
| +    }
 | ||||
| +
 | ||||
|    if (tc->flags & WRDE_DOOFFS) | ||||
|        start_offs = sav_we.we_offs; | ||||
|   | ||||
| diff --git a/posix/wordexp.c b/posix/wordexp.c
 | ||||
| index b6b65dd..26f3a26 100644
 | ||||
| --- a/posix/wordexp.c
 | ||||
| +++ b/posix/wordexp.c
 | ||||
| @@ -893,6 +893,10 @@ exec_comm (char *comm, char **word, size_t *word_length, size_t *max_length,
 | ||||
|    pid_t pid; | ||||
|    int noexec = 0; | ||||
|   | ||||
| +  /* Do nothing if command substitution should not succeed.  */
 | ||||
| +  if (flags & WRDE_NOCMD)
 | ||||
| +    return WRDE_CMDSUB;
 | ||||
| +
 | ||||
|    /* Don't fork() unless necessary */ | ||||
|    if (!comm || !*comm) | ||||
|      return 0; | ||||
| @@ -2082,9 +2086,6 @@ parse_dollars (char **word, size_t *word_length, size_t *max_length,
 | ||||
|  	    } | ||||
|  	} | ||||
|   | ||||
| -      if (flags & WRDE_NOCMD)
 | ||||
| -	return WRDE_CMDSUB;
 | ||||
| -
 | ||||
|        (*offset) += 2; | ||||
|        return parse_comm (word, word_length, max_length, words, offset, flags, | ||||
|  			 quoted? NULL : pwordexp, ifs, ifs_white); | ||||
| @@ -2196,9 +2197,6 @@ parse_dquote (char **word, size_t *word_length, size_t *max_length,
 | ||||
|  	  break; | ||||
|   | ||||
|  	case '`': | ||||
| -	  if (flags & WRDE_NOCMD)
 | ||||
| -	    return WRDE_CMDSUB;
 | ||||
| -
 | ||||
|  	  ++(*offset); | ||||
|  	  error = parse_backtick (word, word_length, max_length, words, | ||||
|  				  offset, flags, NULL, NULL, NULL); | ||||
| @@ -2357,12 +2355,6 @@ wordexp (const char *words, wordexp_t *pwordexp, int flags)
 | ||||
|  	break; | ||||
|   | ||||
|        case '`': | ||||
| -	if (flags & WRDE_NOCMD)
 | ||||
| -	  {
 | ||||
| -	    error = WRDE_CMDSUB;
 | ||||
| -	    goto do_error;
 | ||||
| -	  }
 | ||||
| -
 | ||||
|  	++words_offset; | ||||
|  	error = parse_backtick (&word, &word_length, &max_length, words, | ||||
|  				&words_offset, flags, pwordexp, ifs, | ||||
							
								
								
									
										45
									
								
								gnu/packages/patches/glibc-mips-dangling-vfork-ref.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								gnu/packages/patches/glibc-mips-dangling-vfork-ref.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,45 @@ | |||
| Avoid a dangling `vfork@GLIBC_2.0' reference on MIPS. | ||||
| 
 | ||||
| Note: Here the ChangeLog and NEWS updates are removed from Maciej's | ||||
|       patch, since they depend on other earlier commits. | ||||
| 
 | ||||
| From: Maciej W. Rozycki <macro@codesourcery.com> | ||||
| Date: Wed, 22 Oct 2014 14:20:37 +0000 (+0100) | ||||
| Subject: MIPS: Avoid a dangling `vfork@GLIBC_2.0' reference | ||||
| X-Git-Url: https://sourceware.org/git/?p=glibc.git;a=commitdiff_plain;h=c14e752fc73d34c75d4f84f37fea8e0b1734cf98 | ||||
| 
 | ||||
| MIPS: Avoid a dangling `vfork@GLIBC_2.0' reference | ||||
| 
 | ||||
| This satisfies a symbol reference created with: | ||||
| 
 | ||||
| 	.symver	__libc_vfork, vfork@GLIBC_2.0 | ||||
| 
 | ||||
| where `__libc_vfork' has not been defined or referenced.  In this case | ||||
| the `vfork@GLIBC_2.0' reference is supposed to be discarded, however a | ||||
| bug present in GAS since forever causes an undefined symbol table entry | ||||
| to be created.  This in turn triggers a problem in the linker that can | ||||
| manifest itself by link errors such as: | ||||
| 
 | ||||
| ld: libpthread.so: invalid string offset 2765592330 >= 5154 for section `.dynstr' | ||||
| 
 | ||||
| The GAS and linker bugs need to be resolved, but we can avoid them too | ||||
| by providing a `__libc_vfork' definition just like our other platforms. | ||||
| 
 | ||||
| 	[BZ #17485] | ||||
| 	* sysdeps/unix/sysv/linux/mips/vfork.S (__libc_vfork): Define. | ||||
| 
 | ||||
| (cherry picked from commit b5af9297d51a43f96c5be1bafab032184690dd6f) | ||||
| 
 | ||||
| Conflicts: | ||||
| 	NEWS | ||||
| ---
 | ||||
| 
 | ||||
| diff --git a/sysdeps/unix/sysv/linux/mips/vfork.S b/sysdeps/unix/sysv/linux/mips/vfork.S
 | ||||
| index 80c362d..2c1a747 100644
 | ||||
| --- a/sysdeps/unix/sysv/linux/mips/vfork.S
 | ||||
| +++ b/sysdeps/unix/sysv/linux/mips/vfork.S
 | ||||
| @@ -108,3 +108,4 @@ L(error):
 | ||||
|   | ||||
|  libc_hidden_def(__vfork) | ||||
|  weak_alias (__vfork, vfork) | ||||
| +strong_alias (__vfork, __libc_vfork)
 | ||||
							
								
								
									
										21
									
								
								gnu/packages/patches/gmp-arm-asm-nothumb.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								gnu/packages/patches/gmp-arm-asm-nothumb.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,21 @@ | |||
| 
 | ||||
| # HG changeset patch | ||||
| # User Torbjorn Granlund <tege@gmplib.org> | ||||
| # Date 1396602422 -7200 | ||||
| # Node ID 676e2d0f0e4dd301a7066079d2c9326c25c34a40 | ||||
| # Parent  0194a75b56b21a9196626430af86c5bd9110c42d | ||||
| Conditionalise ARM asm on !__thumb__. | ||||
| 
 | ||||
| diff -r 0194a75b56b2 -r 676e2d0f0e4d mpn/generic/div_qr_1n_pi1.c
 | ||||
| --- a/mpn/generic/div_qr_1n_pi1.c	Thu Apr 03 23:58:51 2014 +0200
 | ||||
| +++ b/mpn/generic/div_qr_1n_pi1.c	Fri Apr 04 11:07:02 2014 +0200
 | ||||
| @@ -130,7 +130,7 @@
 | ||||
|  	     "%2" ((UDItype)(a0)), "r" ((UDItype)(b0)) __CLOBBER_CC) | ||||
|  #endif | ||||
|   | ||||
| -#if defined (__arm__) && W_TYPE_SIZE == 32
 | ||||
| +#if defined (__arm__) && !defined (__thumb__) && W_TYPE_SIZE == 32
 | ||||
|  #define add_mssaaaa(m, sh, sl, ah, al, bh, bl)				\ | ||||
|    __asm__ (  "adds	%2, %5, %6\n\t"					\ | ||||
|  	     "adcs	%1, %3, %4\n\t"					\ | ||||
| 
 | ||||
							
								
								
									
										203
									
								
								gnu/packages/patches/guile-arm-fixes.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										203
									
								
								gnu/packages/patches/guile-arm-fixes.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,203 @@ | |||
| Apply fixes for ARM to Guile. | ||||
| 
 | ||||
| From df8c52e93dfa3965e4714275f4b8cea2c8e0170b Mon Sep 17 00:00:00 2001 | ||||
| From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= <ludo@gnu.org> | ||||
| Date: Fri, 4 Jul 2014 15:35:06 +0200 | ||||
| Subject: [PATCH] Recognize arm-* target triplets. | ||||
| 
 | ||||
| Reported by Sylvain Beucler <beuc@beuc.net>. | ||||
| 
 | ||||
| * module/system/base/target.scm (cpu-endianness): Add case where CPU is | ||||
|   "arm". | ||||
| * test-suite/tests/asm-to-bytecode.test ("cross-compilation")["arm-unknown-linux-androideabi"]: | ||||
|   New test. | ||||
| ---
 | ||||
|  module/system/base/target.scm         | 4 +++- | ||||
|  test-suite/tests/asm-to-bytecode.test | 5 ++++- | ||||
|  2 files changed, 7 insertions(+), 2 deletions(-) | ||||
| 
 | ||||
| diff --git a/module/system/base/target.scm b/module/system/base/target.scm
 | ||||
| index c74ae67..cefa951 100644
 | ||||
| --- a/module/system/base/target.scm
 | ||||
| +++ b/module/system/base/target.scm
 | ||||
| @@ -1,6 +1,6 @@
 | ||||
|  ;;; Compilation targets | ||||
|   | ||||
| -;; Copyright (C) 2011, 2012, 2013 Free Software Foundation, Inc.
 | ||||
| +;; Copyright (C) 2011, 2012, 2013, 2014 Free Software Foundation, Inc.
 | ||||
|   | ||||
|  ;; This library is free software; you can redistribute it and/or | ||||
|  ;; modify it under the terms of the GNU Lesser General Public | ||||
| @@ -72,6 +72,8 @@
 | ||||
|               (endianness big)) | ||||
|              ((string-match "^arm.*el" cpu) | ||||
|               (endianness little)) | ||||
| +            ((string=? "arm" cpu)                ;ARMs are LE by default
 | ||||
| +             (endianness little))
 | ||||
|              (else | ||||
|               (error "unknown CPU endianness" cpu))))) | ||||
|   | ||||
| diff --git a/test-suite/tests/asm-to-bytecode.test b/test-suite/tests/asm-to-bytecode.test
 | ||||
| index 6d2f20e..62ea0ed 100644
 | ||||
| --- a/test-suite/tests/asm-to-bytecode.test
 | ||||
| +++ b/test-suite/tests/asm-to-bytecode.test
 | ||||
| @@ -1,6 +1,6 @@
 | ||||
|  ;;;; Assembly to bytecode compilation -*- mode: scheme; coding: utf-8; -*- | ||||
|  ;;;; | ||||
| -;;;; 	Copyright (C) 2010, 2011, 2012, 2013 Free Software Foundation, Inc.
 | ||||
| +;;;; 	Copyright (C) 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc.
 | ||||
|  ;;;; | ||||
|  ;;;; This library is free software; you can redistribute it and/or | ||||
|  ;;;; modify it under the terms of the GNU Lesser General Public | ||||
| @@ -205,6 +205,9 @@
 | ||||
|    (test-target "x86_64-unknown-linux-gnux32"      ; x32 ABI (Debian tuplet) | ||||
|                 (endianness little) 4) | ||||
|   | ||||
| +  (test-target "arm-unknown-linux-androideabi"
 | ||||
| +               (endianness little) 4)
 | ||||
| +
 | ||||
|    (pass-if-exception "unknown target" | ||||
|      exception:miscellaneous-error | ||||
|      (call-with-values (lambda () | ||||
| -- 
 | ||||
| 2.1.2 | ||||
| 
 | ||||
| From ffd3e55cfd12a3559621e3130d613d319243512d Mon Sep 17 00:00:00 2001 | ||||
| From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= <ludo@gnu.org> | ||||
| Date: Fri, 4 Jul 2014 17:26:41 +0200 | ||||
| Subject: [PATCH] Recognize more ARM targets. | ||||
| 
 | ||||
| Suggested by Dale P. Smith. | ||||
| 
 | ||||
| * module/system/base/target.scm (cpu-endianness): Add cases for | ||||
|   "arm.*eb", "^aarch64.*be", and "aarch64".  Change "arm" case to | ||||
|   "arm.*". | ||||
|   (triplet-pointer-size): Allow underscore as in 'aarch64_be'. | ||||
| * test-suite/tests/asm-to-bytecode.test ("cross-compilation")["armeb-unknown-linux-gnu", | ||||
|   "aarch64-linux-gnu", "aarch64_be-linux-gnu"]: New tests. | ||||
| ---
 | ||||
|  module/system/base/target.scm         | 10 ++++++++-- | ||||
|  test-suite/tests/asm-to-bytecode.test |  6 ++++++ | ||||
|  2 files changed, 14 insertions(+), 2 deletions(-) | ||||
| 
 | ||||
| diff --git a/module/system/base/target.scm b/module/system/base/target.scm
 | ||||
| index cefa951..31e3fea 100644
 | ||||
| --- a/module/system/base/target.scm
 | ||||
| +++ b/module/system/base/target.scm
 | ||||
| @@ -72,7 +72,13 @@
 | ||||
|               (endianness big)) | ||||
|              ((string-match "^arm.*el" cpu) | ||||
|               (endianness little)) | ||||
| -            ((string=? "arm" cpu)                ;ARMs are LE by default
 | ||||
| +            ((string-match "^arm.*eb" cpu)
 | ||||
| +             (endianness big))
 | ||||
| +            ((string-prefix? "arm" cpu)          ;ARMs are LE by default
 | ||||
| +             (endianness little))
 | ||||
| +            ((string-match "^aarch64.*be" cpu)
 | ||||
| +             (endianness big))
 | ||||
| +            ((string=? "aarch64" cpu)
 | ||||
|               (endianness little)) | ||||
|              (else | ||||
|               (error "unknown CPU endianness" cpu))))) | ||||
| @@ -97,7 +103,7 @@
 | ||||
|            ((string-match "^x86_64-.*-gnux32" triplet) 4)  ; x32 | ||||
|   | ||||
|            ((string-match "64$" cpu) 8) | ||||
| -          ((string-match "64[lbe][lbe]$" cpu) 8)
 | ||||
| +          ((string-match "64_?[lbe][lbe]$" cpu) 8)
 | ||||
|            ((member cpu '("sparc" "powerpc" "mips" "mipsel")) 4) | ||||
|            ((string-match "^arm.*" cpu) 4) | ||||
|            (else (error "unknown CPU word size" cpu))))) | ||||
| diff --git a/test-suite/tests/asm-to-bytecode.test b/test-suite/tests/asm-to-bytecode.test
 | ||||
| index 62ea0ed..8aeba84 100644
 | ||||
| --- a/test-suite/tests/asm-to-bytecode.test
 | ||||
| +++ b/test-suite/tests/asm-to-bytecode.test
 | ||||
| @@ -207,6 +207,12 @@
 | ||||
|   | ||||
|    (test-target "arm-unknown-linux-androideabi" | ||||
|                 (endianness little) 4) | ||||
| +  (test-target "armeb-unknown-linux-gnu"
 | ||||
| +               (endianness big) 4)
 | ||||
| +  (test-target "aarch64-linux-gnu"
 | ||||
| +               (endianness little) 8)
 | ||||
| +  (test-target "aarch64_be-linux-gnu"
 | ||||
| +               (endianness big) 8)
 | ||||
|   | ||||
|    (pass-if-exception "unknown target" | ||||
|      exception:miscellaneous-error | ||||
| -- 
 | ||||
| 2.1.2 | ||||
| 
 | ||||
| From a85c78ea1393985fdb6e6678dea19135c553d341 Mon Sep 17 00:00:00 2001 | ||||
| From: Mark H Weaver <mhw@netris.org> | ||||
| Date: Fri, 19 Sep 2014 21:18:09 -0400 | ||||
| Subject: [PATCH] VM: ASM_MUL for ARM: Add earlyclobber constraint to the SMULL | ||||
|  outputs. | ||||
| 
 | ||||
| Reported by Rob Browning <rlb@defaultvalue.org>. | ||||
| 
 | ||||
| * libguile/vm-i-scheme.c (ASM_MUL)[ARM]: Add earlyclobber (&) constraint | ||||
|   to the SMULL output registers. | ||||
| ---
 | ||||
|  libguile/vm-i-scheme.c | 5 ++--- | ||||
|  1 file changed, 2 insertions(+), 3 deletions(-) | ||||
| 
 | ||||
| diff --git a/libguile/vm-i-scheme.c b/libguile/vm-i-scheme.c
 | ||||
| index 587aa95..162efab 100644
 | ||||
| --- a/libguile/vm-i-scheme.c
 | ||||
| +++ b/libguile/vm-i-scheme.c
 | ||||
| @@ -1,5 +1,4 @@
 | ||||
| -/* Copyright (C) 2001, 2009, 2010, 2011, 2012, 2013,
 | ||||
| - *   2014 Free Software Foundation, Inc.
 | ||||
| +/* Copyright (C) 2001, 2009-2014 Free Software Foundation, Inc.
 | ||||
|   *  | ||||
|   * This library is free software; you can redistribute it and/or | ||||
|   * modify it under the terms of the GNU Lesser General Public License | ||||
| @@ -363,7 +362,7 @@ VM_DEFINE_FUNCTION (149, ge, "ge?", 2)
 | ||||
|        {									\ | ||||
|  	scm_t_signed_bits rlo, rhi;					\ | ||||
|  	asm ("smull %0, %1, %2, %3\n"					\ | ||||
| -	     : "=r" (rlo), "=r" (rhi)					\
 | ||||
| +	     : "=&r" (rlo), "=&r" (rhi)					\
 | ||||
|  	     : "r" (SCM_UNPACK (x) - scm_tc2_int),			\ | ||||
|  	       "r" (SCM_I_INUM (y)));					\ | ||||
|  	if (SCM_LIKELY (SCM_SRS (rlo, 31) == rhi))			\ | ||||
| -- 
 | ||||
| 2.1.2 | ||||
| 
 | ||||
| From bed025bd2569b1c033f24d7d9e660e39ebf65cac Mon Sep 17 00:00:00 2001 | ||||
| From: Mark H Weaver <mhw@netris.org> | ||||
| Date: Sat, 20 Sep 2014 03:59:51 -0400 | ||||
| Subject: [PATCH] VM: Allow the C compiler to choose FP_REG on ARM. | ||||
| 
 | ||||
| Reported by Rob Browning <rlb@defaultvalue.org>. | ||||
| 
 | ||||
| * libguile/vm-engine.h (IP_REG)[__arm__]: Remove explicit register | ||||
|   choice ("r7") for FP_REG, which was reported to cause compilation | ||||
|   failures on ARM. | ||||
| ---
 | ||||
|  libguile/vm-engine.h | 4 ++-- | ||||
|  1 file changed, 2 insertions(+), 2 deletions(-) | ||||
| 
 | ||||
| diff --git a/libguile/vm-engine.h b/libguile/vm-engine.h
 | ||||
| index 46d4cff..e618be7 100644
 | ||||
| --- a/libguile/vm-engine.h
 | ||||
| +++ b/libguile/vm-engine.h
 | ||||
| @@ -1,4 +1,4 @@
 | ||||
| -/* Copyright (C) 2001, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
 | ||||
| +/* Copyright (C) 2001, 2009-2012, 2014 Free Software Foundation, Inc.
 | ||||
|   *  | ||||
|   * This library is free software; you can redistribute it and/or | ||||
|   * modify it under the terms of the GNU Lesser General Public License | ||||
| @@ -81,7 +81,7 @@
 | ||||
|  #ifdef __arm__ | ||||
|  #define IP_REG asm("r9") | ||||
|  #define SP_REG asm("r8") | ||||
| -#define FP_REG asm("r7")
 | ||||
| +#define FP_REG
 | ||||
|  #endif | ||||
|  #endif | ||||
|   | ||||
| -- 
 | ||||
| 2.1.2 | ||||
| 
 | ||||
|  | @ -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 | ||||
|  |  | |||
							
								
								
									
										473
									
								
								gnu/packages/patches/patchelf-rework-for-arm.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										473
									
								
								gnu/packages/patches/patchelf-rework-for-arm.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,473 @@ | |||
| Rework the growing algorithm in patchelf to support ARM systems. | ||||
| See <https://github.com/NixOS/patchelf/issues/8>. | ||||
| This patch copied from: | ||||
| <https://github.com/sriemer/patchelf/commit/0a96239cea6b97b9a0fff80da576e58ca2dfb2a2> | ||||
| 
 | ||||
| From 0a96239cea6b97b9a0fff80da576e58ca2dfb2a2 Mon Sep 17 00:00:00 2001 | ||||
| From: Sebastian Parschauer <s.parschauer@gmx.de> | ||||
| Date: Sat, 28 Jun 2014 01:24:57 +0200 | ||||
| Subject: [PATCH] Rework the growing algorithm | ||||
| 
 | ||||
| On ARM systems there is no space in virtual memory for another LOAD | ||||
| area in front of the code LOAD area. So insert data to its end | ||||
| instead. At this location there should be enough space in virtual | ||||
| memory due to alignment. We can extend it until the end of the | ||||
| alignment but the file shift may be greater as it must be aligned | ||||
| to the page size. Do the same for the data LOAD area. | ||||
| ---
 | ||||
|  src/patchelf.cc | 357 ++++++++++++++++++++++---------------------------------- | ||||
|  1 file changed, 142 insertions(+), 215 deletions(-) | ||||
| 
 | ||||
| diff --git a/src/patchelf.cc b/src/patchelf.cc
 | ||||
| index dcbfd38..4fce9e6 100644
 | ||||
| --- a/src/patchelf.cc
 | ||||
| +++ b/src/patchelf.cc
 | ||||
| @@ -116,7 +116,11 @@ private:
 | ||||
|   | ||||
|      void sortShdrs(); | ||||
|   | ||||
| -    void shiftFile(unsigned int extraPages, Elf_Addr startPage);
 | ||||
| +    void shiftFileSingle(size_t fileShift, Elf_Off insertOff);
 | ||||
| +
 | ||||
| +    void shiftFile(size_t neededCode, size_t neededData,
 | ||||
| +                   Elf_Off codeOff[], Elf_Off dataOff[],
 | ||||
| +                   Elf_Addr *codePage, Elf_Addr *dataPage);
 | ||||
|   | ||||
|      string getSectionName(const Elf_Shdr & shdr); | ||||
|   | ||||
| @@ -130,13 +134,11 @@ private:
 | ||||
|          unsigned int size); | ||||
|   | ||||
|      void writeReplacedSections(Elf_Off & curOff, | ||||
| -        Elf_Addr startAddr, Elf_Off startOffset);
 | ||||
| +        Elf_Addr startAddr, Elf_Off startOffset, bool isData);
 | ||||
|   | ||||
|      void rewriteHeaders(Elf_Addr phdrAddress); | ||||
|   | ||||
| -    void rewriteSectionsLibrary();
 | ||||
| -
 | ||||
| -    void rewriteSectionsExecutable();
 | ||||
| +    void rewriteSectionsBinary();
 | ||||
|   | ||||
|  public: | ||||
|   | ||||
| @@ -391,46 +393,119 @@ static unsigned int roundUp(unsigned int n, unsigned int m)
 | ||||
|   | ||||
|   | ||||
|  template<ElfFileParams> | ||||
| -void ElfFile<ElfFileParamNames>::shiftFile(unsigned int extraPages, Elf_Addr startPage)
 | ||||
| +void ElfFile<ElfFileParamNames>::shiftFileSingle(size_t fileShift,
 | ||||
| +        Elf_Off insertOff)
 | ||||
|  { | ||||
| -    /* Move the entire contents of the file `extraPages' pages
 | ||||
| -       further. */
 | ||||
|      unsigned int oldSize = fileSize; | ||||
| -    unsigned int shift = extraPages * pageSize;
 | ||||
| -    growFile(fileSize + extraPages * pageSize);
 | ||||
| -    memmove(contents + extraPages * pageSize, contents, oldSize);
 | ||||
| -    memset(contents + sizeof(Elf_Ehdr), 0, shift - sizeof(Elf_Ehdr));
 | ||||
| +
 | ||||
| +    /* Grow at the end */
 | ||||
| +    growFile(fileSize + fileShift);
 | ||||
| +
 | ||||
| +    /* move the data from the insertion point
 | ||||
| +       to the end and zero inserted space */
 | ||||
| +    memmove(contents + insertOff + fileShift,
 | ||||
| +            contents + insertOff, oldSize - insertOff);
 | ||||
| +    memset(contents + insertOff, 0, fileShift);
 | ||||
|   | ||||
|      /* Adjust the ELF header. */ | ||||
|      wri(hdr->e_phoff, sizeof(Elf_Ehdr)); | ||||
| -    wri(hdr->e_shoff, rdi(hdr->e_shoff) + shift);
 | ||||
| +    if (rdi(hdr->e_shoff) >= insertOff)
 | ||||
| +        wri(hdr->e_shoff, rdi(hdr->e_shoff) + fileShift);
 | ||||
|   | ||||
|      /* Update the offsets in the section headers. */ | ||||
| -    for (int i = 1; i < rdi(hdr->e_shnum); ++i)
 | ||||
| -        wri(shdrs[i].sh_offset, rdi(shdrs[i].sh_offset) + shift);
 | ||||
| +    for (int i = 1; i < rdi(hdr->e_shnum); ++i) {
 | ||||
| +        if (rdi(shdrs[i].sh_offset) >= insertOff)
 | ||||
| +            wri(shdrs[i].sh_offset, rdi(shdrs[i].sh_offset) + fileShift);
 | ||||
| +    }
 | ||||
|   | ||||
|      /* Update the offsets in the program headers. */ | ||||
|      for (int i = 0; i < rdi(hdr->e_phnum); ++i) { | ||||
| -        wri(phdrs[i].p_offset, rdi(phdrs[i].p_offset) + shift);
 | ||||
| -        if (rdi(phdrs[i].p_align) != 0 &&
 | ||||
| -            (rdi(phdrs[i].p_vaddr) - rdi(phdrs[i].p_offset)) % rdi(phdrs[i].p_align) != 0) {
 | ||||
| -            debug("changing alignment of program header %d from %d to %d\n", i,
 | ||||
| -                rdi(phdrs[i].p_align), pageSize);
 | ||||
| -            wri(phdrs[i].p_align, pageSize);
 | ||||
| +        if (rdi(phdrs[i].p_offset) >= insertOff)
 | ||||
| +            wri(phdrs[i].p_offset, rdi(phdrs[i].p_offset) + fileShift);
 | ||||
| +        /* Check for ELF load command alignment issue the same
 | ||||
| +           way as glibc/elf/dl-load.c does. This gives us the
 | ||||
| +           chance to run an interpreter explicitly. */
 | ||||
| +        if (rdi(phdrs[i].p_type) == PT_LOAD && ((rdi(phdrs[i].p_vaddr) -
 | ||||
| +          rdi(phdrs[i].p_offset)) & (rdi(phdrs[i].p_align) - 1)) != 0) {
 | ||||
| +             debug("changing alignment of program header %d from %d to %d\n",
 | ||||
| +                   i, rdi(phdrs[i].p_align), pageSize);
 | ||||
| +             wri(phdrs[i].p_align, pageSize);
 | ||||
|          } | ||||
|      } | ||||
| +}
 | ||||
| +
 | ||||
| +template<ElfFileParams>
 | ||||
| +void ElfFile<ElfFileParamNames>::shiftFile(size_t neededCode,
 | ||||
| +        size_t neededData, Elf_Off codeOff[], Elf_Off dataOff[],
 | ||||
| +        Elf_Addr *codePage, Elf_Addr *dataPage)
 | ||||
| +{
 | ||||
| +    /* Move some contents of the file further. The binary has one LOAD area
 | ||||
| +     * for code and one for data. There is virtual memory space between
 | ||||
| +     * these which we can use due to alignment.
 | ||||
| +     */
 | ||||
| +    unsigned int memShift = neededCode;
 | ||||
| +    unsigned int fileShift = roundUp(neededCode, pageSize);
 | ||||
| +    unsigned int maxMemShift = 0;
 | ||||
| +
 | ||||
| +    if (neededCode > 0) {
 | ||||
| +        /* find the LOAD program header for code and extend it */
 | ||||
| +        for (int i = 0; i < rdi(hdr->e_phnum); ++i) {
 | ||||
| +            if (rdi(phdrs[i].p_type) == PT_LOAD &&
 | ||||
| +              rdi(phdrs[i].p_flags) & PF_X) {
 | ||||
| +                codeOff[1] = rdi(phdrs[i].p_filesz);
 | ||||
| +                codeOff[0] = codeOff[1] + rdi(phdrs[i].p_offset);
 | ||||
| +                maxMemShift = rdi(phdrs[i].p_memsz) % rdi(phdrs[i].p_align);
 | ||||
| +                if (maxMemShift == 0)
 | ||||
| +                    continue;
 | ||||
| +                maxMemShift = rdi(phdrs[i].p_align) - maxMemShift;
 | ||||
| +                if (maxMemShift == 0 || memShift > maxMemShift)
 | ||||
| +                    continue;
 | ||||
| +                *codePage = rdi(phdrs[i].p_vaddr);
 | ||||
| +                wri(phdrs[i].p_filesz, rdi(phdrs[i].p_filesz) + memShift);
 | ||||
| +                wri(phdrs[i].p_memsz, rdi(phdrs[i].p_memsz) + memShift);
 | ||||
| +                break;
 | ||||
| +            }
 | ||||
| +        }
 | ||||
| +        debug("codeOff: %#lx, memShift: %d, maxMemShift: %d, fileShift: %d\n",
 | ||||
| +              codeOff[1], memShift, maxMemShift, fileShift);
 | ||||
| +        if (codeOff[1] == 0 || maxMemShift == 0)
 | ||||
| +            goto out;
 | ||||
| +
 | ||||
| +        shiftFileSingle(fileShift, codeOff[0]);
 | ||||
| +    }
 | ||||
| +
 | ||||
| +    /* +++ Do the same for the data LOAD area  +++ */
 | ||||
| +    memShift = neededData;
 | ||||
| +    fileShift = roundUp(neededData, pageSize);
 | ||||
| +    maxMemShift = 0;
 | ||||
| +    if (neededData > 0) {
 | ||||
| +        /* find the LOAD program header for data and extend it */
 | ||||
| +        for (int i = 0; i < rdi(hdr->e_phnum); ++i) {
 | ||||
| +            if (rdi(phdrs[i].p_type) == PT_LOAD &&
 | ||||
| +              rdi(phdrs[i].p_flags) & PF_W) {
 | ||||
| +                dataOff[1] = rdi(phdrs[i].p_filesz);
 | ||||
| +                dataOff[0] = dataOff[1] + rdi(phdrs[i].p_offset);
 | ||||
| +                maxMemShift = rdi(phdrs[i].p_memsz) % rdi(phdrs[i].p_align);
 | ||||
| +                if (maxMemShift == 0)
 | ||||
| +                    continue;
 | ||||
| +                maxMemShift = rdi(phdrs[i].p_align) - maxMemShift;
 | ||||
| +                if (maxMemShift == 0 || memShift > maxMemShift)
 | ||||
| +                    continue;
 | ||||
| +                *dataPage = rdi(phdrs[i].p_vaddr);
 | ||||
| +                wri(phdrs[i].p_filesz, rdi(phdrs[i].p_filesz) + memShift);
 | ||||
| +                wri(phdrs[i].p_memsz, rdi(phdrs[i].p_memsz) + memShift);
 | ||||
| +                break;
 | ||||
| +            }
 | ||||
| +        }
 | ||||
| +        debug("dataOff: %#lx, memShift: %d, maxMemShift: %d, fileShift: %d\n",
 | ||||
| +              dataOff[1], memShift, maxMemShift, fileShift);
 | ||||
| +        if (dataOff[1] == 0 || maxMemShift == 0)
 | ||||
| +            goto out;
 | ||||
|   | ||||
| -    /* Add a segment that maps the new program/section headers and
 | ||||
| -       PT_INTERP segment into memory.  Otherwise glibc will choke. */
 | ||||
| -    phdrs.resize(rdi(hdr->e_phnum) + 1);
 | ||||
| -    wri(hdr->e_phnum, rdi(hdr->e_phnum) + 1);
 | ||||
| -    Elf_Phdr & phdr = phdrs[rdi(hdr->e_phnum) - 1];
 | ||||
| -    wri(phdr.p_type, PT_LOAD);
 | ||||
| -    wri(phdr.p_offset, 0);
 | ||||
| -    wri(phdr.p_vaddr, wri(phdr.p_paddr, startPage));
 | ||||
| -    wri(phdr.p_filesz, wri(phdr.p_memsz, shift));
 | ||||
| -    wri(phdr.p_flags, PF_R | PF_W);
 | ||||
| -    wri(phdr.p_align, pageSize);
 | ||||
| +        shiftFileSingle(fileShift, dataOff[0]);
 | ||||
| +    }
 | ||||
| +out:
 | ||||
| +    return;
 | ||||
|  } | ||||
|   | ||||
|   | ||||
| @@ -491,7 +566,7 @@ string & ElfFile<ElfFileParamNames>::replaceSection(const SectionName & sectionN
 | ||||
|   | ||||
|  template<ElfFileParams> | ||||
|  void ElfFile<ElfFileParamNames>::writeReplacedSections(Elf_Off & curOff, | ||||
| -    Elf_Addr startAddr, Elf_Off startOffset)
 | ||||
| +    Elf_Addr startAddr, Elf_Off startOffset, bool isData = false)
 | ||||
|  { | ||||
|      /* Overwrite the old section contents with 'X's.  Do this | ||||
|         *before* writing the new section contents (below) to prevent | ||||
| @@ -501,6 +576,9 @@ void ElfFile<ElfFileParamNames>::writeReplacedSections(Elf_Off & curOff,
 | ||||
|      { | ||||
|          string sectionName = i->first; | ||||
|          Elf_Shdr & shdr = findSection(sectionName); | ||||
| +        if ((!isData && rdi(shdr.sh_flags) & SHF_WRITE) ||
 | ||||
| +         (isData && ~(rdi(shdr.sh_flags)) & SHF_WRITE))
 | ||||
| +            continue;
 | ||||
|          memset(contents + rdi(shdr.sh_offset), 'X', rdi(shdr.sh_size)); | ||||
|      } | ||||
|   | ||||
| @@ -509,6 +587,9 @@ void ElfFile<ElfFileParamNames>::writeReplacedSections(Elf_Off & curOff,
 | ||||
|      { | ||||
|          string sectionName = i->first; | ||||
|          Elf_Shdr & shdr = findSection(sectionName); | ||||
| +        if ((!isData && rdi(shdr.sh_flags) & SHF_WRITE) ||
 | ||||
| +         (isData && ~(rdi(shdr.sh_flags)) & SHF_WRITE))
 | ||||
| +            continue;
 | ||||
|          debug("rewriting section `%s' from offset 0x%x (size %d) to offset 0x%x (size %d)\n", | ||||
|              sectionName.c_str(), rdi(shdr.sh_offset), rdi(shdr.sh_size), curOff, i->second.size()); | ||||
|   | ||||
| @@ -546,201 +627,47 @@ void ElfFile<ElfFileParamNames>::writeReplacedSections(Elf_Off & curOff,
 | ||||
|          curOff += roundUp(i->second.size(), sectionAlignment); | ||||
|      } | ||||
|   | ||||
| -    replacedSections.clear();
 | ||||
| +    if (isData)
 | ||||
| +        replacedSections.clear();
 | ||||
|  } | ||||
|   | ||||
|   | ||||
|  template<ElfFileParams> | ||||
| -void ElfFile<ElfFileParamNames>::rewriteSectionsLibrary()
 | ||||
| +void ElfFile<ElfFileParamNames>::rewriteSectionsBinary()
 | ||||
|  { | ||||
| -    /* For dynamic libraries, we just place the replacement sections
 | ||||
| -       at the end of the file.  They're mapped into memory by a
 | ||||
| -       PT_LOAD segment located directly after the last virtual address
 | ||||
| -       page of other segments. */
 | ||||
| -    Elf_Addr startPage = 0;
 | ||||
| -    for (unsigned int i = 0; i < phdrs.size(); ++i) {
 | ||||
| -        Elf_Addr thisPage = roundUp(rdi(phdrs[i].p_vaddr) + rdi(phdrs[i].p_memsz), pageSize);
 | ||||
| -        if (thisPage > startPage) startPage = thisPage;
 | ||||
| -    }
 | ||||
| -
 | ||||
| -    debug("last page is 0x%llx\n", (unsigned long long) startPage);
 | ||||
| +    Elf_Off codeOff[2] = {0}, dataOff[2] = {0};
 | ||||
| +    Elf_Addr codePage = 0, dataPage = 0;
 | ||||
| +    size_t neededCode = 0, neededData = 0, oldCode = 0, oldData = 0;
 | ||||
| +    Elf_Shdr shdr = findSection(".text");
 | ||||
| +    Elf_Addr firstPage = rdi(shdr.sh_addr) - rdi(shdr.sh_offset);
 | ||||
|   | ||||
| +    debug("first page is 0x%llx\n", (unsigned long long) firstPage);
 | ||||
|   | ||||
| -    /* Compute the total space needed for the replaced sections and
 | ||||
| -       the program headers. */
 | ||||
| -    off_t neededSpace = (phdrs.size() + 1) * sizeof(Elf_Phdr);
 | ||||
| +    /* Compute the total space needed for the replaced sections */
 | ||||
|      for (ReplacedSections::iterator i = replacedSections.begin(); | ||||
| -         i != replacedSections.end(); ++i)
 | ||||
| -        neededSpace += roundUp(i->second.size(), sectionAlignment);
 | ||||
| -    debug("needed space is %d\n", neededSpace);
 | ||||
| -
 | ||||
| -
 | ||||
| -    size_t startOffset = roundUp(fileSize, pageSize);
 | ||||
| -
 | ||||
| -    growFile(startOffset + neededSpace);
 | ||||
| -
 | ||||
| -
 | ||||
| -    /* Even though this file is of type ET_DYN, it could actually be
 | ||||
| -       an executable.  For instance, Gold produces executables marked
 | ||||
| -       ET_DYN.  In that case we can still hit the kernel bug that
 | ||||
| -       necessitated rewriteSectionsExecutable().  However, such
 | ||||
| -       executables also tend to start at virtual address 0, so
 | ||||
| -       rewriteSectionsExecutable() won't work because it doesn't have
 | ||||
| -       any virtual address space to grow downwards into.  As a
 | ||||
| -       workaround, make sure that the virtual address of our new
 | ||||
| -       PT_LOAD segment relative to the first PT_LOAD segment is equal
 | ||||
| -       to its offset; otherwise we hit the kernel bug.  This may
 | ||||
| -       require creating a hole in the executable.  The bigger the size
 | ||||
| -       of the uninitialised data segment, the bigger the hole. */
 | ||||
| -    if (isExecutable) {
 | ||||
| -        if (startOffset >= startPage) {
 | ||||
| -            debug("shifting new PT_LOAD segment by %d bytes to work around a Linux kernel bug\n", startOffset - startPage);
 | ||||
| -        } else {
 | ||||
| -            size_t hole = startPage - startOffset;
 | ||||
| -            /* Print a warning, because the hole could be very big. */
 | ||||
| -            fprintf(stderr, "warning: working around a Linux kernel bug by creating a hole of %zu bytes in ‘%s’\n", hole, fileName.c_str());
 | ||||
| -            assert(hole % pageSize == 0);
 | ||||
| -            /* !!! We could create an actual hole in the file here,
 | ||||
| -               but it's probably not worth the effort. */
 | ||||
| -            growFile(fileSize + hole);
 | ||||
| -            startOffset += hole;
 | ||||
| -        }
 | ||||
| -        startPage = startOffset;
 | ||||
| -    }
 | ||||
| -
 | ||||
| -
 | ||||
| -    /* Add a segment that maps the replaced sections and program
 | ||||
| -       headers into memory. */
 | ||||
| -    phdrs.resize(rdi(hdr->e_phnum) + 1);
 | ||||
| -    wri(hdr->e_phnum, rdi(hdr->e_phnum) + 1);
 | ||||
| -    Elf_Phdr & phdr = phdrs[rdi(hdr->e_phnum) - 1];
 | ||||
| -    wri(phdr.p_type, PT_LOAD);
 | ||||
| -    wri(phdr.p_offset, startOffset);
 | ||||
| -    wri(phdr.p_vaddr, wri(phdr.p_paddr, startPage));
 | ||||
| -    wri(phdr.p_filesz, wri(phdr.p_memsz, neededSpace));
 | ||||
| -    wri(phdr.p_flags, PF_R | PF_W);
 | ||||
| -    wri(phdr.p_align, pageSize);
 | ||||
| -
 | ||||
| -
 | ||||
| -    /* Write out the replaced sections. */
 | ||||
| -    Elf_Off curOff = startOffset + phdrs.size() * sizeof(Elf_Phdr);
 | ||||
| -    writeReplacedSections(curOff, startPage, startOffset);
 | ||||
| -    assert((off_t) curOff == startOffset + neededSpace);
 | ||||
| -
 | ||||
| -
 | ||||
| -    /* Move the program header to the start of the new area. */
 | ||||
| -    wri(hdr->e_phoff, startOffset);
 | ||||
| -
 | ||||
| -    rewriteHeaders(startPage);
 | ||||
| -}
 | ||||
| -
 | ||||
| -
 | ||||
| -template<ElfFileParams>
 | ||||
| -void ElfFile<ElfFileParamNames>::rewriteSectionsExecutable()
 | ||||
| -{
 | ||||
| -    /* Sort the sections by offset, otherwise we won't correctly find
 | ||||
| -       all the sections before the last replaced section. */
 | ||||
| -    sortShdrs();
 | ||||
| -
 | ||||
| -
 | ||||
| -    /* What is the index of the last replaced section? */
 | ||||
| -    unsigned int lastReplaced = 0;
 | ||||
| -    for (unsigned int i = 1; i < rdi(hdr->e_shnum); ++i) {
 | ||||
| -        string sectionName = getSectionName(shdrs[i]);
 | ||||
| -        if (replacedSections.find(sectionName) != replacedSections.end()) {
 | ||||
| -            debug("using replaced section `%s'\n", sectionName.c_str());
 | ||||
| -            lastReplaced = i;
 | ||||
| -        }
 | ||||
| -    }
 | ||||
| -
 | ||||
| -    assert(lastReplaced != 0);
 | ||||
| -
 | ||||
| -    debug("last replaced is %d\n", lastReplaced);
 | ||||
| -
 | ||||
| -    /* Try to replace all sections before that, as far as possible.
 | ||||
| -       Stop when we reach an irreplacable section (such as one of type
 | ||||
| -       SHT_PROGBITS).  These cannot be moved in virtual address space
 | ||||
| -       since that would invalidate absolute references to them. */
 | ||||
| -    assert(lastReplaced + 1 < shdrs.size()); /* !!! I'm lazy. */
 | ||||
| -    size_t startOffset = rdi(shdrs[lastReplaced + 1].sh_offset);
 | ||||
| -    Elf_Addr startAddr = rdi(shdrs[lastReplaced + 1].sh_addr);
 | ||||
| -    string prevSection;
 | ||||
| -    for (unsigned int i = 1; i <= lastReplaced; ++i) {
 | ||||
| -        Elf_Shdr & shdr(shdrs[i]);
 | ||||
| -        string sectionName = getSectionName(shdr);
 | ||||
| -        debug("looking at section `%s'\n", sectionName.c_str());
 | ||||
| -        /* !!! Why do we stop after a .dynstr section? I can't
 | ||||
| -           remember! */
 | ||||
| -        if ((rdi(shdr.sh_type) == SHT_PROGBITS && sectionName != ".interp")
 | ||||
| -            || prevSection == ".dynstr")
 | ||||
| -        {
 | ||||
| -            startOffset = rdi(shdr.sh_offset);
 | ||||
| -            startAddr = rdi(shdr.sh_addr);
 | ||||
| -            lastReplaced = i - 1;
 | ||||
| -            break;
 | ||||
| +         i != replacedSections.end(); ++i) {
 | ||||
| +        shdr = findSection(i->first);
 | ||||
| +        if (rdi(shdr.sh_flags) & SHF_WRITE) {
 | ||||
| +            oldData += rdi(shdr.sh_size);
 | ||||
| +            neededData += roundUp(i->second.size(), sectionAlignment);
 | ||||
|          } else { | ||||
| -            if (replacedSections.find(sectionName) == replacedSections.end()) {
 | ||||
| -                debug("replacing section `%s' which is in the way\n", sectionName.c_str());
 | ||||
| -                replaceSection(sectionName, rdi(shdr.sh_size));
 | ||||
| -            }
 | ||||
| +            oldCode += rdi(shdr.sh_size);
 | ||||
| +            neededCode += roundUp(i->second.size(), sectionAlignment);
 | ||||
|          } | ||||
| -        prevSection = sectionName;
 | ||||
|      } | ||||
|   | ||||
| -    debug("first reserved offset/addr is 0x%x/0x%llx\n",
 | ||||
| -        startOffset, (unsigned long long) startAddr);
 | ||||
| -
 | ||||
| -    assert(startAddr % pageSize == startOffset % pageSize);
 | ||||
| -    Elf_Addr firstPage = startAddr - startOffset;
 | ||||
| -    debug("first page is 0x%llx\n", (unsigned long long) firstPage);
 | ||||
| -
 | ||||
| -    /* Right now we assume that the section headers are somewhere near
 | ||||
| -       the end, which appears to be the case most of the time.
 | ||||
| -       Therefore they're not accidentally overwritten by the replaced
 | ||||
| -       sections. !!!  Fix this. */
 | ||||
| -    assert((off_t) rdi(hdr->e_shoff) >= startOffset);
 | ||||
| -
 | ||||
| -
 | ||||
| -    /* Compute the total space needed for the replaced sections, the
 | ||||
| -       ELF header, and the program headers. */
 | ||||
| -    size_t neededSpace = sizeof(Elf_Ehdr) + phdrs.size() * sizeof(Elf_Phdr);
 | ||||
| -    for (ReplacedSections::iterator i = replacedSections.begin();
 | ||||
| -         i != replacedSections.end(); ++i)
 | ||||
| -        neededSpace += roundUp(i->second.size(), sectionAlignment);
 | ||||
| -
 | ||||
| -    debug("needed space is %d\n", neededSpace);
 | ||||
| -
 | ||||
| -    /* If we need more space at the start of the file, then grow the
 | ||||
| -       file by the minimum number of pages and adjust internal
 | ||||
| -       offsets. */
 | ||||
| -    if (neededSpace > startOffset) {
 | ||||
| -
 | ||||
| -        /* We also need an additional program header, so adjust for that. */
 | ||||
| -        neededSpace += sizeof(Elf_Phdr);
 | ||||
| -        debug("needed space is %d\n", neededSpace);
 | ||||
| -
 | ||||
| -        unsigned int neededPages = roundUp(neededSpace - startOffset, pageSize) / pageSize;
 | ||||
| -        debug("needed pages is %d\n", neededPages);
 | ||||
| -        if (neededPages * pageSize > firstPage)
 | ||||
| -            error("virtual address space underrun!");
 | ||||
| -
 | ||||
| -        firstPage -= neededPages * pageSize;
 | ||||
| -        startOffset += neededPages * pageSize;
 | ||||
| -
 | ||||
| -        shiftFile(neededPages, firstPage);
 | ||||
| -    }
 | ||||
| -
 | ||||
| -
 | ||||
| -    /* Clear out the free space. */
 | ||||
| -    Elf_Off curOff = sizeof(Elf_Ehdr) + phdrs.size() * sizeof(Elf_Phdr);
 | ||||
| -    debug("clearing first %d bytes\n", startOffset - curOff);
 | ||||
| -    memset(contents + curOff, 0, startOffset - curOff);
 | ||||
| +    debug("needed space is C: %d, D: %d\n", neededCode, neededData);
 | ||||
|   | ||||
| +    /* If we need more space within the file, then grow the
 | ||||
| +       file and adjust internal offsets. */
 | ||||
| +    shiftFile(neededCode, neededData, codeOff, dataOff, &codePage,
 | ||||
| +              &dataPage);
 | ||||
| +    assert(codeOff[0] > 0);
 | ||||
|   | ||||
|      /* Write out the replaced sections. */ | ||||
| -    writeReplacedSections(curOff, firstPage, 0);
 | ||||
| -    assert((off_t) curOff == neededSpace);
 | ||||
| -
 | ||||
| +    debug("codePage: %#lx, dataPage: %#lx\n", codePage, dataPage);
 | ||||
| +    writeReplacedSections(codeOff[0], codePage + codeOff[1], codeOff[0]);
 | ||||
| +    writeReplacedSections(dataOff[0], dataPage + dataOff[1], dataOff[0], true);
 | ||||
|   | ||||
|      rewriteHeaders(firstPage + rdi(hdr->e_phoff)); | ||||
|  } | ||||
| @@ -758,10 +685,10 @@ void ElfFile<ElfFileParamNames>::rewriteSections()
 | ||||
|   | ||||
|      if (rdi(hdr->e_type) == ET_DYN) { | ||||
|          debug("this is a dynamic library\n"); | ||||
| -        rewriteSectionsLibrary();
 | ||||
| +        rewriteSectionsBinary();
 | ||||
|      } else if (rdi(hdr->e_type) == ET_EXEC) { | ||||
|          debug("this is an executable\n"); | ||||
| -        rewriteSectionsExecutable();
 | ||||
| +        rewriteSectionsBinary();
 | ||||
|      } else error("unknown ELF type"); | ||||
|  } | ||||
|   | ||||
| -- 
 | ||||
| 2.1.2 | ||||
| 
 | ||||
|  | @ -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") | ||||
| 
 | ||||
|  | ||||
|  |  | |||
		Reference in a new issue