fixed some dependency issues, verbose support, 'make clean' gets more
[reactos.git] / reactos / tools / rbuild / backend / mingw / modulehandler.h
index c1eb8e5..3bdb2e9 100644 (file)
@@ -11,6 +11,8 @@ ReplaceExtension ( const std::string& filename,
 class MingwModuleHandler\r
 {\r
 public:\r
+       typedef std::vector<std::string> string_list;\r
+\r
        static std::map<ModuleType,MingwModuleHandler*>* handler_map;\r
        static int ref;\r
 \r
@@ -20,10 +22,12 @@ public:
        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
+       virtual void Process ( const Module& module, string_list& clean_files ) = 0;\r
        bool IncludeDirectoryTarget ( const std::string& directory ) const;\r
        void GenerateDirectoryTargets () const;\r
        static std::string GetObjectFilename ( const std::string& sourceFilename );\r
+       void GenerateCleanTarget ( const Module& module,\r
+                                  const string_list& clean_files ) const;\r
 protected:\r
        const std::string &PassThruCacheDirectory ( const std::string &f ) const;\r
        std::string GetWorkingDirectory () const;\r
@@ -32,7 +36,6 @@ protected:
        std::string GetModuleArchiveFilename ( const Module& module ) const;\r
        bool IsGeneratedFile ( const File& file ) const;\r
        std::string GetImportLibraryDependency ( const Module& importedModule ) const;\r
-       std::string GetImportLibraryDependencies ( const Module& module ) const;\r
        std::string GetModuleDependencies ( const Module& module ) const;\r
        std::string GetAllDependencies ( const Module& module ) const;\r
        std::string GetSourceFilenames ( const Module& module,\r
@@ -41,11 +44,14 @@ protected:
        std::string GetSourceFilenamesWithoutGeneratedFiles ( const Module& module ) const;\r
 \r
        std::string GetObjectFilenames ( const Module& module ) const;\r
-       void GenerateMacrosAndTargetsHost ( const Module& module ) const;\r
-       void GenerateMacrosAndTargetsTarget ( const Module& module ) const;\r
+       void GenerateMacrosAndTargetsHost ( const Module& module,\r
+                                           string_list& clean_files ) const;\r
+       void GenerateMacrosAndTargetsTarget ( const Module& module,\r
+                                             string_list& clean_files ) const;\r
        void GenerateMacrosAndTargetsTarget ( const Module& module,\r
                                              const std::string* cflags,\r
-                                             const std::string* nasmflags ) const;\r
+                                             const std::string* nasmflags,\r
+                                             string_list& clean_files ) const;\r
        std::string GetInvocationDependencies ( const Module& module ) const;\r
        void GenerateInvocations ( const Module& module ) const;\r
        \r
@@ -53,12 +59,16 @@ protected:
        void GeneratePreconditionDependencies ( const Module& module ) const;\r
        std::string GetCFlagsMacro ( const Module& module ) const;\r
        std::string GetObjectsMacro ( const Module& module ) const;\r
+       std::string GetLinkingDependenciesMacro ( const Module& module ) const;\r
+       std::string GetLibsMacro ( const Module& module ) const;\r
        std::string GetLinkerMacro ( const Module& module ) const;\r
        void GenerateLinkerCommand ( const Module& module,\r
                                     const std::string& linker,\r
                                     const std::string& linkerParameters,\r
-                                    const std::string& objectFilenames ) const;\r
-       void GenerateImportLibraryTargetIfNeeded ( const Module& module ) const;\r
+                                    const std::string& objectsMacro,\r
+                                    const std::string& libsMacro,\r
+                                    string_list& clean_files ) const;\r
+       void GenerateImportLibraryTargetIfNeeded ( const Module& module, string_list& clean_files ) const;\r
        std::string GetDefinitionDependencies ( const Module& module ) const;\r
        std::string GetLinkingDependencies ( const Module& module ) const;\r
        bool IsCPlusPlusModule ( const Module& module ) const;\r
@@ -72,6 +82,7 @@ private:
        std::string GenerateGccIncludeParametersFromVector ( const std::vector<Include*>& includes ) const;\r
        std::string GenerateCompilerParametersFromVector ( const std::vector<CompilerFlag*>& compilerFlags ) const;\r
        std::string GenerateLinkerParametersFromVector ( const std::vector<LinkerFlag*>& linkerFlags ) const;\r
+       std::string GenerateImportLibraryDependenciesFromVector ( const std::vector<Library*>& libraries ) const;\r
        std::string GenerateLinkerParameters ( const Module& module ) const;\r
        void GenerateMacro ( const char* assignmentOperation,\r
                             const std::string& macro,\r
@@ -82,6 +93,7 @@ private:
                              const std::vector<File*>& files,\r
                              const std::vector<Include*>& includes,\r
                              const std::vector<Define*>& defines,\r
+                             const std::vector<Library*>& libraries,\r
                              const std::vector<CompilerFlag*>* compilerFlags,\r
                              const std::vector<LinkerFlag*>* linkerFlags,\r
                              const std::vector<If*>& ifs,\r
@@ -89,13 +101,17 @@ private:
                              const std::string& nasmflags_macro,\r
                              const std::string& windresflags_macro,\r
                              const std::string& linkerflags_macro,\r
-                             const std::string& objs_macro) const;\r
+                             const std::string& objs_macro,\r
+                             const std::string& libs_macro,\r
+                             const std::string& linkdeps_macro ) const;\r
        void GenerateMacros ( const Module& module,\r
                              const std::string& cflags_macro,\r
                              const std::string& nasmflags_macro,\r
                              const std::string& windresflags_macro,\r
                              const std::string& linkerflags_macro,\r
-                             const std::string& objs_macro) const;\r
+                             const std::string& objs_macro,\r
+                             const std::string& libs_macro,\r
+                             const std::string& linkDepsMacro ) 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
@@ -114,14 +130,16 @@ private:
                                      const std::string& sourceFilename,\r
                                      const std::string& windresflagsMacro ) const;\r
        void GenerateWinebuildCommands ( const Module& module,\r
-                                        const std::string& sourceFilename ) const;\r
+                                        const std::string& sourceFilename,\r
+                                        string_list& clean_files ) const;\r
        void GenerateCommands ( const Module& module,\r
                                const std::string& sourceFilename,\r
                                const std::string& cc,\r
                                const std::string& cppc,\r
                                const std::string& cflagsMacro,\r
                                const std::string& nasmflagsMacro,\r
-                               const std::string& windresflagsMacro ) const;\r
+                               const std::string& windresflagsMacro,\r
+                               string_list& clean_files ) const;\r
        void GenerateObjectFileTargets ( const Module& module,\r
                                         const std::vector<File*>& files,\r
                                         const std::vector<If*>& ifs,\r
@@ -129,14 +147,16 @@ private:
                                         const std::string& cppc,\r
                                         const std::string& cflagsMacro,\r
                                         const std::string& nasmflagsMacro,\r
-                                        const std::string& windresflagsMacro ) const;\r
+                                        const std::string& windresflagsMacro,\r
+                                        string_list& clean_files ) const;\r
        void GenerateObjectFileTargets ( const Module& module,\r
                                         const std::string& cc,\r
                                         const std::string& cppc,\r
                                         const std::string& cflagsMacro,\r
                                         const std::string& nasmflagsMacro,\r
-                                        const std::string& windresflagsMacro ) const;\r
-       void GetCleanTargets ( std::vector<std::string>& out,\r
+                                        const std::string& windresflagsMacro,\r
+                                        string_list& clean_files ) const;\r
+       void GetCleanTargets ( string_list& out,\r
                               const std::vector<File*>& files,\r
                               const std::vector<If*>& ifs ) const;\r
        std::string GenerateArchiveTarget ( const Module& module,\r
@@ -147,7 +167,8 @@ private:
                                        const std::string& cppc,\r
                                        const std::string& ar,\r
                                        const std::string* clags,\r
-                                       const std::string* nasmflags ) const;\r
+                                       const std::string* nasmflags,\r
+                                       string_list& clean_files ) const;\r
        std::string GetSpecObjectDependencies ( const std::string& filename ) const;\r
        std::string GetDefaultDependencies ( const Module& module ) const;\r
 };\r
