Handle modules.
authorCasper Hornstrup <chorns@users.sourceforge.net>
Wed, 5 Jan 2005 19:47:10 +0000 (19:47 +0000)
committerCasper Hornstrup <chorns@users.sourceforge.net>
Wed, 5 Jan 2005 19:47:10 +0000 (19:47 +0000)
svn path=/branches/xmlbuildsystem/; revision=12836

reactos/tools/rbuild/backend/backend.cpp
reactos/tools/rbuild/backend/backend.h
reactos/tools/rbuild/backend/mingw/mingw.cpp
reactos/tools/rbuild/backend/mingw/mingw.h
reactos/tools/rbuild/backend/mingw/modulehandler.cpp [new file with mode: 0644]
reactos/tools/rbuild/backend/mingw/modulehandler.h [new file with mode: 0644]
reactos/tools/rbuild/makefile
reactos/tools/rbuild/project.cpp
reactos/tools/rbuild/rbuild.cpp
reactos/tools/rbuild/rbuild.h

index 385d0ee..000f4fd 100644 (file)
@@ -4,6 +4,7 @@
 #include "../Rbuild.h"\r
 #include "backend.h"\r
 \r
-Backend::Backend ( Project& project ) : ProjectNode(project)\r
+Backend::Backend ( Project& project )\r
+       : ProjectNode ( project )\r
 {\r
 }\r
index d2c434c..32d4b20 100644 (file)
@@ -6,7 +6,8 @@
 class Backend\r
 {\r
 public:\r
-       Backend ( Project& );\r
+       Backend ( Project& project );\r
+       virtual void Process () = 0;\r
 protected:\r
        Project& ProjectNode;\r
 };\r
index 1734c1e..df61939 100644 (file)
@@ -3,7 +3,39 @@
 \r
 #include "mingw.h"\r
 \r
-MingwBackend::MingwBackend(Project& project)\r
-       : Backend(project)\r
+using std::string;\r
+using std::vector;\r
+\r
+MingwBackend::MingwBackend ( Project& project )\r
+       : Backend ( project )\r
+{\r
+}\r
+\r
+void MingwBackend::Process ()\r
+{\r
+       for ( size_t i = 0; i < ProjectNode.modules.size (); i++ )\r
+       {\r
+               Module& module = *ProjectNode.modules[i];\r
+               ProcessModule ( module );\r
+       }\r
+}\r
+\r
+void MingwBackend::ProcessModule ( Module& module )\r
+{\r
+       MingwModuleHandlerList moduleHandlers;\r
+       GetModuleHandlers ( moduleHandlers );\r
+       for (size_t i = 0; i < moduleHandlers.size(); i++)\r
+       {\r
+               MingwModuleHandler& moduleHandler = *moduleHandlers[i];\r
+               if (moduleHandler.CanHandleModule ( module ) )\r
+               {\r
+                       moduleHandler.Process ( module );\r
+                       return;\r
+               }\r
+       }\r
+}\r
+\r
+void MingwBackend::GetModuleHandlers ( MingwModuleHandlerList& moduleHandlers )\r
 {\r
+       moduleHandlers.push_back ( new MingwKernelModuleHandler () );\r
 }\r
index fe8c989..d720620 100644 (file)
@@ -2,11 +2,29 @@
 #define MINGW_H\r
 \r
 #include "../backend.h"\r
+#include "modulehandler.h"\r
+\r
+class MingwModuleHandlerList : public std::vector<MingwModuleHandler*>\r
+{\r
+public:\r
+       ~MingwModuleHandlerList()\r
+       {\r
+               for ( size_t i = 0; i < size(); i++ )\r
+               {\r
+                       delete (*this)[i];\r
+               }\r
+       }\r
+};\r
+\r
 \r
 class MingwBackend : public Backend\r
 {\r
 public:\r
-       MingwBackend ( Project& );\r
+       MingwBackend ( Project& project );\r
+       virtual void Process ();\r
+private:\r
+       void ProcessModule ( Module& module );\r
+       void GetModuleHandlers ( MingwModuleHandlerList& moduleHandlers );\r
 };\r
 \r
 #endif /* MINGW_H */\r
