Add some fixes to stdenv prefix hook master
authorIsmaël Bouya <ismael.bouya@normalesup.org>
Sat, 26 Jun 2021 23:48:12 +0000 (01:48 +0200)
committerIsmaël Bouya <ismael.bouya@normalesup.org>
Sat, 26 Jun 2021 23:48:12 +0000 (01:48 +0200)
stdenv_prefix/example.nix
stdenv_prefix/prehook.sh

index 0d4aa65c73f8db7f316276fc2a2d2118ddbf8e79..be66db7de2215db3d5ba6a8d359128297540d552 100644 (file)
@@ -1,8 +1,29 @@
-{ storepath_length ? 30, storepath_chunks ? 4, pkgs ? import <nixpkgs> {
+{ storepath_length ? 42, storepath_chunks ? 6, pkgs ? import <nixpkgs> {
+  overlays = [
+    (self: super: {
+      zstd = super.zstd.overrideAttrs (old: {
+        postPatch = old.postPatch + ''
+          sed -i 149d build/cmake/lib/CMakeLists.txt
+        '';
+      });
+      glibcLocales = super.glibcLocales.overrideAttrs (old: let
+        libc = self.buildPackages.stdenv.cc.libc;
+      in {
+        buildPhase = ''
+          mkdir -vp "$TMPDIR/${libc.new-out}/lib/locale"
+        '' + old.buildPhase;
+        installPhase = ''
+          rmdir $TMPDIR/"${libc.out}/lib/locale"
+          ln -s "$TMPDIR/${libc.new-out}/lib/locale" $TMPDIR/"${libc.out}/lib/locale"
+        '' + old.installPhase;
+      });
+    })
+  ];
   stdenvStages = { config, overlays, localSystem, ... }@args: (import <nixpkgs/pkgs/stdenv> args) ++ [
     (previousStage: {
       inherit config overlays;
       stdenv = let
+        toNewOut = drv: builtins.readFile (pkgs.runCommand "new-out" {} "echo -n $(cat ${drv}/nix-support/new-out) > $out");
         toPreHook = withAppendOut: ''
               storepath_length=${toString storepath_length}
               storepath_chunks=${toString storepath_chunks}
@@ -24,6 +45,7 @@
 
         newlibc = (previousStage."${localSystem.libc}".override { callPackage = overridenCallPackage; }).overrideAttrs(old: {
           preHook = old.preHook or "" + (toPreHook true);
+          passthru = { new-out = toNewOut newlibc; };
         });
         newbintools = (previousStage.binutils.override { libc = newlibc; }).overrideAttrs(old: {
           postFixup = old.postFixup + ''
@@ -36,6 +58,7 @@
           extraAttrs.bintools = newbintools;
           cc = previousStage.gcc.override({ bintools = newbintools; libc = newlibc; });
           overrides = self: super: rewriteMap (previousStage.stdenv.overrides self super) // {
+            bash = super.bash.overrideAttrs (old: { passthru = old.passthru // { new-out = toNewOut super.bash; }; });
             ${localSystem.libc} = newlibc;
           };
           preHook = previousStage.stdenv.preHook + ''
       in
         newStdenv;
       })
+      (previousStage: {
+        inherit config overlays;
+        stdenv = previousStage.stdenv.override {
+          shell = previousStage.bash + "/bin/bash";
+          initialPath = ((import <nixpkgs/pkgs/stdenv/common-path.nix>) {pkgs = previousStage;});
+        };
+      })
     ];
 } }:
-  pkgs.xar
+  pkgs
index db9a4d258bbd99372a9b817948abec9e342c6fbb..c5474dc2655a950ad76e4bd0989455e2086eac5d 100644 (file)
@@ -35,11 +35,14 @@ appendOut() {
 
   : ${libc_path=}
   : ${configureFlags=}
+  : ${installFlags=}
+  installFlags="${installFlags//$oldout/$out}"
   configureFlags="${configureFlags//$oldout/$out}"
   if [ -n "$libc_path" ]; then
     libc_oldpath=$libc_path/lib
     libc_newpath=$(cat $libc_path/nix-support/new-out)/lib
     configureFlags="${configureFlags//$libc_oldpath/$libc_newpath}"
+    installFlags="${installFlags//$libc_oldpath/$libc_newpath}"
   fi
 }