summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorClinton Stimpson <clinton@elemtech.com>2013-07-16 04:23:12 (GMT)
committerClinton Stimpson <clinton@elemtech.com>2013-07-16 04:39:08 (GMT)
commite645ff0b10567e400c722dfc28c58dc4fd8d181b (patch)
treea2ba239079f137345d940c527057d4e94d1ed463 /Source
parentb94e726a83b92f5b7376b97aa448107884a76685 (diff)
downloadCMake-e645ff0b10567e400c722dfc28c58dc4fd8d181b.zip
CMake-e645ff0b10567e400c722dfc28c58dc4fd8d181b.tar.gz
CMake-e645ff0b10567e400c722dfc28c58dc4fd8d181b.tar.bz2
OS X: Enable rpath support on Mac OS X when find_library() is used.
Diffstat (limited to 'Source')
-rw-r--r--Source/cmComputeLinkInformation.cxx20
-rw-r--r--Source/cmOrderDirectories.cxx22
2 files changed, 24 insertions, 18 deletions
diff --git a/Source/cmComputeLinkInformation.cxx b/Source/cmComputeLinkInformation.cxx
index ab9eb14..fb7b5b6 100644
--- a/Source/cmComputeLinkInformation.cxx
+++ b/Source/cmComputeLinkInformation.cxx
@@ -1345,12 +1345,23 @@ void cmComputeLinkInformation::AddFrameworkItem(std::string const& item)
return;
}
+ std::string fw_path = this->SplitFramework.match(1);
+ std::string fw = this->SplitFramework.match(2);
+ std::string full_fw = fw_path;
+ full_fw += "/";
+ full_fw += fw;
+ full_fw += ".framework";
+ full_fw += "/";
+ full_fw += fw;
+
// Add the directory portion to the framework search path.
- this->AddFrameworkPath(this->SplitFramework.match(1));
+ this->AddFrameworkPath(fw_path);
+
+ // add runtime information
+ this->AddLibraryRuntimeInfo(full_fw);
// Add the item using the -framework option.
this->Items.push_back(Item("-framework", false));
- std::string fw = this->SplitFramework.match(2);
fw = this->LocalGenerator->EscapeForShell(fw.c_str());
this->Items.push_back(Item(fw, false));
}
@@ -1813,9 +1824,10 @@ cmComputeLinkInformation::AddLibraryRuntimeInfo(std::string const& fullPath)
if(fullPath.find(".framework") != std::string::npos)
{
cmsys::RegularExpression splitFramework;
- splitFramework.compile("^(.*)/(.*).framework/.*/(.*)$");
+ splitFramework.compile("^(.*)/(.*).framework/(.*)$");
if(splitFramework.find(fullPath) &&
- (splitFramework.match(2) == splitFramework.match(3)))
+ (std::string::npos !=
+ splitFramework.match(3).find(splitFramework.match(2))))
{
is_shared_library = true;
}
diff --git a/Source/cmOrderDirectories.cxx b/Source/cmOrderDirectories.cxx
index 93885b2..0220825 100644
--- a/Source/cmOrderDirectories.cxx
+++ b/Source/cmOrderDirectories.cxx
@@ -40,9 +40,10 @@ public:
if(file.rfind(".framework") != std::string::npos)
{
cmsys::RegularExpression splitFramework;
- splitFramework.compile("^(.*)/(.*).framework/.*/(.*)$");
+ splitFramework.compile("^(.*)/(.*).framework/(.*)$");
if(splitFramework.find(file) &&
- (splitFramework.match(2) == splitFramework.match(3)))
+ (std::string::npos !=
+ splitFramework.match(3).find(splitFramework.match(2))))
{
this->Directory = splitFramework.match(1);
this->FileName =
@@ -318,7 +319,6 @@ void cmOrderDirectories::AddRuntimeLibrary(std::string const& fullPath,
// Add the runtime library at most once.
if(this->EmmittedConstraintSOName.insert(fullPath).second)
{
- std::string soname2 = soname ? soname : "";
// Implicit link directories need special handling.
if(!this->ImplicitDirectories.empty())
{
@@ -327,16 +327,12 @@ void cmOrderDirectories::AddRuntimeLibrary(std::string const& fullPath,
if(fullPath.rfind(".framework") != std::string::npos)
{
cmsys::RegularExpression splitFramework;
- splitFramework.compile("^(.*)/(.*).framework/(.*)/(.*)$");
+ splitFramework.compile("^(.*)/(.*).framework/(.*)$");
if(splitFramework.find(fullPath) &&
- (splitFramework.match(2) == splitFramework.match(4)))
+ (std::string::npos !=
+ splitFramework.match(3).find(splitFramework.match(2))))
{
dir = splitFramework.match(1);
- soname2 = splitFramework.match(2);
- soname2 += ".framework/";
- soname2 += splitFramework.match(3);
- soname2 += "/";
- soname2 += splitFramework.match(4);
}
}
@@ -344,16 +340,14 @@ void cmOrderDirectories::AddRuntimeLibrary(std::string const& fullPath,
this->ImplicitDirectories.end())
{
this->ImplicitDirEntries.push_back(
- new cmOrderDirectoriesConstraintSOName(this, fullPath,
- soname2.c_str()));
+ new cmOrderDirectoriesConstraintSOName(this, fullPath, soname));
return;
}
}
// Construct the runtime information entry for this library.
this->ConstraintEntries.push_back(
- new cmOrderDirectoriesConstraintSOName(this, fullPath,
- soname2.c_str()));
+ new cmOrderDirectoriesConstraintSOName(this, fullPath, soname));
}
else
{