mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-25 16:33:15 +00:00
stdenv: introduce dontAddStaticConfigureFlags
With removeUnknownConfigureFlags, it's impossible to express a package that needs --enable-static, but will not accept --disable-shared, without overriding the result of removeUnknownConfigureFlags _again_ in pkgs/top-level/static.nix. It would be much better (and more in line with the rest of Nixpkgs) if we encoded changes needed for static builds in package definitions themselves, rather than in an ever-expanding list in static.nix. This is especially true when doing it in static.nix is going to require multiple overrides to express what could be expressed with stdenv options. So as a step in that direction, and to fix the problem described above, here I replace removeUnknownConfigureFlags with a new stdenv option, dontAddStaticConfigureFlags. With this mechanism, a package that needs one but not both of the flags just needs to set dontAddStaticConfigureFlags and then set up configureFlags manually based on stdenv.hostPlatform.isStatic.
This commit is contained in:
parent
8f3ead7190
commit
b0b5ef7286
@ -463,6 +463,12 @@ The prefix under which the package must be installed, passed via the `--prefix`
|
|||||||
|
|
||||||
The key to use when specifying the prefix. By default, this is set to `--prefix=` as that is used by the majority of packages.
|
The key to use when specifying the prefix. By default, this is set to `--prefix=` as that is used by the majority of packages.
|
||||||
|
|
||||||
|
##### `dontAddStaticConfigureFlags`
|
||||||
|
|
||||||
|
By default, when building statically, stdenv will try to add build system appropriate configure flags to try to enable static builds.
|
||||||
|
|
||||||
|
If this is undesirable, set this variable to true.
|
||||||
|
|
||||||
##### `dontAddDisableDepTrack` {#var-stdenv-dontAddDisableDepTrack}
|
##### `dontAddDisableDepTrack` {#var-stdenv-dontAddDisableDepTrack}
|
||||||
|
|
||||||
By default, the flag `--disable-dependency-tracking` is added to the configure flags to speed up Automake-based builds. If this is undesirable, set this variable to true.
|
By default, the flag `--disable-dependency-tracking` is added to the configure flags to speed up Automake-based builds. If this is undesirable, set this variable to true.
|
||||||
@ -475,7 +481,7 @@ By default, the configure phase applies some special hackery to all files called
|
|||||||
|
|
||||||
By default, when the configure script has `--enable-static`, the option `--disable-static` is added to the configure flags.
|
By default, when the configure script has `--enable-static`, the option `--disable-static` is added to the configure flags.
|
||||||
|
|
||||||
If this is undesirable, set this variable to true.
|
If this is undesirable, set this variable to true. It is automatically set to true when building statically, for example through `pkgsStatic`.
|
||||||
|
|
||||||
##### `configurePlatforms` {#var-stdenv-configurePlatforms}
|
##### `configurePlatforms` {#var-stdenv-configurePlatforms}
|
||||||
|
|
||||||
|
@ -93,6 +93,8 @@ let
|
|||||||
throw "Not sure what configuration to use for ${stdenv.hostPlatform.config}"
|
throw "Not sure what configuration to use for ${stdenv.hostPlatform.config}"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
# OpenSSL doesn't like the `--enable-static` / `--disable-shared` flags.
|
||||||
|
dontAddStaticConfigureFlags = true;
|
||||||
configureFlags = [
|
configureFlags = [
|
||||||
"shared" # "shared" builds both shared and static libraries
|
"shared" # "shared" builds both shared and static libraries
|
||||||
"--libdir=lib"
|
"--libdir=lib"
|
||||||
|
@ -44,6 +44,7 @@ rec {
|
|||||||
then throw "Cannot build fully static binaries on Darwin/macOS"
|
then throw "Cannot build fully static binaries on Darwin/macOS"
|
||||||
else stdenv'.mkDerivation (args // {
|
else stdenv'.mkDerivation (args // {
|
||||||
NIX_CFLAGS_LINK = toString (args.NIX_CFLAGS_LINK or "") + " -static";
|
NIX_CFLAGS_LINK = toString (args.NIX_CFLAGS_LINK or "") + " -static";
|
||||||
|
} // pkgs.lib.optionalAttrs (!(args.dontAddStaticConfigureFlags or false)) {
|
||||||
configureFlags = (args.configureFlags or []) ++ [
|
configureFlags = (args.configureFlags or []) ++ [
|
||||||
"--disable-shared" # brrr...
|
"--disable-shared" # brrr...
|
||||||
];
|
];
|
||||||
@ -56,6 +57,7 @@ rec {
|
|||||||
makeStaticLibraries = stdenv: stdenv //
|
makeStaticLibraries = stdenv: stdenv //
|
||||||
{ mkDerivation = args: stdenv.mkDerivation (args // {
|
{ mkDerivation = args: stdenv.mkDerivation (args // {
|
||||||
dontDisableStatic = true;
|
dontDisableStatic = true;
|
||||||
|
} // pkgs.lib.optionalAttrs (!(args.dontAddStaticConfigureFlags or false)) {
|
||||||
configureFlags = (args.configureFlags or []) ++ [
|
configureFlags = (args.configureFlags or []) ++ [
|
||||||
"--enable-static"
|
"--enable-static"
|
||||||
"--disable-shared"
|
"--disable-shared"
|
||||||
|
@ -50,14 +50,10 @@ self: super: let
|
|||||||
# ++ optional (super.stdenv.hostPlatform.libc == "glibc") ((flip overrideInStdenv) [ self.stdenv.glibc.static ])
|
# ++ optional (super.stdenv.hostPlatform.libc == "glibc") ((flip overrideInStdenv) [ self.stdenv.glibc.static ])
|
||||||
;
|
;
|
||||||
|
|
||||||
removeUnknownConfigureFlags = f: with self.lib;
|
|
||||||
remove "--disable-shared"
|
|
||||||
(remove "--enable-static" f);
|
|
||||||
|
|
||||||
ocamlFixPackage = b:
|
ocamlFixPackage = b:
|
||||||
b.overrideAttrs (o: {
|
b.overrideAttrs (o: {
|
||||||
configurePlatforms = [ ];
|
configurePlatforms = [ ];
|
||||||
configureFlags = removeUnknownConfigureFlags (o.configureFlags or [ ]);
|
dontAddStaticConfigureFlags = true;
|
||||||
buildInputs = o.buildInputs ++ o.nativeBuildInputs or [ ];
|
buildInputs = o.buildInputs ++ o.nativeBuildInputs or [ ];
|
||||||
propagatedNativeBuildInputs = o.propagatedBuildInputs or [ ];
|
propagatedNativeBuildInputs = o.propagatedBuildInputs or [ ];
|
||||||
});
|
});
|
||||||
@ -75,7 +71,8 @@ self: super: let
|
|||||||
preConfigure = ''
|
preConfigure = ''
|
||||||
configureFlagsArray+=("-cc" "$CC" "-as" "$AS" "-partialld" "$LD -r")
|
configureFlagsArray+=("-cc" "$CC" "-as" "$AS" "-partialld" "$LD -r")
|
||||||
'';
|
'';
|
||||||
configureFlags = (removeUnknownConfigureFlags o.configureFlags) ++ [
|
dontAddStaticConfigureFlags = true;
|
||||||
|
configureFlags = [
|
||||||
"--no-shared-libs"
|
"--no-shared-libs"
|
||||||
"-host ${o.stdenv.hostPlatform.config}"
|
"-host ${o.stdenv.hostPlatform.config}"
|
||||||
"-target ${o.stdenv.targetPlatform.config}"
|
"-target ${o.stdenv.targetPlatform.config}"
|
||||||
@ -124,11 +121,6 @@ in {
|
|||||||
if set ? overrideScope' then set.overrideScope' ocamlStaticAdapter else set
|
if set ? overrideScope' then set.overrideScope' ocamlStaticAdapter else set
|
||||||
) super.ocaml-ng;
|
) super.ocaml-ng;
|
||||||
|
|
||||||
openssl = super.openssl_1_1.overrideAttrs (o: {
|
|
||||||
# OpenSSL doesn't like the `--enable-static` / `--disable-shared` flags.
|
|
||||||
configureFlags = (removeUnknownConfigureFlags o.configureFlags);
|
|
||||||
});
|
|
||||||
|
|
||||||
perl = super.perl.override {
|
perl = super.perl.override {
|
||||||
# Don’t use new stdenv zlib because
|
# Don’t use new stdenv zlib because
|
||||||
# it doesn’t like the --disable-shared flag
|
# it doesn’t like the --disable-shared flag
|
||||||
|
Loading…
Reference in New Issue
Block a user