]> git.tdb.fi Git - builder.git/blobdiff - source/lib/objectfile.cpp
Use a covariant return type for get_real_target in FileTarget
[builder.git] / source / lib / objectfile.cpp
index 00fa6792859962e9a1a0b984bdde70b8c86bf3e4..46ec607119d82c10511eef32ef23e9d50657b958 100644 (file)
@@ -19,23 +19,9 @@ ObjectFile::ObjectFile(Builder &b, const Component &c, SourceFile &s):
 
 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)
@@ -54,18 +40,19 @@ void ObjectFile::find_dependencies()
        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)
 {
        tgt.prepare();
 
-       FileTarget *rtgt = dynamic_cast<FileTarget *>(tgt.get_real_target());
+       FileTarget *rtgt = tgt.get_real_target();
        Dependencies deps_to_add = rtgt->get_transitive_dependencies();
        if(rtgt!=&tgt)
        {