Include and define support.
Modified: branches/xmlbuildsystem/reactos/ReactOS.xml
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/module.xml
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler.cpp
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler.h
Added: branches/xmlbuildsystem/reactos/tools/rbuild/define.cpp
Added: branches/xmlbuildsystem/reactos/tools/rbuild/include.cpp
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/makefile
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/test.h
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/tests/alltests.cpp
Added: branches/xmlbuildsystem/reactos/tools/rbuild/tests/data/define.xml
Added: branches/xmlbuildsystem/reactos/tools/rbuild/tests/data/include.xml
Added: branches/xmlbuildsystem/reactos/tools/rbuild/tests/definetest.cpp
Added: branches/xmlbuildsystem/reactos/tools/rbuild/tests/includetest.cpp

Modified: branches/xmlbuildsystem/reactos/ReactOS.xml
--- branches/xmlbuildsystem/reactos/ReactOS.xml	2005-01-07 19:24:54 UTC (rev 12875)
+++ branches/xmlbuildsystem/reactos/ReactOS.xml	2005-01-07 21:46:18 UTC (rev 12876)
@@ -1,4 +1,7 @@
 <project name="ReactOS" makefile="Makefile.auto">
+	<define name="_M_IX86"></define>
+	<include>./include</include>
+	<include>./w32api/include</include>
 	<directory name="tools">
 		<module name="depends" type="buildtool">
 			<file>depends.c</file>

Modified: branches/xmlbuildsystem/reactos/ntoskrnl/module.xml
--- branches/xmlbuildsystem/reactos/ntoskrnl/module.xml	2005-01-07 19:24:54 UTC (rev 12875)
+++ branches/xmlbuildsystem/reactos/ntoskrnl/module.xml	2005-01-07 21:46:18 UTC (rev 12876)
@@ -1,4 +1,9 @@
 <module name="ntoskrnl" type="kernelmodedll">
+	<define name="_SEH_NO_NATIVE_NLG"></define>
+	<define name="_DISABLE_TIDENTS"></define>
+	<define name="__NTOSKRNL__"></define>
+	<define name="__3GB__"></define>
+	<include>.</include>
 	<include>./include</include>
 	<include>../lib/kjs/include</include>
 	<library>kjs</library>
@@ -7,7 +12,6 @@
 		<file>copy.c</file>
 		<file>fs.c</file>
 		<file>mdl.c</file>
-		<file>misc.c</file>
 		<file>pin.c</file>
 		<file>view.c</file>
 	</directory>
@@ -35,8 +39,8 @@
 				<file>kdb.c</file>
 				<file>kdb_keyboard.c</file>
 				<file>kdb_serial.c</file>
+				<file>rdebug.c</file>
 				<file>profile.c</file>
-				<file>rdebug.c</file>
 			</group>
 		</if>
 		<or>
@@ -53,10 +57,10 @@
 				</group>
 			</if>
 		</or>
-		<file>user.c</file>
 		<file>dbgctrl.c</file>
 		<file>errinfo.c</file>
 		<file>print.c</file>
+		<file>user.c</file>
 	</directory>
 	<directory name="ex">
 		<if property="arch" value="i386">
@@ -100,10 +104,6 @@
 		<file>util.c</file>
 	</directory>
 	<directory name="inbv">
-		<if property="arch" value="i386">
-			<directory name="i386">
-			</directory>
-		</if>
 		<file>inbv.c</file>
 	</directory>
 	<directory name="io">
@@ -177,9 +177,8 @@
 				<file>i386-mcount.S</file>
 				<file>idt.c</file>
 				<file>irq.c</file>
-				<file>irqhand.S</file>
+				<file>irqhand.s</file>
 				<file>kernel.c</file>
-				<file>kernel.c</file>
 				<file>ldt.c</file>
 				<file>multiboot.S</file>
 				<file>stkswitch.S</file>
@@ -251,6 +250,9 @@
 		<file>balance.c</file>
 		<file>cont.c</file>
 		<file>drvlck.c</file>
