Document pch and linkerflag elements.
[reactos.git] / reactos / tools / rbuild / doc / rbuild.dbk
index edd6e85..bd6d379 100644 (file)
   <module name="bootcd" type="iso">
   </module>
 &lt;/project&gt;</programlisting></para>
+    </section>
+
+    <section>
+      <title>XInclude</title>
+
+      <para>XML files used by <command>rbuild</command> are modular and use
+      XInclude to include other chunks of XML in the top-level
+      <filename>ReactOS.xml</filename> file. The namespace used by XInclude is
+      <literal>xi</literal>.</para>
 
-      <section>
-        <title>XInclude</title>
+      <section id="element.xi.include">
+        <title>xi:include</title>
 
-        <para>XML files used by <command>rbuild</command> are modular and use
-        XInclude to include other chunks of XML in the top-level ReactOS.xml
-        file. The namespace used by XInclude is <literal>xi</literal>.</para>
+        <para>It is possible to split an XML build file over several files.
+        The include element in the <literal>xi</literal> namespace is used to
+        accomplish this.</para>
 
         <section>
-          <title>xi:include</title>
+          <title>Syntax</title>
+
+          <programlisting>&lt;xi:include href="<replaceable>config.xml</replaceable>"&gt;
+  &lt;xi:fallback&gt;
+    &lt;xi:include href="<replaceable>config.template.xml</replaceable>" /&gt;
+  &lt;/xi:fallback&gt;
+&lt;/xi:include&gt;</programlisting>
+        </section>
 
-          <para>It is possible to split an XML build file over several files.
-          The include element in the <literal>xi</literal> namespace is used
-          to accomplish this.</para>
+        <section>
+          <title>Attributes</title>
 
-          <section>
-            <title>Syntax</title>
+          <para><variablelist>
+              <varlistentry>
+                <term>href</term>
 
-            <programlisting>  &lt;xi:include href="config.xml"&gt;
-    &lt;xi:fallback&gt;
-      &lt;xi:include href="config.template.xml" /&gt;
-    &lt;/xi:fallback&gt;
-  &lt;/xi:include&gt;</programlisting>
-          </section>
+                <listitem>
+                  <para>Name of XML build file to include. The filename is
+                  relative to the location of the current XML build
+                  file.</para>
+                </listitem>
+              </varlistentry>
+            </variablelist></para>
+        </section>
+
+        <section>
+          <title>Value</title>
 
-          <section>
-            <title>Attributes</title>
+          <para>None.</para>
+        </section>
 
-            <para><variablelist>
-                <varlistentry>
-                  <term>href</term>
+        <section>
+          <title>Children</title>
 
-                  <listitem>
-                    <para>Name of XML build file to include. The filename is
-                    relative to the location of the current XML build
-                    file.</para>
-                  </listitem>
-                </varlistentry>
-              </variablelist></para>
-          </section>
+          <para><link linkend="???">xi:fallback</link>.</para>
+        </section>
+      </section>
 
-          <section>
-            <title>Value</title>
+      <section id="element.xi.fallback">
+        <title>xi:fallback</title>
 
-            <para>None.</para>
-          </section>
+        <para>This element is used to provide the name of an alternate file
+        that is to be included if the first include file did not
+        exists.</para>
 
-          <section>
-            <title>Elements</title>
+        <section>
+          <title>Syntax</title>
 
-            <para>xi:fallback</para>
-          </section>
+          <programlisting>&lt;xi:fallback&gt;
+  &lt;xi:include href="<replaceable>config.template.xml</replaceable>" /&gt;
+&lt;/xi:fallback&gt;</programlisting>
         </section>
 
         <section>
-          <title>xi:fallback</title>
+          <title>Attributes</title>
 
-          <para>This element is used to provide the name of an alternate file
-          that is to be included if the first include file did not
-          exists.</para>
+          <para>None.</para>
+        </section>
 
-          <section>
-            <title>Attributes</title>
+        <section>
+          <title>Value</title>
 
-            <para>None.</para>
-          </section>
+          <para>None.</para>
+        </section>
 
-          <section>
-            <title>Value</title>
+        <section>
+          <title>Parents</title>
 
-            <para>None.</para>
-          </section>
+          <para><link linkend="element.xi.include">xi:include</link>.</para>
+        </section>
 
-          <section>
-            <title>Elements</title>
+        <section>
+          <title>Children</title>
 
-            <para>xi:include</para>
-          </section>
+          <para><link linkend="element.xi.include">xi:include</link>.</para>
         </section>
       </section>
+    </section>
 
-      <section>
-        <title xreflabel="element_project">Project element</title>
+    <section>
+      <title>Element reference</title>
 
-        <para>There can be one <sgmltag class="element">project</sgmltag> per
-        top-level XML build file. A project can only be defined in a top-level
-        XML build file.</para>
+      <section id="element.bootstrap">
+        <title>Bootstrap element</title>
+
+        <para>A bootstrap element specifies that the generated file should be
+        put on the bootable CD as a bootstrap file.</para>
 
         <section>
           <title>Syntax</title>
 
-          <para><programlisting>&lt;project name="ReactOS" makefile="Makefile.auto" xmlns:xi="http://www.w3.org/2001/XInclude"&gt;
-  ...
-&lt;/project&gt;</programlisting></para>
+          <para><programlisting>&lt;bootstrap base="reactos" nameoncd="halmp.dll" /&gt;</programlisting></para>
         </section>
 
         <section>
 
           <para><variablelist>
               <varlistentry>
-                <term>name</term>
+                <term>base</term>
 
                 <listitem>
-                  <para>Name of the project.</para>
+                  <para>Put file in this directory on the bootable CD. This
+                  attribute is optional.</para>
                 </listitem>
               </varlistentry>
 
               <varlistentry>
-                <term>makefile</term>
+                <term>nameoncd</term>
 
                 <listitem>
-                  <para>Filename of the GNU makefile that is to be
-                  created.</para>
+                  <para>Name of file on the bootable CD. This attribute is
+                  optional.</para>
                 </listitem>
               </varlistentry>
             </variablelist></para>
         </section>
 
         <section>
-          <title>Elements</title>
+          <title>Children</title>
 
-          <para><link linkend="element_define">define</link>, <link
-          linkend="element_directory">directory</link>, <link
-          linkend="element_if">if</link>, <link
-          linkend="element_include">include</link>, <link
-          linkend="element_module">module</link>, <link
-          linkend="element_property">property</link>.</para>
+          <para>None.</para>
         </section>
       </section>
 
-      <section>
-        <title xreflabel="element_module">Module element</title>
+      <section id="element.cdfile">
+        <title>CDFile element</title>
 
-        <para>There can be zero or more <sgmltag
-        class="element">module</sgmltag>s per XML build file.</para>
+        <para>A cdfile element specifies the name of a file that is to be put
+        on the bootable CD.</para>
 
         <section>
           <title>Syntax</title>
 
-          <para><programlisting>&lt;module if="${MP}" ifnot="${MP}" name="msvcrt" type="win32dll" extension=".dll" entrypoint="_DllMain@12" baseaddress="0x70000000" mangledsymbols="true" installbase="system32" installname="msvcrt.dll" usewrc="false" warnings="true" aliasof="module1"&gt;
-  ...
-&lt;/module&gt;</programlisting></para>
+          <para><programlisting>&lt;cdfile base="reactos" nameoncd="ReadMe.txt"&gt;ReadMe.txt&lt;/cdfile&gt;</programlisting></para>
         </section>
 
         <section>
 
           <para><variablelist>
               <varlistentry>
-                <term>if</term>
+                <term>base</term>
 
                 <listitem>
-                  <para>If the value is 1, then the module is enabled,
-                  otherwise it is disabled. A disabled module is not
-                  processed.</para>
+                  <para>Put file in this directory on the bootable CD. This
+                  attribute is optional.</para>
                 </listitem>
               </varlistentry>
 
               <varlistentry>
-                <term>ifnot</term>
+                <term>nameoncd</term>
 
                 <listitem>
-                  <para>If the value is 1, then the module is disabled,
-                  otherwise it is enabled. A disabled module is not
-                  processed.</para>
+                  <para>Name of file on the bootable CD. This attribute is
+                  optional.</para>
                 </listitem>
               </varlistentry>
+            </variablelist></para>
+        </section>
 
-              <varlistentry>
-                <term>name</term>
+        <section>
+          <title>Value</title>
 
