BUG: Fix compatibility with CMake 2.4 for installation of MACOSX_BUNDLE targets
- Add policy CMP0006 to decide whether to use compatibility - OLD behavior is to fall back to RUNTIME rules - NEW behavior is to produce an error
This commit is contained in:
parent
3052d2c854
commit
067717a56a
|
@ -536,7 +536,22 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
|
||||||
bundleGenerator = CreateInstallTargetGenerator(target, bundleArgs,
|
bundleGenerator = CreateInstallTargetGenerator(target, bundleArgs,
|
||||||
false);
|
false);
|
||||||
}
|
}
|
||||||
else
|
if(!runtimeArgs.GetDestination().empty())
|
||||||
|
{
|
||||||
|
bool failure = false;
|
||||||
|
if(this->CheckCMP0006(failure))
|
||||||
|
{
|
||||||
|
// For CMake 2.4 compatibility fallback to the RUNTIME
|
||||||
|
// properties.
|
||||||
|
bundleGenerator =
|
||||||
|
CreateInstallTargetGenerator(target, runtimeArgs, false);
|
||||||
|
}
|
||||||
|
else if(failure)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!bundleGenerator)
|
||||||
{
|
{
|
||||||
cmOStringStream e;
|
cmOStringStream e;
|
||||||
e << "TARGETS given no BUNDLE DESTINATION for MACOSX_BUNDLE "
|
e << "TARGETS given no BUNDLE DESTINATION for MACOSX_BUNDLE "
|
||||||
|
@ -1284,3 +1299,34 @@ bool cmInstallCommand::MakeFilesFullPath(const char* modeName,
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
bool cmInstallCommand::CheckCMP0006(bool& failure)
|
||||||
|
{
|
||||||
|
switch(this->Makefile->GetPolicyStatus(cmPolicies::CMP0006))
|
||||||
|
{
|
||||||
|
case cmPolicies::WARN:
|
||||||
|
{
|
||||||
|
this->Makefile->IssueMessage(
|
||||||
|
cmake::AUTHOR_WARNING,
|
||||||
|
this->Makefile->GetPolicies()->GetPolicyWarning(cmPolicies::CMP0006)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
case cmPolicies::OLD:
|
||||||
|
// OLD behavior is to allow compatibility
|
||||||
|
return true;
|
||||||
|
case cmPolicies::NEW:
|
||||||
|
// NEW behavior is to disallow compatibility
|
||||||
|
break;
|
||||||
|
case cmPolicies::REQUIRED_IF_USED:
|
||||||
|
case cmPolicies::REQUIRED_ALWAYS:
|
||||||
|
failure = true;
|
||||||
|
this->Makefile->IssueMessage(
|
||||||
|
cmake::FATAL_ERROR,
|
||||||
|
this->Makefile->GetPolicies()
|
||||||
|
->GetRequiredPolicyError(cmPolicies::CMP0006)
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
|
@ -346,6 +346,7 @@ private:
|
||||||
bool MakeFilesFullPath(const char* modeName,
|
bool MakeFilesFullPath(const char* modeName,
|
||||||
const std::vector<std::string>& relFiles,
|
const std::vector<std::string>& relFiles,
|
||||||
std::vector<std::string>& absFiles);
|
std::vector<std::string>& absFiles);
|
||||||
|
bool CheckCMP0006(bool& failure);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -251,6 +251,24 @@ cmPolicies::cmPolicies()
|
||||||
"See documentation of the COMPILE_DEFINITIONS target property for "
|
"See documentation of the COMPILE_DEFINITIONS target property for "
|
||||||
"limitations of the escaping implementation.",
|
"limitations of the escaping implementation.",
|
||||||
2,6,0, cmPolicies::WARN);
|
2,6,0, cmPolicies::WARN);
|
||||||
|
|
||||||
|
this->DefinePolicy(
|
||||||
|
CMP0006, "CMP0006",
|
||||||
|
"Installing MACOSX_BUNDLE targets requires a BUNDLE DESTINATION.",
|
||||||
|
"This policy determines whether the install(TARGETS) command must be "
|
||||||
|
"given a BUNDLE DESTINATION when asked to install a target with the "
|
||||||
|
"MACOSX_BUNDLE property set. "
|
||||||
|
"CMake 2.4 and below did not distinguish application bundles from "
|
||||||
|
"normal executables when installing targets. "
|
||||||
|
"CMake 2.6 provides a BUNDLE option to the install(TARGETS) command "
|
||||||
|
"that specifies rules specific to application bundles on the Mac. "
|
||||||
|
"Projects should use this option when installing a target with the "
|
||||||
|
"MACOSX_BUNDLE property set.\n"
|
||||||
|
"The OLD behavior for this policy is to fall back to the RUNTIME "
|
||||||
|
"DESTINATION if a BUNDLE DESTINATION is not given. "
|
||||||
|
"The NEW behavior for this policy is to produce an error if a bundle "
|
||||||
|
"target is installed without a BUNDLE DESTINATION.",
|
||||||
|
2,6,0, cmPolicies::WARN);
|
||||||
}
|
}
|
||||||
|
|
||||||
cmPolicies::~cmPolicies()
|
cmPolicies::~cmPolicies()
|
||||||
|
|
|
@ -46,6 +46,7 @@ public:
|
||||||
CMP0003, // Linking does not include extra -L paths
|
CMP0003, // Linking does not include extra -L paths
|
||||||
CMP0004, // Libraries linked may not have leading or trailing whitespace
|
CMP0004, // Libraries linked may not have leading or trailing whitespace
|
||||||
CMP0005, // Definition value escaping
|
CMP0005, // Definition value escaping
|
||||||
|
CMP0006, // BUNDLE install rules needed for MACOSX_BUNDLE targets
|
||||||
|
|
||||||
// Always the last entry. Useful mostly to avoid adding a comma
|
// Always the last entry. Useful mostly to avoid adding a comma
|
||||||
// the last policy when adding a new one.
|
// the last policy when adding a new one.
|
||||||
|
|
Loading…
Reference in New Issue