summary refs log tree commit diff
path: root/pkgs/development/interpreters
diff options
context:
space:
mode:
authorRobin Gloster <mail@glob.in>2016-02-28 16:32:57 +0000
committerRobin Gloster <mail@glob.in>2016-02-28 16:32:57 +0000
commit3b4765c9e59a34e7f48d2798cd4c4ef14d72e5a4 (patch)
tree04c567a4061b3adf6d1e0a898f39b67f27d37aea /pkgs/development/interpreters
parent8615f026a48cbf3f1c37b30e9b70bba6af013a12 (diff)
parenta9d24cedeb3ba97a4e23ff93fadff32280ff0ab6 (diff)
downloadnixpkgs-3b4765c9e59a34e7f48d2798cd4c4ef14d72e5a4.tar
nixpkgs-3b4765c9e59a34e7f48d2798cd4c4ef14d72e5a4.tar.gz
nixpkgs-3b4765c9e59a34e7f48d2798cd4c4ef14d72e5a4.tar.bz2
nixpkgs-3b4765c9e59a34e7f48d2798cd4c4ef14d72e5a4.tar.lz
nixpkgs-3b4765c9e59a34e7f48d2798cd4c4ef14d72e5a4.tar.xz
nixpkgs-3b4765c9e59a34e7f48d2798cd4c4ef14d72e5a4.tar.zst
nixpkgs-3b4765c9e59a34e7f48d2798cd4c4ef14d72e5a4.zip
Merge remote-tracking branch 'upstream/master' into hardened-stdenv
Diffstat (limited to 'pkgs/development/interpreters')
-rw-r--r--pkgs/development/interpreters/love/0.7.nix51
-rw-r--r--pkgs/development/interpreters/perl/5.20/default.nix117
-rw-r--r--pkgs/development/interpreters/perl/5.22/cpp-precomp.patch11
-rw-r--r--pkgs/development/interpreters/perl/5.22/default.nix113
-rw-r--r--pkgs/development/interpreters/perl/5.22/ld-shared.patch24
-rw-r--r--pkgs/development/interpreters/perl/5.22/no-sys-dirs.patch250
-rw-r--r--pkgs/development/interpreters/perl/5.22/setup-hook.sh5
-rw-r--r--pkgs/development/interpreters/perl/cpp-precomp.patch (renamed from pkgs/development/interpreters/perl/5.20/cpp-precomp.patch)0
-rw-r--r--pkgs/development/interpreters/perl/default.nix129
-rw-r--r--pkgs/development/interpreters/perl/ld-shared.patch (renamed from pkgs/development/interpreters/perl/5.20/ld-shared.patch)0
-rw-r--r--pkgs/development/interpreters/perl/no-sys-dirs.patch (renamed from pkgs/development/interpreters/perl/5.20/no-sys-dirs.patch)0
-rw-r--r--pkgs/development/interpreters/perl/setup-hook.sh (renamed from pkgs/development/interpreters/perl/5.20/setup-hook.sh)0
-rw-r--r--pkgs/development/interpreters/picolisp/default.nix2
13 files changed, 181 insertions, 521 deletions
diff --git a/pkgs/development/interpreters/love/0.7.nix b/pkgs/development/interpreters/love/0.7.nix
new file mode 100644
index 00000000000..65f38ae1613
--- /dev/null
+++ b/pkgs/development/interpreters/love/0.7.nix
@@ -0,0 +1,51 @@
+{ stdenv, fetchurl, pkgconfig
+, SDL, mesa, openal, lua
+, libdevil, freetype, physfs
+, libmodplug, mpg123, libvorbis, libogg
+}:
+
+stdenv.mkDerivation rec {
+  name = "love-0.7.2";
+  src = fetchurl {
+    url = "https://bitbucket.org/rude/love/downloads/${name}-linux-src.tar.gz";
+    sha256 = "0s7jywkvydlshlgy11ilzngrnybmq5xlgzp2v2dhlffwrfqdqym5";
+  };
+
+  buildInputs = [
+    pkgconfig SDL mesa openal lua
+    libdevil freetype physfs libmodplug mpg123 libvorbis libogg
+  ];
+
+  preConfigure = ''
+    luaoptions="${"''"} lua luajit "
+    for i in lua luajit-; do
+      for j in 5 5.0 5.1 5.2 5.3 5.4; do
+        luaoptions="$luaoptions $i$j "
+      done
+    done
+    luaso="$(echo "${lua}/lib/"lib*.so.*)"
+    luaso="''${luaso##*/lib}"
+    luaso="''${luaso%%.so*}"
+    luaoptions="$luaoptions $luaso"
+    sed -e "s/${"''"} lua lua.*;/$luaoptions;/" -i configure
+
+    luaincdir="$(echo "${lua}/include"/*/ )"
+    test -d "$luaincdir" && {
+      export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -I$luaincdir"
+    } || true
+  '';
+
+  NIX_CFLAGS_COMPILE = ''
+    -I${SDL}/include/SDL
+    -I${freetype}include/freetype2
+  '';
+
+  meta = {
+    homepage = "http://love2d.org";
+    description = "A Lua-based 2D game engine/scripting language";
+    license = stdenv.lib.licenses.zlib;
+
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.raskin ];
+  };
+}
diff --git a/pkgs/development/interpreters/perl/5.20/default.nix b/pkgs/development/interpreters/perl/5.20/default.nix
deleted file mode 100644
index bc446a25d0f..00000000000
--- a/pkgs/development/interpreters/perl/5.20/default.nix
+++ /dev/null
@@ -1,117 +0,0 @@
-{ stdenv, fetchurl, enableThreading ? stdenv ? glibc }:
-
-# We can only compile perl with threading on platforms where we have a
-# real glibc in the stdenv.
-#
-# Instead of silently building an unthreaded perl if this is not the
-# case, we force callers to disableThreading explicitly, therefore
-# documenting the platforms where the perl is not threaded.
-#
-# In the case of stdenv linux boot stage1 it's not possible to use
-# threading because of the simpleness of the bootstrap glibc, so we
-# use enableThreading = false there.
-assert enableThreading -> (stdenv ? glibc);
-
-let
-
-  libc = if stdenv.cc.libc or null != null then stdenv.cc.libc else "/usr";
-
-in
-
-with stdenv.lib;
-
-stdenv.mkDerivation rec {
-  name = "perl-5.20.3";
-
-  src = fetchurl {
-    url = "mirror://cpan/authors/id/S/SH/SHAY/${name}.tar.gz";
-    sha256 = "0jlvpd5l5nk7lzfd4akdg1sw6vinbkj6izclyyr0lrbidfky691m";
-  };
-
-  outputs = [ "out" "man" ];
-
-  # FIXME needs gcc 4.9 in bootstrap tools
-  hardening_stackprotector = false;
-
-  patches =
-    [ # Do not look in /usr etc. for dependencies.
-      ./no-sys-dirs.patch
-    ]
-    ++ optional stdenv.isSunOS ./ld-shared.patch
-    ++ stdenv.lib.optional stdenv.isDarwin [ ./cpp-precomp.patch ];
-
-  # There's an annoying bug on sandboxed Darwin in Perl's Cwd.pm where it looks for pwd
-  # in /bin/pwd and /usr/bin/pwd and then falls back on just "pwd" if it can't get them
-  # while at the same time erasing the PATH environment variable so it unconditionally
-  # fails. The code in question is guarded by a check for Mac OS, but the patch below
-  # doesn't have any runtime effect on other platforms.
-  postPatch = stdenv.lib.optional stdenv.isDarwin ''
-    pwd="$(type -P pwd)"
-    substituteInPlace dist/PathTools/Cwd.pm \
-      --replace "/bin/pwd" "$pwd"
-  '';
-
-  sandboxProfile = stdenv.lib.sandbox.allow "ipc-sysv-sem";
-
-  # Build a thread-safe Perl with a dynamic libperls.o.  We need the
-  # "installstyle" option to ensure that modules are put under
-  # $out/lib/perl5 - this is the general default, but because $out
-  # contains the string "perl", Configure would select $out/lib.
-  # Miniperl needs -lm. perl needs -lrt.
-  configureFlags =
-    [ "-de"
-      "-Dcc=cc"
-      "-Uinstallusrbinperl"
-      "-Dinstallstyle=lib/perl5"
-      "-Duseshrplib"
-      "-Dlocincpth=${libc}/include"
-      "-Dloclibpth=${libc}/lib"
-    ]
-    ++ optional stdenv.isSunOS "-Dcc=gcc"
-    ++ optional enableThreading "-Dusethreads";
-
-  configureScript = "${stdenv.shell} ./Configure";
-
-  dontAddPrefix = true;
-
-  enableParallelBuilding = true;
-
-  preConfigure =
-    ''
-      configureFlags="$configureFlags -Dprefix=$out -Dman1dir=$out/share/man/man1 -Dman3dir=$out/share/man/man3"
-
-      ${optionalString stdenv.isArm ''
-        configureFlagsArray=(-Dldflags="-lm -lrt")
-      ''}
-    '' + optionalString stdenv.isDarwin ''
-      substituteInPlace hints/darwin.sh --replace "env MACOSX_DEPLOYMENT_TARGET=10.3" ""
-    '' + optionalString (!enableThreading) ''
-      # We need to do this because the bootstrap doesn't have a static libpthread
-      sed -i 's,\(libswanted.*\)pthread,\1,g' Configure
-    '';
-
-  preBuild = optionalString (!(stdenv ? cc && stdenv.cc.nativeTools))
-    ''
-      # Make Cwd work on NixOS (where we don't have a /bin/pwd).
-      substituteInPlace dist/PathTools/Cwd.pm --replace "'/bin/pwd'" "'$(type -tP pwd)'"
-    '';
-
-  # Inspired by nuke-references, which I can't depend on because it uses perl. Perhaps it should just use sed :)
-  postInstall = ''
-    self=$(echo $out | sed -n "s|^$NIX_STORE/\\([a-z0-9]\{32\}\\)-.*|\1|p")
-
-    sed -i "/$self/b; s|$NIX_STORE/[a-z0-9]\{32\}-|$NIX_STORE/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-|g" "$out"/lib/perl5/*/*/Config.pm
-    sed -i "/$self/b; s|$NIX_STORE/[a-z0-9]\{32\}-|$NIX_STORE/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-|g" "$out"/lib/perl5/*/*/Config_heavy.pl
-  '';
-
-  setupHook = ./setup-hook.sh;
-
-  passthru.libPrefix = "lib/perl5/site_perl";
-
-  meta = {
-    homepage = https://www.perl.org/;
-    description = "The standard implementation of the Perl 5 programmming language";
-    maintainers = [ maintainers.eelco ];
-    platforms = platforms.all;
-  };
-}
diff --git a/pkgs/development/interpreters/perl/5.22/cpp-precomp.patch b/pkgs/development/interpreters/perl/5.22/cpp-precomp.patch
deleted file mode 100644
index 231853fe51a..00000000000
--- a/pkgs/development/interpreters/perl/5.22/cpp-precomp.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/hints/darwin.sh	2013-05-08 11:13:45.000000000 -0600
-+++ b/hints/darwin.sh	2013-05-08 11:15:04.000000000 -0600
-@@ -129,7 +129,7 @@
- 
- # Avoid Apple's cpp precompiler, better for extensions
- if [ "X`echo | ${cc} -no-cpp-precomp -E - 2>&1 >/dev/null`" = "X" ]; then
--    cppflags="${cppflags} -no-cpp-precomp"
-+    #cppflags="${cppflags} -no-cpp-precomp"
- 
-     # This is necessary because perl's build system doesn't
-     # apply cppflags to cc compile lines as it should.
diff --git a/pkgs/development/interpreters/perl/5.22/default.nix b/pkgs/development/interpreters/perl/5.22/default.nix
deleted file mode 100644
index 34a26023adf..00000000000
--- a/pkgs/development/interpreters/perl/5.22/default.nix
+++ /dev/null
@@ -1,113 +0,0 @@
-{ stdenv, fetchurl, enableThreading ? stdenv ? glibc }:
-
-# We can only compile perl with threading on platforms where we have a
-# real glibc in the stdenv.
-#
-# Instead of silently building an unthreaded perl if this is not the
-# case, we force callers to disableThreading explicitly, therefore
-# documenting the platforms where the perl is not threaded.
-#
-# In the case of stdenv linux boot stage1 it's not possible to use
-# threading because of the simpleness of the bootstrap glibc, so we
-# use enableThreading = false there.
-assert enableThreading -> (stdenv ? glibc);
-
-let
-
-  libc = if stdenv.cc.libc or null != null then stdenv.cc.libc else "/usr";
-
-in
-
-with stdenv.lib;
-
-stdenv.mkDerivation rec {
-  name = "perl-5.22.0";
-
-  src = fetchurl {
-    url = "mirror://cpan/src/5.0/${name}.tar.gz";
-    sha256 = "0g5bl8sdpzx9gx2g5jq3py4bj07z2ylk7s1qn0fvsss2yl3hhs8c";
-  };
-
-  outputs = [ "out" "man" ];
-
-  patches =
-    [ # Do not look in /usr etc. for dependencies.
-      ./no-sys-dirs.patch
-    ]
-    ++ optional stdenv.isSunOS ./ld-shared.patch
-    ++ stdenv.lib.optional stdenv.isDarwin [ ./cpp-precomp.patch ];
-
-  # Build a thread-safe Perl with a dynamic libperls.o.  We need the
-  # "installstyle" option to ensure that modules are put under
-  # $out/lib/perl5 - this is the general default, but because $out
-  # contains the string "perl", Configure would select $out/lib.
-  # Miniperl needs -lm. perl needs -lrt.
-  configureFlags =
-    [ "-de"
-      "-Dcc=cc"
-      "-Uinstallusrbinperl"
-      "-Dinstallstyle=lib/perl5"
-      "-Duseshrplib"
-      "-Dlocincpth=${libc}/include"
-      "-Dloclibpth=${libc}/lib"
-    ]
-    ++ optional stdenv.isSunOS "-Dcc=gcc"
-    ++ optional enableThreading "-Dusethreads";
-
-  configureScript = "${stdenv.shell} ./Configure";
-
-  dontAddPrefix = true;
-
-  enableParallelBuilding = true;
-
-  postPatch = ''
-    pwd="$(type -P pwd)"
-    substituteInPlace dist/PathTools/Cwd.pm \
-      --replace "pwd_cmd = 'pwd'" "pwd_cmd = '$pwd'"
-  '';
-
-  preConfigure =
-    ''
-      configureFlags="$configureFlags -Dprefix=$out -Dman1dir=$out/share/man/man1 -Dman3dir=$out/share/man/man3"
-
-      ${optionalString stdenv.isArm ''
-        configureFlagsArray=(-Dldflags="-lm -lrt")
-      ''}
-    '' + optionalString stdenv.isDarwin ''
-      substituteInPlace hints/darwin.sh --replace "env MACOSX_DEPLOYMENT_TARGET=10.3" ""
-    '' + optionalString (!enableThreading) ''
-      # We need to do this because the bootstrap doesn't have a static libpthread
-      sed -i 's,\(libswanted.*\)pthread,\1,g' Configure
-    '';
-
-  preBuild = optionalString (!(stdenv ? cc && stdenv.cc.nativeTools))
-    ''
-      # Make Cwd work on NixOS (where we don't have a /bin/pwd).
-      substituteInPlace dist/PathTools/Cwd.pm --replace "'/bin/pwd'" "'$(type -tP pwd)'"
-    '';
-
-  setupHook = ./setup-hook.sh;
-
-  passthru.libPrefix = "lib/perl5/site_perl";
-
-  preCheck = ''
-    # Try and setup a local hosts file
-    if [ -f "${libc}/lib/libnss_files.so" ]; then
-      mkdir $TMPDIR/fakelib
-      cp "${libc}/lib/libnss_files.so" $TMPDIR/fakelib
-      sed -i 's,/etc/hosts,/dev/fd/3,g' $TMPDIR/fakelib/libnss_files.so
-      export LD_LIBRARY_PATH=$TMPDIR/fakelib
-    fi
-  '';
-
-  postCheck = ''
-    unset LD_LIBRARY_PATH
-  '';
-
-  meta = {
-    homepage = https://www.perl.org/;
-    description = "The standard implementation of the Perl 5 programmming language";
-    maintainers = [ maintainers.eelco ];
-    platforms = platforms.all;
-  };
-}
diff --git a/pkgs/development/interpreters/perl/5.22/ld-shared.patch b/pkgs/development/interpreters/perl/5.22/ld-shared.patch
deleted file mode 100644
index 140af9af40e..00000000000
--- a/pkgs/development/interpreters/perl/5.22/ld-shared.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-$NetBSD: patch-hints_solaris__2.sh,v 1.2 2015/10/27 09:10:44 jperkin Exp $
-
-Redo PR pkg/44999.
-
---- perl-5.22.0/hints/solaris_2.sh.orig	2015-05-13 20:19:29.000000000 +0000
-+++ perl-5.22.0/hints/solaris_2.sh
-@@ -585,7 +585,7 @@ EOM
- 		fi
- 	    fi
- 	    case "${cc:-cc} -v 2>/dev/null" in
--	    *gcc*)
-+	    *gcc*|clang*)
- 		echo 'int main() { return 0; }' > try.c
- 		case "`${cc:-cc} $ccflags -mcpu=v9 -m64 -S try.c 2>&1 | grep 'm64 is not supported by this configuration'`" in
- 		*"m64 is not supported"*)
-@@ -622,7 +622,7 @@ EOM
- 		# use that with Solaris 11 and later, but keep
- 		# the old behavior for older Solaris versions.
- 		case "$osvers" in
--			2.?|2.10) lddlflags="$lddlflags -G -m64" ;;
-+			2.?|2.10) lddlflags="$lddlflags -shared -m64" ;;
- 			*) lddlflags="$lddlflags -shared -m64" ;;
- 		esac
- 		;;
diff --git a/pkgs/development/interpreters/perl/5.22/no-sys-dirs.patch b/pkgs/development/interpreters/perl/5.22/no-sys-dirs.patch
deleted file mode 100644
index 1793273a76f..00000000000
--- a/pkgs/development/interpreters/perl/5.22/no-sys-dirs.patch
+++ /dev/null
@@ -1,250 +0,0 @@
-diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/Configure perl-5.20.0/Configure
---- perl-5.20.0-orig/Configure	2014-05-26 15:34:18.000000000 +0200
-+++ perl-5.20.0/Configure	2014-06-25 10:43:35.368285986 +0200
-@@ -106,15 +106,7 @@
- fi
- 
- : Proper PATH setting
--paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
--paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
--paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
--paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
--paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
--paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /opt/ansic/bin /usr/ccs/bin"
--paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
--paths="$paths /sbin /usr/sbin /usr/libexec"
--paths="$paths /system/gnu_library/bin"
-+paths=''
- 
- for p in $paths
- do
-@@ -1337,8 +1329,7 @@
- archname=''
- : Possible local include directories to search.
- : Set locincpth to "" in a hint file to defeat local include searches.
--locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
--locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
-+locincpth=""
- :
- : no include file wanted by default
- inclwanted=''
-@@ -1349,17 +1340,12 @@
- 
- libnames=''
- : change the next line if compiling for Xenix/286 on Xenix/386
--xlibpth='/usr/lib/386 /lib/386'
-+xlibpth=''
- : Possible local library directories to search.
--loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
--loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
-+loclibpth=""
- 
- : general looking path for locating libraries
--glibpth="/lib /usr/lib $xlibpth"
--glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
--test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
--test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
--test -d /usr/lib64         && glibpth="$glibpth /lib64 /usr/lib64 /usr/local/lib64"
-+glibpth=""
- 
- : Private path used by Configure to find libraries.  Its value
- : is prepended to libpth. This variable takes care of special
-@@ -1391,8 +1377,6 @@
- libswanted="$libswanted m crypt sec util c cposix posix ucb bsd BSD"
- : We probably want to search /usr/shlib before most other libraries.
- : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
--glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
--glibpth="/usr/shlib $glibpth"
- : Do not use vfork unless overridden by a hint file.
- usevfork=false
- 
-@@ -2446,7 +2430,6 @@
- zip
- "
- pth=`echo $PATH | sed -e "s/$p_/ /g"`
--pth="$pth $sysroot/lib $sysroot/usr/lib"
- for file in $loclist; do
- 	eval xxx=\$$file
- 	case "$xxx" in
-@@ -4936,7 +4919,7 @@
- : Set private lib path
- case "$plibpth" in
- '') if ./mips; then
--	plibpth="$incpath/usr/lib $sysroot/usr/local/lib $sysroot/usr/ccs/lib"
-+	plibpth="$incpath/usr/lib"
-     fi;;
- esac
- case "$libpth" in
-@@ -8600,13 +8583,8 @@
- echo " "
- case "$sysman" in
- '')
--	syspath='/usr/share/man/man1 /usr/man/man1'
--	syspath="$syspath /usr/man/mann /usr/man/manl /usr/man/local/man1"
--	syspath="$syspath /usr/man/u_man/man1"
--	syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
--	syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
--	syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
--	sysman=`./loc . /usr/man/man1 $syspath`
-+	syspath=''
-+	sysman=''
- 	;;
- esac
- if $test -d "$sysman"; then
-@@ -19900,9 +19878,10 @@
- case "$full_ar" in
- '') full_ar=$ar ;;
- esac
-+full_ar=ar
- 
- : Store the full pathname to the sed program for use in the C program
--full_sed=$sed
-+full_sed=sed
- 
- : see what type gids are declared as in the kernel
- echo " "
-Only in perl-5.20.0/: Configure.orig
-diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/ext/Errno/Errno_pm.PL perl-5.20.0/ext/Errno/Errno_pm.PL
---- perl-5.20.0-orig/ext/Errno/Errno_pm.PL	2014-05-26 15:34:20.000000000 +0200
-+++ perl-5.20.0/ext/Errno/Errno_pm.PL	2014-06-25 10:31:24.317970047 +0200
-@@ -126,11 +126,7 @@
- 	if ($dep =~ /(\S+errno\.h)/) {
- 	     $file{$1} = 1;
- 	}
--    } elsif ($^O eq 'linux' &&
--	      $Config{gccversion} ne '' && 
--	      $Config{gccversion} !~ /intel/i
--	      # might be using, say, Intel's icc
--	     ) {
-+    } elsif (0) {
-     # When cross-compiling we may store a path for gcc's "sysroot" option:
-     my $sysroot = $Config{sysroot} || '';
- 	# Some Linuxes have weird errno.hs which generate
-Only in perl-5.20.0/ext/Errno: Errno_pm.PL.orig
-diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/hints/freebsd.sh perl-5.20.0/hints/freebsd.sh
---- perl-5.20.0-orig/hints/freebsd.sh	2014-01-31 22:55:51.000000000 +0100
-+++ perl-5.20.0/hints/freebsd.sh	2014-06-25 10:25:53.263964680 +0200
-@@ -119,21 +119,21 @@
-         objformat=`/usr/bin/objformat`
-         if [ x$objformat = xaout ]; then
-             if [ -e /usr/lib/aout ]; then
--                libpth="/usr/lib/aout /usr/local/lib /usr/lib"
--                glibpth="/usr/lib/aout /usr/local/lib /usr/lib"
-+                libpth=""
-+                glibpth=""
-             fi
-             lddlflags='-Bshareable'
-         else
--            libpth="/usr/lib /usr/local/lib"
--            glibpth="/usr/lib /usr/local/lib"
-+            libpth=""
-+            glibpth=""
-             ldflags="-Wl,-E "
-             lddlflags="-shared "
-         fi
-         cccdlflags='-DPIC -fPIC'
-         ;;
- *)
--       libpth="/usr/lib /usr/local/lib"
--       glibpth="/usr/lib /usr/local/lib"
-+       libpth=""
-+       glibpth=""
-        ldflags="-Wl,-E "
-         lddlflags="-shared "
-         cccdlflags='-DPIC -fPIC'
-diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/hints/linux.sh perl-5.20.0/hints/linux.sh
---- perl-5.20.0-orig/hints/linux.sh	2014-05-26 15:34:20.000000000 +0200
-+++ perl-5.20.0/hints/linux.sh	2014-06-25 10:33:47.354883843 +0200
-@@ -150,25 +150,6 @@
-     ;;
- esac
- 
--# Ubuntu 11.04 (and later, presumably) doesn't keep most libraries
--# (such as -lm) in /lib or /usr/lib.  So we have to ask gcc to tell us
--# where to look.  We don't want gcc's own libraries, however, so we
--# filter those out.
--# This could be conditional on Unbuntu, but other distributions may
--# follow suit, and this scheme seems to work even on rather old gcc's.
--# This unconditionally uses gcc because even if the user is using another
--# compiler, we still need to find the math library and friends, and I don't
--# know how other compilers will cope with that situation.
--# Morever, if the user has their own gcc earlier in $PATH than the system gcc,
--# we don't want its libraries. So we try to prefer the system gcc
--# Still, as an escape hatch, allow Configure command line overrides to
--# plibpth to bypass this check.
--if [ -x /usr/bin/gcc ] ; then
--    gcc=/usr/bin/gcc
--else
--    gcc=gcc
--fi
--
- case "$plibpth" in
- '') plibpth=`LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries |
- 	cut -f2- -d= | tr ':' $trnl | grep -v 'gcc' | sed -e 's:/$::'`
-@@ -178,32 +159,6 @@
-     ;;
- esac
- 
--case "$libc" in
--'')
--# If you have glibc, then report the version for ./myconfig bug reporting.
--# (Configure doesn't need to know the specific version since it just uses
--# gcc to load the library for all tests.)
--# We don't use __GLIBC__ and  __GLIBC_MINOR__ because they
--# are insufficiently precise to distinguish things like
--# libc-2.0.6 and libc-2.0.7.
--    for p in $plibpth
--    do
--        for trylib in libc.so.6 libc.so
--        do
--            if $test -e $p/$trylib; then
--                libc=`ls -l $p/$trylib | awk '{print $NF}'`
--                if $test "X$libc" != X; then
--                    break
--                fi
--            fi
--        done
--        if $test "X$libc" != X; then
--            break
--        fi
--    done
--    ;;
--esac
--
- # Are we using ELF?  Thanks to Kenneth Albanowski <kjahds@kjahds.com>
- # for this test.
- cat >try.c <<'EOM'
-@@ -367,33 +322,6 @@
- 	;;
- esac
- 
--# SuSE8.2 has /usr/lib/libndbm* which are ld scripts rather than
--# true libraries. The scripts cause binding against static
--# version of -lgdbm which is a bad idea. So if we have 'nm'
--# make sure it can read the file
--# NI-S 2003/08/07
--case "$nm" in
--    '') ;;
--    *)
--    for p in $plibpth
--    do
--        if $test -r $p/libndbm.so; then
--            if $nm $p/libndbm.so >/dev/null 2>&1 ; then
--                echo 'Your shared -lndbm seems to be a real library.'
--                _libndbm_real=1
--                break
--            fi
--        fi
--    done
--    if $test "X$_libndbm_real" = X; then
--        echo 'Your shared -lndbm is not a real library.'
--        set `echo X "$libswanted "| sed -e 's/ ndbm / /'`
--        shift
--        libswanted="$*"
--    fi
--    ;;
--esac
--
- # Linux on Synology.
- if [ -f /etc/synoinfo.conf -a -d /usr/syno ]; then
-     # Tested on Synology DS213 and DS413
diff --git a/pkgs/development/interpreters/perl/5.22/setup-hook.sh b/pkgs/development/interpreters/perl/5.22/setup-hook.sh
deleted file mode 100644
index a8656b8531d..00000000000
--- a/pkgs/development/interpreters/perl/5.22/setup-hook.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-addPerlLibPath () {
-    addToSearchPath PERL5LIB $1/lib/perl5/site_perl
-}
-
-envHooks+=(addPerlLibPath)
diff --git a/pkgs/development/interpreters/perl/5.20/cpp-precomp.patch b/pkgs/development/interpreters/perl/cpp-precomp.patch
index 231853fe51a..231853fe51a 100644
--- a/pkgs/development/interpreters/perl/5.20/cpp-precomp.patch
+++ b/pkgs/development/interpreters/perl/cpp-precomp.patch
diff --git a/pkgs/development/interpreters/perl/default.nix b/pkgs/development/interpreters/perl/default.nix
new file mode 100644
index 00000000000..d9158ad55ab
--- /dev/null
+++ b/pkgs/development/interpreters/perl/default.nix
@@ -0,0 +1,129 @@
+{ lib, stdenv, fetchurlBoot, enableThreading ? stdenv ? glibc }:
+
+with lib;
+
+# We can only compile perl with threading on platforms where we have a
+# real glibc in the stdenv.
+#
+# Instead of silently building an unthreaded perl if this is not the
+# case, we force callers to disableThreading explicitly, therefore
+# documenting the platforms where the perl is not threaded.
+#
+# In the case of stdenv linux boot stage1 it's not possible to use
+# threading because of the simpleness of the bootstrap glibc, so we
+# use enableThreading = false there.
+assert enableThreading -> (stdenv ? glibc);
+
+let
+
+  libc = if stdenv.cc.libc or null != null then stdenv.cc.libc else "/usr";
+
+  common = { version, sha256 }: stdenv.mkDerivation rec {
+    name = "perl-${version}";
+
+    src = fetchurlBoot {
+      url = "mirror://cpan/src/5.0/${name}.tar.gz";
+      inherit sha256;
+    };
+
+    outputs = [ "out" "man" ];
+
+    patches =
+      [ # Do not look in /usr etc. for dependencies.
+        ./no-sys-dirs.patch
+      ]
+      ++ optional stdenv.isSunOS ./ld-shared.patch
+      ++ optional stdenv.isDarwin [ ./cpp-precomp.patch ];
+
+    # There's an annoying bug on sandboxed Darwin in Perl's Cwd.pm where it looks for pwd
+    # in /bin/pwd and /usr/bin/pwd and then falls back on just "pwd" if it can't get them
+    # while at the same time erasing the PATH environment variable so it unconditionally
+    # fails. The code in question is guarded by a check for Mac OS, but the patch below
+    # doesn't have any runtime effect on other platforms.
+    postPatch = optional stdenv.isDarwin ''
+      pwd="$(type -P pwd)"
+      substituteInPlace dist/PathTools/Cwd.pm \
+        --replace "/bin/pwd" "$pwd"
+    '';
+
+    sandboxProfile = sandbox.allow "ipc-sysv-sem";
+
+    # Build a thread-safe Perl with a dynamic libperls.o.  We need the
+    # "installstyle" option to ensure that modules are put under
+    # $out/lib/perl5 - this is the general default, but because $out
+    # contains the string "perl", Configure would select $out/lib.
+    # Miniperl needs -lm. perl needs -lrt.
+    configureFlags =
+      [ "-de"
+        "-Dcc=cc"
+        "-Uinstallusrbinperl"
+        "-Dinstallstyle=lib/perl5"
+        "-Duseshrplib"
+        "-Dlocincpth=${libc}/include"
+        "-Dloclibpth=${libc}/lib"
+      ]
+      ++ optional stdenv.isSunOS "-Dcc=gcc"
+      ++ optional enableThreading "-Dusethreads";
+
+    configureScript = "${stdenv.shell} ./Configure";
+
+    dontAddPrefix = true;
+
+    enableParallelBuilding = true;
+
+    preConfigure =
+      ''
+        configureFlags="$configureFlags -Dprefix=$out -Dman1dir=$out/share/man/man1 -Dman3dir=$out/share/man/man3"
+
+        ${optionalString stdenv.isArm ''
+          configureFlagsArray=(-Dldflags="-lm -lrt")
+        ''}
+      '' + optionalString stdenv.isDarwin ''
+        substituteInPlace hints/darwin.sh --replace "env MACOSX_DEPLOYMENT_TARGET=10.3" ""
+      '' + optionalString (!enableThreading) ''
+        # We need to do this because the bootstrap doesn't have a static libpthread
+        sed -i 's,\(libswanted.*\)pthread,\1,g' Configure
+      '';
+
+    preBuild = optionalString (!(stdenv ? cc && stdenv.cc.nativeTools))
+      ''
+        # Make Cwd work on NixOS (where we don't have a /bin/pwd).
+        substituteInPlace dist/PathTools/Cwd.pm --replace "'/bin/pwd'" "'$(type -tP pwd)'"
+      '';
+
+    # Inspired by nuke-references, which I can't depend on because it uses perl. Perhaps it should just use sed :)
+    postInstall = ''
+      self=$(echo $out | sed -n "s|^$NIX_STORE/\\([a-z0-9]\{32\}\\)-.*|\1|p")
+
+      sed -i "/$self/b; s|$NIX_STORE/[a-z0-9]\{32\}-|$NIX_STORE/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-|g" "$out"/lib/perl5/*/*/Config.pm
+      sed -i "/$self/b; s|$NIX_STORE/[a-z0-9]\{32\}-|$NIX_STORE/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-|g" "$out"/lib/perl5/*/*/Config_heavy.pl
+    '';
+
+    setupHook = ./setup-hook.sh;
+
+    passthru.libPrefix = "lib/perl5/site_perl";
+
+    meta = {
+      homepage = https://www.perl.org/;
+      description = "The standard implementation of the Perl 5 programmming language";
+      maintainers = [ maintainers.eelco ];
+      platforms = platforms.all;
+    };
+  };
+
+in rec {
+
+  perl = perl520;
+
+  perl520 = common {
+    version = "5.20.3";
+    sha256 = "0jlvpd5l5nk7lzfd4akdg1sw6vinbkj6izclyyr0lrbidfky691m";
+
+  };
+
+  perl522 = common {
+    version = "5.22.1";
+    sha256 = "09wg24w5syyafyv87l6z8pxwz4bjgcdj996bx5844k6m9445sirb";
+  };
+
+}
diff --git a/pkgs/development/interpreters/perl/5.20/ld-shared.patch b/pkgs/development/interpreters/perl/ld-shared.patch
index 9f92368df68..9f92368df68 100644
--- a/pkgs/development/interpreters/perl/5.20/ld-shared.patch
+++ b/pkgs/development/interpreters/perl/ld-shared.patch
diff --git a/pkgs/development/interpreters/perl/5.20/no-sys-dirs.patch b/pkgs/development/interpreters/perl/no-sys-dirs.patch
index 1793273a76f..1793273a76f 100644
--- a/pkgs/development/interpreters/perl/5.20/no-sys-dirs.patch
+++ b/pkgs/development/interpreters/perl/no-sys-dirs.patch
diff --git a/pkgs/development/interpreters/perl/5.20/setup-hook.sh b/pkgs/development/interpreters/perl/setup-hook.sh
index a8656b8531d..a8656b8531d 100644
--- a/pkgs/development/interpreters/perl/5.20/setup-hook.sh
+++ b/pkgs/development/interpreters/perl/setup-hook.sh
diff --git a/pkgs/development/interpreters/picolisp/default.nix b/pkgs/development/interpreters/picolisp/default.nix
index 0e003af3aff..5832bbea9b7 100644
--- a/pkgs/development/interpreters/picolisp/default.nix
+++ b/pkgs/development/interpreters/picolisp/default.nix
@@ -38,7 +38,7 @@ stdenv.mkDerivation rec {
   '';
 
   meta = {
-    description = "A simple Lisp with an integrated database.";
+    description = "A simple Lisp with an integrated database";
     homepage = http://picolisp.com/;
     license = licenses.mit;
     platform = platforms.all;