1
0
Эх сурвалжийг харах

Start implementing skeleton for automoc in cmake

Alex
Alex Neundorf 14 жил өмнө
parent
commit
d1c0a5fce6

+ 80 - 0
Source/cmQtAutomoc.cxx

@@ -1,3 +1,8 @@
+#include "cmGlobalGenerator.h"
+#include "cmLocalGenerator.h"
+#include "cmMakefile.h"
+#include "cmSystemTools.h"
+
 #include "cmQtAutomoc.h"
 
 cmQtAutomoc::cmQtAutomoc()
@@ -6,5 +11,80 @@ cmQtAutomoc::cmQtAutomoc()
 
 
 bool cmQtAutomoc::Run(const char* targetDirectory)
+{
+  cmake cm;
+  cmGlobalGenerator* gg = this->CreateGlobalGenerator(&cm, targetDirectory);
+  cmMakefile* makefile = gg->GetCurrentLocalGenerator()->GetMakefile();
+
+  this->ReadAutomocInfoFile(makefile, targetDirectory);
+  this->ReadOldMocDefinitionsFile(makefile, targetDirectory);
+
+  delete gg;
+  gg = NULL;
+  makefile = NULL;
+
+  if (this->QtMajorVersion == "4")
+    {
+    this->RunAutomocQt4();
+    }
+
+  this->WriteOldMocDefinitionsFile(targetDirectory);
+}
+
+
+cmGlobalGenerator* cmQtAutomoc::CreateGlobalGenerator(cmake* cm,
+                                                  const char* targetDirectory)
+{
+  cmGlobalGenerator* gg = new cmGlobalGenerator();
+  gg->SetCMakeInstance(cm);
+
+  cmLocalGenerator* lg = gg->CreateLocalGenerator();
+  lg->GetMakefile()->SetHomeOutputDirectory(targetDirectory);
+  lg->GetMakefile()->SetStartOutputDirectory(targetDirectory);
+  lg->GetMakefile()->SetHomeDirectory(targetDirectory);
+  lg->GetMakefile()->SetStartDirectory(targetDirectory);
+  gg->SetCurrentLocalGenerator(lg);
+
+  return gg;
+}
+
+
+bool cmQtAutomoc::ReadAutomocInfoFile(cmMakefile* makefile,
+                                      const char* targetDirectory)
+{
+  std::string filename(cmSystemTools::CollapseFullPath(targetDirectory));
+  cmSystemTools::ConvertToUnixSlashes(filename);
+  filename += "/AutomocInfo.cmake";
+
+  if (!makefile->ReadListFile(0, filename.c_str()))
+    {
+    cmSystemTools::Error("Error processing file:", filename.c_str());
+    }
+  return true;
+}
+
+
+bool cmQtAutomoc::ReadOldMocDefinitionsFile(cmMakefile* makefile,
+                                            const char* targetDirectory)
+{
+  std::string filename(cmSystemTools::CollapseFullPath(targetDirectory));
+  cmSystemTools::ConvertToUnixSlashes(filename);
+  filename += "/AutomocOldMocDefinitions.cmake";
+
+  if (!makefile->ReadListFile(0, filename.c_str()))
+    {
+    cmSystemTools::Error("Error processing file:", filename.c_str());
+    }
+  return true;
+}
+
+
+bool cmQtAutomoc::RunAutomocQt4()
+{
+  return true;
+}
+
+
+void cmQtAutomoc::WriteOldMocDefinitionsFile(const char* targetDirectory)
 {
 }

+ 18 - 0
Source/cmQtAutomoc.h

@@ -1,11 +1,29 @@
 #ifndef cmQtAutomoc_h
 #define cmQtAutomoc_h
 
+class cmGlobalGenerator;
+class cmMakefile;
+
 class cmQtAutomoc
 {
 public:
   cmQtAutomoc();
   bool Run(const char* targetDirectory);
+
+private:
+  cmGlobalGenerator* CreateGlobalGenerator(cmake* cm,
+                                           const char* targetDirectory);
+
+  bool ReadAutomocInfoFile(cmMakefile* makefile,
+                           const char* targetDirectory);
+  bool ReadOldMocDefinitionsFile(cmMakefile* makefile,
+                                 const char* targetDirectory);
+  void WriteOldMocDefinitionsFile(const char* targetDirectory);
+
+  bool RunAutomocQt4();
+
+  std::string QtMajorVersion;
+
 };
 
 #endif

+ 2 - 1
Source/cmake.cxx

@@ -1578,7 +1578,8 @@ int cmake::ExecuteCMakeCommand(std::vector<std::string>& args)
     else if (args[1] == "cmake_automoc")
       {
         cmQtAutomoc automoc;
-        automoc.Run("target directory");
+        automoc.Run(args[2].c_str());
+        return 0;
       }
 
     // Tar files