BUG: Need to match shared library names before static because some platforms have static name patterns that match their shared patterns but not vice versa. This is needed for implementing bug#1644 on cygwin.
This commit is contained in:
parent
e0a662a3dd
commit
bdf8e186e5
|
@ -1716,14 +1716,18 @@ void cmLocalGenerator
|
||||||
this->Makefile->GetDefinition("CMAKE_STATIC_LIBRARY_PREFIX"));
|
this->Makefile->GetDefinition("CMAKE_STATIC_LIBRARY_PREFIX"));
|
||||||
orderLibs.AddLinkPrefix(
|
orderLibs.AddLinkPrefix(
|
||||||
this->Makefile->GetDefinition("CMAKE_SHARED_LIBRARY_PREFIX"));
|
this->Makefile->GetDefinition("CMAKE_SHARED_LIBRARY_PREFIX"));
|
||||||
|
|
||||||
|
// Import library names should be matched and treated as shared
|
||||||
|
// libraries for the purposes of linking.
|
||||||
|
orderLibs.AddLinkExtension(
|
||||||
|
this->Makefile->GetDefinition("CMAKE_IMPORT_LIBRARY_SUFFIX"),
|
||||||
|
cmOrderLinkDirectories::LinkShared);
|
||||||
orderLibs.AddLinkExtension(
|
orderLibs.AddLinkExtension(
|
||||||
this->Makefile->GetDefinition("CMAKE_STATIC_LIBRARY_SUFFIX"),
|
this->Makefile->GetDefinition("CMAKE_STATIC_LIBRARY_SUFFIX"),
|
||||||
cmOrderLinkDirectories::LinkStatic);
|
cmOrderLinkDirectories::LinkStatic);
|
||||||
orderLibs.AddLinkExtension(
|
orderLibs.AddLinkExtension(
|
||||||
this->Makefile->GetDefinition("CMAKE_SHARED_LIBRARY_SUFFIX"),
|
this->Makefile->GetDefinition("CMAKE_SHARED_LIBRARY_SUFFIX"),
|
||||||
cmOrderLinkDirectories::LinkShared);
|
cmOrderLinkDirectories::LinkShared);
|
||||||
orderLibs.AddLinkExtension(
|
|
||||||
this->Makefile->GetDefinition("CMAKE_IMPORT_LIBRARY_SUFFIX"));
|
|
||||||
orderLibs.AddLinkExtension(
|
orderLibs.AddLinkExtension(
|
||||||
this->Makefile->GetDefinition("CMAKE_LINK_LIBRARY_SUFFIX"));
|
this->Makefile->GetDefinition("CMAKE_LINK_LIBRARY_SUFFIX"));
|
||||||
if(const char* linkSuffixes =
|
if(const char* linkSuffixes =
|
||||||
|
|
|
@ -267,19 +267,17 @@ void cmOrderLinkDirectories::PrepareLinkTargets()
|
||||||
for(std::vector<cmStdString>::iterator i = originalLinkItems.begin();
|
for(std::vector<cmStdString>::iterator i = originalLinkItems.begin();
|
||||||
i != originalLinkItems.end(); ++i)
|
i != originalLinkItems.end(); ++i)
|
||||||
{
|
{
|
||||||
// separate the library name from libfoo.a or foo.a
|
// Parse out the prefix, base, and suffix components of the
|
||||||
if(this->ExtractStaticLibraryName.find(*i))
|
// library name. If the name matches that of a shared or static
|
||||||
{
|
// library then set the link type accordingly.
|
||||||
#ifdef CM_ORDER_LINK_DIRECTORIES_DEBUG
|
//
|
||||||
fprintf(stderr, "static regex matched [%s] [%s] [%s]\n",
|
// Search for shared library names first because some platforms
|
||||||
this->ExtractStaticLibraryName.match(1).c_str(),
|
// have shared libraries with names that match the static library
|
||||||
this->ExtractStaticLibraryName.match(2).c_str(),
|
// pattern. For example cygwin and msys use the convention
|
||||||
this->ExtractStaticLibraryName.match(3).c_str());
|
// libfoo.dll.a for import libraries and libfoo.a for static
|
||||||
#endif
|
// libraries. On AIX a library with the name libfoo.a can be
|
||||||
this->SetCurrentLinkType(LinkStatic);
|
// shared!
|
||||||
this->LinkItems.push_back(this->ExtractStaticLibraryName.match(2));
|
if(this->ExtractSharedLibraryName.find(*i))
|
||||||
}
|
|
||||||
else if(this->ExtractSharedLibraryName.find(*i))
|
|
||||||
{
|
{
|
||||||
#ifdef CM_ORDER_LINK_DIRECTORIES_DEBUG
|
#ifdef CM_ORDER_LINK_DIRECTORIES_DEBUG
|
||||||
fprintf(stderr, "shared regex matched [%s] [%s] [%s]\n",
|
fprintf(stderr, "shared regex matched [%s] [%s] [%s]\n",
|
||||||
|
@ -290,6 +288,17 @@ void cmOrderLinkDirectories::PrepareLinkTargets()
|
||||||
this->SetCurrentLinkType(LinkShared);
|
this->SetCurrentLinkType(LinkShared);
|
||||||
this->LinkItems.push_back(this->ExtractSharedLibraryName.match(2));
|
this->LinkItems.push_back(this->ExtractSharedLibraryName.match(2));
|
||||||
}
|
}
|
||||||
|
else if(this->ExtractStaticLibraryName.find(*i))
|
||||||
|
{
|
||||||
|
#ifdef CM_ORDER_LINK_DIRECTORIES_DEBUG
|
||||||
|
fprintf(stderr, "static regex matched [%s] [%s] [%s]\n",
|
||||||
|
this->ExtractStaticLibraryName.match(1).c_str(),
|
||||||
|
this->ExtractStaticLibraryName.match(2).c_str(),
|
||||||
|
this->ExtractStaticLibraryName.match(3).c_str());
|
||||||
|
#endif
|
||||||
|
this->SetCurrentLinkType(LinkStatic);
|
||||||
|
this->LinkItems.push_back(this->ExtractStaticLibraryName.match(2));
|
||||||
|
}
|
||||||
else if(this->ExtractAnyLibraryName.find(*i))
|
else if(this->ExtractAnyLibraryName.find(*i))
|
||||||
{
|
{
|
||||||
#ifdef CM_ORDER_LINK_DIRECTORIES_DEBUG
|
#ifdef CM_ORDER_LINK_DIRECTORIES_DEBUG
|
||||||
|
|
Loading…
Reference in New Issue