if(tool->accepts_suffix(ext))
{
t = &dynamic_cast<FileTarget &>(*tool->create_target(*t));
- if(type==LIBRARY && install)
+ if(type==LIBRARY)
create_install(*t);
}
}
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)
if(FileTarget *file = dynamic_cast<FileTarget *>(src))
{
targets.push_back(file);
- if(type==LIBRARY && install)
+ if(type==LIBRARY)
create_install(*file);
}
}
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);
}