From 49afaab294367f87a28f84e46667f12582fbde60 Mon Sep 17 00:00:00 2001 From: Ben Wolsieffer Date: Thu, 1 Aug 2019 21:27:55 -0400 Subject: [PATCH] perl: fix errant references when cross-compiling --- .../development/interpreters/perl/default.nix | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/pkgs/development/interpreters/perl/default.nix b/pkgs/development/interpreters/perl/default.nix index 2ecc5cbb2ef6e..4503fd0bf49bd 100644 --- a/pkgs/development/interpreters/perl/default.nix +++ b/pkgs/development/interpreters/perl/default.nix @@ -1,5 +1,5 @@ { config, lib, stdenv, fetchurl, pkgs, buildPackages, callPackage -, enableThreading ? stdenv ? glibc, makeWrapper +, enableThreading ? stdenv ? glibc, coreutils, makeWrapper }: with lib; @@ -35,7 +35,7 @@ let # TODO: Add a "dev" output containing the header files. outputs = [ "out" "man" "devdoc" ] ++ - stdenv.lib.optional crossCompiling "dev"; + optional crossCompiling "dev"; setOutputFlags = false; disallowedReferences = [ stdenv.cc ]; @@ -57,12 +57,20 @@ let ++ optionals stdenv.isDarwin [ ./cpp-precomp.patch ./sw_vers.patch ] ++ optional crossCompiling ./MakeMaker-cross.patch; - postPatch = '' - pwd="$(type -P pwd)" + # This is not done for native builds because pwd may need to come from + # bootstrap tools when building bootstrap perl. + postPatch = (if crossCompiling then '' substituteInPlace dist/PathTools/Cwd.pm \ - --replace "/bin/pwd" "$pwd" - '' + stdenv.lib.optionalString crossCompiling '' + --replace "/bin/pwd" '${coreutils}/bin/pwd' substituteInPlace cnf/configure_tool.sh --replace "cc -E -P" "cc -E" + '' else '' + substituteInPlace dist/PathTools/Cwd.pm \ + --replace "/bin/pwd" "$(type -P pwd)" + '') + + # Perl's build system uses the src variable, and its value may end up in + # the output in some cases (when cross-compiling) + '' + unset src ''; # Build a thread-safe Perl with a dynamic libperls.o. We need the @@ -85,7 +93,7 @@ let ++ optional stdenv.isSunOS "-Dcc=gcc" ++ optional enableThreading "-Dusethreads"; - configureScript = stdenv.lib.optionalString (!crossCompiling) "${stdenv.shell} ./Configure"; + configureScript = optionalString (!crossCompiling) "${stdenv.shell} ./Configure"; dontAddPrefix = !crossCompiling; @@ -140,7 +148,7 @@ let }" /no-such-path \ --replace "${stdenv.cc}" /no-such-path \ --replace "$man" /no-such-path - '' + stdenv.lib.optionalString crossCompiling + '' + optionalString crossCompiling '' mkdir -p $dev/lib/perl5/cross_perl/${version} for dir in cnf/{stub,cpan}; do @@ -172,7 +180,7 @@ let platforms = platforms.all; priority = 6; # in `buildEnv' (including the one inside `perl.withPackages') the library files will have priority over files in `perl` }; - } // stdenv.lib.optionalAttrs (stdenv.buildPlatform != stdenv.hostPlatform) rec { + } // optionalAttrs (stdenv.buildPlatform != stdenv.hostPlatform) rec { crossVersion = "980998f7d11baf97284426ca91f84681d49a08f5"; # Jul 20, 2019 perl-cross-src = fetchurl {