X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcomponent.cpp;h=feb5094b27a071fa8823eabd4e09c2fae466a11d;hb=62ad932589407842cc1026af6e6d9f4012e60c67;hp=4a889cb1750903209638a2cb2b8d8b3945847793;hpb=150d82f46dd34a00cdc59c69c641af2c635239d8;p=builder.git diff --git a/source/component.cpp b/source/component.cpp index 4a889cb..feb5094 100644 --- a/source/component.cpp +++ b/source/component.cpp @@ -190,6 +190,24 @@ void Component::create_targets() const else results.push_back(linker.create_target(objs)); + const Target::Dependencies &world_deps = builder.get_target("world")->get_dependencies(); + for(UseList::const_iterator i=uses.begin(); i!=uses.end(); ++i) + { + /* The world target depends on all primary targets; look for the + static library belonging to the component. This is a bit roundabout + way but gets the job done. */ + bool found = false; + for(Target::Dependencies::const_iterator j=world_deps.begin(); j!=world_deps.end(); ++j) + if((*j)->get_component()==*i && dynamic_cast(*j)) + { + results.front()->add_dependency(**j); + found = true; + break; + } + if(!found) + builder.problem(package.get_name(), format("Can't find static library %s for component %s", (*i)->get_name(), name)); + } + for(list::const_iterator i=results.begin(); i!=results.end(); ++i) { builder.add_primary_target(**i); @@ -237,6 +255,7 @@ Component::Loader::Loader(Component &c): add("build_info", &Loader::build_info); add("require", &Loader::require); add("default", &Component::deflt); + add("use", &Loader::use); } void Component::Loader::source(const string &s) @@ -260,3 +279,15 @@ void Component::Loader::install_map() { load_sub(obj.install_map, obj.package.get_source_directory()); } + +void Component::Loader::use(const string &n) +{ + const SourcePackage::ComponentList &components = obj.package.get_components(); + for(SourcePackage::ComponentList::const_iterator i=components.begin(); i!=components.end(); ++i) + if(i->get_name()==n && i->get_type()==LIBRARY) + { + obj.uses.push_back(&*i); + return; + } + error(format("Unknown library component '%s'", n)); +}