-#ifndef BUILDER_H_
-#define BUILDER_H_
-
-#include <list>
-#include <map>
-#include <string>
-#include <msp/core/application.h>
-#include <msp/datafile/loader.h>
-#include <msp/fs/path.h>
-#include "architecture.h"
-#include "buildtype.h"
-#include "config.h"
-#include "logger.h"
-#include "misc.h"
-#include "packagemanager.h"
-#include "problem.h"
-#include "target.h"
-#include "toolchain.h"
-#include "virtualfilesystem.h"
-
-class Analyzer;
-class FileTarget;
-class Package;
-class SourcePackage;
-
-/**
-The main application class. Handles command line options and supervises the
-build process.
-*/
-class Builder: public Msp::RegisteredApplication<Builder>
-{
-private:
- class Loader: public Msp::DataFile::ObjectLoader<Builder>
- {
- public:
- Loader(Builder &);
- private:
- void architecture(const std::string &);
- void binpkg(const std::string &);
- void build_type(const std::string &);
- void profile(const std::string &);
- void package(const std::string &);
- };
-
-public:
- typedef std::map<std::string, Target *> TargetMap;
-
-private:
- typedef std::map<std::string, BuildType> BuildTypeMap;
-
- StringList cmdline_targets;
- Config::InputOptions cmdline_options;
- Msp::FS::Path cwd;
-
- PackageManager package_manager;
- SourcePackage *main_pkg;
-
- TargetMap targets;
-
- Architecture native_arch;
- Architecture *current_arch;
- BuildTypeMap build_types;
- BuildType *build_type;
- Toolchain toolchain;
- VirtualFileSystem vfs;
- Logger logger;
-
- ProblemList problems;
- Analyzer *analyzer;
- bool build;
- unsigned clean;
- bool dry_run;
- bool help;
- bool show_progress;
- std::string build_file;
- unsigned jobs;
- StringList what_if;
- bool conf_all;
- bool conf_only;
- bool build_all;
- bool create_makefile;
- Msp::FS::Path prefix;
- Msp::FS::Path tempdir;
-
- static std::string usagemsg;
- static std::string helpmsg;
-
-public:
- Builder(int, char **);
- ~Builder();
-
- int main();
-
- PackageManager &get_package_manager() { return package_manager; }
-
- /** Looks up a target by name. Returns 0 if no such target exists. */
- Target *get_target(const std::string &) const;
-
- const TargetMap &get_targets() const { return targets; }
-
- const Msp::FS::Path &get_work_directory() const { return cwd; }
- const Architecture &get_current_arch() const { return *current_arch; }
- const Architecture &get_native_arch() const { return native_arch; }
- const Msp::FS::Path &get_prefix() const { return prefix; }
- const Msp::FS::Path &get_temp_directory() const { return tempdir; }
-
- const Toolchain &get_toolchain() const { return toolchain; }
- VirtualFileSystem &get_vfs() { return vfs; }
- const Logger &get_logger() const { return logger; }
-
- /** Adds a target. It can later be retrieved by name. Called from Target
- constructor. */
- void add_target(Target *);
-
- /** Adds a target that is a primary build goal. Such targets will be added
- as dependencies of the "world" virtual target. If the target belongs to a
- default component of the main package, it's also added to the "default"
- virtual target. */
- void add_primary_target(Target &);
-
- void problem(const std::string &, const std::string &);
-
- static void usage(const char *, const char *, bool);
-
- /** Loads a build file. Returns 0 on success or -1 if the file could not be
- opened. */
- int load_build_file(const Msp::FS::Path &);
-
-private:
- /** Prepares packages and targets for building. Returns true if everything
- went ok, or false if something bad happened and a build shouldn't be
- attempted. */
- bool prepare_build();
-
- /** Supervises the build process, starting new tasks when slots become
- available. */
- int do_build();
-
- /** Cleans buildable targets. If clean is 1, cleans only the default
- package. If clean is 2 or greater, cleans all buildable packages.
- */
- int do_clean();
-
- int do_create_makefile();
-
- /** Prints out information about the default package. */
- void package_help();
-};
-
-#endif