-                <listitem>
-                  <para>Name of the module. Also the base name of the
-                  generated file if such file is generated for the particular
-                  module type.</para>
-                </listitem>
-              </varlistentry>
+          <para>Name of file.</para>
+        </section>
 
-              <varlistentry>
-                <term>type</term>
+        <section>
+          <title>Children</title>
 
-                <listitem>
-                  <para>Type of module. See below for an explanation of module
-                  types. <emphasis><emphasis>The module type determines the
-                  actions that is to be carried out to process the module. The
-                  defined module types are seen
-                  below:</emphasis></emphasis></para>
+          <para>None.</para>
+        </section>
+      </section>
 
-                  <table>
-                    <title>Module Types</title>
+      <section id="element.component">
+        <title>Component element</title>
 
-                    <tgroup cols="6">
-                      <thead>
-                        <row>
-                          <entry>Value</entry>
+        <para>A component element specifies that imports from a library are to
+        be stubbed so tests can be run without actually calling the functions
+        in the library. This element can only be used for modules of type
+        test.</para>
 
-                          <entry>Output name suffix</entry>
+        <section>
+          <title>Syntax</title>
 
-                          <entry>Entrypoint</entry>
+          <para><programlisting>&lt;component name="ntdll.dll"&gt;
+  ...
+&lt;/component&gt;</programlisting></para>
+        </section>
 
-                          <entry>Baseaddress</entry>
+        <section>
+          <title>Attributes</title>
 
-                          <entry>Mangledsymbols</entry>
+          <para><variablelist>
+              <varlistentry>
+                <term>name</term>
 
-                          <entry>Description</entry>
-                        </row>
-                      </thead>
+                <listitem>
+                  <para>Name of library.</para>
+                </listitem>
+              </varlistentry>
+            </variablelist></para>
+        </section>
 
-                      <tbody>
-                        <row>
-                          <entry>buildtool</entry>
+        <section>
+          <title>Value</title>
 
-                          <entrytbl cols="2">
-                            <tbody>
-                              <row>
-                                <entry><filename>.exe</filename> (Windows)</entry>
+          <para>None.</para>
+        </section>
 
-                                <entry>none (Linux)</entry>
-                              </row>
-                            </tbody>
-                          </entrytbl>
+        <section>
+          <title>Children</title>
 
-                          <entry>-</entry>
+          <para><link linkend="element.symbol">symbol</link>.</para>
+        </section>
+      </section>
 
-                          <entry>-</entry>
+      <section id="element.define">
+        <title>Define element</title>
 
-                          <entry>-</entry>
+        <para>A define element specifies the name and (optionally) value of a
+        define for the C/C++ compiler and resource compiler.</para>
 
-                          <entry>Builds a tool that can be run (invoked) when
-                          building ReactOS.</entry>
-                        </row>
+        <section>
+          <title>Syntax</title>
 
-                        <row>
-                          <entry>staticlibrary</entry>
+          <para><programlisting>&lt;define name="<replaceable>WINVER</replaceable>"&gt;<replaceable>0x501</replaceable>&lt;/define&gt;</programlisting></para>
+        </section>
 
-                          <entry><filename>.a</filename></entry>
+        <section>
+          <title>Attributes</title>
 
-                          <entry>-</entry>
+          <para><variablelist>
+              <varlistentry>
+                <term>name</term>
 
-                          <entry>-</entry>
+                <listitem>
+                  <para>Name of define.</para>
+                </listitem>
+              </varlistentry>
+            </variablelist></para>
+        </section>
 
-                          <entry>-</entry>
+        <section>
+          <title>Value</title>
 
-                          <entry>Builds a static library containing object
-                          files that can be linked together with other
-                          modules.</entry>
-                        </row>
+          <para>Value of define. The value is optional.</para>
+        </section>
 
-                        <row>
-                          <entry>objectlibrary</entry>
+        <section>
+          <title>Children</title>
 
-                          <entry><filename>.o</filename></entry>
+          <para>None.</para>
+        </section>
+      </section>
 
-                          <entry>-</entry>
+      <section id="element.dependency">
+        <title>Dependency element</title>
 
-                          <entry>-</entry>
+        <para>A dependency element specifies the name of a module (usually of
+        type buildtool) that is to be processed before the current
+        module.</para>
 
-                          <entry>-</entry>
+        <section>
+          <title>Syntax</title>
 
-                          <entry>Builds object files that can be linked
-                          together with other modules.</entry>
-                        </row>
+          <para><programlisting>&lt;dependency&gt;<replaceable>OtherModule</replaceable>&lt;/dependency&gt;</programlisting></para>
+        </section>
 
-                        <row>
-                          <entry>kernel</entry>
+        <section>
+          <title>Attributes</title>
 
-                          <entry><filename>.exe</filename></entry>
+          <para>None.</para>
+        </section>
 
-                          <entry><function>_NtProcessStartup</function></entry>
+        <section>
+          <title>Value</title>
 
-                          <entry>-</entry>
+          <para>Name of module.</para>
+        </section>
 
-                          <entry>-</entry>
+        <section>
+          <title>Children</title>
 
-                          <entry>Builds
-                          <filename>ntoskrnl.exe</filename>.</entry>
-                        </row>
+          <para>None.</para>
+        </section>
+      </section>
 
-                        <row>
-                          <entry>kernelmodedll</entry>
+      <section id="element.directory">
+        <title>Directory element</title>
 
-                          <entry><filename>.dll</filename></entry>
+        <para>A directory element specifies the name of a subdirectory.</para>
 
-                          <entry><function>_DriverEntry@8</function></entry>
+        <section>
+          <title>Syntax</title>
 
-                          <entry>-</entry>
+          <para><programlisting>&lt;directory name="<replaceable>MyDirectory</replaceable>"&gt;
+  ...
+&lt;/directory&gt;</programlisting></para>
+        </section>
 
-                          <entry>-</entry>
+        <section>
+          <title>Attributes</title>
 
-                          <entry>Builds a kernel-mode DLL.</entry>
-                        </row>
+          <para><variablelist>
+              <varlistentry>
+                <term>name</term>
 
-                        <row>
-                          <entry>kernelmodedriver</entry>
-
-                          <entry><filename>.sys</filename></entry>
-
-                          <entry><function>_DriverEntry@8</function></entry>
-
-                          <entry>-</entry>
-
-                          <entry>-</entry>
-
-                          <entry>Builds a kernel-mode driver.</entry>
-                        </row>
-
-                        <row>
-                          <entry>nativedll</entry>
-
-                          <entry><filename>.dll</filename></entry>
-
-                          <entry><function>_DllMainCRTStartup@12</function></entry>
-
-                          <entry>-</entry>
-
-                          <entry>-</entry>
-
-                          <entry>Builds a native DLL.</entry>
-                        </row>
-
-                        <row>
-                          <entry>win32dll</entry>
-
-                          <entry><filename>.dll</filename></entry>
-
-                          <entry><function>_DllMain@12</function></entry>
-
-                          <entry>-</entry>
-
-                          <entry>-</entry>
-
-                          <entry>Builds a Win32 DLL.</entry>
-                        </row>
-
-                        <row>
-                          <entry>win32cui</entry>
-
-                          <entry><filename>.exe</filename></entry>
-
-                          <entry><function>_mainCRTStartup</function></entry>
-
-                          <entry>-</entry>
-
-                          <entry>-</entry>
-
-                          <entry>Builds a Win32 console executable.</entry>
-                        </row>
-
-                        <row>
-                          <entry>win32gui</entry>
-
-                          <entry><filename>.exe</filename></entry>
-
-                          <entry><function>_WinMainCRTStartup</function></entry>
-
-                          <entry>-</entry>
-
-                          <entry>-</entry>
-
-                          <entry>Builds a Win32 GUI executable.</entry>
-                        </row>
-
-                        <row>
-                          <entry>bootloader</entry>
-
-                          <entry>-</entry>
-
-                          <entry>-</entry>
-
-                          <entry>-</entry>
-
-                          <entry>-</entry>
-
-                          <entry>Builds a bootloader.</entry>
-                        </row>
-
-                        <row>
-                          <entry>bootsector</entry>
-
-                          <entry>-</entry>
-
-                          <entry>-</entry>
-
-                          <entry>-</entry>
+                <listitem>
+                  <para>Name of directory.</para>
+                </listitem>
+              </varlistentry>
+            </variablelist></para>
+        </section>
 
