OS X: Fix getting of CFBundle LOCATION property.
This fixes bug #13797.
The kinds of changes applied in 373faae5
for frameworks are now
applied to CFBundle. The prefix and suffix for CFBundles are
now handled in cmTarget::GetFullNameInternal.
This commit is contained in:
parent
373faae5e1
commit
483e208482
|
@ -351,21 +351,7 @@ cmExportInstallFileGenerator
|
|||
prop += suffix;
|
||||
|
||||
// Append the installed file name.
|
||||
if(target->IsCFBundleOnApple())
|
||||
{
|
||||
const char *ext = target->GetProperty("BUNDLE_EXTENSION");
|
||||
if (!ext)
|
||||
{
|
||||
ext = "bundle";
|
||||
}
|
||||
|
||||
value += itgen->GetInstallFilename(target, config);
|
||||
value += ".";
|
||||
value += ext;
|
||||
value += "/";
|
||||
value += itgen->GetInstallFilename(target, config);
|
||||
}
|
||||
else if(target->IsAppBundleOnApple())
|
||||
if(target->IsAppBundleOnApple())
|
||||
{
|
||||
value += itgen->GetInstallFilename(target, config);
|
||||
value += ".app/Contents/MacOS/";
|
||||
|
|
|
@ -746,12 +746,6 @@ cmGlobalXCodeGenerator::CreateXCodeSourceFile(cmLocalGenerator* lg,
|
|||
}
|
||||
}
|
||||
|
||||
if(cmtarget.IsCFBundleOnApple())
|
||||
{
|
||||
cmtarget.SetProperty("PREFIX", "");
|
||||
cmtarget.SetProperty("SUFFIX", "");
|
||||
}
|
||||
|
||||
// Add the fileRef to the top level Resources group/folder if it is not
|
||||
// already there.
|
||||
//
|
||||
|
@ -1823,7 +1817,7 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmTarget& target,
|
|||
pndir = target.GetDirectory(configName);
|
||||
}
|
||||
|
||||
if(target.IsFrameworkOnApple())
|
||||
if(target.IsFrameworkOnApple() || target.IsCFBundleOnApple())
|
||||
{
|
||||
pnprefix = "";
|
||||
}
|
||||
|
|
|
@ -24,8 +24,6 @@ cmMakefileLibraryTargetGenerator
|
|||
::cmMakefileLibraryTargetGenerator(cmTarget* target):
|
||||
cmMakefileTargetGenerator(target)
|
||||
{
|
||||
cmOSXBundleGenerator::PrepareTargetProperties(this->Target);
|
||||
|
||||
this->CustomCommandDriver = OnDepends;
|
||||
this->Target->GetLibraryNames(
|
||||
this->TargetNameOut, this->TargetNameSO, this->TargetNameReal,
|
||||
|
|
|
@ -36,8 +36,6 @@ cmNinjaNormalTargetGenerator(cmTarget* target)
|
|||
, TargetNamePDB()
|
||||
, TargetLinkLanguage(0)
|
||||
{
|
||||
cmOSXBundleGenerator::PrepareTargetProperties(target);
|
||||
|
||||
this->TargetLinkLanguage = target->GetLinkerLanguage(this->GetConfigName());
|
||||
if (target->GetType() == cmTarget::EXECUTABLE)
|
||||
target->GetExecutableNames(this->TargetNameOut,
|
||||
|
|
|
@ -16,15 +16,6 @@
|
|||
|
||||
#include <cassert>
|
||||
|
||||
void cmOSXBundleGenerator::PrepareTargetProperties(cmTarget* target)
|
||||
{
|
||||
if(target->IsCFBundleOnApple())
|
||||
{
|
||||
target->SetProperty("PREFIX", "");
|
||||
target->SetProperty("SUFFIX", "");
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
cmOSXBundleGenerator::
|
||||
cmOSXBundleGenerator(cmTarget* target,
|
||||
|
@ -173,31 +164,27 @@ void cmOSXBundleGenerator::CreateFramework(
|
|||
|
||||
//----------------------------------------------------------------------------
|
||||
void cmOSXBundleGenerator::CreateCFBundle(const std::string& targetName,
|
||||
std::string& outpath)
|
||||
const std::string& root)
|
||||
{
|
||||
if (this->MustSkip())
|
||||
return;
|
||||
|
||||
// Compute bundle directory names.
|
||||
std::string out = outpath;
|
||||
std::string out = root;
|
||||
out += "/";
|
||||
out += this->Target->GetCFBundleDirectory(this->ConfigName, true);
|
||||
std::string top = out;
|
||||
out += "/MacOS";
|
||||
out += this->Target->GetCFBundleDirectory(this->ConfigName, false);
|
||||
cmSystemTools::MakeDirectory(out.c_str());
|
||||
this->Makefile->AddCMakeOutputFile(out.c_str());
|
||||
|
||||
std::string newoutpath = out;
|
||||
|
||||
// Configure the Info.plist file. Note that it needs the executable name
|
||||
// to be set.
|
||||
std::string plist = top;
|
||||
std::string plist =
|
||||
this->Target->GetCFBundleDirectory(this->ConfigName, true);
|
||||
plist += "/Info.plist";
|
||||
this->LocalGenerator->GenerateAppleInfoPList(this->Target,
|
||||
targetName.c_str(),
|
||||
plist.c_str());
|
||||
this->Makefile->AddCMakeOutputFile(plist.c_str());
|
||||
outpath = newoutpath;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
|
|
@ -25,8 +25,6 @@ class cmLocalGenerator;
|
|||
class cmOSXBundleGenerator
|
||||
{
|
||||
public:
|
||||
static void PrepareTargetProperties(cmTarget* target);
|
||||
|
||||
cmOSXBundleGenerator(cmTarget* target,
|
||||
const char* configName);
|
||||
|
||||
|
@ -38,9 +36,9 @@ public:
|
|||
void CreateFramework(const std::string& targetName,
|
||||
const std::string& root);
|
||||
|
||||
// create a cf bundle at a given root and return the
|
||||
// directory within the bundle that contains the library
|
||||
void CreateCFBundle(const std::string& targetName, std::string& outpath);
|
||||
// create a cf bundle at a given root
|
||||
void CreateCFBundle(const std::string& targetName,
|
||||
const std::string& root);
|
||||
|
||||
struct MacOSXContentGeneratorType
|
||||
{
|
||||
|
|
|
@ -3278,7 +3278,7 @@ const char* cmTarget::NormalGetLocation(const char* config)
|
|||
this->Location += cfgid;
|
||||
}
|
||||
|
||||
if(this->IsCFBundleOnApple() || this->IsAppBundleOnApple())
|
||||
if(this->IsAppBundleOnApple())
|
||||
{
|
||||
std::string macdir = this->BuildMacContentDirectory("", config, false);
|
||||
if(!macdir.empty())
|
||||
|
@ -3891,7 +3891,7 @@ std::string cmTarget::NormalGetFullPath(const char* config, bool implib,
|
|||
{
|
||||
std::string fpath = this->GetDirectory(config, implib);
|
||||
fpath += "/";
|
||||
if(this->IsCFBundleOnApple() || this->IsAppBundleOnApple())
|
||||
if(this->IsAppBundleOnApple())
|
||||
{
|
||||
fpath = this->BuildMacContentDirectory(fpath, config, false);
|
||||
fpath += "/";
|
||||
|
@ -4037,6 +4037,21 @@ void cmTarget::GetFullNameInternal(const char* config,
|
|||
targetSuffix = 0;
|
||||
}
|
||||
|
||||
if(this->IsCFBundleOnApple())
|
||||
{
|
||||
fw_prefix = this->GetOutputName(config, false);
|
||||
fw_prefix += ".";
|
||||
const char *ext = this->GetProperty("BUNDLE_EXTENSION");
|
||||
if (!ext)
|
||||
{
|
||||
ext = "bundle";
|
||||
}
|
||||
fw_prefix += ext;
|
||||
fw_prefix += "/Contents/MacOS/";
|
||||
targetPrefix = fw_prefix.c_str();
|
||||
targetSuffix = 0;
|
||||
}
|
||||
|
||||
// Begin the final name with the prefix.
|
||||
outPrefix = targetPrefix?targetPrefix:"";
|
||||
|
||||
|
|
|
@ -54,3 +54,5 @@ set_source_files_properties(
|
|||
${CMAKE_CURRENT_BINARY_DIR}/InfoPlist.strings
|
||||
${CMAKE_CURRENT_BINARY_DIR}/Localized.rsrc
|
||||
PROPERTIES MACOSX_PACKAGE_LOCATION "Resources/English.lproj")
|
||||
|
||||
export(TARGETS CFBundleTest FILE ${CMAKE_CURRENT_BINARY_DIR}/exp.cmake)
|
||||
|
|
Loading…
Reference in New Issue