diff options
37 files changed, 354 insertions, 436 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 431ff2d..f75c17f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -18,7 +18,6 @@ jobs: meson \ gcovr \ gi-docgen \ - libpeas-dev \ gsettings-desktop-schemas-dev \ libcurl4-openssl-dev \ valac @@ -48,7 +47,7 @@ jobs: - name: Setup run: | pip install meson ninja - brew install libsoup icu4c gobject-introspection duktape gcovr gi-docgen libpeas curl vala + brew install libsoup icu4c gobject-introspection duktape gcovr gi-docgen curl vala echo 'PKG_CONFIG_PATH=/usr/local/opt/icu4c/lib/pkgconfig:/usr/local/opt/gi-docgen/lib/pkgconfig' >> $GITHUB_ENV - name: Build and Test run: | @@ -79,7 +78,6 @@ jobs: mingw-w64-x86_64-duktape mingw-w64-x86_64-gi-docgen mingw-w64-x86_64-libsoup3 - mingw-w64-x86_64-libpeas mingw-w64-x86_64-curl mingw-w64-x86_64-vala - uses: actions/checkout@v3 diff --git a/.github/workflows/coverity.yml b/.github/workflows/coverity.yml index 15f1570..b3a9e9b 100644 --- a/.github/workflows/coverity.yml +++ b/.github/workflows/coverity.yml @@ -36,7 +36,6 @@ jobs: meson \ gcovr \ gi-docgen \ - libpeas-dev \ gsettings-desktop-schemas-dev \ libcurl4-openssl-dev \ valac diff --git a/docs/build-steps.md b/docs/build-steps.md index f0ac5df..2590c4e 100644 --- a/docs/build-steps.md +++ b/docs/build-steps.md @@ -8,7 +8,7 @@ Slug: building ### Dependencies ``` -sudo dnf install glib2-devel duktape-devel libsoup3-devel meson gcovr gi-docgen libpeas-devel libcurl-devel vala gsettings-desktop-schemas-devel gobject-introspection-devel +sudo dnf install glib2-devel duktape-devel libsoup3-devel meson gcovr gi-docgen libcurl-devel vala gsettings-desktop-schemas-devel gobject-introspection-devel ``` ### Build Setup @@ -35,7 +35,7 @@ ninja -C build install ``` pip install meson ninja -brew install libsoup icu4c gobject-introspection duktape gcovr gi-docgen libpeas curl vala +brew install libsoup icu4c gobject-introspection duktape gcovr gi-docgen curl vala ``` ### Build Setup @@ -61,7 +61,7 @@ ninja -C build install ### Dependencies ``` -pacman -S base-devel git mingw-w64-x86_64-toolchain mingw-w64-x86_64-ccache mingw-w64-x86_64-pkg-config mingw-w64-x86_64-gobject-introspection mingw-w64-x86_64-python-gobject mingw-w64-x86_64-meson mingw-w64-x86_64-glib mingw-w64-x86_64-duktape mingw-w64-x86_64-gi-docgen mingw-w64-x86_64-libsoup3 mingw-w64-x86_64-libpeas mingw-w64-x86_64-curl mingw-w64-x86_64-vala +pacman -S base-devel git mingw-w64-x86_64-toolchain mingw-w64-x86_64-ccache mingw-w64-x86_64-pkg-config mingw-w64-x86_64-gobject-introspection mingw-w64-x86_64-python-gobject mingw-w64-x86_64-meson mingw-w64-x86_64-glib mingw-w64-x86_64-duktape mingw-w64-x86_64-gi-docgen mingw-w64-x86_64-libsoup3 mingw-w64-x86_64-curl mingw-w64-x86_64-vala ``` ### Build Setup diff --git a/docs/px.toml.in b/docs/px.toml.in index 2476126..8cab536 100644 --- a/docs/px.toml.in +++ b/docs/px.toml.in @@ -11,7 +11,6 @@ dependencies = [ "GObject-2.0", "Gio-2.0", "GLib-2.0", - "Peas-1.0", "Soup-3.0", "curl-1.0", ] @@ -33,11 +32,6 @@ name = "GLib" description = "The base utility library" docs_url = "https://developer.gnome.org/glib/stable" -[dependencies."Peas-1.0"] -name = "Peas" -description = "GObject-based plugins engine" -docs_url = "https://gnome.pages.gitlab.gnome.org/libpeas/libpeas-1.0/" - [dependencies."Soup-3.0"] name = "Soup" description = "HTTP client/server library for GNOME" diff --git a/meson.build b/meson.build index 3543d12..f209f60 100644 --- a/meson.build +++ b/meson.build @@ -13,7 +13,6 @@ root_dir = include_directories('.') px_prefix = get_option('prefix') datadir = get_option('datadir') px_libdir = join_paths(px_prefix, get_option('libdir')) -px_plugins_dir = join_paths(px_libdir, meson.project_name().to_lower(), 'plugins') girdir = get_option('datadir') / 'gir-1.0' typelibdir = get_option('libdir') / 'girepository-1.0' vapidir = get_option('datadir') / 'vala' / 'vapi' @@ -96,17 +95,17 @@ if host_machine.system() == 'windows' _platforms = ['windows'] endif with_platform_windows = _platforms.contains('windows') +with_platform_darwin = ['darwin', 'ios'].contains(host_system) module_suffix = [] # Keep the autotools convention for shared module suffix because GModule # depends on it. -if ['darwin', 'ios'].contains(host_system) +if with_platform_darwin module_suffix = 'so' endif glib_dep = dependency('glib-2.0', version: '>= 2.71.3') gio_dep = dependency('gio-2.0', version: '>= 2.71.3') -peas_dep = dependency('libpeas-1.0') soup_dep = dependency('libsoup-3.0', required: get_option('tests')) curl_dep = dependency('libcurl', required: get_option('curl')) ws2_32_dep = cc.find_library('ws2_32', required : with_platform_windows) @@ -114,7 +113,6 @@ gsettings_desktop_schema = dependency('gsettings-desktop-schemas', required: get config_h = configuration_data() config_h.set_quoted('PACKAGE_VERSION', meson.project_version()) -config_h.set_quoted('PX_PLUGINS_DIR', px_plugins_dir) config_h.set('HAVE_CURL', get_option('curl')) configure_file(output: 'config.h', configuration: config_h) diff --git a/meson_options.txt b/meson_options.txt index b04ed96..9e3e9bd 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -16,49 +16,49 @@ option( 'config-env', type: 'boolean', value: true, - description: 'Whether to build plugin for environment configuration' + description: 'Whether to build support for environment configuration' ) option( 'config-gnome', type: 'boolean', value: true, - description: 'Whether to build plugin for GNOME configuration' + description: 'Whether to build support for GNOME configuration' ) option( 'config-windows', type: 'boolean', value: true, - description: 'Whether to build plugin for Windows configuration' + description: 'Whether to build support for Windows configuration' ) option( 'config-sysconfig', type: 'boolean', value: true, - description: 'Whether to build plugin for sysconfig configuration' + description: 'Whether to build support for sysconfig configuration' ) option( 'config-osx', type: 'boolean', value: true, - description: 'Whether to build plugin for OS X configuration' + description: 'Whether to build support for OS X configuration' ) option( 'config-kde', type: 'boolean', value: true, - description: 'Whether to build plugin for KDE System Settings' + description: 'Whether to build support for KDE System Settings' ) option( 'pacrunner-duktape', type: 'boolean', value: true, - description: 'Whether to build plugin for PAC Runner Duktape' + description: 'Whether to build support for PAC Runner Duktape' ) option( 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); diff --git a/tests/config-gnome-test.c b/tests/config-gnome-test.c index 71ddb28..f80914a 100644 --- a/tests/config-gnome-test.c +++ b/tests/config-gnome-test.c @@ -190,6 +190,8 @@ main (int argc, { g_test_init (&argc, &argv, NULL); + g_setenv ("XDG_CURRENT_DESKTOP", "GNOME", TRUE); + g_test_add ("/config/gnome/manual", Fixture, NULL, fixture_setup, test_config_gnome_manual, fixture_teardown); g_test_add ("/config/gnome/manual_auth", Fixture, NULL, fixture_setup, test_config_gnome_manual_auth, fixture_teardown); g_test_add ("/config/gnome/auto", Fixture, NULL, fixture_setup, test_config_gnome_auto, fixture_teardown); diff --git a/tests/config-kde-test.c b/tests/config-kde-test.c index c12d1f4..5129384 100644 --- a/tests/config-kde-test.c +++ b/tests/config-kde-test.c @@ -203,6 +203,8 @@ main (int argc, { g_test_init (&argc, &argv, NULL); + g_setenv ("XDG_CURRENT_DESKTOP", "KDE", TRUE); + g_test_add_func ("/config/kde/disabled", test_config_kde_disabled); g_test_add_func ("/config/kde/manual", test_config_kde_manual); g_test_add_func ("/config/kde/wpad", test_config_kde_wpad); diff --git a/tests/config-osx-test.c b/tests/config-osx-test.c new file mode 100644 index 0000000..cdb8a72 --- /dev/null +++ b/tests/config-osx-test.c @@ -0,0 +1,52 @@ +/* config-osx-test.c + * + * Copyright 2022-2023 The Libproxy Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * SPDX-License-Identifier: LGPL-2.1-or-later + */ + +#include "px-manager.h" + +#include "px-manager-helper.h" + +static void +test_config_osx (void) +{ + g_autoptr (GError) error = NULL; + g_autoptr (PxManager) manager = NULL; + g_autoptr (GUri) uri = NULL; + g_auto (GStrv) config = NULL; + + manager = px_test_manager_new ("config-osx", NULL); + g_clear_error (&error); + + uri = g_uri_parse ("https://www.example.com", G_URI_FLAGS_PARSE_RELAXED, &error); + config = px_manager_get_configuration (manager, uri, &error); + g_assert_nonnull (config); + g_assert_null (config[0]); +} + +int +main (int argc, + char **argv) +{ + g_test_init (&argc, &argv, NULL); + + g_test_add_func ("/config/osx", test_config_osx); + + return g_test_run (); +} diff --git a/tests/config-windows-test.c b/tests/config-windows-test.c new file mode 100644 index 0000000..10d4b21 --- /dev/null +++ b/tests/config-windows-test.c @@ -0,0 +1,52 @@ +/* config-windows-test.c + * + * Copyright 2022-2023 The Libproxy Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * SPDX-License-Identifier: LGPL-2.1-or-later + */ + +#include "px-manager.h" + +#include "px-manager-helper.h" + +static void +test_config_windows (void) +{ + g_autoptr (GError) error = NULL; + g_autoptr (PxManager) manager = NULL; + g_autoptr (GUri) uri = NULL; + g_auto (GStrv) config = NULL; + + manager = px_test_manager_new ("config-windows", NULL); + g_clear_error (&error); + + uri = g_uri_parse ("https://www.example.com", G_URI_FLAGS_PARSE_RELAXED, &error); + config = px_manager_get_configuration (manager, uri, &error); + g_assert_nonnull (config); + g_assert_nonnull (config[0]); +} + +int +main (int argc, + char **argv) +{ + g_test_init (&argc, &argv, NULL); + + g_test_add_func ("/config/windows", test_config_windows); + + return g_test_run (); +} diff --git a/tests/meson.build b/tests/meson.build index b5ca084..4ae8e7d 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -76,4 +76,28 @@ if get_option('tests') env: [envs, 'XDG_CURRENT_DESKTOP=KDE'], ) endif + + if get_option('config-osx') and with_platform_darwin + config_osx_test = executable('test-config-osx', + ['config-osx-test.c', 'px-manager-helper.c'], + include_directories: px_backend_inc, + dependencies: [glib_dep, px_backend_dep], + ) + test('Config OSX test', + config_osx_test, + env: [envs], + ) + endif + + if get_option('config-windows') and with_platform_windows + config_windows_test = executable('test-config-windows', + ['config-windows-test.c', 'px-manager-helper.c'], + include_directories: px_backend_inc, + dependencies: [glib_dep, px_backend_dep], + ) + test('Config Windows test', + config_windows_test, + env: [envs], + ) + endif endif diff --git a/tests/px-manager-helper.c b/tests/px-manager-helper.c index c5e0b87..e3129a2 100644 --- a/tests/px-manager-helper.c +++ b/tests/px-manager-helper.c @@ -25,10 +25,7 @@ PxManager * px_test_manager_new (const char *config_plugin, const char *config_option) { - g_autofree char *path = g_test_build_filename (G_TEST_BUILT, "../src/backend/plugins", NULL); - - return px_manager_new_with_options ("plugins-dir", path, - "config-plugin", config_plugin, + return px_manager_new_with_options ("config-plugin", config_plugin, "config-option", config_option, NULL); } |