Parse module type. Modified: branches/xmlbuildsystem/reactos/tools/rbuild/exception.cpp Modified: branches/xmlbuildsystem/reactos/tools/rbuild/exception.h Modified: branches/xmlbuildsystem/reactos/tools/rbuild/module.cpp Modified: branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.h Modified: branches/xmlbuildsystem/reactos/tools/rbuild/tests/data/module.xml Modified: branches/xmlbuildsystem/reactos/tools/rbuild/tests/moduletest.cpp _____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/exception.cpp --- branches/xmlbuildsystem/reactos/tools/rbuild/exception.cpp 2005-01-05 21:00:51 UTC (rev 12838) +++ branches/xmlbuildsystem/reactos/tools/rbuild/exception.cpp 2005-01-05 21:29:54 UTC (rev 12839) @@ -63,5 +63,13 @@
attributeName.c_str (), elementName.c_str ()) { +} + +InvalidAttributeValueException::InvalidAttributeValueException(const std::string& name, + const std::string& value) + : InvalidBuildFileException ( "Attribute '%s' has an invalid value '%s'.", + name.c_str (), + value.c_str ()) +{ } _____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/exception.h --- branches/xmlbuildsystem/reactos/tools/rbuild/exception.h 2005-01-05 21:00:51 UTC (rev 12838) +++ branches/xmlbuildsystem/reactos/tools/rbuild/exception.h 2005-01-05 21:29:54 UTC (rev 12839) @@ -48,4 +48,12 @@
const std::string& elementName); };
+ +class InvalidAttributeValueException : public InvalidBuildFileException +{ +public: + InvalidAttributeValueException(const std::string& name, + const std::string& value); +}; + #endif /* __EXCEPTION_H */ _____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/module.cpp --- branches/xmlbuildsystem/reactos/tools/rbuild/module.cpp 2005-01-05 21:00:51 UTC (rev 12838) +++ branches/xmlbuildsystem/reactos/tools/rbuild/module.cpp 2005-01-05 21:29:54 UTC (rev 12839) @@ -14,35 +14,43 @@
name(moduleName), path(modulePath) { + type = GetModuleType ( *moduleNode.GetAttribute ( "type", true ) ); }
-Module::~Module() +Module::~Module () { for ( size_t i = 0; i < files.size(); i++ ) delete files[i]; }
-void -Module::ProcessXML ( const XMLElement& e, const string& path ) +void Module::ProcessXML ( const XMLElement& e, + const string& path ) { string subpath ( path ); - if ( e.name == "file" && e.value.size() ) + if ( e.name == "file" && e.value.size () ) { - files.push_back ( new File(path + "/" + e.value) ); + 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++ ) + for ( size_t i = 0; i < e.subElements.size (); i++ ) ProcessXML ( *e.subElements[i], subpath ); }
-File::File ( const std::string& _name ) +ModuleType Module::GetModuleType ( const XMLAttribute& attribute ) +{ + if ( attribute.value == "buildtool" ) + return BuildTool; + if ( attribute.value == "kernelmodedll" ) + return KernelModeDLL; + throw InvalidAttributeValueException ( attribute.name, + attribute.value ); +} + +File::File ( const string& _name ) : name(_name) { } _____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.h --- branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.h 2005-01-05 21:00:51 UTC (rev 12838) +++ branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.h 2005-01-05 21:29:54 UTC (rev 12839) @@ -30,6 +30,12 @@
};
+enum ModuleType +{ + BuildTool, + KernelModeDLL +}; + class Module { public: @@ -37,10 +43,12 @@ std::string name; std::string path; std::vector<File*> files; + ModuleType type;
Module ( const XMLElement& moduleNode, const std::string& moduleName, const std::string& modulePath ); + ModuleType GetModuleType (const XMLAttribute& attribute );
~Module();
_____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/tests/data/module.xml --- branches/xmlbuildsystem/reactos/tools/rbuild/tests/data/module.xml 2005-01-05 21:00:51 UTC (rev 12838) +++ branches/xmlbuildsystem/reactos/tools/rbuild/tests/data/module.xml 2005-01-05 21:29:54 UTC (rev 12839) @@ -6,7 +6,7 @@
</module> </directory> <directory name="dir2"> - <module name="module2" type="buildtool"> + <module name="module2" type="kernelmodedll"> <file>file3.c</file> <file>file4.c</file> </module> _____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/tests/moduletest.cpp --- branches/xmlbuildsystem/reactos/tools/rbuild/tests/moduletest.cpp 2005-01-05 21:00:51 UTC (rev 12838) +++ branches/xmlbuildsystem/reactos/tools/rbuild/tests/moduletest.cpp 2005-01-05 21:29:54 UTC (rev 12839) @@ -9,11 +9,13 @@
ARE_EQUAL(2, project.modules.size());
Module& module1 = *project.modules[0]; + IS_TRUE(module1.type == BuildTool); ARE_EQUAL(2, module1.files.size()); ARE_EQUAL("./dir1/file1.c", module1.files[0]->name); ARE_EQUAL("./dir1/file2.c", module1.files[1]->name); Module& module2 = *project.modules[1]; + IS_TRUE(module2.type == KernelModeDLL); ARE_EQUAL(2, module2.files.size()); ARE_EQUAL("./dir2/file3.c", module2.files[0]->name); ARE_EQUAL("./dir2/file4.c", module2.files[1]->name);