summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGregor Jasny <gjasny@googlemail.com>2017-03-28 07:43:38 (GMT)
committerGregor Jasny <gjasny@googlemail.com>2017-03-30 20:24:54 (GMT)
commit32e9d0ca233439c0381abc5acee8a5acd30be494 (patch)
treea5ac7ea964884f973461d0c999acf82183a12d4e
parent3e2f6bd96219ac096826fbc2ea6bc8fe8f0b4a88 (diff)
downloadCMake-32e9d0ca233439c0381abc5acee8a5acd30be494.zip
CMake-32e9d0ca233439c0381abc5acee8a5acd30be494.tar.gz
CMake-32e9d0ca233439c0381abc5acee8a5acd30be494.tar.bz2
cmGeneratorTarget: Use enum to describe bundle directory query level
-rw-r--r--Source/cmGeneratorTarget.cxx46
-rw-r--r--Source/cmGeneratorTarget.h22
-rw-r--r--Source/cmOSXBundleGenerator.cxx24
3 files changed, 56 insertions, 36 deletions
diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx
index f78a933..95f447f 100644
--- a/Source/cmGeneratorTarget.cxx
+++ b/Source/cmGeneratorTarget.cxx
@@ -858,7 +858,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;
@@ -1488,8 +1488,13 @@ 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;
+}
+
+std::string cmGeneratorTarget::GetAppBundleDirectory(
+ const std::string& config, BundleDirectoryLevel level) const
{
std::string fpath = this->GetFullName(config, false);
fpath += ".";
@@ -1500,7 +1505,7 @@ std::string cmGeneratorTarget::GetAppBundleDirectory(const std::string& config,
fpath += ext;
if (!this->Makefile->PlatformIsAppleIos()) {
fpath += "/Contents";
- if (!contentOnly) {
+ if (shouldAddFullLevel(level)) {
fpath += "/MacOS";
}
}
@@ -1513,8 +1518,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);
@@ -1530,15 +1535,15 @@ std::string cmGeneratorTarget::GetCFBundleDirectory(const std::string& config,
fpath += ext;
if (!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);
@@ -1548,7 +1553,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();
}
@@ -1863,18 +1868,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;
}
@@ -1885,13 +1891,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;
}
@@ -2932,7 +2938,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 += "/";
}
@@ -3229,7 +3235,7 @@ void cmGeneratorTarget::GetFullNameInternal(const std::string& config,
}
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;
diff --git a/Source/cmGeneratorTarget.h b/Source/cmGeneratorTarget.h
index d60ad24..07a59ae 100644
--- a/Source/cmGeneratorTarget.h
+++ b/Source/cmGeneratorTarget.h
@@ -160,9 +160,16 @@ public:
bool realname) const;
std::string NormalGetRealName(const std::string& config) const;
+ /** What hierarchy level should the reported directory contain */
+ enum BundleDirectoryLevel
+ {
+ ContentLevel,
+ FullLevel
+ };
+
/** @return the Mac App directory without the base */
std::string GetAppBundleDirectory(const std::string& config,
- bool contentOnly) const;
+ BundleDirectoryLevel level) const;
/** Return whether this target is an executable Bundle, a framework
or CFBundle on Apple. */
@@ -175,7 +182,7 @@ public:
/** @return the Mac framework directory without the base. */
std::string GetFrameworkDirectory(const std::string& config,
- bool rootDir) const;
+ BundleDirectoryLevel level) const;
/** Return the framework version string. Undefined if
IsFrameworkOnApple returns false. */
@@ -183,7 +190,7 @@ public:
/** @return the Mac CFBundle directory without the base */
std::string GetCFBundleDirectory(const std::string& config,
- bool contentOnly) const;
+ BundleDirectoryLevel level) const;
/** Return the install name directory for the target in the
* build tree. For example: "\@rpath/", "\@loader_path/",
@@ -218,10 +225,11 @@ public:
const std::string& config = "",
bool implib = false) const;
- /** Append to @a base the mac content directory and return it. */
- std::string BuildMacContentDirectory(const std::string& base,
- const std::string& config = "",
- bool contentOnly = true) const;
+ /** Append to @a base the bundle directory hierarchy up to a certain @a level
+ * and return it. */
+ std::string BuildBundleDirectory(const std::string& base,
+ const std::string& config,
+ BundleDirectoryLevel level) const;
/** @return the mac content directory for this target. */
std::string GetMacContentDirectory(const std::string& config = CM_NULLPTR,
diff --git a/Source/cmOSXBundleGenerator.cxx b/Source/cmOSXBundleGenerator.cxx
index 8139be4..c9f6ceb 100644
--- a/Source/cmOSXBundleGenerator.cxx
+++ b/Source/cmOSXBundleGenerator.cxx
@@ -42,7 +42,8 @@ void cmOSXBundleGenerator::CreateAppBundle(const std::string& targetName,
// Compute bundle directory names.
std::string out = outpath;
out += "/";
- out += this->GT->GetAppBundleDirectory(this->ConfigName, false);
+ out += this->GT->GetAppBundleDirectory(this->ConfigName,
+ cmGeneratorTarget::FullLevel);
cmSystemTools::MakeDirectory(out.c_str());
this->Makefile->AddCMakeOutputFile(out);
@@ -52,7 +53,8 @@ void cmOSXBundleGenerator::CreateAppBundle(const std::string& targetName,
// to be set.
std::string plist = outpath;
plist += "/";
- plist += this->GT->GetAppBundleDirectory(this->ConfigName, true);
+ plist += this->GT->GetAppBundleDirectory(this->ConfigName,
+ cmGeneratorTarget::ContentLevel);
plist += "/Info.plist";
this->LocalGenerator->GenerateAppleInfoPList(this->GT, targetName,
plist.c_str());
@@ -70,12 +72,14 @@ void cmOSXBundleGenerator::CreateFramework(const std::string& targetName,
assert(this->MacContentFolders);
// Compute the location of the top-level foo.framework directory.
- std::string contentdir =
- outpath + "/" + this->GT->GetFrameworkDirectory(this->ConfigName, true);
+ std::string contentdir = outpath + "/" +
+ this->GT->GetFrameworkDirectory(this->ConfigName,
+ cmGeneratorTarget::ContentLevel);
contentdir += "/";
- std::string newoutpath =
- outpath + "/" + this->GT->GetFrameworkDirectory(this->ConfigName, false);
+ std::string newoutpath = outpath + "/" +
+ this->GT->GetFrameworkDirectory(this->ConfigName,
+ cmGeneratorTarget::FullLevel);
std::string frameworkVersion = this->GT->GetFrameworkVersion();
@@ -170,14 +174,16 @@ void cmOSXBundleGenerator::CreateCFBundle(const std::string& targetName,
// Compute bundle directory names.
std::string out = root;
out += "/";
- out += this->GT->GetCFBundleDirectory(this->ConfigName, false);
+ out += this->GT->GetCFBundleDirectory(this->ConfigName,
+ cmGeneratorTarget::FullLevel);
cmSystemTools::MakeDirectory(out.c_str());
this->Makefile->AddCMakeOutputFile(out);
// Configure the Info.plist file. Note that it needs the executable name
// to be set.
- std::string plist =
- root + "/" + this->GT->GetCFBundleDirectory(this->ConfigName, true);
+ std::string plist = root + "/" +
+ this->GT->GetCFBundleDirectory(this->ConfigName,
+ cmGeneratorTarget::ContentLevel);
plist += "/Info.plist";
std::string name = cmSystemTools::GetFilenameName(targetName);
this->LocalGenerator->GenerateAppleInfoPList(this->GT, name, plist.c_str());