}
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<string>::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);
}
targets.insert(TargetMap::value_type(path.str(), t));
}
-FileTarget *VirtualFileSystem::find_header(const string &include, const FS::Path &from, const list<string> &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<string>::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;
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();
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<string>::const_iterator j=path.begin(); (!tgt && j!=path.end()); ++j)
- tgt = get_header(FS::Path(*j)/fn);
- for(list<string>::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));
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"