@@ -157,9 +178,9 @@ class MingwBuildToolModuleHandler : public MingwModuleHandler
 {\r
 public:\r
        MingwBuildToolModuleHandler ();\r
-       virtual void Process ( const Module& module );\r
+       virtual void Process ( const Module& module, string_list& clean_files );\r
 private:\r
-       void GenerateBuildToolModuleTarget ( const Module& module );\r
+       void GenerateBuildToolModuleTarget ( const Module& module, string_list& clean_files );\r
 };\r
 \r
 \r
@@ -167,9 +188,9 @@ class MingwKernelModuleHandler : public MingwModuleHandler
 {\r
 public:\r
        MingwKernelModuleHandler ();\r
-       virtual void Process ( const Module& module );\r
+       virtual void Process ( const Module& module, string_list& clean_files );\r
 private:\r
-       void GenerateKernelModuleTarget ( const Module& module );\r
+       void GenerateKernelModuleTarget ( const Module& module, string_list& clean_files );\r
 };\r
 \r
 \r
@@ -177,9 +198,9 @@ class MingwStaticLibraryModuleHandler : public MingwModuleHandler
 {\r
 public:\r
        MingwStaticLibraryModuleHandler ();\r
-       virtual void Process ( const Module& module );\r
+       virtual void Process ( const Module& module, string_list& clean_files );\r
 private:\r
-       void GenerateStaticLibraryModuleTarget ( const Module& module );\r
+       void GenerateStaticLibraryModuleTarget ( const Module& module, string_list& clean_files );\r
 };\r
 \r
 \r
