refactor: make dag helpers easier to reason about

This commit is contained in:
Jake Hamilton 2024-07-07 15:10:37 -07:00
parent 0a63667459
commit 0ad14e8795
Signed by untrusted user: jakehamilton
GPG key ID: 9762169A1B35EA68
3 changed files with 14 additions and 14 deletions

View file

@ -95,7 +95,7 @@ lib: {
## Create a new DAG entry. ## Create a new DAG entry.
## ##
## @type List String -> List String -> a -> { before :: List String, after :: List String, value :: a } ## @type List String -> List String -> a -> { before :: List String, after :: List String, value :: a }
between = before: after: value: { inherit before after value; }; between = after: before: value: { inherit before after value; };
## Create a new DAG entry with no dependencies. ## Create a new DAG entry with no dependencies.
## ##
@ -105,12 +105,12 @@ lib: {
## Create a new DAG entry that occurs before other entries. ## Create a new DAG entry that occurs before other entries.
## ##
## @type List String -> a -> { before :: List String, after :: List String, value :: a } ## @type List String -> a -> { before :: List String, after :: List String, value :: a }
before = before: lib.dag.entry.between before [ ]; before = before: lib.dag.entry.between [ ] before;
## Create a new DAG entry that occurs after other entries. ## Create a new DAG entry that occurs after other entries.
## ##
## @type List String -> a -> { before :: List String, after :: List String, value :: a } ## @type List String -> a -> { before :: List String, after :: List String, value :: a }
after = lib.dag.entry.between [ ]; after = after: lib.dag.entry.between after [ ];
}; };
entries = { entries = {
@ -121,7 +121,7 @@ lib: {
tag: tag:
let let
process = process =
i: before: after: entries: i: after: before: entries:
let let
name = "${tag}-${builtins.toString i}"; name = "${tag}-${builtins.toString i}";
entry = builtins.head entries; entry = builtins.head entries;
@ -130,7 +130,7 @@ lib: {
if builtins.length entries == 0 then if builtins.length entries == 0 then
{ } { }
else if builtins.length entries == 1 then else if builtins.length entries == 1 then
{ "${name}" = lib.dag.entry.between before after entry; } { "${name}" = lib.dag.entry.between after before entry; }
else else
{ "${name}" = lib.dag.entry.after after entry; } // (process (i + 1) before [ name ] rest); { "${name}" = lib.dag.entry.after after entry; } // (process (i + 1) before [ name ] rest);
in in
@ -144,12 +144,12 @@ lib: {
## Create a DAG from a list of entries, prefixed with a tag, that occurs before other entries. ## Create a DAG from a list of entries, prefixed with a tag, that occurs before other entries.
## ##
## @type String -> List String -> List a -> Dag a ## @type String -> List String -> List a -> Dag a
before = tag: before: lib.dag.entries.between tag before [ ]; before = tag: before: lib.dag.entries.between tag [ ] before;
## Create a DAG from a list of entries, prefixed with a tag, that occurs after other entries. ## Create a DAG from a list of entries, prefixed with a tag, that occurs after other entries.
## ##
## @type String -> List String -> List a -> Dag a ## @type String -> List String -> List a -> Dag a
after = tag: lib.dag.entries.between tag [ ]; after = tag: after: lib.dag.entries.between tag after [ ];
}; };
}; };
} }

View file

@ -17,11 +17,11 @@ in
phases = lib.dag.apply.defaults package.phases { phases = lib.dag.apply.defaults package.phases {
unpack = lib.dag.entry.before [ "patch" ] ""; unpack = lib.dag.entry.before [ "patch" ] "";
patch = lib.dag.entry.between [ "configure" ] [ "unpack" ] ""; patch = lib.dag.entry.between [ "unpack" ] [ "configure" ] "";
configure = lib.dag.entry.between [ "build" ] [ "patch" ] ""; configure = lib.dag.entry.between [ "patch" ] [ "build" ] "";
build = lib.dag.entry.between [ "install" ] [ "configure" ] ""; build = lib.dag.entry.between [ "configure" ] [ "install" ] "";
install = lib.dag.entry.after [ "build" ] ""; install = lib.dag.entry.after [ "build" ] "";
}; };

View file

@ -79,12 +79,12 @@ in
}; };
phases = { phases = {
unpack = lib.dag.entry.before [ "patch" ] '' unpack = ''
tar xf ${config.src} tar xf ${config.src}
cd glibc-${config.version} cd glibc-${config.version}
''; '';
configure = lib.dag.entry.between [ "build" ] [ "patch" ] '' configure = ''
mkdir build mkdir build
cd build cd build
# libstdc++.so is built against musl and fails to link # libstdc++.so is built against musl and fails to link
@ -96,12 +96,12 @@ in
--with-headers=${foundation.stage1-linux-headers}/include --with-headers=${foundation.stage1-linux-headers}/include
''; '';
build = lib.dag.entry.between [ "install" ] [ "configure" ] '' build = ''
# Build # Build
make -j $NIX_BUILD_CORES make -j $NIX_BUILD_CORES
''; '';
install = lib.dag.entry.after [ "build" ] '' install = ''
# Install # Install
make -j $NIX_BUILD_CORES install-strip make -j $NIX_BUILD_CORES install-strip
''; '';