Add an 'overridable' attribute on defines.
authorHervé Poussineau <hpoussin@reactos.org>
Fri, 19 Oct 2007 15:06:11 +0000 (15:06 +0000)
committerHervé Poussineau <hpoussin@reactos.org>
Fri, 19 Oct 2007 15:06:11 +0000 (15:06 +0000)
Suggestion by Marc Piulachs

svn path=/trunk/; revision=29684

reactos/tools/rbuild/backend/mingw/modulehandler.cpp
reactos/tools/rbuild/define.cpp
reactos/tools/rbuild/project.dtd
reactos/tools/rbuild/rbuild.h

index 96bfc2c..e133918 100644 (file)
@@ -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 )
        {
index 03ec411..d071a74 100644 (file)
@@ -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
index fb757c6..5411ce1 100644 (file)
@@ -37,6 +37,7 @@
 <!ELEMENT define (#PCDATA)>
 <!ATTLIST define
        name  %CIdentifier; #REQUIRED
+       overridable (true) #IMPLIED
 >
 
 <!ELEMENT directory (compilationunit*|directory*|group*|cdfile|file*|if*|ifnot*|module+|pch*|xi:include*)+>
index f00745e..f94b82a 100644 (file)
@@ -426,6 +426,7 @@ public:
        std::string name;
        std::string value;
        std::string backend;
+       bool overridable;
 
        Define ( const Project& project,
                 const XMLElement& defineNode );