diff --git a/pkgs/development/go-modules/generic/default.nix b/pkgs/development/go-modules/generic/default.nix index 89258062f263..4f4fa3275175 100644 --- a/pkgs/development/go-modules/generic/default.nix +++ b/pkgs/development/go-modules/generic/default.nix @@ -1,4 +1,4 @@ -{ go, govers, parallel, lib }: +{ go, govers, parallel, lib, fetchgit }: { name, buildInputs ? [], nativeBuildInputs ? [], passthru ? {}, preFixup ? "" @@ -17,6 +17,9 @@ # Extra sources to include in the gopath , extraSrcs ? [ ] +# go2nix dependency file +, goDeps ? null + , dontRenameImports ? false # Do not enable this without good reason @@ -27,6 +30,8 @@ if disabled then throw "${name} not supported for go ${go.meta.branch}" else +with builtins; + let args = lib.filterAttrs (name: _: name != "extraSrcs") args'; @@ -35,6 +40,27 @@ let removeExpr = refs: lib.flip lib.concatMapStrings refs (ref: '' | sed "s,${ref},$(echo "${ref}" | sed "s,$NIX_STORE/[^-]*,$NIX_STORE/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee,"),g" \ ''); + + dep2src = goDep: + { + inherit (goDep) goPackagePath; + src = if goDep.fetch.type == "git" then + fetchgit { + inherit (goDep.fetch) url rev sha256; + } + else {}; + }; + + importGodeps = { depsFile, filterPackages ? [] }: + let + deps = lib.importJSON depsFile; + external = filter (d: d ? include) deps; + direct = filter (d: d ? goPackagePath && (length filterPackages == 0 || elem d.goPackagePath filterPackages)) deps; + in + concatLists (map importGodeps (map (d: { depsFile = ./. + d.include; filterPackages = d.packages; }) external)) ++ (map dep2src direct); + + goPath = if goDeps != null then importGodeps { depsFile = goDeps; } ++ extraSrcs + else extraSrcs; in go.stdenv.mkDerivation ( @@ -53,13 +79,13 @@ go.stdenv.mkDerivation ( mkdir -p "go/src/$(dirname "$goPackagePath")" mv "$sourceRoot" "go/src/$goPackagePath" - '' + lib.flip lib.concatMapStrings extraSrcs ({ src, goPackagePath }: '' - mkdir extraSrc - (cd extraSrc; unpackFile "${src}") + '' + lib.flip lib.concatMapStrings goPath ({ src, goPackagePath }: '' + mkdir goPath + (cd goPath; unpackFile "${src}") mkdir -p "go/src/$(dirname "${goPackagePath}")" - chmod -R u+w extraSrc/* - mv extraSrc/* "go/src/${goPackagePath}" - rmdir extraSrc + chmod -R u+w goPath/* + mv goPath/* "go/src/${goPackagePath}" + rmdir goPath '') + '' export GOPATH=$NIX_BUILD_TOP/go:$GOPATH diff --git a/pkgs/development/go-modules/libs.json b/pkgs/development/go-modules/libs.json index 8e5fee179bf2..4336fcc44bc9 100644 --- a/pkgs/development/go-modules/libs.json +++ b/pkgs/development/go-modules/libs.json @@ -25,5 +25,23 @@ "rev": "a83829b6f1293c91addabc89d0571c246397bbf4", "sha256": "1m4dsmk90sbi17571h6pld44zxz7jc4lrnl4f27dpd1l8g5xvjhh" } + }, + { + "goPackagePath": "github.com/docopt/docopt-go", + "fetch": { + "type": "git", + "url": "https://github.com/docopt/docopt-go", + "rev": "784ddc588536785e7299f7272f39101f7faccc3f", + "sha256": "13x00cnady5znysfwca3x59dl04m8rvnk2yprgyqqpg2y4v0xmbf" + } + }, + { + "goPackagePath": "golang.org/x/crypto", + "fetch": { + "type": "git", + "url": "https://go.googlesource.com/crypto", + "rev": "1f22c0103821b9390939b6776727195525381532", + "sha256": "05ahvn9g9cj7797n8ryfxv2g26v3lx1pza9d9pg97iw0rvar9i1h" + } } -] \ No newline at end of file +] diff --git a/pkgs/development/tools/deis/default.nix b/pkgs/development/tools/deis/default.nix index 3787e30fbf43..5336a14c5a17 100644 --- a/pkgs/development/tools/deis/default.nix +++ b/pkgs/development/tools/deis/default.nix @@ -1,5 +1,5 @@ # This file was generated by go2nix. -{ stdenv, lib, goPackages, fetchgit, fetchhg, fetchbzr, fetchsvn }: +{ stdenv, lib, goPackages, fetchgit }: with goPackages; @@ -23,14 +23,5 @@ buildGoPackage rec { sha256 = "1fblg3gf7dh5hhm4ajq7yl7iy6gw8p5xlh4z8kvfy542m1fzr0dc"; }; - extraSrcs = map ( jsonDep: - { - inherit (jsonDep) goPackagePath; - src = if jsonDep.fetch.type == "git" then - fetchgit { - inherit (jsonDep.fetch) url rev sha256; - } - else {}; - } - ) (builtins.fromJSON (builtins.readFile ../../go-modules/libs.json)); + goDeps = ./deps.json; } diff --git a/pkgs/development/tools/deis/deps.json b/pkgs/development/tools/deis/deps.json new file mode 100644 index 000000000000..a0333247062e --- /dev/null +++ b/pkgs/development/tools/deis/deps.json @@ -0,0 +1,10 @@ +[ + { + "include": "../../../go-modules/libs.json", + "packages": [ + "github.com/docopt/docopt-go", + "golang.org/x/crypto", + "gopkg.in/yaml.v2" + ] + } +] diff --git a/pkgs/tools/misc/gawp/default.nix b/pkgs/tools/misc/gawp/default.nix index 5f87d2bed71e..552d01041310 100644 --- a/pkgs/tools/misc/gawp/default.nix +++ b/pkgs/tools/misc/gawp/default.nix @@ -1,31 +1,9 @@ # This file was generated by go2nix. -{ stdenv, lib, goPackages, fetchgit, fetchhg, fetchbzr, fetchsvn }: +{ stdenv, lib, goPackages, fetchgit }: with builtins; with goPackages; -let - depToSrc = jsonDep: - { - inherit (jsonDep) goPackagePath; - src = if jsonDep.fetch.type == "git" then - fetchgit { - inherit (jsonDep.fetch) url rev sha256; - } - else {}; - }; - - importGodeps = { depsFile, filterPackages ? [] }: - let - deps = lib.importJSON depsFile; - external = filter (d: d ? include) deps; - direct = filter (d: d ? goPackagePath && (length filterPackages == 0 || elem d.goPackagePath filterPackages)) deps; - in - concatLists (map importGodeps (map (d: { depsFile = ./. + d.include; filterPackages = d.packages; }) external)) ++ (map depToSrc direct); - - godeps = importGodeps { depsFile = ./deps.json; }; -in - buildGoPackage rec { name = "gawp-${version}"; version = "20160121-${stdenv.lib.strings.substring 0 7 rev}"; @@ -39,5 +17,5 @@ buildGoPackage rec { sha256 = "0r4bp4w3s9rkmg3cz9jb7d6ngh7vfj31p9kbim6mhilxvmgjk4ly"; }; - extraSrcs = godeps; + goDeps = ./deps.json; }