X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Flib%2Fbuilder.h;fp=source%2Flib%2Fbuilder.h;h=e06cec34e73c6efbea21f1dee7a5839d15ef7e96;hb=c8e829c219c65ff8e93b6c7b66212ff0876441c5;hp=0000000000000000000000000000000000000000;hpb=e2c9c3fffcc61a0c102ccf6a7924e2de709092ad;p=builder.git diff --git a/source/lib/builder.h b/source/lib/builder.h new file mode 100644 index 0000000..e06cec3 --- /dev/null +++ b/source/lib/builder.h @@ -0,0 +1,113 @@ +#ifndef BUILDER_H_ +#define BUILDER_H_ + +#include +#include +#include +#include +#include "architecture.h" +#include "buildgraph.h" +#include "buildtype.h" +#include "config.h" +#include "logger.h" +#include "packagemanager.h" +#include "target.h" +#include "toolchain.h" +#include "virtualfilesystem.h" + +class FileTarget; +class Package; +class SourcePackage; + +/** +This class ties everything else together. It also contains code for loading +build files and supervising the build process. +*/ +class Builder +{ +private: + class Loader: public Msp::DataFile::ObjectLoader + { + private: + const Config::InputOptions *options; + bool conf_all; + + public: + Loader(Builder &, const Config::InputOptions * = 0, bool = false); + ~Loader(); + + private: + void architecture(const std::string &); + void binpkg(const std::string &); + void build_type(const std::string &); + void package(const std::string &); + }; + +private: + PackageManager package_manager; + + Architecture native_arch; + Architecture *current_arch = 0; + std::map build_types; + BuildType *build_type = 0; + Toolchain toolchain; + VirtualFileSystem vfs; + BuildGraph build_graph; + Logger default_logger; + const Logger *logger; + + bool auto_prefix = true; + Msp::FS::Path prefix; + Msp::FS::Path tempdir = "temp"; + + Loader *top_loader = 0; + +public: + Builder(); + ~Builder(); + + PackageManager &get_package_manager() { return package_manager; } + + void set_architecture(const std::string &); + const Architecture &get_current_arch() const { return *current_arch; } + const Architecture &get_native_arch() const { return native_arch; } + void set_build_type(const std::string &); + std::vector get_build_types() const; + const BuildType &get_build_type() const; + BuildGraph &get_build_graph() { return build_graph; } + void set_prefix(const Msp::FS::Path &); + void set_temp_directory(const Msp::FS::Path &); + const Msp::FS::Path &get_prefix() const { return prefix; } + const Msp::FS::Path &get_temp_directory() const { return tempdir; } + +private: + void update_auto_prefix(); + +public: + void add_default_tools(); + const Toolchain &get_toolchain() const { return toolchain; } + VirtualFileSystem &get_vfs() { return vfs; } + void set_logger(const Logger *); + const Logger &get_logger() const { return *logger; } + + std::vector collect_problems() const; + + /** Loads a build file. If opts is not null, it is used to configure any + packages loaded from this file. If all is true, external packages are also + configured. */ + void load_build_file(const Msp::FS::Path &, const Config::InputOptions *opts = 0, bool all = false); + + /** Saves package configuration and dependency caches. */ + void save_caches(); + + /** Builds the goal targets. The build graph must be prepared first. */ + int build(unsigned jobs = 1, bool dry_run = false, bool show_progress = false); + + /** Cleans buildable targets. If all is true, cleans all packages. + Otherwise cleans only the default package. */ + int clean(bool all = false, bool dry_run = false); + + int do_create_makefile(); +}; + +#endif