From 67cea803fa668d04cf4a21091678034fafd9e0dc Mon Sep 17 00:00:00 2001 From: Peter Simons Date: Fri, 2 Oct 2009 16:26:05 +0000 Subject: [PATCH] perl-5.8 and perl-5.10: fixed build on MacOS X 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/FCC can do that, but the gcc from Nix can't. The solution is to compile Perl 5.10 via Nix so that it can properly configure itself. However, note that the resulting binary is impure: it will find headers in /usr/include and libraries in /usr/lib -- something a pure perl binary wouldn't do. In this respect our Nix-compiled perl binary is not better than the native one from /usr/bin -- it's just more accurately configured. svn path=/nixpkgs/trunk/; revision=17618 --- .../interpreters/perl-5.10/default.nix | 10 +++++++--- pkgs/development/interpreters/perl-5.8/builder.sh | 8 ++++++-- pkgs/top-level/all-packages.nix | 15 ++++++++------- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/pkgs/development/interpreters/perl-5.10/default.nix b/pkgs/development/interpreters/perl-5.10/default.nix index a8b8dd536a7..8f7908a8097 100644 --- a/pkgs/development/interpreters/perl-5.10/default.nix +++ b/pkgs/development/interpreters/perl-5.10/default.nix @@ -34,10 +34,14 @@ stdenv.mkDerivation { preConfigure = '' configureFlags="$configureFlags -Dprefix=$out -Dman1dir=$out/share/man/man1 -Dman3dir=$out/share/man/man3" - + if test "$NIX_ENFORCE_PURITY" = "1"; then - GLIBC=$(cat $NIX_GCC/nix-support/orig-libc) - configureFlags="$configureFlags -Dlocincpth=$GLIBC/include -Dloclibpth=$GLIBC/lib" + case $system in + *-linux) LIBC=$(cat $NIX_GCC/nix-support/orig-libc) ;; + *-darwin) LIBC=/usr ;; + *) echo unsupported system $system; exit 1 ;; + esac + configureFlags="$configureFlags -Dlocincpth=$LIBC/include -Dloclibpth=$LIBC/lib" fi ''; diff --git a/pkgs/development/interpreters/perl-5.8/builder.sh b/pkgs/development/interpreters/perl-5.8/builder.sh index 79458b3249b..500de901e17 100644 --- a/pkgs/development/interpreters/perl-5.8/builder.sh +++ b/pkgs/development/interpreters/perl-5.8/builder.sh @@ -1,8 +1,12 @@ 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" + case $system in + *-linux) LIBC=$(cat $NIX_GCC/nix-support/orig-libc) ;; + *-darwin) LIBC=/usr ;; + *) echo unsupported system $system; exit 1 ;; + esac + extraflags="-Dlocincpth=$LIBC/include -Dloclibpth=$LIBC/lib" fi configureScript=./Configure diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 538be82c612..0433fff06ae 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2254,18 +2254,19 @@ let inherit (bleedingEdgeRepos) sourceByName; }; - perl = if !stdenv.isLinux then sysPerl else perlReal; + supportsPerl = stdenv.isLinux || system == "i686-darwin"; - perl58 = if !stdenv.isLinux then sysPerl else + perl = if !supportsPerl then sysPerl else + import ../development/interpreters/perl-5.10 { + fetchurl = fetchurlBoot; + inherit stdenv; + }; + + perl58 = if !supportsPerl then sysPerl else import ../development/interpreters/perl-5.8 { inherit fetchurl stdenv; }; - perlReal = import ../development/interpreters/perl-5.10 { - fetchurl = fetchurlBoot; - inherit stdenv; - }; - # FIXME: unixODBC needs patching on Darwin (see darwinports) phpOld = import ../development/interpreters/php { inherit stdenv fetchurl flex bison libxml2 apacheHttpd;