ENH: Support full-path libs w/out extension in VS IDE.
- This case worked accidentally in CMake 2.4, though not in Makefiles. - Some projects build only with the VS IDE on windows and have this mistake. - Support them when 2.4 compatibility is enabled by adding the extension.
This commit is contained in:
parent
dbb89f47aa
commit
ff63bb1b44
|
@ -1078,8 +1078,47 @@ void cmComputeLinkInformation::AddFullItem(std::string const& item)
|
|||
this->Items.push_back(Item(this->LibLinkFileFlag, false));
|
||||
}
|
||||
|
||||
// Full path libraries should have an extension. CMake 2.4 would
|
||||
// add the extension after splitting the file off of the directory.
|
||||
// Some existing projects depended on this to build correctly
|
||||
// because they left off the extension of an otherwise full-path
|
||||
// library. This worked with CMake 2.4 but only for VS IDE builds
|
||||
// because the file-level dependency added to the Makefile would not
|
||||
// be found. Nevertheless, some projects have this mistake but work
|
||||
// because they build only with the VS IDE. We need to support them
|
||||
// here by adding the missing extension.
|
||||
std::string final_item = item;
|
||||
if(strstr(this->GlobalGenerator->GetName(), "Visual Studio") &&
|
||||
this->Makefile->NeedBackwardsCompatibility(2,4) &&
|
||||
!cmSystemTools::ComparePath(
|
||||
cmSystemTools::GetFilenameLastExtension(item).c_str(),
|
||||
this->LibLinkSuffix.c_str()))
|
||||
{
|
||||
// Issue the warning at most once.
|
||||
std::string wid = "VSIDE-LINK-EXT-";
|
||||
wid += item;
|
||||
if(!this->Target->GetPropertyAsBool(wid.c_str()))
|
||||
{
|
||||
this->Target->SetProperty(wid.c_str(), "1");
|
||||
cmOStringStream w;
|
||||
w << "Target \"" << this->Target->GetName() << "\" links to "
|
||||
<< "full-path item\n"
|
||||
<< " " << item << "\n"
|
||||
<< "which does not have the proper link extension \""
|
||||
<< this->LibLinkSuffix << "\". "
|
||||
<< "CMake is adding the missing extension because compatibility "
|
||||
<< "with CMake 2.4 is currently enabled and this case worked "
|
||||
<< "accidentally in that version. "
|
||||
<< "The link extension should be added by the project developer.";
|
||||
this->Makefile->IssueMessage(cmake::AUTHOR_WARNING, w.str());
|
||||
}
|
||||
|
||||
// Add the missing extension.
|
||||
final_item += this->LibLinkSuffix;
|
||||
}
|
||||
|
||||
// Now add the full path to the library.
|
||||
this->Items.push_back(Item(item, true));
|
||||
this->Items.push_back(Item(final_item, true));
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
|
Loading…
Reference in New Issue