Check automatic dependencies of referenced object library modules on make <module>_depends
Modified: trunk/reactos/tools/rbuild/automaticdependency.cpp
Modified: trunk/reactos/tools/rbuild/backend/mingw/mingw.cpp
Modified: trunk/reactos/tools/rbuild/backend/mingw/modulehandler.cpp
Modified: trunk/reactos/tools/rbuild/module.cpp
Modified: trunk/reactos/tools/rbuild/rbuild.h

Modified: trunk/reactos/tools/rbuild/automaticdependency.cpp
--- trunk/reactos/tools/rbuild/automaticdependency.cpp	2005-07-08 19:51:37 UTC (rev 16512)
+++ trunk/reactos/tools/rbuild/automaticdependency.cpp	2005-07-08 19:55:30 UTC (rev 16513)
@@ -11,7 +11,7 @@
 using std::map;
 
 SourceFile::SourceFile ( AutomaticDependency* automaticDependency,
-                         Module& module,
+                         const Module& module,
                          const string& filename,
                          SourceFile* parent,
                          bool isNonAutomaticDependency )
@@ -294,7 +294,7 @@
 }
 
 void
-AutomaticDependency::GetModuleFiles ( Module& module,
+AutomaticDependency::GetModuleFiles ( const Module& module,
                                       vector<File*>& files ) const
 {
 	for ( size_t i = 0; i < module.non_if_data.files.size (); i++ )
@@ -307,7 +307,7 @@
 }
 
 void
-AutomaticDependency::ParseFiles ( Module& module )
+AutomaticDependency::ParseFiles ( const Module& module )
 {
 	vector<File*> files;
 	GetModuleFiles ( module, files );
@@ -316,7 +316,7 @@
 }
 
 void
-AutomaticDependency::ParseFile ( Module& module,
+AutomaticDependency::ParseFile ( const Module& module,
                                  const File& file )
 {
 	string normalizedFilename = NormalizeFilename ( file.name );
@@ -355,7 +355,7 @@
 
 void
 AutomaticDependency::GetIncludeDirectories ( vector<Include*>& includes,
-                                             Module& module,
+                                             const Module& module,
                                              Include& currentDirectory,
                                              bool searchCurrentDirectory )
 {
@@ -369,7 +369,7 @@
 
 bool
 AutomaticDependency::LocateIncludedFile ( SourceFile* sourceFile,
-                                          Module& module,
+                                          const Module& module,
                                           const string& includedFilename,
                                           bool searchCurrentDirectory,
                                           bool includeNext,
@@ -396,9 +396,9 @@
 }
 
 SourceFile*
-AutomaticDependency::RetrieveFromCacheOrParse ( Module& module,
-	                                            const string& filename,
-	                                            SourceFile* parentSourceFile )
+AutomaticDependency::RetrieveFromCacheOrParse ( const Module& module,
+                                                const string& filename,
+                                                SourceFile* parentSourceFile )
 {
 	SourceFile* sourceFile = sourcefile_map[filename];
 	if ( sourceFile == NULL )
@@ -429,25 +429,41 @@
 	for ( size_t mi = 0; mi < project.modules.size (); mi++ )
 	{
 		Module& module = *project.modules[mi];
-		CheckAutomaticDependencies ( module, verbose, false );
+		CheckAutomaticDependencies ( module, verbose );
 	}
 }
 
 void
-AutomaticDependency::CheckAutomaticDependencies ( Module& module,
-                                                  bool verbose )
+AutomaticDependency::GetModulesToCheck ( Module& module, vector<const Module*>& modules )
 {
-	CheckAutomaticDependencies ( module, verbose, true );
+	modules.push_back ( &module );
+	for ( size_t i = 0; i < module.non_if_data.libraries.size (); i++ )
+	{
+		Library& library = *module.non_if_data.libraries[i];
+		if ( library.importedModule->type != ObjectLibrary )
+			break;
+		modules.push_back ( library.importedModule );
+	}
+
+	/* FIXME: Collect libraries in IFs here */
 }
 
 void
-AutomaticDependency::CheckAutomaticDependencies ( Module& module,
-                                                  bool verbose,
-                                                  bool parseFiles )
+AutomaticDependency::CheckAutomaticDependenciesForModule ( Module& module,
+                                                           bool verbose )
 {
-	if ( parseFiles )
-		ParseFiles ( module );
+	vector<const Module*> modules;
+	GetModulesToCheck ( module, modules );
+	for ( size_t mi = 0; mi < modules.size (); mi++ )
+		ParseFiles ( *modules[mi] );
+	for ( size_t mi = 0; mi < modules.size (); mi++ )
+		CheckAutomaticDependencies ( *modules[mi], verbose );
+}
 
+void
+AutomaticDependency::CheckAutomaticDependencies ( const Module& module,
+                                                  bool verbose )
+{
 	struct utimbuf timebuf;
 	vector<File*> files;
 	GetModuleFiles ( module, files );

Modified: trunk/reactos/tools/rbuild/backend/mingw/mingw.cpp
--- trunk/reactos/tools/rbuild/backend/mingw/mingw.cpp	2005-07-08 19:51:37 UTC (rev 16512)
+++ trunk/reactos/tools/rbuild/backend/mingw/mingw.cpp	2005-07-08 19:55:30 UTC (rev 16513)
@@ -325,8 +325,8 @@
 		printf ( "Checking automatic dependencies for module '%s'...",
 		         module->name.c_str () );
 		AutomaticDependency automaticDependency ( ProjectNode );
-		automaticDependency.CheckAutomaticDependencies ( *module,
-		                                                 configuration.Verbose );
+		automaticDependency.CheckAutomaticDependenciesForModule ( *module,
+		                                                          configuration.Verbose );
 		printf ( "done\n" );
 	}
 }

Modified: trunk/reactos/tools/rbuild/backend/mingw/modulehandler.cpp
--- trunk/reactos/tools/rbuild/backend/mingw/modulehandler.cpp	2005-07-08 19:51:37 UTC (rev 16512)
+++ trunk/reactos/tools/rbuild/backend/mingw/modulehandler.cpp	2005-07-08 19:55:30 UTC (rev 16513)
@@ -615,7 +615,7 @@
 			dependencies += " \\\n\t\t", wrap_count = 0;
 		else if ( dependencies.size () > 0 )
 			dependencies += " ";
-		dependencies += GetImportLibraryDependency ( *libraries[i]->imported_module );
+		dependencies += GetImportLibraryDependency ( *libraries[i]->importedModule );
 	}
 	return dependencies;
 }
@@ -1274,7 +1274,7 @@
 
 void
 MergeStringVector ( const vector<string>& input,
-	                vector<string>& output )
+                    vector<string>& output )
 {
 	int wrap_at = 25;
 	string s;
@@ -1603,20 +1603,20 @@
 	for ( size_t i = 0; i < module.non_if_data.libraries.size (); i++ )
 	{
 		Library& library = *module.non_if_data.libraries[i];
-		if ( library.imported_module->type == RpcServer ||
-		     library.imported_module->type == RpcClient )
+		if ( library.importedModule->type == RpcServer ||
+		     library.importedModule->type == RpcClient )
 		{
 
-			for ( size_t j = 0; j < library.imported_module->non_if_data.files.size (); j++ )
+			for ( size_t j = 0; j < library.importedModule->non_if_data.files.size (); j++ )
 			{
-				File& file = *library.imported_module->non_if_data.files[j];
+				File& file = *library.importedModule->non_if_data.files[j];
 				string extension = GetExtension ( file.name );
 				if ( extension == ".idl" || extension == ".IDL" )
 				{
 					string basename = GetBasename ( file.name );
-					if ( library.imported_module->type == RpcServer )
+					if ( library.importedModule->type == RpcServer )
 						dependencies.push_back ( GetRpcServerHeaderFilename ( basename ) );
-					if ( library.imported_module->type == RpcClient )
+					if ( library.importedModule->type == RpcClient )
 						dependencies.push_back ( GetRpcClientHeaderFilename ( basename ) );
 				}
 			}

Modified: trunk/reactos/tools/rbuild/module.cpp
--- trunk/reactos/tools/rbuild/module.cpp	2005-07-08 19:51:37 UTC (rev 16512)
+++ trunk/reactos/tools/rbuild/module.cpp	2005-07-08 19:55:30 UTC (rev 16513)
@@ -817,14 +817,14 @@
 	: node(_node),
 	  module(_module),
 	  name(_name),
-	  imported_module(_module.project.LocateModule(_name))
+	  importedModule(_module.project.LocateModule(_name))
 {
 	if ( module.name == name )
 		throw InvalidBuildFileException (
 			node.location,
 			"module '%s' cannot link against itself",
 			name.c_str() );
-	if ( !imported_module )
+	if ( !importedModule )
 		throw InvalidBuildFileException (
 			node.location,
 			"module '%s' trying to import non-existant module '%s'",

Modified: trunk/reactos/tools/rbuild/rbuild.h
--- trunk/reactos/tools/rbuild/rbuild.h	2005-07-08 19:51:37 UTC (rev 16512)
+++ trunk/reactos/tools/rbuild/rbuild.h	2005-07-08 19:55:30 UTC (rev 16513)
@@ -316,7 +316,7 @@
 	const XMLElement& node;
 	const Module& module;
 	std::string name;
-	const Module* imported_module;
+	const Module* importedModule;
 
 	Library ( const XMLElement& _node,
 	          const Module& _module,
@@ -533,7 +533,7 @@
 {
 public:
 	SourceFile ( AutomaticDependency* automaticDependency,
-	             Module& module,
+	             const Module& module,
 	             const std::string& filename,
 	             SourceFile* parent,
 	             bool isNonAutomaticDependency );
@@ -542,7 +542,7 @@
 	std::string Location () const;
 	std::vector<SourceFile*> files;
 	AutomaticDependency* automaticDependency;
-	Module& module;
+	const Module& module;
 	std::string filename;
 	std::string filenamePart;
 	std::string directoryPart;
@@ -584,32 +584,32 @@
 	                          const std::string& includedFilename,
 	                          std::string& resolvedFilename );
 	bool LocateIncludedFile ( SourceFile* sourceFile,
-	                          Module& module,
+	                          const Module& module,
 	                          const std::string& includedFilename,
 	                          bool searchCurrentDirectory,
 	                          bool includeNext,
 	                          std::string& resolvedFilename );
-	SourceFile* RetrieveFromCacheOrParse ( Module& module,
+	SourceFile* RetrieveFromCacheOrParse ( const Module& module,
 	                                       const std::string& filename,
 	                                       SourceFile* parentSourceFile );
 	SourceFile* RetrieveFromCache ( const std::string& filename );
 	void CheckAutomaticDependencies ( bool verbose );
-	void CheckAutomaticDependencies ( Module& module,
-	                                  bool verbose );
-	void CheckAutomaticDependencies ( Module& module,
-	                                  bool verbose,
-	                                  bool parseFiles );
+	void CheckAutomaticDependenciesForModule ( Module& module,
+	                                           bool verbose );
+private:
+	void GetModulesToCheck ( Module& module, std::vector<const Module*>& modules );
+	void CheckAutomaticDependencies ( const Module& module,
+                                          bool verbose );
 	void CheckAutomaticDependenciesForFile ( SourceFile* sourceFile );
-private:
 	void GetIncludeDirectories ( std::vector<Include*>& includes,
-	                             Module& module,
+	                             const Module& module,
                                      Include& currentDirectory,
                                      bool searchCurrentDirectory );
-	void GetModuleFiles ( Module& module,
+	void GetModuleFiles ( const Module& module,
                               std::vector<File*>& files ) const;
 	void ParseFiles ();
-	void ParseFiles ( Module& module );
-	void ParseFile ( Module& module,
+	void ParseFiles ( const Module& module );
+	void ParseFile ( const Module& module,
 	                 const File& file );
 	std::map<std::string, SourceFile*> sourcefile_map;
 };