diff --git a/pkgs/development/interpreters/perl/builder.sh b/pkgs/development/interpreters/perl/builder.sh index 7a925e6dbfd8..09ffd1c16a84 100755 --- a/pkgs/development/interpreters/perl/builder.sh +++ b/pkgs/development/interpreters/perl/builder.sh @@ -1,9 +1,10 @@ -#! /bin/sh +#! /bin/sh -e -. $stdenv/setup || exit 1 +buildinputs="$patch" +. $stdenv/setup -tar xvfz $src || exit 1 -cd perl-* || exit 1 +tar xvfz $src +cd perl-* # Perl's Configure messes with PATH. We can't have that, so we patch it. # Yeah, this is an ugly hack. @@ -14,13 +15,14 @@ cat Configure | \ grep -v '^glibpth=' | \ grep -v '^loclibpth=' | \ grep -v '^locincpth=' | \ - cat > Configure.tmp || exit 1 -mv Configure.tmp Configure || exit 1 -chmod +x Configure || exit 1 + cat > Configure.tmp +mv Configure.tmp Configure +chmod +x Configure + +patch -p1 < $srcPatch ./Configure -de -Dcc=gcc -Dprefix=$out -Uinstallusrbinperl \ -Dlocincpth="$NIX_LIBC_INCLUDES" \ - -Dloclibpth="$NIX_LIBC_LIBS" \ - || exit 1 -make || exit 1 -make install || exit 1 + -Dloclibpth="$NIX_LIBC_LIBS" +make +make install diff --git a/pkgs/development/interpreters/perl/default.nix b/pkgs/development/interpreters/perl/default.nix index 8d9fa7f610d3..26f44b9ef81c 100644 --- a/pkgs/development/interpreters/perl/default.nix +++ b/pkgs/development/interpreters/perl/default.nix @@ -1,10 +1,23 @@ -{stdenv, fetchurl}: derivation { - name = "perl-5.8.0"; +{stdenv, fetchurl, patch}: + +derivation { + name = "perl-5.8.3"; system = stdenv.system; + builder = ./builder.sh; src = fetchurl { - url = ftp://ftp.cs.uu.nl/mirror/CPAN/src/5.0/perl-5.8.1.tar.gz; - md5 = "87cf132f1fbf23e780f0b218046438a6"; - }; - stdenv = stdenv; + url = ftp://ftp.cs.uu.nl/mirror/CPAN/src/5.0/perl-5.8.3.tar.gz; + md5 = "6d2b389f8c6424b7af303f417947714f"; + }; + + # This patch does the following: + # 1) Do use the PATH environment variable to find the `pwd' command. + # By default, Perl will only look for it in /lib and /usr/lib. + # !!! what are the security implications of this? + # 2) Force the use of , not /usr/include/errno.h, on Linux + # systems. (This actually appears to be due to a bug in Perl.) + + srcPatch = ./patch; + + inherit stdenv patch; } diff --git a/pkgs/development/interpreters/perl/patch b/pkgs/development/interpreters/perl/patch new file mode 100644 index 000000000000..f3dfd9bd6f31 --- /dev/null +++ b/pkgs/development/interpreters/perl/patch @@ -0,0 +1,42 @@ +diff -rc perl-5.8.3-orig/ext/Errno/Errno_pm.PL perl-5.8.3/ext/Errno/Errno_pm.PL +*** perl-5.8.3-orig/ext/Errno/Errno_pm.PL 2003-08-04 09:37:13.000000000 +0200 +--- perl-5.8.3/ext/Errno/Errno_pm.PL 2004-02-20 16:59:05.000000000 +0100 +*************** +*** 105,111 **** + # Watch out for cross compiling for EPOC (usually done on linux) + $file{'/usr/local/epocemx/epocsdk/include/libc/sys/errno.h'} = 1; + } elsif ($^O eq 'linux' && +! $Config{gccversion} ne '' # might be using, say, Intel's icc + ) { + # Some Linuxes have weird errno.hs which generate + # no #file or #line directives +--- 105,111 ---- + # Watch out for cross compiling for EPOC (usually done on linux) + $file{'/usr/local/epocemx/epocsdk/include/libc/sys/errno.h'} = 1; + } elsif ($^O eq 'linux' && +! $Config{gccversion} eq '' # might be using, say, Intel's icc + ) { + # Some Linuxes have weird errno.hs which generate + # no #file or #line directives +Only in perl-5.8.3/ext/Errno: Errno_pm.PL~ +diff -rc perl-5.8.3-orig/lib/Cwd.pm perl-5.8.3/lib/Cwd.pm +*** perl-5.8.3-orig/lib/Cwd.pm 2003-12-20 00:05:30.000000000 +0100 +--- perl-5.8.3/lib/Cwd.pm 2004-02-20 16:58:16.000000000 +0100 +*************** +*** 201,207 **** + + # The 'natural and safe form' for UNIX (pwd may be setuid root) + sub _backtick_pwd { +! local @ENV{qw(PATH IFS CDPATH ENV BASH_ENV)}; + my $cwd = `$pwd_cmd`; + # Belt-and-suspenders in case someone said "undef $/". + local $/ = "\n"; +--- 201,207 ---- + + # The 'natural and safe form' for UNIX (pwd may be setuid root) + sub _backtick_pwd { +! local @ENV{qw(IFS CDPATH ENV BASH_ENV)}; + my $cwd = `$pwd_cmd`; + # Belt-and-suspenders in case someone said "undef $/". + local $/ = "\n"; +Only in perl-5.8.3/lib: Cwd.pm~ diff --git a/pkgs/system/all-packages-generic.nix b/pkgs/system/all-packages-generic.nix index 00685c545e0e..9aae5bb607f2 100644 --- a/pkgs/system/all-packages-generic.nix +++ b/pkgs/system/all-packages-generic.nix @@ -232,6 +232,7 @@ perl = (import ../development/interpreters/perl) { inherit fetchurl stdenv; + patch = gnupatch; }; python = (import ../development/interpreters/python) {