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 */