#include "gnucxxcompiler.h"
#include "gnulinker.h"
#include "installedfile.h"
+#include "mingwdlltool.h"
#include "package.h"
#include "pkgconfiggenerator.h"
#include "sharedlibrary.h"
string work_dir;
bool full_paths = false;
unsigned max_depth = 4;
- StringList cmdline_warn;
string prfx;
string temp_str;
string arch;
{
string::size_type equal = i->find('=');
if(equal!=string::npos)
- cmdline_options.insert(StringMap::value_type(i->substr(0, equal), i->substr(equal+1)));
+ cmdline_options.insert(Config::InputOptions::value_type(i->substr(0, equal), i->substr(equal+1)));
else
cmdline_targets.push_back(*i);
}
cwd = FS::getcwd();
+ package_manager.append_package_path(cwd);
+ package_manager.append_package_path(cwd/"..");
+ package_manager.append_binary_package_path(FS::get_sys_data_dir(argv[0], "builder"));
+
package_manager.set_no_externals(no_externals);
if(arch.empty())
else
current_arch = new Architecture(*this, arch);
- load_build_file((FS::get_sys_data_dir(argv[0], "builder")/"builderrc").str());
- load_build_file((FS::get_user_data_dir("builder")/"rc").str());
+ list<FS::Path> start_files;
+ start_files.push_back(FS::get_sys_data_dir(argv[0], "builder")/"builderrc");
+ start_files.push_back(FS::get_user_data_dir("builder")/"rc");
+ for(list<FS::Path>::const_iterator i=start_files.begin(); i!=start_files.end(); ++i)
+ if(FS::exists(*i))
+ load_build_file(*i);
if(prfx.empty())
{
toolchain.add_tool(new Copy(*this));
toolchain.add_tool(new Tar(*this));
toolchain.add_tool(new PkgConfigGenerator(*this));
+ if(current_arch->get_system()=="windows")
+ toolchain.add_tool(new MingwDllTool(*this, *current_arch));
}
Builder::~Builder()
int Builder::main()
{
- if(load_build_file(cwd/build_file))
+ FS::Path main_file = cwd/build_file;
+ if(!FS::exists(main_file))
{
if(help)
{
}
else
{
- IO::print(IO::cerr, "No build info here.\n");
+ IO::print(IO::cerr, "The file %s does not exist.\n", main_file);
return 1;
}
}
+ load_build_file(main_file);
+
if(help)
{
usage(0, "builder", false);
list<string> package_details;
for(PackageManager::PackageMap::const_iterator i=packages.begin(); i!=packages.end(); ++i)
{
- if(!i->second || !i->second->is_prepared())
+ if(!i->second->is_prepared())
continue;
string line = i->second->get_name();
get_target("default")->add_dependency(t);
}
+void Builder::add_installed_target(Target &t)
+{
+ Target *inst_tgt = 0;
+ if(const Tool *tool = t.get_tool())
+ inst_tgt = tool->create_install(t);
+ if(!inst_tgt)
+ inst_tgt = toolchain.get_tool("CP").create_target(t);
+ get_target("install")->add_dependency(*inst_tgt);
+}
+
void Builder::usage(const char *reason, const char *argv0, bool brief)
{
if(reason)
}
}
-int Builder::load_build_file(const FS::Path &fn)
+void Builder::load_build_file(const FS::Path &fn)
{
- if(!FS::exists(fn))
- return -1;
-
IO::BufferedFile in(fn.str());
logger.log("files", format("Reading %s", fn));
DataFile::Parser parser(in, fn.str());
Loader loader(*this);
loader.load(parser);
-
- return 0;
}
bool Builder::prepare_build()
// Make the cmdline target depend on all targets mentioned on the command line
Target *cmdline = new VirtualTarget(*this, "cmdline");
- for(list<string>::iterator i=cmdline_targets.begin(); i!=cmdline_targets.end(); ++i)
+ for(NameList::iterator i=cmdline_targets.begin(); i!=cmdline_targets.end(); ++i)
{
Target *tgt = get_target(*i);
if(!tgt)
cmdline->prepare();
// Apply what-ifs
- for(StringList::iterator i=what_if.begin(); i!=what_if.end(); ++i)
+ for(NameList::iterator i=what_if.begin(); i!=what_if.end(); ++i)
{
FileTarget *tgt = vfs.get_target(cwd/ *i);
if(!tgt)
const Config::OptionMap &options = config.get_options();
IO::print("Required packages:\n ");
- const PackageList &requires = main_pkg->get_required_packages();
- for(PackageList::const_iterator i=requires.begin(); i!=requires.end(); ++i)
+ const Package::Requirements &requires = main_pkg->get_required_packages();
+ for(Package::Requirements::const_iterator i=requires.begin(); i!=requires.end(); ++i)
{
if(i!=requires.begin())
IO::print(", ");