<html>
<head>
<style>
<!--
body { background-color:#ffffff }
.file { border:1px solid #eeeeee; margin-top:1em; margin-bottom:1em }
.pathname { font-family:monospace; float:right }
.fileheader { margin-bottom:.5em }
.diff { margin:0 }
.tasklist { padding:4px; border:1px dashed #000000; margin-top:1em }
.tasklist ul { margin-top:0; margin-bottom:0 }
tr.alt { background-color:#eeeeee }
#added { background-color:#ddffdd }
#addedchars { background-color:#99ff99; font-weight:bolder }
tr.alt #added { background-color:#ccf7cc }
#removed { background-color:#ffdddd }
#removedchars { background-color:#ff9999; font-weight:bolder }
tr.alt #removed { background-color:#f7cccc }
#info { color:#888888 }
#context { background-color:#eeeeee }
td {padding-left:.3em; padding-right:.3em }
tr.head { border-bottom-width:1px; border-bottom-style:solid }
tr.head td { padding:0; padding-top:.2em }
.task { background-color:#ffff00 }
.comment { padding:4px; border:1px dashed #000000; background-color:#ffffdd }
.error { color:red }
hr { border-width:0px; height:2px; background:black }
-->
</style>
</head>
<body>
<pre class="comment">Added support for ROS_AUTOMAKE variable.
Added support for <if> <module ...> </if>
Added BootProgram target type
Added simple initial ReactOS-ppc.xml, using my egcs compiler
More work required, but getting there</pre><pre class="diff" id="added">Added: trunk/reactos/ReactOS-ppc.xml
</pre><pre class="diff" id="context">Modified: trunk/reactos/tools/rbuild/backend/mingw/mingw.cpp
Modified: trunk/reactos/tools/rbuild/backend/mingw/mingw.h
Modified: trunk/reactos/tools/rbuild/backend/mingw/modulehandler.cpp
Modified: trunk/reactos/tools/rbuild/backend/mingw/modulehandler.h
Modified: trunk/reactos/tools/rbuild/bootstrap.cpp
Modified: trunk/reactos/tools/rbuild/define.cpp
Modified: trunk/reactos/tools/rbuild/module.cpp
Modified: trunk/reactos/tools/rbuild/project.cpp
Modified: trunk/reactos/tools/rbuild/rbuild.h
Modified: trunk/reactos/tools/rbuild/rbuild.mak
</pre><hr /><div class="file">
<div class="fileheader"><big><b>Added: trunk/reactos/ReactOS-ppc.xml</b></big></div>
<pre class="diff"><small id="info">--- trunk/reactos/ReactOS-ppc.xml        2005-12-04 12:02:21 UTC (rev 19853)
+++ trunk/reactos/ReactOS-ppc.xml        2005-12-04 12:02:45 UTC (rev 19854)
@@ -0,0 +1,91 @@
</small></pre><pre class="diff" id="added">+<?xml version="1.0"?>
+<!DOCTYPE project SYSTEM "tools/rbuild/project.dtd">
+<project name="ReactOS" makefile="makefile.ppc" xmlns:xi="http://www.w3.org/2001/XInclude">
+        <xi:include href="config-ppc.xml">
+                <xi:fallback>
+                        <xi:include href="config.template.xml" />
+                </xi:fallback>
+        </xi:include>
+
+        <xi:include href="baseaddress.xml" />
+
+        <property name="BOOTPROG_PREPARE" value="ppc-le2be" />
+        <property name="BOOTPROG_FLATFORMAT" value="-O elf32-powerpc -B powerpc:common" />
+        <property name="BOOTPROG_LINKFORMAT" value="-melf32ppc --no-omagic -Ttext 0xe00000 -Tdata 0xe10000" />
+        <property name="BOOTPROG_COPYFORMAT" value="--only-section=.text --only-section=.data --only-section=.bss -O aixcoff-rs6000" />
+
+        <define name="_M_PPC" />
+        <define name="_PPC_" />
+        <define name="__PowerPC__" />
+        <define name="_REACTOS_" />
+        <define name="__MINGW_IMPORT" empty="true" />
+        <define name="__restrict__" empty="true" />
+        <compilerflag>-v</compilerflag>
+        <if property="MP" value="1">
+                <define name="CONFIG_SMP" value="1" />
+        </if>
+        <if property="DBG" value="1">
+                <define name="DBG" value="1" />
+                <property name="DBG_OR_KDBG" value="true" />
+        </if>
+        <if property="DBG" value="0">
+                <compilerflag>-Os</compilerflag>
+                <compilerflag>-Wno-strict-aliasing</compilerflag>
+        </if>
+        <if property="KDBG" value="1">
+                <define name="KDBG" value="1" />
+                <property name="DBG_OR_KDBG" value="true" />
+        </if>
+        <compilerflag>-Wpointer-arith</compilerflag>
+
+        <include>.</include>
+        <include>include</include>
+        <include>include/reactos</include>
+        <include>include/libs</include>
+        <include>include/drivers</include>
+        <include>include/subsys</include>
+        <include>include/ndk</include>
+        <include>w32api/include</include>
+        <include>w32api/include/crt</include>
+        <include>w32api/include/ddk</include>
+
+        <directory name="apps">
+                <xi:include href="apps/directory.xml" />
+        </directory>
+        <directory name="boot">
+                <xi:include href="boot/boot.xml" />
+        </directory>
+        <directory name="bootdata">
+                <xi:include href="bootdata/bootdata.xml" />
+        </directory>
+        <directory name="drivers">
+                <xi:include href="drivers/directory.xml" />
+        </directory>
+        <directory name="hal">
+                <xi:include href="hal/directory.xml" />
+        </directory>
+        <directory name="include">
+                <xi:include href="include/directory.xml" />
+        </directory>
+        <directory name="lib">
+                <xi:include href="lib/directory.xml" />
+        </directory>
+        <directory name="media">
+                <xi:include href="media/directory.xml" />
+        </directory>
+        <directory name="modules">
+                <xi:include href="modules/directory.xml" />
+        </directory>
+        <directory name="ntoskrnl">
+                <xi:include href="ntoskrnl/ntoskrnl.xml" />
+        </directory>
+        <directory name="regtests">
+                <xi:include href="regtests/directory.xml" />
+        </directory>
+        <directory name="services">
+                <xi:include href="services/directory.xml" />
+        </directory>
+        <directory name="subsys">
+                <xi:include href="subsys/directory.xml" />
+        </directory>
+</project>
</pre></div>
<hr /><div class="file">
<div class="fileheader"><big><b>Modified: trunk/reactos/tools/rbuild/backend/mingw/mingw.cpp</b></big></div>
<pre class="diff"><small id="info">--- trunk/reactos/tools/rbuild/backend/mingw/mingw.cpp        2005-12-04 12:02:21 UTC (rev 19853)
+++ trunk/reactos/tools/rbuild/backend/mingw/mingw.cpp        2005-12-04 12:02:45 UTC (rev 19854)
@@ -71,6 +71,7 @@
</small></pre><pre class="diff" id="context"> MingwBackend::MingwBackend ( Project& project,
Configuration& configuration )
        : Backend ( project, configuration ),
</pre><pre class="diff" id="added">+         manualBinutilsSetting( false ),
</pre><pre class="diff" id="context">          intermediateDirectory ( new Directory ("$(INTERMEDIATE)" ) ),
         outputDirectory ( new Directory ( "$(OUTPUT)" ) ),
         installDirectory ( new Directory ( "$(INSTALL)" ) )
@@ -137,6 +138,7 @@
</pre><pre class="diff" id="context">
        vector<MingwModuleHandler*> v;
        size_t i;
</pre><pre class="diff" id="added">+
</pre><pre class="diff" id="context">         for ( i = 0; i < ProjectNode.modules.size (); i++ )
        {
                Module& module = *ProjectNode.modules[i];
@@ -752,6 +754,7 @@
</pre><pre class="diff" id="context"> bool
MingwBackend::IsSupportedBinutilsVersion ( const string& binutilsVersion )
{
</pre><pre class="diff" id="added">+        if ( manualBinutilsSetting ) return true;
</pre><pre class="diff" id="context">         if ( ( ( strcmp ( binutilsVersion.c_str (), "20040902") >= 0 ) &&
         ( strcmp ( binutilsVersion.c_str (), "20041008") <= 0 ) ) ||
         ( strcmp ( binutilsVersion.c_str (), "20031001") < 0 ) )
@@ -767,11 +770,13 @@
</pre><pre class="diff" id="context">
        bool detectedBinutils = false;
        const string& ROS_PREFIXValue = Environment::GetVariable ( "ROS_PREFIX" );
</pre><pre class="diff" id="added">+
</pre><pre class="diff" id="context">         if ( ROS_PREFIXValue.length () > 0 )
        {
                binutilsPrefix = ROS_PREFIXValue;
                binutilsCommand = binutilsPrefix + "-ld";
</pre><pre class="diff" id="removed">-                <span id="removedchars">detectedBinutils = TryToDetectThisBinutils ( binutilsCommand )</span>;
</pre><pre class="diff" id="added">+                <span id="addedchars">manualBinutilsSetting = true</span>;
+                detectedBinutils = true;
</pre><pre class="diff" id="context">         }
#if defined(WIN32)
        if ( !detectedBinutils )
@@ -802,6 +807,7 @@
</pre><pre class="diff" id="context">         }
        else
                printf ( "not detected\n" );
</pre><pre class="diff" id="added">+
</pre><pre class="diff" id="context"> }
void
</pre></div>
<hr /><div class="file">
<div class="fileheader"><big><b>Modified: trunk/reactos/tools/rbuild/backend/mingw/mingw.h</b></big></div>
<pre class="diff"><small id="info">--- trunk/reactos/tools/rbuild/backend/mingw/mingw.h        2005-12-04 12:02:21 UTC (rev 19853)
+++ trunk/reactos/tools/rbuild/backend/mingw/mingw.h        2005-12-04 12:02:45 UTC (rev 19854)
@@ -48,7 +48,7 @@
</small></pre><pre class="diff" id="context">         std::string nasmCommand;
        std::string binutilsPrefix;
        std::string binutilsCommand;
</pre><pre class="diff" id="removed">-        bool usePipe;
</pre><pre class="diff" id="added">+        bool usePipe<span id="addedchars">, manualBinutilsSetting</span>;
</pre><pre class="diff" id="context">         Directory* intermediateDirectory;
        Directory* outputDirectory;
        Directory* installDirectory;
</pre></div>
<hr /><div class="file">
<div class="fileheader"><big><b>Modified: trunk/reactos/tools/rbuild/backend/mingw/modulehandler.cpp</b></big></div>
<pre class="diff"><small id="info">--- trunk/reactos/tools/rbuild/backend/mingw/modulehandler.cpp        2005-12-04 12:02:21 UTC (rev 19853)
+++ trunk/reactos/tools/rbuild/backend/mingw/modulehandler.cpp        2005-12-04 12:02:45 UTC (rev 19854)
@@ -230,6 +230,9 @@
</small></pre><pre class="diff" id="context">                 case BootSector:
                        handler = new MingwBootSectorModuleHandler ( module );
                        break;
</pre><pre class="diff" id="added">+                case BootProgram:
+                        handler = new MingwBootProgramModuleHandler ( module );
+                        break;
</pre><pre class="diff" id="context">                 case Iso:
                        handler = new MingwIsoModuleHandler ( module );
                        break;
@@ -2704,6 +2707,69 @@
</pre><pre class="diff" id="context"> }
</pre><pre class="diff" id="added">+MingwBootProgramModuleHandler::MingwBootProgramModuleHandler (
+        const Module& module_ )
+        : MingwModuleHandler ( module_ )
+{
+}
+
+void
+MingwBootProgramModuleHandler::Process ()
+{
+        GenerateBootProgramModuleTarget ();
+}
+
+void
+MingwBootProgramModuleHandler::GenerateBootProgramModuleTarget ()
+{
+        string targetName ( module.GetTargetName () );
+        string targetMacro ( GetTargetMacro (module) );
+        string workingDirectory = GetWorkingDirectory ();
+        string junk_tmp = ros_temp + module.name + ".junk.tmp";
+        string junk_elf = ros_temp + module.name + ".junk.elf";
+        string junk_cpy = ros_temp + module.name + ".junk.cpy";
+        CLEAN_FILE ( junk_tmp );
+        CLEAN_FILE ( junk_elf );
+        CLEAN_FILE ( junk_cpy );
+        string objectsMacro = GetObjectsMacro ( module );
+        string linkDepsMacro = GetLinkingDependenciesMacro ();
+        string libsMacro = GetLibsMacro ();
+        const Module *payload = module.project.LocateModule ( module.payload );
+
+        GenerateRules ();
+
+        fprintf ( fMakefile, "%s: %s %s %s | %s\n",
+         targetMacro.c_str (),
+         objectsMacro.c_str (),
+         linkDepsMacro.c_str (),
+                 payload->name.c_str (),
+         GetDirectory(GetTargetFilename(module,NULL)).c_str () );
+        
+        fprintf ( fMakefile, "\t$(ECHO_BOOTPROG)\n" );
+
+        fprintf ( fMakefile, "\t$(BOOTPROG_PREPARE) $(OUTPUT)$(SEP)%s %s\n",
+                 NormalizeFilename( payload->GetPath() ).c_str (),
+                junk_cpy.c_str () );
+
+        fprintf ( fMakefile, "\t${objcopy} $(BOOTPROG_FLATFORMAT) %s %s\n",
+                junk_cpy.c_str (),
+                junk_tmp.c_str () );
+
+        fprintf ( fMakefile, "\t${ld} $(BOOTPROG_LINKFORMAT) %s %s -g -o %s\n",
+                linkDepsMacro.c_str (),
+                junk_tmp.c_str (),
+                junk_elf.c_str () );
+
+        fprintf ( fMakefile, "\t${objcopy} $(BOOTPROG_COPYFORMAT) %s %s\n",
+                junk_elf.c_str (),
+                module.GetPath().c_str () );
+
+        fprintf ( fMakefile,
+         "\t-@${rm} %s %s %s 2>$(NUL)\n",
+         junk_tmp.c_str (), junk_elf.c_str (), junk_cpy.c_str () );
+}
+
+
</pre><pre class="diff" id="context"> MingwIsoModuleHandler::MingwIsoModuleHandler (
        const Module& module_ )
</pre></div>
<hr /><div class="file">
<div class="fileheader"><big><b>Modified: trunk/reactos/tools/rbuild/backend/mingw/modulehandler.h</b></big></div>
<pre class="diff"><small id="info">--- trunk/reactos/tools/rbuild/backend/mingw/modulehandler.h        2005-12-04 12:02:21 UTC (rev 19853)
+++ trunk/reactos/tools/rbuild/backend/mingw/modulehandler.h        2005-12-04 12:02:45 UTC (rev 19854)
@@ -375,6 +375,19 @@
</small></pre><pre class="diff" id="context"> };
</pre><pre class="diff" id="added">+class MingwBootProgramModuleHandler : public MingwModuleHandler
+{
+public:
+        MingwBootProgramModuleHandler ( const Module& module );
+        virtual HostType DefaultHost() { return HostFalse; }
+        virtual void Process ();
+        std::string GetProgTextAddrMacro ();
+        std::string TypeSpecificLinkerFlags() { return "-nostartfiles -nostdlib"; }
+private:
+        void GenerateBootProgramModuleTarget ();
+};
+
+
</pre><pre class="diff" id="context"> class MingwIsoModuleHandler : public MingwModuleHandler
{
public:
</pre></div>
<hr /><div class="file">
<div class="fileheader"><big><b>Modified: trunk/reactos/tools/rbuild/bootstrap.cpp</b></big></div>
<pre class="diff"><small id="info">--- trunk/reactos/tools/rbuild/bootstrap.cpp        2005-12-04 12:02:21 UTC (rev 19853)
+++ trunk/reactos/tools/rbuild/bootstrap.cpp        2005-12-04 12:02:45 UTC (rev 19854)
@@ -51,6 +51,7 @@
</small></pre><pre class="diff" id="context">                 case KernelModeDriver:
                case BootSector:
                case BootLoader:
</pre><pre class="diff" id="added">+                case BootProgram:
</pre><pre class="diff" id="context">                         return true;
                case BuildTool:
                case StaticLibrary:
</pre></div>
<hr /><div class="file">
<div class="fileheader"><big><b>Modified: trunk/reactos/tools/rbuild/define.cpp</b></big></div>
<pre class="diff"><small id="info">--- trunk/reactos/tools/rbuild/define.cpp        2005-12-04 12:02:21 UTC (rev 19853)
+++ trunk/reactos/tools/rbuild/define.cpp        2005-12-04 12:02:45 UTC (rev 19854)
@@ -50,9 +50,11 @@
</small></pre><pre class="diff" id="context"> Define::Initialize()
{
        const XMLAttribute* att = node.GetAttribute ( "name", true );
</pre><pre class="diff" id="added">+        const XMLAttribute* empty = node.GetAttribute ( "empty", false );
</pre><pre class="diff" id="context">         assert(att);
        name = att->value;
        value = node.value;
</pre><pre class="diff" id="added">+        if( empty ) value = " ";
</pre><pre class="diff" id="context"> }
void
</pre></div>
<hr /><div class="file">
<div class="fileheader"><big><b>Modified: trunk/reactos/tools/rbuild/module.cpp</b></big></div>
<pre class="diff"><small id="info">--- trunk/reactos/tools/rbuild/module.cpp        2005-12-04 12:02:21 UTC (rev 19853)
+++ trunk/reactos/tools/rbuild/module.cpp        2005-12-04 12:02:45 UTC (rev 19854)
@@ -195,6 +195,13 @@
</small></pre><pre class="diff" id="context">         return filename;
}
</pre><pre class="diff" id="added">+void IfableData::ExtractModules( std::vector<Module*> &modules )
+{
+        size_t i;
+        for ( i = 0; i < this->modules.size (); i++ )
+                modules.push_back(this->modules[i]);
+}
+
</pre><pre class="diff" id="context"> IfableData::~IfableData()
{
        size_t i;
@@ -208,6 +215,8 @@
</pre><pre class="diff" id="context">                 delete properties[i];
        for ( i = 0; i < compilerFlags.size (); i++ )
                delete compilerFlags[i];
</pre><pre class="diff" id="added">+        for ( i = 0; i < modules.size(); i++ )
+                delete modules[i];
</pre><pre class="diff" id="context">         for ( i = 0; i < ifs.size (); i++ )
                delete ifs[i];
        for ( i = 0; i < compilationUnits.size (); i++ )
@@ -388,6 +397,12 @@
</pre><pre class="diff" id="context">                 aliasedModuleName = att->value;
        else
                aliasedModuleName = "";
</pre><pre class="diff" id="added">+
+        if ( type == BootProgram )
+        {
+                att = moduleNode.GetAttribute ( "payload", true );
+                payload = att->value;
+        }
</pre><pre class="diff" id="context"> }
Module::~Module ()
@@ -732,6 +747,8 @@
</pre><pre class="diff" id="context">                 return BootLoader;
        if ( attribute.value == "bootsector" )
                return BootSector;
</pre><pre class="diff" id="added">+        if ( attribute.value == "bootprogram" )
+                return BootProgram;
</pre><pre class="diff" id="context">         if ( attribute.value == "iso" )
                return Iso;
        if ( attribute.value == "liveiso" )
@@ -785,6 +802,8 @@
</pre><pre class="diff" id="context">                         return ".o";
                case Alias:
                        return "";
</pre><pre class="diff" id="added">+                case BootProgram:
+                        return "";
</pre><pre class="diff" id="context">         }
        throw InvalidOperationException ( __FILE__,
         __LINE__ );
@@ -828,6 +847,7 @@
</pre><pre class="diff" id="context">                 case RpcServer:
                case RpcClient:
                case Alias:
</pre><pre class="diff" id="added">+                case BootProgram:
</pre><pre class="diff" id="context">                         return "";
        }
        throw InvalidOperationException ( __FILE__,
@@ -863,6 +883,7 @@
</pre><pre class="diff" id="context">                 case RpcServer:
                case RpcClient:
                case Alias:
</pre><pre class="diff" id="added">+                case BootProgram:
</pre><pre class="diff" id="context">                         return "";
        }
        throw InvalidOperationException ( __FILE__,
@@ -895,6 +916,7 @@
</pre><pre class="diff" id="context">                 case ObjectLibrary:
                case BootLoader:
                case BootSector:
</pre><pre class="diff" id="added">+                case BootProgram:
</pre><pre class="diff" id="context">                 case Iso:
                case LiveIso:
                case RpcServer:
@@ -923,6 +945,7 @@
</pre><pre class="diff" id="context">                 case BuildTool:
                case BootLoader:
                case BootSector:
</pre><pre class="diff" id="added">+                case BootProgram:
</pre><pre class="diff" id="context">                 case Iso:
                case LiveIso:
                        return true;
@@ -1289,6 +1312,7 @@
</pre><pre class="diff" id="context"> void
If::ProcessXML()
{
</pre><pre class="diff" id="added">+        
</pre><pre class="diff" id="context"> }
@@ -1358,6 +1382,7 @@
</pre><pre class="diff" id="context">                 case KernelModeDriver:
                case BootSector:
                case BootLoader:
</pre><pre class="diff" id="added">+                case BootProgram:
</pre><pre class="diff" id="context">                 case BuildTool:
                case StaticLibrary:
                case ObjectLibrary:
</pre></div>
<hr /><div class="file">
<div class="fileheader"><big><b>Modified: trunk/reactos/tools/rbuild/project.cpp</b></big></div>
<pre class="diff"><small id="info">--- trunk/reactos/tools/rbuild/project.cpp        2005-12-04 12:02:21 UTC (rev 19853)
+++ trunk/reactos/tools/rbuild/project.cpp        2005-12-04 12:02:45 UTC (rev 19854)
@@ -97,8 +97,10 @@
</small></pre><pre class="diff" id="context">         size_t i;
        if ( _backend )
                delete _backend;
</pre><pre class="diff" id="added">+#ifdef NOT_NEEDED_SINCE_THESE_ARE_CLEANED_BY_IFABLE_DATA
</pre><pre class="diff" id="context">         for ( i = 0; i < modules.size (); i++ )
                delete modules[i];
</pre><pre class="diff" id="added">+#endif
</pre><pre class="diff" id="context">         for ( i = 0; i < linkerFlags.size (); i++ )
                delete linkerFlags[i];
        for ( i = 0; i < cdfiles.size (); i++ )
@@ -225,6 +227,7 @@
</pre><pre class="diff" id="context"> void
Project::ExecuteInvocations ()
{
</pre><pre class="diff" id="added">+        fprintf( stderr, "ExecuteInvocations\n" );
</pre><pre class="diff" id="context">         for ( size_t i = 0; i < modules.size (); i++ )
                modules[i]->InvokeModule ();
}
@@ -277,11 +280,29 @@
</pre><pre class="diff" id="context">                 ParseContext parseContext;
                ProcessXMLSubElement ( *node->subElements[i], path, parseContext );
        }
</pre><pre class="diff" id="added">+        
+        non_if_data.ProcessXML ();
+
+        non_if_data.ExtractModules( modules );
+
+        for ( i = 0; i < non_if_data.ifs.size (); i++ )
+        {
+                const Property *property =
+                 LookupProperty( non_if_data.ifs[i]->property );
+
+                if( !property ) continue;
+
+                bool conditionTrue =
+                        (non_if_data.ifs[i]->negated &&
+                         (property->value != non_if_data.ifs[i]->value)) ||
+                        (property->value == non_if_data.ifs[i]->value);
+                if ( conditionTrue )
+                        non_if_data.ifs[i]->data.ExtractModules( modules );
+        }
+        for ( i = 0; i < linkerFlags.size (); i++ )
+                linkerFlags[i]->ProcessXML ();
</pre><pre class="diff" id="context">         for ( i = 0; i < modules.size (); i++ )
                modules[i]->ProcessXML ();
</pre><pre class="diff" id="removed">-        for ( i = 0; i < linkerFlags.size (); i++ )
-                linkerFlags[i]->ProcessXML ();
-        non_if_data.ProcessXML ();
</pre><pre class="diff" id="context">         for ( i = 0; i < cdfiles.size (); i++ )
                cdfiles[i]->ProcessXML ();
        for ( i = 0; i < installfiles.size (); i++ )
@@ -294,13 +315,11 @@
</pre><pre class="diff" id="context"> ParseContext& parseContext )
{
        bool subs_invalid = false;
</pre><pre class="diff" id="added">+        If* pOldIf = parseContext.ifData;
+        
</pre><pre class="diff" id="context">         string subpath(path);
        if ( e.name == "module" )
        {
</pre><pre class="diff" id="removed">-                if ( parseContext.ifData )
-                        throw XMLInvalidBuildFileException (
-                                e.location,
-                                "<module> is not a valid sub-element of <if>" );
</pre><pre class="diff" id="context">                 Module* module = new Module ( *this, e, path );
                if ( LocateModule ( module->name ) )
                        throw XMLInvalidBuildFileException (
@@ -308,7 +327,10 @@
</pre><pre class="diff" id="context">                                 "module name conflict: '%s' (originally defined at %s)",
                                module->name.c_str(),
                                module->node.location.c_str() );
</pre><pre class="diff" id="removed">-                <span id="removedchars">modules.push_back ( module );</span>
</pre><pre class="diff" id="added">+                <span id="addedchars">if ( parseContext.ifData )</span>
+                 parseContext.ifData->data.modules.push_back( module );
+                else
+                 non_if_data.modules.push_back ( module );
</pre><pre class="diff" id="context">                 return; // defer processing until later
        }
        else if ( e.name == "cdfile" )
@@ -363,7 +385,6 @@
</pre><pre class="diff" id="context">         }
        else if ( e.name == "if" )
        {
</pre><pre class="diff" id="removed">-                If* pOldIf = parseContext.ifData;
</pre><pre class="diff" id="context">                 parseContext.ifData = new If ( e, *this, NULL );
                if ( pOldIf )
                        pOldIf->data.ifs.push_back ( parseContext.ifData );
@@ -373,7 +394,6 @@
</pre><pre class="diff" id="context">         }
        else if ( e.name == "ifnot" )
        {
</pre><pre class="diff" id="removed">-                If* pOldIf = parseContext.ifData;
</pre><pre class="diff" id="context">                 parseContext.ifData = new If ( e, *this, NULL, true );
                if ( pOldIf )
                        pOldIf->data.ifs.push_back ( parseContext.ifData );
@@ -398,6 +418,8 @@
</pre><pre class="diff" id="context">         }
        for ( size_t i = 0; i < e.subElements.size (); i++ )
                ProcessXMLSubElement ( *e.subElements[i], subpath, parseContext );
</pre><pre class="diff" id="added">+
+        parseContext.ifData = pOldIf;
</pre><pre class="diff" id="context"> }
Module*
</pre></div>
<hr /><div class="file">
<div class="fileheader"><big><b>Modified: trunk/reactos/tools/rbuild/rbuild.h</b></big></div>
<pre class="diff"><small id="info">--- trunk/reactos/tools/rbuild/rbuild.h        2005-12-04 12:02:21 UTC (rev 19853)
+++ trunk/reactos/tools/rbuild/rbuild.h        2005-12-04 12:02:45 UTC (rev 19854)
@@ -183,11 +183,13 @@
</small></pre><pre class="diff" id="context">         std::vector<Define*> defines;
        std::vector<Library*> libraries;
        std::vector<Property*> properties;
