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:
Andrew Childs 2021-03-11 17:12:41 +09:00 committed by Frederik Rietdijk
parent efd28cc9df
commit ef24a2815e

View File

@ -3,8 +3,17 @@
, enableSSL2 ? false , enableSSL2 ? false
, enableSSL3 ? false , enableSSL3 ? false
, static ? stdenv.hostPlatform.isStatic , 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 # Note: this package is used for bootstrapping fetchurl, and thus
# cannot use fetchpatch! All mutable patches (generated by GitHub or # cannot use fetchpatch! All mutable patches (generated by GitHub or
# cgit) that are needed here should be included directly in Nixpkgs as # 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; separateDebugInfo = !(stdenv.hostPlatform.useLLVM or false) && stdenv.cc.isGNU;
nativeBuildInputs = [ perl ]; 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 # TODO(@Ericson2314): Improve with mass rebuild
configurePlatforms = []; configurePlatforms = [];
@ -108,12 +120,20 @@ let
rm "$out/lib/"*.a rm "$out/lib/"*.a
fi fi
'' +
''
mkdir -p $bin mkdir -p $bin
'' + lib.optionalString (!stdenv.hostPlatform.isWindows) '' + 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/ mv $out/bin $bin/