]> git.tdb.fi Git - builder.git/commitdiff
Make it possible to use built-in plugins
authorMikko Rasa <tdb@tdb.fi>
Sun, 12 Mar 2023 11:20:27 +0000 (13:20 +0200)
committerMikko Rasa <tdb@tdb.fi>
Sun, 12 Mar 2023 11:20:27 +0000 (13:20 +0200)
plugins/android/androidplugin.cpp
plugins/base/baseplugin.cpp
plugins/clang/clangplugin.cpp
plugins/datafile/datafileplugin.cpp
plugins/gnu/gnuplugin.cpp
plugins/msvc/msvcplugin.cpp
source/lib/builder.cpp
source/lib/builder.h

index 5fc357e57bfb89d56c136b0e23fba264bcee2494..ecd4610046e1b5dbd3a1247e41448f81f46fe3c7 100644 (file)
@@ -18,6 +18,7 @@ void AndroidPlugin::add_tools(Toolchain &toolchain, const Architecture &arch) co
 }
 
 
+#ifdef ANDROIDTOOLS_BUILD
 #if defined(_WIN32)
 #define ANDROIDTOOLS_API __declspec(dllexport)
 #elif defined(__GNUC__)
@@ -31,3 +32,4 @@ ANDROIDTOOLS_API Plugin *create_plugin(Builder &builder)
 {
        return new AndroidPlugin(builder);
 }
+#endif
index 0da610ce8def2237e7e490730c8e8a683ea90bb8..0f05fa83fed5995e21f8d6858d94992b0a87bbad 100644 (file)
@@ -24,6 +24,7 @@ void BasePlugin::create_targets(SourcePackage &spkg) const
 }
 
 
+#ifdef BASETOOLS_BUILD
 #if defined(_WIN32)
 #define BASETOOLS_API __declspec(dllexport)
 #elif defined(__GNUC__)
@@ -37,3 +38,4 @@ BASETOOLS_API Plugin *create_plugin(Builder &builder)
 {
        return new BasePlugin(builder);
 }
+#endif
index 96a1df8c9fcd57c2691f7cf9a8de3f913295d192..b33c75692e28e29aa07674b6ae51a16096c3d923 100644 (file)
@@ -13,6 +13,7 @@ void ClangPlugin::add_tools(Toolchain &toolchain, const Architecture &arch) cons
 }
 
 
+#ifdef CLANGTOOLS_BUILD
 #if defined(_WIN32)
 #define CLANGTOOLS_API __declspec(dllexport)
 #elif defined(__GNUC__)
@@ -26,3 +27,4 @@ CLANGTOOLS_API Plugin *create_plugin(Builder &builder)
 {
        return new ClangPlugin(builder);
 }
+#endif
index 134ec0e18aaff4b596962b6d54555217320ceeb3..349e55b13140620e5f1ab9ab712254925cddd339 100644 (file)
@@ -15,6 +15,7 @@ void DataFilePlugin::add_tools(Toolchain &toolchain, const Architecture &) const
 }
 
 
+#ifdef DATATOOLS_BUILD
 #if defined(_WIN32)
 #define DATATOOLS_API __declspec(dllexport)
 #elif defined(__GNUC__)
@@ -28,3 +29,4 @@ DATATOOLS_API Plugin *create_plugin(Builder &builder)
 {
        return new DataFilePlugin(builder);
 }
+#endif
index db8c300eeb6598237e569e0863df0149552c2482..5a600aff1ad2b7bf3d30b991e15be35de2e50c6e 100644 (file)
@@ -7,6 +7,7 @@ void GnuPlugin::add_tools(Toolchain &toolchain, const Architecture &arch) const
 }
 
 
+#ifdef GNUTOOLS_BUILD
 #if defined(_WIN32)
 #define GNUTOOLS_API __declspec(dllexport)
 #elif defined(__GNUC__)
@@ -20,3 +21,4 @@ GNUTOOLS_API Plugin *create_plugin(Builder &builder)
 {
        return new GnuPlugin(builder);
 }
+#endif
index bf1e26e3ba33990f560a6aa1ea7caa3f3f755785..fdb0bf2a3c83ecf798369dd2b58abc1dcb7bd41e 100644 (file)
@@ -23,6 +23,7 @@ void MsvcPlugin::create_targets(SourcePackage &spkg) const
 }
 
 
+#ifdef MSVCTOOLS_BUILD
 #if defined(_WIN32)
 #define MSVCTOOLS_API __declspec(dllexport)
 #elif defined(__GNUC__)
@@ -36,3 +37,4 @@ MSVCTOOLS_API Plugin *create_plugin(Builder &builder)
 {
        return new MsvcPlugin(builder);
 }
+#endif
index 3379f2dcfebdea1e1f0d4533189d4480f71ba7ed..f979d28f38ce35c6f01976cc5109886f83b50ab7 100644 (file)
@@ -87,6 +87,11 @@ void Builder::load_plugins()
                }
        }
 
+       add_plugins(unordered_plugins);
+}
+
+void Builder::add_plugins(vector<LoadedPlugin> &unordered_plugins)
+{
        auto have_plugin = [this](const string &r){
                return any_of(plugins.begin(), plugins.end(), [&r](const LoadedPlugin &p){ return FS::basepart(FS::basename(p.path))==r; });
        };
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
 {