]> git.tdb.fi Git - builder.git/blobdiff - source/lib/component.cpp
Rearrange generated source paths
[builder.git] / source / lib / component.cpp
index 61aa0db855867ed91863ec1e2d99b336c849f4a6..1ba258bd70a00f4011587bd3617ccff24796a7ce 100644 (file)
@@ -20,6 +20,21 @@ void Component::prepare()
                broken |= r->is_broken();
        }
 
+       if(!sources.empty())
+       {
+               for(auto i=sources.begin(); i!=sources.end(); ++i)
+               {
+                       FS::Path s = *i;
+                       if(!FS::is_dir(s))
+                               s = FS::dirname(s);
+
+                       if(i==sources.begin())
+                               source_base_path = s;
+                       else
+                               source_base_path = FS::common_ancestor(source_base_path, s);
+               }
+       }
+
        if(!problems.empty())
                broken = true;
 }
@@ -65,23 +80,33 @@ void Component::create_build_info()
                p = (package.get_source_directory()/p).str();
 }
 
+FS::Path Component::get_temp_directory() const
+{
+       return package.get_temp_directory()/name;
+}
+
+string Component::flatten_source_path(const FS::Path &source) const
+{
+       FS::Path temp_dir = get_temp_directory();
+       FS::Path rel_src;
+       if(FS::descendant_depth(source, temp_dir)>=0)
+               rel_src = FS::relative(source, temp_dir);
+       else
+               rel_src = FS::relative(source, source_base_path);
+
+       string fn;
+       for(const string &c: rel_src)
+               if(c!=".")
+                       append(fn, "_", c);
+
+       return fn;
+}
+
 BuildInfo Component::get_build_info_for_path(const FS::Path &path) const
 {
        // XXX Cache these and check that the directories actually exist before adding them
        BuildInfo binfo = build_info;
 
-       FS::Path gen_dir = package.get_temp_directory()/"generated";
-       if(FS::descendant_depth(path, gen_dir)>=0)
-       {
-               FS::Path subdir = FS::dirname(FS::relative(path, gen_dir));
-               binfo.local_incpath.push_back(package.get_source_directory()/subdir);
-       }
-       else
-       {
-               FS::Path subdir = FS::dirname(FS::relative(path, package.get_source_directory()));
-               binfo.local_incpath.push_back(gen_dir/subdir);
-       }
-
        if(!overlays.empty())
        {
                FS::Path dir = FS::dirname(path);