Author: hpoussin
Date: Mon Sep 10 10:52:07 2007
New Revision: 28986
URL:
http://svn.reactos.org/svn/reactos?rev=28986&view=rev
Log:
Continue rbuild cleanup (Include class)
Modified:
trunk/reactos/tools/rbuild/automaticdependency.cpp
trunk/reactos/tools/rbuild/backend/codeblocks/codeblocks.cpp
trunk/reactos/tools/rbuild/backend/mingw/modulehandler.cpp
trunk/reactos/tools/rbuild/backend/msbuild/msbuild.cpp
trunk/reactos/tools/rbuild/backend/msvc/msvcmaker.cpp
trunk/reactos/tools/rbuild/backend/msvc/vcprojmaker.cpp
trunk/reactos/tools/rbuild/include.cpp
trunk/reactos/tools/rbuild/module.cpp
trunk/reactos/tools/rbuild/project.cpp
trunk/reactos/tools/rbuild/rbuild.h
trunk/reactos/tools/rbuild/wineresource.cpp
Modified: trunk/reactos/tools/rbuild/automaticdependency.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/automaticdepe…
==============================================================================
--- trunk/reactos/tools/rbuild/automaticdependency.cpp (original)
+++ trunk/reactos/tools/rbuild/automaticdependency.cpp Mon Sep 10 10:52:07 2007
@@ -367,11 +367,36 @@
}
bool
-AutomaticDependency::LocateIncludedFile ( const string& directory,
+AutomaticDependency::LocateIncludedFile ( const FileLocation& directory,
const string& includedFilename,
string& resolvedFilename )
{
- string normalizedFilename = NormalizeFilename ( directory + sSep + includedFilename );
+ string path;
+ switch ( directory.directory )
+ {
+ case SourceDirectory:
+ path = "";
+ break;
+ case IntermediateDirectory:
+ path = Environment::GetIntermediatePath ();
+ break;
+ case OutputDirectory:
+ path = Environment::GetOutputPath ();
+ break;
+ default:
+ throw InvalidOperationException ( __FILE__,
+ __LINE__,
+ "Invalid directory %d.",
+ directory.directory );
+ }
+ if ( directory.relative_path.length () > 0 )
+ {
+ if ( path.length () > 0 )
+ path += sSep;
+ path += directory.relative_path;
+ }
+
+ string normalizedFilename = NormalizeFilename ( path + sSep + includedFilename );
FILE* f = fopen ( normalizedFilename.c_str (), "rb" );
if ( f != NULL )
{
@@ -418,12 +443,12 @@
string& resolvedFilename )
{
vector<Include*> includes;
- Include currentDirectory ( module.project, ".", sourceFile->directoryPart
);
+ Include currentDirectory ( module.project, SourceDirectory, sourceFile->directoryPart
);
GetIncludeDirectories ( includes, module, currentDirectory, searchCurrentDirectory );
for ( size_t j = 0; j < includes.size (); j++ )
{
Include& include = *includes[j];
- if ( LocateIncludedFile ( include.directory,
+ if ( LocateIncludedFile ( *include.directory,
includedFilename,
resolvedFilename ) )
{
@@ -433,6 +458,9 @@
return true;
}
}
+ /*printf ( "Unable to find %s, included in %s.\n",
+ includedFilename.c_str (),
+ sourceFile->filename.c_str () );*/
resolvedFilename = "";
return false;
}
Modified: trunk/reactos/tools/rbuild/backend/codeblocks/codeblocks.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/backend/codeb…
==============================================================================
--- trunk/reactos/tools/rbuild/backend/codeblocks/codeblocks.cpp (original)
+++ trunk/reactos/tools/rbuild/backend/codeblocks/codeblocks.cpp Mon Sep 10 10:52:07 2007
@@ -429,7 +429,7 @@
for ( i = 0; i < incs.size(); i++ )
{
string path = Path::RelativeFromDirectory (
- incs[i]->directory,
+ incs[i]->directory->relative_path,
module.output->relative_path );
includes.push_back ( path );
Modified: trunk/reactos/tools/rbuild/backend/mingw/modulehandler.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/backend/mingw…
==============================================================================
--- trunk/reactos/tools/rbuild/backend/mingw/modulehandler.cpp (original)
+++ trunk/reactos/tools/rbuild/backend/mingw/modulehandler.cpp Mon Sep 10 10:52:07 2007
@@ -105,6 +105,8 @@
{
switch ( file->directory )
{
+ case SourceDirectory:
+ break;
case IntermediateDirectory:
backend->AddDirectoryTarget ( file->relative_path,
backend->intermediateDirectory );
break;
@@ -670,14 +672,7 @@
Include& include = *includes[i];
if ( parameters.length () > 0 )
parameters += " ";
- if ( include.root == "intermediate" )
- path_prefix = "$(INTERMEDIATE)" + sSep;
- else if (include.root == "output" )
- path_prefix = "$(OUTPUT)" + sSep;
- else
- path_prefix = "";
-
- parameters += "-I" + path_prefix + include.directory;
+ parameters += "-I" + strDirectory ( include.directory );;
}
return parameters;
}
@@ -783,33 +778,11 @@
for ( i = 0; i < data.includes.size(); i++ )
{
const Include& include = *data.includes[i];
- string includeDirectory, path_prefix;
- if ( include.baseModule != NULL &&
- ( include.baseModule->type == RpcServer ||
- include.baseModule->type == RpcClient ||
- include.baseModule->type == IdlHeader) )
- {
- path_prefix = "$(INTERMEDIATE)" + sSep;
- includeDirectory = NormalizeFilename ( include.directory );
- }
- else
- includeDirectory = include.directory;
-
- if ( include.root == "intermediate" )
- path_prefix = "$(INTERMEDIATE)" + sSep;
- else if (include.root == "output" )
- path_prefix = "$(OUTPUT)" + sSep;
- else if ( include.root != "" )
- throw InvalidOperationException ( __FILE__,
- __LINE__,
- "Unsupported root prefix '%s'",
- include.root.c_str () );
-
+ const FileLocation* includeDirectory = include.directory;
fprintf (
fMakefile,
- " -I%s%s",
- path_prefix.c_str(),
- includeDirectory.c_str() );
+ " -I%s",
+ strDirectory ( includeDirectory ).c_str() );
}
for ( i = 0; i < data.defines.size(); i++ )
{
Modified: trunk/reactos/tools/rbuild/backend/msbuild/msbuild.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/backend/msbui…
==============================================================================
--- trunk/reactos/tools/rbuild/backend/msbuild/msbuild.cpp (original)
+++ trunk/reactos/tools/rbuild/backend/msbuild/msbuild.cpp Mon Sep 10 10:52:07 2007
@@ -120,7 +120,7 @@
for ( i = 0; i < incs.size(); i++ )
{
string path = Path::RelativeFromDirectory (
- incs[i]->directory,
+ incs[i]->directory->relative_path,
module.output->relative_path );
includes.push_back ( path );
Modified: trunk/reactos/tools/rbuild/backend/msvc/msvcmaker.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/backend/msvc/…
==============================================================================
--- trunk/reactos/tools/rbuild/backend/msvc/msvcmaker.cpp (original)
+++ trunk/reactos/tools/rbuild/backend/msvc/msvcmaker.cpp Mon Sep 10 10:52:07 2007
@@ -118,15 +118,15 @@
{
// explicitly omit win32api directories
- if ( !strncmp(incs[i]->directory.c_str(), "w32api", 6 ) )
+ if ( !strncmp(incs[i]->directory->relative_path.c_str(), "w32api", 6 )
)
continue;
// explicitly omit include/wine directories
- if ( !strncmp(incs[i]->directory.c_str(), "include\\wine", 12 ) )
+ if ( !strncmp(incs[i]->directory->relative_path.c_str(),
"include\\wine", 12 ) )
continue;
string path = Path::RelativeFromDirectory (
- incs[i]->directory,
+ incs[i]->directory->relative_path,
module.output->relative_path );
includes.push_back ( path );
}
Modified: trunk/reactos/tools/rbuild/backend/msvc/vcprojmaker.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/backend/msvc/…
==============================================================================
--- trunk/reactos/tools/rbuild/backend/msvc/vcprojmaker.cpp (original)
+++ trunk/reactos/tools/rbuild/backend/msvc/vcprojmaker.cpp Mon Sep 10 10:52:07 2007
@@ -171,7 +171,7 @@
for ( i = 0; i < incs.size(); i++ )
{
string path = Path::RelativeFromDirectory (
- incs[i]->directory,
+ incs[i]->directory->relative_path,
module.output->relative_path );
if ( module.type != RpcServer && module.type != RpcClient )
{
@@ -182,12 +182,12 @@
}
}
// add to another list win32api and include/wine directories
- if ( !strncmp(incs[i]->directory.c_str(), "include\\ddk", 11 ) ||
- !strncmp(incs[i]->directory.c_str(), "include\\crt", 11 ) ||
- !strncmp(incs[i]->directory.c_str(), "include\\GL", 10 ) ||
- !strncmp(incs[i]->directory.c_str(), "include\\ddk", 11 ) ||
- !strncmp(incs[i]->directory.c_str(), "include\\psdk", 12 ) ||
- !strncmp(incs[i]->directory.c_str(), "include\\reactos\\wine", 20 )
)
+ if ( !strncmp(incs[i]->directory->relative_path.c_str(),
"include\\ddk", 11 ) ||
+ !strncmp(incs[i]->directory->relative_path.c_str(),
"include\\crt", 11 ) ||
+ !strncmp(incs[i]->directory->relative_path.c_str(),
"include\\GL", 10 ) ||
+ !strncmp(incs[i]->directory->relative_path.c_str(), "include\\ddk",
11 ) ||
+ !strncmp(incs[i]->directory->relative_path.c_str(), "include\\psdk",
12 ) ||
+ !strncmp(incs[i]->directory->relative_path.c_str(),
"include\\reactos\\wine", 20 ) )
{
includes_ros.push_back ( path );
}
Modified: trunk/reactos/tools/rbuild/include.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/include.cpp?r…
==============================================================================
--- trunk/reactos/tools/rbuild/include.cpp (original)
+++ trunk/reactos/tools/rbuild/include.cpp Mon Sep 10 10:52:07 2007
@@ -25,95 +25,98 @@
Include::Include ( const Project& project,
const XMLElement* includeNode )
- : project ( project ),
- module ( NULL ),
+ : directory ( NULL ),
+ project ( project ),
node ( includeNode ),
- baseModule ( NULL )
+ module ( NULL )
{
}
Include::Include ( const Project& project,
- const Module* module,
- const XMLElement* includeNode )
- : project ( project ),
- module ( module ),
+ const XMLElement* includeNode,
+ const Module* module )
+ : directory ( NULL ),
+ project ( project ),
node ( includeNode ),
- baseModule ( NULL )
+ module ( module )
{
}
Include::Include ( const Project& project,
- string directory,
- string basePath )
+ DirectoryLocation root,
+ const std::string& relative_path )
: project ( project ),
- module ( NULL ),
- node ( NULL ),
- baseModule ( NULL )
+ node ( NULL )
{
- this->directory = NormalizeFilename ( basePath + sSep + directory );
- this->basePath = NormalizeFilename ( basePath );
+ directory = new FileLocation ( root, relative_path, "" );
}
-Include::~Include ()
+Include::~Include()
{
}
void
-Include::ProcessXML()
+Include::ProcessXML ()
{
- const XMLAttribute* att;
- att = node->GetAttribute ( "base", false );
+ DirectoryLocation root = SourceDirectory;
+
+ string relative_path;
+ const XMLAttribute* att = node->GetAttribute ( "base", false );
if ( att )
{
- bool referenceResolved = false;
-
if ( !module )
- {
throw XMLInvalidBuildFileException (
node->location,
"'base' attribute illegal from global <include>" );
+
+ if ( att->value == project.name )
+ {
+ relative_path = node->value;
}
+ else
+ {
+ const Module* base = project.LocateModule ( att->value );
+ if ( !base )
+ throw XMLInvalidBuildFileException (
+ node->location,
+ "<include> attribute 'base' references non-existant project or
module '%s'",
+ att->value.c_str() );
+ root = GetDefaultDirectoryTree ( base );
- if ( !referenceResolved )
- {
- if ( att->value == project.name )
- {
- basePath = ".";
- referenceResolved = true;
- }
- else
- {
- const Module* base = project.LocateModule ( att->value );
- if ( base != NULL )
- {
- baseModule = base;
- basePath = base->output->relative_path;
- referenceResolved = true;
- }
- }
+ relative_path = base->output->relative_path;
+ if ( node->value.length () > 0 && node->value != "." )
+ relative_path += sSep + node->value;
}
-
- if ( !referenceResolved )
- throw XMLInvalidBuildFileException (
- node->location,
- "<include> attribute 'base' references non-existant project or
module '%s'",
- att->value.c_str() );
- directory = NormalizeFilename ( basePath + sSep + node->value );
}
else
- directory = NormalizeFilename ( node->value );
+ relative_path = node->value;
att = node->GetAttribute ( "root", false );
if ( att )
{
- if ( att->value != "intermediate" && att->value !=
"output" )
- {
- throw InvalidAttributeValueException (
- node->location,
- "root",
- att->value );
- }
+ if ( att->value == "intermediate" )
+ root = IntermediateDirectory;
+ else if ( att->value == "output" )
+ root = OutputDirectory;
+ else
+ throw InvalidAttributeValueException ( node->location,
+ "root",
+ att->value );
+ }
- root = att->value;
- }
+ directory = new FileLocation ( root,
+ relative_path,
+ "" );
}
+
+DirectoryLocation
+Include::GetDefaultDirectoryTree ( const Module* module ) const
+{
+ if ( module != NULL &&
+ ( module->type == RpcServer ||
+ module->type == RpcClient ||
+ module->type == IdlHeader) )
+ return IntermediateDirectory;
+ else
+ return SourceDirectory;
+}
Modified: trunk/reactos/tools/rbuild/module.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/module.cpp?re…
==============================================================================
--- trunk/reactos/tools/rbuild/module.cpp (original)
+++ trunk/reactos/tools/rbuild/module.cpp Mon Sep 10 10:52:07 2007
@@ -289,6 +289,10 @@
else
extension = GetDefaultModuleExtension ();
+ output = new FileLocation ( GetTargetDirectoryTree (),
+ modulePath,
+ name + extension );
+
att = moduleNode.GetAttribute ( "unicode", false );
if ( att != NULL )
{
@@ -485,9 +489,6 @@
}
}
- output = new FileLocation ( GetTargetDirectoryTree (),
- modulePath,
- name + extension );
SetImportLibrary ( NULL );
}
@@ -658,7 +659,7 @@
}
else if ( e.name == "include" )
{
- Include* include = new Include ( project, this, &e );
+ Include* include = new Include ( project, &e, this );
if ( parseContext.ifData )
parseContext.ifData->data.includes.push_back ( include );
else
@@ -948,7 +949,9 @@
return IntermediateDirectory;
}
throw InvalidOperationException ( __FILE__,
- __LINE__ );
+ __LINE__,
+ "Invalid module type %d.",
+ type );
}
string
Modified: trunk/reactos/tools/rbuild/project.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/project.cpp?r…
==============================================================================
--- trunk/reactos/tools/rbuild/project.cpp (original)
+++ trunk/reactos/tools/rbuild/project.cpp Mon Sep 10 10:52:07 2007
@@ -110,7 +110,8 @@
relative_path[0] == '\\' ||
relative_path.find ( '$' ) != string::npos ||
( relative_path.length () > 1 && ( relative_path[1] == ':' ||
- relative_path.find_last_of ( "/\\" )
== relative_path.length () - 1 ) )
+ relative_path.find_last_of ( "/\\" )
== relative_path.length () - 1 ) ) ||
+ ( relative_path.length () > 3 && relative_path.find ( ':' ) !=
string::npos )
)
{
throw InvalidOperationException ( __FILE__,
@@ -119,7 +120,7 @@
relative_path.c_str () );
}
- if ( strpbrk ( name.c_str (), "/\\:" ) )
+ if ( name.find_first_of ( "/\\:" ) != string::npos )
{
throw InvalidOperationException ( __FILE__,
__LINE__,
Modified: trunk/reactos/tools/rbuild/rbuild.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/rbuild.h?rev=…
==============================================================================
--- trunk/reactos/tools/rbuild/rbuild.h (original)
+++ trunk/reactos/tools/rbuild/rbuild.h Mon Sep 10 10:52:07 2007
@@ -386,25 +386,23 @@
class Include
{
public:
- const Project& project;
- const Module* module;
- const XMLElement* node;
- const Module* baseModule;
- std::string directory;
- std::string basePath;
- std::string root;
+ FileLocation *directory;
Include ( const Project& project,
const XMLElement* includeNode );
Include ( const Project& project,
- const Module* module,
- const XMLElement* includeNode );
+ const XMLElement* includeNode,
+ const Module* module );
Include ( const Project& project,
- std::string directory,
- std::string basePath );
+ DirectoryLocation directory,
+ const std::string& relative_path );
~Include ();
- void ProcessXML();
-private:
+ void ProcessXML ();
+private:
+ const Project& project;
+ const XMLElement* node;
+ const Module* module;
+ DirectoryLocation GetDefaultDirectoryTree ( const Module* module ) const;
};
@@ -769,7 +767,7 @@
AutomaticDependency ( const Project& project );
~AutomaticDependency ();
std::string GetFilename ( const std::string& filename );
- bool LocateIncludedFile ( const std::string& directory,
+ bool LocateIncludedFile ( const FileLocation& directory,
const std::string& includedFilename,
std::string& resolvedFilename );
bool LocateIncludedFile ( SourceFile* sourceFile,
Modified: trunk/reactos/tools/rbuild/wineresource.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/wineresource.…
==============================================================================
--- trunk/reactos/tools/rbuild/wineresource.cpp (original)
+++ trunk/reactos/tools/rbuild/wineresource.cpp Mon Sep 10 10:52:07 2007
@@ -120,6 +120,6 @@
exitcode );
}
module.non_if_data.includes.push_back( new Include ( module.project,
- module.output->relative_path,
- "$(INTERMEDIATE)" ) );
+ IntermediateDirectory,
+ module.output->relative_path )
);
}