From 4a454cb7d6d14724c2c422e2648e485fd72ee38f Mon Sep 17 00:00:00 2001 From: Casper Hornstrup Date: Tue, 19 Jul 2005 18:46:13 +0000 Subject: [PATCH] Generate RPC interface headers in intermediate directory svn path=/trunk/; revision=16647 --- reactos/lib/advapi32/advapi32.xml | 2 +- reactos/subsys/system/services/services.xml | 2 +- .../rbuild/backend/mingw/modulehandler.cpp | 54 +++++++++++++------ .../rbuild/backend/mingw/modulehandler.h | 2 + reactos/tools/rbuild/include.cpp | 10 ++-- reactos/tools/rbuild/rbuild.h | 1 + 6 files changed, 50 insertions(+), 21 deletions(-) diff --git a/reactos/lib/advapi32/advapi32.xml b/reactos/lib/advapi32/advapi32.xml index e7d5b0beaf6..ec6b62b0f87 100644 --- a/reactos/lib/advapi32/advapi32.xml +++ b/reactos/lib/advapi32/advapi32.xml @@ -1,7 +1,7 @@ . - include/idl + . 0x600 0x0500 diff --git a/reactos/subsys/system/services/services.xml b/reactos/subsys/system/services/services.xml index 20f3f3565e4..4ac388e3b83 100644 --- a/reactos/subsys/system/services/services.xml +++ b/reactos/subsys/system/services/services.xml @@ -1,6 +1,6 @@ . - include/idl + . diff --git a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp index 0e90c85e85d..96d249a6fc5 100644 --- a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp +++ b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp @@ -287,6 +287,20 @@ MingwModuleHandler::GetActualSourceFilename ( return filename; } +string +MingwModuleHandler::GetExtraDependencies ( + const string& filename ) const +{ + string extension = GetExtension ( filename ); + if ( extension == ".idl" || extension == ".IDL" ) + { + string basename = GetBasename ( filename ); + return GetRpcServerHeaderFilename ( basename ) + " " + GetRpcClientHeaderFilename ( basename ); + } + else + return ""; +} + string MingwModuleHandler::GetModuleArchiveFilename () const { @@ -701,10 +715,19 @@ MingwModuleHandler::GenerateMacro ( for ( i = 0; i < data.includes.size(); i++ ) { + const Include& include = *data.includes[i]; + string includeDirectory; + if ( include.baseModule != NULL && + ( include.baseModule->type == RpcServer || + include.baseModule->type == RpcClient ) ) + includeDirectory = PassThruCacheDirectory ( NormalizeFilename ( include.directory ), + backend->intermediateDirectory ); + else + includeDirectory = include.directory; fprintf ( fMakefile, " -I%s", - data.includes[i]->directory.c_str() ); + includeDirectory.c_str() ); } for ( i = 0; i < data.defines.size(); i++ ) { @@ -905,10 +928,13 @@ MingwModuleHandler::GetPrecompiledHeaderFilename () const void MingwModuleHandler::GenerateGccCommand ( const string& sourceFilename, + const string& extraDependencies, const string& cc, const string& cflagsMacro ) { string dependencies = sourceFilename; + if ( extraDependencies != "" ) + dependencies += " " + extraDependencies; if ( module.pch && use_pch ) dependencies += " " + GetPrecompiledHeaderFilename (); @@ -1079,7 +1105,8 @@ MingwModuleHandler::GetWidlFlags ( const File& file ) string MingwModuleHandler::GetRpcServerHeaderFilename ( string basename ) const { - return basename + "_s.h"; + return PassThruCacheDirectory ( basename + "_s.h", + backend->intermediateDirectory ); } void @@ -1092,11 +1119,6 @@ MingwModuleHandler::GenerateWidlCommandsServer ( string basename = GetBasename ( file.name ); - /*string generatedHeaderFilename = PassThruCacheDirectory ( - basename + ".h", - backend->intermediateDirectory ); - CLEAN_FILE(generatedHeaderFilename); - */ string generatedHeaderFilename = GetRpcServerHeaderFilename ( basename ); CLEAN_FILE(generatedHeaderFilename); @@ -1125,7 +1147,8 @@ MingwModuleHandler::GenerateWidlCommandsServer ( string MingwModuleHandler::GetRpcClientHeaderFilename ( string basename ) const { - return basename + "_c.h"; + return PassThruCacheDirectory ( basename + "_c.h", + backend->intermediateDirectory ); } void @@ -1138,11 +1161,6 @@ MingwModuleHandler::GenerateWidlCommandsClient ( string basename = GetBasename ( file.name ); - /*string generatedHeaderFilename = PassThruCacheDirectory ( - basename + ".h", - backend->intermediateDirectory ); - CLEAN_FILE(generatedHeaderFilename); - */ string generatedHeaderFilename = GetRpcClientHeaderFilename ( basename ); CLEAN_FILE(generatedHeaderFilename); @@ -1195,6 +1213,7 @@ MingwModuleHandler::GenerateCommands ( if ( extension == ".c" || extension == ".C" ) { GenerateGccCommand ( file.name, + "", cc, cflagsMacro ); return; @@ -1204,6 +1223,7 @@ MingwModuleHandler::GenerateCommands ( extension == ".cxx" || extension == ".CXX" ) { GenerateGccCommand ( file.name, + "", cppc, cflagsMacro ); return; @@ -1231,6 +1251,7 @@ MingwModuleHandler::GenerateCommands ( { GenerateWinebuildCommands ( file.name ); GenerateGccCommand ( GetActualSourceFilename ( file.name ), + "", cc, cflagsMacro ); return; @@ -1240,6 +1261,7 @@ MingwModuleHandler::GenerateCommands ( GenerateWidlCommands ( file, widlflagsMacro ); GenerateGccCommand ( GetActualSourceFilename ( file.name ), + GetExtraDependencies ( file.name ), cc, cflagsMacro ); return; @@ -1647,7 +1669,6 @@ MingwModuleHandler::GetRpcHeaderDependencies ( if ( library.importedModule->type == RpcServer || library.importedModule->type == RpcClient ) { - for ( size_t j = 0; j < library.importedModule->non_if_data.files.size (); j++ ) { File& file = *library.importedModule->non_if_data.files[j]; @@ -2026,10 +2047,11 @@ MingwModuleHandler::GetWidlObjectDependencies ( const string& filename ) const { string basename = GetBasename ( filename ); - string serverDependency = PassThruCacheDirectory ( + string serverSourceDependency = PassThruCacheDirectory ( NormalizeFilename ( basename + "_s.c" ), backend->intermediateDirectory ); - dependencies.push_back ( serverDependency ); + dependencies.push_back ( serverSourceDependency ); + dependencies.push_back ( GetRpcServerHeaderFilename ( basename ) ); } void diff --git a/reactos/tools/rbuild/backend/mingw/modulehandler.h b/reactos/tools/rbuild/backend/mingw/modulehandler.h index 944bae43a3b..1f02cb3bd62 100644 --- a/reactos/tools/rbuild/backend/mingw/modulehandler.h +++ b/reactos/tools/rbuild/backend/mingw/modulehandler.h @@ -85,6 +85,7 @@ protected: std::string GetWorkingDirectory () const; std::string GetBasename ( const std::string& filename ) const; std::string GetActualSourceFilename ( const std::string& filename ) const; + std::string GetExtraDependencies ( const std::string& filename ) const; std::string GetModuleArchiveFilename () const; bool IsGeneratedFile ( const File& file ) const; std::string GetImportLibraryDependency ( const Module& importedModule ); @@ -143,6 +144,7 @@ private: std::string GenerateNasmParameters () const; std::string MingwModuleHandler::GetPrecompiledHeaderFilename () const; void GenerateGccCommand ( const std::string& sourceFilename, + const std::string& extraDependencies, const std::string& cc, const std::string& cflagsMacro ); void GenerateGccAssemblerCommand ( const std::string& sourceFilename, diff --git a/reactos/tools/rbuild/include.cpp b/reactos/tools/rbuild/include.cpp index 33d24779dc1..7488e6e30d3 100644 --- a/reactos/tools/rbuild/include.cpp +++ b/reactos/tools/rbuild/include.cpp @@ -27,7 +27,8 @@ Include::Include ( const Project& project, const XMLElement* includeNode ) : project ( project ), module ( NULL ), - node ( includeNode ) + node ( includeNode ), + baseModule ( NULL ) { } @@ -36,7 +37,8 @@ Include::Include ( const Project& project, const XMLElement* includeNode ) : project ( project ), module ( module ), - node ( includeNode ) + node ( includeNode ), + baseModule ( NULL ) { } @@ -45,7 +47,8 @@ Include::Include ( const Project& project, string basePath ) : project ( project ), module ( NULL ), - node ( NULL ) + node ( NULL ), + baseModule ( NULL ) { this->directory = NormalizeFilename ( basePath + SSEP + directory ); this->basePath = NormalizeFilename ( basePath ); @@ -78,6 +81,7 @@ Include::ProcessXML() const Module* base = project.LocateModule ( att->value ); if ( base != NULL ) { + baseModule = base; basePath = base->GetBasePath (); referenceResolved = true; } diff --git a/reactos/tools/rbuild/rbuild.h b/reactos/tools/rbuild/rbuild.h index 520bdd92461..d6261ed0ab8 100644 --- a/reactos/tools/rbuild/rbuild.h +++ b/reactos/tools/rbuild/rbuild.h @@ -271,6 +271,7 @@ public: const Project& project; const Module* module; const XMLElement* node; + const Module* baseModule; std::string directory; std::string basePath;