diff options
author | Robin Gloster <mail@glob.in> | 2017-05-20 13:57:49 +0200 |
---|---|---|
committer | Robin Gloster <mail@glob.in> | 2017-05-20 14:55:44 +0200 |
commit | da9adb8fab40a3dd86d6cfcbd103657ca98e5a48 (patch) | |
tree | 25c6af6c8753a49d4774eb901d9696ccefa9d461 /pkgs/development/interpreters/guile | |
parent | 9beb44fb84fa579edcbdb9089facce25248bac02 (diff) | |
parent | c9f3893451103c52e70566a5d043ab5e35014e6c (diff) | |
download | nixpkgs-da9adb8fab40a3dd86d6cfcbd103657ca98e5a48.tar nixpkgs-da9adb8fab40a3dd86d6cfcbd103657ca98e5a48.tar.gz nixpkgs-da9adb8fab40a3dd86d6cfcbd103657ca98e5a48.tar.bz2 nixpkgs-da9adb8fab40a3dd86d6cfcbd103657ca98e5a48.tar.lz nixpkgs-da9adb8fab40a3dd86d6cfcbd103657ca98e5a48.tar.xz nixpkgs-da9adb8fab40a3dd86d6cfcbd103657ca98e5a48.tar.zst nixpkgs-da9adb8fab40a3dd86d6cfcbd103657ca98e5a48.zip |
Merge remote-tracking branch 'upstream/master' into gcc-6
Diffstat (limited to 'pkgs/development/interpreters/guile')
-rw-r--r-- | pkgs/development/interpreters/guile/1.8.nix | 3 | ||||
-rw-r--r-- | pkgs/development/interpreters/guile/2.0.nix | 120 | ||||
-rw-r--r-- | pkgs/development/interpreters/guile/default.nix | 67 | ||||
-rw-r--r-- | pkgs/development/interpreters/guile/fix-test.patch | 38 | ||||
-rw-r--r-- | pkgs/development/interpreters/guile/setup-hook-2.2.sh | 13 |
5 files changed, 166 insertions, 75 deletions
diff --git a/pkgs/development/interpreters/guile/1.8.nix b/pkgs/development/interpreters/guile/1.8.nix index 5db3f10fb07..c50a5fbab07 100644 --- a/pkgs/development/interpreters/guile/1.8.nix +++ b/pkgs/development/interpreters/guile/1.8.nix @@ -11,6 +11,9 @@ stdenv.mkDerivation rec { patches = [ ./cpp-4.5.patch ]; + outputs = [ "out" "dev" "info" ]; + setOutputFlags = false; # $dev gets into the library otherwise + # GCC 4.6 raises a number of set-but-unused warnings. configureFlags = [ "--disable-error-on-warning" ]; diff --git a/pkgs/development/interpreters/guile/2.0.nix b/pkgs/development/interpreters/guile/2.0.nix new file mode 100644 index 00000000000..04f31dda26a --- /dev/null +++ b/pkgs/development/interpreters/guile/2.0.nix @@ -0,0 +1,120 @@ +{ fetchurl, stdenv, libtool, readline, gmp, pkgconfig, boehmgc, libunistring +, libffi, gawk, makeWrapper, fetchpatch, coverageAnalysis ? null, gnu ? null }: + +# Do either a coverage analysis build or a standard build. +(if coverageAnalysis != null + then coverageAnalysis + else stdenv.mkDerivation) + +(rec { + name = "guile-2.0.13"; + + src = fetchurl { + url = "mirror://gnu/guile/${name}.tar.xz"; + sha256 = "12yqkr974y91ylgw6jnmci2v90i90s7h9vxa4zk0sai8vjnz4i1p"; + }; + + outputs = [ "out" "dev" "info" ]; + setOutputFlags = false; # $dev gets into the library otherwise + + nativeBuildInputs = [ makeWrapper gawk pkgconfig ]; + buildInputs = [ readline libtool libunistring libffi ]; + propagatedBuildInputs = [ gmp boehmgc ] + + # XXX: These ones aren't normally needed here, but since + # `libguile-2.0.la' reads `-lltdl -lunistring', adding them here will add + # the needed `-L' flags. As for why the `.la' file lacks the `-L' flags, + # see below. + ++ [ libtool libunistring ]; + + # A native Guile 2.0 is needed to cross-build Guile. + selfNativeBuildInput = true; + + enableParallelBuilding = true; + + patches = [ ./disable-gc-sensitive-tests.patch ./eai_system.patch ./clang.patch + (fetchpatch { + # Fixes stability issues with 00-repl-server.test + url = "http://git.savannah.gnu.org/cgit/guile.git/patch/?id=2fbde7f02adb8c6585e9baf6e293ee49cd23d4c4"; + sha256 = "0p6c1lmw1iniq03z7x5m65kg3lq543kgvdb4nrxsaxjqf3zhl77v"; + }) + ] ++ + (stdenv.lib.optional (coverageAnalysis != null) ./gcov-file-name.patch); + + # Explicitly link against libgcc_s, to work around the infamous + # "libgcc_s.so.1 must be installed for pthread_cancel to work". + + # don't have "libgcc_s.so.1" on darwin + LDFLAGS = stdenv.lib.optionalString (!stdenv.isDarwin) "-lgcc_s"; + + configureFlags = [ "--with-libreadline-prefix" ] + ++ stdenv.lib.optionals stdenv.isSunOS [ + # Make sure the right <gmp.h> is found, and not the incompatible + # /usr/include/mp.h from OpenSolaris. See + # <https://lists.gnu.org/archive/html/hydra-users/2012-08/msg00000.html> + # for details. + "--with-libgmp-prefix=${gmp.dev}" + + # Same for these (?). + "--with-libreadline-prefix=${readline.dev}" + "--with-libunistring-prefix=${libunistring}" + + # See below. + "--without-threads" + ]; + + postInstall = '' + wrapProgram $out/bin/guile-snarf --prefix PATH : "${gawk}/bin" + + # XXX: See http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/18903 for + # why `--with-libunistring-prefix' and similar options coming from + # `AC_LIB_LINKFLAGS_BODY' don't work on NixOS/x86_64. + sed -i "$out/lib/pkgconfig/guile-2.0.pc" \ + -e "s|-lunistring|-L${libunistring}/lib -lunistring|g ; + s|^Cflags:\(.*\)$|Cflags: -I${libunistring}/include \1|g ; + s|-lltdl|-L${libtool.lib}/lib -lltdl|g ; + s|includedir=$out|includedir=$dev|g + " + ''; + + # make check doesn't work on darwin + # On Linuxes+Hydra the tests are flaky; feel free to investigate deeper. + doCheck = false; + + setupHook = ./setup-hook-2.0.sh; + + crossAttrs.preConfigure = + stdenv.lib.optionalString (stdenv.cross.config == "i586-pc-gnu") + # On GNU, libgc depends on libpthread, but the cross linker doesn't + # know where to find libpthread, which leads to erroneous test failures + # in `configure', where `-pthread' and `-lpthread' aren't explicitly + # passed. So it needs some help (XXX). + "export LDFLAGS=-Wl,-rpath-link=${gnu.libpthreadCross}/lib"; + + + meta = { + description = "Embeddable Scheme implementation"; + homepage = http://www.gnu.org/software/guile/; + license = stdenv.lib.licenses.lgpl3Plus; + maintainers = with stdenv.lib.maintainers; [ ludo lovek323 ]; + platforms = stdenv.lib.platforms.all; + + longDescription = '' + GNU Guile is an implementation of the Scheme programming language, with + support for many SRFIs, packaged for use in a wide variety of + environments. In addition to implementing the R5RS Scheme standard + and a large subset of R6RS, Guile includes a module system, full access + to POSIX system calls, networking support, multiple threads, dynamic + linking, a foreign function call interface, and powerful string + processing. + ''; + }; +}) + +// + +(stdenv.lib.optionalAttrs (!stdenv.isLinux) { + # Work around <http://bugs.gnu.org/14201>. + SHELL = "/bin/sh"; + CONFIG_SHELL = "/bin/sh"; +}) diff --git a/pkgs/development/interpreters/guile/default.nix b/pkgs/development/interpreters/guile/default.nix index 790951ff699..769c1951a3c 100644 --- a/pkgs/development/interpreters/guile/default.nix +++ b/pkgs/development/interpreters/guile/default.nix @@ -7,13 +7,17 @@ else stdenv.mkDerivation) (rec { - name = "guile-2.0.13"; + name = "guile-${version}"; + version = "2.2.0"; src = fetchurl { url = "mirror://gnu/guile/${name}.tar.xz"; - sha256 = "12yqkr974y91ylgw6jnmci2v90i90s7h9vxa4zk0sai8vjnz4i1p"; + sha256 = "05dmvhd1y135x7w5qfw4my42cfp6l8bbhjfxvchcc1cbdvzri0f1"; }; + outputs = [ "out" "dev" "info" ]; + setOutputFlags = false; # $dev gets into the library otherwise + nativeBuildInputs = [ makeWrapper gawk pkgconfig ]; buildInputs = [ readline libtool libunistring libffi ]; @@ -29,7 +33,9 @@ enableParallelBuilding = true; - patches = [ ./disable-gc-sensitive-tests.patch ./eai_system.patch ./clang.patch ./fix-test.patch ] ++ + patches = [ + ./eai_system.patch + ] ++ (stdenv.lib.optional (coverageAnalysis != null) ./gcov-file-name.patch); # Explicitly link against libgcc_s, to work around the infamous @@ -38,7 +44,20 @@ # don't have "libgcc_s.so.1" on darwin LDFLAGS = stdenv.lib.optionalString (!stdenv.isDarwin) "-lgcc_s"; - configureFlags = [ "--with-libreadline-prefix" ]; + configureFlags = [ "--with-libreadline-prefix=${readline.dev}" ] + ++ stdenv.lib.optionals stdenv.isSunOS [ + # Make sure the right <gmp.h> is found, and not the incompatible + # /usr/include/mp.h from OpenSolaris. See + # <https://lists.gnu.org/archive/html/hydra-users/2012-08/msg00000.html> + # for details. + "--with-libgmp-prefix=${gmp.dev}" + + # Same for these (?). + "--with-libunistring-prefix=${libunistring}" + + # See below. + "--without-threads" + ]; postInstall = '' wrapProgram $out/bin/guile-snarf --prefix PATH : "${gawk}/bin" @@ -46,17 +65,19 @@ # XXX: See http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/18903 for # why `--with-libunistring-prefix' and similar options coming from # `AC_LIB_LINKFLAGS_BODY' don't work on NixOS/x86_64. - sed -i "$out/lib/pkgconfig/guile-2.0.pc" \ - -e 's|-lunistring|-L${libunistring}/lib -lunistring|g ; + sed -i "$out/lib/pkgconfig/guile-2.2.pc" \ + -e "s|-lunistring|-L${libunistring}/lib -lunistring|g ; s|^Cflags:\(.*\)$|Cflags: -I${libunistring}/include \1|g ; - s|-lltdl|-L${libtool.lib}/lib -lltdl|g' + s|-lltdl|-L${libtool.lib}/lib -lltdl|g ; + s|includedir=$out|includedir=$dev|g + " ''; # make check doesn't work on darwin # On Linuxes+Hydra the tests are flaky; feel free to investigate deeper. doCheck = false; - setupHook = ./setup-hook-2.0.sh; + setupHook = ./setup-hook-2.2.sh; crossAttrs.preConfigure = stdenv.lib.optionalString (stdenv.cross.config == "i586-pc-gnu") @@ -71,7 +92,7 @@ description = "Embeddable Scheme implementation"; homepage = http://www.gnu.org/software/guile/; license = stdenv.lib.licenses.lgpl3Plus; - maintainers = with stdenv.lib.maintainers; [ ludo lovek323 ]; + maintainers = with stdenv.lib.maintainers; [ ludo lovek323 vrthra ]; platforms = stdenv.lib.platforms.all; longDescription = '' @@ -84,33 +105,5 @@ processing. ''; }; -} - -// - -(stdenv.lib.optionalAttrs stdenv.isSunOS { - # TODO: Move me above. - configureFlags = - [ - # Make sure the right <gmp.h> is found, and not the incompatible - # /usr/include/mp.h from OpenSolaris. See - # <https://lists.gnu.org/archive/html/hydra-users/2012-08/msg00000.html> - # for details. - "--with-libgmp-prefix=${gmp.dev}" - - # Same for these (?). - "--with-libreadline-prefix=${readline.dev}" - "--with-libunistring-prefix=${libunistring}" - - # See below. - "--without-threads" - ]; }) -// - -(stdenv.lib.optionalAttrs (!stdenv.isLinux) { - # Work around <http://bugs.gnu.org/14201>. - SHELL = "/bin/sh"; - CONFIG_SHELL = "/bin/sh"; -})) diff --git a/pkgs/development/interpreters/guile/fix-test.patch b/pkgs/development/interpreters/guile/fix-test.patch deleted file mode 100644 index 91bfa822b9e..00000000000 --- a/pkgs/development/interpreters/guile/fix-test.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 2fbde7f02adb8c6585e9baf6e293ee49cd23d4c4 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= <ludo@gnu.org> -Date: Fri, 4 Nov 2016 22:45:51 +0100 -Subject: tests: Avoid race condition in REPL server test. - -Fixes <http://bugs.gnu.org/24769>. -Reported by Rob Browning <rlb@defaultvalue.org>. - -* test-suite/tests/00-repl-server.test ("simple expression"): Add call -to 'select' before 'display'. ---- - test-suite/tests/00-repl-server.test | 10 ++++++++-- - 1 file changed, 8 insertions(+), 2 deletions(-) - -diff --git a/test-suite/tests/00-repl-server.test b/test-suite/tests/00-repl-server.test -index 1f570a9..4b5ec0c 100644 ---- a/test-suite/tests/00-repl-server.test -+++ b/test-suite/tests/00-repl-server.test -@@ -105,8 +105,14 @@ reached." - "scheme@(repl-server)> $1 = 42\n" - (with-repl-server socket - (read-until-prompt socket %last-line-before-prompt) -- (display "(+ 40 2)\n(quit)\n" socket) -- (read-string socket))) -+ -+ ;; Wait until 'repl-reader' in boot-9 has written the prompt. -+ ;; Otherwise, if we write too quickly, 'repl-reader' checks for -+ ;; 'char-ready?' and doesn't print the prompt. -+ (match (select (list socket) '() (list socket) 3) -+ (((_) () ()) -+ (display "(+ 40 2)\n(quit)\n" socket) -+ (read-string socket))))) - - (pass-if "HTTP inter-protocol attack" ;CVE-2016-8606 - (with-repl-server socket --- -cgit v1.0 - diff --git a/pkgs/development/interpreters/guile/setup-hook-2.2.sh b/pkgs/development/interpreters/guile/setup-hook-2.2.sh new file mode 100644 index 00000000000..86c1e0d3e4a --- /dev/null +++ b/pkgs/development/interpreters/guile/setup-hook-2.2.sh @@ -0,0 +1,13 @@ +addGuileLibPath () { + if test -d "$1/share/guile/site/2.2" + then + export GUILE_LOAD_PATH="${GUILE_LOAD_PATH}${GUILE_LOAD_PATH:+:}$1/share/guile/site/2.2" + export GUILE_LOAD_COMPILED_PATH="${GUILE_LOAD_COMPILED_PATH}${GUILE_LOAD_COMPILED_PATH:+:}$1/share/guile/site/2.2" + elif test -d "$1/share/guile/site" + then + export GUILE_LOAD_PATH="${GUILE_LOAD_PATH}${GUILE_LOAD_PATH:+:}$1/share/guile/site" + export GUILE_LOAD_COMPILED_PATH="${GUILE_LOAD_COMPILED_PATH}${GUILE_LOAD_COMPILED_PATH:+:}$1/share/guile/site" + fi +} + +envHooks+=(addGuileLibPath) |