diff --git a/source/dub/commandline.d b/source/dub/commandline.d index 3e2579f..04c2e34 100644 --- a/source/dub/commandline.d +++ b/source/dub/commandline.d @@ -776,7 +776,7 @@ "", "The accepted values for --data=VALUE are:", "", - "main-source-file, dflags, lflags, libs, linker-files, d-files, " + "main-source-file, dflags, lflags, libs, linker-files, " "source-files, versions, debug-versions, import-paths, " "string-import-paths, import-files, options", "", diff --git a/source/dub/compilers/buildsettings.d b/source/dub/compilers/buildsettings.d index 752c44e..556c839 100644 --- a/source/dub/compilers/buildsettings.d +++ b/source/dub/compilers/buildsettings.d @@ -29,6 +29,7 @@ string[] dflags; string[] lflags; string[] libs; + string[] linkerFiles; string[] sourceFiles; string[] copyFiles; string[] versions; @@ -44,18 +45,6 @@ @byName BuildRequirements requirements; @byName BuildOptions options; - string[] dFiles() - { - import dub.compilers.compiler : isLinkerFile; - return sourceFiles.filter!(f => !isLinkerFile(f)).array(); - } - - string[] linkerFiles() - { - import dub.compilers.compiler : isLinkerFile; - return sourceFiles.filter!(f => isLinkerFile(f)).array(); - } - BuildSettings dup() const { BuildSettings ret; @@ -76,6 +65,7 @@ addDFlags(bs.dflags); addLFlags(bs.lflags); addLibs(bs.libs); + addLinkerFiles(bs.linkerFiles); addSourceFiles(bs.sourceFiles); addCopyFiles(bs.copyFiles); addVersions(bs.versions); @@ -94,6 +84,7 @@ void removeDFlags(in string[] value...) { remove(dflags, value); } void addLFlags(in string[] value...) { lflags ~= value; } void addLibs(in string[] value...) { add(libs, value); } + void addLinkerFiles(in string[] value...) { add(linkerFiles, value); } void addSourceFiles(in string[] value...) { add(sourceFiles, value); } void prependSourceFiles(in string[] value...) { prepend(sourceFiles, value); } void removeSourceFiles(in string[] value...) { removePaths(sourceFiles, value); } diff --git a/source/dub/generators/targetdescription.d b/source/dub/generators/targetdescription.d index 4125505..f0360c5 100644 --- a/source/dub/generators/targetdescription.d +++ b/source/dub/generators/targetdescription.d @@ -52,7 +52,9 @@ auto linkDepTarget = targetDescriptions[ targetDescriptionLookup[linkDepName] ]; auto dbs = linkDepTarget.buildSettings; if (bs.targetType != TargetType.staticLibrary) { - bs.addSourceFiles((Path(dbs.targetPath) ~ getTargetFileName(dbs, settings.platform)).toNativeString()); + auto linkerFile = (Path(dbs.targetPath) ~ getTargetFileName(dbs, settings.platform)).toNativeString(); + bs.addLinkerFiles(linkerFile); + bs.addSourceFiles(linkerFile); // To be removed from sourceFiles in the future } } } diff --git a/source/dub/project.d b/source/dub/project.d index ea8bc09..ff431fc 100644 --- a/source/dub/project.d +++ b/source/dub/project.d @@ -652,14 +652,13 @@ switch (attributeName) { case "dflags": + case "linkerFiles": case "mainSourceFile": case "importFiles": values = formatBuildSettingPlain!attributeName(platform, configs, projectDescription); break; case "lflags": - case "linkerFiles": - case "dFiles": case "sourceFiles": case "versions": case "debugVersions": @@ -676,20 +675,7 @@ else static if (attributeName == "stringImportPaths") bs.stringImportPaths = bs.stringImportPaths.map!(ensureTrailingSlash).array(); - // linkerFiles and dFiles are functions, not regular BuildSetting fields - auto buildSettingField = attributeName; - static if(attributeName == "linkerFiles") - { - buildSettingField = "sourceFiles"; - bs.sourceFiles = bs.linkerFiles(); - } - else static if(attributeName == "dFiles") - { - buildSettingField = "sourceFiles"; - bs.sourceFiles = bs.dFiles(); - } - - compiler.prepareBuildSettings(bs, BuildSetting.all & ~to!BuildSetting(buildSettingField)); + compiler.prepareBuildSettings(bs, BuildSetting.all & ~to!BuildSetting(attributeName)); values = bs.dflags; break; @@ -721,7 +707,6 @@ { case "mainSourceFile": case "linkerFiles": - case "dFiles": case "copyFiles": case "importFiles": case "stringImportFiles": @@ -754,13 +739,7 @@ // is empty string an actual permitted value instead of // a missing value? auto getRawBuildSetting(Package pack, bool allowEmptyString) { - // linkerFiles and dFiles are implemented as member functions - static if(attributeName == "linkerFiles") - auto value = buildSettings.linkerFiles(); - else static if(attributeName == "dFiles") - auto value = buildSettings.dFiles(); - else - auto value = __traits(getMember, buildSettings, attributeName); + auto value = __traits(getMember, buildSettings, attributeName); static if( is(typeof(value) == string[]) ) return value; @@ -798,9 +777,8 @@ // Is relative path(s) to a file? enum isRelativeFile = attributeName == "sourceFiles" || attributeName == "linkerFiles" || - attributeName == "dFiles" || attributeName == "importFiles" || - attributeName == "stringImportFiles" || attributeName == "copyFiles" || - attributeName == "mainSourceFile"; + attributeName == "importFiles" || attributeName == "stringImportFiles" || + attributeName == "copyFiles" || attributeName == "mainSourceFile"; // For these, empty string means "main project directory", not "missing value" enum allowEmptyString = @@ -879,7 +857,6 @@ case "dflags": return listBuildSetting!"dflags"(args); case "lflags": return listBuildSetting!"lflags"(args); case "libs": return listBuildSetting!"libs"(args); - case "d-files": return listBuildSetting!"dFiles"(args); case "linker-files": return listBuildSetting!"linkerFiles"(args); case "source-files": return listBuildSetting!"sourceFiles"(args); case "copy-files": return listBuildSetting!"copyFiles"(args); @@ -916,6 +893,14 @@ packageDescription = pack; } + // Remove linker files from sourceFiles + auto target = projectDescription.lookupTarget(projectDescription.rootPackage); + target.buildSettings.sourceFiles = + target.buildSettings.sourceFiles + .filter!(a => !isLinkerFile(a)) + .array(); + projectDescription.lookupTarget(projectDescription.rootPackage) = target; + // Genrate results if (formattingCompiler) { diff --git a/test/4-describe-data-dmd.sh b/test/4-describe-data-dmd.sh index 9d9bece..b5459df 100755 --- a/test/4-describe-data-dmd.sh +++ b/test/4-describe-data-dmd.sh @@ -21,7 +21,7 @@ --data=main-source-file \ --data=dflags,lflags \ --data=libs,linker-files \ - --data=d-files,source-files \ + --data=source-files \ --data=versions \ --data=debug-versions \ --data=import-paths \ @@ -43,18 +43,13 @@ echo -n "-L--some-lflag " >> "$expected_file" echo -n "-L--another-lflag " >> "$expected_file" # --data=libs -echo -n "-lssl " >> "$expected_file" echo -n "-lcrypto " >> "$expected_file" echo -n "-lcurl " >> "$expected_file" # --data=linker-files echo -n "'$CURR_DIR/describe-dependency-3/libdescribe-dependency-3.a' " >> "$expected_file" -# --data=d-files -echo -n "'$CURR_DIR/describe-project/src/dummy.d' " >> "$expected_file" -echo -n "'$CURR_DIR/describe-dependency-1/source/dummy.d' " >> "$expected_file" # --data=source-files echo -n "'$CURR_DIR/describe-project/src/dummy.d' " >> "$expected_file" echo -n "'$CURR_DIR/describe-dependency-1/source/dummy.d' " >> "$expected_file" -echo -n "'$CURR_DIR/describe-dependency-3/libdescribe-dependency-3.a' " >> "$expected_file" # --data=versions echo -n "-version=someVerIdent " >> "$expected_file" echo -n "-version=anotherVerIdent " >> "$expected_file" diff --git a/test/4-describe-data-list.sh b/test/4-describe-data-list.sh index fe824d4..e9fcb73 100755 --- a/test/4-describe-data-list.sh +++ b/test/4-describe-data-list.sh @@ -18,7 +18,7 @@ --data=main-source-file \ '--data=dflags,lflags' \ '--data=libs, linker-files' \ - '--data=d-files, source-files, copy-files' \ + '--data=source-files, copy-files' \ '--data=versions, debug-versions' \ --data=import-paths \ --data=string-import-paths \ @@ -59,20 +59,15 @@ echo "--another-lflag" >> "$expected_file" echo >> "$expected_file" # --data=libs -echo "ssl" >> "$expected_file" +echo "crypto" >> "$expected_file" echo "curl" >> "$expected_file" echo >> "$expected_file" # --data=linker-files echo "$CURR_DIR/describe-dependency-3/libdescribe-dependency-3.a" >> "$expected_file" echo >> "$expected_file" -# --data=d-files -echo "$CURR_DIR/describe-project/src/dummy.d" >> "$expected_file" -echo "$CURR_DIR/describe-dependency-1/source/dummy.d" >> "$expected_file" -echo >> "$expected_file" # --data=source-files echo "$CURR_DIR/describe-project/src/dummy.d" >> "$expected_file" echo "$CURR_DIR/describe-dependency-1/source/dummy.d" >> "$expected_file" -echo "$CURR_DIR/describe-dependency-3/libdescribe-dependency-3.a" >> "$expected_file" echo >> "$expected_file" # --data=copy-files echo "$CURR_DIR/describe-project/data/dummy.dat" >> "$expected_file" diff --git a/test/4-describe-data-zero-delim.sh b/test/4-describe-data-zero-delim.sh index eaf8e88..68a749b 100755 --- a/test/4-describe-data-zero-delim.sh +++ b/test/4-describe-data-zero-delim.sh @@ -25,7 +25,6 @@ --data=lflags \ --data=libs \ --data=linker-files \ - --data=d-files \ --data=source-files \ --data=copy-files \ --data=versions \ @@ -54,7 +53,6 @@ --data=lflags \ --data=libs \ --data=linker-files \ - --data=d-files \ --data=source-files \ --data=copy-files \ --data=versions \ diff --git a/test/describe-project/dub.json b/test/describe-project/dub.json index 655058f..ade60d5 100644 --- a/test/describe-project/dub.json +++ b/test/describe-project/dub.json @@ -9,7 +9,7 @@ "mainSourceFile": "src/dummy.d", "dflags": ["--some-dflag"], "lflags": ["--some-lflag"], - "libs": ["ssl"], + "libs": ["crypto"], "copyFiles": ["data/dummy.dat"], "versions": ["someVerIdent"], "debugVersions": ["someDebugVerIdent"],