parse, but ignore, <? ?> tags - eliminated duplicate code ala FixSeparator() - fix path separator issues
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/XML.cpp
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler.cpp
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/module.cpp
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/project.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/data/project.xml
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/tests/moduletest.cpp

Modified: branches/xmlbuildsystem/reactos/tools/rbuild/XML.cpp
--- branches/xmlbuildsystem/reactos/tools/rbuild/XML.cpp	2005-01-07 13:34:47 UTC (rev 12867)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/XML.cpp	2005-01-07 13:48:53 UTC (rev 12868)
@@ -251,6 +251,14 @@
 		else
 			tokend += 3;
 	}
+	else if ( !strncmp ( _p, "<?", 2 ) )
+	{
+		tokend = strstr ( _p, "?>" );
+		if ( !tokend )
+			tokend = _end;
+		else
+			tokend += 2;
+	}
 	else if ( *_p == '<' )
 	{
 		tokend = strchr ( _p, '>' );
@@ -456,7 +464,9 @@
 		return NULL;
 	bool end_tag;
 
-	while ( token[0] != '<' || !strncmp ( token.c_str(), "<!--", 4 ) )
+	while ( token[0] != '<'
+	        || !strncmp ( token.c_str(), "<!--", 4 )
+	        || !strncmp ( token.c_str(), "<?", 2 ) )
 	{
 		if ( token[0] != '<' )
 			throw XMLSyntaxErrorException ( f.Location(),

Modified: branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler.cpp
--- branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler.cpp	2005-01-07 13:34:47 UTC (rev 12867)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler.cpp	2005-01-07 13:48:53 UTC (rev 12868)
@@ -1,5 +1,6 @@
 
 #include "../../pch.h"
+#include <assert.h>
 
 #include "../../rbuild.h"
 #include "mingw.h"
@@ -162,30 +163,30 @@
 	          archiveFilename.c_str (),
 	          importLibraryDependencies.c_str () );
 	fprintf ( fMakefile,
-	          "\t${gcc} -Wl,--base-file,%s/base.tmp -o %s/junk.tmp %s %s\n",
+	          "\t${gcc} -Wl,--base-file,%s" SSEP "base.tmp -o %s" SSEP "junk.tmp %s %s\n",
 	          workingDirectory.c_str (),
 	          workingDirectory.c_str (),
 	          archiveFilename.c_str (),
 	          importLibraryDependencies.c_str () );
 	fprintf ( fMakefile,
-	          "\t${rm} %s/junk.tmp\n",
+	          "\t${rm} %s" SSEP "junk.tmp\n",
 	          workingDirectory.c_str () );
 	fprintf ( fMakefile,
-	          "\t${dlltool} --dllname %s --base-file %s/base.tmp --output-exp %s/temp.exp --kill-at\n",
+	          "\t${dlltool} --dllname %s --base-file %s" SSEP "base.tmp --output-exp %s" SSEP "temp.exp --kill-at\n",
 	          module.GetPath ().c_str (),
 	          workingDirectory.c_str (),
 	          workingDirectory.c_str ());
 	fprintf ( fMakefile,
-	          "\t${rm} %s/base.tmp\n",
+	          "\t${rm} %s" SSEP "base.tmp\n",
 	          workingDirectory.c_str () );
 	fprintf ( fMakefile,
-	          "\t${ld} -Wl,%s/temp.exp -o %s %s %s\n",
+	          "\t${ld} -Wl,%s" SSEP "temp.exp -o %s %s %s\n",
 	          workingDirectory.c_str (),
 	          module.GetPath ().c_str (),
 	          archiveFilename.c_str (),
 	          importLibraryDependencies.c_str () );
 	fprintf ( fMakefile,
-	          "\t${rm} %s/temp.exp\n",
+	          "\t${rm} %s" SSEP "temp.exp\n",
 	          workingDirectory.c_str () );
 	
 	GenerateArchiveTarget ( module );

Modified: branches/xmlbuildsystem/reactos/tools/rbuild/module.cpp
--- branches/xmlbuildsystem/reactos/tools/rbuild/module.cpp	2005-01-07 13:34:47 UTC (rev 12867)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/module.cpp	2005-01-07 13:48:53 UTC (rev 12868)
@@ -8,37 +8,18 @@
 using std::string;
 using std::vector;
 
-#ifdef WIN32
-#define EXEPOSTFIX ".exe"
-#define SEP "\\"
 string
 FixSeparator ( const string& s )
 {
 	string s2(s);
-	char* p = strchr ( &s2[0], '/' );
+	char* p = strchr ( &s2[0], CBAD_SEP );
 	while ( p )
 	{
-		*p++ = '\\';
-		p = strchr ( p, '/' );
+		*p++ = CSEP;
+		p = strchr ( p, CBAD_SEP );
 	}
 	return s2;
 }
-#else
-#define EXEPOSTFIX
-#define SEP "/"
-string
-FixSeparator ( const string& s )
-{
-	string s2(s);
-	char* p = strchr ( &s2[0], '\\' );
-	while ( p )
-	{
-		*p++ = '/';
-		p = strchr ( p, '\\' );
-	}
-	return s2;
-}
-#endif
 
 Module::Module ( Project* project,
                  const XMLElement& moduleNode,
@@ -68,7 +49,7 @@
 	string subpath ( path );
 	if ( e.name == "file" && e.value.size () )
 	{
-		files.push_back ( new File ( path + "/" + e.value ) );
+		files.push_back ( new File ( path + CSEP + e.value ) );
 	}
 	else if ( e.name == "library" && e.value.size () )
 	{
@@ -78,7 +59,7 @@
 	{
 		const XMLAttribute* att = e.GetAttribute ( "name", true );
 		assert(att);
-		subpath = path + "/" + att->value;
+		subpath = path + CSEP + att->value;
 	}
 	for ( size_t i = 0; i < e.subElements.size (); i++ )
 		ProcessXML ( *e.subElements[i], subpath );
@@ -100,7 +81,7 @@
 string
 Module::GetPath ()
 {
-	return FixSeparator (path) + SEP + name + EXEPOSTFIX;
+	return FixSeparator (path) + CSEP + name + EXEPOSTFIX;
 }
 
 

Modified: branches/xmlbuildsystem/reactos/tools/rbuild/project.cpp
--- branches/xmlbuildsystem/reactos/tools/rbuild/project.cpp	2005-01-07 13:34:47 UTC (rev 12867)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/project.cpp	2005-01-07 13:48:53 UTC (rev 12868)
@@ -30,15 +30,12 @@
 {
 	Path path;
 
-	head = XMLParse ( xmlfile, path );
-	if ( !head )
-		throw InvalidBuildFileException ( "Document contains no 'project' tag." );
-
-	if ( head->name != "project" )
+	do
 	{
-		throw InvalidBuildFileException ( "Expected 'project', got '%s'.",
-			                              head->name.c_str());
-	}
+		head = XMLParse ( xmlfile, path );
+		if ( !head )
+			throw InvalidBuildFileException ( "Document contains no 'project' tag." );
+	} while ( head->name != "project" );
 
 	this->ProcessXML ( *head, "." );
 }
@@ -73,7 +70,7 @@
 	{
 		const XMLAttribute* att = e.GetAttribute ( "name", true );
 		assert(att);
-		subpath = path + "/" + att->value;
+		subpath = path + CSEP + att->value;
 	}
 	for ( size_t i = 0; i < e.subElements.size (); i++ )
 		ProcessXML ( *e.subElements[i], subpath );

Modified: branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.h
--- branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.h	2005-01-07 13:34:47 UTC (rev 12867)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.h	2005-01-07 13:48:53 UTC (rev 12868)
@@ -7,6 +7,20 @@
 #include "exception.h"
 #include "XML.h"
 
+#ifdef WIN32
+#define EXEPOSTFIX ".exe"
+#define CSEP '\\'
+#define CBAD_SEP '/'
+#define SSEP "\\"
+#define SBAD_SEP "/"
+#else
+#define EXEPOSTFIX
+#define CSEP '/'
+#define CBAD_SEP '\\'
+#define SSEP "/"
+#define SBAD_SEP "\\"
+#endif
+
 class Project;
 class Module;
 class File;
@@ -78,4 +92,7 @@
 	Library ( const std::string& _name );
 };
 
+extern std::string
+FixSeparator ( const std::string& s );
+
 #endif /* __RBUILD_H */

Modified: branches/xmlbuildsystem/reactos/tools/rbuild/tests/data/module.xml
--- branches/xmlbuildsystem/reactos/tools/rbuild/tests/data/module.xml	2005-01-07 13:34:47 UTC (rev 12867)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/tests/data/module.xml	2005-01-07 13:48:53 UTC (rev 12868)
@@ -1,3 +1,4 @@
+<?xml version="1.0" ?>
 <project name="Project" makefile="Makefile">
 	<directory name="dir1">
 		<module name="module1" type="buildtool">

Modified: branches/xmlbuildsystem/reactos/tools/rbuild/tests/data/project.xml
--- branches/xmlbuildsystem/reactos/tools/rbuild/tests/data/project.xml	2005-01-07 13:34:47 UTC (rev 12867)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/tests/data/project.xml	2005-01-07 13:48:53 UTC (rev 12868)
@@ -1,3 +1,4 @@
+<?xml version="1.0" ?>
 <project name="Project" makefile="Makefile">
 	<directory name="dir1">
 		<module name="module1" type="buildtool">

Modified: branches/xmlbuildsystem/reactos/tools/rbuild/tests/moduletest.cpp
--- branches/xmlbuildsystem/reactos/tools/rbuild/tests/moduletest.cpp	2005-01-07 13:34:47 UTC (rev 12867)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/tests/moduletest.cpp	2005-01-07 13:48:53 UTC (rev 12868)
@@ -11,16 +11,16 @@
 	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);
+	ARE_EQUAL("." SSEP "dir1" SSEP "file1.c", module1.files[0]->name);
+	ARE_EQUAL("." SSEP "dir1" SSEP "file2.c", module1.files[1]->name);
 
 	ARE_EQUAL(0, module1.libraries.size());
 
 	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);
+	ARE_EQUAL("." SSEP "dir2" SSEP "file3.c", module2.files[0]->name);
+	ARE_EQUAL("." SSEP "dir2" SSEP "file4.c", module2.files[1]->name);
 
 	ARE_EQUAL(1, module2.libraries.size());
 	Library& library1 = *module2.libraries[0];