X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcomponent.cpp;h=a63e3b05d371571af52888dce3b8a8a2f749138b;hb=70dc2ce96bd3ba878b60cbb61b2bcc1c5c570485;hp=23bd37417142235a7d13878f76f03a58a704d210;hpb=69cdee2c53972c1dd7e1b9d83ddcd8f6c3c589f7;p=builder.git diff --git a/source/component.cpp b/source/component.cpp index 23bd374..a63e3b0 100644 --- a/source/component.cpp +++ b/source/component.cpp @@ -38,6 +38,8 @@ void Component::prepare() void Component::create_build_info() { + BuildInfo final_build_info; + const PackageList &pkg_reqs = package.get_required_packages(); PackageList direct_reqs = requires; direct_reqs.insert(direct_reqs.end(), pkg_reqs.begin(), pkg_reqs.end()); @@ -48,7 +50,7 @@ void Component::create_build_info() BuildInfo::UpdateLevel level = BuildInfo::CHAINED; if(find(direct_reqs.begin(), direct_reqs.end(), *i)!=direct_reqs.end()) level = BuildInfo::DEPENDENCY; - build_info.update_from((*i)->get_exported_build_info(), level); + final_build_info.update_from((*i)->get_exported_build_info(), level); const PackageList &reqs = (*i)->get_required_packages(); for(PackageList::const_iterator j=reqs.begin(); j!=reqs.end(); ++j) @@ -56,13 +58,16 @@ void Component::create_build_info() all_reqs.push_back(*j); } - build_info.update_from(package.get_build_info()); + final_build_info.update_from(package.get_build_info()); for(BuildInfo::PathList::iterator i=build_info.incpath.begin(); i!=build_info.incpath.end(); ++i) *i = (package.get_source_directory() / *i).str(); for(BuildInfo::PathList::iterator i=build_info.libpath.begin(); i!=build_info.libpath.end(); ++i) *i = (package.get_source_directory() / *i).str(); + final_build_info.update_from(build_info); + build_info = final_build_info; + if(type==LIBRARY || type==MODULE) if(build_info.libmode inst_list; @@ -90,38 +93,33 @@ void Component::create_targets() const string inst_loc; if(type==TARBALL) { - //const Tool &tar = toolchain.get_tool("TAR"); - - string tarname = name; - if(name=="@src") - { - tarname = package.get_name()+"-"+package.get_version(); - source_filenames.push_back(package.get_source_directory()/"Build"); - } + const Tool &tar = toolchain.get_tool("TAR"); list files; for(PathList::const_iterator i=source_filenames.begin(); i!=source_filenames.end(); ++i) { FileTarget *file = builder.get_vfs().get_target(*i); if(!file) - file = new File(builder, *i); + file = new File(builder, package, *i); files.push_back(file); } + string tarname = name; if(name=="@src") { + tarname = package.get_name()+"-"+package.get_version(); + files.insert(files.begin(), &package.get_build_file()); + const Builder::TargetMap &targets = builder.get_targets(); for(Builder::TargetMap::const_iterator i=targets.begin(); i!=targets.end(); ++i) if(i->second->get_package()==&package && !i->second->is_buildable()) - files.push_back(i->second); + if(find(files.begin(), files.end(), i->second)==files.end()) + files.push_back(i->second); } - /* XXX The source files don't have a package at the moment, so we can't - create the tarball target until things get fixed up a bit */ - /*Target *result = tar.create_target(files, tarname); + Target *result = tar.create_target(files, tarname); - Target *tarballs_tgt = builder.get_target("tarballs"); - tarballs_tgt->add_dependency(*result);*/ + builder.get_target("tarballs")->add_dependency(*result); return; } @@ -149,10 +147,7 @@ void Component::create_targets() const source = new File(builder, package, source_filenames.front()); Target *result = dcomp.create_target(*source); - if(&package==builder.get_main_package() && deflt) - def_tgt->add_dependency(*result); - else - world->add_dependency(*result); + builder.add_primary_target(*result); if(install) inst_list.push_back(result); } @@ -167,13 +162,16 @@ void Component::create_targets() const if(tool) { Target *src = tool->create_source(*this, *i); + if(!src) + continue; + if(tool->accepts_suffix(ext)) { Target *obj = tool->create_target(*src); objs.push_back(obj); } - if(type==LIBRARY && install && !dynamic_cast(src)->get_install_location().empty()) + if(type==LIBRARY && install && dynamic_cast(src)->is_installable()) inst_list.push_back(src); } } @@ -194,10 +192,7 @@ void Component::create_targets() const for(list::const_iterator i=results.begin(); i!=results.end(); ++i) { - if(&package==builder.get_main_package() && deflt) - def_tgt->add_dependency(**i); - else - world->add_dependency(**i); + builder.add_primary_target(**i); if(install) inst_list.push_back(*i); }