-Add a new module type 'cabinet' to handle .cab files generation
[reactos.git] / reactos / tools / rbuild / backend / mingw / modulehandler.h
index d45d8bb..987343b 100644 (file)
@@ -22,6 +22,7 @@
 #include "mingw.h"
 
 class MingwBackend;
+class Rule;
 
 extern std::string
 GetTargetMacro ( const Module&, bool with_dollar = true );
@@ -51,12 +52,13 @@ public:
                const Module& module,
                string_list* pclean_files );
 
-       static std::string GenerateGccDefineParametersFromVector ( const std::vector<Define*>& defines );
+       static std::string GenerateGccDefineParametersFromVector ( const std::vector<Define*>& defines, std::set<std::string> &used_defs );
        static std::string GenerateGccIncludeParametersFromVector ( const std::vector<Include*>& includes );
 
        std::string GetModuleTargets ( const Module& module );
        void GetObjectsVector ( const IfableData& data,
                                std::vector<FileLocation>& objectFiles ) const;
+       void GenerateSourceMacro();
        void GenerateObjectMacro();
        void GenerateTargetMacro();
        void GenerateOtherMacros();
@@ -96,7 +98,7 @@ protected:
                                  bool includeGeneratedFiles ) const;
        void GetSourceFilenamesWithoutGeneratedFiles ( std::vector<FileLocation>& list ) const;
        const FileLocation* GetObjectFilename ( const FileLocation* sourceFile,
-                                               string_list* pclean_files ) const;
+                                               const Module& module ) const;
 
        std::string GetObjectFilenames ();
 
@@ -110,17 +112,13 @@ protected:
        void GenerateRunRsymCode () const;
        void GenerateRunStripCode () const;
        void GenerateLinkerCommand ( const std::string& dependencies,
-                                    const std::string& linker,
                                     const std::string& linkerParameters,
-                                    const std::string& objectsMacro,
-                                    const std::string& libsMacro,
                                     const std::string& pefixupParameters );
        void GeneratePhonyTarget() const;
        void GenerateBuildMapCode ( const FileLocation *mapTarget = NULL );
        void GenerateRules ();
        void GenerateImportLibraryTargetIfNeeded ();
        void GetDefinitionDependencies ( std::vector<FileLocation>& dependencies ) const;
-
        std::string GetLinkingDependencies () const;
        static MingwBackend* backend;
        static FILE* fMakefile;
@@ -129,73 +127,37 @@ private:
        std::string ConcatenatePaths ( const std::string& path1,
                                       const std::string& path2 ) const;
        std::string GenerateGccDefineParameters () const;
