diff --git a/pkgs/development/interpreters/python/cpython/default.nix b/pkgs/development/interpreters/python/cpython/default.nix index b778b62f908..23a3d5d8409 100644 --- a/pkgs/development/interpreters/python/cpython/default.nix +++ b/pkgs/development/interpreters/python/cpython/default.nix @@ -28,6 +28,7 @@ , stripTkinter ? false , rebuildBytecode ? true , stripBytecode ? false +, static ? false }: assert x11Support -> tcl != null @@ -130,7 +131,7 @@ in with passthru; stdenv.mkDerivation { CPPFLAGS = concatStringsSep " " (map (p: "-I${getDev p}/include") buildInputs); LDFLAGS = concatStringsSep " " (map (p: "-L${getLib p}/lib") buildInputs); LIBS = "${optionalString (!stdenv.isDarwin) "-lcrypt"} ${optionalString (ncurses != null) "-lncurses"}"; - NIX_LDFLAGS = optionalString stdenv.isLinux "-lgcc_s"; + NIX_LDFLAGS = optionalString (stdenv.isLinux && !stdenv.hostPlatform.isMusl) "-lgcc_s" + optionalString stdenv.hostPlatform.isMusl "-lgcc_eh"; # Determinism: We fix the hashes of str, bytes and datetime objects. PYTHONHASHSEED=0; @@ -169,7 +170,7 @@ in with passthru; stdenv.mkDerivation { # Never even try to use lchmod on linux, # don't rely on detecting glibc-isms. "ac_cv_func_lchmod=no" - ]; + ] ++ optional static "LDFLAGS=-static"; preConfigure = '' for i in /usr /sw /opt /pkg; do # improve purity @@ -262,7 +263,7 @@ in with passthru; stdenv.mkDerivation { # Enforce that we don't have references to the OpenSSL -dev package, which we # explicitly specify in our configure flags above. disallowedReferences = - stdenv.lib.optionals (openssl != null) [ openssl.dev ] + stdenv.lib.optionals (openssl != null && !static) [ openssl.dev ] ++ stdenv.lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [ # Ensure we don't have references to build-time packages. # These typically end up in shebangs. diff --git a/pkgs/top-level/static.nix b/pkgs/top-level/static.nix index 0de1db7d99b..c7db64b99f6 100644 --- a/pkgs/top-level/static.nix +++ b/pkgs/top-level/static.nix @@ -266,6 +266,13 @@ in { ) super.ocaml-ng; python27 = super.python27.override { static = true; }; + python35 = super.python35.override { static = true; }; + python36 = super.python36.override { static = true; }; + python37 = super.python37.override { static = true; }; + python38 = super.python38.override { static = true; }; + python39 = super.python39.override { static = true; }; + python3Minimal = super.python3Minimal.override { static = true; }; + libev = super.libev.override { static = true; }; }