@@ -187,9 +208,9 @@ class MingwObjectLibraryModuleHandler : public MingwModuleHandler
 {\r
 public:\r
        MingwObjectLibraryModuleHandler ();\r
-       virtual void Process ( const Module& module );\r
+       virtual void Process ( const Module& module, string_list& clean_files );\r
 private:\r
-       void GenerateObjectLibraryModuleTarget ( const Module& module );\r
+       void GenerateObjectLibraryModuleTarget ( const Module& module, string_list& clean_files );\r
 };\r
 \r
 \r
@@ -197,9 +218,9 @@ class MingwKernelModeDLLModuleHandler : public MingwModuleHandler
 {\r
 public:\r
        MingwKernelModeDLLModuleHandler ();\r
-       virtual void Process ( const Module& module );\r
+       virtual void Process ( const Module& module, string_list& clean_files );\r
 private:\r
-       void GenerateKernelModeDLLModuleTarget ( const Module& module );\r
+       void GenerateKernelModeDLLModuleTarget ( const Module& module, string_list& clean_files );\r
 };\r
 \r
 \r
@@ -207,9 +228,9 @@ class MingwKernelModeDriverModuleHandler : public MingwModuleHandler
 {\r
 public:\r
        MingwKernelModeDriverModuleHandler ();\r
-       virtual void Process ( const Module& module );\r
+       virtual void Process ( const Module& module, string_list& clean_files );\r
 private:\r
-       void GenerateKernelModeDriverModuleTarget ( const Module& module );\r
+       void GenerateKernelModeDriverModuleTarget ( const Module& module, string_list& clean_files );\r
 };\r
 \r
 \r
@@ -217,9 +238,9 @@ class MingwNativeDLLModuleHandler : public MingwModuleHandler
 {\r
 public:\r
        MingwNativeDLLModuleHandler ();\r
-       virtual void Process ( const Module& module );\r
+       virtual void Process ( const Module& module, string_list& clean_files );\r
 private:\r
-       void GenerateNativeDLLModuleTarget ( const Module& module );\r
+       void GenerateNativeDLLModuleTarget ( const Module& module, string_list& clean_files );\r
 };\r
 \r
 \r
