diff options
-rw-r--r-- | stdenv_prefix/example.nix | 34 | ||||
-rw-r--r-- | stdenv_prefix/prehook.sh | 3 |
2 files changed, 35 insertions, 2 deletions
diff --git a/stdenv_prefix/example.nix b/stdenv_prefix/example.nix index 0d4aa65..be66db7 100644 --- a/stdenv_prefix/example.nix +++ b/stdenv_prefix/example.nix | |||
@@ -1,8 +1,29 @@ | |||
1 | { storepath_length ? 30, storepath_chunks ? 4, pkgs ? import <nixpkgs> { | 1 | { storepath_length ? 42, storepath_chunks ? 6, pkgs ? import <nixpkgs> { |
2 | overlays = [ | ||
3 | (self: super: { | ||
4 | zstd = super.zstd.overrideAttrs (old: { | ||
5 | postPatch = old.postPatch + '' | ||
6 | sed -i 149d build/cmake/lib/CMakeLists.txt | ||
7 | ''; | ||
8 | }); | ||
9 | glibcLocales = super.glibcLocales.overrideAttrs (old: let | ||
10 | libc = self.buildPackages.stdenv.cc.libc; | ||
11 | in { | ||
12 | buildPhase = '' | ||
13 | mkdir -vp "$TMPDIR/${libc.new-out}/lib/locale" | ||
14 | '' + old.buildPhase; | ||
15 | installPhase = '' | ||
16 | rmdir $TMPDIR/"${libc.out}/lib/locale" | ||
17 | ln -s "$TMPDIR/${libc.new-out}/lib/locale" $TMPDIR/"${libc.out}/lib/locale" | ||
18 | '' + old.installPhase; | ||
19 | }); | ||
20 | }) | ||
21 | ]; | ||
2 | stdenvStages = { config, overlays, localSystem, ... }@args: (import <nixpkgs/pkgs/stdenv> args) ++ [ | 22 | stdenvStages = { config, overlays, localSystem, ... }@args: (import <nixpkgs/pkgs/stdenv> args) ++ [ |
3 | (previousStage: { | 23 | (previousStage: { |
4 | inherit config overlays; | 24 | inherit config overlays; |
5 | stdenv = let | 25 | stdenv = let |
26 | toNewOut = drv: builtins.readFile (pkgs.runCommand "new-out" {} "echo -n $(cat ${drv}/nix-support/new-out) > $out"); | ||
6 | toPreHook = withAppendOut: '' | 27 | toPreHook = withAppendOut: '' |
7 | storepath_length=${toString storepath_length} | 28 | storepath_length=${toString storepath_length} |
8 | storepath_chunks=${toString storepath_chunks} | 29 | storepath_chunks=${toString storepath_chunks} |
@@ -24,6 +45,7 @@ | |||
24 | 45 | ||
25 | newlibc = (previousStage."${localSystem.libc}".override { callPackage = overridenCallPackage; }).overrideAttrs(old: { | 46 | newlibc = (previousStage."${localSystem.libc}".override { callPackage = overridenCallPackage; }).overrideAttrs(old: { |
26 | preHook = old.preHook or "" + (toPreHook true); | 47 | preHook = old.preHook or "" + (toPreHook true); |
48 | passthru = { new-out = toNewOut newlibc; }; | ||
27 | }); | 49 | }); |
28 | newbintools = (previousStage.binutils.override { libc = newlibc; }).overrideAttrs(old: { | 50 | newbintools = (previousStage.binutils.override { libc = newlibc; }).overrideAttrs(old: { |
29 | postFixup = old.postFixup + '' | 51 | postFixup = old.postFixup + '' |
@@ -36,6 +58,7 @@ | |||
36 | extraAttrs.bintools = newbintools; | 58 | extraAttrs.bintools = newbintools; |
37 | cc = previousStage.gcc.override({ bintools = newbintools; libc = newlibc; }); | 59 | cc = previousStage.gcc.override({ bintools = newbintools; libc = newlibc; }); |
38 | overrides = self: super: rewriteMap (previousStage.stdenv.overrides self super) // { | 60 | overrides = self: super: rewriteMap (previousStage.stdenv.overrides self super) // { |
61 | bash = super.bash.overrideAttrs (old: { passthru = old.passthru // { new-out = toNewOut super.bash; }; }); | ||
39 | ${localSystem.libc} = newlibc; | 62 | ${localSystem.libc} = newlibc; |
40 | }; | 63 | }; |
41 | preHook = previousStage.stdenv.preHook + '' | 64 | preHook = previousStage.stdenv.preHook + '' |
@@ -46,6 +69,13 @@ | |||
46 | in | 69 | in |
47 | newStdenv; | 70 | newStdenv; |
48 | }) | 71 | }) |
72 | (previousStage: { | ||
73 | inherit config overlays; | ||
74 | stdenv = previousStage.stdenv.override { | ||
75 | shell = previousStage.bash + "/bin/bash"; | ||
76 | initialPath = ((import <nixpkgs/pkgs/stdenv/common-path.nix>) {pkgs = previousStage;}); | ||
77 | }; | ||
78 | }) | ||
49 | ]; | 79 | ]; |
50 | } }: | 80 | } }: |
51 | pkgs.xar | 81 | pkgs |
diff --git a/stdenv_prefix/prehook.sh b/stdenv_prefix/prehook.sh index db9a4d2..c5474dc 100644 --- a/stdenv_prefix/prehook.sh +++ b/stdenv_prefix/prehook.sh | |||
@@ -35,11 +35,14 @@ appendOut() { | |||
35 | 35 | ||
36 | : ${libc_path=} | 36 | : ${libc_path=} |
37 | : ${configureFlags=} | 37 | : ${configureFlags=} |
38 | : ${installFlags=} | ||
39 | installFlags="${installFlags//$oldout/$out}" | ||
38 | configureFlags="${configureFlags//$oldout/$out}" | 40 | configureFlags="${configureFlags//$oldout/$out}" |
39 | if [ -n "$libc_path" ]; then | 41 | if [ -n "$libc_path" ]; then |
40 | libc_oldpath=$libc_path/lib | 42 | libc_oldpath=$libc_path/lib |
41 | libc_newpath=$(cat $libc_path/nix-support/new-out)/lib | 43 | libc_newpath=$(cat $libc_path/nix-support/new-out)/lib |
42 | configureFlags="${configureFlags//$libc_oldpath/$libc_newpath}" | 44 | configureFlags="${configureFlags//$libc_oldpath/$libc_newpath}" |
45 | installFlags="${installFlags//$libc_oldpath/$libc_newpath}" | ||
43 | fi | 46 | fi |
44 | } | 47 | } |
45 | 48 | ||