-                          <entry>-</entry>
+        <section>
+          <title>Value</title>
 
-                          <entry>Builds one or more bootsector binaries. The
-                          entrypoint, baseaddress, and mangledsymbols module
-                          attributes are not applicable for this module
-                          type.</entry>
-                        </row>
+          <para>None.</para>
+        </section>
 
-                        <row>
-                          <entry>iso</entry>
+        <section>
+          <title>Children</title>
 
-                          <entry>-</entry>
+          <para><link linkend="element.cdfile">cdfile</link>, <link
+          linkend="element.directory">directory</link>, <link
+          linkend="element.file">file</link>, <link
+          linkend="element.if">if</link>, <link
+          linkend="element.pch">pch</link>, <link
+          linkend="element.property">property</link>.</para>
+        </section>
+      </section>
 
-                          <entry>-</entry>
+      <section id="element.file">
+        <title>File element</title>
 
-                          <entry>-</entry>
+        <para>A file element specifies the name of a file that is to be
+        processed.</para>
 
-                          <entry>-.</entry>
+        <section>
+          <title>Syntax</title>
 
-                          <entry>Builds a bootable CD.</entry>
-                        </row>
+          <para><programlisting>&lt;file&gt;<replaceable>MyFile.c</replaceable>&lt;/file&gt;</programlisting></para>
+        </section>
 
-                        <row>
-                          <entry>test</entry>
+        <section>
+          <title>Attributes</title>
 
-                          <entry>.exe</entry>
+          <para>None.</para>
+        </section>
 
-                          <entry>_mainCRTStartup</entry>
+        <section>
+          <title>Value</title>
 
-                          <entry>-</entry>
+          <para>Name of file.</para>
+        </section>
 
-                          <entry>-</entry>
+        <section>
+          <title>Children</title>
 
-                          <entry>Builds a testsuite.</entry>
-                        </row>
+          <para>None.</para>
+        </section>
+      </section>
 
-                        <row>
-                          <entry>rpcserver</entry>
+      <section id="element.if">
+        <title>If element</title>
 
-                          <entry><filename>.o</filename></entry>
+        <para>An if element allows for conditional processing of other
+        elements.</para>
 
-                          <entry>-</entry>
+        <section>
+          <title>Syntax</title>
 
-                          <entry>-</entry>
+          <para><programlisting>&lt;if property="<replaceable>DBG</replaceable>" value="<replaceable>1</replaceable>"&gt;
+  ...
+&lt;/if&gt;</programlisting></para>
+        </section>
 
-                          <entry>-</entry>
+        <section>
+          <title>Attributes</title>
 
-                          <entry>Generates and builds server code for an RPC
-                          interface.</entry>
-                        </row>
+          <para><variablelist>
+              <varlistentry>
+                <term>property</term>
 
-                        <row>
-                          <entry>rpcclient</entry>
+                <listitem>
+                  <para>Name of the property that is to be evaluated.</para>
+                </listitem>
+              </varlistentry>
 
-                          <entry><filename>.o</filename></entry>
+              <varlistentry>
+                <term>value</term>
 
-                          <entry>-</entry>
+                <listitem>
+                  <para>Value to compare to the value of the property. If the
+                  property has the specified value, then the subelements are
+                  processed.</para>
+                </listitem>
+              </varlistentry>
+            </variablelist></para>
+        </section>
 
-                          <entry>-</entry>
+        <section>
+          <title>Value</title>
 
-                          <entry>-</entry>
+          <para>None.</para>
+        </section>
 
-                          <entry>Generates and builds client code for an RPC
-                          interface.</entry>
-                        </row>
+        <section>
+          <title>Children</title>
 
-                        <row>
-                          <entry>alias</entry>
+          <para><link linkend="element.compilerflag">compilerflag</link>,
+          <link linkend="element.define">define</link>, <link
+          linkend="element.directory">directory</link>, <link
+          linkend="element.file">file</link>, <link
+          linkend="element.if">if</link>, <link
+          linkend="element.include">include</link>, <link
+          linkend="element.property">property</link>.</para>
+        </section>
+      </section>
 
-                          <entry>-</entry>
+      <section id="element.importlibrary">
+        <title>Importlibrary element</title>
 
-                          <entry>-</entry>
+        <para>An importlibrary element specifies that an import library should
+        be generated which other modules can use to link with the current
+        module.</para>
 
-                          <entry>-</entry>
+        <section>
+          <title>Syntax</title>
 
-                          <entry>-</entry>
+          <para><programlisting>&lt;importlibrary definition="<replaceable>MyModule.def</replaceable>" /&gt;</programlisting></para>
+        </section>
 
-                          <entry>Module is an alias for another module. This
-                          module type is the only module type for which the
-                          aliasof attribute is applicable. Only the module
-                          install functionality is aliased.</entry>
-                        </row>
-                      </tbody>
-                    </tgroup>
-                  </table>
-                </listitem>
-              </varlistentry>
+        <section>
+          <title>Attributes</title>
 
+          <para><variablelist>
               <varlistentry>
-                <term>extension</term>
+                <term>definition</term>
 
                 <listitem>
-                  <para>Extension of the generated file if such file is
-                  generated for the particular module type.</para>
+                  <para>Filename of definition file
+                  (<filename>.def</filename>) used to generate the import
+                  library. The filename is relative to the current
+                  module.</para>
                 </listitem>
               </varlistentry>
+            </variablelist></para>
+        </section>
 
-              <varlistentry>
-                <term>entrypoint</term>
+        <section>
+          <title>Value</title>
 
-                <listitem>
-                  <para>Entrypoint symbol of the generated file if such file
-                  is generated for the particular module type.</para>
-                </listitem>
-              </varlistentry>
+          <para>None.</para>
+        </section>
 
-              <varlistentry>
-                <term>baseaddress</term>
+        <section>
+          <title>Children</title>
 
-                <listitem>
-                  <para>Base address of the generated file if such file is
-                  generated for the particular module type.</para>
-                </listitem>
-              </varlistentry>
+          <para>None.</para>
+        </section>
+      </section>
 
-              <varlistentry>
-                <term>mangledsymbols</term>
+      <section id="element.include">
+        <title>Include element</title>
 
-                <listitem>
-                  <para>Controls wether or not to pass --kill-at to dlltool.
-                  If this attribute has the value false then --kill-at is
-                  passed to dlltool. If the value is true, then --kill-at is
-                  not passed to dlltool. If the generated file exports C++
-                  classes then this need to be true.</para>
-                </listitem>
-              </varlistentry>
+        <para>An include element specifies an include directory for the C/C++
+        compiler and resource compiler.</para>
 
-              <varlistentry>
-                <term>installbase</term>
+        <section>
+          <title>Syntax</title>
 
-                <listitem>
-                  <para>Base directory of the generated file in the
-                  installation directory. This attribute is optional.</para>
-                </listitem>
-              </varlistentry>
+          <para><programlisting>&lt;include base="<replaceable>MyLibraryModule</replaceable>"&gt;<replaceable>include</replaceable>&lt;/include&gt;</programlisting></para>
+        </section>
 
+        <section>
+          <title>Attributes</title>
+
+          <para><variablelist>
               <varlistentry>
-                <term>installname</term>
+                <term>base</term>
 
                 <listitem>
-                  <para>Name of generated file in the installation directory.
-                  This attribute is optional, but if not specified, the
-                  generated file is not copied to the installation
-                  directory.</para>
+                  <para>Module or project which the value of this element is
+                  relative to. This attribute is optional. If left out, the
+                  include directory is relative to the position of the
+                  top-level XML build file.</para>
                 </listitem>
               </varlistentry>
+            </variablelist></para>
+        </section>
 
-              <varlistentry>
-                <term>usewrc</term>
+        <section>
+          <title>Value</title>
 
-                <listitem>
-                  <para>Use WRC to compile resources if true. If false,
-                  windres is used. This attribute is optional. If not
-                  specified, WRC will be used.</para>
-                </listitem>
-              </varlistentry>
+          <para>Relative include directory.</para>
+        </section>
 
-              <varlistentry>
-                <term>warnings</term>
+        <section>
+          <title>Children</title>
 
