Ninja: Add support for CFBundle.
This patch fixes test CFBundleTest on Darwin.
This commit is contained in:
parent
10686a17f4
commit
54d9713adb
|
@ -36,6 +36,13 @@ cmNinjaNormalTargetGenerator(cmTarget* target)
|
|||
, TargetNamePDB()
|
||||
, TargetLinkLanguage(0)
|
||||
{
|
||||
// TODO: Re-factor with cmMakefileLibraryTargetGenerator's constructor.
|
||||
if(target->IsCFBundleOnApple())
|
||||
{
|
||||
target->SetProperty("PREFIX", "");
|
||||
target->SetProperty("SUFFIX", "");
|
||||
}
|
||||
|
||||
this->TargetLinkLanguage = target->GetLinkerLanguage(this->GetConfigName());
|
||||
if (target->GetType() == cmTarget::EXECUTABLE)
|
||||
target->GetExecutableNames(this->TargetNameOut,
|
||||
|
@ -376,6 +383,14 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement()
|
|||
// Create the library framework.
|
||||
this->OSXBundleGenerator->CreateFramework(this->TargetNameOut);
|
||||
}
|
||||
// TODO: Re-factor with cmMakefileLibraryTargetGenerator::WriteLibraryRules.
|
||||
else if(this->GetTarget()->IsCFBundleOnApple())
|
||||
{
|
||||
std::string outpath;
|
||||
outpath = this->GetTarget()->GetDirectory(this->GetConfigName());
|
||||
outpath += "/";
|
||||
this->CreateCFBundle(this->TargetNameOut, outpath);
|
||||
}
|
||||
|
||||
// Write comments.
|
||||
cmGlobalNinjaGenerator::WriteDivider(this->GetBuildFileStream());
|
||||
|
@ -602,3 +617,25 @@ void cmNinjaNormalTargetGenerator::WriteObjectLibStatement()
|
|||
this->GetGlobalGenerator()->AddTargetAlias(this->GetTargetName(),
|
||||
this->GetTarget());
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// TODO: Re-factor with cmMakefileLibraryTargetGenerator::CreateCFBundle.
|
||||
void cmNinjaNormalTargetGenerator::CreateCFBundle(std::string& targetName,
|
||||
std::string& outpath)
|
||||
{
|
||||
// Compute bundle directory names.
|
||||
outpath = this->OSXBundleGenerator->GetMacContentDirectory();
|
||||
outpath += "MacOS";
|
||||
cmSystemTools::MakeDirectory(outpath.c_str());
|
||||
this->GetMakefile()->AddCMakeOutputFile(outpath.c_str());
|
||||
outpath += "/";
|
||||
|
||||
// Configure the Info.plist file. Note that it needs the executable name
|
||||
// to be set.
|
||||
std::string plist = this->OSXBundleGenerator->GetMacContentDirectory();
|
||||
plist += "Info.plist";
|
||||
this->GetLocalGenerator()->GenerateAppleInfoPList(this->GetTarget(),
|
||||
targetName.c_str(),
|
||||
plist.c_str());
|
||||
this->GetMakefile()->AddCMakeOutputFile(plist.c_str());
|
||||
}
|
||||
|
|
|
@ -38,6 +38,7 @@ private:
|
|||
void WriteLinkStatement();
|
||||
void WriteObjectLibStatement();
|
||||
std::vector<std::string> ComputeLinkCmd();
|
||||
void CreateCFBundle(std::string& targetName, std::string& outpath);
|
||||
|
||||
private:
|
||||
// Target name info.
|
||||
|
|
|
@ -3169,6 +3169,7 @@ std::string cmTarget::GetFullPath(const char* config, bool implib,
|
|||
std::string cmTarget::NormalGetFullPath(const char* config, bool implib,
|
||||
bool realname)
|
||||
{
|
||||
// TODO: Re-factor with cmOSXBundleGenerator's constructor.
|
||||
// Start with the output directory for the target.
|
||||
std::string fpath = this->GetDirectory(config, implib);
|
||||
fpath += "/";
|
||||
|
@ -3185,6 +3186,18 @@ std::string cmTarget::NormalGetFullPath(const char* config, bool implib,
|
|||
fpath += this->GetFrameworkVersion();
|
||||
fpath += "/";
|
||||
}
|
||||
if(this->IsCFBundleOnApple())
|
||||
{
|
||||
fpath += this->GetFullName(config, false);
|
||||
fpath += ".";
|
||||
const char *ext = this->GetProperty("BUNDLE_EXTENSION");
|
||||
if (!ext)
|
||||
{
|
||||
ext = "bundle";
|
||||
}
|
||||
fpath += ext;
|
||||
fpath += "/Contents/MacOS/";
|
||||
}
|
||||
|
||||
// Add the full name of the target.
|
||||
if(implib)
|
||||
|
|
Loading…
Reference in New Issue