diff --git a/Source/cmake.cxx b/Source/cmake.cxx index 0a5890449..5f933a131 100644 --- a/Source/cmake.cxx +++ b/Source/cmake.cxx @@ -3890,25 +3890,40 @@ int cmake::VisualStudioLink(std::vector& args, int type) expandedArgs.push_back(*i); } } - // figure out if this is an incremental link or not and run the correct - // link function. + bool hasIncremental = false; + bool hasManifest = true; for(std::vector::iterator i = expandedArgs.begin(); i != expandedArgs.end(); ++i) { if(cmSystemTools::Strucmp(i->c_str(), "/INCREMENTAL:YES") == 0) { - if(verbose) - { - std::cout << "Visual Studio Incremental Link\n"; - } - return cmake::VisualStudioLinkIncremental(expandedArgs, type, verbose); + hasIncremental = true; } + if(cmSystemTools::Strucmp(i->c_str(), "/MANIFEST:NO") == 0) + { + hasManifest = false; + } + } + if(hasIncremental && hasManifest) + { + if(verbose) + { + std::cout << "Visual Studio Incremental Link with embeded manifests\n"; + } + return cmake::VisualStudioLinkIncremental(expandedArgs, type, verbose); } if(verbose) { - std::cout << "Visual Studio Non-Incremental Link\n"; + if(!hasIncremental) + { + std::cout << "Visual Studio Non-Incremental Link\n"; + } + else + { + std::cout << "Visual Studio Incremental Link without manifests\n"; + } } - return cmake::VisualStudioLinkNonIncremental(expandedArgs, type, verbose); + return cmake::VisualStudioLinkNonIncremental(expandedArgs, type, hasManifest, verbose); } int cmake::ParseVisualStudioLinkCommand(std::vector& args, @@ -4113,6 +4128,7 @@ int cmake::VisualStudioLinkIncremental(std::vector& args, int cmake::VisualStudioLinkNonIncremental(std::vector& args, int type, + bool hasManifest, bool verbose) { std::vector linkCommand; @@ -4126,6 +4142,10 @@ int cmake::VisualStudioLinkNonIncremental(std::vector& args, { return -1; } + if(!hasManifest) + { + return 0; + } std::vector mtCommand; mtCommand.push_back(cmSystemTools::FindProgram("mt.exe")); mtCommand.push_back("/nologo"); diff --git a/Source/cmake.h b/Source/cmake.h index 8dd5ad12b..1c4351a97 100644 --- a/Source/cmake.h +++ b/Source/cmake.h @@ -416,6 +416,7 @@ protected: bool verbose); static int VisualStudioLinkNonIncremental(std::vector& args, int type, + bool hasManifest, bool verbose); static int ParseVisualStudioLinkCommand(std::vector& args, std::vector& command, @@ -428,7 +429,9 @@ protected: ///! Find the full path to one of the cmake programs like ctest, cpack, etc. std::string FindCMakeProgram(const char* name) const; -private: +private: + cmake(const cmake&); // Not implemented. + void operator=(const cmake&); // Not implemented. ProgressCallbackType ProgressCallback; void* ProgressCallbackClientData; bool Verbose;