-                <listitem>
-                  <para>Error out if false and at least one warning is emitted
-                  during building of this module. This attribute is optional.
-                  If not specified, it is assumed to be false.</para>
-                </listitem>
-              </varlistentry>
+          <para>None.</para>
+        </section>
+      </section>
+
+      <section id="element.input">
+        <title>Input element</title>
+
+        <para>An input element specifies a group of filenames that is to be
+        passed as parameters to a build tool. Input filename parameters are
+        located after output filename parameters on the command line.</para>
 
-              <varlistentry>
-                <term>aliasof</term>
+        <section>
+          <title>Syntax</title>
 
-                <listitem>
-                  <para>Name of module that is aliased.</para>
-                </listitem>
-              </varlistentry>
-            </variablelist></para>
+          <para><programlisting>&lt;input&gt;
+  ...
+&lt;/input&gt;</programlisting></para>
+        </section>
+
+        <section>
+          <title>Attributes</title>
+
+          <para>None.</para>
         </section>
 
         <section>
         </section>
 
         <section>
-          <title>Elements</title>
+          <title>Parents</title>
+
+          <para><link linkend="element.invoke">invoke</link>.</para>
+        </section>
+
+        <section>
+          <title>Children</title>
 
-          <para><link linkend="element_bootstrap">bootstrap</link>, <link
-          linkend="element_component">component</link>, <link
-          linkend="element_define">define</link>, <link
-          linkend="element_dependency">dependency</link>, <link
-          linkend="element_directory">directory</link>, <link
-          linkend="element_file">file</link>, <link
-          linkend="element_if">if</link>, <link
-          linkend="element_importlibrary">importlibrary</link>, <link
-          linkend="element_include">include</link>, <link
-          linkend="element_invoke">invoke</link>, <link
-          linkend="element_library">library</link>, <link
-          linkend="element_property">property</link>.</para>
+          <para><link linkend="element.inputfile">inputfile</link>.</para>
         </section>
       </section>
 
-      <section>
-        <title xreflabel="element_bootstrap">Bootstrap element</title>
+      <section id="element.inputfile">
+        <title>Inputfile element</title>
 
-        <para>A bootstrap element specifies that the generated file should be
-        put on the bootable CD as a bootstrap file.</para>
+        <para>An inputfile element specifies a filename that is to be passed
+        as a parameter to a build tool.</para>
 
         <section>
           <title>Syntax</title>
 
-          <para><programlisting>&lt;bootstrap base="reactos" nameoncd="halmp.dll" /&gt;</programlisting></para>
+          <para><programlisting>&lt;inputfile&gt;<replaceable>ntoskrnl.mc</replaceable>&lt;/inputfile&gt;</programlisting></para>
         </section>
 
         <section>
 
           <para><variablelist>
               <varlistentry>
-                <term>base</term>
-
-                <listitem>
-                  <para> Put file in this directory on the bootable CD. This
-                  attribute is optional.</para>
-                </listitem>
-              </varlistentry>
-
-              <varlistentry>
-                <term>nameoncd</term>
+                <term>switches</term>
 
                 <listitem>
-                  <para> Name of file on the bootable CD. This attribute is
-                  optional.</para>
+                  <para>Switches that is passed as parameters just before the
+                  filename. This attribute is optional.</para>
                 </listitem>
               </varlistentry>
             </variablelist></para>
         <section>
           <title>Value</title>
 
-          <para>None.</para>
+          <para>Name of file that is to be passed as a parameter to the build
+          tool.</para>
+        </section>
+
+        <section>
+          <title>Parents</title>
+
+          <para><link linkend="element.input">input</link>.</para>
         </section>
 
         <section>
-          <title>Elements</title>
+          <title>Children</title>
 
           <para>None.</para>
         </section>
       </section>
 
-      <section>
-        <title xreflabel="element_cdfile">CDFile element</title>
+      <section id="element.installfile">
+        <title>Installfile element</title>
 
-        <para>A cdfile element specifies the name of a file that is to be put
-        on the bootable CD.</para>
+        <para>An installfile element specifies the name of a file that is to
+        be installed when using '<command>make install</command>'.</para>
 
         <section>
           <title>Syntax</title>
 
-          <para><programlisting>&lt;cdfile base="reactos" nameoncd="ReadMe.txt"&gt;ReadMe.txt&lt;/cdfile&gt;</programlisting></para>
+          <para><programlisting>&lt;installfile base="<replaceable>reactos</replaceable>" newname="<replaceable>ReadMe.txt</replaceable>"&gt;<replaceable>ReadMe.txt</replaceable>&lt;/installfile&gt;</programlisting></para>
         </section>
 
         <section>
                 <term>base</term>
 
                 <listitem>
-                  <para> Put file in this directory on the bootable CD. This
-                  attribute is optional.</para>
+                  <para>Put file in this directory within the install
+                  directory. This attribute is optional.</para>
                 </listitem>
               </varlistentry>
 
               <varlistentry>
-                <term>nameoncd</term>
+                <term>newname</term>
 
                 <listitem>
-                  <para>Name of file on the bootable CD. This attribute is
-                  optional.</para>
+                  <para>Name of file within the install directory. This
+                  attribute is optional.</para>
                 </listitem>
               </varlistentry>
             </variablelist></para>
         </section>
 
         <section>
-          <title>Elements</title>
+          <title>Children</title>
 
           <para>None.</para>
         </section>
       </section>
 
-      <section>
-        <title xreflabel="element_component">Component element</title>
+      <section id="element.invoke">
+        <title>Invoke element</title>
 
-        <para>A component element specifies that imports from a library are to
-        be stubbed so tests can be run without actually calling the functions
-        in the library. This element can only be used for modules of type
-        test.</para>
+        <para>An invoke element specifies the name of a module which is to be
+        executed before the current module is processed.</para>
 
         <section>
           <title>Syntax</title>
 
-          <para><programlisting>&lt;component name="ntdll.dll"&gt;
-  ...
-&lt;/component&gt;</programlisting></para>
+          <para><programlisting>&lt;invoke module="<replaceable>wmc</replaceable>"&gt;
+  &lt;input&gt;
+    &lt;inputfile&gt;<replaceable>ntoskrnl.mc</replaceable>&lt;/inputfile&gt;
+  &lt;/input&gt;
+  &lt;output&gt;
+    &lt;outputfile switches="<replaceable>-H</replaceable>"&gt;<replaceable>../include/reactos/bugcodes.h</replaceable>&lt;/outputfile&gt;
+    &lt;outputfile switches="<replaceable>-o</replaceable>"&gt;<replaceable>bugcodes.rc</replaceable>&lt;/outputfile&gt;
+  &lt;/output&gt;
+&lt;/invoke&gt;</programlisting></para>
         </section>
 
         <section>
 
           <para><variablelist>
               <varlistentry>
-                <term>name</term>
+                <term>module</term>
 
                 <listitem>
-                  <para>Name of library.</para>
+                  <para>Name of the module to execute.</para>
                 </listitem>
               </varlistentry>
             </variablelist></para>
         </section>
 
         <section>
-          <title>Elements</title>
+          <title>Children</title>
 
-          <para><link linkend="element_symbol">symbol</link>.</para>
+          <para><link linkend="element.input">input</link>, <link
+          linkend="element.output">output</link>.</para>
         </section>
       </section>
 
-      <section>
-        <title xreflabel="element_symbol">Symbol element</title>
+      <section id="element.library">
+        <title>Library element</title>
 
-        <para>A symbol element specifies an imported function from a library
-        that is to be stubbed so tests can be run without actually calling the
-        function in the library.</para>
+        <para>A library element specifies the name of another module which is
+        to be linked with the current module.</para>
 
         <section>
           <title>Syntax</title>
 
-          <para><programlisting>&lt;symbol newname="RtlAllocateHeap"&gt;HeapAlloc@12&lt;/symbol&gt;</programlisting></para>
+          <para><programlisting>&lt;library&gt;<replaceable>MyLibraryModule</replaceable>&lt;/library&gt;</programlisting></para>
         </section>
 
         <section>
           <title>Attributes</title>
 
-          <para><variablelist>
-              <varlistentry>
-                <term>newname</term>
+          <para>None.section</para>
+        </section>
 
