diff --git a/source/dub/generators/build.d b/source/dub/generators/build.d index 64b639a..3d3d230 100644 --- a/source/dub/generators/build.d +++ b/source/dub/generators/build.d @@ -74,20 +74,7 @@ if( settings.config.length ) logInfo("Building configuration \""~settings.config~"\", build type "~settings.buildType); else logInfo("Building default configuration, build type "~settings.buildType); - if( buildsettings.preGenerateCommands.length ){ - logInfo("Running pre-generate commands..."); - runBuildCommands(buildsettings.preGenerateCommands, buildsettings); - } - - if( buildsettings.postGenerateCommands.length ){ - logInfo("Running post-generate commands..."); - runBuildCommands(buildsettings.postGenerateCommands, buildsettings); - } - - if( buildsettings.preBuildCommands.length ){ - logInfo("Running pre-build commands..."); - runBuildCommands(buildsettings.preBuildCommands, buildsettings); - } + prepareGeneration(buildsettings); // determine the absolute target path if( !Path(buildsettings.targetPath).absolute ) @@ -104,6 +91,13 @@ } logDebug("Application output name is '%s'", exe_file_path.toNativeString()); + finalizeGeneration(buildsettings, generate_binary); + + if( buildsettings.preBuildCommands.length ){ + logInfo("Running pre-build commands..."); + runBuildCommands(buildsettings.preBuildCommands, buildsettings); + } + // assure that we clean up after ourselves Path[] cleanup_files; scope(exit){ @@ -112,8 +106,6 @@ remove(f.toNativeString()); if( generate_binary && settings.run ) rmdir(buildsettings.targetPath); } - if( !exists(buildsettings.targetPath) ) - mkdirRecurse(buildsettings.targetPath); /* NOTE: for DMD experimental separate compile/link is used, but this is not yet implemented @@ -176,20 +168,6 @@ // copy files and run the executable if( generate_binary ){ - // TODO: move to a common place - this is not generator specific - if( buildsettings.copyFiles.length ){ - logInfo("Copying files..."); - foreach( f; buildsettings.copyFiles ){ - auto src = Path(f); - auto dst = exe_file_path.parentPath ~ Path(f).head; - logDebug(" %s to %s", src.toNativeString(), dst.toNativeString()); - try { - if( settings.run ) cleanup_files ~= dst; - copyFile(src, dst, true); - } catch logWarn("Failed to copy to %s", dst.toNativeString()); - } - } - if( settings.run ){ logInfo("Running %s...", exe_file_path.toNativeString()); auto prg_pid = spawnProcess(exe_file_path.toNativeString() ~ settings.runArgs); diff --git a/source/dub/generators/generator.d b/source/dub/generators/generator.d index 173fba7..5eb687a 100644 --- a/source/dub/generators/generator.d +++ b/source/dub/generators/generator.d @@ -17,8 +17,11 @@ import dub.project; import std.exception; +import std.file; import std.string; +import vibecompat.core.file; import vibecompat.core.log; +import vibecompat.inet.path; /** @@ -86,6 +89,43 @@ } } + +/** + Runs pre-build commands and performs an other required setup before project files are generated. +*/ +void prepareGeneration(BuildSettings buildsettings) +{ + if( buildsettings.preGenerateCommands.length ){ + logInfo("Running pre-generate commands..."); + runBuildCommands(buildsettings.preGenerateCommands, buildsettings); + } +} + +/** + Runs post-build commands and copies required files to the binary directory. +*/ +void finalizeGeneration(BuildSettings buildsettings, bool generate_binary) +{ + if (buildsettings.postGenerateCommands.length) { + logInfo("Running post-generate commands..."); + runBuildCommands(buildsettings.postGenerateCommands, buildsettings); + } + + if (generate_binary && buildsettings.copyFiles.length) { + logInfo("Copying files..."); + if (!exists(buildsettings.targetPath)) + mkdirRecurse(buildsettings.targetPath); + foreach (f; buildsettings.copyFiles) { + auto src = Path(f); + auto dst = Path(buildsettings.targetPath) ~ Path(f).head; + logDebug(" %s to %s", src.toNativeString(), dst.toNativeString()); + try { + copyFile(src, dst, true); + } catch logWarn("Failed to copy to %s", dst.toNativeString()); + } + } +} + void runBuildCommands(string[] commands, in BuildSettings build_settings) { import stdx.process; diff --git a/source/dub/generators/monod.d b/source/dub/generators/monod.d index 8e6e81d..439172d 100644 --- a/source/dub/generators/monod.d +++ b/source/dub/generators/monod.d @@ -46,22 +46,15 @@ void generateProject(GeneratorSettings settings) { auto buildsettings = settings.buildSettings; + m_app.addBuildSettings(buildsettings, settings.platform, settings.config); - if( buildsettings.preGenerateCommands.length ){ - logInfo("Running pre-generate commands..."); - // TODO: pass full build settings for current configuration instead? - runBuildCommands(buildsettings.preGenerateCommands, buildsettings); - } + prepareGeneration(buildsettings); logTrace("About to generate projects for %s, with %s direct dependencies.", m_app.mainPackage().name, m_app.mainPackage().dependencies().length); generateProjects(m_app.mainPackage(), settings); generateSolution(settings); - if( buildsettings.postGenerateCommands.length ){ - logInfo("Running post-generate commands..."); - // TODO: pass full build settings for current configuration instead? - runBuildCommands(buildsettings.postGenerateCommands, buildsettings); - } + finalizeGeneration(buildsettings, true); } private void generateSolution(GeneratorSettings settings) @@ -264,6 +257,7 @@ if (!sp.absolute) sp = pack.path ~ sp; generateSourceEntry(sp, pack.path); } + // TODO: add all files in stringImportFolders // add package.json files foreach (p; m_app.getTopologicalPackageList()) generateSourceEntry(p.packageInfoFile, pack.path, false); diff --git a/source/dub/generators/rdmd.d b/source/dub/generators/rdmd.d index cecfc06..0bf6b07 100644 --- a/source/dub/generators/rdmd.d +++ b/source/dub/generators/rdmd.d @@ -88,15 +88,8 @@ flags ~= buildsettings.dflags; flags ~= (mainsrc).toNativeString(); - if( buildsettings.preGenerateCommands.length ){ - logInfo("Running pre-generate commands..."); - runCommands(buildsettings.preGenerateCommands); - } - - if( buildsettings.postGenerateCommands.length ){ - logInfo("Running post-generate commands..."); - runCommands(buildsettings.postGenerateCommands); - } + prepareGeneration(buildsettings); + finalizeGeneration(buildsettings, generate_binary); if( buildsettings.preBuildCommands.length ){ logInfo("Running pre-build commands..."); @@ -118,18 +111,6 @@ } if( generate_binary ){ - // TODO: move to a common place - this is not generator specific - if( buildsettings.copyFiles.length ){ - logInfo("Copying files..."); - foreach( f; buildsettings.copyFiles ){ - auto src = Path(f); - auto dst = (run_exe_file.empty ? Path(buildsettings.targetPath) : run_exe_file.parentPath) ~ Path(f).head; - logDebug(" %s to %s", src.toNativeString(), dst.toNativeString()); - try copyFile(src, dst, true); - catch logWarn("Failed to copy to %s", dst.toNativeString()); - } - } - if( settings.run ){ logInfo("Running %s...", run_exe_file.toNativeString()); auto prg_pid = spawnProcess(run_exe_file.toNativeString() ~ settings.runArgs); diff --git a/source/dub/generators/visuald.d b/source/dub/generators/visuald.d index bb40347..9dc1168 100644 --- a/source/dub/generators/visuald.d +++ b/source/dub/generators/visuald.d @@ -47,21 +47,16 @@ void generateProject(GeneratorSettings settings) { auto buildsettings = settings.buildSettings; - - if( buildsettings.preGenerateCommands.length ){ - logInfo("Running pre-generate commands..."); - runCommands(buildsettings.preGenerateCommands); - } + m_app.addBuildSettings(buildsettings, settings.platform, settings.config); + + prepareGeneration(buildsettings); logTrace("About to generate projects for %s, with %s direct dependencies.", m_app.mainPackage().name, m_app.mainPackage().dependencies().length); generateProjects(m_app.mainPackage(), settings); generateSolution(); logInfo("VisualD project generated."); - if( buildsettings.postGenerateCommands.length ){ - logInfo("Running post-generate commands..."); - runCommands(buildsettings.postGenerateCommands); - } + finalizeGeneration(buildsettings, true); } private {