Author: hpoussin
Date: Mon Sep 10 17:13:16 2007
New Revision: 28990
URL: 
http://svn.reactos.org/svn/reactos?rev=28990&view=rev
Log:
Continue rbuild cleanup (File class)
Modified:
    trunk/reactos/tools/rbuild/automaticdependency.cpp
    trunk/reactos/tools/rbuild/backend/codeblocks/codeblocks.cpp
    trunk/reactos/tools/rbuild/backend/devcpp/devcpp.cpp
    trunk/reactos/tools/rbuild/backend/devcpp/devcpp.h
    trunk/reactos/tools/rbuild/backend/mingw/modulehandler.cpp
    trunk/reactos/tools/rbuild/backend/msbuild/msbuild.cpp
    trunk/reactos/tools/rbuild/backend/msvc/msvc.cpp
    trunk/reactos/tools/rbuild/backend/msvc/msvcmaker.cpp
    trunk/reactos/tools/rbuild/backend/msvc/vcprojmaker.cpp
    trunk/reactos/tools/rbuild/compilationunit.cpp
    trunk/reactos/tools/rbuild/compilationunitsupportcode.cpp
    trunk/reactos/tools/rbuild/module.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 17:13:16 2007
@@ -321,7 +321,8 @@
        if ( module.pch != NULL )
        {
-               File *file = new File ( module.pch->file.relative_path + sSep +
module.pch->file.name , false, "", true );
+               const FileLocation& pch = module.pch->file;
+               File *file = new File ( pch.directory, pch.relative_path, pch.name ,
false, "", true );
                files.push_back ( file );
        }
 }
@@ -541,7 +542,7 @@
        for ( size_t fi = 0; fi < files.size (); fi++ )
        {
                File& file = *files[fi];
-               string normalizedFilename = NormalizeFilename ( file.name );
+               string normalizedFilename = NormalizeFilename ( file.GetFullPath () );
                SourceFile* sourceFile = RetrieveFromCache ( normalizedFilename );
                if ( sourceFile != NULL )
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 17:13:16 2007
@@ -251,7 +251,7 @@
                const vector<File*>& files = data.files;
                for ( i = 0; i < files.size (); i++ )
                {
-                       string file = files[i]->name;
+                       string file = files[i]->file.relative_path + sSep +
files[i]->file.name;
                        string::size_type pos = file.find_last_of ("\\");
                        if ( pos != string::npos )
                                file.erase ( 0, pos+1 );
@@ -418,7 +418,8 @@
                const vector<File*>& files = data.files;
                for ( i = 0; i < files.size(); i++ )
                {
-                       string file = string(".") +
&files[i]->name[cbproj_path.size()];
+                       string fullpath = files[i]->file.relative_path + sSep +
files[i]->file.name;
+                       string file = string(".") +
&fullpath[cbproj_path.size()];
                        if ( !stricmp ( Right(file,3).c_str(), ".rc" ) )
                                resource_files.push_back ( file );
Modified: trunk/reactos/tools/rbuild/backend/devcpp/devcpp.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/backend/devcp…
==============================================================================
--- trunk/reactos/tools/rbuild/backend/devcpp/devcpp.cpp (original)
+++ trunk/reactos/tools/rbuild/backend/devcpp/devcpp.cpp Mon Sep 10 17:13:16 2007
@@ -133,7 +133,7 @@
                {
                        File &file = *module.non_if_data.files[k];
-                       ProcessFile(file.name);
+                       ProcessFile( file.file.relative_path + sSep + file.file.name );
                }
        }
 }
@@ -149,7 +149,7 @@
        return true;
 }
