X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcomponent.cpp;h=e8fdd5806dfacd341a06b8bd2a1081b465bbf7c2;hb=HEAD;hp=0186f3e394c3debe464a1d888ad12594fb941f0b;hpb=d1f9551e05c9d341149eb490e05b1465d3d6b711;p=builder.git diff --git a/source/component.cpp b/source/component.cpp deleted file mode 100644 index 0186f3e..0000000 --- a/source/component.cpp +++ /dev/null @@ -1,185 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include "builder.h" -#include "component.h" -#include "sourcepackage.h" - -using namespace std; -using namespace Msp; - -Component::Component(SourcePackage &p, const string &n): - package(p), - name(n) -{ } - -void Component::prepare() -{ - for(Package *r: requires) - r->prepare(); -} - -void Component::create_build_info() -{ - BuildInfo final_build_info; - - const Package::Requirements &pkg_reqs = package.get_required_packages(); - Package::Requirements direct_reqs = requires; - direct_reqs.insert(direct_reqs.end(), pkg_reqs.begin(), pkg_reqs.end()); - for(Package *r: direct_reqs) - final_build_info.update_from(r->get_exported_build_info(), BuildInfo::DEPENDENCY); - - Package::Requirements all_reqs = direct_reqs; - deque queue(direct_reqs.begin(), direct_reqs.end()); - while(!queue.empty()) - { - Package *req = queue.front(); - queue.pop_front(); - - for(Package *r: req->get_required_packages()) - if(!any_equals(all_reqs, r)) - { - final_build_info.update_from(r->get_exported_build_info(), BuildInfo::CHAINED); - all_reqs.push_back(r); - queue.push_back(r); - } - } - - final_build_info.update_from(package.get_build_info()); - final_build_info.update_from(build_info); - build_info = final_build_info; - - for(FS::Path &p: build_info.incpath) - p = (package.get_source_directory()/p).str(); - for(FS::Path &p: build_info.libpath) - p = (package.get_source_directory()/p).str(); -} - -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); - string last = FS::basename(dir); - if(any_equals(overlays, last)) - dir = FS::dirname(dir); - - if(any_equals(sources, dir)) - { - binfo.local_incpath.push_back(dir); - for(const string &o: overlays) - binfo.local_incpath.push_back(dir/o); - } - } - return binfo; -} - -vector Component::collect_source_files() const -{ - vector files; - for(const FS::Path &p: sources) - { - if(FS::is_dir(p)) - { - vector dirs; - dirs.reserve(1+overlays.size()); - dirs.push_back(p); - for(const string &o: overlays) - { - FS::Path opath = p/o; - if(FS::is_dir(opath)) - dirs.push_back(opath); - } - set overlay_files; - for(auto j=dirs.begin(); j!=dirs.end(); ++j) - { - package.get_builder().get_logger().log("files", "Traversing %s", *j); - for(const string &f: list_files(*j)) - { - if(j!=dirs.begin()) - { - if(overlay_files.count(f)) - continue; - overlay_files.insert(f); - } - FS::Path fn = *j/f; - if(!FS::is_dir(fn)) - files.push_back(fn); - } - } - } - else - { - files.push_back(p); - for(const string &o: overlays) - { - FS::Path opath = FS::dirname(p)/o/FS::basename(p); - if(FS::is_reg(opath)) - files.push_back(opath); - } - } - } - - return files; -} - - -Component::Loader::Loader(Component &c): - DataFile::ObjectLoader(c), - ConditionalLoader(c.package, format("%s/%s", c.package.get_name(), c.name)) -{ - add("overlay", &Loader::overlay); - add("source", &Loader::source); - add("install", &Component::install); - add("install_map", &Loader::install_map); - add("build_info", &Loader::build_info); - add("require", &Loader::require); - add("default", &Component::deflt); -} - -void Component::Loader::build_info() -{ - load_sub(obj.build_info); -} - -void Component::Loader::install_map() -{ - load_sub(obj.install_map, obj.package.get_source_directory()); -} - -void Component::Loader::overlay(const string &o) -{ - obj.overlays.push_back(o); -} - -void Component::Loader::require(const string &n) -{ - Package *req = obj.package.get_builder().get_package_manager().find_package(n); - if(req) - obj.requires.push_back(req); - else - obj.problems.push_back(format("Required package %s not found", n)); -} - -void Component::Loader::source(const string &s) -{ - obj.sources.push_back((obj.package.get_source_directory()/s).str()); -}