diff --git a/flake.nix b/flake.nix index 2fc6e640..d6356bd6 100644 --- a/flake.nix +++ b/flake.nix @@ -49,8 +49,7 @@ patchelfFor = pkgs: - # this is only - pkgs.callPackage ./patchelf.nix { + pkgs.callPackage ./package.nix { inherit version src; }; @@ -192,6 +191,27 @@ system: let pkgs = nixpkgs.legacyPackages.${system}; + + patchelfForWindowsStatic = + pkgs: + (pkgs.callPackage ./package.nix { + inherit version src; + # On windows we use win32 threads to get a static binary, + # otherwise `-static` below doesn't work. + stdenv = pkgs.overrideCC pkgs.stdenv ( + pkgs.buildPackages.wrapCC ( + pkgs.buildPackages.gcc-unwrapped.override ({ + threadsCross = { + model = "win32"; + package = null; + }; + }) + ) + ); + }).overrideAttrs + (old: { + NIX_CFLAGS_COMPILE = "-static"; + }); in { patchelf = patchelfFor pkgs; @@ -201,13 +221,8 @@ # tests if our testsuite uses target-prefixed executable names. patchelf-musl-cross = patchelfFor pkgs.pkgsCross.musl64; patchelf-netbsd-cross = patchelfFor pkgs.pkgsCross.x86_64-netbsd; - - patchelf-win32 = (patchelfFor pkgs.pkgsCross.mingw32).overrideAttrs (old: { - NIX_CFLAGS_COMPILE = "-static"; - }); - patchelf-win64 = (patchelfFor pkgs.pkgsCross.mingwW64).overrideAttrs (old: { - NIX_CFLAGS_COMPILE = "-static"; - }); + patchelf-win32 = patchelfForWindowsStatic pkgs.pkgsCross.mingw32; + patchelf-win64 = patchelfForWindowsStatic pkgs.pkgsCross.mingwW64; } // lib.optionalAttrs (system != "i686-linux") { patchelf-musl = patchelfFor nixpkgs.legacyPackages.${system}.pkgsMusl; diff --git a/package.nix b/package.nix new file mode 100644 index 00000000..c0e334fa --- /dev/null +++ b/package.nix @@ -0,0 +1,13 @@ +{ + stdenv, + autoreconfHook, + version, + src, +}: + +stdenv.mkDerivation { + pname = "patchelf"; + inherit version src; + nativeBuildInputs = [ autoreconfHook ]; + doCheck = true; +} diff --git a/patchelf.nix b/patchelf.nix deleted file mode 100644 index 169f456c..00000000 --- a/patchelf.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ - stdenv, - buildPackages, - autoreconfHook, - version, - src, - overrideCC, -}: -let - # on windows we use win32 threads to get a fully static binary - gcc = buildPackages.wrapCC ( - buildPackages.gcc-unwrapped.override ({ - threadsCross = { - model = "win32"; - package = null; - }; - }) - ); - - stdenv' = - if (stdenv.cc.isGNU && stdenv.targetPlatform.isWindows) then overrideCC stdenv gcc else stdenv; -in -stdenv'.mkDerivation { - pname = "patchelf"; - inherit version src; - nativeBuildInputs = [ autoreconfHook ]; - doCheck = true; -}