-void DevCppBackend::ProcessFile(string &filepath)
+void DevCppBackend::ProcessFile(string filepath)
 {
        // Remove the .\ at the start of the filenames
        if ((filepath[0] == '.') && (filepath[1] == '\\'))
filepath.erase(0, 2);
Modified: trunk/reactos/tools/rbuild/backend/devcpp/devcpp.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/backend/devcp…
==============================================================================
--- trunk/reactos/tools/rbuild/backend/devcpp/devcpp.h (original)
+++ trunk/reactos/tools/rbuild/backend/devcpp/devcpp.h Mon Sep 10 17:13:16 2007
@@ -45,7 +45,7 @@
        private:
                void ProcessModules();
-               void ProcessFile(std::string &filename);
+               void ProcessFile(std::string filename);
                bool CheckFolderAdded(std::string &folder);
                void AddFolders(std::string &folder);
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 17:13:16 2007
@@ -336,7 +336,7 @@
        for ( size_t i = 0; i < compilationUnit.files.size (); i++ )
        {
                File& file = *compilationUnit.files[i];
-               sourceFiles.push_back ( NormalizeFilename ( file.name ) );
+               sourceFiles.push_back ( strFile ( &file.file ) );
        }
        return v2s ( sourceFiles, 10 );
 }
@@ -354,7 +354,7 @@
 bool
 MingwModuleHandler::IsGeneratedFile ( const File& file ) const
 {
-       string extension = GetExtension ( file.name );
+       string extension = GetExtension ( file.file.name );
        return ( extension == ".spec" || extension == ".SPEC" );
 }
@@ -3533,10 +3533,9 @@
 void
 MingwTestModuleHandler::GetModuleSpecificCompilationUnits (
vector<CompilationUnit*>& compilationUnits )
 {
-       string basePath = "$(INTERMEDIATE)" + sSep +
module.output->relative_path;
-       compilationUnits.push_back ( new CompilationUnit ( new File ( basePath + sSep +
"_hooks.c", false, "", false ) ) );
-       compilationUnits.push_back ( new CompilationUnit ( new File ( basePath + sSep +
"_stubs.S", false, "", false ) ) );
-       compilationUnits.push_back ( new CompilationUnit ( new File ( basePath + sSep +
"_startup.c", false, "", false ) ) );
+       compilationUnits.push_back ( new CompilationUnit ( new File (
IntermediateDirectory, module.output->relative_path + sSep + "..",
module.name + "_hooks.c", false, "", false ) ) );
+       compilationUnits.push_back ( new CompilationUnit ( new File (
IntermediateDirectory, module.output->relative_path + sSep + "..",
module.name + "_stubs.S", false, "", false ) ) );
+       compilationUnits.push_back ( new CompilationUnit ( new File (
IntermediateDirectory, module.output->relative_path + sSep + "..",
module.name + "_startup.c", false, "", false ) ) );
 }
 void
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 17:13:16 2007
@@ -113,8 +113,7 @@
                const vector<File*>& files = data.files;
                for ( i = 0; i < files.size(); i++ )
                {
-                       string file = &files[i]->name[proj_path.size()+1];
-                       source_files.push_back ( file );
+                       source_files.push_back ( files[i]->file.name );
                }
                const vector<Include*>& incs = data.includes;
                for ( i = 0; i < incs.size(); i++ )
Modified: trunk/reactos/tools/rbuild/backend/msvc/msvc.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/backend/msvc/…
==============================================================================
--- trunk/reactos/tools/rbuild/backend/msvc/msvc.cpp (original)
+++ trunk/reactos/tools/rbuild/backend/msvc/msvc.cpp Mon Sep 10 17:13:16 2007
@@ -337,7 +337,7 @@
                const vector<File*>& files = data.files;
                for ( i = 0; i < files.size (); i++ )
                {
-                       string file = files[i]->name;
+                       string file = files[i]->file.relative_path + sSep +
files[i]->file.name;
                        string::size_type pos = file.find_last_of (DEF_SSEP);
                        if ( pos != string::npos )
                                file.erase ( 0, pos+1 );
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 17:13:16 2007
@@ -102,8 +102,8 @@
                const vector<File*>& files = data.files;
                for ( i = 0; i < files.size(); i++ )
                {
-                       // TODO FIXME - do we want the full path of the file here?
-                       string file = string(".") +
&files[i]->name[dsp_path.size()];
+                       // TODO FIXME - do we want only the name of the file here?
+                       string file = files[i]->file.name;
                        source_files.push_back ( file );
                        if ( !stricmp ( Right(file,2).c_str(), ".c" ) )
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 17:13:16 2007
@@ -157,8 +157,8 @@
                const vector<File*>& files = data.files;
                for ( i = 0; i < files.size(); i++ )
                {
-                       // TODO FIXME - do we want the full path of the file here?
-                       string file = string(".") +
&files[i]->name[vcproj_path.size()];
+                       // TODO FIXME - do we want only the name of the file here?
+                       string file = files[i]->file.name;
                        if ( !stricmp ( Right(file,3).c_str(), ".rc" ) )
                                resource_files.push_back ( file );
Modified: trunk/reactos/tools/rbuild/compilationunit.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/compilationun…
==============================================================================
--- trunk/reactos/tools/rbuild/compilationunit.cpp (original)
+++ trunk/reactos/tools/rbuild/compilationunit.cpp Mon Sep 10 17:13:16 2007
@@ -28,8 +28,8 @@
          module(NULL),
          node(NULL)
 {
-       local_name = file->name;
-       name = file->name;
+       local_name = file->file.name;
+       name = file->file.relative_path + sSep + file->file.name;
        files.push_back ( file );
 }
@@ -67,7 +67,7 @@
        if ( files.size () != 1 )
                return false;
        File* file = files[0];
-       string extension = GetExtension ( file->name );
+       string extension = GetExtension ( file->file.name );
        return ( extension == ".spec" || extension == ".SPEC" );
 }
@@ -78,7 +78,7 @@
        for ( i = 0; i < files.size (); i++ )
        {
                File& file = *files[i];
-               string fileExtension = GetExtension ( file.name );
+               string fileExtension = GetExtension ( file.file.name );
                if ( !stricmp ( fileExtension.c_str (), extension.c_str () ) )
                        return true;
        }
@@ -106,28 +106,7 @@
        }
        File* file = files[0];
-
-       DirectoryLocation directory;
-       if ( file->path_prefix.length () == 0 )
-               directory = SourceDirectory;
-       else if ( file->path_prefix == "$(INTERMEDIATE)" )
-               directory = IntermediateDirectory;
-       else
-               throw InvalidOperationException ( __FILE__,
-                                                 __LINE__,
-                                                 "Invalid path prefix
'%s'",
-                                                 file->path_prefix.c_str () );
-
-       size_t pos = file->name.find_last_of ( "/\\" );
-       assert ( pos != string::npos );
-       string relative_path = file->name.substr ( 0, pos );
-       string name = file->name.substr ( pos + 1 );
-       if ( relative_path.compare ( 0, 15, "$(INTERMEDIATE)") == 0 )
-       {
-               directory = IntermediateDirectory;
-               relative_path.erase ( 0, 16 );
-       }
-       return new FileLocation ( directory, relative_path, name );
+       return new FileLocation ( file->file );
 }
 std::string
Modified: trunk/reactos/tools/rbuild/compilationunitsupportcode.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/compilationun…
==============================================================================
--- trunk/reactos/tools/rbuild/compilationunitsupportcode.cpp (original)
+++ trunk/reactos/tools/rbuild/compilationunitsupportcode.cpp Mon Sep 10 17:13:16 2007
@@ -86,7 +86,7 @@
        for ( size_t i = 0; i < compilationUnit.files.size () ; i++ )
        {
                File& file = *compilationUnit.files[i];
-               s = s + sprintf ( s, "#include <%s>\n", ChangeSeparator (
file.name, '\\', '/' ).c_str () );
+               s = s + sprintf ( s, "#include <%s/%s>\n", ChangeSeparator
( file.file.relative_path, '\\', '/' ).c_str (), file.file.name.c_str ()
);
        }
        s = s + sprintf ( s, "\n" );
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 17:13:16 2007
@@ -538,7 +538,7 @@
        for ( i = 0; i < node.subElements.size(); i++ )
        {
                ParseContext parseContext;
-               ProcessXMLSubElement ( *node.subElements[i], output->relative_path,
"", parseContext );
+               ProcessXMLSubElement ( *node.subElements[i], SourceDirectory,
output->relative_path, parseContext );
        }
        for ( i = 0; i < invocations.size(); i++ )
                invocations[i]->ProcessXML ();
@@ -561,15 +561,15 @@
 void
 Module::ProcessXMLSubElement ( const XMLElement& e,
-                               const string& path,
-                               const string& path_prefix,
+                               DirectoryLocation directory,
+                                  const string& relative_path,
                                ParseContext& parseContext )
 {
        If* pOldIf = parseContext.ifData;
        CompilationUnit* pOldCompilationUnit = parseContext.compilationUnit;
        bool subs_invalid = false;
-       string subpath ( path );
-       string subpath_prefix ( "" );
+       string subpath ( relative_path );
+       DirectoryLocation subdirectory = SourceDirectory;
        if ( e.name == "file" && e.value.size () > 0 )
        {
                bool first = false;
@@ -600,8 +600,9 @@
                        else if ( !stricmp ( ext.c_str(), ".cxx" ) )
                                cplusplus = true;
                }
-               File* pFile = new File ( FixSeparator ( path + cSep + e.value ),
-                                        path_prefix,
+               File* pFile = new File ( directory,
+                                        relative_path,
+                                        e.value,
                                         first,
                                         switches,
                                         false );
@@ -644,9 +645,9 @@
                if ( root )
                {
                        if ( root->value == "intermediate" )
-                               subpath_prefix = "$(INTERMEDIATE)";
+                               subdirectory = IntermediateDirectory;
                        else if ( root->value == "output" )
-                               subpath_prefix = "$(OUTPUT)";
+                               subdirectory = OutputDirectory;
                        else
                        {
                                throw InvalidAttributeValueException (
@@ -655,7 +656,7 @@
                                        root->value );
                        }
                }
-               subpath = GetSubPath ( this->project, e.location, path, att->value
);
+               subpath = GetSubPath ( this->project, e.location, relative_path,
att->value );
        }
        else if ( e.name == "include" )
        {
@@ -802,14 +803,14 @@
                if ( pos == string::npos )
                {
                        pch = new PchFile (
-                               e, *this, FileLocation ( SourceDirectory, path, e.value )
);
+                               e, *this, FileLocation ( SourceDirectory, relative_path,
e.value ) );
                }
                else
                {
                        string dir = e.value.substr ( 0, pos );
                        string name = e.value.substr ( pos + 1);
                        pch = new PchFile (
-                               e, *this, FileLocation ( SourceDirectory, path + sSep +
dir, name ) );
+                               e, *this, FileLocation ( SourceDirectory, relative_path +
sSep + dir, name ) );
                }
                subs_invalid = true;
        }
@@ -846,7 +847,7 @@
                        e.name.c_str() );
        }
        for ( size_t i = 0; i < e.subElements.size (); i++ )
-               ProcessXMLSubElement ( *e.subElements[i], subpath, subpath_prefix,
parseContext );
+               ProcessXMLSubElement ( *e.subElements[i], subdirectory, subpath,
parseContext );
        parseContext.ifData = pOldIf;
        parseContext.compilationUnit = pOldCompilationUnit;
 }
@@ -1233,12 +1234,13 @@
 }
-File::File ( const string& _name,
+File::File ( DirectoryLocation directory,
+             const string& relative_path,
+             const string& name,
              bool _first,
-             std::string _switches,
+             const string& _switches,
              bool _isPreCompiledHeader )
-       : name(_name),
-         path_prefix(""),
+       : file ( directory, relative_path, name ),
          first(_first),
          switches(_switches),
          isPreCompiledHeader(_isPreCompiledHeader)
@@ -1246,19 +1248,6 @@
 }
-File::File ( const string& _name,
-             const string& _path_prefix,
-             bool _first,
-             std::string _switches,
-             bool _isPreCompiledHeader )
-       : name(_name),
-         path_prefix(_path_prefix),
-         first(_first),
-         switches(_switches),
-         isPreCompiledHeader(_isPreCompiledHeader)
-{
-}
-
 void
 File::ProcessXML()
 {
@@ -1267,10 +1256,11 @@
 std::string File::GetFullPath () const
 {
-       if ( path_prefix.length () > 0 )
-               return path_prefix + sSep + name;
-       else
-               return name;
+       // TODO FIXME take care of file.directory? return a full path?
+       if ( file.relative_path.length () > 0 )
+               return file.relative_path + sSep + file.name;
+       else
+               return file.name;
 }
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 17:13:16 2007
@@ -309,6 +309,20 @@
        OutputDirectory,
        InstallDirectory,
        TemporaryDirectory,
+};
+
+class FileLocation
+{
+public:
+       DirectoryLocation directory;
+       std::string relative_path;
+       std::string name;
+
+       FileLocation ( const DirectoryLocation directory,
+                      const std::string& relative_path,
+                      const std::string& name );
+
+       FileLocation ( const FileLocation& other );
 };
 class Module
@@ -377,8 +391,8 @@
        std::string GetDefaultModuleBaseaddress () const;
        std::string entrypoint;
        void ProcessXMLSubElement ( const XMLElement& e,
-                                   const std::string& path,
-                                   const std::string& path_prefix,
+                                   DirectoryLocation directory,
+                                   const std::string& relative_path,
                                    ParseContext& parseContext );
 };
@@ -435,21 +449,16 @@
 class File
 {
 public:
-       std::string name;
-       std::string path_prefix;
+       FileLocation file;
        bool first;
        std::string switches;
        bool isPreCompiledHeader;
-       File ( const std::string& _name,
+       File ( DirectoryLocation directory,
+              const std::string& relative_path,
+              const std::string& name,
               bool _first,
-              std::string _switches,
-              bool _isPreCompiledHeader );
-
-       File ( const std::string& _name,
-              const std::string& _path_prefix,
-              bool _first,
-              std::string _switches,
+              const std::string& _switches,
               bool _isPreCompiledHeader );
        void ProcessXML();
@@ -829,21 +838,6 @@
 };
-class FileLocation
-{
-public:
-       DirectoryLocation directory;
-       std::string relative_path;
-       std::string name;
-
-       FileLocation ( const DirectoryLocation directory,
-                      const std::string& relative_path,
-                      const std::string& name );
-
-       FileLocation ( const FileLocation& other );
-};
-
-
 class CDFile : public XmlNode
 {
 public:
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 17:13:16 2007
@@ -37,7 +37,7 @@
 bool
 WineResource::IsSpecFile ( const File& file )
 {
-       string extension = GetExtension ( file.name );
+       string extension = GetExtension ( file.file.name );
        if ( extension == ".spec" || extension == ".SPEC" )
                return true;
        return false;
@@ -58,7 +58,7 @@
 bool
 WineResource::IsResourceFile ( const File& file )
 {
-       string extension = GetExtension ( file.name );
+       string extension = GetExtension ( file.file.name );
        if ( extension == ".rc" || extension == ".RC" )
                return true;
        return false;
@@ -71,7 +71,7 @@
        for ( size_t i = 0; i < files.size (); i++ )
        {
                if ( IsResourceFile ( *files[i] ) )
-                       return files[i]->name;
+                       return files[i]->file.relative_path + sSep +
files[i]->file.name;
        }
        return "";
 }