Search current directory first for #include "".
Modified: trunk/reactos/tools/rbuild/automaticdependency.cpp
Modified: trunk/reactos/tools/rbuild/include.cpp
Modified: trunk/reactos/tools/rbuild/module.cpp
Modified: trunk/reactos/tools/rbuild/project.cpp
Modified: trunk/reactos/tools/rbuild/rbuild.h
  _____
Modified: trunk/reactos/tools/rbuild/automaticdependency.cpp
--- trunk/reactos/tools/rbuild/automaticdependency.cpp  2005-06-24
18:28:22 UTC (rev 16259)
+++ trunk/reactos/tools/rbuild/automaticdependency.cpp  2005-06-24
19:39:47 UTC (rev 16260)
@@ -85,6 +85,7 @@
 bool
 SourceFile::ReadInclude ( string& filename,
+                          bool& searchCurrentDirectory,
                           bool& includeNext)
 {
        while ( p < end )
@@ -117,6 +118,7 @@
                                                register char ch = *p;
                                                if ( ch == '<' || ch ==
'"' )
                                                {
+
searchCurrentDirectory = (ch == '"');
                                                        p++;
                                                        filename.resize
( MAX_PATH );
                                                        int i = 0;
@@ -138,6 +140,7 @@
                p++;
        }
        filename = "";
+       searchCurrentDirectory = false;
        includeNext = false;
        return false;
 }
@@ -230,14 +233,17 @@
        {
                string includedFilename ( "" );
+               bool searchCurrentDirectory;
                bool includeNext;
                while ( ReadInclude ( includedFilename,
+                                     searchCurrentDirectory,
                                      includeNext ) )
                {
                        string resolvedFilename ( "" );
                        bool locatedFile =
automaticDependency->LocateIncludedFile ( this,
module,
includedFilename,
+
searchCurrentDirectory,
includeNext,
resolvedFilename );
                        if ( locatedFile )
@@ -321,8 +327,8 @@
 bool
 AutomaticDependency::LocateIncludedFile ( const string& directory,
-                                             const string&
includedFilename,
-                                             string& resolvedFilename )
+                                          const string&
includedFilename,
+                                          string& resolvedFilename )
 {
        string normalizedFilename = NormalizeFilename ( directory + SSEP
+ includedFilename );
        FILE* f = fopen ( normalizedFilename.c_str (), "rb" );
@@ -347,37 +353,44 @@
                                         filename.length () - index -
1);
 }
+void
+AutomaticDependency::GetIncludeDirectories ( vector<Include*>&
includes,
+                                             Module& module,
+                                             Include& currentDirectory,
+                                             bool
searchCurrentDirectory )
+{
+       if ( searchCurrentDirectory )
+               includes.push_back( ¤tDirectory );
+       for ( size_t i = 0; i < module.non_if_data.includes.size (); i++
)
+               includes.push_back( module.non_if_data.includes[i] );
+       for ( size_t i = 0; i < module.project.non_if_data.includes.size
(); i++ )
+               includes.push_back(
module.project.non_if_data.includes[i] );
+}
+
 bool
 AutomaticDependency::LocateIncludedFile ( SourceFile* sourceFile,
-                                             Module& module,
-                                             const string&
includedFilename,
-                                             bool includeNext,
-                                             string& resolvedFilename )
+                                          Module& module,
+                                          const string&
includedFilename,
+                                          bool searchCurrentDirectory,
+                                          bool includeNext,
+                                          string& resolvedFilename )
 {
-       size_t i, j;
-       const vector<Include*>* pincludes;
-       for ( i = 0; i < 2; i++ )
+       vector<Include*> includes;
+       Include currentDirectory ( module.project, ".",
sourceFile->directoryPart );
+       GetIncludeDirectories ( includes, module, currentDirectory,
searchCurrentDirectory );
+       for ( size_t j = 0; j < includes.size (); j++ )
        {
-               if ( !i )
-                       pincludes = &module.non_if_data.includes;
-               else
-                       pincludes =
&module.project.non_if_data.includes;
-               const vector<Include*>& includes = *pincludes;
-               for ( j = 0; j < includes.size (); j++ )
+               Include& include = *includes[j];
+               if ( LocateIncludedFile ( include.directory,
+                                         includedFilename,
+                                         resolvedFilename ) )
                {
-                       Include& include = *includes[j];
-                       if ( LocateIncludedFile ( include.directory,
-
includedFilename,
-
resolvedFilename ) )
-                       {
-                               if ( includeNext && stricmp (
resolvedFilename.c_str (),
-
sourceFile->filename.c_str () ) == 0 )
-                                       continue;
-                               return true;
-                       }
+                       if ( includeNext && stricmp (
resolvedFilename.c_str (),
+
sourceFile->filename.c_str () ) == 0 )
+                               continue;
+                       return true;
                }
        }
-
        resolvedFilename = "";
        return false;
 }
