diff options
| author | Jan-Michael Brummer <jan.brummer@tabos.org> | 2023-03-30 07:39:53 +0200 |
|---|---|---|
| committer | Jan-Michael Brummer <jan.brummer@tabos.org> | 2023-03-30 11:44:46 +0200 |
| commit | d1107667da6da04395ff72a78839cf07a2fe1aa9 (patch) | |
| tree | 50f2b0718c47f87133b33d3e13a49c5c08c9631b /src | |
| parent | 3604dc5aa5d623740263dd077f5b7d209cf1d486 (diff) | |
| download | libproxy-git-d1107667da6da04395ff72a78839cf07a2fe1aa9.tar.gz | |
Remove libpeas support
As we no longer have further dependencies like glib for accessing the
standard linux configurations and the other are platform specific. Let's
remove peas all together. Plugins are now built-in.
Diffstat (limited to 'src')
25 files changed, 208 insertions, 408 deletions
diff --git a/src/backend/meson.build b/src/backend/meson.build index b25453a..c8be5da 100644 --- a/src/backend/meson.build +++ b/src/backend/meson.build @@ -1,3 +1,13 @@ +backend_config_h = configuration_data() +backend_config_h.set('HAVE_CONFIG_ENV', get_option('config-env')) +backend_config_h.set('HAVE_CONFIG_GNOME', get_option('config-gnome')) +backend_config_h.set('HAVE_CONFIG_KDE', get_option('config-kde')) +backend_config_h.set('HAVE_CONFIG_OSX', get_option('config-osx') and with_platform_darwin) +backend_config_h.set('HAVE_CONFIG_SYSCONFIG', get_option('config-sysconfig')) +backend_config_h.set('HAVE_CONFIG_WINDOWS', get_option('config-windows') and with_platform_windows) +backend_config_h.set('HAVE_PACRUNNER_DUKTAPE', get_option('pacrunner-duktape')) +configure_file(output: 'px-backend-config.h', configuration: backend_config_h) + px_backend_sources = [ 'px-manager.c', 'px-manager.h', @@ -11,7 +21,7 @@ px_backend_deps = [ curl_dep, gio_dep, glib_dep, - peas_dep, + ws2_32_dep, ] px_backend_c_args = [ @@ -20,6 +30,8 @@ px_backend_c_args = [ px_backend_inc = include_directories('.') +subdir('plugins') + px_backend = shared_library( 'pxbackend-@0@'.format(api_version), px_backend_sources, @@ -33,5 +45,3 @@ px_backend_dep = declare_dependency( link_with: px_backend, dependencies: px_backend_deps ) - -subdir('plugins')
\ No newline at end of file diff --git a/src/backend/plugins/config-env/config-env.c b/src/backend/plugins/config-env/config-env.c index d7f5a73..6a326e0 100644 --- a/src/backend/plugins/config-env/config-env.c +++ b/src/backend/plugins/config-env/config-env.c @@ -19,7 +19,7 @@ * SPDX-License-Identifier: LGPL-2.1-or-later */ -#include <libpeas/peas.h> +#include <gio/gio.h> #include "config-env.h" @@ -27,7 +27,6 @@ #include "px-plugin-config.h" static void px_config_iface_init (PxConfigInterface *iface); -G_MODULE_EXPORT void peas_register_types (PeasObjectModule *module); struct _PxConfigEnv { GObject parent_instance; @@ -161,14 +160,8 @@ px_config_env_get_config (PxConfig *config, static void px_config_iface_init (PxConfigInterface *iface) { + iface->name = "config-env"; + iface->priority = PX_CONFIG_PRIORITY_FIRST; iface->is_available = px_config_env_is_available; iface->get_config = px_config_env_get_config; } - -G_MODULE_EXPORT void -peas_register_types (PeasObjectModule *module) -{ - peas_object_module_register_extension_type (module, - PX_TYPE_CONFIG, - PX_CONFIG_TYPE_ENV); -} diff --git a/src/backend/plugins/config-env/config-env.plugin b/src/backend/plugins/config-env/config-env.plugin deleted file mode 100644 index 2dfbdf3..0000000 --- a/src/backend/plugins/config-env/config-env.plugin +++ /dev/null @@ -1,3 +0,0 @@ -[Plugin] -Module=config-env -Name=Environment Variables
\ No newline at end of file diff --git a/src/backend/plugins/config-env/meson.build b/src/backend/plugins/config-env/meson.build index 471ecc0..00f3cc3 100644 --- a/src/backend/plugins/config-env/meson.build +++ b/src/backend/plugins/config-env/meson.build @@ -2,33 +2,8 @@ plugin_name = 'config-env' if get_option(plugin_name) -plugin_src = [ - '@0@.c'.format(plugin_name), +px_backend_sources += [ + 'plugins/@0@/@0@.c'.format(plugin_name), ] -plugin_data = [ - '@0@.plugin'.format(plugin_name), -] - -plugin_lib = shared_module( - plugin_name, - sources: plugin_src, - include_directories: px_backend_inc, - c_args: px_backend_c_args, - dependencies: [px_backend_dep], - install_dir: join_paths(px_plugins_dir, plugin_name), - install: true, - name_suffix: module_suffix, -) - -# Starting with Meson 0.64 this can be replaced with fs.copyfile -custom_target( - '@0@-data'.format(plugin_name), - input: plugin_data, - output: plugin_data, - command: ['cp', '@INPUT@', '@OUTDIR@'], - install_dir: join_paths(px_plugins_dir, plugin_name), - install: true, -) - endif
\ No newline at end of file diff --git a/src/backend/plugins/config-gnome/config-gnome.c b/src/backend/plugins/config-gnome/config-gnome.c index 426769c..29cb34a 100644 --- a/src/backend/plugins/config-gnome/config-gnome.c +++ b/src/backend/plugins/config-gnome/config-gnome.c @@ -19,7 +19,7 @@ * SPDX-License-Identifier: LGPL-2.1-or-later */ -#include <libpeas/peas.h> +#include <gio/gio.h> #include "config-gnome.h" @@ -43,7 +43,6 @@ typedef enum { } GnomeProxyMode; static void px_config_iface_init (PxConfigInterface *iface); -void peas_register_types (PeasObjectModule *module); G_DEFINE_FINAL_TYPE_WITH_CODE (PxConfigGnome, px_config_gnome, @@ -173,6 +172,9 @@ px_config_gnome_get_config (PxConfig *config, g_autofree char *proxy = NULL; GnomeProxyMode mode; + if (!self->available) + return; + if (px_manager_is_ignore (uri, g_settings_get_strv (self->proxy_settings, "ignore-hosts"))) return; @@ -235,14 +237,8 @@ px_config_gnome_get_config (PxConfig *config, static void px_config_iface_init (PxConfigInterface *iface) { + iface->name = "config-gnome"; + iface->priority = PX_CONFIG_PRIORITY_DEFAULT; iface->is_available = px_config_gnome_is_available; iface->get_config = px_config_gnome_get_config; } - -void -peas_register_types (PeasObjectModule *module) -{ - peas_object_module_register_extension_type (module, - PX_TYPE_CONFIG, - PX_CONFIG_TYPE_GNOME); -} diff --git a/src/backend/plugins/config-gnome/config-gnome.plugin b/src/backend/plugins/config-gnome/config-gnome.plugin deleted file mode 100644 index 5121ceb..0000000 --- a/src/backend/plugins/config-gnome/config-gnome.plugin +++ /dev/null @@ -1,3 +0,0 @@ -[Plugin] -Module=config-gnome -Name=GNOME Settings
\ No newline at end of file diff --git a/src/backend/plugins/config-gnome/meson.build b/src/backend/plugins/config-gnome/meson.build index 08acc1c..e6a9b20 100644 --- a/src/backend/plugins/config-gnome/meson.build +++ b/src/backend/plugins/config-gnome/meson.build @@ -2,33 +2,8 @@ plugin_name = 'config-gnome' if get_option(plugin_name) -plugin_src = [ - '@0@.c'.format(plugin_name), +px_backend_sources += [ + 'plugins/@0@/@0@.c'.format(plugin_name), ] -plugin_data = [ - '@0@.plugin'.format(plugin_name), -] - -plugin_lib = shared_module( - plugin_name, - plugin_src, - include_directories: px_backend_inc, - c_args: px_backend_c_args, - dependencies: [peas_dep, px_backend_dep], - install_dir: join_paths(px_plugins_dir, plugin_name), - install: true, - name_suffix: module_suffix, -) - -# Starting with Meson 0.64 this can be replaced with fs.copyfile -custom_target( - '@0@-data'.format(plugin_name), - input: plugin_data, - output: plugin_data, - command: ['cp', '@INPUT@', '@OUTDIR@'], - install_dir: join_paths(px_plugins_dir, plugin_name), - install: true, -) - endif
\ No newline at end of file diff --git a/src/backend/plugins/config-kde/config-kde.c b/src/backend/plugins/config-kde/config-kde.c index 56c83c0..d0e8ad8 100644 --- a/src/backend/plugins/config-kde/config-kde.c +++ b/src/backend/plugins/config-kde/config-kde.c @@ -19,7 +19,7 @@ * SPDX-License-Identifier: LGPL-2.1-or-later */ -#include <libpeas/peas.h> +#include <gio/gio.h> #include "config-kde.h" @@ -27,7 +27,6 @@ #include "px-manager.h" static void px_config_iface_init (PxConfigInterface *iface); -G_MODULE_EXPORT void peas_register_types (PeasObjectModule *module); typedef enum { KDE_PROXY_TYPE_NONE = 0, @@ -256,6 +255,9 @@ px_config_kde_get_config (PxConfig *config, const char *scheme = g_uri_get_scheme (uri); g_autofree char *proxy = NULL; + if (!self->available) + return; + if (!self->proxy_type) return; @@ -293,14 +295,8 @@ px_config_kde_get_config (PxConfig *config, static void px_config_iface_init (PxConfigInterface *iface) { + iface->name = "config-kde"; + iface->priority = PX_CONFIG_PRIORITY_DEFAULT; iface->is_available = px_config_kde_is_available; iface->get_config = px_config_kde_get_config; } - -G_MODULE_EXPORT void -peas_register_types (PeasObjectModule *module) -{ - peas_object_module_register_extension_type (module, - PX_TYPE_CONFIG, - PX_CONFIG_TYPE_KDE); -} diff --git a/src/backend/plugins/config-kde/config-kde.plugin b/src/backend/plugins/config-kde/config-kde.plugin deleted file mode 100644 index d03d2a8..0000000 --- a/src/backend/plugins/config-kde/config-kde.plugin +++ /dev/null @@ -1,3 +0,0 @@ -[Plugin] -Module=config-kde -Name=KDE
\ No newline at end of file diff --git a/src/backend/plugins/config-kde/meson.build b/src/backend/plugins/config-kde/meson.build index ef4adfe..b34d78d 100644 --- a/src/backend/plugins/config-kde/meson.build +++ b/src/backend/plugins/config-kde/meson.build @@ -2,33 +2,8 @@ plugin_name = 'config-kde' if get_option(plugin_name) -plugin_src = [ - '@0@.c'.format(plugin_name), +px_backend_sources += [ + 'plugins/@0@/@0@.c'.format(plugin_name), ] -plugin_data = [ - '@0@.plugin'.format(plugin_name), -] - -plugin_lib = shared_module( - plugin_name, - sources: plugin_src, - include_directories: px_backend_inc, - c_args: px_backend_c_args, - dependencies: [px_backend_dep], - install_dir: join_paths(px_plugins_dir, plugin_name), - install: true, - name_suffix: module_suffix, -) - -# Starting with Meson 0.64 this can be replaced with fs.copyfile -custom_target( - '@0@-data'.format(plugin_name), - input: plugin_data, - output: plugin_data, - command: ['cp', '@INPUT@', '@OUTDIR@'], - install_dir: join_paths(px_plugins_dir, plugin_name), - install: true, -) - endif
\ No newline at end of file diff --git a/src/backend/plugins/config-osx/config-osx.c b/src/backend/plugins/config-osx/config-osx.c index 8a9e6e4..16813a0 100644 --- a/src/backend/plugins/config-osx/config-osx.c +++ b/src/backend/plugins/config-osx/config-osx.c @@ -19,16 +19,20 @@ * SPDX-License-Identifier: LGPL-2.1-or-later */ -#include <libpeas/peas.h> #include <SystemConfiguration/SystemConfiguration.h> +#include <gio/gio.h> + #include "config-osx.h" #include "px-plugin-config.h" #include "px-manager.h" static void px_config_iface_init (PxConfigInterface *iface); -G_MODULE_EXPORT void peas_register_types (PeasObjectModule *module); + +struct _PxConfigOsX { + GObject parent_instance; +}; G_DEFINE_FINAL_TYPE_WITH_CODE (PxConfigOsX, px_config_osx, @@ -330,14 +334,8 @@ px_config_osx_get_config (PxConfig *self, static void px_config_iface_init (PxConfigInterface *iface) { + iface->name = "config-osx"; + iface->priority = PX_CONFIG_PRIORITY_DEFAULT; iface->is_available = px_config_osx_is_available; iface->get_config = px_config_osx_get_config; } - -G_MODULE_EXPORT void -peas_register_types (PeasObjectModule *module) -{ - peas_object_module_register_extension_type (module, - PX_TYPE_CONFIG, - PX_CONFIG_TYPE_OSX); -} diff --git a/src/backend/plugins/config-osx/config-osx.h b/src/backend/plugins/config-osx/config-osx.h index 544329f..797b51e 100644 --- a/src/backend/plugins/config-osx/config-osx.h +++ b/src/backend/plugins/config-osx/config-osx.h @@ -22,7 +22,6 @@ #pragma once #include <glib.h> -#include <libpeas/peas.h> G_BEGIN_DECLS @@ -30,10 +29,6 @@ G_BEGIN_DECLS G_DECLARE_FINAL_TYPE (PxConfigOsX, px_config_osx, PX, CONFIG_OSX, GObject) -struct _PxConfigOsX { - GObject parent_instance; -}; - G_END_DECLS diff --git a/src/backend/plugins/config-osx/config-osx.plugin b/src/backend/plugins/config-osx/config-osx.plugin deleted file mode 100644 index 61c4a2a..0000000 --- a/src/backend/plugins/config-osx/config-osx.plugin +++ /dev/null @@ -1,3 +0,0 @@ -[Plugin] -Module=config-osx -Name=OS X
\ No newline at end of file diff --git a/src/backend/plugins/config-osx/meson.build b/src/backend/plugins/config-osx/meson.build index eac98e8..f801d90 100644 --- a/src/backend/plugins/config-osx/meson.build +++ b/src/backend/plugins/config-osx/meson.build @@ -1,39 +1,16 @@ plugin_name = 'config-osx' -if host_machine.system() == 'darwin' +if get_option(plugin_name) and with_platform_darwin -if get_option(plugin_name) - -plugin_src = [ - '@0@.c'.format(plugin_name), +foundation_dep = dependency('Foundation') +system_configuration_dep = dependency('SystemConfiguration') +px_backend_deps += [ + foundation_dep, + system_configuration_dep, ] -plugin_data = [ - '@0@.plugin'.format(plugin_name), +px_backend_sources += [ + 'plugins/@0@/@0@.c'.format(plugin_name), ] -plugin_lib = shared_module( - plugin_name, - plugin_src, - include_directories: px_backend_inc, - c_args: px_backend_c_args, - dependencies: [px_backend_dep], - install_dir: join_paths(px_plugins_dir, plugin_name), - install: true, - name_suffix: module_suffix -) - -# Starting with Meson 0.64 this can be replaced with fs.copyfile -custom_target( - '@0@-data'.format(plugin_name), - input: plugin_data, - output: plugin_data, - command: ['cp', '@INPUT@', '@OUTDIR@'], - build_by_default: true, - install_dir: join_paths(px_plugins_dir, plugin_name), - install: true, -) - -endif - endif diff --git a/src/backend/plugins/config-sysconfig/config-sysconfig.c b/src/backend/plugins/config-sysconfig/config-sysconfig.c index 1adc1e8..c640f1c 100644 --- a/src/backend/plugins/config-sysconfig/config-sysconfig.c +++ b/src/backend/plugins/config-sysconfig/config-sysconfig.c @@ -19,7 +19,7 @@ * SPDX-License-Identifier: LGPL-2.1-or-later */ -#include <libpeas/peas.h> +#include <gio/gio.h> #include "config-sysconfig.h" @@ -41,7 +41,6 @@ struct _PxConfigSysConfig { }; static void px_config_iface_init (PxConfigInterface *iface); -G_MODULE_EXPORT void peas_register_types (PeasObjectModule *module); G_DEFINE_FINAL_TYPE_WITH_CODE (PxConfigSysConfig, px_config_sysconfig, @@ -246,14 +245,8 @@ px_config_sysconfig_get_config (PxConfig *config, static void px_config_iface_init (PxConfigInterface *iface) { + iface->name = "config-sysconfig"; + iface->priority = PX_CONFIG_PRIORITY_LAST; iface->is_available = px_config_sysconfig_is_available; iface->get_config = px_config_sysconfig_get_config; } - -G_MODULE_EXPORT void -peas_register_types (PeasObjectModule *module) -{ - peas_object_module_register_extension_type (module, - PX_TYPE_CONFIG, - PX_CONFIG_TYPE_SYSCONFIG); -} diff --git a/src/backend/plugins/config-sysconfig/config-sysconfig.plugin b/src/backend/plugins/config-sysconfig/config-sysconfig.plugin deleted file mode 100644 index 0697fa2..0000000 --- a/src/backend/plugins/config-sysconfig/config-sysconfig.plugin +++ /dev/null @@ -1,3 +0,0 @@ -[Plugin] -Module=config-sysconfig -Name=sysconfig
\ No newline at end of file diff --git a/src/backend/plugins/config-sysconfig/meson.build b/src/backend/plugins/config-sysconfig/meson.build index 1aef00b..6d6789b 100644 --- a/src/backend/plugins/config-sysconfig/meson.build +++ b/src/backend/plugins/config-sysconfig/meson.build @@ -2,34 +2,8 @@ plugin_name = 'config-sysconfig' if get_option(plugin_name) -plugin_src = [ - '@0@.c'.format(plugin_name), +px_backend_sources += [ + 'plugins/@0@/@0@.c'.format(plugin_name), ] -plugin_data = [ - '@0@.plugin'.format(plugin_name), -] - -plugin_lib = shared_module( - plugin_name, - plugin_src, - include_directories: px_backend_inc, - c_args: px_backend_c_args, - dependencies: [px_backend_dep], - install_dir: join_paths(px_plugins_dir, plugin_name), - install: true, - name_suffix: module_suffix, -) - -# Starting with Meson 0.64 this can be replaced with fs.copyfile -custom_target( - '@0@-data'.format(plugin_name), - input: plugin_data, - output: plugin_data, - command: ['cp', '@INPUT@', '@OUTDIR@'], - build_by_default: true, - install_dir: join_paths(px_plugins_dir, plugin_name), - install: true, -) - endif diff --git a/src/backend/plugins/config-windows/config-windows.c b/src/backend/plugins/config-windows/config-windows.c index 5bffde6..cc9c92d 100644 --- a/src/backend/plugins/config-windows/config-windows.c +++ b/src/backend/plugins/config-windows/config-windows.c @@ -21,7 +21,8 @@ #include <windows.h> #include <winreg.h> -#include <libpeas/peas.h> + +#include <gio/gio.h> #include "config-windows.h" @@ -38,7 +39,6 @@ struct _PxConfigWindows { }; static void px_config_iface_init (PxConfigInterface *iface); -void peas_register_types (PeasObjectModule *module); G_DEFINE_FINAL_TYPE_WITH_CODE (PxConfigWindows, px_config_windows, @@ -245,14 +245,8 @@ px_config_windows_get_config (PxConfig *self, static void px_config_iface_init (PxConfigInterface *iface) { + iface->name = "config-windows"; + iface->priority = PX_CONFIG_PRIORITY_DEFAULT; iface->is_available = px_config_windows_is_available; iface->get_config = px_config_windows_get_config; } - -G_MODULE_EXPORT void -peas_register_types (PeasObjectModule *module) -{ - peas_object_module_register_extension_type (module, - PX_TYPE_CONFIG, - PX_CONFIG_TYPE_WINDOWS); -} diff --git a/src/backend/plugins/config-windows/config-windows.plugin b/src/backend/plugins/config-windows/config-windows.plugin deleted file mode 100644 index 04a589b..0000000 --- a/src/backend/plugins/config-windows/config-windows.plugin +++ /dev/null @@ -1,3 +0,0 @@ -[Plugin] -Module=config-windows -Name=Windows
\ No newline at end of file diff --git a/src/backend/plugins/config-windows/meson.build b/src/backend/plugins/config-windows/meson.build index 2e592b5..302a33e 100644 --- a/src/backend/plugins/config-windows/meson.build +++ b/src/backend/plugins/config-windows/meson.build @@ -1,39 +1,9 @@ plugin_name = 'config-windows' -if host_machine.system() == 'windows' +if get_option(plugin_name) and with_platform_windows -if get_option(plugin_name) - -plugin_src = [ - '@0@.c'.format(plugin_name), -] - -plugin_data = [ - '@0@.plugin'.format(plugin_name), +px_backend_sources += [ + 'plugins/@0@/@0@.c'.format(plugin_name), ] -plugin_lib = shared_module( - plugin_name, - plugin_src, - include_directories: px_backend_inc, - c_args: px_backend_c_args, - dependencies: [px_backend_dep], - install_dir: join_paths(px_plugins_dir, plugin_name), - install: true, - name_suffix: module_suffix, -) - -# Starting with Meson 0.64 this can be replaced with fs.copyfile -custom_target( - '@0@-data'.format(plugin_name), - input: plugin_data, - output: plugin_data, - command: ['cp', '@INPUT@', '@OUTDIR@'], - build_by_default: true, - install_dir: join_paths(px_plugins_dir, plugin_name), - install: true, -) - -endif - endif
\ No newline at end of file diff --git a/src/backend/plugins/pacrunner-duktape/meson.build b/src/backend/plugins/pacrunner-duktape/meson.build index ef4a470..f391b6d 100644 --- a/src/backend/plugins/pacrunner-duktape/meson.build +++ b/src/backend/plugins/pacrunner-duktape/meson.build @@ -3,35 +3,15 @@ plugin_name = 'pacrunner-duktape' if get_option(plugin_name) duktape_dep = dependency('duktape') +m_dep = cc.find_library('m', required : false) -plugin_src = [ - '@0@.c'.format(plugin_name), +px_backend_sources += [ + 'plugins/@0@/@0@.c'.format(plugin_name), ] -plugin_data = [ - '@0@.plugin'.format(plugin_name), +px_backend_deps += [ + duktape_dep, + m_dep ] -plugin_lib = shared_module( - plugin_name, - plugin_src, - include_directories: px_backend_inc, - c_args: px_backend_c_args, - dependencies: [px_backend_dep, duktape_dep, ws2_32_dep], - install_dir: join_paths(px_plugins_dir, plugin_name), - install: true, - name_suffix: module_suffix, -) - -# Starting with Meson 0.64 this can be replaced with fs.copyfile -custom_target( - '@0@-data'.format(plugin_name), - input: plugin_data, - output: plugin_data, - command: ['cp', '@INPUT@', '@OUTDIR@'], - build_by_default: true, - install_dir: join_paths(px_plugins_dir, plugin_name), - install: true, -) - endif
\ No newline at end of file diff --git a/src/backend/plugins/pacrunner-duktape/pacrunner-duktape.c b/src/backend/plugins/pacrunner-duktape/pacrunner-duktape.c index 51c2592..3676e48 100644 --- a/src/backend/plugins/pacrunner-duktape/pacrunner-duktape.c +++ b/src/backend/plugins/pacrunner-duktape/pacrunner-duktape.c @@ -19,7 +19,7 @@ * SPDX-License-Identifier: LGPL-2.1-or-later */ -#include <libpeas/peas.h> +#include <gio/gio.h> #include <unistd.h> #ifdef __WIN32__ @@ -40,7 +40,6 @@ struct _PxPacRunnerDuktape { }; static void px_pacrunner_iface_init (PxPacRunnerInterface *iface); -void peas_register_types (PeasObjectModule *module); G_DEFINE_FINAL_TYPE_WITH_CODE (PxPacRunnerDuktape, px_pacrunner_duktape, @@ -200,11 +199,3 @@ px_pacrunner_iface_init (PxPacRunnerInterface *iface) iface->set_pac = px_pacrunner_duktape_set_pac; iface->run = px_pacrunner_duktape_run; } - -void -peas_register_types (PeasObjectModule *module) -{ - peas_object_module_register_extension_type (module, - PX_TYPE_PACRUNNER, - PX_PACRUNNER_TYPE_DUKTAPE); -} diff --git a/src/backend/plugins/pacrunner-duktape/pacrunner-duktape.plugin b/src/backend/plugins/pacrunner-duktape/pacrunner-duktape.plugin deleted file mode 100644 index efb10f0..0000000 --- a/src/backend/plugins/pacrunner-duktape/pacrunner-duktape.plugin +++ /dev/null @@ -1,3 +0,0 @@ -[Plugin] -Module=pacrunner-duktape -Name=Duktape
\ No newline at end of file diff --git a/src/backend/px-manager.c b/src/backend/px-manager.c index ecc477e..1eab303 100644 --- a/src/backend/px-manager.c +++ b/src/backend/px-manager.c @@ -20,19 +20,50 @@ */ #include "config.h" +#include "px-backend-config.h" + +#include <glib.h> +#include <glib-object.h> +#include <gio/gio.h> #include "px-manager.h" #include "px-plugin-config.h" #include "px-plugin-pacrunner.h" +#ifdef HAVE_CONFIG_ENV +#include <plugins/config-env/config-env.h> +#endif + +#ifdef HAVE_CONFIG_GNOME +#include <plugins/config-gnome/config-gnome.h> +#endif + +#ifdef HAVE_CONFIG_KDE +#include <plugins/config-kde/config-kde.h> +#endif + +#ifdef HAVE_CONFIG_OSX +#include <plugins/config-osx/config-osx.h> +#endif + +#ifdef HAVE_CONFIG_SYSCONFIG +#include <plugins/config-sysconfig/config-sysconfig.h> +#endif + +#ifdef HAVE_CONFIG_WINDOWS +#include <plugins/config-windows/config-windows.h> +#endif + +#ifdef HAVE_PACRUNNER_DUKTAPE +#include <plugins/pacrunner-duktape/pacrunner-duktape.h> +#endif + #ifdef HAVE_CURL #include <curl/curl.h> #endif -#include <libpeas/peas.h> enum { PROP_0, - PROP_PLUGINS_DIR, PROP_CONFIG_PLUGIN, PROP_CONFIG_OPTION, LAST_PROP @@ -48,14 +79,12 @@ static GParamSpec *obj_properties[LAST_PROP]; struct _PxManager { GObject parent_instance; - PeasEngine *engine; - PeasExtensionSet *config_set; - PeasExtensionSet *pacrunner_set; + GList *config_plugins; + GList *pacrunner_plugins; GNetworkMonitor *network_monitor; #ifdef HAVE_CURL CURL *curl; #endif - char *plugins_dir; char *config_plugin; char *config_option; @@ -85,11 +114,48 @@ px_manager_on_network_changed (GNetworkMonitor *monitor, g_clear_pointer (&self->pac_data, g_bytes_unref); } +static gint +config_order_compare (gconstpointer a, + gconstpointer b) +{ + PxConfig *config_a = (PxConfig *)a; + PxConfig *config_b = (PxConfig *)b; + PxConfigInterface *ifc_a = PX_CONFIG_GET_IFACE (config_a); + PxConfigInterface *ifc_b = PX_CONFIG_GET_IFACE (config_b); + + if (ifc_a->priority < ifc_b->priority) + return -1; + + if (ifc_a->priority == ifc_b->priority) + return 0; + + return 1; +} + +static void +px_manager_add_config_plugin (PxManager *self, + GType type) +{ + PxConfig *config = g_object_new (type, "config-option", self->config_option, NULL); + PxConfigInterface *ifc = PX_CONFIG_GET_IFACE (config); + + if (!self->config_plugin || g_strcmp0 (ifc->name, self->config_plugin) == 0) + self->config_plugins = g_list_insert_sorted (self->config_plugins, config, config_order_compare); +} + +static void +px_manager_add_pacrunner_plugin (PxManager *self, + GType type) +{ + PxPacRunner *pacrunner = g_object_new (type, NULL); + + self->pacrunner_plugins = g_list_append (self->pacrunner_plugins, pacrunner); +} + static void px_manager_constructed (GObject *object) { PxManager *self = PX_MANAGER (object); - const GList *list; if (g_getenv ("PX_DEBUG")) { const gchar *g_messages_debug; @@ -107,38 +173,37 @@ px_manager_constructed (GObject *object) } } - self->engine = peas_engine_get_default (); - - peas_engine_add_search_path (self->engine, self->plugins_dir, NULL); - - self->config_set = peas_extension_set_new (self->engine, PX_TYPE_CONFIG, "config-option", self->config_option, NULL); - self->pacrunner_set = peas_extension_set_new (self->engine, PX_TYPE_PACRUNNER, NULL); - - list = peas_engine_get_plugin_list (self->engine); - for (; list && list->data; list = list->next) { - PeasPluginInfo *info = PEAS_PLUGIN_INFO (list->data); - PeasExtension *extension = peas_extension_set_get_extension (self->config_set, info); - gboolean available = TRUE; - - /* In case user requested a specific module, just load that one */ - if (self->config_plugin && g_str_has_prefix (peas_plugin_info_get_module_name (info), "config-")) { - if (g_strcmp0 (peas_plugin_info_get_module_name (info), self->config_plugin) == 0) - peas_engine_load_plugin (self->engine, info); - } else { - peas_engine_load_plugin (self->engine, info); - } - - extension = peas_extension_set_get_extension (self->config_set, info); - if (extension) { - PxConfigInterface *ifc = PX_CONFIG_GET_IFACE (extension); +#ifdef HAVE_CONFIG_ENV + px_manager_add_config_plugin (self, PX_CONFIG_TYPE_ENV); +#endif +#ifdef HAVE_CONFIG_GNOME + px_manager_add_config_plugin (self, PX_CONFIG_TYPE_GNOME); +#endif +#ifdef HAVE_CONFIG_KDE + px_manager_add_config_plugin (self, PX_CONFIG_TYPE_KDE); +#endif +#ifdef HAVE_CONFIG_OSX + px_manager_add_config_plugin (self, PX_CONFIG_TYPE_OSX); +#endif +#ifdef HAVE_CONFIG_SYSCONFIG + px_manager_add_config_plugin (self, PX_CONFIG_TYPE_SYSCONFIG); +#endif +#ifdef HAVE_CONFIG_WINDOWS + px_manager_add_config_plugin (self, PX_CONFIG_TYPE_WINDOWS); +#endif - available = ifc->is_available (PX_CONFIG (extension)); - } + g_debug ("Active config plugins:\n"); + for (GList *list = self->config_plugins; list && list->data; list = list->next) { + PxConfig *config = list->data; + PxConfigInterface *ifc = PX_CONFIG_GET_IFACE (config); - if (!available) - peas_engine_unload_plugin (self->engine, info); + g_debug (" - %s\n", ifc->name); } +#ifdef HAVE_PACRUNNER_DUKTAPE + px_manager_add_pacrunner_plugin (self, PX_PACRUNNER_TYPE_DUKTAPE); +#endif + self->pac_data = NULL; self->network_monitor = g_network_monitor_get_default (); @@ -151,19 +216,14 @@ static void px_manager_dispose (GObject *object) { PxManager *self = PX_MANAGER (object); - const GList *list; - list = peas_engine_get_plugin_list (self->engine); - for (; list && list->data; list = list->next) { - PeasPluginInfo *info = PEAS_PLUGIN_INFO (list->data); + for (GList *list = self->config_plugins; list && list->data; list = list->next) + g_clear_object (&list->data); - if (peas_plugin_info_is_loaded (info)) - peas_engine_unload_plugin (self->engine, info); - } + for (GList *list = self->pacrunner_plugins; list && list->data; list = list->next) + g_clear_object (&list->data); g_clear_pointer (&self->config_plugin, g_free); - g_clear_pointer (&self->plugins_dir, g_free); - g_clear_object (&self->engine); G_OBJECT_CLASS (px_manager_parent_class)->dispose (object); } @@ -177,9 +237,6 @@ px_manager_set_property (GObject *object, PxManager *self = PX_MANAGER (object); switch (prop_id) { - case PROP_PLUGINS_DIR: - self->plugins_dir = g_strdup (g_value_get_string (value)); - break; case PROP_CONFIG_PLUGIN: self->config_plugin = g_strdup (g_value_get_string (value)); break; @@ -198,8 +255,6 @@ px_manager_get_property (GObject *object, GParamSpec *pspec) { switch (prop_id) { - case PROP_PLUGINS_DIR: - break; case PROP_CONFIG_PLUGIN: break; default: @@ -218,12 +273,6 @@ px_manager_class_init (PxManagerClass *klass) object_class->set_property = px_manager_set_property; object_class->get_property = px_manager_get_property; - obj_properties[PROP_PLUGINS_DIR] = g_param_spec_string ("plugins-dir", - NULL, - NULL, - NULL, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS); - obj_properties[PROP_CONFIG_PLUGIN] = g_param_spec_string ("config-plugin", NULL, NULL, @@ -277,7 +326,7 @@ px_manager_new_with_options (const char *optname1, PxManager * px_manager_new (void) { - return px_manager_new_with_options ("plugins-dir", PX_PLUGINS_DIR, NULL); + return px_manager_new_with_options (NULL); } #ifdef HAVE_CURL @@ -345,29 +394,6 @@ px_manager_pac_download (PxManager *self, #endif } -struct ConfigData { - GStrvBuilder *builder; - GUri *uri; -}; - -/** - * Strategy: - * - Traverse through all plugins in extension set and ask for configuration data. - * - A plugin can either return the proxy server for given uri OR nothing! for direc access. - */ -static void -get_config (PeasExtensionSet *set, - PeasPluginInfo *info, - PeasExtension *extension, - gpointer data) -{ - PxConfigInterface *ifc = PX_CONFIG_GET_IFACE (extension); - struct ConfigData *config_data = data; - - g_debug ("%s: Asking plugin '%s' for configuration", __FUNCTION__, peas_plugin_info_get_module_name (info)); - ifc->get_config (PX_CONFIG (extension), config_data->uri, config_data->builder); -} - /** * px_manager_get_configuration: * @self: a px manager @@ -384,37 +410,31 @@ px_manager_get_configuration (PxManager *self, GError **error) { g_autoptr (GStrvBuilder) builder = g_strv_builder_new (); - struct ConfigData config_data = { - .uri = uri, - .builder = builder, - }; - peas_extension_set_foreach (self->config_set, get_config, &config_data); + for (GList *list = self->config_plugins; list && list->data; list = list->next) { + PxConfig *config = PX_CONFIG (list->data); + PxConfigInterface *ifc = PX_CONFIG_GET_IFACE (config); + + ifc->get_config (config, uri, builder); + } return g_strv_builder_end (builder); } -struct PacData { - GBytes *pac; - GUri *uri; - GStrvBuilder *builder; -}; - static void -px_manager_run_pac (PeasExtensionSet *set, - PeasPluginInfo *info, - PeasExtension *extension, - gpointer data) +px_manager_run_pac (PxPacRunner *pacrunner, + GBytes *pac, + GUri *uri, + GStrvBuilder *builder) { - PxPacRunnerInterface *ifc = PX_PAC_RUNNER_GET_IFACE (extension); - struct PacData *pac_data = data; + PxPacRunnerInterface *ifc = PX_PAC_RUNNER_GET_IFACE (pacrunner); g_auto (GStrv) proxies_split = NULL; char *pac_response; - if (!ifc->set_pac (PX_PAC_RUNNER (extension), pac_data->pac)) + if (!ifc->set_pac (PX_PAC_RUNNER (pacrunner), pac)) return; - pac_response = ifc->run (PX_PAC_RUNNER (extension), pac_data->uri); + pac_response = ifc->run (PX_PAC_RUNNER (pacrunner), uri); /* Split line to handle multiple proxies */ proxies_split = g_strsplit (pac_response, ";", -1); @@ -422,7 +442,7 @@ px_manager_run_pac (PeasExtensionSet *set, for (int idx = 0; idx < g_strv_length (proxies_split); idx++) { char *line = g_strstrip (proxies_split[idx]); g_auto (GStrv) word_split = g_strsplit (line, " ", -1); - g_autoptr (GUri) uri = NULL; + g_autoptr (GUri) proxy_uri = NULL; char *method; char *server; @@ -435,12 +455,12 @@ px_manager_run_pac (PeasExtensionSet *set, server = word_split[1]; uri_string = g_strconcat ("http://", server, NULL); - uri = g_uri_parse (uri_string, G_URI_FLAGS_PARSE_RELAXED, NULL); - if (!uri) + proxy_uri = g_uri_parse (uri_string, G_URI_FLAGS_PARSE_RELAXED, NULL); + if (!proxy_uri) continue; if (g_ascii_strncasecmp (method, "proxy", 5) == 0) { - proxy_string = g_uri_to_string (uri); + proxy_string = g_uri_to_string (proxy_uri); } else if (g_ascii_strncasecmp (method, "socks4a", 7) == 0) { proxy_string = g_strconcat ("socks4a://", server, NULL); } else if (g_ascii_strncasecmp (method, "socks4", 6) == 0) { @@ -451,10 +471,10 @@ px_manager_run_pac (PeasExtensionSet *set, proxy_string = g_strconcat ("socks://", server, NULL); } - px_strv_builder_add_proxy (pac_data->builder, proxy_string); + px_strv_builder_add_proxy (builder, proxy_string); } else { /* Syntax not found, returning direct */ - px_strv_builder_add_proxy (pac_data->builder, "direct://"); + px_strv_builder_add_proxy (builder, "direct://"); } } } @@ -562,12 +582,13 @@ px_manager_get_proxies_sync (PxManager *self, g_debug ("%s: Config[%d] = %s", __FUNCTION__, idx, config[idx]); if (px_manager_expand_wpad (self, conf_url) || px_manager_expand_pac (self, conf_url)) { - struct PacData pac_data = { - .pac = self->pac_data, - .uri = uri, - .builder = builder, - }; - peas_extension_set_foreach (self->pacrunner_set, px_manager_run_pac, &pac_data); + GList *list; + + for (list = self->pacrunner_plugins; list && list->data; list = list->next) { + PxPacRunner *pacrunner = PX_PAC_RUNNER (list->data); + + px_manager_run_pac (pacrunner, self->pac_data, uri, builder); + } } else if (!g_str_has_prefix (g_uri_get_scheme (conf_url), "wpad") && !g_str_has_prefix (g_uri_get_scheme (conf_url), "pac+")) { px_strv_builder_add_proxy (builder, g_uri_to_string (conf_url)); } diff --git a/src/backend/px-plugin-config.h b/src/backend/px-plugin-config.h index aac62a0..6958df6 100644 --- a/src/backend/px-plugin-config.h +++ b/src/backend/px-plugin-config.h @@ -29,9 +29,17 @@ G_BEGIN_DECLS G_DECLARE_INTERFACE (PxConfig, px_config, PX, CONFIG, GObject) +enum { + PX_CONFIG_PRIORITY_FIRST, + PX_CONFIG_PRIORITY_DEFAULT, + PX_CONFIG_PRIORITY_LAST, +}; + struct _PxConfigInterface { GTypeInterface parent_iface; + const char *name; + gint priority; gboolean (*is_available) (PxConfig *self); void (*get_config) (PxConfig *self, GUri *uri, GStrvBuilder *builder); |
