package_manager(*this),
main_pkg(0),
native_arch(*this, string()),
+ build_type(0),
vfs(*this),
analyzer(0),
build(false),
conf_all(false),
conf_only(false),
build_all(false),
- create_makefile(false)
+ create_makefile(false),
+ tempdir("temp")
{
string analyze_mode;
string work_dir;
unsigned max_depth = 5;
StringList cmdline_warn;
string prfx;
+ string temp_str;
string arch;
bool no_externals = false;
unsigned verbose = 1;
bool silent = false;
list<string> log_channels;
+ string build_type_name;
GetOpt getopt;
getopt.add_option('a', "analyze", analyze_mode, GetOpt::REQUIRED_ARG).set_help("Perform analysis. MODE can be deps, alldeps or rebuild.", "MODE");
getopt.add_option('l', "log", log_channels, GetOpt::REQUIRED_ARG).set_help("Set log channels to be displayed.", "LIST");
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('s', "silent", silent, GetOpt::NO_ARG).set_help("Don't print any messages other than errors.");
+ getopt.add_option('t', "build-type", build_type_name, GetOpt::REQUIRED_ARG).set_help("Set build type.", "TYPE");
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( "full-paths", full_paths, GetOpt::NO_ARG).set_help("Output full paths in analysis.");
getopt.add_option( "max-depth", max_depth, GetOpt::REQUIRED_ARG).set_help("Maximum depth to show in analysis.", "NUM");
getopt.add_option( "prefix", prfx, GetOpt::REQUIRED_ARG).set_help("Directory to install things to.", "DIR");
+ getopt.add_option( "tempdir", temp_str, GetOpt::REQUIRED_ARG).set_help("Store temporary files in DIR.", "DIR");
getopt.add_option( "warnings", cmdline_warn, GetOpt::REQUIRED_ARG).set_help("Compiler warnings to use.", "LIST");
usagemsg = getopt.generate_usage(argv[0])+" [<target> ...]";
helpmsg = getopt.generate_help();
else
prefix = FS::getcwd()/prfx;
+ if(!temp_str.empty())
+ tempdir = temp_str;
+
+ if(!build_type_name.empty())
+ {
+ BuildTypeMap::iterator i = build_types.find(build_type_name);
+ if(i==build_types.end())
+ throw usage_error("Unknown build type");
+ build_type = &i->second;
+ }
+
warnings.push_back("all");
warnings.push_back("extra");
warnings.push_back("shadow");
logger.log("environment", format("Building on %s, for %s%s", native_arch.get_name(),
current_arch->get_name(), (current_arch->is_native() ? " (native)" : "")));
logger.log("environment", format("Prefix is %s", prefix));
+ if(tempdir.is_absolute())
+ logger.log("environment", format("Temporary directory is %s", tempdir));
+ else
+ logger.log("environment", format("Using per-package temporary directory %s", tempdir));
+ if(build_type)
+ logger.log("environment", format("Build type is %s", build_type->get_name()));
const PackageManager::PackageMap &packages = package_manager.get_packages();
list<string> package_details;
return 0;
}
-void Builder::apply_profile_template(Config &config, const string &pt) const
-{
- vector<string> parts = split(pt, '-');
-
- for(vector<string>::iterator i=parts.begin(); i!=parts.end(); ++i)
- {
- ProfileTemplateMap::const_iterator j = profile_tmpl.find(*i);
- if(j==profile_tmpl.end())
- continue;
-
- config.update(j->second);
- }
-}
-
void Builder::problem(const string &p, const string &d)
{
problems.push_back(Problem(p, d));
{
add("architecture", &Loader::architecture);
add("binary_package", &Loader::binpkg);
+ add("build_type", &Loader::build_type);
add("profile", &Loader::profile);
add("package", &Loader::package);
}
load_sub(*pkg);
}
-void Builder::Loader::profile(const string &n)
+void Builder::Loader::build_type(const string &n)
+{
+ BuildType btype(n);
+ load_sub(btype);
+ BuildTypeMap::iterator i = obj.build_types.insert(BuildTypeMap::value_type(n, btype)).first;
+ if(!obj.build_type)
+ obj.build_type = &i->second;
+}
+
+void Builder::Loader::profile(const string &)
{
- StringMap prf;
- ProfileLoader ldr(prf);
- load_sub_with(ldr);
- obj.profile_tmpl.insert(ProfileTemplateMap::value_type(n, prf));
+ IO::print("Profiles are deprecated\n");
}
void Builder::Loader::package(const string &n)
if(!obj.main_pkg)
obj.main_pkg = pkg;
- load_sub(*pkg);
-}
-
-
-Builder::ProfileLoader::ProfileLoader(StringMap &p):
- profile(p)
-{
- add("option", &ProfileLoader::option);
-}
+ if(obj.conf_all || pkg==obj.main_pkg)
+ load_sub(*pkg, obj.cmdline_options);
+ else
+ load_sub(*pkg);
-void Builder::ProfileLoader::option(const string &o, const string &v)
-{
- profile.insert(StringMap::value_type(o, v));
+ if(obj.build_type)
+ pkg->set_build_type(*obj.build_type);
}