diff --git a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp
new file mode 100644 (file)
index 0000000..2a539c1
--- /dev/null
@@ -0,0 +1,24 @@
+\r
+#include "../../pch.h"\r
+\r
+#include "../../rbuild.h"\r
+#include "mingw.h"\r
+#include "modulehandler.h"\r
+\r
+MingwModuleHandler::MingwModuleHandler ()\r
+{\r
+}\r
+\r
+\r
+MingwKernelModuleHandler::MingwKernelModuleHandler ()\r
+{\r
+}\r
+\r
+bool MingwKernelModuleHandler::CanHandleModule ( Module& module )\r
+{\r
+       return true;\r
+}\r
+\r
+void MingwKernelModuleHandler::Process ( Module& module )\r
+{\r
+}\r
diff --git a/reactos/tools/rbuild/backend/mingw/modulehandler.h b/reactos/tools/rbuild/backend/mingw/modulehandler.h
new file mode 100644 (file)
index 0000000..0294a0e
--- /dev/null
@@ -0,0 +1,23 @@
+#ifndef MINGW_MODULEHANDLER_H\r
+#define MINGW_MODULEHANDLER_H\r
+\r
+#include "../backend.h"\r
+\r
+class MingwModuleHandler\r
+{\r
+public:\r
+       MingwModuleHandler ();\r
+       virtual bool CanHandleModule ( Module& module ) = 0;\r
+       virtual void Process ( Module& module ) = 0;\r
+};\r
+\r
+\r
+class MingwKernelModuleHandler : public MingwModuleHandler\r
+{\r
+public:\r
+       MingwKernelModuleHandler ();\r
+       virtual bool CanHandleModule ( Module& module );\r
+       virtual void Process ( Module& module );\r
+};\r
+\r
+#endif /* MINGW_MODULEHANDLER_H */\r
index a25a5da..6b1d693 100644 (file)
@@ -5,8 +5,9 @@ TARGET = rbuild$(EXE_POSTFIX)
 all: $(TARGET)\r
 \r
 BACKEND_MINGW_BASE_OBJECTS = \\r
-       backend/mingw/mingw.cpp\r
-\r
+       backend/mingw/mingw.cpp \\r
+       backend/mingw/modulehandler.cpp\r
+       \r
 BACKEND_BASE_OBJECTS = \\r
        $(BACKEND_MINGW_BASE_OBJECTS) \\r
        backend/backend.cpp\r
index 8cd9db2..eb33343 100644 (file)
@@ -40,21 +40,21 @@ Project::Project()
 {\r
 }\r
 \r
-Project::Project(const string& filename)\r
+Project::Project ( const string& filename )\r
 {\r
        if ( !xmlfile.open ( filename ) )\r
                throw FileNotFoundException ( filename );\r
        ReadXml();\r
 }\r
 \r
-Project::~Project()\r
+Project::~Project ()\r
 {\r
-       for ( size_t i = 0; i < modules.size(); i++ )\r
+       for ( size_t i = 0; i < modules.size (); i++ )\r
                delete modules[i];\r
        delete head;\r
 }\r
 \r
-void Project::ReadXml()\r
+void Project::ReadXml ()\r
 {\r
        Path path;\r
 \r
@@ -102,7 +102,7 @@ Project::ProcessXML ( const XMLElement& e, const string& path )
                        return;\r
                subpath = path + "/" + att->value;\r
        }\r
-       for ( size_t i = 0; i < e.subElements.size(); i++ )\r
+       for ( size_t i = 0; i < e.subElements.size (); i++ )\r
                ProcessXML ( *e.subElements[i], subpath );\r
 }\r
 \r
index b13b1fc..9e335b4 100644 (file)
@@ -8,6 +8,8 @@
 #include <assert.h>\r
 \r
 #include "rbuild.h"\r
+#include "backend/backend.h"\r
+#include "backend/mingw/mingw.h"\r
 \r
 using std::string;\r
 using std::vector;\r
@@ -18,9 +20,10 @@ main ( int argc, char** argv )
        try\r
        {\r
                string projectFilename ( "ReactOS.xml" );\r
-               Project project ( projectFilename );\r
-               project.GenerateOutput();\r
-\r
+               Project project = Project ( projectFilename );\r
+               Backend* backend = new MingwBackend ( project );\r
+               backend->Process ();\r
+               \r
                // REM TODO FIXME actually do something with Project object...\r
 #if 0\r
                printf ( "Found %d modules:\n", project.modules.size() );\r
index 6fa5ab8..c78114a 100644 (file)
@@ -20,7 +20,8 @@ public:
        Project ();\r
        Project ( const std::string& filename );\r
        ~Project ();\r
-       void ProcessXML ( const XMLElement& e, const std::string& path );\r
+       void ProcessXML ( const XMLElement& e,\r
+                         const std::string& path );\r
        bool GenerateOutput();\r
 private:\r
        void ReadXml ();\r