Emery Hemingway
fffd53664b
Merged manifests are easier to work with as the number of inputs increase.
62 lines
1.8 KiB
Nix
62 lines
1.8 KiB
Nix
# SPDX-License-Identifier: CC0-1.0
|
|
|
|
{ system, localSystem, crossSystem, genodepkgs, nixpkgs, dhall-haskell
|
|
, genode-depot }:
|
|
|
|
let
|
|
thisSystem = builtins.getAttr system;
|
|
hostPkgs = import nixpkgs {
|
|
system = localSystem;
|
|
overlays = [
|
|
(self: super: {
|
|
inherit (builtins.getAttr localSystem dhall-haskell.packages) dhall;
|
|
})
|
|
];
|
|
};
|
|
testPkgs = thisSystem genodepkgs.packages;
|
|
depot = thisSystem genode-depot.packages;
|
|
|
|
in {
|
|
dhallText = name: source:
|
|
hostPkgs.runCommand name {
|
|
inherit name source;
|
|
preferLocalBuild = true;
|
|
buildInputs = [ hostPkgs.dhall ];
|
|
DHALL_PRELUDE = "${testPkgs.dhallPackages.prelude}/package.dhall";
|
|
DHALL_GENODE = "${testPkgs.dhallPackages.genode}/package.dhall";
|
|
} ''
|
|
export XDG_CACHE_HOME=$NIX_BUILD_TOP
|
|
dhall text < $source > $out
|
|
'';
|
|
|
|
renderDhallInit = path: args:
|
|
hostPkgs.runCommand "init.xml" {
|
|
preferLocalBuild = true;
|
|
buildInputs = with hostPkgs; [ dhall libxml2 ];
|
|
initConfig = path;
|
|
initArgs = args;
|
|
DHALL_PRELUDE = "${testPkgs.dhallPrelude}/package.dhall";
|
|
DHALL_GENODE = "${testPkgs.dhallGenode}/package.dhall";
|
|
} ''
|
|
export XDG_CACHE_HOME=$NIX_BUILD_TOP
|
|
dhall text \
|
|
<<< 'let Prelude = env:DHALL_GENODE in Prelude.Init.render (env:initConfig env:initArgs)' \
|
|
> $out
|
|
xmllint --noout $out
|
|
'';
|
|
|
|
mergeManifests = inputs:
|
|
nixpkgs.legacyPackages.${localSystem}.writeTextFile {
|
|
name = "manifest.dhall";
|
|
text = with builtins;
|
|
let
|
|
f = head: input:
|
|
if hasAttr "manifest" input then
|
|
"${head},${input.pname}=${input.manifest}"
|
|
else
|
|
abort "${input.pname} does not have a manifest";
|
|
in (foldl' f "{" inputs) + "}";
|
|
};
|
|
|
|
}
|