diff --git a/source/dub/generators/generator.d b/source/dub/generators/generator.d index 8c2535a..144276d 100644 --- a/source/dub/generators/generator.d +++ b/source/dub/generators/generator.d @@ -236,7 +236,10 @@ // use `visited` here as pkgs cannot depend on themselves if (pack in visited) return; - visited[pack] = typeof(visited[pack]).init; + // transitive dependencies must be visited multiple times, see #1350 + immutable transitive = !hasOutput[pack.name]; + if (!transitive) + visited[pack] = typeof(visited[pack]).init; auto bs = &ti.buildSettings; if (hasOutput[pack.name]) diff --git a/test/issue1350-transitive-none-deps/.gitignore b/test/issue1350-transitive-none-deps/.gitignore new file mode 100644 index 0000000..4571d26 --- /dev/null +++ b/test/issue1350-transitive-none-deps/.gitignore @@ -0,0 +1,15 @@ +.dub +docs.json +__dummy.html +docs/ +test +test.so +test.dylib +test.dll +test.a +test.lib +test-test-* +*.exe +*.o +*.obj +*.lst diff --git a/test/issue1350-transitive-none-deps/.no_run b/test/issue1350-transitive-none-deps/.no_run new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/issue1350-transitive-none-deps/.no_run diff --git a/test/issue1350-transitive-none-deps/.no_test b/test/issue1350-transitive-none-deps/.no_test new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/issue1350-transitive-none-deps/.no_test diff --git a/test/issue1350-transitive-none-deps/common-dep/common.d b/test/issue1350-transitive-none-deps/common-dep/common.d new file mode 100644 index 0000000..23cc13c --- /dev/null +++ b/test/issue1350-transitive-none-deps/common-dep/common.d @@ -0,0 +1 @@ +module common; diff --git a/test/issue1350-transitive-none-deps/common-dep/dub.sdl b/test/issue1350-transitive-none-deps/common-dep/dub.sdl new file mode 100644 index 0000000..e4d29b2 --- /dev/null +++ b/test/issue1350-transitive-none-deps/common-dep/dub.sdl @@ -0,0 +1,4 @@ +name "common-dep" +targetType "library" +importPaths "." +sourceFiles "common.d" diff --git a/test/issue1350-transitive-none-deps/common-none/dub.sdl b/test/issue1350-transitive-none-deps/common-none/dub.sdl new file mode 100644 index 0000000..79986cc --- /dev/null +++ b/test/issue1350-transitive-none-deps/common-none/dub.sdl @@ -0,0 +1,3 @@ +name "common-none" +targetType "none" +dependency "common-dep" path="../common-dep" diff --git a/test/issue1350-transitive-none-deps/dep1/dep1.d b/test/issue1350-transitive-none-deps/dep1/dep1.d new file mode 100644 index 0000000..6b47d60 --- /dev/null +++ b/test/issue1350-transitive-none-deps/dep1/dep1.d @@ -0,0 +1,2 @@ +module dep1; +import common; diff --git a/test/issue1350-transitive-none-deps/dep1/dub.sdl b/test/issue1350-transitive-none-deps/dep1/dub.sdl new file mode 100644 index 0000000..432097a --- /dev/null +++ b/test/issue1350-transitive-none-deps/dep1/dub.sdl @@ -0,0 +1,4 @@ +name "dep1" +importPaths "." +sourceFiles "dep1.d" +dependency "common-none" path="../common-none" diff --git a/test/issue1350-transitive-none-deps/dep2/dep2.d b/test/issue1350-transitive-none-deps/dep2/dep2.d new file mode 100644 index 0000000..fbfed0d --- /dev/null +++ b/test/issue1350-transitive-none-deps/dep2/dep2.d @@ -0,0 +1,2 @@ +module dep2; +import common; diff --git a/test/issue1350-transitive-none-deps/dep2/dub.sdl b/test/issue1350-transitive-none-deps/dep2/dub.sdl new file mode 100644 index 0000000..3157e08 --- /dev/null +++ b/test/issue1350-transitive-none-deps/dep2/dub.sdl @@ -0,0 +1,4 @@ +name "dep2" +importPaths "." +sourceFiles "dep2.d" +dependency "common-none" path="../common-none" diff --git a/test/issue1350-transitive-none-deps/dub.sdl b/test/issue1350-transitive-none-deps/dub.sdl new file mode 100644 index 0000000..5bcd940 --- /dev/null +++ b/test/issue1350-transitive-none-deps/dub.sdl @@ -0,0 +1,5 @@ +name "test" +targetType "executable" +sourceFiles "test.d" +dependency "dep1" path="dep1" +dependency "dep2" path="dep2" diff --git a/test/issue1350-transitive-none-deps/test.d b/test/issue1350-transitive-none-deps/test.d new file mode 100644 index 0000000..4390778 --- /dev/null +++ b/test/issue1350-transitive-none-deps/test.d @@ -0,0 +1,5 @@ +module test; + +import dep1, dep2, common; + +void main() {}