forked from mirrors/nixpkgs
1e575d3572
On MacOS X, we used to use the native perl interpreter from /usr/bin. Unfortunately, that interpreter fails to build a number of packages (Subversion, Git, etc. ...), because it assumes knowledge about the underlying C compiler that is not valid for the compiler used by Nix. For example, /usr/bin/perl assumes that the compiler can build binaries for both the ppc and the x86 architecture. /usr/bin/gcc can do that, but the gcc from Nix can't. The solution is to compile Perl 5.10 in Nix so that the ./configure phase can properly detect the system's capabilities. However, note that the resulting binary is impure: it will find headers in /usr/include and libraries in /usr/lib. In this respect, the Nix-compiled perl binary is no different than the native one in /usr/bin -- it's just configured more accurately. svn path=/nixpkgs/trunk/; revision=17870
64 lines
1.8 KiB
Nix
64 lines
1.8 KiB
Nix
{ stdenv, fetchurl
|
|
, impureLibcPath ? null
|
|
}:
|
|
|
|
stdenv.mkDerivation {
|
|
name = "perl-5.8.8";
|
|
|
|
builder =
|
|
''
|
|
source $stdenv/setup
|
|
|
|
if test "$NIX_ENFORCE_PURITY" = "1"; then
|
|
GLIBC=${if impureLibcPath == null then "$(cat $NIX_GCC/nix-support/orig-libc)" else impureLibcPath}
|
|
extraflags="-Dlocincpth=$GLIBC/include -Dloclibpth=$GLIBC/lib"
|
|
fi
|
|
|
|
configureScript=./Configure
|
|
configureFlags="-de -Dcc=gcc -Dprefix=$out -Uinstallusrbinperl $extraflags"
|
|
dontAddPrefix=1
|
|
|
|
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() {
|
|
ensureDir "$out/nix-support"
|
|
cp $setupHook $out/nix-support/setup-hook
|
|
}
|
|
|
|
genericBuild
|
|
|
|
'';
|
|
|
|
src = fetchurl {
|
|
url = mirror://cpan/src/perl-5.8.8.tar.bz2;
|
|
sha256 = "1j8vzc6lva49mwdxkzhvm78dkxyprqs4n4057amqvsh4kh6i92l1";
|
|
};
|
|
|
|
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 <errno.h>, not /usr/include/errno.h, on Linux
|
|
# systems. (This actually appears to be due to a bug in Perl.)
|
|
./no-sys-dirs.patch
|
|
|
|
# Patch to make Perl 5.8.8 build with GCC 4.2. Taken from
|
|
# http://www.nntp.perl.org/group/perl.perl5.porters/2006/11/msg117738.html
|
|
./gcc-4.2.patch
|
|
|
|
# Fix for "SysV.xs:7:25: error: asm/page.h: No such file or
|
|
# directory" on recent kernel headers. From
|
|
# http://bugs.gentoo.org/show_bug.cgi?id=168312.
|
|
(fetchurl {
|
|
url = http://bugs.gentoo.org/attachment.cgi?id=111427;
|
|
sha256 = "017pj0nbqb7kwj3cs727c2l2d8c45l9cwxf71slgb807kn3ppgmn";
|
|
})
|
|
];
|
|
|
|
setupHook = ./setup-hook.sh;
|
|
}
|