diff --git a/changelog/pdb.dd b/changelog/pdb.dd new file mode 100644 index 0000000..c16cabb --- /dev/null +++ b/changelog/pdb.dd @@ -0,0 +1,5 @@ +Windows: Copy PDB files to `targetPath`, alongside executable/DLL + +If the default PDB file is generated when linking an executable or DLL +(e.g., no `/PDB:my\path.pdb` lflag), it is now copied to the target +directory too. diff --git a/source/dub/generators/build.d b/source/dub/generators/build.d index 2f6f611..4251789 100644 --- a/source/dub/generators/build.d +++ b/source/dub/generators/build.d @@ -371,12 +371,30 @@ private void copyTargetFile(NativePath build_path, BuildSettings buildsettings, GeneratorSettings settings) { - auto filename = settings.compiler.getTargetFileName(buildsettings, settings.platform); - auto src = build_path ~ filename; - logDiagnostic("Copying target from %s to %s", src.toNativeString(), buildsettings.targetPath); if (!existsFile(NativePath(buildsettings.targetPath))) mkdirRecurse(buildsettings.targetPath); - hardLinkFile(src, NativePath(buildsettings.targetPath) ~ filename, true); + + string[] filenames = [ + settings.compiler.getTargetFileName(buildsettings, settings.platform) + ]; + + // Windows: add .pdb if found + const tt = buildsettings.targetType; + if ((tt == TargetType.executable || tt == TargetType.dynamicLibrary) && + settings.platform.platform.canFind("windows")) + { + import std.path : setExtension; + const pdbFilename = filenames[0].setExtension(".pdb"); + if (existsFile(build_path ~ pdbFilename)) + filenames ~= pdbFilename; + } + + foreach (filename; filenames) + { + auto src = build_path ~ filename; + logDiagnostic("Copying target from %s to %s", src.toNativeString(), buildsettings.targetPath); + hardLinkFile(src, NativePath(buildsettings.targetPath) ~ filename, true); + } } private bool isUpToDate(NativePath target_path, BuildSettings buildsettings, GeneratorSettings settings, in Package main_pack, in Package[] packages, in NativePath[] additional_dep_files)