X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flib%2Fbuilder.h;h=984522646b61ac335bd777ae8e1c1ef45d12a95a;hb=1df42c314669f30fe1d82f02fdfeeff19f92964e;hp=e06cec34e73c6efbea21f1dee7a5839d15ef7e96;hpb=c8e829c219c65ff8e93b6c7b66212ff0876441c5;p=builder.git diff --git a/source/lib/builder.h b/source/lib/builder.h index e06cec3..9845226 100644 --- a/source/lib/builder.h +++ b/source/lib/builder.h @@ -3,27 +3,29 @@ #include #include +#include #include #include #include "architecture.h" #include "buildgraph.h" #include "buildtype.h" #include "config.h" +#include "libbuilder_api.h" #include "logger.h" #include "packagemanager.h" +#include "sourcepackage.h" #include "target.h" #include "toolchain.h" #include "virtualfilesystem.h" -class FileTarget; class Package; -class SourcePackage; +class Plugin; /** This class ties everything else together. It also contains code for loading build files and supervising the build process. */ -class Builder +class LIBBUILDER_API Builder { private: class Loader: public Msp::DataFile::ObjectLoader @@ -44,7 +46,20 @@ private: }; private: + struct LoadedPlugin + { + Msp::FS::Path path; + Msp::Module *module = nullptr; + Plugin *plugin = nullptr; + + LoadedPlugin() = default; + LoadedPlugin(LoadedPlugin &&); + ~LoadedPlugin(); + }; + + std::vector plugins; PackageManager package_manager; + SourcePackage::ComponentRegistry component_registry; Architecture native_arch; Architecture *current_arch = 0; @@ -66,7 +81,12 @@ public: Builder(); ~Builder(); + void load_plugins(); PackageManager &get_package_manager() { return package_manager; } + SourcePackage::ComponentRegistry &get_component_registry() { return component_registry; } + + template + void call_plugins(F) const; void set_architecture(const std::string &); const Architecture &get_current_arch() const { return *current_arch; } @@ -91,7 +111,10 @@ public: const Logger &get_logger() const { return *logger; } std::vector collect_problems() const; +private: + void collect_broken_packages(const Package &, std::vector &) const; +public: /** 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. */ @@ -110,4 +133,11 @@ public: int do_create_makefile(); }; +template +void Builder::call_plugins(F func) const +{ + for(const LoadedPlugin &p: plugins) + func(*p.plugin); +} + #endif