summaryrefslogtreecommitdiffstats
path: root/Source/cmGeneratorTarget.cxx
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2017-03-31 14:39:59 (GMT)
committerKitware Robot <kwrobot@kitware.com>2017-03-31 14:40:02 (GMT)
commitc791fb12544926bc5870a61735dc2ec62940a6f6 (patch)
treef4cfb4a96b5a855e259240511530425b38ff01fb /Source/cmGeneratorTarget.cxx
parent4a553ecb8e52dfd3ca605cd94ef8033e5febe937 (diff)
parentd1dac1acc502af2f2b766cc9b262a4f1294be39b (diff)
downloadCMake-c791fb12544926bc5870a61735dc2ec62940a6f6.zip
CMake-c791fb12544926bc5870a61735dc2ec62940a6f6.tar.gz
CMake-c791fb12544926bc5870a61735dc2ec62940a6f6.tar.bz2
Merge topic '16733-bundle-genex'
d1dac1ac Xcode: Execute RunCMake.Framework also for Xcode generator d02709d7 Genex: Add `TARGET_BUNDLE_[CONTENT_]_DIR` generator expressions 013ffe76 cmGeneratorTarget: Call GetFrameworkDirectory in GetFullNameInternal 32e9d0ca cmGeneratorTarget: Use enum to describe bundle directory query level Acked-by: Kitware Robot <kwrobot@kitware.com> Reviewed-by: Craig Scott <craig.scott@crascit.com> Merge-request: !635
Diffstat (limited to 'Source/cmGeneratorTarget.cxx')
-rw-r--r--Source/cmGeneratorTarget.cxx64
1 files changed, 35 insertions, 29 deletions
diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx
index 73d2009..88f3978 100644
--- a/Source/cmGeneratorTarget.cxx
+++ b/Source/cmGeneratorTarget.cxx
@@ -914,7 +914,7 @@ const char* cmGeneratorTarget::GetLocationForBuild() const
}
if (this->IsAppBundleOnApple()) {
- std::string macdir = this->BuildMacContentDirectory("", "", false);
+ std::string macdir = this->BuildBundleDirectory("", "", FullLevel);
if (!macdir.empty()) {
location += "/";
location += macdir;
@@ -1544,8 +1544,19 @@ std::string cmGeneratorTarget::GetSOName(const std::string& config) const
return soName;
}
-std::string cmGeneratorTarget::GetAppBundleDirectory(const std::string& config,
- bool contentOnly) const
+static bool shouldAddFullLevel(cmGeneratorTarget::BundleDirectoryLevel level)
+{
+ return level == cmGeneratorTarget::FullLevel;
+}
+
+static bool shouldAddContentLevel(
+ cmGeneratorTarget::BundleDirectoryLevel level)
+{
+ return level == cmGeneratorTarget::ContentLevel || shouldAddFullLevel(level);
+}
+
+std::string cmGeneratorTarget::GetAppBundleDirectory(
+ const std::string& config, BundleDirectoryLevel level) const
{
std::string fpath = this->GetFullName(config, false);
fpath += ".";
@@ -1554,9 +1565,9 @@ std::string cmGeneratorTarget::GetAppBundleDirectory(const std::string& config,
ext = "app";
}
fpath += ext;
- if (!this->Makefile->PlatformIsAppleIos()) {
+ if (shouldAddContentLevel(level) && !this->Makefile->PlatformIsAppleIos()) {
fpath += "/Contents";
- if (!contentOnly) {
+ if (shouldAddFullLevel(level)) {
fpath += "/MacOS";
}
}
@@ -1569,8 +1580,8 @@ bool cmGeneratorTarget::IsBundleOnApple() const
this->IsCFBundleOnApple();
}
-std::string cmGeneratorTarget::GetCFBundleDirectory(const std::string& config,
- bool contentOnly) const
+std::string cmGeneratorTarget::GetCFBundleDirectory(
+ const std::string& config, BundleDirectoryLevel level) const
{
std::string fpath;
fpath += this->GetOutputName(config, false);
@@ -1584,17 +1595,17 @@ std::string cmGeneratorTarget::GetCFBundleDirectory(const std::string& config,
}
}
fpath += ext;
- if (!this->Makefile->PlatformIsAppleIos()) {
+ if (shouldAddContentLevel(level) && !this->Makefile->PlatformIsAppleIos()) {
fpath += "/Contents";
- if (!contentOnly) {
+ if (shouldAddFullLevel(level)) {
fpath += "/MacOS";
}
}
return fpath;
}
-std::string cmGeneratorTarget::GetFrameworkDirectory(const std::string& config,
- bool rootDir) const
+std::string cmGeneratorTarget::GetFrameworkDirectory(
+ const std::string& config, BundleDirectoryLevel level) const
{
std::string fpath;
fpath += this->GetOutputName(config, false);
@@ -1604,7 +1615,7 @@ std::string cmGeneratorTarget::GetFrameworkDirectory(const std::string& config,
ext = "framework";
}
fpath += ext;
- if (!rootDir && !this->Makefile->PlatformIsAppleIos()) {
+ if (shouldAddFullLevel(level) && !this->Makefile->PlatformIsAppleIos()) {
fpath += "/Versions/";
fpath += this->GetFrameworkVersion();
}
@@ -1919,18 +1930,19 @@ void cmGeneratorTarget::GetFullNameComponents(std::string& prefix,
this->GetFullNameInternal(config, implib, prefix, base, suffix);
}
-std::string cmGeneratorTarget::BuildMacContentDirectory(
- const std::string& base, const std::string& config, bool contentOnly) const
+std::string cmGeneratorTarget::BuildBundleDirectory(
+ const std::string& base, const std::string& config,
+ BundleDirectoryLevel level) const
{
std::string fpath = base;
if (this->IsAppBundleOnApple()) {
- fpath += this->GetAppBundleDirectory(config, contentOnly);
+ fpath += this->GetAppBundleDirectory(config, level);
}
if (this->IsFrameworkOnApple()) {
- fpath += this->GetFrameworkDirectory(config, contentOnly);
+ fpath += this->GetFrameworkDirectory(config, level);
}
if (this->IsCFBundleOnApple()) {
- fpath += this->GetCFBundleDirectory(config, contentOnly);
+ fpath += this->GetCFBundleDirectory(config, level);
}
return fpath;
}
@@ -1941,13 +1953,13 @@ std::string cmGeneratorTarget::GetMacContentDirectory(
// Start with the output directory for the target.
std::string fpath = this->GetDirectory(config, implib);
fpath += "/";
- bool contentOnly = true;
+ BundleDirectoryLevel level = ContentLevel;
if (this->IsFrameworkOnApple()) {
// additional files with a framework go into the version specific
// directory
- contentOnly = false;
+ level = FullLevel;
}
- fpath = this->BuildMacContentDirectory(fpath, config, contentOnly);
+ fpath = this->BuildBundleDirectory(fpath, config, level);
return fpath;
}
@@ -2997,7 +3009,7 @@ std::string cmGeneratorTarget::NormalGetFullPath(const std::string& config,
std::string fpath = this->GetDirectory(config, implib);
fpath += "/";
if (this->IsAppBundleOnApple()) {
- fpath = this->BuildMacContentDirectory(fpath, config, false);
+ fpath = this->BuildBundleDirectory(fpath, config, FullLevel);
fpath += "/";
}
@@ -3281,20 +3293,14 @@ void cmGeneratorTarget::GetFullNameInternal(const std::string& config,
// frameworks have directory prefix but no suffix
std::string fw_prefix;
if (this->IsFrameworkOnApple()) {
- fw_prefix = this->GetOutputName(config, false);
- fw_prefix += ".";
- const char* ext = this->GetProperty("BUNDLE_EXTENSION");
- if (!ext) {
- ext = "framework";
- }
- fw_prefix += ext;
+ fw_prefix = this->GetFrameworkDirectory(config, ContentLevel);
fw_prefix += "/";
targetPrefix = fw_prefix.c_str();
targetSuffix = CM_NULLPTR;
}
if (this->IsCFBundleOnApple()) {
- fw_prefix = this->GetCFBundleDirectory(config, false);
+ fw_prefix = this->GetCFBundleDirectory(config, FullLevel);
fw_prefix += "/";
targetPrefix = fw_prefix.c_str();
targetSuffix = CM_NULLPTR;