diff --git a/Tupfile b/Tupfile index 18138ee..4e8eb8c 100644 --- a/Tupfile +++ b/Tupfile @@ -1,2 +1,8 @@ include_rules + : sbom.json |> !sbom-to-nix |> | ./ +run ./Tuprules.jq sbom.json + +: foreach {bin} |> !assert_built |> +: $(BIN_DIR)/msg |> !symlink |> $(BIN_DIR)/beep +: $(BIN_DIR)/msg |> !symlink |> $(BIN_DIR)/assert diff --git a/Tuprules.jq b/Tuprules.jq new file mode 100755 index 0000000..58af1ef --- /dev/null +++ b/Tuprules.jq @@ -0,0 +1,12 @@ +#! /usr/bin/env -S jq --raw-output --from-file +.metadata.component.properties as $props | +$props | + ["."] + ( + map( select(.name | .[0:10] == "nim:srcDir") ) + + map( select(.name | .[0:10] == "nim:binDir") ) | + map(.value)) | .[-1] as $binDir | + +$props | + map( select(.name | .[0:8] == "nim:bin:") ) | + map( ": \($binDir)/\(.value).nim |> !nim_bin |> $(BIN_DIR)/\(.name[8:]) {bin}" ) | + join("\n") diff --git a/Tuprules.tup b/Tuprules.tup index 704673f..9ec7f07 100644 --- a/Tuprules.tup +++ b/Tuprules.tup @@ -1,4 +1,8 @@ include ../syndicate-nim/depends.tup +PROJECT_DIR = $(TUP_CWD) + NIM = $(DIRENV) $(NIM) -NIM_FLAGS += --path:$(TUP_CWD)/../syndicate-nim/src -NIM_GROUPS += $(TUP_CWD)/ +NIM_FLAGS += --path:$(PROJECT_DIR)/../syndicate-nim/src +NIM_GROUPS += $(SYNDICATE_PROTOCOL) +NIM_GROUPS += $(PROJECT_DIR)/ +NIM_GROUPS += $(PROJECT_DIR)/ diff --git a/default.nix b/default.nix index 9b922a8..97a5e69 100644 --- a/default.nix +++ b/default.nix @@ -5,15 +5,13 @@ with pkgs; let buildNimSbom = pkgs.callPackage (import ) { }; in -buildNimSbom ./sbom.json ( - final: prev: { - src = if lib.inNixShell then null else lib.cleanSource ./.; - buildInputs = [ - postgresql.out - sqlite - libxml2 - libxslt - openssl - ]; - } -) +buildNimSbom (finalAttrs: { + src = if lib.inNixShell then null else lib.cleanSource ./.; + buildInputs = [ + postgresql.out + sqlite + libxml2 + libxslt + openssl + ]; +}) ./sbom.json diff --git a/src/Tupfile b/src/Tupfile deleted file mode 100644 index 815dc7a..0000000 --- a/src/Tupfile +++ /dev/null @@ -1,5 +0,0 @@ -include_rules -: foreach *.nim | $(SYNDICATE_PROTOCOL) ./ |> !nim_bin |> {bin} -: foreach {bin} |> !assert_built |> -: $(BIN_DIR)/msg |> !symlink |> $(BIN_DIR)/beep -: $(BIN_DIR)/msg |> !symlink |> $(BIN_DIR)/assert diff --git a/src/schema/Tupfile b/src/schema/Tupfile index f405409..adafa51 100644 --- a/src/schema/Tupfile +++ b/src/schema/Tupfile @@ -1,2 +1,2 @@ include_rules -: foreach ../../*.prs |> !preserves_schema_nim |> %B.nim | ../ +: foreach ../../*.prs |> !preserves_schema_nim |> %B.nim | $(PROJECT_DIR)/ diff --git a/src/syndesizer/Tupfile b/src/syndesizer/Tupfile index 6406539..639cbf4 100644 --- a/src/syndesizer/Tupfile +++ b/src/syndesizer/Tupfile @@ -1,3 +1,3 @@ include_rules -: foreach *.nim | $(SYNDICATE_PROTOCOL) ../ |> !nim_bin |> {bin} +: foreach *.nim |> !nim_bin |> {bin} : foreach {bin} |> !assert_built |> diff --git a/syndicate_utils.nimble b/syndicate_utils.nimble index cd2582c..21ac773 100644 --- a/syndicate_utils.nimble +++ b/syndicate_utils.nimble @@ -9,7 +9,7 @@ proc lookupComponent(sbom: JsonNode; bomRef: string): JsonNode = result = newJNull() let - sbom = "sbom.json".readFile.parseJson + sbom = (getPkgDir() & "/sbom.json").readFile.parseJson comp = sbom{"metadata", "component"} bomRef = comp{"bom-ref"}.getStr @@ -41,7 +41,7 @@ for prop in comp{"properties"}.getElems.items: add(backend, val) else: if key.startsWith "nim:bin:": - namedBin[key[9..key.high]] = val + namedBin[key[8..key.high]] = val for depend in sbom{"dependencies"}.items: if depend{"ref"}.getStr == bomRef: