diff options
author | Stephen Kelly <steveire@gmail.com> | 2015-05-14 17:08:27 (GMT) |
---|---|---|
committer | Stephen Kelly <steveire@gmail.com> | 2015-05-14 19:38:29 (GMT) |
commit | b85d3b66c63afa1ce7f30439deee524241b1efdc (patch) | |
tree | 3fc468657faa5c66183b70ba54f4962dcba6a19e /Source | |
parent | 501c237a83001a8783b2249bd5f5066c3472a2aa (diff) | |
download | CMake-b85d3b66c63afa1ce7f30439deee524241b1efdc.zip CMake-b85d3b66c63afa1ce7f30439deee524241b1efdc.tar.gz CMake-b85d3b66c63afa1ce7f30439deee524241b1efdc.tar.bz2 |
install: Disallow installing export() result.
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmInstallCommand.cxx | 41 | ||||
-rw-r--r-- | Source/cmPolicies.h | 3 |
2 files changed, 44 insertions, 0 deletions
diff --git a/Source/cmInstallCommand.cxx b/Source/cmInstallCommand.cxx index 24de1b5..899b088 100644 --- a/Source/cmInstallCommand.cxx +++ b/Source/cmInstallCommand.cxx @@ -871,6 +871,47 @@ bool cmInstallCommand::HandleFilesMode(std::vector<std::string> const& args) return false; } + cmPolicies::PolicyStatus status = + this->Makefile->GetPolicyStatus(cmPolicies::CMP0062); + + cmGlobalGenerator *gg = this->Makefile->GetGlobalGenerator(); + for(std::vector<std::string>::const_iterator fileIt = filesVector.begin(); + fileIt != filesVector.end(); ++fileIt) + { + if (gg->IsExportedTargetsFile(*fileIt)) + { + const char *modal = 0; + std::ostringstream e; + cmake::MessageType messageType = cmake::AUTHOR_WARNING; + + switch(status) + { + case cmPolicies::WARN: + e << cmPolicies::GetPolicyWarning(cmPolicies::CMP0062) << "\n"; + modal = "should"; + case cmPolicies::OLD: + break; + case cmPolicies::REQUIRED_IF_USED: + case cmPolicies::REQUIRED_ALWAYS: + case cmPolicies::NEW: + modal = "may"; + messageType = cmake::FATAL_ERROR; + } + if (modal) + { + e << "The file\n " << *fileIt << "\nwas generated by the export() " + "command. It " << modal << " not be installed with the " + "install() command. Use the install(EXPORT) mechanism " + "instead. See the cmake-packages(7) manual for more.\n"; + this->Makefile->IssueMessage(messageType, e.str()); + if (messageType == cmake::FATAL_ERROR) + { + return false; + } + } + } + } + if (!ica.Finalize()) { return false; diff --git a/Source/cmPolicies.h b/Source/cmPolicies.h index 536dcdc..eb56494 100644 --- a/Source/cmPolicies.h +++ b/Source/cmPolicies.h @@ -211,6 +211,9 @@ class cmPolicy; 3, 3, 0, cmPolicies::WARN) \ SELECT(POLICY, CMP0061, \ "CTest does not by default tell make to ignore errors (-i).", \ + 3, 3, 0, cmPolicies::WARN) \ + SELECT(POLICY, CMP0062, \ + "Disallow install() of export() result.", \ 3, 3, 0, cmPolicies::WARN) #define CM_SELECT_ID(F, A1, A2, A3, A4, A5, A6) F(A1) |