nixpkgs-suyu/pkgs/development/interpreters/perl/5.20/default.nix
John Wiegley 28b6fb61e6 Change occurrences of gcc to the more general cc
This is done for the sake of Yosemite, which does not have gcc, and yet
this change is also compatible with Linux.
2014-12-26 11:06:21 -06:00

80 lines
2.3 KiB
Nix

{ 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 {
inherit (stdenv.lib) optional optionalString;
};
stdenv.mkDerivation rec {
name = "perl-5.20.1";
src = fetchurl {
url = "mirror://cpan/authors/id/S/SH/SHAY/${name}.tar.gz";
sha256 = "1dfl4v5fngnkd1c4278gcdjgcapsw7laxq0b34nxrx76z4805wgy";
};
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 ./no-libutil.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 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")
''}
'';
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";
}