From b657e0b0bf8cca00e46750883b6db4b58dcb1ad1 Mon Sep 17 00:00:00 2001 From: Royce Mitchell III Date: Thu, 13 Jan 2005 05:01:22 +0000 Subject: [PATCH] generate clean rules svn path=/branches/xmlbuildsystem/; revision=13019 --- reactos/tools/rbuild/backend/mingw/mingw.cpp | 3 ++ .../rbuild/backend/mingw/modulehandler.cpp | 51 +++++++++++++++---- .../rbuild/backend/mingw/modulehandler.h | 9 ++-- 3 files changed, 51 insertions(+), 12 deletions(-) diff --git a/reactos/tools/rbuild/backend/mingw/mingw.cpp b/reactos/tools/rbuild/backend/mingw/mingw.cpp index 73fc90620f1..4c9e01ba747 100644 --- a/reactos/tools/rbuild/backend/mingw/mingw.cpp +++ b/reactos/tools/rbuild/backend/mingw/mingw.cpp @@ -147,6 +147,9 @@ MingwBackend::GenerateGlobalVariables () ProjectNode.defines, ProjectNode.ifs ); fprintf ( fMakefile, "\n" ); + + fprintf ( fMakefile, ".PHONY: clean\n\n" ); + //fprintf ( fMakefile, "clean:\n\t-@${rm} $(PROJECT_CLEAN)\n\n" ); } void diff --git a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp index 2803ef7c50c..75799fde66d 100644 --- a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp +++ b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp @@ -139,15 +139,20 @@ MingwModuleHandler::GetAllDependencies ( const Module& module ) const string MingwModuleHandler::GetSourceFilenames ( const Module& module ) const { - if ( module.files.size () == 0 ) - return ""; - + size_t i; + string sourceFilenames ( "" ); - for ( size_t i = 0; i < module.files.size (); i++ ) + for ( i = 0; i < module.files.size (); i++ ) + sourceFilenames += " " + module.files[i]->name; + vector ifs = module.ifs; + for ( i = 0; i < ifs.size(); i++ ) { - if ( sourceFilenames.size () > 0 ) - sourceFilenames += " "; - sourceFilenames += module.files[i]->name; + size_t j; + If& rIf = *ifs[i]; + for ( j = 0; j < rIf.ifs.size(); j++ ) + ifs.push_back ( rIf.ifs[j] ); + for ( j = 0; j < rIf.files.size(); j++ ) + sourceFilenames += " " + rIf.files[j]->name; } return sourceFilenames; } @@ -484,12 +489,25 @@ MingwModuleHandler::GenerateObjectFileTargets ( const Module& module, } void +MingwModuleHandler::GetCleanTargets ( vector& out, + const vector& files, + const vector& ifs ) const +{ + size_t i; + + for ( i = 0; i < files.size(); i++ ) + out.push_back ( GetObjectFilename(files[i]->name) ); + + for ( i = 0; i < ifs.size(); i++ ) + GetCleanTargets ( out, ifs[i]->files, ifs[i]->ifs ); +} + +string MingwModuleHandler::GenerateArchiveTarget ( const Module& module, const string& ar, const string& objs_macro ) const { string archiveFilename = GetModuleArchiveFilename ( module ); - string sourceFilenames = GetSourceFilenames ( module ); fprintf ( fMakefile, "%s: %s\n", @@ -501,6 +519,8 @@ MingwModuleHandler::GenerateArchiveTarget ( const Module& module, ar.c_str (), archiveFilename.c_str (), objs_macro.c_str ()); + + return archiveFilename; } void @@ -527,8 +547,21 @@ MingwModuleHandler::GenerateMacrosAndTargets ( nasmflagsMacro = ssprintf("$(%s)",nasmflagsMacro.c_str()); objectsMacro = ssprintf("$(%s)",objectsMacro.c_str()); - GenerateArchiveTarget ( module, ar, objectsMacro ); + string ar_target = GenerateArchiveTarget ( module, ar, objectsMacro ); GenerateObjectFileTargets ( module, cc, cflagsMacro, nasmflagsMacro ); + + vector clean_files; + clean_files.push_back ( ar_target ); + GetCleanTargets ( clean_files, module.files, module.ifs ); + + fprintf ( fMakefile, "clean::\n\t-@$(rm)" ); + for ( size_t i = 0; i < clean_files.size(); i++ ) + { + if ( 9==(i%10) ) + fprintf ( fMakefile, " 2>NUL\n\t-@$(rm)" ); + fprintf ( fMakefile, " %s", clean_files[i].c_str() ); + } + fprintf ( fMakefile, " 2>NUL\n\n" ); } void diff --git a/reactos/tools/rbuild/backend/mingw/modulehandler.h b/reactos/tools/rbuild/backend/mingw/modulehandler.h index ff3b27ad370..c8319127514 100644 --- a/reactos/tools/rbuild/backend/mingw/modulehandler.h +++ b/reactos/tools/rbuild/backend/mingw/modulehandler.h @@ -88,9 +88,12 @@ private: const std::string& cc, const std::string& cflagsMacro, const std::string& nasmflagsMacro ) const; - void GenerateArchiveTarget ( const Module& module, - const std::string& ar, - const std::string& objs_macro ) const; + void GetCleanTargets ( std::vector& out, + const std::vector& files, + const std::vector& ifs ) const; + std::string GenerateArchiveTarget ( const Module& module, + const std::string& ar, + const std::string& objs_macro ) const; void GenerateMacrosAndTargets ( const Module& module, const std::string& cc, const std::string& ar ) const; -- 2.17.1