parse a module's files into a vector ( conditions are still a TODO )
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/module.cpp
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.cpp
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.h

Modified: branches/xmlbuildsystem/reactos/tools/rbuild/module.cpp
--- branches/xmlbuildsystem/reactos/tools/rbuild/module.cpp	2005-01-04 14:27:27 UTC (rev 12788)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/module.cpp	2005-01-04 14:46:06 UTC (rev 12789)
@@ -17,3 +17,34 @@
 	  path(modulePath)
 {
 }
+
+Module::~Module()
+{
+	for ( size_t i = 0; i < files.size(); i++ )
+		delete files[i];
+}
+
+void
+Module::ProcessXML ( const XMLElement& e, const string& path )
+{
+	string subpath ( path );
+	if ( e.name == "file" && e.value.size() )
+	{
+		files.push_back ( new File(path + "/" + e.value) );
+	}
+	else if ( e.name == "directory" )
+	{
+		// this code is duplicated between Project::ProcessXML() and Module::ProcessXML() :(
+		const XMLAttribute* att = e.GetAttribute ( "name", true );
+		if ( !att )
+			return;
+		subpath = path + "/" + att->value;
+	}
+	for ( size_t i = 0; i < e.subElements.size(); i++ )
+		ProcessXML ( *e.subElements[i], subpath );
+}
+
+File::File ( const std::string& _name )
+	: name(_name)
+{
+}

Modified: branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.cpp
--- branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.cpp	2005-01-04 14:27:27 UTC (rev 12788)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.cpp	2005-01-04 14:46:06 UTC (rev 12789)
@@ -552,10 +552,12 @@
 			return;
 		Module* module = new Module ( e, att->value, path );
 		modules.push_back ( module );
-		return; // REM TODO FIXME no processing of modules... yet
+		module->ProcessXML ( e, path );
+		return;
 	}
 	else if ( e.name == "directory" )
 	{
+		// this code is duplicated between Project::ProcessXML() and Module::ProcessXML() :(
 		const XMLAttribute* att = e.GetAttribute ( "name", true );
 		if ( !att )
 			return;
@@ -611,6 +613,25 @@
 			printf ( "\t%s in folder: %s\n",
 			         m.name.c_str(),
 			         m.path.c_str() );
+			printf ( "\txml dependencies:\n\t\tReactOS.xml\n" );
+			const XMLElement* e = &m.node;
+			while ( e )
+			{
+				if ( e->name == "xi:include" )
+				{
+					const XMLAttribute* att = e->GetAttribute("top_href",false);
+					if ( att )
+					{
+						printf ( "\t\t%s\n", att->value.c_str() );
+					}
+				}
+				e = e->parentElement;
+			}
+			printf ( "\tfiles:\n" );
+			for ( size_t j = 0; j < m.files.size(); j++ )
+			{
+				printf ( "\t\t%s\n", m.files[j]->name.c_str() );
+			}
 		}
 
 		delete proj;

Modified: branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.h
--- branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.h	2005-01-04 14:27:27 UTC (rev 12788)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.h	2005-01-04 14:46:06 UTC (rev 12789)
@@ -72,6 +72,7 @@
 
 class Project;
 class Module;
+class File;
 
 class Project
 {
@@ -89,10 +90,23 @@
 	const XMLElement& node;
 	std::string name;
 	std::string path;
+	std::vector<File*> files;
 
 	Module ( const XMLElement& moduleNode,
 	         const std::string& moduleName,
 	         const std::string& modulePath );
+
+	~Module();
+
+	void ProcessXML ( const XMLElement& e, const std::string& path );
 };
 
+class File
+{
+public:
+	std::string name;
+
+	File ( const std::string& _name );
+};
+
 #endif /* __RBUILD_H */