@@ -422,15 +435,15 @@
 void
 AutomaticDependency::CheckAutomaticDependencies ( Module& module,
-                                                     bool verbose )
+                                                  bool verbose )
 {
        CheckAutomaticDependencies ( module, verbose, true );
 }
 void
 AutomaticDependency::CheckAutomaticDependencies ( Module& module,
-                                                     bool verbose,
-                                                     bool parseFiles )
+                                                  bool verbose,
+                                                  bool parseFiles )
 {
        if ( parseFiles )
                ParseFiles ( module );
  _____
Modified: trunk/reactos/tools/rbuild/include.cpp
--- trunk/reactos/tools/rbuild/include.cpp      2005-06-24 18:28:22 UTC
(rev 16259)
+++ trunk/reactos/tools/rbuild/include.cpp      2005-06-24 19:39:47 UTC
(rev 16260)
@@ -6,31 +6,35 @@
 using std::string;
 using std::vector;
-Include::Include ( const Project& project_,
-                   const XMLElement& includeNode )
-       : project (project_),
-         module (NULL),
-         node (includeNode)
+Include::Include ( const Project& project,
+                   const XMLElement* includeNode )
+       : project ( project ),
+         module ( NULL ),
+         node ( includeNode )
 {
-       Initialize();
 }
-Include::Include ( const Project& project_,
-                      const Module* module_,
-                      const XMLElement& includeNode )
-       : project (project_),
-         module (module_),
-         node (includeNode)
+Include::Include ( const Project& project,
+                   const Module* module,
+                   const XMLElement* includeNode )
+       : project ( project ),
+         module ( module ),
+         node ( includeNode )
 {
-       Initialize();
 }
-Include::~Include ()
+Include::Include ( const Project& project,
+                   string directory,
+                   string basePath )
+       : project ( project ),
+         module ( NULL ),
+         node ( NULL )
 {
+       this->directory = NormalizeFilename ( basePath + SSEP +
directory );
+       this->basePath = NormalizeFilename ( basePath );
 }
-void
-Include::Initialize()
+Include::~Include ()
 {
 }
@@ -38,13 +42,13 @@
 Include::ProcessXML()
 {
        const XMLAttribute* att;
-       att = node.GetAttribute ( "base",
-                                 false );
+       att = node->GetAttribute ( "base",
+                                  false );
        if ( att )
        {
                if ( !module )
                        throw InvalidBuildFileException (
-                               node.location,
+                               node->location,
                                "'base' attribute illegal from global
<include>" );
                bool referenceResolved = false;
                if ( att->value == project.name )
@@ -63,11 +67,11 @@
                }
                if ( !referenceResolved )
                        throw InvalidBuildFileException (
-                               node.location,
+                               node->location,
                                "<include> attribute 'base' references
non-existant project or module '%s'",
                                att->value.c_str() );
-               directory = FixSeparator ( basePath + "/" + node.value
);
+               directory = NormalizeFilename ( basePath + SSEP +
node->value );
        }
        else
-               directory = FixSeparator ( node.value );
+               directory = NormalizeFilename ( node->value );
 }
  _____
Modified: trunk/reactos/tools/rbuild/module.cpp
--- trunk/reactos/tools/rbuild/module.cpp       2005-06-24 18:28:22 UTC
(rev 16259)
+++ trunk/reactos/tools/rbuild/module.cpp       2005-06-24 19:39:47 UTC
(rev 16260)
@@ -367,7 +367,7 @@
        }
        else if ( e.name == "include" )
        {
-               Include* include = new Include ( project, this, e );
+               Include* include = new Include ( project, this, &e );
                if ( pIf )
                        pIf->data.includes.push_back ( include );
                else
  _____
Modified: trunk/reactos/tools/rbuild/project.cpp
--- trunk/reactos/tools/rbuild/project.cpp      2005-06-24 18:28:22 UTC
(rev 16259)
+++ trunk/reactos/tools/rbuild/project.cpp      2005-06-24 19:39:47 UTC
(rev 16260)
@@ -290,7 +290,7 @@
        }
        else if ( e.name == "include" )
        {
-               Include* include = new Include ( *this, e );
+               Include* include = new Include ( *this, &e );
                if ( pIf )
                        pIf->data.includes.push_back ( include );
                else
  _____
Modified: trunk/reactos/tools/rbuild/rbuild.h
--- trunk/reactos/tools/rbuild/rbuild.h 2005-06-24 18:28:22 UTC (rev
16259)
+++ trunk/reactos/tools/rbuild/rbuild.h 2005-06-24 19:39:47 UTC (rev
16260)
@@ -253,19 +253,21 @@
 public:
        const Project& project;
        const Module* module;
-       const XMLElement& node;
+       const XMLElement* node;
        std::string directory;
        std::string basePath;
        Include ( const Project& project,
-                 const XMLElement& includeNode );
+                 const XMLElement* includeNode );
        Include ( const Project& project,
                  const Module* module,
-                 const XMLElement& includeNode );
+                 const XMLElement* includeNode );
+       Include ( const Project& project,
+                 std::string directory,
+                 std::string basePath );
        ~Include ();
        void ProcessXML();
 private:
-       void Initialize();
 };
@@ -556,6 +558,7 @@
        void Open ();
        void SkipWhitespace ();
        bool ReadInclude ( std::string& filename,
+                          bool& searchCurrentDirectory,
                           bool& includeNext );
        bool IsIncludedFrom ( const std::string& normalizedFilename );
        SourceFile* GetParentSourceFile ();
@@ -583,6 +586,7 @@
        bool LocateIncludedFile ( SourceFile* sourceFile,
                                  Module& module,
                                  const std::string& includedFilename,
+                                 bool searchCurrentDirectory,
                                  bool includeNext,
                                  std::string& resolvedFilename );
        SourceFile* RetrieveFromCacheOrParse ( Module& module,
@@ -597,6 +601,10 @@
                                          bool parseFiles );
        void CheckAutomaticDependenciesForFile ( SourceFile* sourceFile
);
 private:
+       void GetIncludeDirectories ( std::vector<Include*>& includes,
+                                    Module& module,
+                                     Include& currentDirectory,
+                                     bool searchCurrentDirectory );
        void GetModuleFiles ( Module& module,
                               std::vector<File*>& files ) const;
        void ParseFiles ();