summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/meson.build16
-rw-r--r--src/backend/plugins/config-env/config-env.c13
-rw-r--r--src/backend/plugins/config-env/config-env.plugin3
-rw-r--r--src/backend/plugins/config-env/meson.build29
-rw-r--r--src/backend/plugins/config-gnome/config-gnome.c16
-rw-r--r--src/backend/plugins/config-gnome/config-gnome.plugin3
-rw-r--r--src/backend/plugins/config-gnome/meson.build29
-rw-r--r--src/backend/plugins/config-kde/config-kde.c16
-rw-r--r--src/backend/plugins/config-kde/config-kde.plugin3
-rw-r--r--src/backend/plugins/config-kde/meson.build29
-rw-r--r--src/backend/plugins/config-osx/config-osx.c18
-rw-r--r--src/backend/plugins/config-osx/config-osx.h5
-rw-r--r--src/backend/plugins/config-osx/config-osx.plugin3
-rw-r--r--src/backend/plugins/config-osx/meson.build39
-rw-r--r--src/backend/plugins/config-sysconfig/config-sysconfig.c13
-rw-r--r--src/backend/plugins/config-sysconfig/config-sysconfig.plugin3
-rw-r--r--src/backend/plugins/config-sysconfig/meson.build30
-rw-r--r--src/backend/plugins/config-windows/config-windows.c14
-rw-r--r--src/backend/plugins/config-windows/config-windows.plugin3
-rw-r--r--src/backend/plugins/config-windows/meson.build36
-rw-r--r--src/backend/plugins/pacrunner-duktape/meson.build32
-rw-r--r--src/backend/plugins/pacrunner-duktape/pacrunner-duktape.c11
-rw-r--r--src/backend/plugins/pacrunner-duktape/pacrunner-duktape.plugin3
-rw-r--r--src/backend/px-manager.c241
-rw-r--r--src/backend/px-plugin-config.h8
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);