guix: cmake: Add input and package libraries to the rpath, and adapt package

definitions accordingly.

* guix/build/cmake-build-system.scm (configure): Add flags.
* gnu/packages/maths.scm (lapack): Drop special code.
* gnu/packages/ssh.scm (libssh): Drop special code.
* gnu/packages/slim.scm (slim): Drop special code and enable shared library.

Co-authored-by: Eric Bavier <bavier@member.fsf.org>
This commit is contained in:
Andreas Enge 2014-04-27 11:09:07 +02:00
parent 5d17cf8eb9
commit 06ed59825e
4 changed files with 14 additions and 73 deletions

View File

@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU ;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> ;;; Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org> ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
;;; Copyright © 2014 John Darrington <jmd@gnu.org> ;;; Copyright © 2014 John Darrington <jmd@gnu.org>
;;; ;;;
@ -190,43 +190,14 @@ output in text, PostScript, PDF or HTML.")
(inputs `(("fortran" ,gfortran-4.8) (inputs `(("fortran" ,gfortran-4.8)
("python" ,python-2))) ("python" ,python-2)))
(arguments (arguments
`(#:modules ((guix build cmake-build-system) `(#:configure-flags '("-DBUILD_SHARED_LIBS:BOOL=YES")
(guix build utils)
(guix build rpath)
(srfi srfi-1))
#:imported-modules ((guix build cmake-build-system)
(guix build gnu-build-system)
(guix build utils)
(guix build rpath))
#:configure-flags '("-DBUILD_SHARED_LIBS:BOOL=YES")
#:phases (alist-cons-before #:phases (alist-cons-before
'check 'patch-python 'check 'patch-python
(lambda* (#:key inputs #:allow-other-keys) (lambda* (#:key inputs #:allow-other-keys)
(let ((python (assoc-ref inputs "python"))) (let ((python (assoc-ref inputs "python")))
(substitute* "lapack_testing.py" (substitute* "lapack_testing.py"
(("/usr/bin/env python") python)))) (("/usr/bin/env python") python))))
(alist-cons-after %standard-phases)))
'strip 'add-libs-to-runpath
(lambda* (#:key inputs outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(fortran (assoc-ref inputs "fortran"))
(libc (assoc-ref inputs "libc"))
(rpaths `(,(string-append fortran "/lib64")
,(string-append fortran "/lib")
,(string-append libc "/lib")
,(string-append out "/lib"))))
;; Set RUNPATH for all libraries
(with-directory-excursion out
(for-each
(lambda (lib)
(let ((lib-rpaths (file-rpath lib)))
(for-each
(lambda (dir)
(or (member dir lib-rpaths)
(augment-rpath lib dir)))
rpaths)))
(find-files "lib" ".*so$")))))
%standard-phases))))
(synopsis "Library for numerical linear algebra") (synopsis "Library for numerical linear algebra")
(description (description
"LAPACK is a Fortran 90 library for solving the most commonly occurring "LAPACK is a Fortran 90 library for solving the most commonly occurring

View File

@ -1,6 +1,7 @@
;;; GNU Guix --- Functional package management for GNU ;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 Guy Grant <gzg@riseup.net> ;;; Copyright © 2013 Guy Grant <gzg@riseup.net>
;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2014 Andreas Enge <andreas@enge.fr>
;;; ;;;
;;; This file is part of GNU Guix. ;;; This file is part of GNU Guix.
;;; ;;;
@ -75,15 +76,8 @@
;; "systemd". Strip that. ;; "systemd". Strip that.
""))) "")))
%standard-phases) %standard-phases)
#:configure-flags '("-DUSE_PAM=yes" "-DUSE_CONSOLEKIT=no" #:configure-flags '("-DUSE_PAM=yes"
"-DUSE_CONSOLEKIT=no")
;; Don't build libslim.so, because then the build
;; system is unable to set the right RUNPATH on the
;; 'slim' binary.
"-DBUILD_SHARED_LIBS=OFF"
;; Leave a valid RUNPATH upon install.
"-DCMAKE_SKIP_BUILD_RPATH=ON")
#:tests? #f)) #:tests? #f))
(home-page "http://slim.berlios.de/") (home-page "http://slim.berlios.de/")
(synopsis "Desktop-independent graphcal login manager for X11") (synopsis "Desktop-independent graphcal login manager for X11")

View File

@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU ;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> ;;; Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2014 Mark H Weaver <mhw@netris.org> ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
;;; ;;;
;;; This file is part of GNU Guix. ;;; This file is part of GNU Guix.
@ -53,39 +53,10 @@
"1jyaj9h1iglvn02hrvcchbx8ycjpj8b91h8mi459k7q5jp2xgd9b")))) "1jyaj9h1iglvn02hrvcchbx8ycjpj8b91h8mi459k7q5jp2xgd9b"))))
(build-system cmake-build-system) (build-system cmake-build-system)
(arguments (arguments
'(#:configure-flags '("-DWITH_GCRYPT=ON" '(#:configure-flags '("-DWITH_GCRYPT=ON")
;; Leave a valid RUNPATH upon install.
"-DCMAKE_SKIP_BUILD_RPATH=ON")
;; TODO: Add 'CMockery' and '-DWITH_TESTING=ON' for the test suite. ;; TODO: Add 'CMockery' and '-DWITH_TESTING=ON' for the test suite.
#:tests? #f #:tests? #f))
#:modules ((guix build cmake-build-system)
(guix build utils)
(guix build rpath))
#:imported-modules ((guix build gnu-build-system)
(guix build cmake-build-system)
(guix build utils)
(guix build rpath))
#:phases (alist-cons-after
'install 'augment-runpath
(lambda* (#:key outputs #:allow-other-keys)
;; libssh_threads.so NEEDs libssh.so, so add $libdir to its
;; RUNPATH.
(define (dereference file)
(let ((target (false-if-exception (readlink file))))
(if target
(dereference target)
file)))
(let* ((out (assoc-ref outputs "out"))
(lib (string-append out "/lib")))
(with-directory-excursion lib
(augment-rpath (dereference "libssh_threads.so")
lib))))
%standard-phases)))
(inputs `(("zlib" ,zlib) (inputs `(("zlib" ,zlib)
;; Link against an older gcrypt, because libssh tries to access ;; Link against an older gcrypt, because libssh tries to access
;; fields of 'gcry_thread_cbs' that are now private: ;; fields of 'gcry_thread_cbs' that are now private:

View File

@ -1,6 +1,7 @@
;;; GNU Guix --- Functional package management for GNU ;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com> ;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
;;; Copyright © 2014 Andreas Enge <andreas@enge.fr>
;;; ;;;
;;; This file is part of GNU Guix. ;;; This file is part of GNU Guix.
;;; ;;;
@ -48,6 +49,10 @@
(let ((args `(,srcdir (let ((args `(,srcdir
,(string-append "-DCMAKE_INSTALL_PREFIX=" out) ,(string-append "-DCMAKE_INSTALL_PREFIX=" out)
;; add input libraries to rpath
"-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE"
;; add (other) libraries of the project itself to rpath
,(string-append "-DCMAKE_INSTALL_RPATH=" out "/lib")
,@configure-flags))) ,@configure-flags)))
(setenv "CMAKE_LIBRARY_PATH" (getenv "LIBRARY_PATH")) (setenv "CMAKE_LIBRARY_PATH" (getenv "LIBRARY_PATH"))
(setenv "CMAKE_INCLUDE_PATH" (getenv "CPATH")) (setenv "CMAKE_INCLUDE_PATH" (getenv "CPATH"))