]> git.tdb.fi Git - builder.git/blobdiff - source/lib/binarycomponent.cpp
Install headers of non-installed components in a staging directory
[builder.git] / source / lib / binarycomponent.cpp
index d29673a73761e72420dc398cae16044c435fd942..c626536a2317622a1ebffdac3a3b6633921f7a0a 100644 (file)
@@ -95,7 +95,7 @@ void BinaryComponent::create_targets() const
                                if(tool->accepts_suffix(ext))
                                {
                                        t = &dynamic_cast<FileTarget &>(*tool->create_target(*t));
-                                       if(type==LIBRARY && install)
+                                       if(type==LIBRARY)
                                                create_install(*t);
                                }
                        }
@@ -106,17 +106,20 @@ void BinaryComponent::create_targets() const
                        vector<Target *> group = extract_group(pending, *tool);
                        FileTarget &tgt = dynamic_cast<FileTarget &>(*tool->create_target(group));
                        pending.push_back(&tgt);
-                       if(type==LIBRARY && install)
+                       if(type==LIBRARY)
                                create_install(tgt);
                }
        }
 
        vector<Target *> results;
-       results.reserve(2);
+       results.reserve(3);
        if(type==LIBRARY)
        {
                Tool &archiver = toolchain.get_tool("AR");
-               results.push_back(linker.create_target(objs, "shared"));
+               Target *shlib = linker.create_target(objs, "shared");
+               results.push_back(shlib);
+               if(Target *imp = linker.create_target(*shlib, "import"))
+                       results.push_back(imp);
                results.push_back(archiver.create_target(objs));
        }
        else if(type==MODULE)
@@ -156,7 +159,7 @@ vector<FileTarget *> BinaryComponent::create_sources() const
                if(FileTarget *file = dynamic_cast<FileTarget *>(src))
                {
                        targets.push_back(file);
-                       if(type==LIBRARY && install)
+                       if(type==LIBRARY)
                                create_install(*file);
                }
        }
@@ -190,13 +193,14 @@ vector<Target *> BinaryComponent::extract_group(vector<FileTarget *> &targets, c
 void BinaryComponent::create_install(FileTarget &target) const
 {
        BuildGraph &build_graph = package.get_builder().get_build_graph();
+       auto add_func = (install ? &BuildGraph::add_installed_target : &BuildGraph::add_staged_target);
 
        if(target.is_installable())
-               build_graph.add_installed_target(target);
+               (build_graph.*add_func)(target);
 
        for(Target *s: target.get_side_effects())
                if(dynamic_cast<FileTarget &>(*s).is_installable())
-                       build_graph.add_installed_target(*s);
+                       (build_graph.*add_func)(*s);
 }