diff --git a/source/dub/compilers/buildsettings.d b/source/dub/compilers/buildsettings.d index 615685ed9..aef3fe8f4 100644 --- a/source/dub/compilers/buildsettings.d +++ b/source/dub/compilers/buildsettings.d @@ -545,6 +545,14 @@ void getPlatformSettings(in BuildSettingsTemplate this_, ref BuildSettings dst, // collect source files. Note: D source from 'sourcePaths' and C sources from 'cSourcePaths' are joint into 'sourceFiles' dst.addSourceFiles(collectFiles(this_.sourcePaths, "*.d")); dst.addSourceFiles(collectFiles(this_.cSourcePaths, "*.{c,i}")); + version (Windows) { + import std.path : buildNormalizedPath; + import std.algorithm : map; + import std.array : array; + dst.sourceFiles = dst.sourceFiles.map!buildNormalizedPath.array; + if (!dst.mainSourceFile.empty) + dst.mainSourceFile = buildNormalizedPath(dst.mainSourceFile); + } auto sourceFiles = dst.sourceFiles.sort(); // collect import files and remove sources diff --git a/test/issue3070.sh b/test/issue3070.sh new file mode 100755 index 000000000..dc7a72e21 --- /dev/null +++ b/test/issue3070.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +# Test for https://github.com/dlang/dub/issues/3070 +# Verify mixed path separators don't cause duplicate source file errors. +set -e +. $(dirname "${BASH_SOURCE[0]}")/common.sh +cd ${CURR_DIR}/issue3070 +$DUB build --compiler=${DC} 2>&1 +echo "PASS: No duplicate source file error with mixed path separators." \ No newline at end of file diff --git a/test/issue3070/dub.json b/test/issue3070/dub.json new file mode 100644 index 000000000..1ff76e84c --- /dev/null +++ b/test/issue3070/dub.json @@ -0,0 +1,7 @@ +{ + "name": "issue3070", + "description": "Test mixed path separators do not duplicate mainSourceFile", + "targetType": "executable", + "sourcePaths": ["src"], + "mainSourceFile": "src/main.d" +} diff --git a/test/issue3070/src/main.d b/test/issue3070/src/main.d new file mode 100644 index 000000000..a74017975 --- /dev/null +++ b/test/issue3070/src/main.d @@ -0,0 +1 @@ +void main() {}