]> 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 984522646b61ac335bd777ae8e1c1ef45d12a95a..8ab0f941f8c482774d38d1f8aecd4b86b1234d43 100644 (file)
@@ -54,6 +54,7 @@ private:
 
                LoadedPlugin() = default;
                LoadedPlugin(LoadedPlugin &&);
+               LoadedPlugin &operator=(LoadedPlugin &&);
                ~LoadedPlugin();
        };
 
@@ -82,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; }
 
@@ -133,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
 {