-                <listitem>
-                  <para>New name of symbol. This attribute is optional.</para>
-                </listitem>
-              </varlistentry>
-            </variablelist></para>
+        <section>
+          <title>Parents</title>
+
+          <para><link linkend="element.module">module</link>.</para>
+        </section>
+
+        <section>
+          <title>Children</title>
+
+          <para>None.</para>
+        </section>
+      </section>
+
+      <section id="element.linkerflag">
+        <title>Linkerflag element</title>
+
+        <para>A likerflag element specifies flags to be passed to the linker
+        tool.</para>
+
+        <section>
+          <title>Syntax</title>
+
+          <para><programlisting>&lt;linkerflag&gt;<replaceable>-lgcc</replaceable>&lt;/linkerflag&gt;</programlisting></para>
+        </section>
+
+        <section>
+          <title>Attributes</title>
+
+          <para>None.</para>
         </section>
 
         <section>
           <title>Value</title>
 
-          <para>Name of symbol.</para>
+          <para>The switches to pass to the linker.</para>
         </section>
 
         <section>
-          <title>Elements</title>
+          <title>Children</title>
 
           <para>None.</para>
         </section>
       </section>
 
-      <section>
-        <title xreflabel="element_define">Define element</title>
+      <section id="element.module">
+        <title>Module element</title>
+
+        <para>There can be zero or more <sgmltag
+        class="element">module</sgmltag>s per XML build file.</para>
+
+        <section>
+          <title>Syntax</title>
+
+          <para><programlisting>&lt;module if="${MP}" ifnot="${MP}" name="msvcrt" type="win32dll" extension=".dll" entrypoint="_DllMain@12" baseaddress="0x70000000" mangledsymbols="true" installbase="system32" installname="msvcrt.dll" usewrc="false" warnings="true" aliasof="module1"&gt;
+  ...
+&lt;/module&gt;</programlisting></para>
+        </section>
+
+        <section>
+          <title>Attributes</title>
+
+          <para><variablelist>
+              <varlistentry>
+                <term>if</term>
+
+                <listitem>
+                  <para>If the value is 1, then the module is enabled,
+                  otherwise it is disabled. A disabled module is not
+                  processed.</para>
+                </listitem>
+              </varlistentry>
+
+              <varlistentry>
+                <term>ifnot</term>
+
+                <listitem>
+                  <para>If the value is 1, then the module is disabled,
+                  otherwise it is enabled. A disabled module is not
+                  processed.</para>
+                </listitem>
+              </varlistentry>
+
+              <varlistentry>
+                <term>name</term>
+
+                <listitem>
+                  <para>Name of the module. Also the base name of the
+                  generated file if such file is generated for the particular
+                  module type.</para>
+                </listitem>
+              </varlistentry>
+
+              <varlistentry>
+                <term>type</term>
+
+                <listitem>
+                  <para>Type of module. See below for an explanation of module
+                  types. <emphasis><emphasis>The module type determines the
+                  actions that is to be carried out to process the module. The
+                  defined module types are seen
+                  below:</emphasis></emphasis></para>
+
+                  <table>
+                    <title>Module Types</title>
+
+                    <tgroup cols="6">
+                      <thead>
+                        <row>
+                          <entry>Value</entry>
+
+                          <entry>Output name suffix</entry>
+
+                          <entry>Entrypoint</entry>
+
+                          <entry>Baseaddress</entry>
+
+                          <entry>Mangledsymbols</entry>
+
+                          <entry>Description</entry>
+                        </row>
+                      </thead>
+
+                      <tbody>
+                        <row>
+                          <entry>buildtool</entry>
+
+                          <entrytbl cols="2">
+                            <tbody>
+                              <row>
+                                <entry><filename>.exe</filename> (Windows)</entry>
+
+                                <entry>none (Linux)</entry>
+                              </row>
+                            </tbody>
+                          </entrytbl>
+
+                          <entry>-</entry>
+
+                          <entry>-</entry>
+
+                          <entry>-</entry>
+
+                          <entry>Builds a tool that can be run (invoked) when
+                          building ReactOS.</entry>
+                        </row>
+
+                        <row>
+                          <entry>staticlibrary</entry>
+
+                          <entry><filename>.a</filename></entry>
+
+                          <entry>-</entry>
+
+                          <entry>-</entry>
+
+                          <entry>-</entry>
+
+                          <entry>Builds a static library containing object
+                          files that can be linked together with other
+                          modules.</entry>
+                        </row>
+
+                        <row>
+                          <entry>objectlibrary</entry>
+
+                          <entry><filename>.o</filename></entry>
+
+                          <entry>-</entry>
+
+                          <entry>-</entry>
+
+                          <entry>-</entry>
+
+                          <entry>Builds object files that can be linked
+                          together with other modules.</entry>
+                        </row>
+
+                        <row>
+                          <entry>kernel</entry>
+
+                          <entry><filename>.exe</filename></entry>
+
+                          <entry><function>_NtProcessStartup</function></entry>
+
+                          <entry>-</entry>
 
-        <para>A define element specifies the name and (optionally) value of a
-        define for the C/C++ compiler and resource compiler.</para>
+                          <entry>-</entry>
 
-        <section>
-          <title>Syntax</title>
+                          <entry>Builds
+                          <filename>ntoskrnl.exe</filename>.</entry>
+                        </row>
 
-          <para><programlisting>&lt;define name="WINVER"&gt;0x501&lt;/define&gt;</programlisting></para>
-        </section>
+                        <row>
+                          <entry>kernelmodedll</entry>
 
-        <section>
-          <title>Attributes</title>
+                          <entry><filename>.dll</filename></entry>
 
-          <para><variablelist>
-              <varlistentry>
-                <term>name</term>
+                          <entry><function>_DriverEntry@8</function></entry>
 
-                <listitem>
-                  <para> Name of define.</para>
-                </listitem>
-              </varlistentry>
-            </variablelist></para>
-        </section>
+                          <entry>-</entry>
 
-        <section>
-          <title>Value</title>
+                          <entry>-</entry>
 
-          <para>Value of define. The value is optional.</para>
-        </section>
+                          <entry>Builds a kernel-mode DLL.</entry>
+                        </row>
 
-        <section>
-          <title>Elements</title>
+                        <row>
+                          <entry>kernelmodedriver</entry>
 
-          <para>None.</para>
-        </section>
-      </section>
+                          <entry><filename>.sys</filename></entry>
 
-      <section>
-        <title xreflabel="element_dependency">Dependency element</title>
+                          <entry><function>_DriverEntry@8</function></entry>
 
-        <para>A dependency element specifies the name of a module (usually of
-        type buildtool) that is to be processed before the current
-        module.</para>
+                          <entry>-</entry>
 
-        <section>
-          <title>Syntax</title>
+                          <entry>-</entry>
 
-          <para><programlisting>&lt;dependency&gt;OtherModule&lt;/dependency&gt;</programlisting></para>
-        </section>
+                          <entry>Builds a kernel-mode driver.</entry>
+                        </row>
 
-        <section>
-          <title>Attributes</title>
+                        <row>
+                          <entry>nativedll</entry>
 
-          <para>None.</para>
-        </section>
+                          <entry><filename>.dll</filename></entry>
 
-        <section>
-          <title>Value</title>
+                          <entry><function>_DllMainCRTStartup@12</function></entry>
 
-          <para>Name of module.</para>
-        </section>
+                          <entry>-</entry>
 
-        <section>
-          <title>Elements</title>
+                          <entry>-</entry>
 
-          <para>None.</para>
-        </section>
-      </section>
+                          <entry>Builds a native DLL.</entry>
+                        </row>
 
-      <section>
-        <title xreflabel="element_directory">Directory element</title>
+                        <row>
+                          <entry>win32dll</entry>
 
-        <para>A directory element specifies the name of a subdirectory.</para>
+                          <entry><filename>.dll</filename></entry>
 
-        <section>
-          <title>Syntax</title>
+                          <entry><function>_DllMain@12</function></entry>
 
-          <para><programlisting>&lt;directory name="<replaceable>MyDirectory</replaceable>"&gt;
-  ...
-&lt;/directory&gt;</programlisting></para>
-        </section>
+                          <entry>-</entry>
 
-        <section>
-          <title>Attributes</title>
+                          <entry>-</entry>
 
-          <para><variablelist>
-              <varlistentry>
-                <term>name</term>
+                          <entry>Builds a Win32 DLL.</entry>
+                        </row>
 
-                <listitem>
-                  <para>Name of directory.</para>
-                </listitem>
-              </varlistentry>
-            </variablelist></para>
-        </section>
+                        <row>
+                          <entry>win32cui</entry>
 
-        <section>
-          <title>Value</title>
+                          <entry><filename>.exe</filename></entry>
 
-          <para>None.</para>
-        </section>
+                          <entry><function>_mainCRTStartup</function></entry>
 
-        <section>
-          <title>Elements</title>
+                          <entry>-</entry>
 
-          <para><link linkend="element_cdfile">cdfile</link>, <link
-          linkend="element_directory">directory</link>, <link
-          linkend="element_file">file</link>, <link
-          linkend="element_if">if</link>, <link
-          linkend="element_property">property</link>.</para>
-        </section>
-      </section>
+                          <entry>-</entry>
 
-      <section>
-        <title xreflabel="element_file">File element</title>
+                          <entry>Builds a Win32 console executable.</entry>
+                        </row>
 
-        <para>A file element specifies the name of a file that is to be
-        processed.</para>
+                        <row>
+                          <entry>win32gui</entry>
 
-        <section>
-          <title>Syntax</title>
+                          <entry><filename>.exe</filename></entry>
 
-          <para><programlisting>&lt;file&gt;<replaceable>MyFile.c</replaceable>&lt;/file&gt;</programlisting></para>
-        </section>
+                          <entry><function>_WinMainCRTStartup</function></entry>
 
-        <section>
-          <title>Attributes</title>
+                          <entry>-</entry>
 
-          <para>None.</para>
-        </section>
+                          <entry>-</entry>
 
-        <section>
-          <title>Value</title>
+                          <entry>Builds a Win32 GUI executable.</entry>
+                        </row>
 
-          <para>Name of file.</para>
-        </section>
+                        <row>
+                          <entry>bootloader</entry>
 
-        <section>
-          <title>Elements</title>
+                          <entry>-</entry>
 
-          <para>None.</para>
-        </section>
-      </section>
+                          <entry>-</entry>
 
-      <section>
-        <title xreflabel="element_if">If element</title>
+                          <entry>-</entry>
 
-        <para>An if element allows for conditional processing of other
-        elements.</para>
+                          <entry>-</entry>
 
-        <section>
-          <title>Syntax</title>
+                          <entry>Builds a bootloader.</entry>
+                        </row>
 
-          <para><programlisting>&lt;if property="DBG" value="1"&gt;
-  ...
-&lt;/if&gt;</programlisting></para>
-        </section>
+                        <row>
+                          <entry>bootsector</entry>
 
-        <section>
-          <title>Attributes</title>
+                          <entry>-</entry>
 
-          <para><variablelist>
-              <varlistentry>
-                <term>property</term>
+                          <entry>-</entry>
 
-                <listitem>
-                  <para>Name of the property that is to be evaluated.</para>
-                </listitem>
-              </varlistentry>
+                          <entry>-</entry>
 
-              <varlistentry>
-                <term>value</term>
+                          <entry>-</entry>
 
-                <listitem>
-                  <para>Value to compare to the value of the property. If the
-                  property has the specified value, then the subelements are
-                  processed.</para>
-                </listitem>
-              </varlistentry>
-            </variablelist></para>
-        </section>
+                          <entry>Builds one or more bootsector
+                          binaries.</entry>
+                        </row>
 
-        <section>
-          <title>Value</title>
+                        <row>
+                          <entry>iso</entry>
 
-          <para>None.</para>
-        </section>
+                          <entry>-</entry>
 
-        <section>
-          <title>Elements</title>
+                          <entry>-</entry>
 
-          <para><link linkend="element_compilerflag">compilerflag</link>,
-          <link linkend="element_define">define</link>, <link
-          linkend="element_directory">directory</link>, <link
-          linkend="element_file">file</link>, <link
-          linkend="element_if">if</link>, <link
-          linkend="element_include">include</link>, <link
-          linkend="element_property">property</link>.</para>
-        </section>
-      </section>
+                          <entry>-</entry>
 
-      <section>
-        <title xreflabel="element_importlibrary">Importlibrary element</title>
+                          <entry>-.</entry>
 
-        <para>An importlibrary element specifies that an import library should
-        be generated which other modules can use to link with the current
-        module.</para>
+                          <entry>Builds a bootable CD.</entry>
+                        </row>
 
-        <section>
-          <title>Syntax</title>
+                        <row>
+                          <entry>test</entry>
 
-          <para><programlisting>&lt;importlibrary definition="<replaceable>MyModule.def</replaceable>" /&gt;</programlisting></para>
-        </section>
+                          <entry>.exe</entry>
 
-        <section>
-          <title>Attributes</title>
+                          <entry>_mainCRTStartup</entry>
 
-          <para><variablelist>
-              <varlistentry>
-                <term>definition</term>
+                          <entry>-</entry>
 
-                <listitem>
-                  <para>Filename of definition file
-                  (<filename>.def</filename>) used to generate the import
-                  library. The filename is relative to the current
-                  module.</para>
-                </listitem>
-              </varlistentry>
-            </variablelist></para>
-        </section>
+                          <entry>-</entry>
 
-        <section>
-          <title>Value</title>
+                          <entry>Builds a testsuite.</entry>
+                        </row>
 
-          <para>None.</para>
-        </section>
+                        <row>
+                          <entry>rpcserver</entry>
 
-        <section>
-          <title>Elements</title>
+                          <entry><filename>.o</filename></entry>
 
-          <para>None.</para>
-        </section>
-      </section>
+                          <entry>-</entry>
 
-      <section>
-        <title xreflabel="element_include">Include element</title>
+                          <entry>-</entry>
 
-        <para>An include element specifies an include directory for the C/C++
-        compiler and resource compiler.</para>
+                          <entry>-</entry>
 
-        <section>
-          <title>Syntax</title>
+                          <entry>Generates and builds server code for an RPC
+                          interface.</entry>
+                        </row>
 
-          <para><programlisting>&lt;include base="<replaceable>MyLibraryModule</replaceable>"&gt;<replaceable>include</replaceable>&lt;/include&gt;</programlisting></para>
-        </section>
+                        <row>
+                          <entry>rpcclient</entry>
 
-        <section>
-          <title>Attributes</title>
+                          <entry><filename>.o</filename></entry>
 
-          <para><variablelist>
-              <varlistentry>
-                <term>base</term>
+                          <entry>-</entry>
+
+                          <entry>-</entry>
 
-                <listitem>
-                  <para>Module or project which the value of this element is
-                  relative to. This attribute is optional. If left out, the
-                  include directory is relative to the position of the
-                  top-level xml build file.</para>
-                </listitem>
-              </varlistentry>
-            </variablelist></para>
-        </section>
+                          <entry>-</entry>
 
-        <section>
-          <title>Value</title>
+                          <entry>Generates and builds client code for an RPC
+                          interface.</entry>
+                        </row>
 
-          <para>Relative include directory.</para>
-        </section>
+                        <row>
+                          <entry>alias</entry>
 
-        <section>
-          <title>Elements</title>
+                          <entry>-</entry>
 
-          <para>None.</para>
-        </section>
-      </section>
+                          <entry>-</entry>
 
-      <section>
-        <title xreflabel="element_installfile">Installfile element</title>
+                          <entry>-</entry>
 
-        <para>An installfile element specifies the name of a file that is to
-        be installed when using '<command>make install</command>'.</para>
+                          <entry>-</entry>
 
-        <section>
-          <title>Syntax</title>
+                          <entry>Module is an alias for another module. This
+                          module type is the only module type for which the
+                          aliasof attribute is applicable. Only the module
+                          install functionality is aliased.</entry>
+                        </row>
+                      </tbody>
+                    </tgroup>
+                  </table>
+                </listitem>
+              </varlistentry>
 
-          <para><programlisting>&lt;installfile base="<replaceable>reactos</replaceable>" newname="<replaceable>ReadMe.txt</replaceable>"&gt;<replaceable>ReadMe.txt</replaceable>&lt;/installfile&gt;</programlisting></para>
-        </section>
+              <varlistentry>
+                <term>extension</term>
 
-        <section>
-          <title>Attributes</title>
+                <listitem>
+                  <para>Extension of the generated file if such file is
+                  generated for the particular module type.</para>
+                </listitem>
+              </varlistentry>
 
-          <para><variablelist>
               <varlistentry>
-                <term>base</term>
+                <term>entrypoint</term>
 
                 <listitem>
