generate output rules for files under <if>
[reactos.git] / reactos / tools / rbuild / backend / mingw / modulehandler.h
index 2f3266c..ff3b27a 100644 (file)
@@ -6,11 +6,20 @@
 class MingwModuleHandler\r
 {\r
 public:\r
-       MingwModuleHandler ( FILE* fMakefile );\r
-       virtual bool CanHandleModule ( const Module& module ) const = 0;\r
+       static std::map<ModuleType,MingwModuleHandler*>* handler_map;\r
+       static int ref;\r
+\r
+       MingwModuleHandler ( ModuleType moduletype );\r
+       virtual ~MingwModuleHandler();\r
+\r
+       static void SetMakefile ( FILE* f );\r
+       static MingwModuleHandler* LookupHandler ( const std::string& location,\r
+                                                  ModuleType moduletype_ );\r
        virtual void Process ( const Module& module ) = 0;\r
+\r
 protected:\r
-       std::string MingwModuleHandler::GetWorkingDirectory () const;\r
+       std::string GetWorkingDirectory () const;\r
+       std::string GetExtension ( const std::string& filename ) const;\r
        std::string ReplaceExtension ( const std::string& filename,\r
                                       const std::string& newExtension ) const;\r
        std::string GetModuleArchiveFilename ( const Module& module ) const;\r
@@ -21,27 +30,70 @@ protected:
 \r
        std::string GetObjectFilename ( const std::string& sourceFilename ) const;\r
        std::string GetObjectFilenames ( const Module& module ) const;\r
-       void GenerateObjectFileTargetsHost ( const Module& module ) const;\r
-       void GenerateObjectFileTargetsTarget ( const Module& module ) const;\r
-       void GenerateArchiveTargetHost ( const Module& module ) const;\r
-       void GenerateArchiveTargetTarget ( const Module& module ) const;\r
+       void GenerateMacrosAndTargetsHost ( const Module& module ) const;\r
+       void GenerateMacrosAndTargetsTarget ( const Module& module ) const;\r
        std::string GetInvocationDependencies ( const Module& module ) const;\r
        std::string GetInvocationParameters ( const Invoke& invoke ) const;\r
        void GenerateInvocations ( const Module& module ) const;\r
        void GeneratePreconditionDependencies ( const Module& module ) const;\r
-       FILE* fMakefile;\r
+       std::string GenerateMacros ( const Module& module,\r
+                                    const std::string& cflags_macro,\r
+                                    const std::string& objs_macro ) const;\r
+       static FILE* fMakefile;\r
 private:\r
        std::string ConcatenatePaths ( const std::string& path1,\r
                                       const std::string& path2 ) const;\r
        std::string GenerateGccDefineParametersFromVector ( const std::vector<Define*>& defines ) const;\r
        std::string GenerateGccDefineParameters ( const Module& module ) const;\r
        std::string GenerateGccIncludeParametersFromVector ( const std::vector<Include*>& includes ) const;\r
+       void GenerateMacros ( const char* op,\r
+                             const std::vector<File*>& files,\r
+                             const std::vector<Include*>& includes,\r
+                             const std::vector<Define*>& defines,\r
+                             const std::vector<If*>& ifs,\r
+                             const std::string& cflags_macro,\r
+                             const std::string& nasmflags_macro,\r
+                             const std::string& objs_macro) const;\r
+       void GenerateMacros ( const Module& module,\r
+                             const std::string& cflags_macro,\r
+                             const std::string& nasmflags_macro,\r
+                             const std::string& objs_macro) const;\r
+       void GenerateGccModuleIncludeVariable ( const Module& module ) const;\r
        std::string GenerateGccIncludeParameters ( const Module& module ) const;\r
        std::string GenerateGccParameters ( const Module& module ) const;\r
+       std::string GenerateNasmParameters ( const Module& module ) const;\r
+       std::string GenerateGccCommand ( const Module& module,\r
+                                        const std::string& sourceFilename,\r
+                                        const std::string& cc,\r
+                                        const std::string& cflagsMacro ) const;\r
+       std::string GenerateGccAssemblerCommand ( const Module& module,\r
+                                                 const std::string& sourceFilename,\r
+                                                 const std::string& cc,\r
+                                                 const std::string& cflagsMacro ) const;\r
+       std::string GenerateNasmCommand ( const Module& module,\r
+                                         const std::string& sourceFilename,\r
+                                         const std::string& nasmflagsMacro ) const;\r
+       std::string GenerateCommand ( const Module& module,\r
+                                     const std::string& sourceFilename,\r
+                                     const std::string& cc,\r
+                                     const std::string& cflagsMacro,\r
+                                     const std::string& nasmflagsMacro ) const;\r
+       void GenerateObjectFileTargets ( const Module& module,\r
+                                        const std::vector<File*>& files,\r
+                                        const std::vector<If*>& ifs,\r
+                                        const std::string& cc,\r
+                                        const std::string& cflagsMacro,\r
+                                        const std::string& nasmflagsMacro ) const;\r
        void GenerateObjectFileTargets ( const Module& module,\r
-                                        const std::string& cc ) const;\r
+                                        const std::string& cc,\r
+                                        const std::string& cflagsMacro,\r
+                                        const std::string& nasmflagsMacro ) const;\r
        void GenerateArchiveTarget ( const Module& module,\r
-                                    const std::string& ar ) const;\r
+                                    const std::string& ar,\r
+                                    const std::string& objs_macro ) const;\r
+       void GenerateMacrosAndTargets ( const Module& module,\r
+                                       const std::string& cc,\r
+                                       const std::string& ar ) const;\r
        std::string GetPreconditionDependenciesName ( const Module& module ) const;\r
 };\r
 \r
