-{ 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}
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 + ''
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
: ${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
}