openssl: cross compilation without host perl
The perl reference is in the interpreter line for c_rehash, so fix that while we're here.
This commit is contained in:
parent
efd28cc9df
commit
ef24a2815e
@ -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…
x
Reference in New Issue
Block a user