</pre><pre class="diff" id="added">+        std::vector<Module*> modules;
</pre><pre class="diff" id="context">         std::vector<CompilerFlag*> compilerFlags;
        std::vector<If*> ifs;
        ~IfableData();
        void ProcessXML();
</pre><pre class="diff" id="added">+        void ExtractModules( std::vector<Module*> &modules );
</pre><pre class="diff" id="context"> };
class Project
@@ -200,10 +202,10 @@
</pre><pre class="diff" id="context">         std::string name;
        std::string makefile;
        XMLIncludes xmlbuildfiles;
</pre><pre class="diff" id="removed">-        std::vector<Module*> modules;
</pre><pre class="diff" id="context">         std::vector<LinkerFlag*> linkerFlags;
        std::vector<CDFile*> cdfiles;
        std::vector<InstallFile*> installfiles;
</pre><pre class="diff" id="added">+        std::vector<Module*> modules;
</pre><pre class="diff" id="context">         IfableData non_if_data;
        Project ( const Configuration& configuration,
@@ -258,7 +260,8 @@
</pre><pre class="diff" id="context">         Test = 15,
        RpcServer = 16,
        RpcClient = 17,
</pre><pre class="diff" id="removed">-        Alias = 18
</pre><pre class="diff" id="added">+        Alias = 18<span id="addedchars">,</span>
+        BootProgram = 19
</pre><pre class="diff" id="context"> };
enum HostType
@@ -279,6 +282,7 @@
</pre><pre class="diff" id="context">         std::string extension;
        std::string entrypoint;
        std::string baseaddress;
</pre><pre class="diff" id="added">+        std::string payload;
</pre><pre class="diff" id="context">         std::string path;
        ModuleType type;
        ImportLibrary* importLibrary;
</pre></div>
<hr /><div class="file">
<div class="fileheader"><big><b>Modified: trunk/reactos/tools/rbuild/rbuild.mak</b></big></div>
<pre class="diff"><small id="info">--- trunk/reactos/tools/rbuild/rbuild.mak        2005-12-04 12:02:21 UTC (rev 19853)
+++ trunk/reactos/tools/rbuild/rbuild.mak        2005-12-04 12:02:45 UTC (rev 19854)
@@ -254,6 +254,7 @@
</small></pre><pre class="diff" id="context">
.PHONY: rbuild
rbuild: $(RBUILD_TARGET)
</pre><pre class="diff" id="added">+host_gpp += -g
</pre><pre class="diff" id="context">
$(RBUILD_TARGET): $(RBUILD_OBJECTS) $(XML_SSPRINTF_OBJECTS) $(INFLIB_HOST_OBJECTS) | $(RBUILD_OUT)
        $(ECHO_LD)
</pre>
</div>
</body>
</html>