From 7bda9a7fc78cfe43fe7f0d98bea41158bf75433e Mon Sep 17 00:00:00 2001 From: Mark Jansen Date: Fri, 25 Sep 2020 22:13:45 +0200 Subject: VS: Make ImportLibary generation optional Fixes: #21180 --- Source/cmLocalVisualStudio7Generator.cxx | 12 +++++++----- Source/cmVisualStudio10TargetGenerator.cxx | 12 +++++++----- Tests/RunCMake/VS10Project/NoImpLib-check.cmake | 23 +++++++++++++++++++++++ Tests/RunCMake/VS10Project/NoImpLib.cmake | 3 +++ Tests/RunCMake/VS10Project/RunCMakeTest.cmake | 1 + 5 files changed, 41 insertions(+), 10 deletions(-) create mode 100644 Tests/RunCMake/VS10Project/NoImpLib-check.cmake create mode 100644 Tests/RunCMake/VS10Project/NoImpLib.cmake diff --git a/Source/cmLocalVisualStudio7Generator.cxx b/Source/cmLocalVisualStudio7Generator.cxx index 7795654..b54a83f 100644 --- a/Source/cmLocalVisualStudio7Generator.cxx +++ b/Source/cmLocalVisualStudio7Generator.cxx @@ -1081,11 +1081,13 @@ void cmLocalVisualStudio7Generator::OutputBuildTool( if (stackVal) { fout << "\t\t\t\tStackReserveSize=\"" << *stackVal << "\"\n"; } - temp = cmStrCat( - target->GetDirectory(configName, cmStateEnums::ImportLibraryArtifact), - '/', targetNames.ImportLibrary); - fout << "\t\t\t\tImportLibrary=\"" - << this->ConvertToXMLOutputPathSingle(temp) << "\""; + if (!targetNames.ImportLibrary.empty()) { + temp = cmStrCat(target->GetDirectory( + configName, cmStateEnums::ImportLibraryArtifact), + '/', targetNames.ImportLibrary); + fout << "\t\t\t\tImportLibrary=\"" + << this->ConvertToXMLOutputPathSingle(temp) << "\""; + } if (this->FortranProject) { fout << "\n\t\t\t\tLinkDLL=\"true\""; } diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx index a7b90b4..c025814 100644 --- a/Source/cmVisualStudio10TargetGenerator.cxx +++ b/Source/cmVisualStudio10TargetGenerator.cxx @@ -3791,12 +3791,14 @@ bool cmVisualStudio10TargetGenerator::ComputeLinkOptions( std::string pdb = cmStrCat(this->GeneratorTarget->GetPDBDirectory(config), '/', targetNames.PDB); - std::string imLib = - cmStrCat(this->GeneratorTarget->GetDirectory( - config, cmStateEnums::ImportLibraryArtifact), - '/', targetNames.ImportLibrary); + if (!targetNames.ImportLibrary.empty()) { + std::string imLib = + cmStrCat(this->GeneratorTarget->GetDirectory( + config, cmStateEnums::ImportLibraryArtifact), + '/', targetNames.ImportLibrary); - linkOptions.AddFlag("ImportLibrary", imLib); + linkOptions.AddFlag("ImportLibrary", imLib); + } linkOptions.AddFlag("ProgramDataBaseFile", pdb); // A Windows Runtime component uses internal .NET metadata, diff --git a/Tests/RunCMake/VS10Project/NoImpLib-check.cmake b/Tests/RunCMake/VS10Project/NoImpLib-check.cmake new file mode 100644 index 0000000..50722b2 --- /dev/null +++ b/Tests/RunCMake/VS10Project/NoImpLib-check.cmake @@ -0,0 +1,23 @@ +set(vcProjectFile "${RunCMake_TEST_BINARY_DIR}/foo.vcxproj") +if(NOT EXISTS "${vcProjectFile}") + set(RunCMake_TEST_FAILED "Project file ${vcProjectFile} does not exist.") + return() +endif() + +set(found_ImportLibrary 0) +set(found_TargetExt_dll 0) +file(STRINGS "${vcProjectFile}" lines) +foreach(line IN LISTS lines) + if(line MATCHES "") + set(found_ImportLibrary 1) + endif() + if(line MATCHES "