more efficient detection of C++ modules, fixed bug in C++ pch support,
always clean pch files, even if pch not being used
Modified:
branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler
.cpp
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/module.cpp
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.h
_____
Modified:
branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler
.cpp
---
branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler
.cpp 2005-03-10 20:07:17 UTC (rev 13916)
+++
branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler
.cpp 2005-03-10 20:34:08 UTC (rev 13917)
@@ -1056,24 +1056,27 @@
const string& windresflagsMacro,
string_list& clean_files ) const
{
- if ( module.pch && use_pch )
+ if ( module.pch )
{
const string& pch_file = module.pch->header;
string gch_file = pch_file + ".gch";
CLEAN_FILE(gch_file);
- fprintf (
- fMakefile,
- "%s: %s\n",
- gch_file.c_str(),
- pch_file.c_str() );
- fprintf ( fMakefile, "\t$(ECHO_PCH)\n" );
- fprintf (
- fMakefile,
- "\t%s -c %s -o %s %s\n\n",
- cc.c_str(),
- pch_file.c_str(),
- gch_file.c_str(),
- cflagsMacro.c_str() );
+ 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() );
+ }
}
GenerateObjectFileTargets ( module,
@@ -1456,18 +1459,10 @@
return dependencies;
}
-// TODO FIXME - check for C++ extensions when parsing XML, and set a
-// bool in the Module class
bool
MingwModuleHandler::IsCPlusPlusModule ( const Module& module ) const
{
- if ( module.HasFileWithExtension ( module.non_if_data, ".cc" ) )
- return true;
- if ( module.HasFileWithExtension ( module.non_if_data, ".cxx" )
)
- return true;
- if ( module.HasFileWithExtension ( module.non_if_data, ".cpp" )
)
- return true;
- return false;
+ return module.cplusplus;
}
_____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/module.cpp
--- branches/xmlbuildsystem/reactos/tools/rbuild/module.cpp
2005-03-10 20:07:17 UTC (rev 13916)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/module.cpp
2005-03-10 20:34:08 UTC (rev 13917)
@@ -91,7 +91,8 @@
node (moduleNode),
importLibrary (NULL),
bootstrap (NULL),
- pch (NULL)
+ pch (NULL),
+ cplusplus (false)
{
if ( node.name != "module" )
throw Exception ( "internal tool error: Module created
with non-<module> node" );
@@ -185,6 +186,17 @@
e.location,
"attribute 'first' of <file>
element can only be 'true' or 'false'" );
}
+ if ( !cplusplus )
+ {
+ // check for c++ file
+ string ext = GetExtension ( e.value );
+ if ( !stricmp ( ext.c_str(), ".cpp" ) )
+ cplusplus = true;
+ else if ( !stricmp ( ext.c_str(), ".cc" ) )
+ cplusplus = true;
+ else if ( !stricmp ( ext.c_str(), ".cxx" ) )
+ cplusplus = true;
+ }
File* pFile = new File ( FixSeparator ( path + CSEP +
e.value ), first );
if ( pIf )
pIf->data.files.push_back ( pFile );
_____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.h
--- branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.h
2005-03-10 20:07:17 UTC (rev 13916)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.h
2005-03-10 20:34:08 UTC (rev 13917)
@@ -152,6 +152,7 @@
std::vector<CompilerFlag*> compilerFlags;
std::vector<LinkerFlag*> linkerFlags;
PchFile* pch;
+ bool cplusplus;
Module ( const Project& project,
const XMLElement& moduleNode,