Browse Source

Re-factor CFBundle generation.

Nicolas Despres 13 years ago
parent
commit
7bb56c511e

+ 2 - 27
Source/cmMakefileLibraryTargetGenerator.cxx

@@ -28,11 +28,7 @@ cmMakefileLibraryTargetGenerator
   cmMakefileTargetGenerator(target),
   OSXBundleGenerator(0)
 {
-  if(this->Target->IsCFBundleOnApple())
-    {
-    target->SetProperty("PREFIX", "");
-    target->SetProperty("SUFFIX", "");
-    }
+  cmOSXBundleGenerator::PrepareTargetProperties(this->Target);
 
   this->CustomCommandDriver = OnDepends;
   this->Target->GetLibraryNames(
@@ -249,27 +245,6 @@ void cmMakefileLibraryTargetGenerator::WriteFrameworkRules(bool relink)
   this->WriteLibraryRules(linkRuleVar.c_str(), extraFlags.c_str(), relink);
 }
 
-//----------------------------------------------------------------------------
-void
-cmMakefileLibraryTargetGenerator::CreateCFBundle(std::string& targetName,
-                                                 std::string& outpath)
-{
-  // Compute bundle directory names.
-  outpath = this->MacContentDirectory;
-  outpath += "MacOS";
-  cmSystemTools::MakeDirectory(outpath.c_str());
-  this->Makefile->AddCMakeOutputFile(outpath.c_str());
-  outpath += "/";
-
-  // Configure the Info.plist file.  Note that it needs the executable name
-  // to be set.
-  std::string plist = this->MacContentDirectory + "Info.plist";
-  this->LocalGenerator->GenerateAppleInfoPList(this->Target,
-                                               targetName.c_str(),
-                                               plist.c_str());
-  this->Makefile->AddCMakeOutputFile(plist.c_str());
-}
-
 //----------------------------------------------------------------------------
 void cmMakefileLibraryTargetGenerator::WriteLibraryRules
 (const char* linkRuleVar, const char* extraFlags, bool relink)
@@ -328,7 +303,7 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules
     {
     outpath = this->Target->GetDirectory(this->ConfigName);
     outpath += "/";
-    this->CreateCFBundle(targetName, outpath);
+    this->OSXBundleGenerator->CreateCFBundle(targetName, outpath);
     }
   else if(relink)
     {

+ 0 - 1
Source/cmMakefileLibraryTargetGenerator.h

@@ -36,7 +36,6 @@ protected:
                          bool relink);
   // MacOSX Framework support methods
   void WriteFrameworkRules(bool relink);
-  void CreateCFBundle(std::string& targetName, std::string& outpath);
 
   // Store the computd framework version for OS X Frameworks.
   std::string FrameworkVersion;

+ 3 - 32
Source/cmNinjaNormalTargetGenerator.cxx

@@ -36,12 +36,7 @@ cmNinjaNormalTargetGenerator(cmTarget* target)
   , TargetNamePDB()
   , TargetLinkLanguage(0)
 {
-  // TODO: Re-factor with cmMakefileLibraryTargetGenerator's constructor.
-  if(target->IsCFBundleOnApple())
-    {
-    target->SetProperty("PREFIX", "");
-    target->SetProperty("SUFFIX", "");
-    }
+  cmOSXBundleGenerator::PrepareTargetProperties(target);
 
   this->TargetLinkLanguage = target->GetLinkerLanguage(this->GetConfigName());
   if (target->GetType() == cmTarget::EXECUTABLE)
@@ -383,13 +378,11 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement()
     // Create the library framework.
     this->OSXBundleGenerator->CreateFramework(this->TargetNameOut);
     }
-  // TODO: Re-factor with cmMakefileLibraryTargetGenerator::WriteLibraryRules.
   else if(this->GetTarget()->IsCFBundleOnApple())
     {
+    // Create the core foundation bundle.
     std::string outpath;
-    outpath = this->GetTarget()->GetDirectory(this->GetConfigName());
-    outpath += "/";
-    this->CreateCFBundle(this->TargetNameOut, outpath);
+    this->OSXBundleGenerator->CreateCFBundle(this->TargetNameOut, outpath);
     }
 
   // Write comments.
@@ -617,25 +610,3 @@ 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());
-}

+ 0 - 1
Source/cmNinjaNormalTargetGenerator.h

@@ -38,7 +38,6 @@ private:
   void WriteLinkStatement();
   void WriteObjectLibStatement();
   std::vector<std::string> ComputeLinkCmd();
-  void CreateCFBundle(std::string& targetName, std::string& outpath);
 
 private:
   // Target name info.

+ 31 - 0
Source/cmOSXBundleGenerator.cxx

@@ -16,6 +16,16 @@
 
 #include <cassert>
 
+void cmOSXBundleGenerator::PrepareTargetProperties(cmTarget* target)
+{
+  if(target->IsCFBundleOnApple())
+    {
+    target->SetProperty("PREFIX", "");
+    target->SetProperty("SUFFIX", "");
+    }
+}
+
+//----------------------------------------------------------------------------
 cmOSXBundleGenerator::
 cmOSXBundleGenerator(cmTarget* target,
                      std::string targetNameOut,
@@ -169,3 +179,24 @@ void cmOSXBundleGenerator::CreateFramework(std::string const& targetName)
     this->Makefile->AddCMakeOutputFile(newName.c_str());
     }
 }
+
+//----------------------------------------------------------------------------
+void cmOSXBundleGenerator::CreateCFBundle(std::string& targetName,
+                                          std::string& outpath)
+{
+  // Compute bundle directory names.
+  outpath = this->MacContentDirectory;
+  outpath += "MacOS";
+  cmSystemTools::MakeDirectory(outpath.c_str());
+  this->Makefile->AddCMakeOutputFile(outpath.c_str());
+  outpath += "/";
+
+  // Configure the Info.plist file.  Note that it needs the executable name
+  // to be set.
+  std::string plist = this->MacContentDirectory;
+  plist += "Info.plist";
+  this->LocalGenerator->GenerateAppleInfoPList(this->Target,
+                                               targetName.c_str(),
+                                               plist.c_str());
+  this->Makefile->AddCMakeOutputFile(plist.c_str());
+}

+ 3 - 0
Source/cmOSXBundleGenerator.h

@@ -24,12 +24,15 @@ class cmLocalGenerator;
 class cmOSXBundleGenerator
 {
 public:
+  static void PrepareTargetProperties(cmTarget* target);
+
   cmOSXBundleGenerator(cmTarget* target,
                        std::string targetNameOut,
                        const char* configName);
 
   void CreateAppBundle(std::string& targetName, std::string& outpath);
   void CreateFramework(std::string const& targetName);
+  void CreateCFBundle(std::string& targetName, std::string& outpath);
 
   std::string GetMacContentDirectory() const
   { return this->MacContentDirectory; }