Add list of source files in generated makefile

svn path=/trunk/; revision=29495
This commit is contained in:
Hervé Poussineau 2007-10-11 10:18:47 +00:00
parent 54eae92953
commit 8596afd334
3 changed files with 90 additions and 8 deletions

View file

@ -260,6 +260,8 @@ MingwBackend::ProcessModules ()
size_t iend = v.size ();
for ( i = 0; i < iend; i++ )
v[i]->GenerateSourceMacro();
for ( i = 0; i < iend; i++ )
v[i]->GenerateObjectMacro();
fprintf ( fMakefile, "\n" );

View file

@ -906,11 +906,77 @@ MingwModuleHandler::GetModuleSpecificCompilationUnits ( vector<CompilationUnit*>
{
}
void
MingwModuleHandler::GenerateSourceMacros (
const char* assignmentOperation,
const IfableData& data )
{
size_t i;
const vector<CompilationUnit*>& compilationUnits = data.compilationUnits;
vector<const FileLocation *> headers;
if ( compilationUnits.size () > 0 )
{
fprintf (
fMakefile,
"%s %s",
sourcesMacro.c_str (),
assignmentOperation );
for ( i = 0; i < compilationUnits.size(); i++ )
{
CompilationUnit& compilationUnit = *compilationUnits[i];
fprintf (
fMakefile,
"%s%s",
( i%10 == 9 ? " \\\n\t" : " " ),
backend->GetFullName ( *compilationUnit.GetFilename () ).c_str () );
}
fprintf ( fMakefile, "\n" );
}
const vector<If*>& ifs = data.ifs;
for ( i = 0; i < ifs.size(); i++ )
{
If& rIf = *ifs[i];
if ( rIf.data.defines.size()
|| rIf.data.includes.size()
|| rIf.data.libraries.size()
|| rIf.data.compilationUnits.size()
|| rIf.data.compilerFlags.size()
|| rIf.data.ifs.size() )
{
fprintf (
fMakefile,
"%s (\"$(%s)\",\"%s\")\n",
rIf.negated ? "ifneq" : "ifeq",
rIf.property.c_str(),
rIf.value.c_str() );
GenerateSourceMacros (
"+=",
rIf.data );
fprintf (
fMakefile,
"endif\n\n" );
}
}
vector<CompilationUnit*> sourceCompilationUnits;
GetModuleSpecificCompilationUnits ( sourceCompilationUnits );
for ( i = 0; i < sourceCompilationUnits.size (); i++ )
{
fprintf (
fMakefile,
"%s += %s\n",
sourcesMacro.c_str(),
backend->GetFullName ( *sourceCompilationUnits[i]->GetFilename () ).c_str () );
}
CleanupCompilationUnitVector ( sourceCompilationUnits );
}
void
MingwModuleHandler::GenerateObjectMacros (
const char* assignmentOperation,
const IfableData& data,
const vector<LinkerFlag*>* linkerFlags )
const IfableData& data )
{
size_t i;
@ -988,8 +1054,7 @@ MingwModuleHandler::GenerateObjectMacros (
rIf.value.c_str() );
GenerateObjectMacros (
"+=",
rIf.data,
NULL );
rIf.data );
fprintf (
fMakefile,
"endif\n\n" );
@ -1886,6 +1951,19 @@ MingwModuleHandler::GetModuleTargets ( const Module& module )
return backend->GetFullName ( *GetTargetFilename ( module, NULL ) ).c_str ();
}
void
MingwModuleHandler::GenerateSourceMacro ()
{
sourcesMacro = ssprintf ( "%s_SOURCES", module.name.c_str ());
GenerateSourceMacros (
"=",
module.non_if_data );
// future references to the macro will be to get its values
sourcesMacro = ssprintf ("$(%s)", sourcesMacro.c_str ());
}
void
MingwModuleHandler::GenerateObjectMacro ()
{
@ -1893,8 +1971,7 @@ MingwModuleHandler::GenerateObjectMacro ()
GenerateObjectMacros (
"=",
module.non_if_data,
&module.linkerFlags );
module.non_if_data );
// future references to the macro will be to get its values
objectsMacro = ssprintf ("$(%s)", objectsMacro.c_str ());

View file

@ -57,6 +57,7 @@ public:
std::string GetModuleTargets ( const Module& module );
void GetObjectsVector ( const IfableData& data,
std::vector<FileLocation>& objectFiles ) const;
void GenerateSourceMacro();
void GenerateObjectMacro();
void GenerateTargetMacro();
void GenerateOtherMacros();
@ -139,9 +140,10 @@ private:
void GenerateMacros ( const char* op,
const IfableData& data,
const std::vector<LinkerFlag*>* linkerFlags );
void GenerateSourceMacros ( const char* assignmentOperation,
const IfableData& data );
void GenerateObjectMacros ( const char* assignmentOperation,
const IfableData& data,
const std::vector<LinkerFlag*>* linkerFlags );
const IfableData& data );
std::string GenerateGccIncludeParameters () const;
std::string GenerateGccParameters () const;
std::string GenerateNasmParameters () const;
@ -221,6 +223,7 @@ public:
std::string windresflagsMacro;
std::string widlflagsMacro;
std::string linkerflagsMacro;
std::string sourcesMacro;
std::string objectsMacro;
std::string libsMacro;
std::string linkDepsMacro;