-                  <para>Put file in this directory within the install
-                  directory. This attribute is optional.</para>
+                  <para>Entrypoint symbol of the generated file if such file
+                  is generated for the particular module type.</para>
                 </listitem>
               </varlistentry>
 
               <varlistentry>
-                <term>newname</term>
+                <term>baseaddress</term>
 
                 <listitem>
-                  <para>Name of file within the install directory. This
-                  attribute is optional.</para>
+                  <para>Base address of the generated file if such file is
+                  generated for the particular module type.</para>
                 </listitem>
               </varlistentry>
-            </variablelist></para>
-        </section>
 
-        <section>
-          <title>Value</title>
+              <varlistentry>
+                <term>mangledsymbols</term>
 
-          <para>Name of file.</para>
-        </section>
+                <listitem>
+                  <para>Controls wether or not to pass --kill-at to dlltool.
+                  If this attribute has the value false then --kill-at is
+                  passed to dlltool. If the value is true, then --kill-at is
+                  not passed to dlltool. If the generated file exports C++
+                  classes then this need to be true.</para>
+                </listitem>
+              </varlistentry>
 
-        <section>
-          <title>Elements</title>
+              <varlistentry>
+                <term>installbase</term>
 
-          <para>None.</para>
-        </section>
-      </section>
+                <listitem>
+                  <para>Base directory of the generated file in the
+                  installation directory. This attribute is optional.</para>
+                </listitem>
+              </varlistentry>
 
-      <section>
-        <title xreflabel="element_invoke">Invoke element</title>
+              <varlistentry>
+                <term>installname</term>
 
-        <para>An invoke element specifies the name of a module which is to be
-        executed before the current module is processed.</para>
+                <listitem>
+                  <para>Name of generated file in the installation directory.
+                  This attribute is optional, but if not specified, the
+                  generated file is not copied to the installation
+                  directory.</para>
+                </listitem>
+              </varlistentry>
 
-        <section>
-          <title>Syntax</title>
+              <varlistentry>
+                <term>usewrc</term>
 
-          <para><programlisting>&lt;invoke module="wmc"&gt;
-  &lt;input&gt;
-    &lt;inputfile&gt;ntoskrnl.mc&lt;/inputfile&gt;
-  &lt;/input&gt;
-  &lt;output&gt;
-    &lt;outputfile switches="-H"&gt;../include/reactos/bugcodes.h&lt;/outputfile&gt;
-    &lt;outputfile switches="-o"&gt;bugcodes.rc&lt;/outputfile&gt;
-  &lt;/output&gt;
-&lt;/invoke&gt;</programlisting></para>
-        </section>
+                <listitem>
+                  <para>Use WRC to compile resources if true. If false,
+                  windres is used. This attribute is optional. If not
+                  specified, WRC will be used.</para>
+                </listitem>
+              </varlistentry>
 
-        <section>
-          <title>Attributes</title>
+              <varlistentry>
+                <term>warnings</term>
+
+                <listitem>
+                  <para>Error out if false and at least one warning is emitted
+                  during building of this module. This attribute is optional.
+                  If not specified, it is assumed to be false.</para>
+                </listitem>
+              </varlistentry>
 
-          <para><variablelist>
               <varlistentry>
-                <term>module</term>
+                <term>aliasof</term>
 
                 <listitem>
-                  <para>Name of the module to execute.</para>
+                  <para>Name of module that is aliased.</para>
                 </listitem>
               </varlistentry>
             </variablelist></para>
         </section>
 
         <section>
-          <title>Elements</title>
+          <title>Parents</title>
+
+          <para><link linkend="element.project">project</link>.</para>
+        </section>
+
+        <section>
+          <title>Children</title>
 
-          <para><link linkend="element_input">input</link>, <link
-          linkend="element_output">output</link>.</para>
+          <para><link linkend="element.bootstrap">bootstrap</link>, <link
+          linkend="element.component">component</link>, <link
+          linkend="element.define">define</link>, <link
+          linkend="element.dependency">dependency</link>, <link
+          linkend="element.directory">directory</link>, <link
+          linkend="element.file">file</link>, <link
+          linkend="element.if">if</link>, <link
+          linkend="element.importlibrary">importlibrary</link>, <link
+          linkend="element.include">include</link>, <link
+          linkend="element.invoke">invoke</link>, <link
+          linkend="element.library">library</link>, <link
+          linkend="element.property">property</link>.</para>
         </section>
       </section>
 
-      <section>
-        <title xreflabel="element_input">Input element</title>
+      <section id="element.output">
+        <title>Output element</title>
 
-        <para>An input element specifies a group of filenames that is to be
-        passed as parameters to a build tool. Input filename parameters are
-        located after output filename parameters on the command line.</para>
+        <para>An output element specifies a group of filenames that is to be
+        passed as parameters to a build tool. Output filename parameters are
+        located before input filename parameters on the command line.</para>
 
         <section>
           <title>Syntax</title>
 
-          <para><programlisting>&lt;input&gt;
+          <para><programlisting>&lt;output&gt;
   ...
-&lt;/input&gt;</programlisting></para>
+&lt;/output&gt;</programlisting></para>
         </section>
 
         <section>
         </section>
 
         <section>
-          <title>Elements</title>
+          <title>Parents</title>
+
+          <para><link linkend="element.invoke">invoke</link></para>
+        </section>
+
+        <section>
+          <title>Children</title>
 
-          <para><link linkend="element_inputfile">inputfile</link>.</para>
+          <para><link linkend="element.outputfile">outputfile</link>.</para>
         </section>
       </section>
 
-      <section>
-        <title xreflabel="element_inputfile">Inputfile element</title>
+      <section id="element.outputfile">
+        <title>Outputfile element</title>
 
-        <para>An inputfile element specifies a filename that is to be passed
+        <para>An outputfile element specifies a filename that is to be passed
         as a parameter to a build tool.</para>
 
         <section>
           <title>Syntax</title>
 
-          <para><programlisting>&lt;inputfile&gt;<replaceable>ntoskrnl.mc</replaceable>&lt;/inputfile&gt;</programlisting></para>
+          <para><programlisting>&lt;outputfile switches="<replaceable>-H</replaceable>"&gt;<replaceable>../include/reactos/bugcodes.h</replaceable>&lt;/outputfile&gt;</programlisting></para>
         </section>
 
         <section>
                 <term>switches</term>
 
                 <listitem>
-                  <para>Switches that is passed as parameters just before the
+                  <para>Switches that are passed as parameters just before the
                   filename. This attribute is optional.</para>
                 </listitem>
               </varlistentry>
         </section>
 
         <section>
-          <title>Elements</title>
+          <title>Parents</title>
+
+          <para><link linkend="element.output">output</link>.</para>
+        </section>
+
+        <section>
+          <title>Children</title>
 
           <para>None.</para>
         </section>
       </section>
 
-      <section>
-        <title xreflabel="element_output">Output element</title>
+      <section id="element.pch">
+        <title>Pch element</title>
 
-        <para>An output element specifies a group of filenames that is to be
-        passed as parameters to a build tool. Output filename parameters are
-        located before input filename parameters on the command line.</para>
+        <para>A pch element specifies a GCC precompiled header file.</para>
 
         <section>
           <title>Syntax</title>
 
-          <para><programlisting>&lt;output&gt;
-  ...
-&lt;/output&gt;</programlisting></para>
+          <para><programlisting>&lt;pch&gt;<replaceable>ntdll.h</replaceable>&lt;/pch&gt;</programlisting></para>
         </section>
 
         <section>
         <section>
           <title>Value</title>
 
-          <para>None.</para>
+          <para>Name of the include file to be precompiled.</para>
         </section>
 
         <section>
-          <title>Elements</title>
+          <title>Children</title>
 
-          <para><link linkend="element_outputfile">outputfile</link>.</para>
+          <para>None.</para>
         </section>
       </section>
 
-      <section>
-        <title xreflabel="element_outputfile">Outputfile element</title>
+      <section id="element.project">
+        <title>Project element</title>
 
-        <para>An outputfile element specifies a filename that is to be passed
-        as a parameter to a build tool.</para>
+        <para>There can be one <sgmltag class="element">project</sgmltag> per
+        top-level XML build file. A project can only be defined in a top-level
+        XML build file.</para>
 
         <section>
           <title>Syntax</title>
 
