From d1c0a5fce6c9adccd1abf6b41ba448976ef895d0 Mon Sep 17 00:00:00 2001 From: Alex Neundorf Date: Sun, 7 Aug 2011 17:16:00 +0200 Subject: [PATCH] Start implementing skeleton for automoc in cmake Alex --- Source/cmQtAutomoc.cxx | 80 ++++++++++++++++++++++++++++++++++++++++++ Source/cmQtAutomoc.h | 18 ++++++++++ Source/cmake.cxx | 3 +- 3 files changed, 100 insertions(+), 1 deletion(-) diff --git a/Source/cmQtAutomoc.cxx b/Source/cmQtAutomoc.cxx index efbfc3832..26d359df9 100644 --- a/Source/cmQtAutomoc.cxx +++ b/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) { } diff --git a/Source/cmQtAutomoc.h b/Source/cmQtAutomoc.h index 657b20805..d6f809c68 100644 --- a/Source/cmQtAutomoc.h +++ b/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 diff --git a/Source/cmake.cxx b/Source/cmake.cxx index 47520dff7..06229e0c7 100644 --- a/Source/cmake.cxx +++ b/Source/cmake.cxx @@ -1578,7 +1578,8 @@ int cmake::ExecuteCMakeCommand(std::vector& args) else if (args[1] == "cmake_automoc") { cmQtAutomoc automoc; - automoc.Run("target directory"); + automoc.Run(args[2].c_str()); + return 0; } // Tar files