diff --git a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp index 96bfc2cc19c..e133918a042 100644 --- a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp +++ b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp @@ -813,25 +813,35 @@ MingwModuleHandler::GenerateMacro ( } for ( i = 0; i < data.defines.size(); i++ ) { - const Define& d = *data.defines[i]; - if (used_defs && used_defs->find(d.name) != used_defs->end()) + const Define& define = *data.defines[i]; + if ( used_defs && used_defs->find ( define.name ) != used_defs->end () ) { +#if 0 /* FIXME: activate */ + if ( !define.overridable ) + { + throw InvalidOperationException ( __FILE__, + __LINE__, + "Invalid override of define '%s' in '%s'", + define.name.c_str (), + module.name.c_str () ); + } +#endif if ( backend->configuration.Verbose ) printf("%s define overridden in '%s' module\n", - d.name.c_str (), module.name.c_str () ); + define.name.c_str (), module.name.c_str () ); continue; } fprintf ( fMakefile, " -D%s", - d.name.c_str() ); - if ( d.value.size() ) + define.name.c_str() ); + if ( define.value.size() ) fprintf ( fMakefile, "=%s", - d.value.c_str() ); - if (used_defs) - used_defs->insert(used_defs->begin(), d.name); + define.value.c_str() ); + if ( used_defs ) + used_defs->insert(used_defs->begin(), define.name); } if ( generateAssignment ) { diff --git a/reactos/tools/rbuild/define.cpp b/reactos/tools/rbuild/define.cpp index 03ec41187c3..d071a749ca7 100644 --- a/reactos/tools/rbuild/define.cpp +++ b/reactos/tools/rbuild/define.cpp @@ -63,12 +63,21 @@ void Define::Initialize() { const XMLAttribute* att = node->GetAttribute ( "name", true ); - const XMLAttribute* bck = node->GetAttribute ( "backend", false ); + + att = node->GetAttribute ( "name", true ); assert(att); name = att->value; value = node->value; - if ( bck ) - backend = bck->value; + + att = node->GetAttribute ( "backend", false ); + if ( att ) + backend = att->value; + + att = node->GetAttribute ( "overridable", false ); + if ( att ) + overridable = ( att->value == "true" || att->value == "yes" ); + else + overridable = false; } void diff --git a/reactos/tools/rbuild/project.dtd b/reactos/tools/rbuild/project.dtd index fb757c617b2..5411ce18646 100644 --- a/reactos/tools/rbuild/project.dtd +++ b/reactos/tools/rbuild/project.dtd @@ -37,6 +37,7 @@ diff --git a/reactos/tools/rbuild/rbuild.h b/reactos/tools/rbuild/rbuild.h index f00745e2228..f94b82a8d9f 100644 --- a/reactos/tools/rbuild/rbuild.h +++ b/reactos/tools/rbuild/rbuild.h @@ -426,6 +426,7 @@ public: std::string name; std::string value; std::string backend; + bool overridable; Define ( const Project& project, const XMLElement& defineNode );