-          <para><programlisting>&lt;outputfile switches="<replaceable>-H</replaceable>"&gt;<replaceable>../include/reactos/bugcodes.h</replaceable>&lt;/outputfile&gt;</programlisting></para>
+          <para><programlisting>&lt;project name="ReactOS" makefile="Makefile.auto" xmlns:xi="http://www.w3.org/2001/XInclude"&gt;
+  ...
+&lt;/project&gt;</programlisting></para>
         </section>
 
         <section>
 
           <para><variablelist>
               <varlistentry>
-                <term>switches</term>
+                <term>name</term>
 
                 <listitem>
-                  <para>Switches that are passed as parameters just before the
-                  filename. This attribute is optional.</para>
+                  <para>Name of the project.</para>
+                </listitem>
+              </varlistentry>
+
+              <varlistentry>
+                <term>makefile</term>
+
+                <listitem>
+                  <para>Filename of the GNU makefile that is to be
+                  created.</para>
                 </listitem>
               </varlistentry>
             </variablelist></para>
         <section>
           <title>Value</title>
 
-          <para>Name of file that is to be passed as a parameter to the build
-          tool.</para>
+          <para>None.</para>
         </section>
 
         <section>
-          <title>Elements</title>
+          <title>Parents</title>
 
-          <para>None.</para>
+          <para>None. This is the top-level (root) element of
+          <filename>ReactOS.xml</filename> file.</para>
+        </section>
+
+        <section>
+          <title>Children</title>
+
+          <para><link linkend="element.define">define</link>, <link
+          linkend="element.directory">directory</link>, <link
+          linkend="element.if">if</link>, <link
+          linkend="element.include">include</link>, <link
+          linkend="element.module">module</link>, <link
+          linkend="element.property">property</link>.</para>
         </section>
       </section>
 
-      <section>
-        <title xreflabel="element_library">Library element</title>
+      <section id="element.property">
+        <title>Property element</title>
 
-        <para>A library element specifies the name of another module which is
-        to be linked with the current module.</para>
+        <para>A property element specifies the name and value of a property
+        that can be used for conditional processing of the XML build
+        file.</para>
 
         <section>
           <title>Syntax</title>
 
-          <para><programlisting>&lt;library&gt;<replaceable>MyLibraryModule</replaceable>&lt;/library&gt;</programlisting></para>
+          <para><programlisting>&lt;property name="<replaceable>mypropertyname</replaceable>" value="<replaceable>mypropertyvalue</replaceable>" /&gt;</programlisting></para>
         </section>
 
         <section>
           <title>Attributes</title>
 
-          <para>None.</para>
+          <para><variablelist>
+              <varlistentry>
+                <term>name</term>
+
+                <listitem>
+                  <para>Name of property.</para>
+                </listitem>
+              </varlistentry>
+
+              <varlistentry>
+                <term>value</term>
+
+                <listitem>
+                  <para>Value of property.</para>
+                </listitem>
+              </varlistentry>
+            </variablelist></para>
         </section>
 
         <section>
           <title>Value</title>
 
-          <para>Name of the module to link with.</para>
+          <para>None.</para>
+        </section>
+
+        <section>
+          <title>Parents</title>
+
+          <para></para>
         </section>
 
         <section>
-          <title>Elements</title>
+          <title>Children</title>
 
           <para>None.</para>
         </section>
       </section>
 
-      <section>
-        <title>Property element</title>
+      <section id="element.symbol">
+        <title>Symbol element</title>
 
-        <para>A property element specifies the name and value of a property
-        that can be used for conditional processing of the XML build
-        file.</para>
+        <para>A symbol element specifies an imported function from a library
+        that is to be stubbed so tests can be run without actually calling the
+        function in the library.</para>
 
         <section>
           <title>Syntax</title>
 
-          <para><programlisting>&lt;property name="<replaceable>mypropertyname</replaceable>" value="<replaceable>mypropertyvalue</replaceable>" /&gt;</programlisting></para>
+          <para><programlisting>&lt;symbol newname="<replaceable>RtlAllocateHeap</replaceable>"&gt;<replaceable>HeapAlloc@12</replaceable>&lt;/symbol&gt;</programlisting></para>
         </section>
 
         <section>
 
           <para><variablelist>
               <varlistentry>
-                <term>name</term>
-
-                <listitem>
-                  <para>Name of property.</para>
-                </listitem>
-              </varlistentry>
-
-              <varlistentry>
-                <term>value</term>
+                <term>newname</term>
 
                 <listitem>
-                  <para>Value of property.</para>
+                  <para>New name of symbol. This attribute is optional.</para>
                 </listitem>
               </varlistentry>
             </variablelist></para>
         <section>
           <title>Value</title>
 
-          <para>None.</para>
+          <para>Name of symbol.</para>
         </section>
 
         <section>
-          <title>Elements</title>
+          <title>Children</title>
 
           <para>None.</para>
         </section>
       </section>
     </section>
+  </chapter>
 
-    <bibliography>
-      <title>Bibliography</title>
+  <bibliography>
+    <title>Bibliography</title>
 
-      <bibliomixed><title><ulink
-      url="http://www.w3.org/TR/2004/REC-xml-20040204/">Extensible Markup
-      Language (XML) 1.0 (Third Edition)</ulink></title><releaseinfo>W3C
-      Recommendation</releaseinfo><author>
-          <firstname>Fran&ccedil;ois</firstname>
+    <bibliomixed><title><ulink
+    url="http://www.w3.org/TR/2004/REC-xml-20040204/">Extensible Markup
+    Language (XML) 1.0 (Third Edition)</ulink></title><releaseinfo>W3C
+    Recommendation</releaseinfo><author>
+        <firstname>Fran&ccedil;ois</firstname>
 
-          <surname>Yergeau</surname>
-        </author><author>
-          <firstname>Tim</firstname>
+        <surname>Yergeau</surname>
+      </author><author>
+        <firstname>Tim</firstname>
 
-          <surname>Bray</surname>
-        </author><author>
-          <firstname>Jean</firstname>
+        <surname>Bray</surname>
+      </author><author>
+        <firstname>Jean</firstname>
 
-          <surname>Paoli</surname>
-        </author><author>
-          <firstname>C. M.</firstname>
+        <surname>Paoli</surname>
+      </author><author>
+        <firstname>C. M.</firstname>
 
-          <surname>Sperberg-McQueen</surname>
-        </author><author>
-          <firstname>Eve</firstname>
+        <surname>Sperberg-McQueen</surname>
+      </author><author>
+        <firstname>Eve</firstname>
 
-          <surname>Maler</surname>
-        </author><date>4th February 2004</date></bibliomixed>
+        <surname>Maler</surname>
+      </author><date>4th February 2004</date></bibliomixed>
 
-      <bibliomixed><title><ulink
-      url="http://www.w3.org/TR/2004/REC-xinclude-20041220/">XML Inclusions
-      (XInclude) Version 1.0 </ulink></title><releaseinfo>W3C
-      Recommendation</releaseinfo><editor>
-          <firstname>Jonathan</firstname>
+    <bibliomixed><title><ulink
+    url="http://www.w3.org/TR/2004/REC-xinclude-20041220/">XML Inclusions
+    (XInclude) Version 1.0 </ulink></title><releaseinfo>W3C
+    Recommendation</releaseinfo><editor>
+        <firstname>Jonathan</firstname>
 
-          <surname>Marsh</surname>
+        <surname>Marsh</surname>
 
-          <affiliation>
-            <orgname>Microsoft</orgname>
-          </affiliation>
+        <affiliation>
+          <orgname>Microsoft</orgname>
+        </affiliation>
 
-          <email>&lt;jmarsh@microsoft.com&gt;</email>
-        </editor><editor>
-          <firstname>David</firstname>
+        <email>jmarsh@microsoft.com</email>
+      </editor><editor>
+        <firstname>David</firstname>
 
-          <surname>Orchard</surname>
+        <surname>Orchard</surname>
 
-          <affiliation>
-            <orgname>BEA Systems</orgname>
-          </affiliation>
+        <affiliation>
+          <orgname>BEA Systems</orgname>
+        </affiliation>
 
-          <email>&lt;dorchard@bea.com&gt;</email>
-        </editor>20 December 2004</bibliomixed>
-    </bibliography>
-  </chapter>
+        <email>dorchard@bea.com</email>
+      </editor>20 December 2004</bibliomixed>
+  </bibliography>
 </book>
\ No newline at end of file