// This Source Code Form is subject to the terms of the Mozilla Public // License, version 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at http://mozilla.org/MPL/2.0/. #pragma once #include #include #include #include #include #define weechat_plugin ::weechat::plugin::instance.get() namespace weechat { extern "C" { //__attribute__((visibility("default"))) int weechat_plugin_init(struct t_weechat_plugin *plugin, int argc, char *argv[]); int weechat_plugin_end(struct t_weechat_plugin *plugin); } typedef std::unique_ptr< struct t_weechat_plugin, std::function> plugin_ptr; class plugin : public plugin_ptr { public: plugin(); plugin(plugin_ptr ptr); plugin(struct t_weechat_plugin *ptr); inline std::string const& name() const { return this->m_name; } inline std::string const& version() const { return this->m_version; } bool init(std::vector args); bool end(); static plugin instance; private: std::string m_name; std::string m_version; }; }