FS::Path ObjectFile::generate_target_path(const Component &comp, const FS::Path &src)
{
- const SourcePackage &pkg = comp.get_package();
- FS::Path temp_dir = pkg.get_temp_directory();
- FS::Path rel_src;
- if(FS::descendant_depth(src, temp_dir)>=0)
- rel_src = FS::relative(src, temp_dir);
- else
- rel_src = FS::relative(src, pkg.get_source_directory());
- string fn;
- for(const string &c: rel_src)
- {
- if(!fn.empty())
- fn += '_';
- if(c!=".")
- fn += c;
- }
+ string fn = comp.flatten_source_path(src);
const Architecture &arch = comp.get_package().get_builder().get_current_arch();
- return temp_dir/comp.get_name()/arch.create_filename<ObjectFile>(FS::basepart(fn));
+ return comp.get_temp_directory()/arch.create_filename<ObjectFile>(FS::basepart(fn));
}
void ObjectFile::set_used_in_shared_library(bool u)
vector<FileTarget *> headers;
find_dependencies(source, headers);
for(FileTarget *h: headers)
- {
- add_dependency(*h);
- if(h->get_real_target()->is_buildable())
- h->signal_modified.connect(sigc::mem_fun(this, static_cast<void (ObjectFile::*)()>(&ObjectFile::find_dependencies)));
- }
+ if(!any_equals(depends, static_cast<Target *>(h)))
+ {
+ add_dependency(*h);
+ if(h->get_real_target()->is_buildable())
+ h->signal_modified.connect(sigc::mem_fun(this, static_cast<void (ObjectFile::*)()>(&ObjectFile::find_dependencies)));
+ }
}
void ObjectFile::find_dependencies(FileTarget &tgt, vector<FileTarget *> &headers)