- for(Dependencies::const_iterator i=deps_to_add.begin(); i!=deps_to_add.end(); ++i)
- if(find(depends.begin(), depends.end(), *i)==depends.end())
- add_depend(*i);
-}
-
-void ObjectFile::add_depend(Target *tgt)
-{
- Target::add_depend(tgt);
- new_deps.push_back(tgt);
-}
-
-FS::Path ObjectFile::generate_target_path(const Component &comp, const string &src)
-{
- const SourcePackage &pkg = comp.get_package();
- string fn = FS::basepart(src)+".o";
- if(!fn.compare(0, 2, "./"))
- fn.erase(0, 2);
- for(string::iterator i=fn.begin(); i!=fn.end(); ++i)
- if(*i=='/')
- *i = '_';
- return pkg.get_temp_dir()/comp.get_name()/fn;
+ for(Target *d: deps_to_add)
+ if(FileTarget *file = dynamic_cast<FileTarget *>(d))
+ {
+ auto i = lower_bound(headers, file);
+ if(i==headers.end() || *i!=file)
+ {
+ headers.insert(i, file);
+ find_dependencies(*file, headers);
+ }
+ }