+		<file>elf32.c</file>
+		<file>elf64.c</file>
+		<file>elf.c</file>
 		<file>freelist.c</file>
 		<file>iospace.c</file>
 		<file>kmap.c</file>
@@ -266,6 +268,7 @@
 		<file>pager.c</file>
 		<file>pagfault.c</file>
 		<file>paging.c</file>
+		<file>pe.c</file>
 		<file>physical.c</file>
 		<file>pool.c</file>
 		<file>ppool.c</file>
Property changes on: branches/xmlbuildsystem/reactos/tools/rbuild
___________________________________________________________________
Name: svn:ignore
   + *.exe

Modified: branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler.cpp
--- branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler.cpp	2005-01-07 19:24:54 UTC (rev 12875)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler.cpp	2005-01-07 21:46:18 UTC (rev 12876)
@@ -7,6 +7,7 @@
 #include "modulehandler.h"
 
 using std::string;
+using std::vector;
 
 MingwModuleHandler::MingwModuleHandler ( FILE* fMakefile )
 	: fMakefile ( fMakefile )
@@ -93,6 +94,80 @@
 	return objectFilenames;
 }
 
+string
+MingwModuleHandler::GenerateGccDefineParametersFromVector ( vector<Define*> defines )
+{
+	string parameters;
+	for (size_t i = 0; i < defines.size (); i++)
+	{
+		Define& define = *defines[i];
+		if (parameters.length () > 0)
+			parameters += " ";
+		parameters += "-D";
+		parameters += define.name;
+		if (define.value.length () > 0)
+		{
+			parameters += "=";
+			parameters += define.value;
+		}
+	}
+	return parameters;
+}
+
+string
+MingwModuleHandler::GenerateGccDefineParameters ( Module& module )
+{
+	string parameters = GenerateGccDefineParametersFromVector ( module.project->defines );
+	string s = GenerateGccDefineParametersFromVector ( module.defines );
+	if (s.length () > 0)
+	{
+		parameters += " ";
+		parameters += s;
+	}
+	return parameters;
+}
+
+string
+MingwModuleHandler::GenerateGccIncludeParametersFromVector ( vector<Include*> includes )
+{
+	string parameters;
+	for (size_t i = 0; i < includes.size (); i++)
+	{
+		Include& include = *includes[i];
+		if (parameters.length () > 0)
+			parameters += " ";
+		parameters += "-I";
+		parameters += include.directory;
+	}
+	return parameters;
+}
+
+string
+MingwModuleHandler::GenerateGccIncludeParameters ( Module& module )
+{
+	string parameters = GenerateGccIncludeParametersFromVector ( module.project->includes );
+	string s = GenerateGccIncludeParametersFromVector ( module.includes );
+	if (s.length () > 0)
+	{
+		parameters += " ";
+		parameters += s;
+	}
+	return parameters;
+}
+
+string
+MingwModuleHandler::GenerateGccParameters ( Module& module )
+{
+	string parameters = GenerateGccDefineParameters ( module );
+	string s = GenerateGccIncludeParameters ( module );
+	if (s.length () > 0)
+	{
+		parameters += " ";
+		parameters += s;
+	}
+	return parameters;
+}
+
 void
 MingwModuleHandler::GenerateObjectFileTargets ( Module& module )
 {
@@ -108,9 +183,10 @@
 		          objectFilename.c_str (),
 		          sourceFilename.c_str() );
 		fprintf ( fMakefile,
-		          "\t${gcc} -c %s -o %s\n",
+		          "\t${gcc} -c %s -o %s %s\n",
 		          sourceFilename.c_str (),
-		          objectFilename.c_str () );
+		          objectFilename.c_str (),
+		          GenerateGccParameters ( module ).c_str () );
 	}
 	
 	fprintf ( fMakefile, "\n" );

Modified: branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler.h
--- branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler.h	2005-01-07 19:24:54 UTC (rev 12875)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler.h	2005-01-07 21:46:18 UTC (rev 12876)
@@ -21,6 +21,12 @@
 	void GenerateObjectFileTargets ( Module& module );
 	void GenerateArchiveTarget ( Module& module );
 	FILE* fMakefile;
