X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbuilder.cpp;h=3c58f0245ecc773fa4945a9f6c614409b94151c6;hb=409a427f912f9c203b102beed0816b53b250931f;hp=f08b27aec69d667ac2eef6d1fdcfa09bf83292c5;hpb=20994a6f4802f2dbcf01888d0e1996edf554ade5;p=builder.git diff --git a/source/builder.cpp b/source/builder.cpp index f08b27a..3c58f02 100644 --- a/source/builder.cpp +++ b/source/builder.cpp @@ -85,6 +85,7 @@ Builder::Builder(int argc, char **argv): getopt.add_option('j', "jobs", jobs, GetOpt::REQUIRED_ARG).set_help("Run NUM commands at once, whenever possible.", "NUM"); getopt.add_option('n', "dry-run", dry_run, GetOpt::NO_ARG).set_help("Don't actually do anything, only show what would be done."); getopt.add_option('v', "verbose", verbose, GetOpt::NO_ARG).set_help("Print more information about what's going on."); + getopt.add_option('x', "no-externals", no_externals, GetOpt::NO_ARG).set_help("Do not load external source packages."); getopt.add_option('A', "conf-all", conf_all, GetOpt::NO_ARG).set_help("Apply configuration to all packages."); getopt.add_option('B', "build-all", build_all, GetOpt::NO_ARG).set_help("Build all targets unconditionally."); getopt.add_option('C', "chdir", work_dir, GetOpt::REQUIRED_ARG).set_help("Change to DIR before doing anything else.", "DIR"); @@ -242,33 +243,42 @@ int Builder::main() return 0; } - if(!conf_only && create_targets()) - return 1; - - PackageList all_reqs = main_pkg->collect_requires(); - if(conf_only) return 0; + if(create_targets()) + return 1; + if(verbose>=2) { IO::print("Building on %s, for %s%s\n", native_arch.get_name(), current_arch->get_name(), (current_arch->is_native() ? " (native)" : "")); IO::print("Prefix is %s\n", prefix); } + if(verbose>=1) - IO::print("%d active packages, %d targets\n", all_reqs.size(), targets.size()); + { + unsigned n_packages = 0; + for(PackageMap::const_iterator i=packages.begin(); i!=packages.end(); ++i) + if(i->second && i->second->is_configured()) + ++n_packages; + IO::print("%d active packages, %d targets\n", n_packages, targets.size()); + } + if(verbose>=2) { - for(PackageList::const_iterator i=all_reqs.begin(); i!=all_reqs.end(); ++i) + for(PackageMap::const_iterator i=packages.begin(); i!=packages.end(); ++i) { - IO::print(" %s", (*i)->get_name()); - if(dynamic_cast(*i)) + if(!i->second->is_configured()) + continue; + + IO::print(" %s", i->second->get_name()); + if(dynamic_cast(i->second)) IO::print("*"); unsigned count = 0; unsigned to_be_built = 0; for(TargetMap::iterator j=targets.begin(); j!=targets.end(); ++j) - if(j->second->get_package()==*i) + if(j->second->get_package()==i->second) { ++count; if(j->second->get_rebuild()) @@ -340,12 +350,15 @@ Package *Builder::get_package(const string &name) if(i!=packages.end()) return i->second; - FS::Path path = get_package_location(name); - if(!path.empty() && !load_build_file(path/"Build")) + if(!no_externals) { - i = packages.find(name); - if(i!=packages.end()) - return i->second; + FS::Path path = get_package_location(name); + if(!path.empty() && !load_build_file(path/"Build")) + { + i = packages.find(name); + if(i!=packages.end()) + return i->second; + } } Package *pkg = 0; @@ -574,7 +587,7 @@ int Builder::load_build_file(const FS::Path &fn) Loader loader(*this, fn.subpath(0, fn.size()-1)); loader.load(parser); } - catch(const IO::FileNotFound &) + catch(const IO::file_not_found &) { return -1; } @@ -595,10 +608,12 @@ int Builder::create_targets() Target *tarballs = new VirtualTarget(*this, "tarballs"); world->add_depend(tarballs); - PackageList all_reqs = main_pkg->collect_requires(); - for(PackageList::iterator i=all_reqs.begin(); i!=all_reqs.end(); ++i) + for(PackageMap::const_iterator i=packages.begin(); i!=packages.end(); ++i) { - SourcePackage *spkg = dynamic_cast(*i); + if(!i->second || !i->second->is_configured()) + continue; + + SourcePackage *spkg = dynamic_cast(i->second); if(!spkg) continue; @@ -637,7 +652,6 @@ int Builder::create_targets() // Make the cmdline target depend on all targets mentioned on the command line Target *cmdline = new VirtualTarget(*this, "cmdline"); - bool build_world = false; for(list::iterator i=cmdline_targets.begin(); i!=cmdline_targets.end(); ++i) { Target *tgt = get_target(*i); @@ -648,8 +662,7 @@ int Builder::create_targets() IO::print("I don't know anything about %s\n", *i); return -1; } - if(tgt==world) - build_world = true; + cmdline->add_depend(tgt); } @@ -705,9 +718,7 @@ Target *Builder::get_library(const string &lib, const FS::Path &path, LibMode mo if(tgt) { - Target *real_tgt = tgt; - if(Install *inst = dynamic_cast(tgt)) - real_tgt = &inst->get_source(); + Target *real_tgt = tgt->get_real_target(); /* Ignore dynamic libraries from local packages unless library mode is DYNAMIC */ @@ -856,7 +867,6 @@ void Builder::package_help() } } -Application::RegApp Builder::reg; string Builder::usagemsg; string Builder::helpmsg;