diff --git a/source/dub/dub.d b/source/dub/dub.d index c11737b..9319e08 100644 --- a/source/dub/dub.d +++ b/source/dub/dub.d @@ -692,10 +692,10 @@ mkdirRecurse(mainfile.parentPath.toNativeString()); bool regenerateMainFile = settings.force || !existsFile(mainfile); - + auto escapedMainFile = mainfile.toNativeString().replace("$", "$$"); // generate main file - tcinfo.sourceFiles[""] ~= mainfile.toNativeString(); - tcinfo.mainSourceFile = mainfile.toNativeString(); + tcinfo.sourceFiles[""] ~= escapedMainFile; + tcinfo.mainSourceFile = escapedMainFile; if (!m_dryRun && regenerateMainFile) { auto fil = openFile(mainfile, FileMode.createTrunc); diff --git a/test/cache-generated-test-config.sh b/test/cache-generated-test-config.sh index 9f5ca6f..f4e0e27 100755 --- a/test/cache-generated-test-config.sh +++ b/test/cache-generated-test-config.sh @@ -4,6 +4,7 @@ cd ${CURR_DIR}/cache-generated-test-config rm -rf .dub +## default test ${DUB} test --compiler=${DC} STAT="stat -c '%Y'" @@ -21,4 +22,42 @@ [ "$EXECUTABLE_TIME" != "$(${STAT} cache-generated-test-config-test-library)" ] && die $LINENO 'The executable has been rebuilt' [ "$MAIN_TIME" != "$(${STAT} "$(ls .dub/code/*dub_test_root.d | head -n1)")" ] && die $LINENO 'The test main file has been rebuilt' +## test with empty DFLAGS environment variable +DFLAGS="" ${DUB} test --compiler=${DC} + +STAT="stat -c '%Y'" +[[ "$OSTYPE" == "darwin"* ]] && STAT="stat -f '%m' -t '%Y'" + +EXECUTABLE_TIME="$(${STAT} cache-generated-test-config-test-library)" +[ -z "$EXECUTABLE_TIME" ] && die $LINENO 'no EXECUTABLE_TIME was found' +MAIN_TIME="$(${STAT} "$(ls .dub/code/*-\$DFLAGS-*dub_test_root.d)")" +[ -z "$MAIN_TIME" ] && die $LINENO 'no MAIN_TIME was found' + +DFLAGS="" ${DUB} test --compiler=${DC} +MAIN_FILES_COUNT=$(ls .dub/code/*-\$DFLAGS-*dub_test_root.d | wc -l) + +[ $MAIN_FILES_COUNT -ne 1 ] && die $LINENO 'DUB generated more then one main file' +[ "$EXECUTABLE_TIME" != "$(${STAT} cache-generated-test-config-test-library)" ] && die $LINENO 'The executable has been rebuilt' +[ "$MAIN_TIME" != "$(${STAT} "$(ls .dub/code/*-\$DFLAGS-*dub_test_root.d | head -n1)")" ] && die $LINENO 'The test main file has been rebuilt' + +## test with DFLAGS environment variable +DFLAGS="-g" ${DUB} test --compiler=${DC} + +STAT="stat -c '%Y'" +[[ "$OSTYPE" == "darwin"* ]] && STAT="stat -f '%m' -t '%Y'" + +EXECUTABLE_TIME="$(${STAT} cache-generated-test-config-test-library)" +[ -z "$EXECUTABLE_TIME" ] && die $LINENO 'no EXECUTABLE_TIME was found' +MAIN_TIME="$(${STAT} "$(ls .dub/code/*-\$DFLAGS-*dub_test_root.d)")" +[ -z "$MAIN_TIME" ] && die $LINENO 'no MAIN_TIME was found' + +DFLAGS="-g" ${DUB} test --compiler=${DC} +MAIN_FILES_COUNT=$(ls .dub/code/*-\$DFLAGS-*dub_test_root.d | wc -l) + +[ $MAIN_FILES_COUNT -ne 1 ] && die $LINENO 'DUB generated more then one main file' +[ "$EXECUTABLE_TIME" != "$(${STAT} cache-generated-test-config-test-library)" ] && die $LINENO 'The executable has been rebuilt' +[ "$MAIN_TIME" != "$(${STAT} "$(ls .dub/code/*-\$DFLAGS-*dub_test_root.d | head -n1)")" ] && die $LINENO 'The test main file has been rebuilt' + + + exit 0 \ No newline at end of file