install_location = FS::Path("include")/package->get_name();
}
+void CSourceFile::parse_includes(IO::Base &in)
+{
+ static Regex r_include("^[ \t]*#include[ \t]+([\"<].*)[\">]");
+
+ string line;
+ while(in.getline(line))
+ if(RegMatch match = r_include.match(line))
+ includes.push_back(match[1].str);
+}
+
void CSourceFile::find_dependencies()
{
if(!component || !mtime)
builder.get_logger().log("files", format("Reading includes from %s", path.str()));
- Regex r_include("^[ \t]*#include[ \t]+([\"<].*)[\">]");
-
- string line;
- while(in.getline(line))
- if(RegMatch match = r_include.match(line))
- includes.push_back(match[1].str);
-
+ parse_includes(in);
cache.set_values(this, "includes", includes);
}
- const BuildInfo::PathList &incpath = component->get_build_info().incpath;
+ const BuildInfo &build_info = component->get_build_info_for_path(path);
+ const BuildInfo::PathList &incpath = build_info.incpath;
BuildInfo::PathList local_incpath = incpath;
+ local_incpath.insert(local_incpath.begin(), build_info.local_incpath.begin(), build_info.local_incpath.end());
local_incpath.push_front(FS::dirname(path).str());
for(IncludeList::iterator i=includes.begin(); i!=includes.end(); ++i)
{
Target *hdr = builder.get_vfs().find_header(i->substr(1), ((*i)[0]=='"' ? local_incpath : incpath));
if(hdr)
- add_dependency(*hdr);
+ add_transitive_dependency(*hdr);
}
}
void CSourceFile::modified()
{
includes.clear();
- depends.clear();
+ trans_depends.clear();
find_dependencies();
}