diff --git a/changelog/extraDependencyFiles-attribute-added.dd b/changelog/extraDependencyFiles-attribute-added.dd new file mode 100644 index 0000000..213df5b --- /dev/null +++ b/changelog/extraDependencyFiles-attribute-added.dd @@ -0,0 +1,4 @@ +extraDependencyFiles attribute added + +Using attribute `extraDependencyFiles` a list of files can be specified +causing rebuild on change. diff --git a/source/dub/compilers/buildsettings.d b/source/dub/compilers/buildsettings.d index 87a4f1a..cfc39c4 100644 --- a/source/dub/compilers/buildsettings.d +++ b/source/dub/compilers/buildsettings.d @@ -31,6 +31,7 @@ string[] linkerFiles; string[] sourceFiles; string[] copyFiles; + string[] extraDependencyFiles; string[] versions; string[] debugVersions; string[] versionFilters; @@ -71,6 +72,7 @@ addLinkerFiles(bs.linkerFiles); addSourceFiles(bs.sourceFiles); addCopyFiles(bs.copyFiles); + addExtraDependencyFiles(bs.extraDependencyFiles); addVersions(bs.versions); addDebugVersions(bs.debugVersions); addVersionFilters(bs.versionFilters); @@ -97,6 +99,7 @@ void prependSourceFiles(in string[] value...) { prepend(sourceFiles, value); } void removeSourceFiles(in string[] value...) { removePaths(sourceFiles, value); } void addCopyFiles(in string[] value...) { add(copyFiles, value); } + void addExtraDependencyFiles(in string[] value...) { add(extraDependencyFiles, value); } void addVersions(in string[] value...) { add(versions, value); } void addDebugVersions(in string[] value...) { add(debugVersions, value); } void addVersionFilters(in string[] value...) { add(versionFilters, value); } diff --git a/source/dub/description.d b/source/dub/description.d index d38181a..7758751 100644 --- a/source/dub/description.d +++ b/source/dub/description.d @@ -85,6 +85,7 @@ string[] lflags; /// Flags passed to the linker string[] libs; /// Librariy names to link against (typically using "-l") string[] copyFiles; /// Files to copy to the target directory + string[] extraDependencyFiles; /// Files to check for rebuild dub project string[] versions; /// D version identifiers to set string[] debugVersions; /// D debug version identifiers to set string[] importPaths; diff --git a/source/dub/generators/build.d b/source/dub/generators/build.d index 3586aa7..2c639fd 100644 --- a/source/dub/generators/build.d +++ b/source/dub/generators/build.d @@ -376,6 +376,7 @@ allfiles ~= buildsettings.sourceFiles; allfiles ~= buildsettings.importFiles; allfiles ~= buildsettings.stringImportFiles; + allfiles ~= buildsettings.extraDependencyFiles; // TODO: add library files foreach (p; packages) allfiles ~= (p.recipePath != NativePath.init ? p : p.basePackage).recipePath.toNativeString(); diff --git a/source/dub/project.d b/source/dub/project.d index 5171433..4b4e85b 100644 --- a/source/dub/project.d +++ b/source/dub/project.d @@ -955,6 +955,7 @@ case "working-directory": case "string-import-files": case "copy-files": + case "extra-dependency-files": case "pre-generate-commands": case "post-generate-commands": case "pre-build-commands": @@ -985,6 +986,7 @@ case "linker-files": return listBuildSetting!"linkerFiles"(args); case "source-files": return listBuildSetting!"sourceFiles"(args); case "copy-files": return listBuildSetting!"copyFiles"(args); + case "extra-dependency-files": return listBuildSetting!"extraDependencyFiles"(args); case "versions": return listBuildSetting!"versions"(args); case "debug-versions": return listBuildSetting!"debugVersions"(args); case "import-paths": return listBuildSetting!"importPaths"(args); @@ -1153,6 +1155,7 @@ dst.addImportFiles(processVars(project, pack, gsettings, settings.importFiles, true)); dst.addStringImportFiles(processVars(project, pack, gsettings, settings.stringImportFiles, true)); dst.addCopyFiles(processVars(project, pack, gsettings, settings.copyFiles, true)); + dst.addExtraDependencyFiles(processVars(project, pack, gsettings, settings.extraDependencyFiles, true)); dst.addVersions(processVars(project, pack, gsettings, settings.versions)); dst.addDebugVersions(processVars(project, pack, gsettings, settings.debugVersions)); dst.addVersionFilters(processVars(project, pack, gsettings, settings.versionFilters)); diff --git a/source/dub/recipe/json.d b/source/dub/recipe/json.d index 418f827..d9645b8 100644 --- a/source/dub/recipe/json.d +++ b/source/dub/recipe/json.d @@ -212,6 +212,7 @@ case "sourcePath": bs.sourcePaths[suffix] ~= [value.get!string]; break; // deprecated case "excludedSourceFiles": bs.excludedSourceFiles[suffix] = deserializeJson!(string[])(value); break; case "copyFiles": bs.copyFiles[suffix] = deserializeJson!(string[])(value); break; + case "extraDependencyFiles": bs.extraDependencyFiles[suffix] = deserializeJson!(string[])(value); break; case "versions": bs.versions[suffix] = deserializeJson!(string[])(value); break; case "debugVersions": bs.debugVersions[suffix] = deserializeJson!(string[])(value); break; case "-versionFilters": bs.versionFilters[suffix] = deserializeJson!(string[])(value); break; @@ -263,6 +264,7 @@ foreach (suffix, arr; bs.sourcePaths) ret["sourcePaths"~suffix] = serializeToJson(arr); foreach (suffix, arr; bs.excludedSourceFiles) ret["excludedSourceFiles"~suffix] = serializeToJson(arr); foreach (suffix, arr; bs.copyFiles) ret["copyFiles"~suffix] = serializeToJson(arr); + foreach (suffix, arr; bs.extraDependencyFiles) ret["extraDependencyFiles"~suffix] = serializeToJson(arr); foreach (suffix, arr; bs.versions) ret["versions"~suffix] = serializeToJson(arr); foreach (suffix, arr; bs.debugVersions) ret["debugVersions"~suffix] = serializeToJson(arr); foreach (suffix, arr; bs.versionFilters) ret["-versionFilters"~suffix] = serializeToJson(arr); diff --git a/source/dub/recipe/packagerecipe.d b/source/dub/recipe/packagerecipe.d index d4382b2..946b369 100644 --- a/source/dub/recipe/packagerecipe.d +++ b/source/dub/recipe/packagerecipe.d @@ -150,6 +150,7 @@ string[][string] sourcePaths; string[][string] excludedSourceFiles; string[][string] copyFiles; + string[][string] extraDependencyFiles; string[][string] versions; string[][string] debugVersions; string[][string] versionFilters; @@ -237,6 +238,7 @@ getPlatformSetting!("sourceFiles", "addSourceFiles")(dst, platform); getPlatformSetting!("excludedSourceFiles", "removeSourceFiles")(dst, platform); getPlatformSetting!("copyFiles", "addCopyFiles")(dst, platform); + getPlatformSetting!("extraDependencyFiles", "addExtraDependencyFiles")(dst, platform); getPlatformSetting!("versions", "addVersions")(dst, platform); getPlatformSetting!("debugVersions", "addDebugVersions")(dst, platform); getPlatformSetting!("versionFilters", "addVersionFilters")(dst, platform); diff --git a/source/dub/recipe/sdl.d b/source/dub/recipe/sdl.d index cecca7c..da99f7f 100644 --- a/source/dub/recipe/sdl.d +++ b/source/dub/recipe/sdl.d @@ -148,6 +148,7 @@ case "excludedSourceFiles": setting.parsePlatformStringArray(bs.excludedSourceFiles); break; case "mainSourceFile": bs.mainSourceFile = setting.stringTagValue; break; case "copyFiles": setting.parsePlatformStringArray(bs.copyFiles); break; + case "extraDependencyFiles": setting.parsePlatformStringArray(bs.extraDependencyFiles); break; case "versions": setting.parsePlatformStringArray(bs.versions); break; case "debugVersions": setting.parsePlatformStringArray(bs.debugVersions); break; case "x:versionFilters": setting.parsePlatformStringArray(bs.versionFilters); break; @@ -253,6 +254,7 @@ foreach (suffix, arr; bs.sourcePaths) adda("sourcePaths", suffix, arr); foreach (suffix, arr; bs.excludedSourceFiles) adda("excludedSourceFiles", suffix, arr); foreach (suffix, arr; bs.copyFiles) adda("copyFiles", suffix, arr); + foreach (suffix, arr; bs.extraDependencyFiles) adda("extraDependencyFiles", suffix, arr); foreach (suffix, arr; bs.versions) adda("versions", suffix, arr); foreach (suffix, arr; bs.debugVersions) adda("debugVersions", suffix, arr); foreach (suffix, arr; bs.versionFilters) adda("versionFilters", suffix, arr, "x"); @@ -392,6 +394,8 @@ mainSourceFile "main source" copyFiles "copy1" "copy2" copyFiles "copy3" +extraDependencyFiles "extradepfile1" "extradepfile2" +extraDependencyFiles "extradepfile3" versions "version1" "version2" versions "version3" debugVersions "debug1" "debug2" @@ -476,6 +480,7 @@ assert(rec.buildSettings.excludedSourceFiles == ["": ["excluded1", "excluded2", "excluded3"]]); assert(rec.buildSettings.mainSourceFile == "main source"); assert(rec.buildSettings.copyFiles == ["": ["copy1", "copy2", "copy3"]]); + assert(rec.buildSettings.extraDependencyFiles == ["": ["extradepfile1", "extradepfile2", "extradepfile3"]]); assert(rec.buildSettings.versions == ["": ["version1", "version2", "version3"]]); assert(rec.buildSettings.debugVersions == ["": ["debug1", "debug2", "debug3"]]); assert(rec.buildSettings.versionFilters == ["": ["version1", "version2", "version3"]]); diff --git a/test/issue1117-extra-dependency-files.sh b/test/issue1117-extra-dependency-files.sh new file mode 100755 index 0000000..1059dbc --- /dev/null +++ b/test/issue1117-extra-dependency-files.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +. $(dirname "${BASH_SOURCE[0]}")/common.sh +cd ${CURR_DIR}/issue1117-extra-dependency-files + + +if ! { ${DUB} build 2>&1 || true; } | grep -cF 'building configuration'; then + die $LINENO 'Build was not executed.' +fi + +if ! { ${DUB} build 2>&1 || true; } | grep -cF 'is up to date'; then + die $LINENO 'Build was executed.' +fi + +touch ./dependency.txt + +if ! { ${DUB} build 2>&1 || true; } | grep -cF 'building configuration'; then + die $LINENO 'Build was not executed.' +fi diff --git a/test/issue1117-extra-dependency-files/.gitignore b/test/issue1117-extra-dependency-files/.gitignore new file mode 100644 index 0000000..304e955 --- /dev/null +++ b/test/issue1117-extra-dependency-files/.gitignore @@ -0,0 +1,8 @@ +.dub +docs.json +__dummy.html +docs/ +*.exe +*.o +*.obj +*.lst diff --git a/test/issue1117-extra-dependency-files/.no_build b/test/issue1117-extra-dependency-files/.no_build new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/issue1117-extra-dependency-files/.no_build diff --git a/test/issue1117-extra-dependency-files/dependency.txt b/test/issue1117-extra-dependency-files/dependency.txt new file mode 100644 index 0000000..5ab2f8a --- /dev/null +++ b/test/issue1117-extra-dependency-files/dependency.txt @@ -0,0 +1 @@ +Hello \ No newline at end of file diff --git a/test/issue1117-extra-dependency-files/dub.json b/test/issue1117-extra-dependency-files/dub.json new file mode 100644 index 0000000..00e57a9 --- /dev/null +++ b/test/issue1117-extra-dependency-files/dub.json @@ -0,0 +1,4 @@ +{ + "name": "test", + "extraDependencyFiles": ["dependency.txt"] +} \ No newline at end of file diff --git a/test/issue1117-extra-dependency-files/source/app.d b/test/issue1117-extra-dependency-files/source/app.d new file mode 100644 index 0000000..ef93217 --- /dev/null +++ b/test/issue1117-extra-dependency-files/source/app.d @@ -0,0 +1 @@ +void main(){} \ No newline at end of file