]> git.tdb.fi Git - builder.git/blobdiff - source/lib/builder.h
Allow new component types to be registered at runtime
[builder.git] / source / lib / builder.h
index 32d06a0be62f1d0515cdd30bf9538795bdd9277a..6dc29f098d2a22a714594c4dab1262de2a65df72 100644 (file)
@@ -12,6 +12,7 @@
 #include "config.h"
 #include "logger.h"
 #include "packagemanager.h"
+#include "sourcepackage.h"
 #include "target.h"
 #include "toolchain.h"
 #include "virtualfilesystem.h"
@@ -19,7 +20,6 @@
 class FileTarget;
 class Package;
 class Plugin;
-class SourcePackage;
 
 /**
 This class ties everything else together.  It also contains code for loading
@@ -59,6 +59,7 @@ private:
 
        std::vector<LoadedPlugin> plugins;
        PackageManager package_manager;
+       SourcePackage::ComponentRegistry component_registry;
 
        Architecture native_arch;
        Architecture *current_arch = 0;
@@ -82,6 +83,10 @@ public:
 
        void load_plugins();
        PackageManager &get_package_manager() { return package_manager; }
+       SourcePackage::ComponentRegistry &get_component_registry() { return component_registry; }
+
+       template<typename F>
+       void call_plugins(F) const;
 
        void set_architecture(const std::string &);
        const Architecture &get_current_arch() const { return *current_arch; }
@@ -125,4 +130,11 @@ public:
        int do_create_makefile();
 };
 
+template<typename F>
+void Builder::call_plugins(F func) const
+{
+       for(const LoadedPlugin &p: plugins)
+               func(*p.plugin);
+}
+
 #endif