-       std::string GenerateCompilerParametersFromVector ( const std::vector<CompilerFlag*>& compilerFlags ) const;
+       std::string GenerateCompilerParametersFromVector ( const std::vector<CompilerFlag*>& compilerFlags, const CompilerType type ) const;
        std::string GenerateLinkerParametersFromVector ( const std::vector<LinkerFlag*>& linkerFlags ) const;
        std::string GenerateImportLibraryDependenciesFromVector ( const std::vector<Library*>& libraries );
        std::string GenerateLinkerParameters () const;
        void GenerateMacro ( const char* assignmentOperation,
                             const std::string& macro,
-                            const IfableData& data );
+                            const IfableData& data,
+                            std::set<const Define *>* used_defs,
+                            bool generatingCompilerMacro );
        void GenerateMacros ( const char* op,
                              const IfableData& data,
-                             const std::vector<LinkerFlag*>* linkerFlags );
+                             const std::vector<LinkerFlag*>* linkerFlags,
+                             std::set<const Define *>& used_defs );
+       void GenerateSourceMacros ( const char* assignmentOperation,
+                                   const IfableData& data );
        void GenerateObjectMacros ( const char* assignmentOperation,
-                                   const IfableData& data,
-                                   const std::vector<LinkerFlag*>* linkerFlags );
+                                   const IfableData& data );
        std::string GenerateGccIncludeParameters () const;
        std::string GenerateGccParameters () const;
        std::string GenerateNasmParameters () const;
        const FileLocation* GetPrecompiledHeaderFilename () const;
        void GenerateGccCommand ( const FileLocation* sourceFile,
-                                 const std::string& extraDependencies,
-                                 const std::string& cc,
-                                 const std::string& cflagsMacro );
-       void GenerateGccAssemblerCommand ( const FileLocation* sourceFile,
-                                          const std::string& cc,
-                                          const std::string& cflagsMacro );
-       void GenerateNasmCommand ( const FileLocation* sourceFile,
-                                  const std::string& nasmflagsMacro );
-       void GenerateWindresCommand ( const FileLocation* sourceFile,
-                                     const std::string& windresflagsMacro );
-       void GenerateWinebuildCommands ( const FileLocation* sourceFile );
-       std::string GetWidlFlags ( const CompilationUnit& compilationUnit );
-       void GenerateWidlCommandsServer (
-               const CompilationUnit& compilationUnit,
-               const std::string& widlflagsMacro );
-       void GenerateWidlCommandsClient (
-               const CompilationUnit& compilationUnit,
-               const std::string& widlflagsMacro );
-       void GenerateWidlCommandsIdlHeader (
-               const CompilationUnit& compilationUnit,
-               const std::string& widlflagsMacro );
-       void GenerateWidlCommandsEmbeddedTypeLib (
-               const CompilationUnit& compilationUnit,
-               const std::string& widlflagsMacro );
-       void GenerateWidlCommands ( const CompilationUnit& compilationUnit,
-                                   const std::string& widlflagsMacro );
+                                 const Rule *rule,
+                                 const std::string& extraDependencies );
        void GenerateCommands ( const CompilationUnit& compilationUnit,
-                               const std::string& extraDependencies,
-                               const std::string& cc,
-                               const std::string& cppc,
-                               const std::string& cflagsMacro,
-                               const std::string& nasmflagsMacro,
-                               const std::string& windresflagsMacro,
-                               const std::string& widlflagsMacro );
-       void GenerateObjectFileTargets ( const IfableData& data,
-                                        const std::string& cc,
-                                        const std::string& cppc,
-                                        const std::string& cflagsMacro,
-                                        const std::string& nasmflagsMacro,
-                                        const std::string& windresflagsMacro,
-                                        const std::string& widlflagsMacro );
-       void GenerateObjectFileTargets ( const std::string& cc,
-                                        const std::string& cppc,
-                                        const std::string& cflagsMacro,
-                                        const std::string& nasmflagsMacro,
-                                        const std::string& windresflagsMacro,
-                                        const std::string& widlflagsMacro );
-       const FileLocation* GenerateArchiveTarget ( const std::string& ar,
-                                                   const std::string& objs_macro ) const;
+                               const std::string& extraDependencies );
+       void GenerateObjectFileTargets ( const IfableData& data );
+       void GenerateObjectFileTargets ();
+       const FileLocation* GenerateArchiveTarget ();
+       void GetMcObjectDependencies   ( std::vector<FileLocation>& dependencies,
+                                        const FileLocation *file ) const;
        void GetSpecObjectDependencies ( std::vector<FileLocation>& dependencies,
                                         const FileLocation *file ) const;
        void GetWidlObjectDependencies ( std::vector<FileLocation>& dependencies,
@@ -207,10 +169,13 @@ private:
        void GenerateBuildNonSymbolStrippedCode ();
        void CleanupCompilationUnitVector ( std::vector<CompilationUnit*>& compilationUnits );
        void GetRpcHeaderDependencies ( std::vector<FileLocation>& dependencies ) const;
+       void GetMcHeaderDependencies ( std::vector<FileLocation>& dependencies ) const;
        static std::string GetPropertyValue ( const Module& module, const std::string& name );
        const FileLocation* GetRpcServerHeaderFilename ( const FileLocation *base ) const;
        const FileLocation* GetRpcClientHeaderFilename ( const FileLocation *base ) const;
+       const FileLocation* GetRpcProxyHeaderFilename ( const FileLocation *base ) const;
        const FileLocation* GetIdlHeaderFilename ( const FileLocation *base ) const;
+       const FileLocation* GetMcHeaderFilename ( const FileLocation *base ) const;
        std::string GetModuleCleanTarget ( const Module& module ) const;
        void GetReferencedObjectLibraryModuleCleanTargets ( std::vector<std::string>& moduleNames ) const;
 public:
@@ -221,6 +186,7 @@ public:
        std::string windresflagsMacro;
        std::string widlflagsMacro;
        std::string linkerflagsMacro;
+       std::string sourcesMacro;
        std::string objectsMacro;
        std::string libsMacro;
        std::string linkDepsMacro;
@@ -260,6 +226,17 @@ private:
 };
 
 
+class MingwHostStaticLibraryModuleHandler : public MingwModuleHandler
+{
+public:
+       MingwHostStaticLibraryModuleHandler ( const Module& module );
+       virtual HostType DefaultHost() { return HostTrue; }
+       virtual void Process ();
+private:
+       void GenerateHostStaticLibraryModuleTarget ();
+};
+
+
 class MingwObjectLibraryModuleHandler : public MingwModuleHandler
 {
 public:
@@ -483,6 +460,16 @@ public:
        virtual void Process ();
 };
 
+
+class MingwRpcProxyModuleHandler : public MingwModuleHandler
+{
+public:
+       MingwRpcProxyModuleHandler ( const Module& module );
+       virtual HostType DefaultHost() { return HostFalse; }
+       virtual void Process ();
+};
+
+
 class MingwAliasModuleHandler : public MingwModuleHandler
 {
 public:
@@ -499,6 +486,14 @@ public:
        virtual void Process ();
 };
 
+class MingwCabinetModuleHandler : public MingwModuleHandler
+{
+public:
+       MingwCabinetModuleHandler ( const Module& module );
+       virtual HostType DefaultHost() { return HostFalse; }
+       virtual void Process ();
+};
+
 class MingwEmbeddedTypeLibModuleHandler : public MingwModuleHandler
 {
 public: