mirror of
https://github.com/reactos/reactos.git
synced 2024-08-04 18:40:59 +00:00
Check automatic dependencies of referenced object library modules on make <module>_depends
svn path=/trunk/; revision=16513
This commit is contained in:
parent
876fc32e53
commit
91269f987b
|
@ -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 );
|
||||
|
|
|
@ -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" );
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 ) );
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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'",
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue