summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2022-01-24 12:49:58 +0000
committerAlyssa Ross <hi@alyssa.is>2022-03-22 21:18:04 +0000
commit8ecb79026427f38b096f7782de9a61c03ca0e3a0 (patch)
treea5533bade834fe0591ed644ff0027a20fef469fc
parentcd18f5574aca8a2251eacba1b489bfb96fde527e (diff)
downloadnixpkgs-8ecb79026427f38b096f7782de9a61c03ca0e3a0.tar
nixpkgs-8ecb79026427f38b096f7782de9a61c03ca0e3a0.tar.gz
nixpkgs-8ecb79026427f38b096f7782de9a61c03ca0e3a0.tar.bz2
nixpkgs-8ecb79026427f38b096f7782de9a61c03ca0e3a0.tar.lz
nixpkgs-8ecb79026427f38b096f7782de9a61c03ca0e3a0.tar.xz
nixpkgs-8ecb79026427f38b096f7782de9a61c03ca0e3a0.tar.zst
nixpkgs-8ecb79026427f38b096f7782de9a61c03ca0e3a0.zip
openssl: stop static binaries referencing libs
Previously, the "out" output of openssl would contain would contain a
couple of tiny libraries in etc/, and the big OpenSSL libraries in
lib/.  This bloated closures when building things against OpenSSL with
pkgsStatic.  To fix this, introduce a lib output, so only the config
files are left in out.

Additionally, we have to disable support for dynamic engines in static
builds to avoid a reference to the engines directory in $lib.  I don't
think it's likely that this would ever have worked anyway.
-rw-r--r--pkgs/development/libraries/openssl/default.nix18
1 files changed, 16 insertions, 2 deletions
diff --git a/pkgs/development/libraries/openssl/default.nix b/pkgs/development/libraries/openssl/default.nix
index 33ddbf7018c..3e190d4b450 100644
--- a/pkgs/development/libraries/openssl/default.nix
+++ b/pkgs/development/libraries/openssl/default.nix
@@ -45,7 +45,7 @@ let
                   '!defined(__ANDROID__) && !defined(__OpenBSD__) && 0'
     '';
 
-    outputs = [ "bin" "dev" "out" "man" ] ++ lib.optional withDocs "doc";
+    outputs = [ "bin" "dev" "out" "lib" "man" ] ++ lib.optional withDocs "doc";
     setOutputFlags = false;
     separateDebugInfo =
       !stdenv.hostPlatform.isDarwin &&
@@ -94,7 +94,7 @@ let
     dontAddStaticConfigureFlags = true;
     configureFlags = [
       "shared" # "shared" builds both shared and static libraries
-      "--libdir=lib"
+      "--libdir=${placeholder "lib"}/lib"
       "--openssldir=etc/ssl"
     ] ++ lib.optionals withCryptodev [
       "-DHAVE_CRYPTODEV"
@@ -103,6 +103,7 @@ let
       ++ lib.optional enableSSL3 "enable-ssl3"
       ++ lib.optional (lib.versionAtLeast version "3.0.0") "enable-ktls"
       ++ lib.optional (lib.versionAtLeast version "1.1.0" && stdenv.hostPlatform.isAarch64) "no-afalgeng"
+      ++ lib.optional static "disable-dynamic-engine"
       # OpenSSL needs a specific `no-shared` configure flag.
       # See https://wiki.openssl.org/index.php/Compilation_and_Installation#Configure_Options
       # for a comprehensive list of configuration options.
@@ -117,6 +118,19 @@ let
       "MANSUFFIX=ssl"
     ];
 
+    buildFlags = lib.optionals static [
+      # Even though engines are disabled in static builds, we have to
+      # override ENGINESDIR so the bin output doesn't end up with an
+      # reference to the lib output.
+      "ENGINESDIR=/"
+    ];
+
+    installFlags = lib.optionals static [
+      # Build system wants to be able to create the engines directory
+      # even though nothing will get installed to it.
+      "ENGINESDIR=/build/engines"
+    ];
+
     enableParallelBuilding = true;
 
     postInstall =