* Enable halup for MP=0 configuration and halmp for MP=1 configuration.
svn path=/trunk/; revision=15801
-<module name="halmp" type="kernelmodedll">\r
+<module if="${MP}" name="halmp" type="kernelmodedll" installbase="system32" installname="hal.dll">\r
<importlibrary definition="../../hal/hal.def" />\r
<include base="hal_generic">../include</include>\r
<include base="ntoskrnl">include</include>\r
-<module name="halup" type="kernelmodedll" installbase="system32" installname="hal.dll">\r
+<module ifnot="${MP}" name="halup" type="kernelmodedll" installbase="system32" installname="hal.dll">\r
<importlibrary definition="../../hal/hal.def" />\r
<bootstrap base="reactos" nameoncd="hal.dll" />\r
<include base="hal_generic">../include</include>\r
for ( i = 0; i < ProjectNode.modules.size (); i++ )
{
Module& module = *ProjectNode.modules[i];
+ if ( !module.enabled )
+ continue;
MingwModuleHandler* h = MingwModuleHandler::InstanciateHandler (
module,
this );
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 )
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;
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 (
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 );
}
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 (
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 );
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 (
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 (
return FixSeparator ( relativeNormalizedPath );
}
+bool
+GetBooleanValue ( const string& value )
+{
+ if ( value == "1" )
+ return true;
+ else
+ return false;
+}
+
IfableData::~IfableData()
{
size_t i;
__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;
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 )
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,
std::string installName;
bool useWRC;
bool enableWarnings;
+ bool enabled;
Module ( const Project& project,
const XMLElement& moduleNode,
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.