From: Mikko Rasa Date: Fri, 8 Jun 2012 22:45:04 +0000 (+0300) Subject: Don't pass including file location to find_header X-Git-Url: http://git.tdb.fi/?p=builder.git;a=commitdiff_plain;h=34845849442814cbc29585fb3d86ccb2da5940de Don't pass including file location to find_header --- diff --git a/source/csourcefile.cpp b/source/csourcefile.cpp index 48935bd..dee807b 100644 --- a/source/csourcefile.cpp +++ b/source/csourcefile.cpp @@ -51,11 +51,12 @@ void CSourceFile::find_depends() } const StringList &incpath = comp->get_build_info().incpath; + StringList local_incpath = incpath; + local_incpath.push_front(FS::dirname(path).str()); - FS::Path dir = FS::dirname(path); for(list::iterator i=includes.begin(); i!=includes.end(); ++i) { - Target *hdr = builder.get_vfs().find_header(*i, dir, incpath); + Target *hdr = builder.get_vfs().find_header(i->substr(1), ((*i)[0]=='"' ? local_incpath : incpath)); if(hdr) add_depend(hdr); } diff --git a/source/virtualfilesystem.cpp b/source/virtualfilesystem.cpp index fe0159e..75f935d 100644 --- a/source/virtualfilesystem.cpp +++ b/source/virtualfilesystem.cpp @@ -40,15 +40,13 @@ void VirtualFileSystem::register_path(const FS::Path &path, FileTarget *t) targets.insert(TargetMap::value_type(path.str(), t)); } -FileTarget *VirtualFileSystem::find_header(const string &include, const FS::Path &from, const list &path) +FileTarget *VirtualFileSystem::find_header(const string &name, const SearchPath &path) { string hash(8, 0); - if(include[0]=='\"') - update_hash(hash, from.str()); for(list::const_iterator i=path.begin(); i!=path.end(); ++i) update_hash(hash, *i); - string id = hash+include; + string id = hash+name; TargetMap::iterator i = include_cache.find(id); if(i!=include_cache.end()) return i->second; @@ -77,9 +75,8 @@ FileTarget *VirtualFileSystem::find_header(const string &include, const FS::Path cxx_ver = "-"; } - string fn = include.substr(1); if(builder.get_verbose()>=5) - IO::print("Looking for include %s from %s with path %s\n", fn, from, join(path.begin(), path.end())); + IO::print("Looking for header %s with path %s\n", name, join(path.begin(), path.end())); SearchPath syspath; const Architecture &arch = builder.get_current_arch(); @@ -91,12 +88,10 @@ FileTarget *VirtualFileSystem::find_header(const string &include, const FS::Path syspath.push_back((FS::Path("/usr/include/c++/")/cxx_ver).str()); FileTarget *tgt = 0; - if(include[0]=='\"') - tgt = get_header(FS::Path(from)/fn); - for(list::const_iterator j=path.begin(); (!tgt && j!=path.end()); ++j) - tgt = get_header(FS::Path(*j)/fn); - for(list::const_iterator j=syspath.begin(); (!tgt && j!=syspath.end()); ++j) - tgt = get_header(FS::Path(*j)/fn); + for(SearchPath::const_iterator j=path.begin(); (!tgt && j!=path.end()); ++j) + tgt = get_header(FS::Path(*j)/name); + for(SearchPath::const_iterator j=syspath.begin(); (!tgt && j!=syspath.end()); ++j) + tgt = get_header(FS::Path(*j)/name); include_cache.insert(TargetMap::value_type(id, tgt)); diff --git a/source/virtualfilesystem.h b/source/virtualfilesystem.h index 09a4bf7..592f6bf 100644 --- a/source/virtualfilesystem.h +++ b/source/virtualfilesystem.h @@ -33,7 +33,7 @@ public: path. Considers known targets as well as existing files. If a matching target is not found but a file exists, a new SystemHeader target will be created and returned. */ - FileTarget *find_header(const std::string &, const Msp::FS::Path &, const SearchPath &); + FileTarget *find_header(const std::string &, const SearchPath &); /** Tries to locate a library in a library path. The library name should be the same as would be given to the linker with -l, i.e. without the "lib"