gnu: racket: Patch dynamically loaded libraries with absolute paths.
* gnu/packages/scheme.scm (racket)[arguments]: Patch 'ffi-lib' calls to absolute paths in 'pre-configure' phase. Remove 'wrap-programs' phase.master
parent
8d63dddac1
commit
e8c6811bf1
|
@ -408,46 +408,73 @@ implementation techniques and as an expository tool.")
|
|||
(build-system gnu-build-system)
|
||||
(arguments
|
||||
'(#:phases
|
||||
(let* ((gui-libs
|
||||
(lambda (inputs)
|
||||
(define (lib input)
|
||||
(string-append (assoc-ref inputs input) "/lib"))
|
||||
|
||||
(list (lib "glib")
|
||||
(lib "cairo")
|
||||
(lib "pango")
|
||||
(lib "libjpeg")
|
||||
(lib "gtk")
|
||||
(lib "gdk-pixbuf")
|
||||
(lib "fontconfig")
|
||||
(lib "sqlite"))))) ;to build the doc
|
||||
(alist-cons-before
|
||||
'configure 'pre-configure
|
||||
(lambda* (#:key inputs #:allow-other-keys)
|
||||
(chdir "src")
|
||||
|
||||
;; The GUI libs are dynamically opened through the FFI, so they
|
||||
;; must be in the loader's search path.
|
||||
(setenv "LD_LIBRARY_PATH" (string-join (gui-libs inputs) ":")))
|
||||
(alist-cons-after
|
||||
'unpack 'patch-/bin/sh
|
||||
(lambda _
|
||||
(substitute* "collects/racket/system.rkt"
|
||||
(("/bin/sh") (which "sh"))))
|
||||
(alist-cons-after
|
||||
'install 'wrap-programs
|
||||
(lambda* (#:key inputs outputs #:allow-other-keys)
|
||||
(let ((out (assoc-ref outputs "out")))
|
||||
(define (wrap prog)
|
||||
(wrap-program prog
|
||||
`("LD_LIBRARY_PATH" ":" prefix
|
||||
,(gui-libs inputs))))
|
||||
|
||||
(with-directory-excursion (string-append out "/bin")
|
||||
(for-each wrap
|
||||
(list "gracket" "drracket" "slideshow" "mred"))
|
||||
#t)))
|
||||
%standard-phases))))
|
||||
(alist-cons-before
|
||||
'configure 'pre-configure
|
||||
(lambda* (#:key inputs #:allow-other-keys)
|
||||
;; Patch dynamically loaded libraries with their absolute paths.
|
||||
(let* ((library-path (search-path-as-string->list
|
||||
(getenv "LIBRARY_PATH")))
|
||||
(find-so (lambda (soname)
|
||||
(search-path
|
||||
library-path
|
||||
(format #f "~a.so" soname))))
|
||||
(patch-ffi-libs (lambda (file libs)
|
||||
(for-each
|
||||
(lambda (lib)
|
||||
(substitute* file
|
||||
(((format #f "\"~a\"" lib))
|
||||
(format #f "\"~a\"" (find-so lib)))))
|
||||
libs))))
|
||||
(substitute* "collects/db/private/sqlite3/ffi.rkt"
|
||||
(("ffi-lib sqlite-so")
|
||||
(format #f "ffi-lib \"~a\"" (find-so "libsqlite3"))))
|
||||
(substitute* "collects/openssl/libssl.rkt"
|
||||
(("ffi-lib libssl-so")
|
||||
(format #f "ffi-lib \"~a\"" (find-so "libssl"))))
|
||||
(substitute* "collects/openssl/libcrypto.rkt"
|
||||
(("ffi-lib libcrypto-so")
|
||||
(format #f "ffi-lib \"~a\"" (find-so "libcrypto"))))
|
||||
(substitute* "share/pkgs/math-lib/math/private/bigfloat/gmp.rkt"
|
||||
(("ffi-lib libgmp-so")
|
||||
(format #f "ffi-lib \"~a\"" (find-so "libgmp"))))
|
||||
(substitute* "share/pkgs/math-lib/math/private/bigfloat/mpfr.rkt"
|
||||
(("ffi-lib libmpfr-so")
|
||||
(format #f "ffi-lib \"~a\"" (find-so "libmpfr"))))
|
||||
(for-each
|
||||
(lambda (x) (apply patch-ffi-libs x))
|
||||
'(("share/pkgs/draw-lib/racket/draw/unsafe/cairo-lib.rkt"
|
||||
("libfontconfig" "libcairo"))
|
||||
("share/pkgs/draw-lib/racket/draw/unsafe/glib.rkt"
|
||||
("libglib-2.0" "libgmodule-2.0" "libgobject-2.0"))
|
||||
("share/pkgs/draw-lib/racket/draw/unsafe/jpeg.rkt"
|
||||
("libjpeg"))
|
||||
("share/pkgs/draw-lib/racket/draw/unsafe/pango.rkt"
|
||||
("libpango-1.0" "libpangocairo-1.0"))
|
||||
("share/pkgs/draw-lib/racket/draw/unsafe/png.rkt"
|
||||
("libpng"))
|
||||
("share/pkgs/db-lib/db/private/odbc/ffi.rkt"
|
||||
("libodbc"))
|
||||
("share/pkgs/gui-lib/mred/private/wx/gtk/x11.rkt"
|
||||
("libX11"))
|
||||
("share/pkgs/gui-lib/mred/private/wx/gtk/gsettings.rkt"
|
||||
("libgio-2.0"))
|
||||
("share/pkgs/gui-lib/mred/private/wx/gtk/gtk3.rkt"
|
||||
("libgdk-3" "libgtk-3"))
|
||||
("share/pkgs/gui-lib/mred/private/wx/gtk/unique.rkt"
|
||||
("libunique-1.0"))
|
||||
("share/pkgs/gui-lib/mred/private/wx/gtk/utils.rkt"
|
||||
("libgdk-x11-2.0" "libgdk_pixbuf-2.0" "libgtk-x11-2.0"))
|
||||
("share/pkgs/gui-lib/mred/private/wx/gtk/gl-context.rkt"
|
||||
("libGL"))
|
||||
("share/pkgs/sgl/gl.rkt"
|
||||
("libGL" "libGLU")))))
|
||||
(chdir "src"))
|
||||
(alist-cons-after
|
||||
'unpack 'patch-/bin/sh
|
||||
(lambda _
|
||||
(substitute* "collects/racket/system.rkt"
|
||||
(("/bin/sh") (which "sh"))))
|
||||
%standard-phases))
|
||||
#:tests? #f ; XXX: how to run them?
|
||||
))
|
||||
(inputs `(("libffi" ,libffi)
|
||||
|
|
Reference in New Issue