@@ -49,8 +101,7 @@ private:
 class MingwBuildToolModuleHandler : public MingwModuleHandler\r
 {\r
 public:\r
-       MingwBuildToolModuleHandler ( FILE* fMakefile );\r
-       virtual bool CanHandleModule ( const Module& module ) const;\r
+       MingwBuildToolModuleHandler ();\r
        virtual void Process ( const Module& module );\r
 private:\r
        void GenerateBuildToolModuleTarget ( const Module& module );\r
@@ -60,8 +111,7 @@ private:
 class MingwKernelModuleHandler : public MingwModuleHandler\r
 {\r
 public:\r
-       MingwKernelModuleHandler ( FILE* fMakefile );\r
-       virtual bool CanHandleModule ( const Module& module ) const;\r
+       MingwKernelModuleHandler ();\r
        virtual void Process ( const Module& module );\r
 private:\r
        void GenerateKernelModuleTarget ( const Module& module );\r
@@ -71,11 +121,40 @@ private:
 class MingwStaticLibraryModuleHandler : public MingwModuleHandler\r
 {\r
 public:\r
-       MingwStaticLibraryModuleHandler ( FILE* fMakefile );\r
-       virtual bool CanHandleModule ( const Module& module ) const;\r
+       MingwStaticLibraryModuleHandler ();\r
        virtual void Process ( const Module& module );\r
 private:\r
        void GenerateStaticLibraryModuleTarget ( const Module& module );\r
 };\r
 \r
+\r
+class MingwKernelModeDLLModuleHandler : public MingwModuleHandler\r
+{\r
+public:\r
+       MingwKernelModeDLLModuleHandler ();\r
+       virtual void Process ( const Module& module );\r
+private:\r
+       void GenerateKernelModeDLLModuleTarget ( const Module& module );\r
+};\r
+\r
+\r
+class MingwNativeDLLModuleHandler : public MingwModuleHandler\r
+{\r
+public:\r
+       MingwNativeDLLModuleHandler ();\r
+       virtual void Process ( const Module& module );\r
+private:\r
+       void GenerateNativeDLLModuleTarget ( const Module& module );\r
+};\r
+\r
+\r
+class MingwWin32DLLModuleHandler : public MingwModuleHandler\r
+{\r
+public:\r
+       MingwWin32DLLModuleHandler ();\r
+       virtual void Process ( const Module& module );\r
+private:\r
+       void GenerateWin32DLLModuleTarget ( const Module& module );\r
+};\r
+\r
 #endif /* MINGW_MODULEHANDLER_H */\r