diff options
-rw-r--r-- | external/default.nix | 28 | ||||
-rw-r--r-- | external/main.go | 2 |
2 files changed, 21 insertions, 9 deletions
diff --git a/external/default.nix b/external/default.nix index a065ab3331aa..5854d4f0277f 100644 --- a/external/default.nix +++ b/external/default.nix @@ -3,7 +3,7 @@ { pkgs, program, package }: let - inherit (builtins) foldl'fromJSON head readFile replaceStrings tail throw; + inherit (builtins) elemAt foldl' fromJSON head length readFile replaceStrings tail throw; inherit (pkgs) lib runCommand go jq ripgrep; pathToName = p: replaceStrings ["/"] ["_"] (toString p); @@ -36,14 +36,24 @@ let if path == [] then { gopkg = value; } else { "${head path}" = mkset (tail path) value; }; - toPackage = self: src: path: entry: package { - name = pathToName entry.name entry.name; - path = lib.concatStringsSep "/" ([ path ] ++ entry.locator); - srcs = map (f: src + ("/" + f)) entry.files; - deps = map (d: lib.attrByPath (d ++ [ "gopkg" ]) ( - throw "missing local dependency '${lib.concatStringsSep "." d}' in '${path}'" - ) self) entry.localDeps; - }; + last = l: elemAt l ((length l) - 1); + + toPackage = self: src: path: entry: + let + args = { + srcs = map (f: src + ("/" + f)) entry.files; + deps = map (d: lib.attrByPath (d ++ [ "gopkg" ]) ( + throw "missing local dependency '${lib.concatStringsSep "." d}' in '${path}'" + ) self) entry.localDeps; + }; + libArgs = args // { + name = pathToName entry.name; + path = lib.concatStringsSep "/" ([ path ] ++ entry.locator); + }; + binArgs = args // { + name = last ([ path ] ++ entry.locator); + }; + in if entry.isCommand then (program binArgs) else (package libArgs); in { src, path, deps ? [] }: let name = pathToName path; diff --git a/external/main.go b/external/main.go index aac966172b34..23fd53326ed0 100644 --- a/external/main.go +++ b/external/main.go @@ -34,6 +34,7 @@ type pkg struct { Files []string `json:"files"` LocalDeps [][]string `json:"localDeps"` ForeignDeps []string `json:"foreignDeps"` + IsCommand bool `json:"isCommand"` } // findGoDirs returns a filepath.WalkFunc that identifies all @@ -116,6 +117,7 @@ func analysePackage(root, source, importpath string, stdlib map[string]bool) (pk Files: files, LocalDeps: local, ForeignDeps: foreign, + IsCommand: p.IsCommand(), }, nil } |