Generate pre-compiled headers in intermediate directory tree
Modified: trunk/reactos/hal/halx86/generic/generic.xml
Modified: trunk/reactos/hal/halx86/xbox/halxbox.xml
Modified: trunk/reactos/tools/rbuild/backend/mingw/modulehandler.cpp
Modified: trunk/reactos/tools/rbuild/backend/mingw/modulehandler.h
  _____
Modified: trunk/reactos/hal/halx86/generic/generic.xml
--- trunk/reactos/hal/halx86/generic/generic.xml        2005-07-06
16:27:58 UTC (rev 16458)
+++ trunk/reactos/hal/halx86/generic/generic.xml        2005-07-06
16:56:28 UTC (rev 16459)
@@ -24,7 +24,7 @@
        <file>sysinfo.c</file>
        <file>time.c</file>
        <file>timer.c</file>
-    <pch>../include/hal.h</pch>
+       <pch>../include/hal.h</pch>
 </module>
 <module name="hal_generic_up" type="objectlibrary">
        <include base="hal_generic_up">../include</include>
  _____
Modified: trunk/reactos/hal/halx86/xbox/halxbox.xml
--- trunk/reactos/hal/halx86/xbox/halxbox.xml   2005-07-06 16:27:58 UTC
(rev 16458)
+++ trunk/reactos/hal/halx86/xbox/halxbox.xml   2005-07-06 16:56:28 UTC
(rev 16459)
@@ -15,5 +15,4 @@
        <file>part_xbox.c</file>
        <file>pci_xbox.c</file>
        <file>halxbox.rc</file>
-    <pch>../include/hal.h</pch>
 </module>
  _____
Modified: trunk/reactos/tools/rbuild/backend/mingw/modulehandler.cpp
--- trunk/reactos/tools/rbuild/backend/mingw/modulehandler.cpp
2005-07-06 16:27:58 UTC (rev 16458)
+++ trunk/reactos/tools/rbuild/backend/mingw/modulehandler.cpp
2005-07-06 16:56:28 UTC (rev 16459)
@@ -633,13 +633,24 @@
        const IfableData& data )
 {
        size_t i;
+       bool generateAssignment;
-       fprintf (
-               fMakefile,
-               "%s %s",
-               macro.c_str(),
-               assignmentOperation );
-
+       generateAssignment = (use_pch && module.pch != NULL ) ||
data.includes.size () > 0 || data.defines.size () > 0 ||
data.compilerFlags.size () > 0;
+       if ( generateAssignment )
+       {
+               fprintf ( fMakefile,
+                         "%s %s",
+                         macro.c_str(),
+                         assignmentOperation );
+       }
+
+       if ( use_pch && module.pch != NULL )
+       {
+               fprintf ( fMakefile,
+                         " -I %s",
+                         GetDirectory ( GetPrecompiledHeaderFilename ()
).c_str () );
+       }
+
        string compilerParameters = GenerateCompilerParametersFromVector
( data.compilerFlags );
        if ( compilerParameters.size () > 0 )
        {
@@ -669,7 +680,10 @@
                                "=%s",
                                d.value.c_str() );
        }
-       fprintf ( fMakefile, "\n" );
+       if ( generateAssignment )
+       {
+               fprintf ( fMakefile, "\n" );
+       }
 }
 void
@@ -680,15 +694,12 @@
 {
        size_t i;
-       if ( data.includes.size () > 0 || data.defines.size () > 0 ||
data.compilerFlags.size () > 0 )
-       {
-               GenerateMacro ( assignmentOperation,
-                               cflagsMacro,
-                               data );
-               GenerateMacro ( assignmentOperation,
-                               windresflagsMacro,
-                               data );
-       }
+       GenerateMacro ( assignmentOperation,
+                       cflagsMacro,
+                       data );
+       GenerateMacro ( assignmentOperation,
+                       windresflagsMacro,
+                       data );
        if ( linkerFlags != NULL )
        {
@@ -844,6 +855,14 @@
        CleanupFileVector ( sourceFiles );
 }
+string
+MingwModuleHandler::GetPrecompiledHeaderFilename () const
+{
+       const string& basePchFilename = module.pch->file.name + ".gch";
+       return PassThruCacheDirectory ( NormalizeFilename (
basePchFilename ),
+                                       backend->intermediateDirectory
);
+}
+
 void
 MingwModuleHandler::GenerateGccCommand (
        const string& sourceFilename,
@@ -852,7 +871,7 @@
 {
        string dependencies = sourceFilename;
        if ( module.pch && use_pch )
-               dependencies += " " + module.pch->file.name +
".gch";
+               dependencies += " " + GetPrecompiledHeaderFilename ();
        /* WIDL generated headers may be used */
        dependencies += " " + GetLinkingDependenciesMacro ();
@@ -1458,27 +1477,22 @@
        const string& windresflagsMacro,
        const string& widlflagsMacro )
 {
-       if ( module.pch )
+       if ( module.pch && use_pch )
        {
-               const string& pch_file = module.pch->file.name;
-               string gch_file = pch_file + ".gch";
-               CLEAN_FILE(gch_file);
-               if ( use_pch )
-               {
-                       fprintf (
-                               fMakefile,
-                               "%s: %s\n",
-                               gch_file.c_str(),
-                               pch_file.c_str() );
-                       fprintf ( fMakefile, "\t$(ECHO_PCH)\n" );
-                       fprintf (
-                               fMakefile,
-                               "\t%s -o %s %s -g %s\n\n",
-                               ( module.cplusplus ? cppc.c_str() :
cc.c_str() ),
-                               gch_file.c_str(),
-                               cflagsMacro.c_str(),
-                               pch_file.c_str() );
-               }
+               const string& baseHeaderFilename =
module.pch->file.name;
+               const string& pchFilename = GetPrecompiledHeaderFilename
();
+               CLEAN_FILE(pchFilename);
+               fprintf ( fMakefile,
+                         "%s: %s\n",
+                         pchFilename.c_str(),
+                         baseHeaderFilename.c_str() );
+               fprintf ( fMakefile, "\t$(ECHO_PCH)\n" );
+               fprintf ( fMakefile,
+                         "\t%s -o %s %s -g %s\n\n",
+                         module.cplusplus ? cppc.c_str() : cc.c_str(),
+                         pchFilename.c_str(),
+                         cflagsMacro.c_str(),
+                         baseHeaderFilename.c_str() );
        }
        GenerateObjectFileTargets ( module.non_if_data,
  _____
Modified: trunk/reactos/tools/rbuild/backend/mingw/modulehandler.h
--- trunk/reactos/tools/rbuild/backend/mingw/modulehandler.h
2005-07-06 16:27:58 UTC (rev 16458)
+++ trunk/reactos/tools/rbuild/backend/mingw/modulehandler.h
2005-07-06 16:56:28 UTC (rev 16459)
@@ -124,6 +124,7 @@
        std::string GenerateGccIncludeParameters () const;
        std::string GenerateGccParameters () const;
        std::string GenerateNasmParameters () const;
+       std::string MingwModuleHandler::GetPrecompiledHeaderFilename ()
const;
        void GenerateGccCommand ( const std::string& sourceFilename,
                                  const std::string& cc,
                                  const std::string& cflagsMacro );