[Cmake-commits] [cmake-commits] king committed cmComputeLinkInformation.cxx 1.35 1.36
cmake-commits at cmake.org
cmake-commits at cmake.org
Mon Jul 21 10:07:58 EDT 2008
Update of /cvsroot/CMake/CMake/Source
In directory public:/mounts/ram/cvs-serv29743/Source
Modified Files:
cmComputeLinkInformation.cxx
Log Message:
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.
Index: cmComputeLinkInformation.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmComputeLinkInformation.cxx,v
retrieving revision 1.35
retrieving revision 1.36
diff -C 2 -d -r1.35 -r1.36
*** cmComputeLinkInformation.cxx 30 Apr 2008 22:04:48 -0000 1.35
--- cmComputeLinkInformation.cxx 21 Jul 2008 14:07:56 -0000 1.36
***************
*** 1079,1084 ****
}
// Now add the full path to the library.
! this->Items.push_back(Item(item, true));
}
--- 1079,1123 ----
}
+ // 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(final_item, true));
}
More information about the Cmake-commits
mailing list