diff --git a/reactos/tools/rbuild/backend/mingw/mingw.cpp b/reactos/tools/rbuild/backend/mingw/mingw.cpp index 7afd7f047a3..46c2ea402e4 100644 --- a/reactos/tools/rbuild/backend/mingw/mingw.cpp +++ b/reactos/tools/rbuild/backend/mingw/mingw.cpp @@ -372,35 +372,31 @@ MingwBackend::GenerateHeader () const ProjectNode.GetProjectFilename ().c_str () ); } -string -MingwBackend::GenerateIncludesAndDefines ( IfableData& data ) const -{ - set used_defs; - string includeParameters = MingwModuleHandler::GenerateGccIncludeParametersFromVector ( data.includes ); - string defineParameters = MingwModuleHandler::GenerateGccDefineParametersFromVector ( data.defines, used_defs ); - return includeParameters + " " + defineParameters; -} - void MingwBackend::GenerateProjectCFlagsMacro ( const char* assignmentOperation, - IfableData& data ) const + const IfableData& data ) const { - fprintf ( - fMakefile, - "PROJECT_CFLAGS %s", - assignmentOperation ); - - fprintf ( fMakefile, - " %s", - GenerateIncludesAndDefines ( data ).c_str() ); + set used_defs; - fprintf ( fMakefile, "\n" ); + if ( data.includes.size () > 0 ) + fprintf ( + fMakefile, + "PROJECT_CFLAGS %s %s\n", + assignmentOperation, + MingwModuleHandler::GenerateGccIncludeParametersFromVector ( data.includes ).c_str ()); + + if ( data.defines.size () > 0 ) + fprintf ( + fMakefile, + "PROJECT_CDEFINES %s %s\n", + assignmentOperation, + MingwModuleHandler::GenerateGccDefineParametersFromVector ( data.defines, used_defs ).c_str ()); } void MingwBackend::GenerateGlobalCFlagsAndProperties ( const char* assignmentOperation, - IfableData& data ) const + const IfableData& data ) const { size_t i; @@ -420,7 +416,7 @@ MingwBackend::GenerateGlobalCFlagsAndProperties ( for ( i = 0; i < data.ifs.size(); i++ ) { - If& rIf = *data.ifs[i]; + const If& rIf = *data.ifs[i]; if ( rIf.data.defines.size() || rIf.data.includes.size() || rIf.data.ifs.size() ) @@ -523,8 +519,8 @@ MingwBackend::GenerateGlobalVariables () const GenerateGlobalCFlagsAndProperties ( "=", ProjectNode.non_if_data ); GenerateProjectGccOptions ( "=", ProjectNode.non_if_data ); - fprintf ( fMakefile, "PROJECT_RCFLAGS := $(PROJECT_CFLAGS)\n" ); - fprintf ( fMakefile, "PROJECT_WIDLFLAGS := $(PROJECT_CFLAGS)\n" ); + fprintf ( fMakefile, "PROJECT_RCFLAGS := $(PROJECT_CFLAGS) $(PROJECT_CDEFINES)\n" ); + fprintf ( fMakefile, "PROJECT_WIDLFLAGS := $(PROJECT_CFLAGS) $(PROJECT_CDEFINES)\n" ); fprintf ( fMakefile, "PROJECT_LFLAGS := %s\n", GenerateProjectLFLAGS ().c_str () ); fprintf ( fMakefile, "PROJECT_CFLAGS += -Wall\n" ); diff --git a/reactos/tools/rbuild/backend/mingw/mingw.h b/reactos/tools/rbuild/backend/mingw/mingw.h index 65e61e86c03..9b08eed9ceb 100644 --- a/reactos/tools/rbuild/backend/mingw/mingw.h +++ b/reactos/tools/rbuild/backend/mingw/mingw.h @@ -62,11 +62,10 @@ private: void CreateMakefile (); void CloseMakefile () const; void GenerateHeader () const; - std::string GenerateIncludesAndDefines ( IfableData& data ) const; void GenerateProjectCFlagsMacro ( const char* assignmentOperation, - IfableData& data ) const; + const IfableData& data ) const; void GenerateGlobalCFlagsAndProperties ( const char* op, - IfableData& data ) const; + const IfableData& data ) const; void GenerateProjectGccOptionsMacro ( const char* assignmentOperation, IfableData& data ) const; void GenerateProjectGccOptions ( const char* assignmentOperation, diff --git a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp index 677ef6e9b14..938e0324ada 100644 --- a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp +++ b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp @@ -629,7 +629,7 @@ MingwModuleHandler::GetObjectFilenames () /* static */ string MingwModuleHandler::GenerateGccDefineParametersFromVector ( const vector& defines, - set& used_defs) + set& used_defs) { string parameters; @@ -640,8 +640,8 @@ MingwModuleHandler::GenerateGccDefineParametersFromVector ( continue; if (parameters.length () > 0) parameters += " "; - if (define.name.find('(') != string::npos) - parameters += "$(QT)"; + if (define.name.find('(') != string::npos) + parameters += "$(QT)"; parameters += "-D"; parameters += define.name; if (define.value.length () > 0) @@ -649,8 +649,8 @@ MingwModuleHandler::GenerateGccDefineParametersFromVector ( parameters += "="; parameters += define.value; } - if (define.name.find('(') != string::npos) - parameters += "$(QT)"; + if (define.name.find('(') != string::npos) + parameters += "$(QT)"; used_defs.insert(used_defs.begin(),define.name); } return parameters; @@ -659,7 +659,7 @@ MingwModuleHandler::GenerateGccDefineParametersFromVector ( string MingwModuleHandler::GenerateGccDefineParameters () const { - set used_defs; + set used_defs; string parameters = GenerateGccDefineParametersFromVector ( module.project.non_if_data.defines, used_defs ); string s = GenerateGccDefineParametersFromVector ( module.non_if_data.defines, used_defs ); if ( s.length () > 0 ) @@ -765,7 +765,8 @@ void MingwModuleHandler::GenerateMacro ( const char* assignmentOperation, const string& macro, - const IfableData& data ) + const IfableData& data, + set *used_defs ) { size_t i; bool generateAssignment; @@ -806,7 +807,14 @@ MingwModuleHandler::GenerateMacro ( } for ( i = 0; i < data.defines.size(); i++ ) { - Define& d = *data.defines[i]; + const Define& d = *data.defines[i]; + if (used_defs && used_defs->find(d.name) != used_defs->end()) + { + if ( backend->configuration.Verbose ) + printf("%s define overridden in '%s' module\n", + d.name.c_str (), module.name.c_str () ); + continue; + } fprintf ( fMakefile, " -D%s", @@ -816,6 +824,8 @@ MingwModuleHandler::GenerateMacro ( fMakefile, "=%s", d.value.c_str() ); + if (used_defs) + used_defs->insert(used_defs->begin(), d.name); } if ( generateAssignment ) { @@ -827,16 +837,19 @@ void MingwModuleHandler::GenerateMacros ( const char* assignmentOperation, const IfableData& data, - const vector* linkerFlags ) + const vector* linkerFlags, + set& used_defs ) { size_t i; GenerateMacro ( assignmentOperation, cflagsMacro, - data ); + data, + &used_defs ); GenerateMacro ( assignmentOperation, windresflagsMacro, - data ); + data, + NULL ); if ( linkerFlags != NULL ) { @@ -886,7 +899,8 @@ MingwModuleHandler::GenerateMacros ( GenerateMacros ( "+=", rIf.data, - NULL ); + NULL, + used_defs ); fprintf ( fMakefile, "endif\n\n" ); @@ -2020,6 +2034,8 @@ MingwModuleHandler::GetRpcHeaderDependencies ( void MingwModuleHandler::GenerateOtherMacros () { + set used_defs; + cflagsMacro = ssprintf ("%s_CFLAGS", module.name.c_str ()); nasmflagsMacro = ssprintf ("%s_NASMFLAGS", module.name.c_str ()); windresflagsMacro = ssprintf ("%s_RCFLAGS", module.name.c_str ()); @@ -2031,7 +2047,14 @@ MingwModuleHandler::GenerateOtherMacros () GenerateMacros ( "=", module.non_if_data, - &module.linkerFlags ); + &module.linkerFlags, + used_defs ); + + GenerateMacros ( + "+=", + module.project.non_if_data, + NULL, + used_defs ); vector s; if ( module.importLibrary ) diff --git a/reactos/tools/rbuild/backend/mingw/modulehandler.h b/reactos/tools/rbuild/backend/mingw/modulehandler.h index d5a1d274f7c..96cb2ba49ca 100644 --- a/reactos/tools/rbuild/backend/mingw/modulehandler.h +++ b/reactos/tools/rbuild/backend/mingw/modulehandler.h @@ -136,10 +136,12 @@ private: std::string GenerateLinkerParameters () const; void GenerateMacro ( const char* assignmentOperation, const std::string& macro, - const IfableData& data ); + const IfableData& data, + std::set* used_defs ); void GenerateMacros ( const char* op, const IfableData& data, - const std::vector* linkerFlags ); + const std::vector* linkerFlags, + std::set& used_defs ); void GenerateSourceMacros ( const char* assignmentOperation, const IfableData& data ); void GenerateObjectMacros ( const char* assignmentOperation,