Support compilerflag within IFs
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/rtl/misc.c
Modified:
branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/mingw.cpp
Modified:
branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler
.cpp
Modified:
branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler
.h
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/compilerflag.cpp
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/module.cpp
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/project.cpp
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.h
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.txt
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/test.h
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/tests/data/if.xml
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/tests/iftest.cpp
_____
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/rtl/misc.c
--- branches/xmlbuildsystem/reactos/ntoskrnl/rtl/misc.c 2005-05-13
19:01:46 UTC (rev 15266)
+++ branches/xmlbuildsystem/reactos/ntoskrnl/rtl/misc.c 2005-05-13
19:17:44 UTC (rev 15267)
@@ -1,4 +1,4 @@
-/* $Id:$
+/* $Id$
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
_____
Modified:
branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/mingw.cpp
--- branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/mingw.cpp
2005-05-13 19:01:46 UTC (rev 15266)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/mingw.cpp
2005-05-13 19:17:44 UTC (rev 15267)
@@ -393,6 +393,15 @@
fMakefile,
"PROJECT_CFLAGS %s",
assignmentOperation );
+
+ for ( i = 0; i < data.compilerFlags.size(); i++ )
+ {
+ fprintf (
+ fMakefile,
+ " %s",
+ data.compilerFlags[i]->flag.c_str() );
+ }
+
for ( i = 0; i < data.includes.size(); i++ )
{
fprintf (
@@ -432,7 +441,7 @@
prop.value.c_str() );
}
- if ( data.includes.size() || data.defines.size() )
+ if ( data.includes.size() || data.defines.size() ||
data.compilerFlags.size() )
{
GenerateProjectCFlagsMacro ( assignmentOperation,
data );
@@ -443,6 +452,7 @@
If& rIf = *data.ifs[i];
if ( rIf.data.defines.size()
|| rIf.data.includes.size()
+ || rIf.data.compilerFlags.size()
|| rIf.data.ifs.size() )
{
fprintf (
_____
Modified:
branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler
.cpp
---
branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler
.cpp 2005-05-13 19:01:46 UTC (rev 15266)
+++
branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler
.cpp 2005-05-13 19:17:44 UTC (rev 15267)
@@ -562,7 +562,6 @@
return parameters;
}
-
string
MingwModuleHandler::GenerateCompilerParametersFromVector ( const
vector<CompilerFlag*>& compilerFlags ) const
{
@@ -618,8 +617,7 @@
MingwModuleHandler::GenerateMacro (
const char* assignmentOperation,
const string& macro,
- const IfableData& data,
- const vector<CompilerFlag*>* compilerFlags )
+ const IfableData& data )
{
size_t i;
@@ -629,16 +627,13 @@
macro.c_str(),
assignmentOperation );
- if ( compilerFlags != NULL )
+ string compilerParameters = GenerateCompilerParametersFromVector
( data.compilerFlags );
+ if ( compilerParameters.size () > 0 )
{
- string compilerParameters =
GenerateCompilerParametersFromVector ( *compilerFlags );
- if ( compilerParameters.size () > 0 )
- {
- fprintf (
- fMakefile,
- " %s",
- compilerParameters.c_str () );
- }
+ fprintf (
+ fMakefile,
+ " %s",
+ compilerParameters.c_str () );
}
for ( i = 0; i < data.includes.size(); i++ )
@@ -668,21 +663,18 @@
MingwModuleHandler::GenerateMacros (
const char* assignmentOperation,
const IfableData& data,
- const vector<CompilerFlag*>* compilerFlags,
const vector<LinkerFlag*>* linkerFlags )
{
size_t i;
- if ( data.includes.size () > 0 || data.defines.size () > 0 )
+ if ( data.includes.size () > 0 || data.defines.size () > 0 ||
data.compilerFlags.size () > 0 )
{
GenerateMacro ( assignmentOperation,
cflagsMacro,
- data,
- compilerFlags );
+ data );
GenerateMacro ( assignmentOperation,
windresflagsMacro,
- data,
- compilerFlags );
+ data );
}
if ( linkerFlags != NULL )
@@ -721,6 +713,7 @@
|| rIf.data.includes.size()
|| rIf.data.libraries.size()
|| rIf.data.files.size()
+ || rIf.data.compilerFlags.size()
|| rIf.data.ifs.size() )
{
fprintf (
@@ -731,7 +724,6 @@
GenerateMacros (
"+=",
rIf.data,
- NULL,
NULL );
fprintf (
fMakefile,
@@ -744,7 +736,6 @@
MingwModuleHandler::GenerateObjectMacros (
const char* assignmentOperation,
const IfableData& data,
- const vector<CompilerFlag*>* compilerFlags,
const vector<LinkerFlag*>* linkerFlags )
{
size_t i;
@@ -794,6 +785,7 @@
|| rIf.data.includes.size()
|| rIf.data.libraries.size()
|| rIf.data.files.size()
+ || rIf.data.compilerFlags.size()
|| rIf.data.ifs.size() )
{
fprintf (
@@ -804,7 +796,6 @@
GenerateObjectMacros (
"+=",
rIf.data,
- NULL,
NULL );
fprintf (
fMakefile,
@@ -1531,7 +1522,6 @@
GenerateObjectMacros (
"=",
module.non_if_data,
- &module.compilerFlags,
&module.linkerFlags );
// future references to the macro will be to get its values
@@ -1561,7 +1551,6 @@
GenerateMacros (
"=",
module.non_if_data,
- &module.compilerFlags,
&module.linkerFlags );
if ( module.importLibrary )
_____
Modified:
branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler
.h
---
branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler
.h 2005-05-13 19:01:46 UTC (rev 15266)
+++
branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler
.h 2005-05-13 19:17:44 UTC (rev 15267)
@@ -109,15 +109,12 @@
std::string GenerateLinkerParameters () const;
void GenerateMacro ( const char* assignmentOperation,
const std::string& macro,
- const IfableData& data,
- const std::vector<CompilerFlag*>*
compilerFlags );
+ const IfableData& data );
void GenerateMacros ( const char* op,
const IfableData& data,
- const std::vector<CompilerFlag*>*
compilerFlags,
const std::vector<LinkerFlag*>*
linkerFlags );
void GenerateObjectMacros ( const char* assignmentOperation,
const IfableData& data,
- const std::vector<CompilerFlag*>*
compilerFlags,
const std::vector<LinkerFlag*>*
linkerFlags );
std::string GenerateGccIncludeParameters () const;
std::string GenerateGccParameters () const;
_____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/compilerflag.cpp
--- branches/xmlbuildsystem/reactos/tools/rbuild/compilerflag.cpp
2005-05-13 19:01:46 UTC (rev 15266)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/compilerflag.cpp
2005-05-13 19:17:44 UTC (rev 15267)
@@ -32,11 +32,6 @@
void
CompilerFlag::Initialize ()
{
-}
-
-void
-CompilerFlag::ProcessXML ()
-{
if (node.value.size () == 0)
{
throw InvalidBuildFileException (
@@ -45,3 +40,8 @@
}
flag = node.value;
}
+
+void
+CompilerFlag::ProcessXML ()
+{
+}
_____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/module.cpp
--- branches/xmlbuildsystem/reactos/tools/rbuild/module.cpp
2005-05-13 19:01:46 UTC (rev 15266)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/module.cpp
2005-05-13 19:17:44 UTC (rev 15267)
@@ -100,6 +100,8 @@
delete libraries[i];
for ( i = 0; i < properties.size(); i++ )
delete properties[i];
+ for ( i = 0; i < compilerFlags.size(); i++ )
+ delete compilerFlags[i];
for ( i = 0; i < ifs.size(); i++ )
delete ifs[i];
}
@@ -117,6 +119,8 @@
libraries[i]->ProcessXML ();
for ( i = 0; i < properties.size(); i++ )
properties[i]->ProcessXML ();
+ for ( i = 0; i < compilerFlags.size(); i++ )
+ compilerFlags[i]->ProcessXML ();
for ( i = 0; i < ifs.size (); i++ )
ifs[i]->ProcessXML ();
}
@@ -390,7 +394,11 @@
}
else if ( e.name == "compilerflag" )
{
- compilerFlags.push_back ( new CompilerFlag ( project,
this, e ) );
+ CompilerFlag* pCompilerFlag = new CompilerFlag (
project, this, e );
+ if ( pIf )
+ pIf->data.compilerFlags.push_back (
pCompilerFlag );
+ else
+ non_if_data.compilerFlags.push_back (
pCompilerFlag );
subs_invalid = true;
}
else if ( e.name == "linkerflag" )
_____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/project.cpp
--- branches/xmlbuildsystem/reactos/tools/rbuild/project.cpp
2005-05-13 19:01:46 UTC (rev 15266)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/project.cpp
2005-05-13 19:17:44 UTC (rev 15267)
@@ -285,6 +285,15 @@
non_if_data.defines.push_back ( define );
subs_invalid = true;
}
+ else if ( e.name == "compilerflag" )
+ {
+ CompilerFlag* pCompilerFlag = new CompilerFlag ( *this,
e );
+ if ( pIf )
+ pIf->data.compilerFlags.push_back (
pCompilerFlag );
+ else
+ non_if_data.compilerFlags.push_back (
pCompilerFlag );
+ subs_invalid = true;
+ }
else if ( e.name == "linkerflag" )
{
linkerFlags.push_back ( new LinkerFlag ( *this, e ) );
_____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.h
--- branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.h
2005-05-13 19:01:46 UTC (rev 15266)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.h
2005-05-13 19:17:44 UTC (rev 15267)
@@ -73,6 +73,7 @@
std::vector<Define*> defines;
std::vector<Library*> libraries;
std::vector<Property*> properties;
+ std::vector<CompilerFlag*> compilerFlags;
std::vector<If*> ifs;
~IfableData();
_____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.txt
--- branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.txt
2005-05-13 19:01:46 UTC (rev 15266)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.txt
2005-05-13 19:17:44 UTC (rev 15267)
@@ -310,7 +310,7 @@
None.
Elements:
- define, directory, file, if, include, property.
+ compilerflag, define, directory, file, if, include, property.
Importlibrary element
_____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/test.h
--- branches/xmlbuildsystem/reactos/tools/rbuild/test.h 2005-05-13
19:01:46 UTC (rev 15266)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/test.h 2005-05-13
19:17:44 UTC (rev 15267)
@@ -97,6 +97,9 @@
{
public:
void Run ();
+private:
+ void TestProjectIf ( Project& project );
+ void TestModuleIf ( Project& project );
};
_____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/tests/data/if.xml
--- branches/xmlbuildsystem/reactos/tools/rbuild/tests/data/if.xml
2005-05-13 19:01:46 UTC (rev 15266)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/tests/data/if.xml
2005-05-13 19:17:44 UTC (rev 15267)
@@ -1,7 +1,11 @@
<?xml version="1.0" ?>
<project name="Project" makefile="Makefile">
+ <if property="VAR1" value="value1">
+ <compilerflag>compilerflag1</compilerflag>
+ </if>
<module name="module1" type="buildtool">
- <if property="VAR1" value="value1">
+ <if property="VAR2" value="value2">
+ <compilerflag>compilerflag2</compilerflag>
<file>file1.c</file>
</if>
<file>file2.c</file>
_____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/tests/iftest.cpp
--- branches/xmlbuildsystem/reactos/tools/rbuild/tests/iftest.cpp
2005-05-13 19:01:46 UTC (rev 15266)
+++ branches/xmlbuildsystem/reactos/tools/rbuild/tests/iftest.cpp
2005-05-13 19:17:44 UTC (rev 15267)
@@ -2,18 +2,29 @@
using std::string;
-void IfTest::Run()
+void
+IfTest::TestProjectIf ( Project& project )
{
- string projectFilename ( RBUILD_BASE "tests/data/if.xml" );
- Project project ( projectFilename );
+ ARE_EQUAL ( 1, project.non_if_data.ifs.size () );
+ If& if1 = *project.non_if_data.ifs[0];
+ ARE_EQUAL ( "VAR1", if1.property );
+ ARE_EQUAL ( "value1", if1.value );
+ ARE_EQUAL ( 1, if1.data.compilerFlags.size () );
+ CompilerFlag& compilerFlag1 = *if1.data.compilerFlags[0];
+ ARE_EQUAL( "compilerflag1", compilerFlag1.flag );
+}
+
+void
+IfTest::TestModuleIf ( Project& project )
+{
ARE_EQUAL ( 1, project.modules.size () );
Module& module1 = *project.modules[0];
ARE_EQUAL ( 1, module1.non_if_data.ifs.size () );
If& if1 = *module1.non_if_data.ifs[0];
- ARE_EQUAL ( "VAR1", if1.property );
- ARE_EQUAL ( "value1", if1.value );
+ ARE_EQUAL ( "VAR2", if1.property );
+ ARE_EQUAL ( "value2", if1.value );
ARE_EQUAL ( 1, if1.data.files.size () );
File& file1 = *if1.data.files[0];
@@ -22,4 +33,18 @@
ARE_EQUAL ( 1, module1.non_if_data.files.size () );
File& file2 = *module1.non_if_data.files[0];
ARE_EQUAL( SSEP "file2.c", file2.name );
+
+ ARE_EQUAL ( 1, if1.data.compilerFlags.size () );
+ CompilerFlag& compilerFlag2 = *if1.data.compilerFlags[0];
+ ARE_EQUAL( "compilerflag2", compilerFlag2.flag );
}
+
+void
+IfTest::Run ()
+{
+ string projectFilename ( RBUILD_BASE "tests/data/if.xml" );
+ Project project ( projectFilename );
+
+ TestProjectIf ( project );
+ TestModuleIf ( project );
+}