* Correct dependencies for ROS_INTERMEDIATE <> . in generated makefile * GNU make don't support depending on a directory, so simulate the dependency using a file Modified: branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/mingw.cpp Modified: branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/mingw.h Modified: branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler .cpp Modified: branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler .h _____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/mingw.cpp --- branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/mingw.cpp 2005-03-13 21:34:15 UTC (rev 14033) +++ branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/mingw.cpp 2005-03-13 21:34:47 UTC (rev 14034) @@ -6,7 +6,10 @@
using std::string; using std::vector; +using std::set;
+typedef set<string> set_string; + static class MingwFactory : public Backend::Factory { public: @@ -24,6 +27,19 @@ }
void +MingwBackend::CreateDirectoryTargetIfNotYetCreated ( const string& directory ) +{ + directories.insert ( directory ); +} + +const string +MingwBackend::GetDirectoryDependency ( const string& directory ) +{ + return directory + SSEP "$(CREATED)"; +} + + +void MingwBackend::Process () { DetectPCHSupport(); @@ -39,6 +55,7 @@ Module& module = *ProjectNode.modules[i]; ProcessModule ( module ); } + GenerateDirectoryTargets (); CheckAutomaticDependencies (); CloseMakefile (); } @@ -160,8 +177,7 @@ void MingwBackend::GenerateGlobalVariables () const { -#define TOOL_PREFIX "$(Q)." SSEP "tools" SSEP - fprintf ( fMakefile, "mkdir = " TOOL_PREFIX "rmkdir" EXEPOSTFIX "\n" ); +#define TOOL_PREFIX "$(Q)$(INTERMEDIATE)tools" SSEP fprintf ( fMakefile, "winebuild = " TOOL_PREFIX "winebuild" SSEP "winebuild" EXEPOSTFIX "\n" ); fprintf ( fMakefile, "bin2res = " TOOL_PREFIX "bin2res" SSEP "bin2res" EXEPOSTFIX "\n" ); fprintf ( fMakefile, "cabman = " TOOL_PREFIX "cabman" SSEP "cabman" EXEPOSTFIX "\n" ); @@ -230,24 +246,10 @@ void MingwBackend::GenerateInitTarget () const { - string tools = "$(ROS_INTERMEDIATE)." SSEP "tools"; fprintf ( fMakefile, - "INIT = %s %s\n", - tools.c_str (), + "INIT = %s\n", GetBuildToolDependencies ().c_str () ); - fprintf ( fMakefile, - "%s:\n", - tools.c_str () ); - fprintf ( fMakefile, - "ifneq ($(ROS_INTERMEDIATE),)\n" ); - fprintf ( fMakefile, - "\t${nmkdir} $(ROS_INTERMEDIATE)\n" ); - fprintf ( fMakefile, - "endif\n" ); - fprintf ( fMakefile, - "\t${nmkdir} $(ROS_INTERMEDIATE)." SSEP "tools\n" ); - fprintf ( fMakefile, "\n" ); }
@@ -301,11 +303,12 @@ }
void -MingwBackend::ProcessModule ( Module& module ) const +MingwBackend::ProcessModule ( Module& module ) { - MingwModuleHandler* h = MingwModuleHandler::LookupHandler ( + MingwModuleHandler* h = MingwModuleHandler::InstanciateHandler ( module.node.location, - module.type ); + module.type, + this ); MingwModuleHandler::string_list clean_files; if ( module.host == HostDefault ) { @@ -314,13 +317,46 @@ } h->Process ( module, clean_files ); h->GenerateCleanTarget ( module, clean_files ); - h->GenerateDirectoryTargets (); }
+bool +MingwBackend::IncludeDirectoryTarget ( const string& directory ) const +{ + if ( directory == "$(INTERMEDIATE)tools") + return false; + else + return true; +} + +void +MingwBackend::GenerateDirectoryTargets () +{ + if ( directories.size () == 0 ) + return; + + set_string::iterator i; + for ( i = directories.begin (); + i != directories.end (); + i++ ) + { + if ( IncludeDirectoryTarget ( *i ) ) + { + fprintf ( fMakefile, + "%s:\n", + GetDirectoryDependency ( *i ).c_str () ); + fprintf ( fMakefile, + "\t${mkdir} %s\n\n", + i->c_str () ); + } + } + + directories.clear (); +} + string FixupTargetFilename ( const string& targetFilename ) { - return string("$(ROS_INTERMEDIATE)") + NormalizeFilename ( targetFilename ); + return string("$(INTERMEDIATE)") + NormalizeFilename ( targetFilename ); }
void _____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/mingw.h --- branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/mingw.h 2005-03-13 21:34:15 UTC (rev 14033) +++ branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/mingw.h 2005-03-13 21:34:47 UTC (rev 14034) @@ -10,8 +10,10 @@
MingwBackend ( Project& project ); virtual ~MingwBackend () { }; virtual void Process (); + void CreateDirectoryTargetIfNotYetCreated ( const std::string& directory ); + const std::string GetDirectoryDependency ( const std::string& directory ); private: - void ProcessModule ( Module& module ) const; + void ProcessModule ( Module& module ); void CreateMakefile (); void CloseMakefile () const; void GenerateHeader () const; @@ -20,7 +22,7 @@ void GenerateGlobalCFlagsAndProperties ( const char* op, IfableData& data ) const; std::string GenerateProjectLFLAGS () const; - void GenerateDirectoryTargets () const; + void GenerateDirectoryTargets (); void GenerateGlobalVariables () const; bool IncludeInAllTarget ( const Module& module ) const; void GenerateAllTarget () const; @@ -28,8 +30,9 @@ void GenerateInitTarget () const; void GenerateXmlBuildFilesMacro() const; void CheckAutomaticDependencies (); + bool IncludeDirectoryTarget ( const std::string& directory ) const; void DetectPCHSupport(); - + std::setstd::string directories; FILE* fMakefile; bool use_pch; }; _____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler .cpp --- branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler .cpp 2005-03-13 21:34:15 UTC (rev 14033) +++ branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler .cpp 2005-03-13 21:34:47 UTC (rev 14034) @@ -7,20 +7,9 @@
using std::string; using std::vector; -using std::map; -using std::set;
-typedef set<string> set_string; - #define CLEAN_FILE(f) clean_files.push_back ( f ); /*if ( module.name == "crt" ) printf ( "%s(%i): clean: %s\n", __FILE__, __LINE__, f.c_str() )*/
-map<ModuleType,MingwModuleHandler*>* -MingwModuleHandler::handler_map = NULL; -set_string -MingwModuleHandler::directory_set; -int -MingwModuleHandler::ref = 0; - FILE* MingwModuleHandler::fMakefile = NULL; bool @@ -84,29 +73,29 @@ return s; }
-MingwModuleHandler::MingwModuleHandler ( ModuleType moduletype ) +MingwModuleHandler::MingwModuleHandler ( ModuleType moduletype, + MingwBackend* backend_ ) + : backend ( backend_ ) { - if ( !ref++ ) - handler_map = new map<ModuleType,MingwModuleHandler*>; - (*handler_map)[moduletype] = this; }
MingwModuleHandler::~MingwModuleHandler() { - if ( !--ref ) - { - delete handler_map; - handler_map = NULL; - } }
const string & -MingwModuleHandler::PassThruCacheDirectory ( const string &file ) const +MingwModuleHandler::PassThruCacheDirectory ( const string &file ) { - directory_set.insert ( GetDirectory ( file ) ); + backend->CreateDirectoryTargetIfNotYetCreated ( GetDirectory ( file ) ); return file; }
+const string +MingwModuleHandler::GetDirectoryDependency ( const string& file ) +{ + return backend->GetDirectoryDependency ( GetDirectory ( file ) ); +} + void MingwModuleHandler::SetMakefile ( FILE* f ) { @@ -120,18 +109,57 @@ }
MingwModuleHandler* -MingwModuleHandler::LookupHandler ( const string& location, - ModuleType moduletype ) +MingwModuleHandler::InstanciateHandler ( const string& location, + ModuleType moduletype, + MingwBackend* backend ) { - if ( !handler_map ) - throw Exception ( "internal tool error: no registered module handlers" ); - MingwModuleHandler* h = (*handler_map)[moduletype]; - if ( !h ) + MingwModuleHandler* handler; + switch ( moduletype ) { - throw UnknownModuleTypeException ( location, moduletype ); - return NULL; + case BuildTool: + handler = new MingwBuildToolModuleHandler ( backend ); + break; + case StaticLibrary: + handler = new MingwStaticLibraryModuleHandler ( backend ); + break; + case ObjectLibrary: + handler = new MingwObjectLibraryModuleHandler ( backend ); + break; + case Kernel: + handler = new MingwKernelModuleHandler ( backend ); + break; + case NativeCUI: + handler = new MingwNativeCUIModuleHandler ( backend ); + break; + case Win32CUI: + handler = new MingwWin32CUIModuleHandler ( backend ); + break; + case Win32GUI: + handler = new MingwWin32GUIModuleHandler ( backend ); + break; + case KernelModeDLL: + handler = new MingwKernelModeDLLModuleHandler ( backend ); + break; + case NativeDLL: + handler = new MingwNativeDLLModuleHandler ( backend ); + break; + case Win32DLL: + handler = new MingwWin32DLLModuleHandler ( backend ); + break; + case KernelModeDriver: + handler = new MingwKernelModeDriverModuleHandler ( backend ); + break; + case BootLoader: + handler = new MingwBootLoaderModuleHandler ( backend ); + break; + case BootSector: + handler = new MingwBootSectorModuleHandler ( backend ); + break; + case Iso: + handler = new MingwIsoModuleHandler ( backend ); + break; } - return h; + return handler; }
string @@ -180,7 +208,7 @@ }
string -MingwModuleHandler::GetImportLibraryDependency ( const Module& importedModule ) const +MingwModuleHandler::GetImportLibraryDependency ( const Module& importedModule ) { if ( importedModule.type == ObjectLibrary ) return GetObjectsMacro ( importedModule ); @@ -189,7 +217,7 @@ }
string -MingwModuleHandler::GetModuleDependencies ( const Module& module ) const +MingwModuleHandler::GetModuleDependencies ( const Module& module ) { if ( module.dependencies.size () == 0 ) return ""; @@ -297,7 +325,7 @@ }
string -MingwModuleHandler::GetObjectFilenames ( const Module& module ) const +MingwModuleHandler::GetObjectFilenames ( const Module& module ) { const vector<File*>& files = module.non_if_data.files; if ( files.size () == 0 ) @@ -314,65 +342,6 @@ return objectFilenames; }
-bool -MingwModuleHandler::IncludeDirectoryTarget ( const string& directory ) const -{ - if ( directory == "$(ROS_INTERMEDIATE)." SSEP "tools") - return false; - else - return true; -} - -void -MingwModuleHandler::GenerateDirectoryTargets () const -{ - if ( directory_set.size () == 0 ) - return; - - set_string::iterator it; - size_t wrap_count = 0; - - fprintf ( fMakefile, "ifneq ($(ROS_INTERMEDIATE),)\n" ); - fprintf ( fMakefile, "directories::" ); - - for ( it = directory_set.begin (); - it != directory_set.end (); - it++ ) - { - if ( IncludeDirectoryTarget ( *it ) ) - { - if ( wrap_count++ == 5 ) - fprintf ( fMakefile, " \\n\t\t" ), wrap_count = 0; - fprintf ( fMakefile, - " %s", - it->c_str () ); - } - } - - fprintf ( fMakefile, "\n\n" ); - wrap_count = 0; - - for ( it = directory_set.begin (); - it != directory_set.end (); - it++ ) - { - if ( IncludeDirectoryTarget ( *it ) ) - { - if ( wrap_count++ == 5 ) - fprintf ( fMakefile, " \\n\t\t" ), wrap_count = 0; - fprintf ( fMakefile, - "%s ", - it->c_str () ); - } - } - - fprintf ( fMakefile, - "::\n\t${mkdir} $@\n" ); - fprintf ( fMakefile, "endif\n\n" ); - - directory_set.clear (); -} - string MingwModuleHandler::GenerateGccDefineParametersFromVector ( const vector<Define*>& defines ) const { @@ -476,7 +445,7 @@
string MingwModuleHandler::GenerateImportLibraryDependenciesFromVector ( - const vector<Library*>& libraries ) const + const vector<Library*>& libraries ) { string dependencies ( "" ); int wrap_count = 0; @@ -502,7 +471,7 @@ const char* assignmentOperation, const string& macro, const IfableData& data, - const vector<CompilerFlag*>* compilerFlags ) const + const vector<CompilerFlag*>* compilerFlags ) { size_t i;
@@ -560,7 +529,7 @@ const string& linkerflags_macro, const string& objs_macro, const string& libs_macro, - const string& linkdeps_macro ) const + const string& linkdeps_macro ) { size_t i;
@@ -685,7 +654,7 @@ const string& linkerflags_macro, const string& objs_macro, const string& libs_macro, - const string& linkdeps_macro ) const + const string& linkdeps_macro ) { GenerateMacros ( module, @@ -754,7 +723,7 @@ MingwModuleHandler::GenerateGccCommand ( const Module& module, const string& sourceFilename, const string& cc, - const string& cflagsMacro ) const + const string& cflagsMacro ) { string deps = sourceFilename; if ( module.pch && use_pch ) @@ -762,8 +731,9 @@ string objectFilename = PassThruCacheDirectory ( GetObjectFilename ( module, sourceFilename ) ); fprintf ( fMakefile, - "%s: %s\n", + "%s: %s %s\n", objectFilename.c_str (), + GetDirectoryDependency ( objectFilename ).c_str (), deps.c_str () ); fprintf ( fMakefile, "\t$(ECHO_CC)\n" ); fprintf ( fMakefile, @@ -778,13 +748,14 @@ MingwModuleHandler::GenerateGccAssemblerCommand ( const Module& module, const string& sourceFilename, const string& cc, - const string& cflagsMacro ) const + const string& cflagsMacro ) { string objectFilename = PassThruCacheDirectory ( GetObjectFilename ( module, sourceFilename ) ); fprintf ( fMakefile, - "%s: %s\n", + "%s: %s %s\n", objectFilename.c_str (), + GetDirectoryDependency ( objectFilename ).c_str (), sourceFilename.c_str () ); fprintf ( fMakefile, "\t$(ECHO_GAS)\n" ); fprintf ( fMakefile, @@ -798,13 +769,14 @@ void MingwModuleHandler::GenerateNasmCommand ( const Module& module, const string& sourceFilename, - const string& nasmflagsMacro ) const + const string& nasmflagsMacro ) { string objectFilename = PassThruCacheDirectory ( GetObjectFilename ( module, sourceFilename ) ); fprintf ( fMakefile, - "%s: %s\n", + "%s: %s %s\n", objectFilename.c_str (), + GetDirectoryDependency ( objectFilename ).c_str (), sourceFilename.c_str () ); fprintf ( fMakefile, "\t$(ECHO_NASM)\n" ); fprintf ( fMakefile, @@ -818,7 +790,7 @@ void MingwModuleHandler::GenerateWindresCommand ( const Module& module, const string& sourceFilename, - const string& windresflagsMacro ) const + const string& windresflagsMacro ) { string objectFilename = PassThruCacheDirectory ( GetObjectFilename ( module, sourceFilename ) ); @@ -827,8 +799,9 @@ string resFilename = ReplaceExtension ( sourceFilename, ".res" ); fprintf ( fMakefile, - "%s: %s $(WRC_TARGET)\n", + "%s: %s %s $(WRC_TARGET)\n", objectFilename.c_str (), + GetDirectoryDependency ( objectFilename ).c_str (), sourceFilename.c_str () ); fprintf ( fMakefile, "\t$(ECHO_WRC)\n" ); fprintf ( fMakefile, @@ -899,7 +872,7 @@ const string& cflagsMacro, const string& nasmflagsMacro, const string& windresflagsMacro, - string_list& clean_files ) const + string_list& clean_files ) { CLEAN_FILE ( GetObjectFilename(module,sourceFilename) ); string extension = GetExtension ( sourceFilename ); @@ -1059,7 +1032,7 @@ const string& cflagsMacro, const string& nasmflagsMacro, const string& windresflagsMacro, - string_list& clean_files ) const + string_list& clean_files ) { size_t i;
@@ -1101,7 +1074,7 @@ const string& cflagsMacro, const string& nasmflagsMacro, const string& windresflagsMacro, - string_list& clean_files ) const + string_list& clean_files ) { if ( module.pch ) { @@ -1198,7 +1171,7 @@ const Module& module, const string* cflags, const string* nasmflags, - string_list& clean_files ) const + string_list& clean_files ) { string cc = ( module.host == HostTrue ? "${host_gcc}" : "${gcc}" ); string cppc = ( module.host == HostTrue ? "${host_gpp}" : "${gpp}" ); @@ -1213,13 +1186,13 @@ string linkDepsMacro = ssprintf ("%s_LINKDEPS", module.name.c_str ());
GenerateMacros ( module, - cflagsMacro, - nasmflagsMacro, - windresflagsMacro, - linkerFlagsMacro, - objectsMacro, - libsMacro, - linkDepsMacro ); + cflagsMacro, + nasmflagsMacro, + windresflagsMacro, + linkerFlagsMacro, + objectsMacro, + libsMacro, + linkDepsMacro );
if ( cflags != NULL ) { @@ -1267,7 +1240,7 @@ }
string -MingwModuleHandler::GetInvocationDependencies ( const Module& module ) const +MingwModuleHandler::GetInvocationDependencies ( const Module& module ) { string dependencies; for ( size_t i = 0; i < module.invocations.size (); i++ ) @@ -1332,13 +1305,13 @@ if ( module.type == BuildTool || module.name == "zlib" || module.name == "hostzlib" ) - return "$(ROS_INTERMEDIATE)." SSEP "tools $(ROS_INTERMEDIATE)." SSEP "lib" SSEP "zlib"; + return ""; else return "$(INIT)"; }
void -MingwModuleHandler::GeneratePreconditionDependencies ( const Module& module ) const +MingwModuleHandler::GeneratePreconditionDependencies ( const Module& module ) { string preconditionDependenciesName = GetPreconditionDependenciesName ( module ); string sourceFilenames = GetSourceFilenamesWithoutGeneratedFiles ( module ); @@ -1392,16 +1365,17 @@ void MingwModuleHandler::GenerateImportLibraryTargetIfNeeded ( const Module& module, - string_list& clean_files ) const + string_list& clean_files ) { if ( module.importLibrary != NULL ) { - string library_target = FixupTargetFilename( module.GetDependencyPath () ).c_str (); + string library_target = PassThruCacheDirectory ( FixupTargetFilename ( module.GetDependencyPath () ) ).c_str (); CLEAN_FILE ( library_target );
string definitionDependencies = GetDefinitionDependencies ( module ); - fprintf ( fMakefile, "%s: %s\n", + fprintf ( fMakefile, "%s: %s %s\n", library_target.c_str (), + GetDirectoryDependency ( library_target ).c_str (), definitionDependencies.c_str () );
fprintf ( fMakefile, "\t$(ECHO_DLLTOOL)\n" ); @@ -1424,7 +1398,7 @@ }
string -MingwModuleHandler::GetDefinitionDependencies ( const Module& module ) const +MingwModuleHandler::GetDefinitionDependencies ( const Module& module ) { string dependencies; string dkNkmLibNoFixup = "dk/nkm/lib"; @@ -1446,16 +1420,15 @@ }
bool -MingwModuleHandler::IsCPlusPlusModule ( const Module& module ) const +MingwModuleHandler::IsCPlusPlusModule ( const Module& module ) { return module.cplusplus; }
-static MingwBuildToolModuleHandler buildtool_handler; - -MingwBuildToolModuleHandler::MingwBuildToolModuleHandler() - : MingwModuleHandler ( BuildTool ) +MingwBuildToolModuleHandler::MingwBuildToolModuleHandler ( MingwBackend* backend ) + : MingwModuleHandler ( BuildTool, + backend ) { }
@@ -1502,10 +1475,9 @@ }
-static MingwKernelModuleHandler kernelmodule_handler; - -MingwKernelModuleHandler::MingwKernelModuleHandler () - : MingwModuleHandler ( Kernel ) +MingwKernelModuleHandler::MingwKernelModuleHandler ( MingwBackend* backend ) + : MingwModuleHandler ( Kernel, + backend ) { }
@@ -1587,10 +1559,9 @@ }
-static MingwStaticLibraryModuleHandler staticlibrary_handler; - -MingwStaticLibraryModuleHandler::MingwStaticLibraryModuleHandler () - : MingwModuleHandler ( StaticLibrary ) +MingwStaticLibraryModuleHandler::MingwStaticLibraryModuleHandler ( MingwBackend* backend ) + : MingwModuleHandler ( StaticLibrary, + backend ) { }
@@ -1609,10 +1580,9 @@ }
-static MingwObjectLibraryModuleHandler objectlibrary_handler; - -MingwObjectLibraryModuleHandler::MingwObjectLibraryModuleHandler () - : MingwModuleHandler ( ObjectLibrary ) +MingwObjectLibraryModuleHandler::MingwObjectLibraryModuleHandler ( MingwBackend* backend ) + : MingwModuleHandler ( ObjectLibrary, + backend ) { }
@@ -1631,10 +1601,9 @@ }
-static MingwKernelModeDLLModuleHandler kernelmodedll_handler; - -MingwKernelModeDLLModuleHandler::MingwKernelModeDLLModuleHandler () - : MingwModuleHandler ( KernelModeDLL ) +MingwKernelModeDLLModuleHandler::MingwKernelModeDLLModuleHandler ( MingwBackend* backend ) + : MingwModuleHandler ( KernelModeDLL, + backend ) { }
@@ -1689,10 +1658,9 @@ }
-static MingwKernelModeDriverModuleHandler kernelmodedriver_handler; - -MingwKernelModeDriverModuleHandler::MingwKernelModeDriverModuleHandler () - : MingwModuleHandler ( KernelModeDriver ) +MingwKernelModeDriverModuleHandler::MingwKernelModeDriverModuleHandler ( MingwBackend* backend ) + : MingwModuleHandler ( KernelModeDriver, + backend ) { }
@@ -1752,10 +1720,9 @@ }
-static MingwNativeDLLModuleHandler nativedll_handler; - -MingwNativeDLLModuleHandler::MingwNativeDLLModuleHandler () - : MingwModuleHandler ( NativeDLL ) +MingwNativeDLLModuleHandler::MingwNativeDLLModuleHandler ( MingwBackend* backend ) + : MingwModuleHandler ( NativeDLL, + backend ) { }
@@ -1808,10 +1775,9 @@ }
-static MingwNativeCUIModuleHandler nativecui_handler; - -MingwNativeCUIModuleHandler::MingwNativeCUIModuleHandler () - : MingwModuleHandler ( NativeCUI ) +MingwNativeCUIModuleHandler::MingwNativeCUIModuleHandler ( MingwBackend* backend ) + : MingwModuleHandler ( NativeCUI, + backend ) { }
@@ -1868,10 +1834,9 @@ }
-static MingwWin32DLLModuleHandler win32dll_handler; - -MingwWin32DLLModuleHandler::MingwWin32DLLModuleHandler () - : MingwModuleHandler ( Win32DLL ) +MingwWin32DLLModuleHandler::MingwWin32DLLModuleHandler ( MingwBackend* backend ) + : MingwModuleHandler ( Win32DLL, + backend ) { }
@@ -1954,10 +1919,9 @@ }
-static MingwWin32CUIModuleHandler win32cui_handler; - -MingwWin32CUIModuleHandler::MingwWin32CUIModuleHandler () - : MingwModuleHandler ( Win32CUI ) +MingwWin32CUIModuleHandler::MingwWin32CUIModuleHandler ( MingwBackend* backend ) + : MingwModuleHandler ( Win32CUI, + backend ) { }
@@ -2016,10 +1980,9 @@ }
-static MingwWin32GUIModuleHandler win32gui_handler; - -MingwWin32GUIModuleHandler::MingwWin32GUIModuleHandler () - : MingwModuleHandler ( Win32GUI ) +MingwWin32GUIModuleHandler::MingwWin32GUIModuleHandler ( MingwBackend* backend ) + : MingwModuleHandler ( Win32GUI, + backend ) { }
@@ -2078,10 +2041,9 @@ }
-static MingwBootLoaderModuleHandler bootloadermodule_handler; - -MingwBootLoaderModuleHandler::MingwBootLoaderModuleHandler () - : MingwModuleHandler ( BootLoader ) +MingwBootLoaderModuleHandler::MingwBootLoaderModuleHandler ( MingwBackend* backend ) + : MingwModuleHandler ( BootLoader, + backend ) { }
@@ -2133,10 +2095,9 @@ }
-static MingwBootSectorModuleHandler bootsectormodule_handler; - -MingwBootSectorModuleHandler::MingwBootSectorModuleHandler () - : MingwModuleHandler ( BootSector ) +MingwBootSectorModuleHandler::MingwBootSectorModuleHandler ( MingwBackend* backend ) + : MingwModuleHandler ( BootSector, + backend ) { }
@@ -2168,10 +2129,9 @@ }
-static MingwIsoModuleHandler isomodule_handler; - -MingwIsoModuleHandler::MingwIsoModuleHandler () - : MingwModuleHandler ( Iso ) +MingwIsoModuleHandler::MingwIsoModuleHandler ( MingwBackend* backend ) + : MingwModuleHandler ( Iso, + backend ) { }
@@ -2185,7 +2145,7 @@
void MingwIsoModuleHandler::OutputBootstrapfileCopyCommands ( const string& bootcdDirectory, - const Module& module ) const + const Module& module ) { for ( size_t i = 0; i < module.project.modules.size (); i++ ) { @@ -2204,7 +2164,7 @@
void MingwIsoModuleHandler::OutputCdfileCopyCommands ( const string& bootcdDirectory, - const Module& module ) const + const Module& module ) { for ( size_t i = 0; i < module.project.cdfiles.size (); i++ ) { @@ -2220,7 +2180,7 @@
string MingwIsoModuleHandler::GetBootstrapCdDirectories ( const string& bootcdDirectory, - const Module& module ) const + const Module& module ) { string directories; for ( size_t i = 0; i < module.project.modules.size (); i++ ) @@ -2231,7 +2191,7 @@ string targetDirecctory = bootcdDirectory + SSEP + m.bootstrap->base; if ( directories.size () > 0 ) directories += " "; - directories += FixupTargetFilename ( targetDirecctory ); + directories += GetDirectoryDependency ( PassThruCacheDirectory ( FixupTargetFilename ( targetDirecctory ) ) ); } } return directories; @@ -2239,7 +2199,7 @@
string MingwIsoModuleHandler::GetNonModuleCdDirectories ( const string& bootcdDirectory, - const Module& module ) const + const Module& module ) { string directories; for ( size_t i = 0; i < module.project.cdfiles.size (); i++ ) @@ -2248,14 +2208,14 @@ string targetDirecctory = bootcdDirectory + SSEP + cdfile.base; if ( directories.size () > 0 ) directories += " "; - directories += FixupTargetFilename ( targetDirecctory ); + directories += GetDirectoryDependency ( PassThruCacheDirectory ( FixupTargetFilename ( targetDirecctory ) ) ); } return directories; }
string MingwIsoModuleHandler::GetCdDirectories ( const string& bootcdDirectory, - const Module& module ) const + const Module& module ) { string directories = GetBootstrapCdDirectories ( bootcdDirectory, module ); @@ -2308,7 +2268,7 @@ PassThruCacheDirectory ( bootcdReactos + SSEP ); string reactosInf = FixupTargetFilename ( bootcdReactosNoFixup + "/reactos.inf" ); string reactosDff = NormalizeFilename ( "bootdata/packages/reactos.dff" ); - string cdDirectories = bootcdReactos + " " + GetCdDirectories ( bootcdDirectory, + string cdDirectories = GetCdDirectories ( bootcdDirectory,
module ); vector<string> vCdFiles; GetCdFiles ( vCdFiles, module ); @@ -2317,9 +2277,10 @@ fprintf ( fMakefile, ".PHONY: %s\n\n", module.name.c_str ()); fprintf ( fMakefile, - "%s: all %s %s %s ${CABMAN_TARGET} ${CDMAKE_TARGET}\n", + "%s: all %s %s %s %s ${CABMAN_TARGET} ${CDMAKE_TARGET}\n", module.name.c_str (), isoboot.c_str (), + GetDirectoryDependency ( PassThruCacheDirectory ( bootcdReactos ) ).c_str (), cdDirectories.c_str (), cdFiles.c_str () ); fprintf ( fMakefile, "\t$(ECHO_CABMAN)\n" ); @@ -2328,10 +2289,10 @@ reactosDff.c_str (), bootcdReactos.c_str () ); fprintf ( fMakefile, - "\t${cabman} -C %s -RC %s -L %s -N\n", + "\t${cabman} -C %s -RC %s -L %s -N -P $(OUTPUT)\n", reactosDff.c_str (), reactosInf.c_str (), - bootcdReactos.c_str () ); + bootcdReactos.c_str ()); fprintf ( fMakefile, "\t-@${rm} %s\n", reactosInf.c_str () ); _____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler .h --- branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler .h 2005-03-13 21:34:15 UTC (rev 14033) +++ branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler .h 2005-03-13 21:34:47 UTC (rev 14034) @@ -2,7 +2,10 @@
#define MINGW_MODULEHANDLER_H
#include "../backend.h" +#include "mingw.h"
+class MingwBackend; + extern std::string ReplaceExtension ( const std::string& filename, const std::string& newExtension ); @@ -16,44 +19,42 @@ { public: typedef std::vectorstd::string string_list; - - static std::map<ModuleType,MingwModuleHandler*>* handler_map; - static int ref; - - MingwModuleHandler ( ModuleType moduletype ); + MingwModuleHandler ( ModuleType moduletype, + MingwBackend* backend_ ); virtual ~MingwModuleHandler();
static void SetMakefile ( FILE* f ); + static MingwModuleHandler* InstanciateHandler ( const std::string& location, + ModuleType moduletype_, + MingwBackend* backend_ ); static void SetUsePch ( bool use_pch ); static MingwModuleHandler* LookupHandler ( const std::string& location, ModuleType moduletype_ ); virtual HostType DefaultHost() = 0; virtual void Process ( const Module& module, string_list& clean_files ) = 0; - bool IncludeDirectoryTarget ( const std::string& directory ) const; - void GenerateDirectoryTargets () const; void GenerateCleanTarget ( const Module& module, const string_list& clean_files ) const; protected: - const std::string &PassThruCacheDirectory ( const std::string &f ) const; + const std::string &PassThruCacheDirectory ( const std::string &f ); + const std::string GetDirectoryDependency ( const std::string& file ); std::string GetWorkingDirectory () const; std::string GetBasename ( const std::string& filename ) const; std::string GetActualSourceFilename ( const std::string& filename ) const; std::string GetModuleArchiveFilename ( const Module& module ) const; bool IsGeneratedFile ( const File& file ) const; - std::string GetImportLibraryDependency ( const Module& importedModule ) const; - std::string GetModuleDependencies ( const Module& module ) const; + std::string GetImportLibraryDependency ( const Module& importedModule ); + std::string GetModuleDependencies ( const Module& module ); std::string GetAllDependencies ( const Module& module ) const; std::string GetSourceFilenames ( const Module& module, bool includeGeneratedFiles ) const; std::string GetSourceFilenames ( const Module& module ) const; std::string GetSourceFilenamesWithoutGeneratedFiles ( const Module& module ) const;
- std::string GetObjectFilenames ( const Module& module ) const; - std::string GetInvocationDependencies ( const Module& module ) const; + std::string GetObjectFilenames ( const Module& module ); void GenerateInvocations ( const Module& module ) const; std::string GetPreconditionDependenciesName ( const Module& module ) const; - void GeneratePreconditionDependencies ( const Module& module ) const; + void GeneratePreconditionDependencies ( const Module& module ); std::string GetCFlagsMacro ( const Module& module ) const; std::string GetObjectsMacro ( const Module& module ) const; std::string GetLinkingDependenciesMacro ( const Module& module ) const; @@ -70,14 +71,13 @@ void GenerateMacrosAndTargets ( const Module& module, [truncated at 1000 lines; 255 more skipped]