+private:
+	std::string GenerateGccDefineParametersFromVector ( std::vector<Define*> defines );
+	std::string GenerateGccDefineParameters ( Module& module );
+	std::string GenerateGccIncludeParametersFromVector ( std::vector<Include*> includes );
+	std::string GenerateGccIncludeParameters ( Module& module );
+	std::string GenerateGccParameters ( Module& module );
 };
 
 

Added: branches/xmlbuildsystem/reactos/tools/rbuild/define.cpp
--- branches/xmlbuildsystem/reactos/tools/rbuild/define.cpp	2005-01-07 19:24:54 UTC (rev 12875)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/define.cpp	2005-01-07 21:46:18 UTC (rev 12876)
@@ -0,0 +1,44 @@
+#include "pch.h"
+#include <assert.h>
+
+#include "rbuild.h"
+
+using std::string;
+using std::vector;
+
+Define::Define ( Project* project,
+                 const XMLElement& defineNode )
+	: project(project),
+	  module(NULL),
+	  node(defineNode)
+{
+	Initialize (defineNode);
+}
+
+Define::Define ( Project* project,
+	             Module* module,
+                 const XMLElement& defineNode )
+	: project(project),
+	  module(module),
+	  node(defineNode)
+{
+	Initialize (defineNode);
+}
+
+Define::~Define ()
+{
+}
+
+void
+Define::Initialize ( const XMLElement& defineNode )
+{
+	const XMLAttribute* att = defineNode.GetAttribute ( "name", true );
+	assert(att);
+	name = att->value;
+	value = defineNode.value;
+}
+
+void
+Define::ProcessXML ( const XMLElement& e )
+{
+}

Added: branches/xmlbuildsystem/reactos/tools/rbuild/include.cpp
--- branches/xmlbuildsystem/reactos/tools/rbuild/include.cpp	2005-01-07 19:24:54 UTC (rev 12875)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/include.cpp	2005-01-07 21:46:18 UTC (rev 12876)
@@ -0,0 +1,39 @@
+#include "pch.h"
+#include <assert.h>
+
+#include "rbuild.h"
+
+using std::string;
+using std::vector;
+
+Include::Include ( Project* project,
+                   const XMLElement& includeNode )
+	: project(project),
+	  node(includeNode)
+{
+	Initialize ( includeNode );
+}
+
+Include::Include ( Project* project,
+	               Module* module,
+	               const XMLElement& includeNode )
+	: project(project),
+	  node(includeNode)
+{
+	Initialize ( includeNode );
+}
+
+Include::~Include ()
+{
+}
+
+void
+Include::Initialize ( const XMLElement& includeNode )
+{
+	directory = includeNode.value;
+}
+
+void
+Include::ProcessXML ( const XMLElement& e )
+{
+}

Modified: branches/xmlbuildsystem/reactos/tools/rbuild/makefile
--- branches/xmlbuildsystem/reactos/tools/rbuild/makefile	2005-01-07 19:24:54 UTC (rev 12875)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/makefile	2005-01-07 21:46:18 UTC (rev 12876)
@@ -14,7 +14,9 @@
 
 BASE_OBJECTS = \
 	$(BACKEND_BASE_OBJECTS) \
+	define.o \
 	exception.o \
+	include.o \
 	module.o \
 	project.o \
 	ssprintf.o \
@@ -23,6 +25,8 @@
 OBJECTS = $(BASE_OBJECTS) rbuild.o
 
 TESTS = \
+	tests/definetest.o \
+	tests/includetest.o \
 	tests/moduletest.o \
 	tests/projecttest.o
 

Modified: branches/xmlbuildsystem/reactos/tools/rbuild/module.cpp
--- branches/xmlbuildsystem/reactos/tools/rbuild/module.cpp	2005-01-07 19:24:54 UTC (rev 12875)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/module.cpp	2005-01-07 21:46:18 UTC (rev 12876)
@@ -61,6 +61,18 @@
 		assert(att);
 		subpath = path + CSEP + att->value;
 	}
