Support define overriding in child .rbuild files

See issue #2745 for more details.

svn path=/trunk/; revision=29681
This commit is contained in:
Hervé Poussineau 2007-10-19 13:24:06 +00:00
parent 7b57d6a08d
commit e7d0bd05c2
4 changed files with 61 additions and 41 deletions

View file

@ -372,35 +372,31 @@ MingwBackend::GenerateHeader () const
ProjectNode.GetProjectFilename ().c_str () );
}
string
MingwBackend::GenerateIncludesAndDefines ( IfableData& data ) const
{
set<string> 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<string> 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" );

View file

@ -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,

View file

@ -629,7 +629,7 @@ MingwModuleHandler::GetObjectFilenames ()
/* static */ string
MingwModuleHandler::GenerateGccDefineParametersFromVector (
const vector<Define*>& defines,
set<string>& used_defs)
set<string>& 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<string> used_defs;
set<string> 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<string> *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<LinkerFlag*>* linkerFlags )
const vector<LinkerFlag*>* linkerFlags,
set<string>& 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<string> 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<FileLocation> s;
if ( module.importLibrary )

View file

@ -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<std::string>* used_defs );
void GenerateMacros ( const char* op,
const IfableData& data,
const std::vector<LinkerFlag*>* linkerFlags );
const std::vector<LinkerFlag*>* linkerFlags,
std::set<std::string>& used_defs );
void GenerateSourceMacros ( const char* assignmentOperation,
const IfableData& data );
void GenerateObjectMacros ( const char* assignmentOperation,