summaryrefslogtreecommitdiffstats
path: root/Source/cmTarget.cxx
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2014-01-02 19:23:09 (GMT)
committerCMake Topic Stage <kwrobot@kitware.com>2014-01-02 19:23:09 (GMT)
commit0d63bdd2d9690cfdb43671af7465704675a68733 (patch)
tree17370b9ce679a48de0ed5f3baf7cddd27ed08e01 /Source/cmTarget.cxx
parentc0ea0604a0dcd1d580e9b6a976aae0069cab2986 (diff)
parentd25ad482e978cbf5e4fcfa8b1dcc342ba93dcda0 (diff)
downloadCMake-0d63bdd2d9690cfdb43671af7465704675a68733.zip
CMake-0d63bdd2d9690cfdb43671af7465704675a68733.tar.gz
CMake-0d63bdd2d9690cfdb43671af7465704675a68733.tar.bz2
Merge topic 'rpath-default'
d25ad48 OS X: Add CMP0042 to enable MACOSX_RPATH by default
Diffstat (limited to 'Source/cmTarget.cxx')
-rw-r--r--Source/cmTarget.cxx53
1 files changed, 48 insertions, 5 deletions
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index a0177fb..9faf0d9 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -3186,13 +3186,17 @@ std::string cmTarget::GetSOName(const char* config) const
}
//----------------------------------------------------------------------------
-bool cmTarget::HasMacOSXRpath(const char* config) const
+bool cmTarget::HasMacOSXRpathInstallNameDir(const char* config) const
{
bool install_name_is_rpath = false;
- bool macosx_rpath = this->GetPropertyAsBool("MACOSX_RPATH");
+ bool macosx_rpath = false;
if(!this->IsImportedTarget)
{
+ if(this->GetType() != cmTarget::SHARED_LIBRARY)
+ {
+ return false;
+ }
const char* install_name = this->GetProperty("INSTALL_NAME_DIR");
bool use_install_name =
this->GetPropertyAsBool("BUILD_WITH_INSTALL_RPATH");
@@ -3205,6 +3209,10 @@ bool cmTarget::HasMacOSXRpath(const char* config) const
{
return false;
}
+ if(!install_name_is_rpath)
+ {
+ macosx_rpath = this->MacOSXRpathInstallNameDirDefault();
+ }
}
else
{
@@ -3259,6 +3267,37 @@ bool cmTarget::HasMacOSXRpath(const char* config) const
}
//----------------------------------------------------------------------------
+bool cmTarget::MacOSXRpathInstallNameDirDefault() const
+{
+ // we can't do rpaths when unsupported
+ if(!this->Makefile->IsSet("CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG"))
+ {
+ return false;
+ }
+
+ const char* macosx_rpath_str = this->GetProperty("MACOSX_RPATH");
+ if(macosx_rpath_str)
+ {
+ return this->GetPropertyAsBool("MACOSX_RPATH");
+ }
+
+ cmPolicies::PolicyStatus cmp0042 = this->GetPolicyStatusCMP0042();
+
+ if(cmp0042 == cmPolicies::WARN)
+ {
+ this->Makefile->GetLocalGenerator()->GetGlobalGenerator()->
+ AddCMP0042WarnTarget(this->GetName());
+ }
+
+ if(cmp0042 == cmPolicies::NEW)
+ {
+ return true;
+ }
+
+ return false;
+}
+
+//----------------------------------------------------------------------------
bool cmTarget::IsImportedSharedLibWithoutSOName(const char* config) const
{
if(this->IsImported() && this->GetType() == cmTarget::SHARED_LIBRARY)
@@ -3847,7 +3886,8 @@ std::string cmTarget::GetInstallNameDirForBuildTree(const char* config) const
!this->GetPropertyAsBool("SKIP_BUILD_RPATH"))
{
std::string dir;
- if(this->GetPropertyAsBool("MACOSX_RPATH"))
+ bool macosx_rpath = this->MacOSXRpathInstallNameDirDefault();
+ if(macosx_rpath)
{
dir = "@rpath";
}
@@ -3881,9 +3921,12 @@ std::string cmTarget::GetInstallNameDirForInstallTree() const
dir += "/";
}
}
- if(!install_name_dir && this->GetPropertyAsBool("MACOSX_RPATH"))
+ if(!install_name_dir)
{
- dir = "@rpath/";
+ if(this->MacOSXRpathInstallNameDirDefault())
+ {
+ dir = "@rpath/";
+ }
}
return dir;
}