openssl: cross compilation without host perl

The perl reference is in the interpreter line for c_rehash, so fix
that while we're here.
launchpad/nixpkgs/master
Andrew Childs 3 years ago committed by Frederik Rietdijk
parent efd28cc9df
commit ef24a2815e
  1. 28
      pkgs/development/libraries/openssl/default.nix

@ -3,8 +3,17 @@
, enableSSL2 ? false
, enableSSL3 ? false
, static ? stdenv.hostPlatform.isStatic
# Used to avoid cross compiling perl, for example, in darwin bootstrap tools.
# This will cause c_rehash to refer to perl via the environment, but otherwise
# will produce a perfectly functional openssl binary and library.
, withPerl ? true
}:
assert (
lib.assertMsg (!withPerl -> stdenv.hostPlatform != stdenv.buildPlatform)
"withPerl should not be disabled unless cross compiling"
);
# Note: this package is used for bootstrapping fetchurl, and thus
# cannot use fetchpatch! All mutable patches (generated by GitHub or
# cgit) that are needed here should be included directly in Nixpkgs as
@ -46,7 +55,10 @@ let
separateDebugInfo = !(stdenv.hostPlatform.useLLVM or false) && stdenv.cc.isGNU;
nativeBuildInputs = [ perl ];
buildInputs = lib.optional withCryptodev cryptodev;
buildInputs = lib.optional withCryptodev cryptodev
# perl is included to allow the interpreter path fixup hook to set the
# correct interpreter in c_rehash.
++ lib.optional withPerl perl;
# TODO(@Ericson2314): Improve with mass rebuild
configurePlatforms = [];
@ -108,12 +120,20 @@ let
rm "$out/lib/"*.a
fi
'' +
''
mkdir -p $bin
'' + lib.optionalString (!stdenv.hostPlatform.isWindows)
# Fix bin/c_rehash's perl interpreter line
#
# - openssl 1_0_2: embeds a reference to buildPackages.perl
# - openssl 1_1: emits "#!/usr/bin/env perl"
#
# In the case of openssl_1_0_2, reset the invalid reference and let the
# interpreter hook take care of it.
#
# In both cases, if withPerl = false, the intepreter line is expected be
# "#!/usr/bin/env perl"
''
substituteInPlace $out/bin/c_rehash --replace ${buildPackages.perl} ${perl}
substituteInPlace $out/bin/c_rehash --replace ${buildPackages.perl}/bin/perl "/usr/bin/env perl"
'' +
''
mv $out/bin $bin/

Loading…
Cancel
Save