@@ -227,9 +248,9 @@ class MingwNativeCUIModuleHandler : public MingwModuleHandler
 {\r
 public:\r
        MingwNativeCUIModuleHandler ();\r
-       virtual void Process ( const Module& module );\r
+       virtual void Process ( const Module& module, string_list& clean_files );\r
 private:\r
-       void GenerateNativeCUIModuleTarget ( const Module& module );\r
+       void GenerateNativeCUIModuleTarget ( const Module& module, string_list& clean_files );\r
 };\r
 \r
 \r
@@ -237,10 +258,10 @@ class MingwWin32DLLModuleHandler : public MingwModuleHandler
 {\r
 public:\r
        MingwWin32DLLModuleHandler ();\r
-       virtual void Process ( const Module& module );\r
+       virtual void Process ( const Module& module, string_list& clean_files );\r
 private:\r
-       void GenerateExtractWineDLLResourcesTarget ( const Module& module );\r
-       void GenerateWin32DLLModuleTarget ( const Module& module );\r
+       void GenerateExtractWineDLLResourcesTarget ( const Module& module, string_list& clean_files );\r
+       void GenerateWin32DLLModuleTarget ( const Module& module, string_list& clean_files );\r
 };\r
 \r
 \r
@@ -248,9 +269,9 @@ class MingwWin32CUIModuleHandler : public MingwModuleHandler
 {\r
 public:\r
        MingwWin32CUIModuleHandler ();\r
-       virtual void Process ( const Module& module );\r
+       virtual void Process ( const Module& module, string_list& clean_files );\r
 private:\r
-       void GenerateWin32CUIModuleTarget ( const Module& module );\r
+       void GenerateWin32CUIModuleTarget ( const Module& module, string_list& clean_files );\r
 };\r
 \r
 \r
@@ -258,9 +279,9 @@ class MingwWin32GUIModuleHandler : public MingwModuleHandler
 {\r
 public:\r
        MingwWin32GUIModuleHandler ();\r
-       virtual void Process ( const Module& module );\r
+       virtual void Process ( const Module& module, string_list& clean_files );\r
 private:\r
-       void GenerateWin32GUIModuleTarget ( const Module& module );\r
+       void GenerateWin32GUIModuleTarget ( const Module& module, string_list& clean_files );\r
 };\r
 \r
 \r
@@ -268,9 +289,9 @@ class MingwBootLoaderModuleHandler : public MingwModuleHandler
 {\r
 public:\r
        MingwBootLoaderModuleHandler ();\r
-       virtual void Process ( const Module& module );\r
+       virtual void Process ( const Module& module, string_list& clean_files );\r
 private:\r
-       void GenerateBootLoaderModuleTarget ( const Module& module );\r
+       void GenerateBootLoaderModuleTarget ( const Module& module, string_list& clean_files );\r
 };\r
 \r
 \r
@@ -278,9 +299,9 @@ class MingwBootSectorModuleHandler : public MingwModuleHandler
 {\r
 public:\r
        MingwBootSectorModuleHandler ();\r
-       virtual void Process ( const Module& module );\r
+       virtual void Process ( const Module& module, string_list& clean_files );\r
 private:\r
-       void GenerateBootSectorModuleTarget ( const Module& module );\r
+       void GenerateBootSectorModuleTarget ( const Module& module, string_list& clean_files );\r
 };\r
 \r
 \r
@@ -288,9 +309,9 @@ class MingwIsoModuleHandler : public MingwModuleHandler
 {\r
 public:\r
        MingwIsoModuleHandler ();\r
-       virtual void Process ( const Module& module );\r
+       virtual void Process ( const Module& module, string_list& clean_files );\r
 private:\r
-       void GenerateIsoModuleTarget ( const Module& module );\r
+       void GenerateIsoModuleTarget ( const Module& module, string_list& clean_files );\r
        std::string GetBootstrapCdDirectories ( const std::string bootcdDirectory,\r
                                                const Module& module ) const;\r
        std::string GetNonModuleCdDirectories ( const std::string bootcdDirectory,\r