generate clean rules
authorRoyce Mitchell III <royce3@ev1.net>
Thu, 13 Jan 2005 05:01:22 +0000 (05:01 +0000)
committerRoyce Mitchell III <royce3@ev1.net>
Thu, 13 Jan 2005 05:01:22 +0000 (05:01 +0000)
svn path=/branches/xmlbuildsystem/; revision=13019

reactos/tools/rbuild/backend/mingw/mingw.cpp
reactos/tools/rbuild/backend/mingw/modulehandler.cpp
reactos/tools/rbuild/backend/mingw/modulehandler.h

index 73fc906..4c9e01b 100644 (file)
@@ -147,6 +147,9 @@ MingwBackend::GenerateGlobalVariables ()
                ProjectNode.defines,\r
                ProjectNode.ifs );\r
        fprintf ( fMakefile, "\n" );\r
                ProjectNode.defines,\r
                ProjectNode.ifs );\r
        fprintf ( fMakefile, "\n" );\r
+\r
+       fprintf ( fMakefile, ".PHONY: clean\n\n" );\r
+       //fprintf ( fMakefile, "clean:\n\t-@${rm} $(PROJECT_CLEAN)\n\n" );\r
 }\r
 \r
 void\r
 }\r
 \r
 void\r
index 2803ef7..75799fd 100644 (file)
@@ -139,15 +139,20 @@ MingwModuleHandler::GetAllDependencies ( const Module& module ) const
 string\r
 MingwModuleHandler::GetSourceFilenames ( const Module& module ) const\r
 {\r
 string\r
 MingwModuleHandler::GetSourceFilenames ( const Module& module ) const\r
 {\r
-       if ( module.files.size () == 0 )\r
-               return "";\r
-       \r
+       size_t i;\r
+\r
        string sourceFilenames ( "" );\r
        string sourceFilenames ( "" );\r
-       for ( size_t i = 0; i < module.files.size (); i++ )\r
+       for ( i = 0; i < module.files.size (); i++ )\r
+               sourceFilenames += " " + module.files[i]->name;\r
+       vector<If*> ifs = module.ifs;\r
+       for ( i = 0; i < ifs.size(); i++ )\r
        {\r
        {\r
-               if ( sourceFilenames.size () > 0 )\r
-                       sourceFilenames += " ";\r
-               sourceFilenames += module.files[i]->name;\r
+               size_t j;\r
+               If& rIf = *ifs[i];\r
+               for ( j = 0; j < rIf.ifs.size(); j++ )\r
+                       ifs.push_back ( rIf.ifs[j] );\r
+               for ( j = 0; j < rIf.files.size(); j++ )\r
+                       sourceFilenames += " " + rIf.files[j]->name;\r
        }\r
        return sourceFilenames;\r
 }\r
        }\r
        return sourceFilenames;\r
 }\r
@@ -484,12 +489,25 @@ MingwModuleHandler::GenerateObjectFileTargets ( const Module& module,
 }\r
 \r
 void\r
 }\r
 \r
 void\r
+MingwModuleHandler::GetCleanTargets ( vector<string>& out,\r
+                                      const vector<File*>& files,\r
+                                      const vector<If*>& ifs ) const\r
+{\r
+       size_t i;\r
+\r
+       for ( i = 0; i < files.size(); i++ )\r
+               out.push_back ( GetObjectFilename(files[i]->name) );\r
+\r
+       for ( i = 0; i < ifs.size(); i++ )\r
+               GetCleanTargets ( out, ifs[i]->files, ifs[i]->ifs );\r
+}\r
+\r
+string\r
 MingwModuleHandler::GenerateArchiveTarget ( const Module& module,\r
                                             const string& ar,\r
                                             const string& objs_macro ) const\r
 {\r
        string archiveFilename = GetModuleArchiveFilename ( module );\r
 MingwModuleHandler::GenerateArchiveTarget ( const Module& module,\r
                                             const string& ar,\r
                                             const string& objs_macro ) const\r
 {\r
        string archiveFilename = GetModuleArchiveFilename ( module );\r
-       string sourceFilenames = GetSourceFilenames ( module );\r
        \r
        fprintf ( fMakefile,\r
                  "%s: %s\n",\r
        \r
        fprintf ( fMakefile,\r
                  "%s: %s\n",\r
@@ -501,6 +519,8 @@ MingwModuleHandler::GenerateArchiveTarget ( const Module& module,
                  ar.c_str (),\r
                  archiveFilename.c_str (),\r
                  objs_macro.c_str ());\r
                  ar.c_str (),\r
                  archiveFilename.c_str (),\r
                  objs_macro.c_str ());\r
+\r
+       return archiveFilename;\r
 }\r
 \r
 void\r
 }\r
 \r
 void\r
@@ -527,8 +547,21 @@ MingwModuleHandler::GenerateMacrosAndTargets (
        nasmflagsMacro = ssprintf("$(%s)",nasmflagsMacro.c_str());\r
        objectsMacro = ssprintf("$(%s)",objectsMacro.c_str());\r
 \r
        nasmflagsMacro = ssprintf("$(%s)",nasmflagsMacro.c_str());\r
        objectsMacro = ssprintf("$(%s)",objectsMacro.c_str());\r
 \r
-       GenerateArchiveTarget ( module, ar, objectsMacro );\r
+       string ar_target = GenerateArchiveTarget ( module, ar, objectsMacro );\r
        GenerateObjectFileTargets ( module, cc, cflagsMacro, nasmflagsMacro );\r
        GenerateObjectFileTargets ( module, cc, cflagsMacro, nasmflagsMacro );\r
+\r
+       vector<string> clean_files;\r
+       clean_files.push_back ( ar_target );\r
+       GetCleanTargets ( clean_files, module.files, module.ifs );\r
+\r
+       fprintf ( fMakefile, "clean::\n\t-@$(rm)" );\r
+       for ( size_t i = 0; i < clean_files.size(); i++ )\r
+       {\r
+               if ( 9==(i%10) )\r
+                       fprintf ( fMakefile, " 2>NUL\n\t-@$(rm)" );\r
+               fprintf ( fMakefile, " %s", clean_files[i].c_str() );\r
+       }\r
+       fprintf ( fMakefile, " 2>NUL\n\n" );\r
 }\r
 \r
 void\r
 }\r
 \r
 void\r
index ff3b27a..c831912 100644 (file)
@@ -88,9 +88,12 @@ private:
                                         const std::string& cc,\r
                                         const std::string& cflagsMacro,\r
                                         const std::string& nasmflagsMacro ) 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,\r
-                                    const std::string& objs_macro ) const;\r
+       void GetCleanTargets ( std::vector<std::string>& out,\r
+                              const std::vector<File*>& files,\r
+                              const std::vector<If*>& ifs ) const;\r
+       std::string GenerateArchiveTarget ( const Module& module,\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
        void GenerateMacrosAndTargets ( const Module& module,\r
                                        const std::string& cc,\r
                                        const std::string& ar ) const;\r