Check automatic dependencies of referenced object library modules on make <module>_depends

svn path=/trunk/; revision=16513
This commit is contained in:
Casper Hornstrup 2005-07-08 19:55:30 +00:00
parent 876fc32e53
commit 91269f987b
5 changed files with 61 additions and 45 deletions

View file

@ -11,7 +11,7 @@ using std::vector;
using std::map;
SourceFile::SourceFile ( AutomaticDependency* automaticDependency,
Module& module,
const Module& module,
const string& filename,
SourceFile* parent,
bool isNonAutomaticDependency )
@ -294,7 +294,7 @@ AutomaticDependency::ParseFiles ()
}
void
AutomaticDependency::GetModuleFiles ( Module& module,
AutomaticDependency::GetModuleFiles ( const Module& module,
vector<File*>& files ) const
{
for ( size_t i = 0; i < module.non_if_data.files.size (); i++ )
@ -307,7 +307,7 @@ AutomaticDependency::GetModuleFiles ( Module& module,
}
void
AutomaticDependency::ParseFiles ( Module& module )
AutomaticDependency::ParseFiles ( const Module& module )
{
vector<File*> files;
GetModuleFiles ( module, files );
@ -316,7 +316,7 @@ AutomaticDependency::ParseFiles ( Module& module )
}
void
AutomaticDependency::ParseFile ( Module& module,
AutomaticDependency::ParseFile ( const Module& module,
const File& file )
{
string normalizedFilename = NormalizeFilename ( file.name );
@ -355,7 +355,7 @@ AutomaticDependency::GetFilename ( const string& filename )
void
AutomaticDependency::GetIncludeDirectories ( vector<Include*>& includes,
Module& module,
const Module& module,
Include& currentDirectory,
bool searchCurrentDirectory )
{
@ -369,7 +369,7 @@ AutomaticDependency::GetIncludeDirectories ( vector<Include*>& includes,
bool
AutomaticDependency::LocateIncludedFile ( SourceFile* sourceFile,
Module& module,
const Module& module,
const string& includedFilename,
bool searchCurrentDirectory,
bool includeNext,
@ -396,9 +396,9 @@ AutomaticDependency::LocateIncludedFile ( SourceFile* sourceFile,
}
SourceFile*
AutomaticDependency::RetrieveFromCacheOrParse ( Module& module,
const string& filename,
SourceFile* parentSourceFile )
AutomaticDependency::RetrieveFromCacheOrParse ( const Module& module,
const string& filename,
SourceFile* parentSourceFile )
{
SourceFile* sourceFile = sourcefile_map[filename];
if ( sourceFile == NULL )
@ -429,25 +429,41 @@ AutomaticDependency::CheckAutomaticDependencies ( bool verbose )
for ( size_t mi = 0; mi < project.modules.size (); mi++ )
{
Module& module = *project.modules[mi];
CheckAutomaticDependencies ( module, verbose, false );
CheckAutomaticDependencies ( module, verbose );
}
}
void
AutomaticDependency::CheckAutomaticDependencies ( Module& module,
bool verbose )
AutomaticDependency::GetModulesToCheck ( Module& module, vector<const Module*>& modules )
{
CheckAutomaticDependencies ( module, verbose, true );
modules.push_back ( &module );
for ( size_t i = 0; i < module.non_if_data.libraries.size (); i++ )
{
Library& library = *module.non_if_data.libraries[i];
if ( library.importedModule->type != ObjectLibrary )
break;
modules.push_back ( library.importedModule );
}
/* FIXME: Collect libraries in IFs here */
}
void
AutomaticDependency::CheckAutomaticDependencies ( Module& module,
bool verbose,
bool parseFiles )
AutomaticDependency::CheckAutomaticDependenciesForModule ( Module& module,
bool verbose )
{
if ( parseFiles )
ParseFiles ( module );
vector<const Module*> modules;
GetModulesToCheck ( module, modules );
for ( size_t mi = 0; mi < modules.size (); mi++ )
ParseFiles ( *modules[mi] );
for ( size_t mi = 0; mi < modules.size (); mi++ )
CheckAutomaticDependencies ( *modules[mi], verbose );
}
void
AutomaticDependency::CheckAutomaticDependencies ( const Module& module,
bool verbose )
{
struct utimbuf timebuf;
vector<File*> files;
GetModuleFiles ( module, files );

View file

@ -325,8 +325,8 @@ MingwBackend::CheckAutomaticDependenciesForModuleOnly ()
printf ( "Checking automatic dependencies for module '%s'...",
module->name.c_str () );
AutomaticDependency automaticDependency ( ProjectNode );
automaticDependency.CheckAutomaticDependencies ( *module,
configuration.Verbose );
automaticDependency.CheckAutomaticDependenciesForModule ( *module,
configuration.Verbose );
printf ( "done\n" );
}
}

View file

@ -615,7 +615,7 @@ MingwModuleHandler::GenerateImportLibraryDependenciesFromVector (
dependencies += " \\\n\t\t", wrap_count = 0;
else if ( dependencies.size () > 0 )
dependencies += " ";
dependencies += GetImportLibraryDependency ( *libraries[i]->imported_module );
dependencies += GetImportLibraryDependency ( *libraries[i]->importedModule );
}
return dependencies;
}
@ -1274,7 +1274,7 @@ MingwModuleHandler::GenerateBuildNonSymbolStrippedCode ()
void
MergeStringVector ( const vector<string>& input,
vector<string>& output )
vector<string>& output )
{
int wrap_at = 25;
string s;
@ -1603,20 +1603,20 @@ MingwModuleHandler::GetRpcHeaderDependencies (
for ( size_t i = 0; i < module.non_if_data.libraries.size (); i++ )
{
Library& library = *module.non_if_data.libraries[i];
if ( library.imported_module->type == RpcServer ||
library.imported_module->type == RpcClient )
if ( library.importedModule->type == RpcServer ||
library.importedModule->type == RpcClient )
{
for ( size_t j = 0; j < library.imported_module->non_if_data.files.size (); j++ )
for ( size_t j = 0; j < library.importedModule->non_if_data.files.size (); j++ )
{
File& file = *library.imported_module->non_if_data.files[j];
File& file = *library.importedModule->non_if_data.files[j];
string extension = GetExtension ( file.name );
if ( extension == ".idl" || extension == ".IDL" )
{
string basename = GetBasename ( file.name );
if ( library.imported_module->type == RpcServer )
if ( library.importedModule->type == RpcServer )
dependencies.push_back ( GetRpcServerHeaderFilename ( basename ) );
if ( library.imported_module->type == RpcClient )
if ( library.importedModule->type == RpcClient )
dependencies.push_back ( GetRpcClientHeaderFilename ( basename ) );
}
}

View file

@ -817,14 +817,14 @@ Library::Library ( const XMLElement& _node,
: node(_node),
module(_module),
name(_name),
imported_module(_module.project.LocateModule(_name))
importedModule(_module.project.LocateModule(_name))
{
if ( module.name == name )
throw InvalidBuildFileException (
node.location,
"module '%s' cannot link against itself",
name.c_str() );
if ( !imported_module )
if ( !importedModule )
throw InvalidBuildFileException (
node.location,
"module '%s' trying to import non-existant module '%s'",

View file

@ -316,7 +316,7 @@ public:
const XMLElement& node;
const Module& module;
std::string name;
const Module* imported_module;
const Module* importedModule;
Library ( const XMLElement& _node,
const Module& _module,
@ -533,7 +533,7 @@ class SourceFile
{
public:
SourceFile ( AutomaticDependency* automaticDependency,
Module& module,
const Module& module,
const std::string& filename,
SourceFile* parent,
bool isNonAutomaticDependency );
@ -542,7 +542,7 @@ public:
std::string Location () const;
std::vector<SourceFile*> files;
AutomaticDependency* automaticDependency;
Module& module;
const Module& module;
std::string filename;
std::string filenamePart;
std::string directoryPart;
@ -584,32 +584,32 @@ public:
const std::string& includedFilename,
std::string& resolvedFilename );
bool LocateIncludedFile ( SourceFile* sourceFile,
Module& module,
const Module& module,
const std::string& includedFilename,
bool searchCurrentDirectory,
bool includeNext,
std::string& resolvedFilename );
SourceFile* RetrieveFromCacheOrParse ( Module& module,
SourceFile* RetrieveFromCacheOrParse ( const Module& module,
const std::string& filename,
SourceFile* parentSourceFile );
SourceFile* RetrieveFromCache ( const std::string& filename );
void CheckAutomaticDependencies ( bool verbose );
void CheckAutomaticDependencies ( Module& module,
bool verbose );
void CheckAutomaticDependencies ( Module& module,
bool verbose,
bool parseFiles );
void CheckAutomaticDependenciesForFile ( SourceFile* sourceFile );
void CheckAutomaticDependenciesForModule ( Module& module,
bool verbose );
private:
void GetModulesToCheck ( Module& module, std::vector<const Module*>& modules );
void CheckAutomaticDependencies ( const Module& module,
bool verbose );
void CheckAutomaticDependenciesForFile ( SourceFile* sourceFile );
void GetIncludeDirectories ( std::vector<Include*>& includes,
Module& module,
const Module& module,
Include& currentDirectory,
bool searchCurrentDirectory );
void GetModuleFiles ( Module& module,
void GetModuleFiles ( const Module& module,
std::vector<File*>& files ) const;
void ParseFiles ();
void ParseFiles ( Module& module );
void ParseFile ( Module& module,
void ParseFiles ( const Module& module );
void ParseFile ( const Module& module,
const File& file );
std::map<std::string, SourceFile*> sourcefile_map;
};