diff --git a/pkgs/development/compilers/ghc/boot.nix b/pkgs/development/compilers/ghc/boot.nix index 02cb9866739c..254a9fb855a0 100644 --- a/pkgs/development/compilers/ghc/boot.nix +++ b/pkgs/development/compilers/ghc/boot.nix @@ -38,7 +38,7 @@ stdenv.mkDerivation { # The binaries for Darwin use frameworks, so fake those frameworks, # and create some wrapper scripts that set DYLD_FRAMEWORK_PATH so # that the executables work with no special setup. - postInstall = (if stdenv.isDarwin then '' + postInstall = if stdenv.isDarwin then " ensureDir $out/frameworks/GMP.framework/Versions/A ln -s ${gmp}/lib/libgmp.dylib $out/frameworks/GMP.framework/GMP @@ -50,20 +50,11 @@ stdenv.mkDerivation { mv $out/bin $out/bin-orig mkdir $out/bin for i in $(cd $out/bin-orig && ls); do - echo "#! $SHELL -e" >> $out/bin/$i - echo "DYLD_FRAMEWORK_PATH=$out/frameworks exec $out/bin-orig/$i -framework-path $out/frameworks \"\$@\"" >> $out/bin/$i + echo \"#! $SHELL -e\" >> $out/bin/$i + echo \"DYLD_FRAMEWORK_PATH=$out/frameworks exec $out/bin-orig/$i -framework-path $out/frameworks \\\"\\$@\\\"\" >> $out/bin/$i chmod +x $out/bin/$i done - '' else "") + '' - - # Hack for Perl 5.10 compatibility ($* no longer works). - substituteInPlace $out/lib/*/ghc-asm --replace 'local($*) = 1;' ' - BEGIN { - require overload; overload::constant( qr => sub { "(?m:$_[1])" } ); - } - ' - - ''; + " else ""; } diff --git a/pkgs/development/interpreters/perl/builder.sh b/pkgs/development/interpreters/perl-5.10/builder.sh similarity index 100% rename from pkgs/development/interpreters/perl/builder.sh rename to pkgs/development/interpreters/perl-5.10/builder.sh diff --git a/pkgs/development/interpreters/perl-5.10/default.nix b/pkgs/development/interpreters/perl-5.10/default.nix new file mode 100644 index 000000000000..cb479c97be20 --- /dev/null +++ b/pkgs/development/interpreters/perl-5.10/default.nix @@ -0,0 +1,23 @@ +{stdenv, fetchurl}: + +stdenv.mkDerivation { + name = "perl-5.10.0"; + + builder = ./builder.sh; + src = fetchurl { + url = mirror://cpan/src/perl-5.10.0.tar.gz; + sha256 = "0bivbz15x02m02gqs6hs77cgjr2msfrhnvp5xqk359jg6w6llill"; + }; + + patches = [ + # 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.) + ./no-sys-dirs.patch + ]; + + setupHook = ./setup-hook.sh; +} diff --git a/pkgs/development/interpreters/perl/no-sys-dirs.patch b/pkgs/development/interpreters/perl-5.10/no-sys-dirs.patch similarity index 100% rename from pkgs/development/interpreters/perl/no-sys-dirs.patch rename to pkgs/development/interpreters/perl-5.10/no-sys-dirs.patch diff --git a/pkgs/development/interpreters/perl/setup-hook.sh b/pkgs/development/interpreters/perl-5.10/setup-hook.sh similarity index 100% rename from pkgs/development/interpreters/perl/setup-hook.sh rename to pkgs/development/interpreters/perl-5.10/setup-hook.sh diff --git a/pkgs/development/interpreters/perl-5.8/builder.sh b/pkgs/development/interpreters/perl-5.8/builder.sh new file mode 100644 index 000000000000..8e008cb4c637 --- /dev/null +++ b/pkgs/development/interpreters/perl-5.8/builder.sh @@ -0,0 +1,24 @@ +source $stdenv/setup + +if test "$NIX_ENFORCE_PURITY" = "1"; then + GLIBC=$(cat $NIX_GCC/nix-support/orig-libc) + extraflags="-Dlocincpth=$GLIBC/include -Dloclibpth=$GLIBC/lib" +fi + +configureScript=./Configure +configureFlags="-de -Dcc=gcc -Dprefix=$out -Dman1dir=$out/share/man/man1 -Dman3dir=$out/share/man/man3 -Uinstallusrbinperl $extraflags" +dontAddPrefix=1 + +preBuild=preBuild +preBuild() { + # Make Cwd work on NixOS (where we don't have a /bin/pwd). + substituteInPlace lib/Cwd.pm --replace "'/bin/pwd'" "'$(type -tP pwd)'" +} + +postInstall=postInstall +postInstall() { + ensureDir "$out/nix-support" + cp $setupHook $out/nix-support/setup-hook +} + +genericBuild diff --git a/pkgs/development/interpreters/perl/default.nix b/pkgs/development/interpreters/perl-5.8/default.nix similarity index 100% rename from pkgs/development/interpreters/perl/default.nix rename to pkgs/development/interpreters/perl-5.8/default.nix diff --git a/pkgs/development/interpreters/perl/gcc-4.2.patch b/pkgs/development/interpreters/perl-5.8/gcc-4.2.patch similarity index 100% rename from pkgs/development/interpreters/perl/gcc-4.2.patch rename to pkgs/development/interpreters/perl-5.8/gcc-4.2.patch diff --git a/pkgs/development/interpreters/perl-5.8/no-sys-dirs.patch b/pkgs/development/interpreters/perl-5.8/no-sys-dirs.patch new file mode 100644 index 000000000000..0b1164a32509 --- /dev/null +++ b/pkgs/development/interpreters/perl-5.8/no-sys-dirs.patch @@ -0,0 +1,169 @@ +diff -rc perl-5.10.0-orig/Configure perl-5.10.0/Configure +*** perl-5.10.0-orig/Configure 2007-12-18 11:47:07.000000000 +0100 +--- perl-5.10.0/Configure 2008-02-21 17:00:40.000000000 +0100 +*************** +*** 104,118 **** + 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" + + for p in $paths + do +--- 104,110 ---- + fi + + : Proper PATH setting +! paths='' + + for p in $paths + do +*************** +*** 1271,1287 **** + groupstype='' + libnames='' + : change the next line if compiling for Xenix/286 on Xenix/386 +! xlibpth='/usr/lib/386 /lib/386' + : 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" + + : 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" + + : Private path used by Configure to find libraries. Its value + : is prepended to libpth. This variable takes care of special +--- 1263,1274 ---- + groupstype='' + libnames='' + : change the next line if compiling for Xenix/286 on Xenix/386 +! xlibpth='' + : Possible local library directories to search. +! loclibpth="" + + : general looking path for locating libraries +! glibpth="" + + : Private path used by Configure to find libraries. Its value + : is prepended to libpth. This variable takes care of special +*************** +*** 1302,1309 **** + + : 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" + : + : no include file wanted by default + inclwanted='' +--- 1289,1295 ---- + + : Possible local include directories to search. + : Set locincpth to "" in a hint file to defeat local include searches. +! locincpth="" + : + : no include file wanted by default + inclwanted='' +*************** +*** 1331,1338 **** + 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 + +--- 1317,1322 ---- +*************** +*** 2340,2346 **** + zip + " + pth=`echo $PATH | sed -e "s/$p_/ /g"` +- pth="$pth /lib /usr/lib" + for file in $loclist; do + eval xxx=\$$file + case "$xxx" in +--- 2324,2329 ---- +*************** +*** 8155,8167 **** + 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` + ;; + esac + if $test -d "$sysman"; then +--- 8138,8145 ---- + echo " " + case "$sysman" in + '') +! syspath='' +! sysman='' + ;; + esac + if $test -d "$sysman"; then +*************** +*** 19005,19013 **** + case "$full_ar" in + '') full_ar=$ar ;; + esac + + : Store the full pathname to the sed program for use in the C program +! full_sed=$sed + + : see what type gids are declared as in the kernel + echo " " +--- 18983,18992 ---- + 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 + + : see what type gids are declared as in the kernel + echo " " +diff -rc perl-5.10.0-orig/ext/Errno/Errno_pm.PL perl-5.10.0/ext/Errno/Errno_pm.PL +*** perl-5.10.0-orig/ext/Errno/Errno_pm.PL 2007-12-18 11:47:07.000000000 +0100 +--- perl-5.10.0/ext/Errno/Errno_pm.PL 2008-02-21 17:00:02.000000000 +0100 +*************** +*** 140,150 **** + 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 +! ) { + # Some Linuxes have weird errno.hs which generate + # no #file or #line directives + my $linux_errno_h = -e '/usr/include/errno.h' ? +--- 140,146 ---- + if ($dep =~ /(\S+errno\.h)/) { + $file{$1} = 1; + } +! } elsif (0) { + # Some Linuxes have weird errno.hs which generate + # no #file or #line directives + my $linux_errno_h = -e '/usr/include/errno.h' ? diff --git a/pkgs/development/interpreters/perl-5.8/setup-hook.sh b/pkgs/development/interpreters/perl-5.8/setup-hook.sh new file mode 100644 index 000000000000..70ce2cf8b463 --- /dev/null +++ b/pkgs/development/interpreters/perl-5.8/setup-hook.sh @@ -0,0 +1,5 @@ +addPerlLibPath () { + addToSearchPath PERL5LIB /lib/site_perl "" $1 +} + +envHooks=(${envHooks[@]} addPerlLibPath) diff --git a/pkgs/development/interpreters/perl/perl-5.10.nix b/pkgs/development/interpreters/perl/perl-5.10.nix deleted file mode 100644 index 01f314c19a4d..000000000000 --- a/pkgs/development/interpreters/perl/perl-5.10.nix +++ /dev/null @@ -1,21 +0,0 @@ -{stdenv, fetchurl}: - -stdenv.mkDerivation { - name = "perl-5.10.0"; - - builder = ./builder.sh; - src = fetchurl { - url = http://www.cpan.org/src/perl-5.10.0.tar.gz; - sha256 = "0bivbz15x02m02gqs6hs77cgjr2msfrhnvp5xqk359jg6w6llill"; - }; - - # 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.) - patches = [./no-sys-dirs.patch]; - - setupHook = ./setup-hook.sh; -} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 3b5b42aff76b..2a76e3285f4f 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1396,8 +1396,9 @@ rec { }; ghcboot = lowPrio (appendToName "boot" (import ../development/compilers/ghc/boot.nix { - inherit fetchurl stdenv perl ncurses gmp; + inherit fetchurl stdenv ncurses gmp; readline = if stdenv.system == "i686-linux" then readline4 else readline; + perl = perl58; })); /* @@ -1625,6 +1626,10 @@ rec { perl = if !stdenv.isLinux then sysPerl else realPerl; + perl58 = import ../development/interpreters/perl-5.8 { + inherit fetchurl stdenv; + }; + # FIXME: unixODBC needs patching on Darwin (see darwinports) phpOld = import ../development/interpreters/php { inherit stdenv fetchurl flex bison libxml2 apacheHttpd; @@ -1666,7 +1671,7 @@ rec { Qi = QiFun null; - realPerl = import ../development/interpreters/perl { + realPerl = import ../development/interpreters/perl-5.10 { inherit fetchurl stdenv; };