]> git.tdb.fi Git - builder.git/blobdiff - source/lib/builder.h
Make it possible to use built-in plugins
[builder.git] / source / lib / builder.h
index d9a942b4f65000d4b4eec7071a95e6658271f792..8ab0f941f8c482774d38d1f8aecd4b86b1234d43 100644 (file)
@@ -83,6 +83,14 @@ public:
        ~Builder();
 
        void load_plugins();
+
+       template<typename... T>
+       void load_plugins();
+
+private:
+       void add_plugins(std::vector<LoadedPlugin> &);
+
+public:
        PackageManager &get_package_manager() { return package_manager; }
        SourcePackage::ComponentRegistry &get_component_registry() { return component_registry; }
 
@@ -134,6 +142,20 @@ public:
        int do_create_makefile();
 };
 
+template<typename... T>
+void Builder::load_plugins()
+{
+       Plugin *raw_plugins[] = { new T(*this)... };
+       std::vector<LoadedPlugin> pending_plugins;
+       for(Plugin *p: raw_plugins)
+       {
+               LoadedPlugin plugin;
+               plugin.plugin = p;
+               pending_plugins.emplace_back(std::move(plugin));
+       }
+       add_plugins(pending_plugins);
+}
+
 template<typename F>
 void Builder::call_plugins(F func) const
 {