BUG: fix for bug 7222 manifest:no not working for makefiles

This commit is contained in:
Bill Hoffman 2008-06-20 16:25:02 -04:00
parent 85b8534aea
commit 08b95e9cd8
2 changed files with 33 additions and 10 deletions

View File

@ -3890,25 +3890,40 @@ int cmake::VisualStudioLink(std::vector<std::string>& 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<std::string>::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<std::string>& args,
@ -4113,6 +4128,7 @@ int cmake::VisualStudioLinkIncremental(std::vector<std::string>& args,
int cmake::VisualStudioLinkNonIncremental(std::vector<std::string>& args,
int type,
bool hasManifest,
bool verbose)
{
std::vector<cmStdString> linkCommand;
@ -4126,6 +4142,10 @@ int cmake::VisualStudioLinkNonIncremental(std::vector<std::string>& args,
{
return -1;
}
if(!hasManifest)
{
return 0;
}
std::vector<cmStdString> mtCommand;
mtCommand.push_back(cmSystemTools::FindProgram("mt.exe"));
mtCommand.push_back("/nologo");

View File

@ -416,6 +416,7 @@ protected:
bool verbose);
static int VisualStudioLinkNonIncremental(std::vector<std::string>& args,
int type,
bool hasManifest,
bool verbose);
static int ParseVisualStudioLinkCommand(std::vector<std::string>& args,
std::vector<cmStdString>& 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;