diff options
author | Clinton Stimpson <clinton@elemtech.com> | 2017-02-09 15:12:10 (GMT) |
---|---|---|
committer | Clinton Stimpson <clinton@elemtech.com> | 2017-02-14 21:28:07 (GMT) |
commit | 1ba91291e3237e5535a46c6ff1bce6a33d298a76 (patch) | |
tree | db163ae2e44d0e9f8ab6cb6238bd8128b677eaea /Source | |
parent | f7b9bf41c5386dfc38b7a722f75b0e23a02d542b (diff) | |
download | CMake-1ba91291e3237e5535a46c6ff1bce6a33d298a76.zip CMake-1ba91291e3237e5535a46c6ff1bce6a33d298a76.tar.gz CMake-1ba91291e3237e5535a46c6ff1bce6a33d298a76.tar.bz2 |
Add policy CMP0068 separate install_name and RPATH settings on macOS
BUILD_WITH_INSTALL_RPATH, SKIP_BUILD_RPATH, CMAKE_SKIP_RPATH and
CMAKE_SKIP_INSTALL_RPATH no longer any effect on the install name
of a target on macOS.
Fixes: #16589
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmGeneratorTarget.cxx | 21 | ||||
-rw-r--r-- | Source/cmGlobalGenerator.cxx | 25 | ||||
-rw-r--r-- | Source/cmGlobalGenerator.h | 3 | ||||
-rw-r--r-- | Source/cmPolicies.h | 8 |
4 files changed, 55 insertions, 2 deletions
diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx index d32bcd8..8512b99 100644 --- a/Source/cmGeneratorTarget.cxx +++ b/Source/cmGeneratorTarget.cxx @@ -1402,14 +1402,30 @@ bool cmGeneratorTarget::MacOSXUseInstallNameDir() const return cmSystemTools::IsOn(build_with_install_name); } + cmPolicies::PolicyStatus cmp0068 = this->GetPolicyStatusCMP0068(); + if (cmp0068 == cmPolicies::NEW) { + return false; + } + bool use_install_name = this->GetPropertyAsBool("BUILD_WITH_INSTALL_RPATH"); + if (use_install_name && cmp0068 == cmPolicies::WARN) { + this->LocalGenerator->GetGlobalGenerator()->AddCMP0068WarnTarget( + this->GetName()); + } + return use_install_name; } bool cmGeneratorTarget::CanGenerateInstallNameDir( InstallNameType name_type) const { + cmPolicies::PolicyStatus cmp0068 = this->GetPolicyStatusCMP0068(); + + if (cmp0068 == cmPolicies::NEW) { + return true; + } + bool skip = this->Makefile->IsOn("CMAKE_SKIP_RPATH"); if (name_type == INSTALL_NAME_FOR_INSTALL) { skip |= this->Makefile->IsOn("CMAKE_SKIP_INSTALL_RPATH"); @@ -1417,6 +1433,11 @@ bool cmGeneratorTarget::CanGenerateInstallNameDir( skip |= this->GetPropertyAsBool("SKIP_BUILD_RPATH"); } + if (skip && cmp0068 == cmPolicies::WARN) { + this->LocalGenerator->GetGlobalGenerator()->AddCMP0068WarnTarget( + this->GetName()); + } + return !skip; } diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx index f118250..b6b7d9e 100644 --- a/Source/cmGlobalGenerator.cxx +++ b/Source/cmGlobalGenerator.cxx @@ -1194,6 +1194,11 @@ void cmGlobalGenerator::AddCMP0042WarnTarget(const std::string& target) this->CMP0042WarnTargets.insert(target); } +void cmGlobalGenerator::AddCMP0068WarnTarget(const std::string& target) +{ + this->CMP0068WarnTargets.insert(target); +} + bool cmGlobalGenerator::CheckALLOW_DUPLICATE_CUSTOM_TARGETS() const { // If the property is not enabled then okay. @@ -1235,6 +1240,8 @@ bool cmGlobalGenerator::Compute() // clear targets to issue warning CMP0042 for this->CMP0042WarnTargets.clear(); + // clear targets to issue warning CMP0068 for + this->CMP0068WarnTargets.clear(); // Check whether this generator is allowed to run. if (!this->CheckALLOW_DUPLICATE_CUSTOM_TARGETS()) { @@ -1366,6 +1373,24 @@ void cmGlobalGenerator::Generate() this->GetCMakeInstance()->IssueMessage(cmake::AUTHOR_WARNING, w.str()); } + if (!this->CMP0068WarnTargets.empty()) { + std::ostringstream w; + /* clang-format off */ + w << + cmPolicies::GetPolicyWarning(cmPolicies::CMP0068) << "\n" + "For compatibility with older versions of CMake, the install_name " + "fields for the following targets are still affected by RPATH " + "settings:\n" + ; + /* clang-format on */ + for (std::set<std::string>::iterator iter = + this->CMP0068WarnTargets.begin(); + iter != this->CMP0068WarnTargets.end(); ++iter) { + w << " " << *iter << "\n"; + } + this->GetCMakeInstance()->IssueMessage(cmake::AUTHOR_WARNING, w.str()); + } + this->CMakeInstance->UpdateProgress("Generating done", -1); } diff --git a/Source/cmGlobalGenerator.h b/Source/cmGlobalGenerator.h index 18e3730..b3cb41f 100644 --- a/Source/cmGlobalGenerator.h +++ b/Source/cmGlobalGenerator.h @@ -357,6 +357,7 @@ public: cmExportBuildFileGenerator* GetExportedTargetsFile( const std::string& filename) const; void AddCMP0042WarnTarget(const std::string& target); + void AddCMP0068WarnTarget(const std::string& target); virtual void ComputeTargetObjectDirectory(cmGeneratorTarget* gt) const; @@ -562,6 +563,8 @@ private: // track targets to issue CMP0042 warning for. std::set<std::string> CMP0042WarnTargets; + // track targets to issue CMP0068 warning for. + std::set<std::string> CMP0068WarnTargets; mutable std::map<cmSourceFile*, std::set<cmGeneratorTarget const*> > FilenameTargetDepends; diff --git a/Source/cmPolicies.h b/Source/cmPolicies.h index 62e67c7..ecf06b3 100644 --- a/Source/cmPolicies.h +++ b/Source/cmPolicies.h @@ -200,7 +200,10 @@ class cmMakefile; 7, 0, cmPolicies::WARN) \ SELECT(POLICY, CMP0067, \ "Honor language standard in try_compile() source-file signature.", \ - 3, 8, 0, cmPolicies::WARN) + 3, 8, 0, cmPolicies::WARN) \ + SELECT(POLICY, CMP0068, \ + "RPATH settings on macOS do not affect install_name.", 3, 9, 0, \ + cmPolicies::WARN) #define CM_SELECT_ID(F, A1, A2, A3, A4, A5, A6) F(A1) #define CM_FOR_EACH_POLICY_ID(POLICY) \ @@ -221,7 +224,8 @@ class cmMakefile; F(CMP0052) \ F(CMP0060) \ F(CMP0063) \ - F(CMP0065) + F(CMP0065) \ + F(CMP0068) /** \class cmPolicies * \brief Handles changes in CMake behavior and policies |