+	else if ( e.name == "include" )
+	{
+		Include* include = new Include ( project, this, e );
+		includes.push_back ( include );
+		include->ProcessXML ( e );
+	}
+	else if ( e.name == "define" )
+	{
+		Define* define = new Define ( project, this, e );
+		defines.push_back ( define );
+		define->ProcessXML ( e );
+	}
 	for ( size_t i = 0; i < e.subElements.size (); i++ )
 		ProcessXML ( *e.subElements[i], subpath );
 }

Modified: branches/xmlbuildsystem/reactos/tools/rbuild/project.cpp
--- branches/xmlbuildsystem/reactos/tools/rbuild/project.cpp	2005-01-07 19:24:54 UTC (rev 12875)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/project.cpp	2005-01-07 21:46:18 UTC (rev 12876)
@@ -72,6 +72,18 @@
 		assert(att);
 		subpath = path + CSEP + att->value;
 	}
+	else if ( e.name == "include" )
+	{
+		Include* include = new Include ( this, e );
+		includes.push_back ( include );
+		include->ProcessXML ( e );
+	}
+	else if ( e.name == "define" )
+	{
+		Define* define = new Define ( this, e );
+		defines.push_back ( define );
+		define->ProcessXML ( e );
+	}
 	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 19:24:54 UTC (rev 12875)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.h	2005-01-07 21:46:18 UTC (rev 12876)
@@ -23,6 +23,8 @@
 
 class Project;
 class Module;
+class Include;
+class Define;
 class File;
 class Library;
 
@@ -32,7 +34,9 @@
 	std::string name;
 	std::string makefile;
 	std::vector<Module*> modules;
-
+	std::vector<Include*> includes;
+	std::vector<Define*> defines;
+	
 	Project ();
 	Project ( const std::string& filename );
 	~Project ();
@@ -53,6 +57,7 @@
 	KernelModeDLL
 };
 
+
 class Module
 {
 public:
@@ -63,18 +68,61 @@
 	ModuleType type;
 	std::vector<File*> files;
 	std::vector<Library*> libraries;
+	std::vector<Include*> includes;
+	std::vector<Define*> defines;
 
 	Module ( Project* project,
 	         const XMLElement& moduleNode,
 	         const std::string& moduleName,
 	         const std::string& modulePath );
-	~Module();
+	~Module ();
 	ModuleType GetModuleType (const XMLAttribute& attribute );
 	std::string GetPath ();
 	void ProcessXML ( const XMLElement& e, const std::string& path );
 };
 
 
+class Include
+{
+public:
+	Project* project;
+	Module* module;
+	const XMLElement& node;
+	std::string directory;
+
+	Include ( Project* project,
+	          const XMLElement& includeNode );
+	Include ( Project* project,
+	          Module* module,
+	          const XMLElement& includeNode );
+	~Include ();
+	void ProcessXML ( const XMLElement& e );
+private:
+	void Initialize ( const XMLElement& includeNode );
+};
+
+
+class Define
+{
+public:
+	Project* project;
+	Module* module;
+	const XMLElement& node;
+	std::string name;
+	std::string value;
+
+	Define ( Project* project,
+	         const XMLElement& defineNode );
+	Define ( Project* project,
+	         Module* module,
+	         const XMLElement& defineNode );
+	~Define();
+	void ProcessXML ( const XMLElement& e );
+private:
+	void Initialize ( const XMLElement& defineNode );
+};
+
+
 class File
 {
 public:

Modified: branches/xmlbuildsystem/reactos/tools/rbuild/test.h
--- branches/xmlbuildsystem/reactos/tools/rbuild/test.h	2005-01-07 19:24:54 UTC (rev 12875)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/test.h	2005-01-07 21:46:18 UTC (rev 12876)
@@ -52,4 +52,18 @@
 	void Run();
 };
 
+
+class DefineTest : public BaseTest
+{
+public:
+	void Run();
+};
+
+
+class IncludeTest : public BaseTest
+{
+public:
+	void Run();
+};
+
 #endif /* __TEST_H */

