From e8c6811bf1ccada01f99598ba4925b30e0935987 Mon Sep 17 00:00:00 2001 From: 宋文武 Date: Tue, 19 Jul 2016 20:57:51 +0800 Subject: 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. --- gnu/packages/scheme.scm | 107 ++++++++++++++++++++++++++++++------------------ 1 file changed, 67 insertions(+), 40 deletions(-) (limited to 'gnu/packages/scheme.scm') diff --git a/gnu/packages/scheme.scm b/gnu/packages/scheme.scm index e7cf95021f..8d3ca33413 100644 --- a/gnu/packages/scheme.scm +++ b/gnu/packages/scheme.scm @@ -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) -- cgit v1.2.3 From 782170c4f56a43c8bcdd9cffe0bb489e918211a6 Mon Sep 17 00:00:00 2001 From: 宋文武 Date: Tue, 19 Jul 2016 21:26:42 +0800 Subject: gnu: racket: Add more inputs. * gnu/packages/scheme.scm (racket)[inputs]: Add glu, gmp, libpng, libx11, mesa, mpfr, openssl and unixodbc. Replace libjpeg-8 with libjpeg and gtk+-2 with gtk+. --- gnu/packages/scheme.scm | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) (limited to 'gnu/packages/scheme.scm') diff --git a/gnu/packages/scheme.scm b/gnu/packages/scheme.scm index 8d3ca33413..e4cd72a7b6 100644 --- a/gnu/packages/scheme.scm +++ b/gnu/packages/scheme.scm @@ -23,7 +23,7 @@ (define-module (gnu packages scheme) #:use-module (gnu packages) - #:use-module (guix licenses) + #:use-module ((guix licenses) #:hide (openssl)) #:use-module (guix packages) #:use-module (guix download) #:use-module (guix git-download) @@ -48,6 +48,8 @@ #:use-module (gnu packages fontutils) #:use-module (gnu packages image) #:use-module (gnu packages xorg) + #:use-module (gnu packages tls) + #:use-module (gnu packages gl) #:use-module (ice-9 match)) (define (mit-scheme-source-directory system version) @@ -477,15 +479,25 @@ implementation techniques and as an expository tool.") %standard-phases)) #:tests? #f ; XXX: how to run them? )) - (inputs `(("libffi" ,libffi) - ("glib" ,glib) ; for DrRacket - ("cairo" ,cairo) - ("pango" ,pango) - ("libjpeg" ,libjpeg-8) - ("fontconfig" ,fontconfig) - ("gdk-pixbuf" ,gdk-pixbuf) - ("gtk" ,gtk+-2) - ("sqlite" ,sqlite))) ;needed to build the doc + (inputs + `(("libffi" ,libffi) + ;; Hardcode dynamically loaded libraries for better functionality. + ;; sqlite and libraries for `racket/draw' are needed to build the doc. + ("cairo" ,cairo) + ("fontconfig" ,fontconfig) + ("glib" ,glib) + ("glu" ,glu) + ("gmp" ,gmp) + ("gtk+" ,gtk+) ; propagates gdk-pixbuf+svg + ("libjpeg" ,libjpeg) + ("libpng" ,libpng) + ("libx11" ,libx11) + ("mesa" ,mesa) + ("mpfr" ,mpfr) + ("openssl" ,openssl) + ("pango" ,pango) + ("sqlite" ,sqlite) + ("unixodbc" ,unixodbc))) (home-page "http://racket-lang.org") (synopsis "Implementation of Scheme and related languages") (description -- cgit v1.2.3