Modified: trunk/reactos/hal/halx86/mp/halmp.xml
Modified: trunk/reactos/hal/halx86/up/halup.xml
Modified: trunk/reactos/tools/rbuild/backend/mingw/mingw.cpp
Modified: trunk/reactos/tools/rbuild/backend/mingw/modulehandler.cpp
Modified: trunk/reactos/tools/rbuild/module.cpp
Modified: trunk/reactos/tools/rbuild/project.cpp
Modified: trunk/reactos/tools/rbuild/rbuild.h
Modified: trunk/reactos/tools/rbuild/rbuild.txt
--- trunk/reactos/hal/halx86/mp/halmp.xml 2005-06-05 11:05:47 UTC (rev 15800)
+++ trunk/reactos/hal/halx86/mp/halmp.xml 2005-06-05 11:22:16 UTC (rev 15801)
@@ -1,4 +1,4 @@
-<module name="halmp" type="kernelmodedll">
+<module if="${MP}" name="halmp" type="kernelmodedll" installbase="system32" installname="hal.dll">
<importlibrary definition="../../hal/hal.def" />
<include base="hal_generic">../include</include>
<include base="ntoskrnl">include</include>
--- trunk/reactos/hal/halx86/up/halup.xml 2005-06-05 11:05:47 UTC (rev 15800)
+++ trunk/reactos/hal/halx86/up/halup.xml 2005-06-05 11:22:16 UTC (rev 15801)
@@ -1,4 +1,4 @@
-<module name="halup" type="kernelmodedll" installbase="system32" installname="hal.dll">
+<module ifnot="${MP}" name="halup" type="kernelmodedll" installbase="system32" installname="hal.dll">
<importlibrary definition="../../hal/hal.def" />
<bootstrap base="reactos" nameoncd="hal.dll" />
<include base="hal_generic">../include</include>
--- trunk/reactos/tools/rbuild/backend/mingw/mingw.cpp 2005-06-05 11:05:47 UTC (rev 15800)
+++ trunk/reactos/tools/rbuild/backend/mingw/mingw.cpp 2005-06-05 11:22:16 UTC (rev 15801)
@@ -256,6 +256,8 @@
for ( i = 0; i < ProjectNode.modules.size (); i++ )
{
Module& module = *ProjectNode.modules[i];
+ if ( !module.enabled )
+ continue;
MingwModuleHandler* h = MingwModuleHandler::InstanciateHandler (
module,
this );
@@ -547,6 +549,8 @@
for ( size_t i = 0; i < ProjectNode.modules.size (); i++ )
{
Module& module = *ProjectNode.modules[i];
+ if ( !module.enabled )
+ continue;
if ( module.type == BuildTool )
{
if ( dependencies.length () > 0 )
@@ -845,6 +849,8 @@
for ( size_t i = 0; i < ProjectNode.modules.size (); i++ )
{
const Module& module = *ProjectNode.modules[i];
+ if ( !module.enabled )
+ continue;
if ( module.installName.length () > 0 )
{
string targetFilenameNoFixup;
@@ -915,6 +921,8 @@
for ( size_t i = 0; i < ProjectNode.modules.size (); i++ )
{
const Module& module = *ProjectNode.modules[i];
+ if ( !module.enabled )
+ continue;
if ( module.installName.length () > 0 )
{
string sourceFilename = MingwModuleHandler::PassThruCacheDirectory (
@@ -1004,6 +1012,8 @@
for ( size_t i = 0; i < ProjectNode.modules.size (); i++ )
{
const Module& module = *ProjectNode.modules[i];
+ if ( !module.enabled )
+ continue;
if ( module.type == Test )
out.push_back ( module.name );
}
--- trunk/reactos/tools/rbuild/backend/mingw/modulehandler.cpp 2005-06-05 11:05:47 UTC (rev 15800)
+++ trunk/reactos/tools/rbuild/backend/mingw/modulehandler.cpp 2005-06-05 11:22:16 UTC (rev 15801)
@@ -2573,6 +2573,8 @@
for ( size_t i = 0; i < module.project.modules.size (); i++ )
{
const Module& m = *module.project.modules[i];
+ if ( !m.enabled )
+ continue;
if ( m.bootstrap != NULL )
{
string sourceFilename = PassThruCacheDirectory (
@@ -2619,6 +2621,8 @@
for ( size_t i = 0; i < module.project.modules.size (); i++ )
{
const Module& m = *module.project.modules[i];
+ if ( !m.enabled )
+ continue;
if ( m.bootstrap != NULL )
{
string targetDirectory ( bootcdDirectory + SSEP + m.bootstrap->base );
@@ -2664,6 +2668,8 @@
for ( size_t i = 0; i < module.project.modules.size (); i++ )
{
const Module& m = *module.project.modules[i];
+ if ( !m.enabled )
+ continue;
if ( m.bootstrap != NULL )
{
string filename = PassThruCacheDirectory (
@@ -2795,6 +2801,8 @@
for ( size_t i = 0; i < module.project.modules.size (); i++ )
{
const Module& m = *module.project.modules[i];
+ if ( !m.enabled )
+ continue;
if ( m.installName.length () > 0 )
{
string sourceFilename = MingwModuleHandler::PassThruCacheDirectory (
--- trunk/reactos/tools/rbuild/module.cpp 2005-06-05 11:05:47 UTC (rev 15800)
+++ trunk/reactos/tools/rbuild/module.cpp 2005-06-05 11:22:16 UTC (rev 15801)
@@ -99,6 +99,15 @@
return FixSeparator ( relativeNormalizedPath );
}
+bool
+GetBooleanValue ( const string& value )
+{
+ if ( value == "1" )
+ return true;
+ else
+ return false;
+}
+
IfableData::~IfableData()
{
size_t i;
@@ -153,11 +162,21 @@
__LINE__,
"Module created with non-<module> node" );
- xmlbuildFile = Path::RelativeFromWorkingDirectory ( moduleNode.xmlFile->filename() );
+ xmlbuildFile = Path::RelativeFromWorkingDirectory ( moduleNode.xmlFile->filename () );
path = FixSeparator ( modulePath );
- const XMLAttribute* att = moduleNode.GetAttribute ( "name", true );
+ enabled = true;
+
+ const XMLAttribute* att = moduleNode.GetAttribute ( "if", false );
+ if ( att != NULL )
+ enabled = GetBooleanValue ( project.ResolveProperties ( att->value ) );
+
+ att = moduleNode.GetAttribute ( "ifnot", false );
+ if ( att != NULL )
+ enabled = !GetBooleanValue ( project.ResolveProperties ( att->value ) );
+
+ att = moduleNode.GetAttribute ( "name", true );
assert(att);
name = att->value;
--- trunk/reactos/tools/rbuild/project.cpp 2005-06-05 11:05:47 UTC (rev 15800)
+++ trunk/reactos/tools/rbuild/project.cpp 2005-06-05 11:22:16 UTC (rev 15801)
@@ -85,10 +85,49 @@
return NULL;
}
+string
+Project::ResolveNextProperty ( string& s ) const
+{
+ size_t i = s.find ( "${" );
+ if ( i == string::npos )
+ i = s.find ( "$(" );
+ if ( i != string::npos )
+ {
+ string endCharacter;
+ if ( s[i + 1] == '{' )
+ endCharacter = "}";
+ else
+ endCharacter = ")";
+ size_t j = s.find ( endCharacter );
+ if ( j != string::npos )
+ {
+ int propertyNameLength = j - i - 2;
+ string propertyName = s.substr ( i + 2, propertyNameLength );
+ const Property* property = LookupProperty ( propertyName );
+ if ( property != NULL )
+ return s.replace ( i, propertyNameLength + 3, property->value );
+ }
+ }
+ return s;
+}
+
+string
+Project::ResolveProperties ( const string& s ) const
+{
+ string s2 = s;
+ string s3;
+ do
+ {
+ s3 = s2;
+ s2 = ResolveNextProperty ( s3 );
+ } while ( s2 != s3 );
+ return s2;
+}
+
void
Project::SetConfigurationOption ( char* s,
- string name,
- string* alternativeName )
+ string name,
+ string* alternativeName )
{
const Property* property = LookupProperty ( name );
if ( property != NULL && property->value.length () > 0 )
--- trunk/reactos/tools/rbuild/rbuild.h 2005-06-05 11:05:47 UTC (rev 15800)
+++ trunk/reactos/tools/rbuild/rbuild.h 2005-06-05 11:22:16 UTC (rev 15801)
@@ -134,7 +134,9 @@
Module* LocateModule ( const std::string& name );
const Module* LocateModule ( const std::string& name ) const;
std::string GetProjectFilename () const;
+ std::string ResolveProperties ( const std::string& s ) const;
private:
+ std::string ResolveNextProperty ( std::string& s ) const;
const Property* LookupProperty ( const std::string& name ) const;
void SetConfigurationOption ( char* s,
std::string name,
@@ -210,6 +212,7 @@
std::string installName;
bool useWRC;
bool enableWarnings;
+ bool enabled;
Module ( const Project& project,
const XMLElement& moduleNode,
--- trunk/reactos/tools/rbuild/rbuild.txt 2005-06-05 11:05:47 UTC (rev 15800)
+++ trunk/reactos/tools/rbuild/rbuild.txt 2005-06-05 11:22:16 UTC (rev 15801)
@@ -107,11 +107,13 @@
There can be zero or more modules per xml build file.
Syntax:
- <module name="msvcrt" type="win32dll" extension=".dll" entrypoint="_DllMain@12" baseaddress="0x70000000" mangledsymbols="true" installbase="system32" installname="msvcrt.dll" usewrc="false" warnings="true">
+ <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">
...
</module>
Attributes:
+ if - If the value is 1, then the module is enabled, otherwise it is disabled. A disabled module is not processed.
+ ifnot - If the value is 1, then the module is disabled, otherwise it is enabled. A disabled module is not processed.
name - Name of the module. Also the base name of the generated file if such file is generated for the particular module type.
type - Type of module. See below for an explanation of module types.
extension - Extension of the generated file if such file is generated for the particular module type.