Modified: branches/xmlbuildsystem/reactos/tools/rbuild/tests/alltests.cpp
--- branches/xmlbuildsystem/reactos/tools/rbuild/tests/alltests.cpp	2005-01-07 19:24:54 UTC (rev 12875)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/tests/alltests.cpp	2005-01-07 21:46:18 UTC (rev 12876)
@@ -147,6 +147,8 @@
 	{
 		tests.push_back(new ProjectTest());
 		tests.push_back(new ModuleTest());
+		tests.push_back(new DefineTest());
+		tests.push_back(new IncludeTest());
 	}
 };
 

Added: branches/xmlbuildsystem/reactos/tools/rbuild/tests/data/define.xml
--- branches/xmlbuildsystem/reactos/tools/rbuild/tests/data/define.xml	2005-01-07 19:24:54 UTC (rev 12875)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/tests/data/define.xml	2005-01-07 21:46:18 UTC (rev 12876)
@@ -0,0 +1,9 @@
+<?xml version="1.0" ?>
+<project name="Project" makefile="Makefile">
+	<define name="define1">value1</define>
+	<directory name="dir1">
+		<module name="module1" type="buildtool">
+			<define name="define2">value2</define>
+		</module>
+	</directory>
+</project>

Added: branches/xmlbuildsystem/reactos/tools/rbuild/tests/data/include.xml
--- branches/xmlbuildsystem/reactos/tools/rbuild/tests/data/include.xml	2005-01-07 19:24:54 UTC (rev 12875)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/tests/data/include.xml	2005-01-07 21:46:18 UTC (rev 12876)
@@ -0,0 +1,9 @@
+<?xml version="1.0" ?>
+<project name="Project" makefile="Makefile">
+	<include>include1</include>
+	<directory name="dir1">
+		<module name="module1" type="buildtool">
+				<include>include2</include>
+		</module>
+	</directory>
+</project>

Added: branches/xmlbuildsystem/reactos/tools/rbuild/tests/definetest.cpp
--- branches/xmlbuildsystem/reactos/tools/rbuild/tests/definetest.cpp	2005-01-07 19:24:54 UTC (rev 12875)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/tests/definetest.cpp	2005-01-07 21:46:18 UTC (rev 12876)
@@ -0,0 +1,21 @@
+#include "test.h"
+
+using std::string;
+
+void DefineTest::Run()
+{
+	string projectFilename ( "tests/data/define.xml" );
+	Project project ( projectFilename );
+	ARE_EQUAL(1, project.defines.size());
+	Define& define1 = *project.defines[0];
+	ARE_EQUAL("define1", define1.name);
+	ARE_EQUAL("value1", define1.value);
+
+	ARE_EQUAL(1, project.modules.size());
+	Module& module1 = *project.modules[0];
+
+	ARE_EQUAL(1, module1.defines.size());
+	Define& define2 = *module1.defines[0];
+	ARE_EQUAL("define2", define2.name);
+	ARE_EQUAL("value2", define2.value);
+}

Added: branches/xmlbuildsystem/reactos/tools/rbuild/tests/includetest.cpp
--- branches/xmlbuildsystem/reactos/tools/rbuild/tests/includetest.cpp	2005-01-07 19:24:54 UTC (rev 12875)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/tests/includetest.cpp	2005-01-07 21:46:18 UTC (rev 12876)
@@ -0,0 +1,19 @@
+#include "test.h"
+
+using std::string;
+
+void IncludeTest::Run()
+{
+	string projectFilename ( "tests/data/include.xml" );
+	Project project ( projectFilename );
+	ARE_EQUAL(1, project.includes.size());
+	Include& include1 = *project.includes[0];
+	ARE_EQUAL("include1", include1.directory);
+
+	ARE_EQUAL(1, project.modules.size());
+	Module& module1 = *project.modules[0];
+
+	ARE_EQUAL(1, module1.includes.size());
+	Include& include2 = *module1.includes[0];
+	ARE_EQUAL("include2", include2.directory);
+}