mirror of
https://github.com/reactos/reactos.git
synced 2025-07-06 09:41:25 +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
5 changed files with 61 additions and 45 deletions
|
@ -11,7 +11,7 @@ using std::vector;
|
||||||
using std::map;
|
using std::map;
|
||||||
|
|
||||||
SourceFile::SourceFile ( AutomaticDependency* automaticDependency,
|
SourceFile::SourceFile ( AutomaticDependency* automaticDependency,
|
||||||
Module& module,
|
const Module& module,
|
||||||
const string& filename,
|
const string& filename,
|
||||||
SourceFile* parent,
|
SourceFile* parent,
|
||||||
bool isNonAutomaticDependency )
|
bool isNonAutomaticDependency )
|
||||||
|
@ -294,7 +294,7 @@ AutomaticDependency::ParseFiles ()
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
AutomaticDependency::GetModuleFiles ( Module& module,
|
AutomaticDependency::GetModuleFiles ( const Module& module,
|
||||||
vector<File*>& files ) const
|
vector<File*>& files ) const
|
||||||
{
|
{
|
||||||
for ( size_t i = 0; i < module.non_if_data.files.size (); i++ )
|
for ( size_t i = 0; i < module.non_if_data.files.size (); i++ )
|
||||||
|
@ -307,7 +307,7 @@ AutomaticDependency::GetModuleFiles ( Module& module,
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
AutomaticDependency::ParseFiles ( Module& module )
|
AutomaticDependency::ParseFiles ( const Module& module )
|
||||||
{
|
{
|
||||||
vector<File*> files;
|
vector<File*> files;
|
||||||
GetModuleFiles ( module, files );
|
GetModuleFiles ( module, files );
|
||||||
|
@ -316,7 +316,7 @@ AutomaticDependency::ParseFiles ( Module& module )
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
AutomaticDependency::ParseFile ( Module& module,
|
AutomaticDependency::ParseFile ( const Module& module,
|
||||||
const File& file )
|
const File& file )
|
||||||
{
|
{
|
||||||
string normalizedFilename = NormalizeFilename ( file.name );
|
string normalizedFilename = NormalizeFilename ( file.name );
|
||||||
|
@ -355,7 +355,7 @@ AutomaticDependency::GetFilename ( const string& filename )
|
||||||
|
|
||||||
void
|
void
|
||||||
AutomaticDependency::GetIncludeDirectories ( vector<Include*>& includes,
|
AutomaticDependency::GetIncludeDirectories ( vector<Include*>& includes,
|
||||||
Module& module,
|
const Module& module,
|
||||||
Include& currentDirectory,
|
Include& currentDirectory,
|
||||||
bool searchCurrentDirectory )
|
bool searchCurrentDirectory )
|
||||||
{
|
{
|
||||||
|
@ -369,7 +369,7 @@ AutomaticDependency::GetIncludeDirectories ( vector<Include*>& includes,
|
||||||
|
|
||||||
bool
|
bool
|
||||||
AutomaticDependency::LocateIncludedFile ( SourceFile* sourceFile,
|
AutomaticDependency::LocateIncludedFile ( SourceFile* sourceFile,
|
||||||
Module& module,
|
const Module& module,
|
||||||
const string& includedFilename,
|
const string& includedFilename,
|
||||||
bool searchCurrentDirectory,
|
bool searchCurrentDirectory,
|
||||||
bool includeNext,
|
bool includeNext,
|
||||||
|
@ -396,9 +396,9 @@ AutomaticDependency::LocateIncludedFile ( SourceFile* sourceFile,
|
||||||
}
|
}
|
||||||
|
|
||||||
SourceFile*
|
SourceFile*
|
||||||
AutomaticDependency::RetrieveFromCacheOrParse ( Module& module,
|
AutomaticDependency::RetrieveFromCacheOrParse ( const Module& module,
|
||||||
const string& filename,
|
const string& filename,
|
||||||
SourceFile* parentSourceFile )
|
SourceFile* parentSourceFile )
|
||||||
{
|
{
|
||||||
SourceFile* sourceFile = sourcefile_map[filename];
|
SourceFile* sourceFile = sourcefile_map[filename];
|
||||||
if ( sourceFile == NULL )
|
if ( sourceFile == NULL )
|
||||||
|
@ -429,25 +429,41 @@ AutomaticDependency::CheckAutomaticDependencies ( bool verbose )
|
||||||
for ( size_t mi = 0; mi < project.modules.size (); mi++ )
|
for ( size_t mi = 0; mi < project.modules.size (); mi++ )
|
||||||
{
|
{
|
||||||
Module& module = *project.modules[mi];
|
Module& module = *project.modules[mi];
|
||||||
CheckAutomaticDependencies ( module, verbose, false );
|
CheckAutomaticDependencies ( module, verbose );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
AutomaticDependency::CheckAutomaticDependencies ( Module& module,
|
AutomaticDependency::GetModulesToCheck ( Module& module, vector<const Module*>& modules )
|
||||||
bool verbose )
|
|
||||||
{
|
{
|
||||||
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
|
void
|
||||||
AutomaticDependency::CheckAutomaticDependencies ( Module& module,
|
AutomaticDependency::CheckAutomaticDependenciesForModule ( Module& module,
|
||||||
bool verbose,
|
bool verbose )
|
||||||
bool parseFiles )
|
|
||||||
{
|
{
|
||||||
if ( parseFiles )
|
vector<const Module*> modules;
|
||||||
ParseFiles ( module );
|
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;
|
struct utimbuf timebuf;
|
||||||
vector<File*> files;
|
vector<File*> files;
|
||||||
GetModuleFiles ( module, files );
|
GetModuleFiles ( module, files );
|
||||||
|
|
|
@ -325,8 +325,8 @@ MingwBackend::CheckAutomaticDependenciesForModuleOnly ()
|
||||||
printf ( "Checking automatic dependencies for module '%s'...",
|
printf ( "Checking automatic dependencies for module '%s'...",
|
||||||
module->name.c_str () );
|
module->name.c_str () );
|
||||||
AutomaticDependency automaticDependency ( ProjectNode );
|
AutomaticDependency automaticDependency ( ProjectNode );
|
||||||
automaticDependency.CheckAutomaticDependencies ( *module,
|
automaticDependency.CheckAutomaticDependenciesForModule ( *module,
|
||||||
configuration.Verbose );
|
configuration.Verbose );
|
||||||
printf ( "done\n" );
|
printf ( "done\n" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -615,7 +615,7 @@ MingwModuleHandler::GenerateImportLibraryDependenciesFromVector (
|
||||||
dependencies += " \\\n\t\t", wrap_count = 0;
|
dependencies += " \\\n\t\t", wrap_count = 0;
|
||||||
else if ( dependencies.size () > 0 )
|
else if ( dependencies.size () > 0 )
|
||||||
dependencies += " ";
|
dependencies += " ";
|
||||||
dependencies += GetImportLibraryDependency ( *libraries[i]->imported_module );
|
dependencies += GetImportLibraryDependency ( *libraries[i]->importedModule );
|
||||||
}
|
}
|
||||||
return dependencies;
|
return dependencies;
|
||||||
}
|
}
|
||||||
|
@ -1274,7 +1274,7 @@ MingwModuleHandler::GenerateBuildNonSymbolStrippedCode ()
|
||||||
|
|
||||||
void
|
void
|
||||||
MergeStringVector ( const vector<string>& input,
|
MergeStringVector ( const vector<string>& input,
|
||||||
vector<string>& output )
|
vector<string>& output )
|
||||||
{
|
{
|
||||||
int wrap_at = 25;
|
int wrap_at = 25;
|
||||||
string s;
|
string s;
|
||||||
|
@ -1603,20 +1603,20 @@ MingwModuleHandler::GetRpcHeaderDependencies (
|
||||||
for ( size_t i = 0; i < module.non_if_data.libraries.size (); i++ )
|
for ( size_t i = 0; i < module.non_if_data.libraries.size (); i++ )
|
||||||
{
|
{
|
||||||
Library& library = *module.non_if_data.libraries[i];
|
Library& library = *module.non_if_data.libraries[i];
|
||||||
if ( library.imported_module->type == RpcServer ||
|
if ( library.importedModule->type == RpcServer ||
|
||||||
library.imported_module->type == RpcClient )
|
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 );
|
string extension = GetExtension ( file.name );
|
||||||
if ( extension == ".idl" || extension == ".IDL" )
|
if ( extension == ".idl" || extension == ".IDL" )
|
||||||
{
|
{
|
||||||
string basename = GetBasename ( file.name );
|
string basename = GetBasename ( file.name );
|
||||||
if ( library.imported_module->type == RpcServer )
|
if ( library.importedModule->type == RpcServer )
|
||||||
dependencies.push_back ( GetRpcServerHeaderFilename ( basename ) );
|
dependencies.push_back ( GetRpcServerHeaderFilename ( basename ) );
|
||||||
if ( library.imported_module->type == RpcClient )
|
if ( library.importedModule->type == RpcClient )
|
||||||
dependencies.push_back ( GetRpcClientHeaderFilename ( basename ) );
|
dependencies.push_back ( GetRpcClientHeaderFilename ( basename ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -817,14 +817,14 @@ Library::Library ( const XMLElement& _node,
|
||||||
: node(_node),
|
: node(_node),
|
||||||
module(_module),
|
module(_module),
|
||||||
name(_name),
|
name(_name),
|
||||||
imported_module(_module.project.LocateModule(_name))
|
importedModule(_module.project.LocateModule(_name))
|
||||||
{
|
{
|
||||||
if ( module.name == name )
|
if ( module.name == name )
|
||||||
throw InvalidBuildFileException (
|
throw InvalidBuildFileException (
|
||||||
node.location,
|
node.location,
|
||||||
"module '%s' cannot link against itself",
|
"module '%s' cannot link against itself",
|
||||||
name.c_str() );
|
name.c_str() );
|
||||||
if ( !imported_module )
|
if ( !importedModule )
|
||||||
throw InvalidBuildFileException (
|
throw InvalidBuildFileException (
|
||||||
node.location,
|
node.location,
|
||||||
"module '%s' trying to import non-existant module '%s'",
|
"module '%s' trying to import non-existant module '%s'",
|
||||||
|
|
|
@ -316,7 +316,7 @@ public:
|
||||||
const XMLElement& node;
|
const XMLElement& node;
|
||||||
const Module& module;
|
const Module& module;
|
||||||
std::string name;
|
std::string name;
|
||||||
const Module* imported_module;
|
const Module* importedModule;
|
||||||
|
|
||||||
Library ( const XMLElement& _node,
|
Library ( const XMLElement& _node,
|
||||||
const Module& _module,
|
const Module& _module,
|
||||||
|
@ -533,7 +533,7 @@ class SourceFile
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SourceFile ( AutomaticDependency* automaticDependency,
|
SourceFile ( AutomaticDependency* automaticDependency,
|
||||||
Module& module,
|
const Module& module,
|
||||||
const std::string& filename,
|
const std::string& filename,
|
||||||
SourceFile* parent,
|
SourceFile* parent,
|
||||||
bool isNonAutomaticDependency );
|
bool isNonAutomaticDependency );
|
||||||
|
@ -542,7 +542,7 @@ public:
|
||||||
std::string Location () const;
|
std::string Location () const;
|
||||||
std::vector<SourceFile*> files;
|
std::vector<SourceFile*> files;
|
||||||
AutomaticDependency* automaticDependency;
|
AutomaticDependency* automaticDependency;
|
||||||
Module& module;
|
const Module& module;
|
||||||
std::string filename;
|
std::string filename;
|
||||||
std::string filenamePart;
|
std::string filenamePart;
|
||||||
std::string directoryPart;
|
std::string directoryPart;
|
||||||
|
@ -584,32 +584,32 @@ public:
|
||||||
const std::string& includedFilename,
|
const std::string& includedFilename,
|
||||||
std::string& resolvedFilename );
|
std::string& resolvedFilename );
|
||||||
bool LocateIncludedFile ( SourceFile* sourceFile,
|
bool LocateIncludedFile ( SourceFile* sourceFile,
|
||||||
Module& module,
|
const Module& module,
|
||||||
const std::string& includedFilename,
|
const std::string& includedFilename,
|
||||||
bool searchCurrentDirectory,
|
bool searchCurrentDirectory,
|
||||||
bool includeNext,
|
bool includeNext,
|
||||||
std::string& resolvedFilename );
|
std::string& resolvedFilename );
|
||||||
SourceFile* RetrieveFromCacheOrParse ( Module& module,
|
SourceFile* RetrieveFromCacheOrParse ( const Module& module,
|
||||||
const std::string& filename,
|
const std::string& filename,
|
||||||
SourceFile* parentSourceFile );
|
SourceFile* parentSourceFile );
|
||||||
SourceFile* RetrieveFromCache ( const std::string& filename );
|
SourceFile* RetrieveFromCache ( const std::string& filename );
|
||||||
void CheckAutomaticDependencies ( bool verbose );
|
void CheckAutomaticDependencies ( bool verbose );
|
||||||
void CheckAutomaticDependencies ( Module& module,
|
void CheckAutomaticDependenciesForModule ( Module& module,
|
||||||
bool verbose );
|
bool verbose );
|
||||||
void CheckAutomaticDependencies ( Module& module,
|
|
||||||
bool verbose,
|
|
||||||
bool parseFiles );
|
|
||||||
void CheckAutomaticDependenciesForFile ( SourceFile* sourceFile );
|
|
||||||
private:
|
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,
|
void GetIncludeDirectories ( std::vector<Include*>& includes,
|
||||||
Module& module,
|
const Module& module,
|
||||||
Include& currentDirectory,
|
Include& currentDirectory,
|
||||||
bool searchCurrentDirectory );
|
bool searchCurrentDirectory );
|
||||||
void GetModuleFiles ( Module& module,
|
void GetModuleFiles ( const Module& module,
|
||||||
std::vector<File*>& files ) const;
|
std::vector<File*>& files ) const;
|
||||||
void ParseFiles ();
|
void ParseFiles ();
|
||||||
void ParseFiles ( Module& module );
|
void ParseFiles ( const Module& module );
|
||||||
void ParseFile ( Module& module,
|
void ParseFile ( const Module& module,
|
||||||
const File& file );
|
const File& file );
|
||||||
std::map<std::string, SourceFile*> sourcefile_map;
|
std::map<std::string, SourceFile*> sourcefile_map;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue