diff --git a/source/dub/generators/generator.d b/source/dub/generators/generator.d index 3c5d6d7..cf47fd8 100644 --- a/source/dub/generators/generator.d +++ b/source/dub/generators/generator.d @@ -97,9 +97,15 @@ BuildSettings buildSettings; auto config = configs[pack.name]; buildSettings.processVars(m_project, pack, pack.getBuildSettings(settings.platform, config), settings, true); - targets[pack.name] = TargetInfo(pack, [pack], config, buildSettings); prepareGeneration(pack, m_project, settings, buildSettings); + + // Regenerate buildSettings.sourceFiles + if (buildSettings.preGenerateCommands.length) { + buildSettings = BuildSettings.init; + buildSettings.processVars(m_project, pack, pack.getBuildSettings(settings.platform, config), settings, true); + } + targets[pack.name] = TargetInfo(pack, [pack], config, buildSettings); } configurePackages(m_project.rootPackage, targets, settings); diff --git a/test/issue1474/.no_run b/test/issue1474/.no_run new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/issue1474/.no_run diff --git a/test/issue1474/.no_test b/test/issue1474/.no_test new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/issue1474/.no_test diff --git a/test/issue1474/dub.json b/test/issue1474/dub.json new file mode 100644 index 0000000..80d9635 --- /dev/null +++ b/test/issue1474/dub.json @@ -0,0 +1,8 @@ +{ + "name": "generated-sources", + "description": "Example of using pre generate commands to generate source code.", + "sourceFiles": ["ext/*.d"], + "preGenerateCommands": [ + "echo 'extern(C) int fun42 () { return 42; }' > ext/fortytwo.d" + ] +} diff --git a/test/issue1474/ext/kekw.d b/test/issue1474/ext/kekw.d new file mode 100644 index 0000000..f1585d3 --- /dev/null +++ b/test/issue1474/ext/kekw.d @@ -0,0 +1 @@ +extern(C) string funkekw () { return "KEKW";} diff --git a/test/issue1474/source/app.d b/test/issue1474/source/app.d new file mode 100644 index 0000000..04a59e8 --- /dev/null +++ b/test/issue1474/source/app.d @@ -0,0 +1,10 @@ +import std.stdio; + +extern(C) string funkekw (); +extern(C) int fun42 (); + +void main() +{ + writefln("ShouldBe42: %s", fun42()); + writefln("Juan: %s", funkekw()); +}