aboutsummaryrefslogtreecommitdiff
path: root/gnu/packages
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages')
-rw-r--r--gnu/packages/audio.scm24
-rw-r--r--gnu/packages/autotools.scm7
-rw-r--r--gnu/packages/base.scm13
-rw-r--r--gnu/packages/cmake.scm14
-rw-r--r--gnu/packages/commencement.scm66
-rw-r--r--gnu/packages/cross-base.scm2
-rw-r--r--gnu/packages/gcc.scm63
-rw-r--r--gnu/packages/ld-wrapper.in89
-rw-r--r--gnu/packages/ld-wrapper2.in207
-rw-r--r--gnu/packages/patches/cmake-fix-tests.patch40
-rw-r--r--gnu/packages/patches/gcc-libvtv-runpath.patch15
-rw-r--r--gnu/packages/patches/perl-module-pluggable-search.patch25
-rw-r--r--gnu/packages/patches/qt5-conflicting-typedefs.patch70
-rw-r--r--gnu/packages/perl.scm4
-rw-r--r--gnu/packages/qt.scm3
-rw-r--r--gnu/packages/rdf.scm22
-rw-r--r--gnu/packages/wxwidgets.scm3
17 files changed, 331 insertions, 336 deletions
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index 572155b386..6cba704b6d 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -520,7 +520,18 @@ synchronous execution of all clients, and low latency operation.")
(arguments
`(#:tests? #f ; no check target
#:configure-flags '("--dbus"
- "--alsa")))
+ "--alsa")
+ #:phases
+ (modify-phases %standard-phases
+ (add-before
+ 'configure 'set-linkflags
+ (lambda _
+ ;; Add $libdir to the RUNPATH of all the binaries.
+ (substitute* "wscript"
+ ((".*CFLAGS.*-Wall.*" m)
+ (string-append m
+ " conf.env.append_unique('LINKFLAGS',"
+ "'-Wl,-rpath=" %output "/lib')\n"))))))))
(inputs
`(("alsa-lib" ,alsa-lib)
("dbus" ,dbus)
@@ -702,7 +713,16 @@ implementation of the Open Sound Control (OSC) protocol.")
(base32
"0aj2plkx56iar8vzjbq2l7hi7sp0ml99m0h44rgwai2x4vqkk2j2"))))
(build-system waf-build-system)
- (arguments `(#:tests? #f)) ; no check target
+ (arguments
+ `(#:tests? #f ; no check target
+ #:phases
+ (modify-phases %standard-phases
+ (add-before
+ 'configure 'set-ldflags
+ (lambda* (#:key outputs #:allow-other-keys)
+ (setenv "LDFLAGS"
+ (string-append "-Wl,-rpath="
+ (assoc-ref outputs "out") "/lib")))))))
;; required by lilv-0.pc
(propagated-inputs
`(("serd" ,serd)
diff --git a/gnu/packages/autotools.scm b/gnu/packages/autotools.scm
index bc2b20ed46..24ff90cc5c 100644
--- a/gnu/packages/autotools.scm
+++ b/gnu/packages/autotools.scm
@@ -303,12 +303,7 @@ complexity of working with shared libraries across platforms.")
version ".tar.xz"))
(sha256
(base32
- "0vxj52zm709125gwv9qqlw02silj8bnjnh4y07arrz60r31ai1vw"))
-
- ;; FIXME: We don't need this patch here, we just keep it to
- ;; avoid a rebuild today.
- (patches
- (list (search-patch "libtool-skip-tests.patch")))))
+ "0vxj52zm709125gwv9qqlw02silj8bnjnh4y07arrz60r31ai1vw"))))
(build-system gnu-build-system)
(arguments
'(#:configure-flags '("--enable-ltdl-install") ;really install it
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index 361436157d..c6206fdce2 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -34,6 +34,7 @@
#:use-module (gnu packages linux)
#:use-module (gnu packages texinfo)
#:use-module (gnu packages pkg-config)
+ #:use-module (gnu packages gettext)
#:use-module (guix utils)
#:use-module (guix packages)
#:use-module (guix download)
@@ -568,9 +569,11 @@ store.")
(inputs `(("static-bash" ,(static-package bash-light))))
- ;; To build the manual, we need Texinfo and Perl.
+ ;; To build the manual, we need Texinfo and Perl. Gettext is needed to
+ ;; install the message catalogs, with 'msgfmt'.
(native-inputs `(("texinfo" ,texinfo)
- ("perl" ,perl)))
+ ("perl" ,perl)
+ ("gettext" ,gnu-gettext)))
(native-search-paths
;; Search path for packages that provide locale data. This is useful
@@ -689,7 +692,7 @@ command.")
(define-public tzdata
(package
(name "tzdata")
- (version "2015b")
+ (version "2015c")
(source (origin
(method url-fetch)
(uri (string-append
@@ -697,7 +700,7 @@ command.")
version ".tar.gz"))
(sha256
(base32
- "0qmdr1yqqn94b5a54axwszfzimyxg27i6xsfmp0sswd3nfjw2sjm"))))
+ "0nin48g5dmkfgckp25bngxchn3sw3yyjss5sq7gs5xspbxgsq3w6"))))
(build-system gnu-build-system)
(arguments
'(#:tests? #f
@@ -744,7 +747,7 @@ command.")
version ".tar.gz"))
(sha256
(base32
- "0xjxlgzva13y8qi3vfbb3nq5pii8ax9wi4yc7vj9134rbciz2s76"))))))
+ "0bplibiy70dvlrhwqzkzxgmg81j6d2kklvjgi2f1g2zz1nkb3vkz"))))))
(home-page "http://www.iana.org/time-zones")
(synopsis "Database of current and historical time zones")
(description "The Time Zone Database (often called tz or zoneinfo)
diff --git a/gnu/packages/cmake.scm b/gnu/packages/cmake.scm
index 1fb9241596..6f8b9f67e3 100644
--- a/gnu/packages/cmake.scm
+++ b/gnu/packages/cmake.scm
@@ -3,6 +3,7 @@
;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net>
+;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -35,7 +36,7 @@
(define-public cmake
(package
(name "cmake")
- (version "3.1.3")
+ (version "3.2.2")
(source (origin
(method url-fetch)
(uri (string-append
@@ -43,11 +44,12 @@
(version-major+minor version)
"/cmake-" version ".tar.gz"))
(sha256
- (base32 "1l662p9lscbzx9s85y86cynb9fn1rb2alqg4584wqq9gibxd7x25"))
+ (base32 "0y3w83al0vh9ll7fnqm3nx7l8hsl85k8iv9abxb791q36rp4xsdd"))
(patches (list (search-patch "cmake-fix-tests.patch")))))
(build-system gnu-build-system)
(arguments
`(#:test-target "test"
+ #:parallel-tests? #f ; 3 test from RunCMake fails
#:phases (alist-cons-before
'configure 'patch-bin-sh
(lambda _
@@ -66,7 +68,8 @@
"Utilities/cmbzip2/Makefile-libbz2_so"
"Utilities/Release/release_cmake.cmake"
"Utilities/cmlibarchive/libarchive/archive_write_set_format_shar.c"
- "Tests/CMakeLists.txt")
+ "Tests/CMakeLists.txt"
+ "Tests/RunCMake/File_Generate/RunCMakeTest.cmake")
(("/bin/sh") (which "sh"))))
(alist-cons-before
'configure 'set-paths
@@ -74,7 +77,9 @@
;; Help cmake's bootstrap process to find system libraries
(begin
(setenv "CMAKE_LIBRARY_PATH" (getenv "LIBRARY_PATH"))
- (setenv "CMAKE_INCLUDE_PATH" (getenv "CPATH"))))
+ (setenv "CMAKE_INCLUDE_PATH" (getenv "CPATH"))
+ ;; Get verbose output from failed tests
+ (setenv "CTEST_OUTPUT_ON_FAILURE" "TRUE")))
(alist-replace
'configure
(lambda* (#:key outputs #:allow-other-keys)
@@ -83,6 +88,7 @@
"./configure"
(string-append "--prefix=" out)
"--system-libs"
+ "--no-system-jsoncpp" ; not packaged yet
;; By default, the man pages and other docs land
;; in PREFIX/man and PREFIX/doc, but we want them
;; in share/{man,doc}. Note that unlike
diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm
index 4a9fc5b205..da1b1ffd98 100644
--- a/gnu/packages/commencement.scm
+++ b/gnu/packages/commencement.scm
@@ -31,6 +31,7 @@
#:use-module (gnu packages gawk)
#:use-module (gnu packages bison)
#:use-module (gnu packages guile)
+ #:use-module (gnu packages gettext)
#:use-module (gnu packages multiprecision)
#:use-module (gnu packages compression)
#:use-module (gnu packages perl)
@@ -157,8 +158,6 @@
(srfi srfi-1)
(srfi srfi-26))
,@(substitute-keyword-arguments (package-arguments gcc-4.8)
- ((#:validate-runpath? _)
- #t)
((#:configure-flags flags)
`(append (list ,(string-append "--target=" (boot-triplet))
@@ -418,6 +417,40 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
'("gcc" "libc")))
(current-source-location)))))
+(define gettext-boot0
+ ;; A minimal gettext used during bootstrap.
+ (let ((gettext-minimal
+ (package (inherit gnu-gettext)
+ (name "gettext-boot0")
+ (inputs '()) ;zero dependencies
+ (arguments
+ (substitute-keyword-arguments
+ `(#:tests? #f
+ ,@(package-arguments gnu-gettext))
+ ((#:phases phases)
+ `(modify-phases ,phases
+ ;; Build only the tools.
+ (add-after 'unpack 'chdir
+ (lambda _
+ (chdir "gettext-tools")))
+
+ ;; Some test programs require pthreads, which we don't have.
+ (add-before 'configure 'no-test-programs
+ (lambda _
+ (substitute* "tests/Makefile.in"
+ (("^PROGRAMS =.*$")
+ "PROGRAMS =\n"))
+ #t))
+
+ ;; Don't try to link against libexpat.
+ (delete 'link-expat)
+ (delete 'patch-tests))))))))
+ (package-with-bootstrap-guile
+ (package-with-explicit-inputs gettext-minimal
+ %boot1-inputs
+ (current-source-location)
+ #:guile %bootstrap-guile))))
+
(define-public glibc-final
;; The final glibc, which embeds the statically-linked Bash built above.
(package (inherit glibc-final-with-bootstrap-bash)
@@ -427,6 +460,10 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
"static-bash"
(package-inputs glibc-final-with-bootstrap-bash))))
+ ;; This time we need 'msgfmt' to install all the libc.mo files.
+ (native-inputs `(,@(package-native-inputs glibc-final-with-bootstrap-bash)
+ ("gettext" ,gettext-boot0)))
+
;; The final libc only refers to itself, but the 'debug' output contains
;; references to GCC-BOOT0 and to the Linux headers. XXX: Would be great
;; if 'allowed-references' were per-output.
@@ -501,6 +538,11 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
#:allowed-references ("out" "lib" ,glibc-final)
+ ;; Things like libasan.so and libstdc++.so NEED ld.so for some
+ ;; reason, but it is not in their RUNPATH. This is a false
+ ;; positive, so turn it off.
+ #:validate-runpath? #f
+
;; Build again GMP & co. within GCC's build process, because it's hard
;; to do outside (because GCC-BOOT0 is a cross-compiler, and thus
;; doesn't honor $LIBRARY_PATH, which breaks `gnu-build-system'.)
@@ -525,11 +567,6 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
"/lib")
flag))
,flags)))
- ((#:validate-runpath? _)
- ;; Things like libasan.so and libstdc++.so NEED ld.so and/or
- ;; libgcc_s.so but RUNPATH is empty. This is a false positive, so
- ;; turn it off.
- #f)
((#:phases phases)
`(alist-delete 'symlink-libgcc_eh ,phases)))))
@@ -708,19 +745,6 @@ COREUTILS-FINAL vs. COREUTILS, etc."
;;; GCC toolchain.
;;;
-(define (fixed-ld-wrapper)
- ;; FIXME: In this cycle, a bug was introduced in ld-wrapper: it would
- ;; incorrectly flag ~/.guix-profile/lib/libfoo.so as "impure", due to a bug
- ;; in its symlink resolution code. To work around that while avoiding a
- ;; full rebuild, use an ld-wrapper with the bug-fix for 'gcc-toolchain'.
- (let ((orig (car (assoc-ref %final-inputs "ld-wrapper"))))
- (package
- (inherit orig)
- (location (source-properties->location (current-source-location)))
- (inputs `(("wrapper" ,(search-path %load-path
- "gnu/packages/ld-wrapper2.in"))
- ,@(package-inputs orig))))))
-
(define (gcc-toolchain gcc)
"Return a complete toolchain for GCC."
(package
@@ -759,7 +783,7 @@ and binaries, plus debugging symbols in the 'debug' output), and Binutils.")
;; install everything that we need, and (2) to make sure ld-wrapper comes
;; before Binutils' ld in the user's profile.
(inputs `(("gcc" ,gcc)
- ("ld-wrapper" ,(fixed-ld-wrapper))
+ ("ld-wrapper" ,(car (assoc-ref %final-inputs "ld-wrapper")))
("binutils" ,binutils-final)
("libc" ,glibc-final)
("libc-debug" ,glibc-final "debug")))))
diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index 01cfdf73e8..9a459400e8 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -175,8 +175,6 @@ may be either a libc package or #f.)"
#t)))
,phases)
phases)))
- ((#:validate-runpath? _)
- #t)
((#:strip-binaries? _)
;; Disable stripping as this can break binaries, with object files of
;; libgcc.a showing up as having an unknown architecture. See
diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm
index e712e43b1f..c368b7df97 100644
--- a/gnu/packages/gcc.scm
+++ b/gnu/packages/gcc.scm
@@ -190,10 +190,6 @@ where the OS part is overloaded to denote a specific ABI---into GCC
#:tests? #f
- ;; libstdc++.so NEEDs libgcc_s.so but somehow it doesn't get
- ;; $(libdir) in its RUNPATH, so turn it off.
- #:validate-runpath? #f
-
#:phases
(alist-cons-before
'configure 'pre-configure
@@ -252,6 +248,13 @@ where the OS part is overloaded to denote a specific ABI---into GCC
(("static char const sed_cmd_z\\[\\] =.*;")
"static char const sed_cmd_z[] = \"sed\";"))
+ ;; Add a RUNPATH to libstdc++.so so that it finds libgcc_s.
+ ;; See <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=32354>
+ ;; and <http://bugs.gnu.org/20358>.
+ (substitute* "libstdc++-v3/src/Makefile.in"
+ (("^OPT_LDFLAGS = ")
+ "OPT_LDFLAGS = -Wl,-rpath=$(libdir) "))
+
;; Move libstdc++*-gdb.py to the "lib" output to avoid a
;; circularity between "out" and "lib". (Note:
;; --with-python-dir is useless because it imposes $(prefix) as
@@ -304,37 +307,43 @@ Go. It also includes runtime support libraries for these languages.")
(package (inherit gcc-4.7)
(version "4.8.4")
(source (origin
- (method url-fetch)
- (uri (string-append "mirror://gnu/gcc/gcc-"
- version "/gcc-" version ".tar.bz2"))
- (sha256
- (base32
- "15c6gwm6dzsaagamxkak5smdkf1rdfbqqjs9jdbrp3lbg4ism02a"))
- (patches (list (search-patch "gcc-arm-link-spec-fix.patch")))))))
+ (method url-fetch)
+ (uri (string-append "mirror://gnu/gcc/gcc-"
+ version "/gcc-" version ".tar.bz2"))
+ (sha256
+ (base32
+ "15c6gwm6dzsaagamxkak5smdkf1rdfbqqjs9jdbrp3lbg4ism02a"))
+
+ ;; ARM 'link' spec issue reported at
+ ;; <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65711> and
+ ;; <https://gcc.gnu.org/ml/gcc-patches/2015-04/msg01387.html>.
+ (patches (list (search-patch "gcc-arm-link-spec-fix.patch")))))))
(define-public gcc-4.9
- (package (inherit gcc-4.7)
+ (package (inherit gcc-4.8)
(version "4.9.2")
(source (origin
- (method url-fetch)
- (uri (string-append "mirror://gnu/gcc/gcc-"
- version "/gcc-" version ".tar.bz2"))
- (sha256
- (base32
- "1pbjp4blk2ycaa6r3jmw4ky5f1s9ji3klbqgv8zs2sl5jn1cj810"))
- (patches (list (search-patch "gcc-arm-link-spec-fix.patch")))))))
+ (method url-fetch)
+ (uri (string-append "mirror://gnu/gcc/gcc-"
+ version "/gcc-" version ".tar.bz2"))
+ (sha256
+ (base32
+ "1pbjp4blk2ycaa6r3jmw4ky5f1s9ji3klbqgv8zs2sl5jn1cj810"))
+ (patches (map search-patch
+ '("gcc-arm-link-spec-fix.patch"
+ "gcc-libvtv-runpath.patch")))))))
(define-public gcc-5.1
- (package (inherit gcc-4.7)
+ (package (inherit gcc-4.9)
(version "5.1.0")
(source (origin
- (method url-fetch)
- (uri (string-append "mirror://gnu/gcc/gcc-"
- version "/gcc-" version ".tar.bz2"))
- (sha256
- (base32
- "1bd5vj4px3s8nlakbgrh38ynxq4s654m6nxz7lrj03mvkkwgvnmp"))
- (patches (list (search-patch "gcc-arm-link-spec-fix.patch")))))))
+ (method url-fetch)
+ (uri (string-append "mirror://gnu/gcc/gcc-"
+ version "/gcc-" version ".tar.bz2"))
+ (sha256
+ (base32
+ "1bd5vj4px3s8nlakbgrh38ynxq4s654m6nxz7lrj03mvkkwgvnmp"))
+ (patches (origin-patches (package-source gcc-4.9)))))))
(define* (custom-gcc gcc name languages #:key (separate-lib-output? #t))
"Return a custom version of GCC that supports LANGUAGES."
diff --git a/gnu/packages/ld-wrapper.in b/gnu/packages/ld-wrapper.in
index 094018de3d..db662e7d76 100644
--- a/gnu/packages/ld-wrapper.in
+++ b/gnu/packages/ld-wrapper.in
@@ -92,34 +92,32 @@ exec @GUILE@ -c "(load-compiled \"@SELF@.go\") (apply $main (cdr (command-line))
(let loop ((file file)
(depth 0))
- (catch 'system-error
- (lambda ()
- (if (>= depth %max-symlink-depth)
- file
- (loop (readlink file) (+ depth 1))))
- (lambda args
- (if (= EINVAL (system-error-errno args))
- file
- (apply throw args))))))
-
-(define (dereference-symlinks file)
- ;; Same as 'readlink*' but return FILE if the symlink target is invalid or
- ;; FILE does not exist.
- (catch 'system-error
- (lambda ()
- ;; When used from a user environment, FILE may refer to
- ;; ~/.guix-profile/lib/libfoo.so, which is itself a symlink to the
- ;; store. Check whether this is the case.
- (readlink* file))
- (lambda args
- (if (= ENOENT (system-error-errno args))
- file
- (apply throw args)))))
+ (define (absolute target)
+ (if (absolute-file-name? target)
+ target
+ (string-append (dirname file) "/" target)))
+
+ (if (>= depth %max-symlink-depth)
+ file
+ (call-with-values
+ (lambda ()
+ (catch 'system-error
+ (lambda ()
+ (values #t (readlink file)))
+ (lambda args
+ (let ((errno (system-error-errno args)))
+ (if (or (= errno EINVAL) (= errno ENOENT))
+ (values #f file)
+ (apply throw args))))))
+ (lambda (success? target)
+ (if success?
+ (loop (absolute target) (+ depth 1))
+ file))))))
(define (pure-file-name? file)
;; Return #t when FILE is the name of a file either within the store
;; (possibly via a symlink) or within the build directory.
- (let ((file (dereference-symlinks file)))
+ (let ((file (readlink* file)))
(or (not (string-prefix? "/" file))
(string-prefix? %store-directory file)
(string-prefix? %temporary-directory file)
@@ -128,7 +126,7 @@ exec @GUILE@ -c "(load-compiled \"@SELF@.go\") (apply $main (cdr (command-line))
(define (store-file-name? file)
;; Return #t when FILE is a store file, possibly indirectly.
- (string-prefix? %store-directory (dereference-symlinks file)))
+ (string-prefix? %store-directory (readlink* file)))
(define (shared-library? file)
;; Return #t when FILE denotes a shared library.
@@ -142,34 +140,45 @@ exec @GUILE@ -c "(load-compiled \"@SELF@.go\") (apply $main (cdr (command-line))
(define (library-files-linked args)
;; Return the file names of shared libraries explicitly linked against via
;; `-l' or with an absolute file name in ARGS.
- (define path+files
+ (define path+files+args
(fold (lambda (argument result)
(match result
- ((library-path . library-files)
+ ((library-path library-files ("-dynamic-linker" . rest))
+ ;; When passed '-dynamic-linker ld.so', ignore 'ld.so'.
+ ;; See <http://bugs.gnu.org/20102>.
+ (list library-path
+ library-files
+ (cons* argument "-dynamic-linker" rest)))
+ ((library-path library-files previous-args)
(cond ((string-prefix? "-L" argument) ;augment the search path
- (cons (append library-path
+ (list (append library-path
(list (string-drop argument 2)))
- library-files))
+ library-files
+ (cons argument previous-args)))
((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)))
+ (list library-path
+ (if full
+ (cons full library-files)
+ library-files)
+ (cons argument previous-args))))
((and (string-prefix? %store-directory argument)
(shared-library? argument)) ;add library
- (cons library-path
- (cons argument library-files)))
+ (list library-path
+ (cons argument library-files)
+ (cons argument previous-args)))
(else
- result)))))
- (cons '() '())
+ (list library-path
+ library-files
+ (cons argument previous-args)))))))
+ (list '() '() '())
args))
- (match path+files
- ((path . files)
+ (match path+files+args
+ ((path files arguments)
(reverse files))))
(define (rpath-arguments library-files)
@@ -202,6 +211,8 @@ impure library ~s~%"
(args (append args (rpath-arguments libs))))
(when %debug?
(format (current-error-port)
+ "ld-wrapper: libraries linked: ~s~%" libs)
+ (format (current-error-port)
"ld-wrapper: invoking `~a' with ~s~%"
%real-ld args))
(apply execl %real-ld (basename %real-ld) args)))
diff --git a/gnu/packages/ld-wrapper2.in b/gnu/packages/ld-wrapper2.in
deleted file mode 100644
index f4ab17c59f..0000000000
--- a/gnu/packages/ld-wrapper2.in
+++ /dev/null
@@ -1,207 +0,0 @@
-#!@BASH@
-# -*- mode: scheme; coding: utf-8; -*-
-
-# XXX: We have to go through Bash because there's no command-line switch to
-# augment %load-compiled-path, and because of the silly 127-byte limit for
-# the shebang line in Linux.
-# Use `load-compiled' because `load' (and `-l') doesn't otherwise load our
-# .go file (see <http://bugs.gnu.org/12519>).
-
-main="(@ (gnu build-support ld-wrapper) ld-wrapper)"
-exec @GUILE@ -c "(load-compiled \"@SELF@.go\") (apply $main (cdr (command-line)))" "$@"
-!#
-;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
-;;;
-;;; This file is part of GNU Guix.
-;;;
-;;; GNU Guix is free software; you can redistribute it and/or modify it
-;;; under the terms of the GNU General Public License as published by
-;;; the Free Software Foundation; either version 3 of the License, or (at
-;;; your option) any later version.
-;;;
-;;; GNU Guix is distributed in the hope that it will be useful, but
-;;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;;; GNU General Public License for more details.
-;;;
-;;; You should have received a copy of the GNU General Public License
-;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
-
-(define-module (gnu build-support ld-wrapper)
- #:use-module (srfi srfi-1)
- #:use-module (ice-9 match)
- #:export (ld-wrapper))
-
-;;; Commentary:
-;;;
-;;; This is a wrapper for the linker. Its purpose is to inspect the -L and
-;;; -l switches passed to the linker, add corresponding -rpath arguments, and
-;;; invoke the actual linker with this new set of arguments.
-;;;
-;;; The alternatives to this hack would be:
-;;;
-;;; 1. Using $LD_RUN_PATH. However, that would tend to include more than
-;;; needed in the RPATH; for instance, given a package with `libfoo' as
-;;; an input, all its binaries would have libfoo in their RPATH,
-;;; regardless of whether they actually NEED it.
-;;;
-;;; 2. Use a GCC "lib" spec string such as `%{L*:-rpath %*}', which adds a
-;;; `-rpath LIBDIR' argument for each occurrence of `-L LIBDIR'.
-;;; However, this doesn't work when $LIBRARY_PATH is used, because the
-;;; additional `-L' switches are not matched by the above rule, because
-;;; the rule only matches explicit user-provided switches. See
-;;; <http://gcc.gnu.org/ml/gcc-help/2012-09/msg00110.html> for details.
-;;;
-;;; As a bonus, this wrapper checks for "impurities"--i.e., references to
-;;; libraries outside the store.
-;;;
-;;; Code:
-
-(define %real-ld
- ;; Name of the linker that we wrap.
- "@LD@")
-
-(define %store-directory
- ;; File name of the store.
- (or (getenv "NIX_STORE") "/gnu/store"))
-
-(define %temporary-directory
- ;; Temporary directory.
- (or (getenv "TMPDIR") "/tmp"))
-
-(define %build-directory
- ;; Top build directory when run from a builder.
- (getenv "NIX_BUILD_TOP"))
-
-(define %allow-impurities?
- ;; Whether to allow references to libraries outside the store.
- (getenv "GUIX_LD_WRAPPER_ALLOW_IMPURITIES"))
-
-(define %debug?
- ;; Whether to emit debugging output.
- (getenv "GUIX_LD_WRAPPER_DEBUG"))
-
-(define %disable-rpath?
- ;; Whether to disable automatic '-rpath' addition.
- (getenv "GUIX_LD_WRAPPER_DISABLE_RPATH"))
-
-(define (readlink* file)
- ;; Call 'readlink' until the result is not a symlink.
- (define %max-symlink-depth 50)
-
- (let loop ((file file)
- (depth 0))
- (define (absolute target)
- (if (absolute-file-name? target)
- target
- (string-append (dirname file) "/" target)))
-
- (if (>= depth %max-symlink-depth)
- file
- (call-with-values
- (lambda ()
- (catch 'system-error
- (lambda ()
- (values #t (readlink file)))
- (lambda args
- (let ((errno (system-error-errno args)))
- (if (or (= errno EINVAL) (= errno ENOENT))
- (values #f file)
- (apply throw args))))))
- (lambda (success? target)
- (if success?
- (loop (absolute target) (+ depth 1))
- file))))))
-
-(define (pure-file-name? file)
- ;; Return #t when FILE is the name of a file either within the store
- ;; (possibly via a symlink) or within the build directory.
- (let ((file (readlink* file)))
- (or (not (string-prefix? "/" file))
- (string-prefix? %store-directory file)
- (string-prefix? %temporary-directory file)
- (and %build-directory
- (string-prefix? %build-directory file)))))
-
-(define (store-file-name? file)
- ;; Return #t when FILE is a store file, possibly indirectly.
- (string-prefix? %store-directory (readlink* file)))
-
-(define (shared-library? file)
- ;; Return #t when FILE denotes a shared library.
- (or (string-suffix? ".so" file)
- (let ((index (string-contains file ".so.")))
- ;; Since we cannot use regexps during bootstrap, roll our own.
- (and index
- (string-every (char-set-union (char-set #\.) char-set:digit)
- (string-drop file (+ index 3)))))))
-
-(define (library-files-linked args)
- ;; Return the file names of shared libraries explicitly linked against via
- ;; `-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)
- (shared-library? argument)) ;add library
- (cons library-path
- (cons argument library-files)))
- (else
- result)))))
- (cons '() '())
- args))
-
- (match path+files
- ((path . files)
- (reverse files))))
-
-(define (rpath-arguments library-files)
- ;; Return the `-rpath' argument list for each of LIBRARY-FILES, a list of
- ;; absolute file names.
- (fold-right (lambda (file args)
- ;; Add '-rpath' if and only if FILE is in the store; we don't
- ;; want to add '-rpath' for files under %BUILD-DIRECTORY or
- ;; %TEMPORARY-DIRECTORY because that could leak to installed
- ;; files.
- (cond ((and (not %disable-rpath?)
- (store-file-name? file))
- (cons* "-rpath" (dirname file) args))
- ((or %allow-impurities?
- (pure-file-name? file))
- args)
- (else
- (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* ((libs (library-files-linked args))
- (args (append args (rpath-arguments libs))))
- (when %debug?
- (format (current-error-port)
- "ld-wrapper: invoking `~a' with ~s~%"
- %real-ld args))
- (apply execl %real-ld (basename %real-ld) args)))
-
-;;; ld-wrapper.scm ends here
diff --git a/gnu/packages/patches/cmake-fix-tests.patch b/gnu/packages/patches/cmake-fix-tests.patch
index 5327f3749a..f59e2cd625 100644
--- a/gnu/packages/patches/cmake-fix-tests.patch
+++ b/gnu/packages/patches/cmake-fix-tests.patch
@@ -1,6 +1,23 @@
---- a/Tests/CMakeLists.txt 2013-03-20 22:57:13.000000000 +0100
-+++ b/Tests/CMakeLists.txt 2013-03-20 22:58:02.000000000 +0100
-@@ -1706,16 +1706,17 @@
+--- cmake-3.2.2.orig/Tests/CMakeLists.txt 2015-04-14 01:09:00.000000000 +0800
++++ cmake-3.2.2/Tests/CMakeLists.txt 2015-04-28 15:02:34.913039742 +0800
+@@ -342,10 +342,12 @@
+ endif()
+
+ # run test for BundleUtilities on supported platforms/compilers
+- if(MSVC OR
+- MINGW OR
+- CMAKE_SYSTEM_NAME MATCHES "Linux" OR
+- CMAKE_SYSTEM_NAME MATCHES "Darwin")
++# if(MSVC OR
++# MINGW OR
++# CMAKE_SYSTEM_NAME MATCHES "Linux" OR
++# CMAKE_SYSTEM_NAME MATCHES "Darwin")
++# This test fails on Guix: skip it.
++ if(FALSE)
+ if(NOT "${CMAKE_GENERATOR}" STREQUAL "Watcom WMake")
+
+ add_test(BundleUtilities ${CMAKE_CTEST_COMMAND}
+@@ -2257,16 +2259,17 @@
PASS_REGULAR_EXPRESSION "Could not find executable"
FAIL_REGULAR_EXPRESSION "SegFault")
@@ -27,19 +44,4 @@
+# PASS_REGULAR_EXPRESSION "Upload\\.xml")
configure_file(
- "${CMake_SOURCE_DIR}/Tests/CTestTestConfigFileInBuildDir/test1.cmake.in"
---- a/Utilities/cmcurl/CMakeLists.txt 2013-03-20 22:57:13.000000000 +0100
-+++ b/Utilities/cmcurl/CMakeLists.txt 2013-03-20 23:08:41.000000000 +0100
-@@ -729,8 +729,9 @@
- ADD_EXECUTABLE(LIBCURL Testing/curltest.c)
- TARGET_LINK_LIBRARIES(LIBCURL cmcurl ${CMAKE_DL_LIBS})
-
--IF(CMAKE_CURL_TEST_URL)
-- ADD_TEST(curl LIBCURL ${CMAKE_CURL_TEST_URL})
--ENDIF(CMAKE_CURL_TEST_URL)
-+# This test requires network connectivity: skip it.
-+#IF(CMAKE_CURL_TEST_URL)
-+# ADD_TEST(curl LIBCURL ${CMAKE_CURL_TEST_URL})
-+#ENDIF(CMAKE_CURL_TEST_URL)
-
- INSTALL(FILES COPYING DESTINATION ${CMake_DOC_DEST}/cmcurl)
+ "${CMake_SOURCE_DIR}/Tests/CTestCoverageCollectGCOV/test.cmake.in"
diff --git a/gnu/packages/patches/gcc-libvtv-runpath.patch b/gnu/packages/patches/gcc-libvtv-runpath.patch
new file mode 100644
index 0000000000..df74363c83
--- /dev/null
+++ b/gnu/packages/patches/gcc-libvtv-runpath.patch
@@ -0,0 +1,15 @@
+GCC 4.9 and later have libvtv and, just like libstdc++ (see
+https://gcc.gnu.org/bugzilla/show_bug.cgi?id=32354), it doesn't
+have $libdir in its RUNPATH, but it NEEDs libgcc_s. This patch
+fixes that.
+
+--- gcc-4.9.2/libvtv/Makefile.in 2014-10-30 09:28:58.000000000 +0100
++++ gcc-4.9.2/libvtv/Makefile.in 2015-04-30 09:51:04.161129705 +0200
+@@ -15,6 +15,7 @@
+
+ @SET_MAKE@
+
++AM_LDFLAGS = -Wl,-rpath=$(libdir)
+
+ VPATH = @srcdir@
+ pkgdatadir = $(datadir)/@PACKAGE@
diff --git a/gnu/packages/patches/perl-module-pluggable-search.patch b/gnu/packages/patches/perl-module-pluggable-search.patch
new file mode 100644
index 0000000000..bb2a57f7e5
--- /dev/null
+++ b/gnu/packages/patches/perl-module-pluggable-search.patch
@@ -0,0 +1,25 @@
+Fix core Perl module Module::Pluggable such that it can find plugins that live
+in symlinked directories.
+
+Patch borrowed/adapted from Nixpkgs.
+
+--- perl-5.16.1/cpan/Module-Pluggable/lib/Module/Pluggable/Object.pm 2015-04-08 23:28:48.120164135 -0500
++++ perl-5.16.1/cpan/Module-Pluggable/lib/Module/Pluggable/Object.pm 2015-04-08 23:30:27.032166704 -0500
+@@ -164,7 +164,7 @@
+ my $sp = catdir($dir, (split /::/, $searchpath));
+
+ # if it doesn't exist or it's not a dir then skip it
+- next unless ( -e $sp && -d _ ); # Use the cached stat the second time
++ next unless ( -e $sp );
+
+ my @files = $self->find_files($sp);
+
+@@ -279,7 +279,7 @@
+ (my $path = $File::Find::name) =~ s#^\\./##;
+ push @files, $path;
+ }
+- }, $search_path );
++ }, "$search_path/." );
+ }
+ #chdir $cwd;
+ return @files;
diff --git a/gnu/packages/patches/qt5-conflicting-typedefs.patch b/gnu/packages/patches/qt5-conflicting-typedefs.patch
new file mode 100644
index 0000000000..751452c2db
--- /dev/null
+++ b/gnu/packages/patches/qt5-conflicting-typedefs.patch
@@ -0,0 +1,70 @@
+See <https://bugreports.qt.io/browse/QTBUG-45205>.
+
+diff --git a/qtwebengine/src/core/chromium_gpu_helper.cpp b/qtwebengine/src/core/chromium_gpu_helper.cpp
+index c7c97e6..ef574ec 100644
+--- a/qtwebengine/src/core/chromium_gpu_helper.cpp
++++ b/qtwebengine/src/core/chromium_gpu_helper.cpp
+@@ -40,13 +40,15 @@
+
+ #include "chromium_gpu_helper.h"
+
+-#include "content/common/gpu/gpu_channel_manager.h"
+-#include "content/common/gpu/sync_point_manager.h"
+-#include "content/gpu/gpu_child_thread.h"
++// Including gpu/command_buffer headers before content/gpu headers makes sure that
++// guards are defined to prevent duplicate definition errors with forward declared
++// GL typedefs cascading through content header includes.
+ #include "gpu/command_buffer/service/mailbox_manager.h"
+ #include "gpu/command_buffer/service/texture_manager.h"
+
+-#include <QtGlobal> // We need this for the Q_OS_QNX define.
++#include "content/common/gpu/gpu_channel_manager.h"
++#include "content/common/gpu/sync_point_manager.h"
++#include "content/gpu/gpu_child_thread.h"
+
+ #ifdef Q_OS_QNX
+ #include "content/common/gpu/stream_texture_qnx.h"
+diff --git a/qtwebengine/src/core/gl_surface_qt.cpp b/qtwebengine/src/core/gl_surface_qt.cpp
+index 4fe2f21..5a27aa9 100644
+--- a/qtwebengine/src/core/gl_surface_qt.cpp
++++ b/qtwebengine/src/core/gl_surface_qt.cpp
+@@ -49,8 +49,6 @@
+ #include "base/logging.h"
+ #include "base/memory/scoped_ptr.h"
+ #include "content/common/gpu/image_transport_surface.h"
+-#include "content/common/gpu/gpu_channel_manager.h"
+-#include "content/common/gpu/gpu_command_buffer_stub.h"
+ #include "ui/gl/egl_util.h"
+ #include "ui/gl/gl_context.h"
+ #include "ui/gl/gl_implementation.h"
+@@ -544,7 +542,9 @@ GLSurface::CreateViewGLSurface(gfx::AcceleratedWidget window)
+ } // namespace gfx
+
+ namespace content {
+-scoped_refptr<gfx::GLSurface> ImageTransportSurface::CreateNativeSurface(GpuChannelManager* manager, GpuCommandBufferStub* stub, const gfx::GLSurfaceHandle& handle)
++class GpuCommandBufferStub;
++class GpuChannelManager;
++scoped_refptr<gfx::GLSurface> ImageTransportSurface::CreateNativeSurface(GpuChannelManager*, GpuCommandBufferStub*, const gfx::GLSurfaceHandle&)
+ {
+ QT_NOT_USED
+ return scoped_refptr<gfx::GLSurface>();
+diff --git a/qtwebengine/src/3rdparty/chromium/gpu/command_buffer/common/gles2_cmd_format.h b/qtwebengine/src/3rdparty/chromium/gpu/command_buffer/common/gles2_cmd_format.h
+index 04a3dc3..506cf00 100644
+--- a/qtwebengine/src/3rdparty/chromium/gpu/command_buffer/common/gles2_cmd_format.h
++++ b/qtwebengine/src/3rdparty/chromium/gpu/command_buffer/common/gles2_cmd_format.h
+@@ -20,6 +20,7 @@
+ #include "gpu/command_buffer/common/cmd_buffer_common.h"
+ #include "gpu/command_buffer/common/gles2_cmd_ids.h"
+
++#ifndef GL_VERSION_1_5
+ // GL types are forward declared to avoid including the GL headers. The problem
+ // is determining which GL headers to include from code that is common to the
+ // client and service sides (GLES2 or one of several GL implementations).
+@@ -47,6 +48,7 @@ typedef signed long long int GLsizeiptr;
+ typedef khronos_intptr_t GLintptr;
+ typedef khronos_ssize_t GLsizeiptr;
+ #endif
++#endif
+
+ namespace gpu {
+ namespace gles2 {
diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm
index e55eb8791d..80c476b2b1 100644
--- a/gnu/packages/perl.scm
+++ b/gnu/packages/perl.scm
@@ -44,7 +44,9 @@
(sha256
(base32
"15qxzba3a50c9nik5ydgyfp62x7h9vxxn12yd1jgl93hb1wj96km"))
- (patches (list (search-patch "perl-no-sys-dirs.patch")))))
+ (patches (map search-patch
+ '("perl-no-sys-dirs.patch"
+ "perl-module-pluggable-search.patch")))))
(build-system gnu-build-system)
(arguments
'(#:tests? #f
diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm
index 8de1ffe398..3bc3145e8d 100644
--- a/gnu/packages/qt.scm
+++ b/gnu/packages/qt.scm
@@ -104,7 +104,8 @@ X11 (yet).")
(sha256
(base32
"0q6qzakq8xihw91xv310qi3vyylq7x2bzdkjgy8sqxii2lgbjzhv"))
- (patches (list (search-patch "qt5-runpath.patch")))
+ (patches (list (search-patch "qt5-conflicting-typedefs.patch")
+ (search-patch "qt5-runpath.patch")))
(snippet
'(begin
;; Remove broken symlinks.
diff --git a/gnu/packages/rdf.scm b/gnu/packages/rdf.scm
index 96a52fd93a..f26b021e50 100644
--- a/gnu/packages/rdf.scm
+++ b/gnu/packages/rdf.scm
@@ -243,7 +243,16 @@ and triple stores.")
(base32
"1gxbzqsm212wmn8qkdd3lbl6wbv7fwmaf9qh2nxa4yxjbr7mylb4"))))
(build-system waf-build-system)
- (arguments `(#:tests? #f)) ; no check target
+ (arguments
+ `(#:tests? #f ; no check target
+ #:phases
+ (modify-phases %standard-phases
+ (add-before
+ 'configure 'set-ldflags
+ (lambda* (#:key outputs #:allow-other-keys)
+ (setenv "LDFLAGS"
+ (string-append "-Wl,-rpath="
+ (assoc-ref outputs "out") "/lib")))))))
(home-page "http://drobilla.net/software/serd/")
(synopsis "Library for RDF syntax supporting Turtle and NTriples")
(description
@@ -268,7 +277,16 @@ ideal (e.g. in LV2 implementations or embedded applications).")
(base32
"0rq7vafdv4vsxi6xk9zf5shr59w3kppdhqbj78185rz5gp9kh1dx"))))
(build-system waf-build-system)
- (arguments `(#:tests? #f)) ; no check target
+ (arguments
+ `(#:tests? #f ; no check target
+ #:phases
+ (modify-phases %standard-phases
+ (add-before
+ 'configure 'set-ldflags
+ (lambda* (#:key outputs #:allow-other-keys)
+ (setenv "LDFLAGS"
+ (string-append "-Wl,-rpath="
+ (assoc-ref outputs "out") "/lib")))))))
(inputs
`(("serd" ,serd)))
(native-inputs
diff --git a/gnu/packages/wxwidgets.scm b/gnu/packages/wxwidgets.scm
index 1f80130198..ee270ff105 100644
--- a/gnu/packages/wxwidgets.scm
+++ b/gnu/packages/wxwidgets.scm
@@ -62,6 +62,9 @@
(arguments
'(#:configure-flags
'("--with-regex=sys" "--with-libmspack" "--with-sdl")
+ #:make-flags
+ (list (string-append "LDFLAGS=-Wl,-rpath="
+ (assoc-ref %outputs "out") "/lib"))
;; No 'check' target.
#:tests? #f))
(home-page "https://www.wxwidgets.org/")