diff options
Diffstat (limited to 'nixpkgs/pkgs/development/libraries/glib-networking')
3 files changed, 461 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/libraries/glib-networking/default.nix b/nixpkgs/pkgs/development/libraries/glib-networking/default.nix new file mode 100644 index 000000000000..35091bcbcfcd --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/glib-networking/default.nix @@ -0,0 +1,93 @@ +{ stdenv +, lib +, fetchurl +, substituteAll +, meson +, ninja +, nixosTests +, pkg-config +, glib +, gettext +, makeWrapper +, gnutls +, p11-kit +, libproxy +, gnome +, gsettings-desktop-schemas +, bash +}: + +stdenv.mkDerivation rec { + pname = "glib-networking"; + version = "2.76.0"; + + outputs = [ "out" "installedTests" ]; + + src = fetchurl { + url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz"; + sha256 = "FJoFoXnmKaU4viVmKqMktJnXxFScUVHbU3PngKG/G5o="; + }; + + patches = [ + (substituteAll { + src = ./hardcode-gsettings.patch; + gds_gsettings_path = glib.getSchemaPath gsettings-desktop-schemas; + }) + + ./installed-tests-path.patch + ]; + + strictDeps = true; + + nativeBuildInputs = [ + meson + ninja + pkg-config + gettext + makeWrapper + glib # for gio-querymodules + ]; + + buildInputs = [ + glib + gnutls + p11-kit + libproxy + gsettings-desktop-schemas + bash # installed-tests shebangs + ]; + + doCheck = false; # tests need to access the certificates (among other things) + + mesonFlags = [ + "-Dinstalled_tests=true" + "-Dinstalled_test_prefix=${placeholder "installedTests"}" + ]; + + postFixup = '' + find "$installedTests/libexec" "$out/libexec" -type f -executable -print0 \ + | while IFS= read -r -d "" file; do + echo "Wrapping program '$file'" + wrapProgram "$file" --prefix GIO_EXTRA_MODULES : "$out/lib/gio/modules" + done + ''; + + passthru = { + updateScript = gnome.updateScript { + packageName = pname; + versionPolicy = "odd-unstable"; + }; + + tests = { + installedTests = nixosTests.installed-tests.glib-networking; + }; + }; + + meta = with lib; { + description = "Network-related giomodules for glib"; + homepage = "https://gitlab.gnome.org/GNOME/glib-networking"; + license = licenses.lgpl21Plus; + maintainers = teams.gnome.members; + platforms = platforms.unix; + }; +} diff --git a/nixpkgs/pkgs/development/libraries/glib-networking/hardcode-gsettings.patch b/nixpkgs/pkgs/development/libraries/glib-networking/hardcode-gsettings.patch new file mode 100644 index 000000000000..0a091b2344dc --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/glib-networking/hardcode-gsettings.patch @@ -0,0 +1,341 @@ +diff --git a/proxy/gnome/gproxyresolvergnome.c b/proxy/gnome/gproxyresolvergnome.c +index 50b63cd..4364116 100644 +--- a/proxy/gnome/gproxyresolvergnome.c ++++ b/proxy/gnome/gproxyresolvergnome.c +@@ -156,23 +156,79 @@ + + resolver->base_resolver = g_simple_proxy_resolver_new (NULL, NULL); + +- resolver->proxy_settings = g_settings_new (GNOME_PROXY_SETTINGS_SCHEMA); ++ { ++ GSettingsSchemaSource *schema_source; ++ GSettingsSchema *schema; ++ schema_source = g_settings_schema_source_new_from_directory("@gds_gsettings_path@", ++ g_settings_schema_source_get_default(), ++ TRUE, NULL); ++ schema = g_settings_schema_source_lookup(schema_source, ++ GNOME_PROXY_SETTINGS_SCHEMA, ++ FALSE); ++ resolver->proxy_settings = g_settings_new_full(schema, NULL, NULL); ++ g_settings_schema_source_unref(schema_source); ++ g_settings_schema_unref(schema); ++ } + g_signal_connect (resolver->proxy_settings, "changed", + G_CALLBACK (gsettings_changed), resolver); +- resolver->http_settings = g_settings_get_child (resolver->proxy_settings, +- GNOME_PROXY_HTTP_CHILD_SCHEMA); ++ { ++ GSettingsSchemaSource *schema_source; ++ GSettingsSchema *schema; ++ schema_source = g_settings_schema_source_new_from_directory("@gds_gsettings_path@", ++ g_settings_schema_source_get_default(), ++ TRUE, NULL); ++ schema = g_settings_schema_source_lookup(schema_source, ++ GNOME_PROXY_SETTINGS_SCHEMA "." GNOME_PROXY_HTTP_CHILD_SCHEMA, ++ FALSE); ++ resolver->http_settings = g_settings_new_full(schema, NULL, NULL); ++ g_settings_schema_source_unref(schema_source); ++ g_settings_schema_unref(schema); ++ } + g_signal_connect (resolver->http_settings, "changed", + G_CALLBACK (gsettings_changed), resolver); +- resolver->https_settings = g_settings_get_child (resolver->proxy_settings, +- GNOME_PROXY_HTTPS_CHILD_SCHEMA); ++ { ++ GSettingsSchemaSource *schema_source; ++ GSettingsSchema *schema; ++ schema_source = g_settings_schema_source_new_from_directory("@gds_gsettings_path@", ++ g_settings_schema_source_get_default(), ++ TRUE, NULL); ++ schema = g_settings_schema_source_lookup(schema_source, ++ GNOME_PROXY_SETTINGS_SCHEMA "." GNOME_PROXY_HTTPS_CHILD_SCHEMA, ++ FALSE); ++ resolver->https_settings = g_settings_new_full(schema, NULL, NULL); ++ g_settings_schema_source_unref(schema_source); ++ g_settings_schema_unref(schema); ++ } + g_signal_connect (resolver->https_settings, "changed", + G_CALLBACK (gsettings_changed), resolver); +- resolver->ftp_settings = g_settings_get_child (resolver->proxy_settings, +- GNOME_PROXY_FTP_CHILD_SCHEMA); ++ { ++ GSettingsSchemaSource *schema_source; ++ GSettingsSchema *schema; ++ schema_source = g_settings_schema_source_new_from_directory("@gds_gsettings_path@", ++ g_settings_schema_source_get_default(), ++ TRUE, NULL); ++ schema = g_settings_schema_source_lookup(schema_source, ++ GNOME_PROXY_SETTINGS_SCHEMA "." GNOME_PROXY_FTP_CHILD_SCHEMA, ++ FALSE); ++ resolver->ftp_settings = g_settings_new_full(schema, NULL, NULL); ++ g_settings_schema_source_unref(schema_source); ++ g_settings_schema_unref(schema); ++ } + g_signal_connect (resolver->ftp_settings, "changed", + G_CALLBACK (gsettings_changed), resolver); +- resolver->socks_settings = g_settings_get_child (resolver->proxy_settings, +- GNOME_PROXY_SOCKS_CHILD_SCHEMA); ++ { ++ GSettingsSchemaSource *schema_source; ++ GSettingsSchema *schema; ++ schema_source = g_settings_schema_source_new_from_directory("@gds_gsettings_path@", ++ g_settings_schema_source_get_default(), ++ TRUE, NULL); ++ schema = g_settings_schema_source_lookup(schema_source, ++ GNOME_PROXY_SETTINGS_SCHEMA "." GNOME_PROXY_SOCKS_CHILD_SCHEMA, ++ FALSE); ++ resolver->socks_settings = g_settings_new_full(schema, NULL, NULL); ++ g_settings_schema_source_unref(schema_source); ++ g_settings_schema_unref(schema); ++ } + g_signal_connect (resolver->socks_settings, "changed", + G_CALLBACK (gsettings_changed), resolver); + +diff --git a/proxy/tests/gnome.c b/proxy/tests/gnome.c +index f76b094..54751e3 100644 +--- a/proxy/tests/gnome.c ++++ b/proxy/tests/gnome.c +@@ -55,26 +55,86 @@ + { + GSettings *settings, *child; + +- settings = g_settings_new (GNOME_PROXY_SETTINGS_SCHEMA); ++ { ++ GSettingsSchemaSource *schema_source; ++ GSettingsSchema *schema; ++ schema_source = g_settings_schema_source_new_from_directory("@gds_gsettings_path@", ++ g_settings_schema_source_get_default(), ++ TRUE, NULL); ++ schema = g_settings_schema_source_lookup(schema_source, ++ GNOME_PROXY_SETTINGS_SCHEMA, ++ FALSE); ++ settings = g_settings_new_full(schema, NULL, NULL); ++ g_settings_schema_source_unref(schema_source); ++ g_settings_schema_unref(schema); ++ } + g_settings_reset (settings, GNOME_PROXY_MODE_KEY); + g_settings_reset (settings, GNOME_PROXY_USE_SAME_PROXY_KEY); + +- child = g_settings_get_child (settings, GNOME_PROXY_HTTP_CHILD_SCHEMA); ++ { ++ GSettingsSchemaSource *schema_source; ++ GSettingsSchema *schema; ++ schema_source = g_settings_schema_source_new_from_directory("@gds_gsettings_path@", ++ g_settings_schema_source_get_default(), ++ TRUE, NULL); ++ schema = g_settings_schema_source_lookup(schema_source, ++ GNOME_PROXY_SETTINGS_SCHEMA "." GNOME_PROXY_HTTP_CHILD_SCHEMA, ++ FALSE); ++ child = g_settings_new_full(schema, NULL, NULL); ++ g_settings_schema_source_unref(schema_source); ++ g_settings_schema_unref(schema); ++ } + g_settings_reset (child, GNOME_PROXY_HTTP_HOST_KEY); + g_settings_reset (child, GNOME_PROXY_HTTP_PORT_KEY); + g_object_unref (child); + +- child = g_settings_get_child (settings, GNOME_PROXY_HTTPS_CHILD_SCHEMA); ++ { ++ GSettingsSchemaSource *schema_source; ++ GSettingsSchema *schema; ++ schema_source = g_settings_schema_source_new_from_directory("@gds_gsettings_path@", ++ g_settings_schema_source_get_default(), ++ TRUE, NULL); ++ schema = g_settings_schema_source_lookup(schema_source, ++ GNOME_PROXY_SETTINGS_SCHEMA "." GNOME_PROXY_HTTPS_CHILD_SCHEMA, ++ FALSE); ++ child = g_settings_new_full(schema, NULL, NULL); ++ g_settings_schema_source_unref(schema_source); ++ g_settings_schema_unref(schema); ++ } + g_settings_reset (child, GNOME_PROXY_HTTPS_HOST_KEY); + g_settings_reset (child, GNOME_PROXY_HTTPS_PORT_KEY); + g_object_unref (child); + +- child = g_settings_get_child (settings, GNOME_PROXY_FTP_CHILD_SCHEMA); ++ { ++ GSettingsSchemaSource *schema_source; ++ GSettingsSchema *schema; ++ schema_source = g_settings_schema_source_new_from_directory("@gds_gsettings_path@", ++ g_settings_schema_source_get_default(), ++ TRUE, NULL); ++ schema = g_settings_schema_source_lookup(schema_source, ++ GNOME_PROXY_SETTINGS_SCHEMA "." GNOME_PROXY_FTP_CHILD_SCHEMA, ++ FALSE); ++ child = g_settings_new_full(schema, NULL, NULL); ++ g_settings_schema_source_unref(schema_source); ++ g_settings_schema_unref(schema); ++ } + g_settings_reset (child, GNOME_PROXY_FTP_HOST_KEY); + g_settings_reset (child, GNOME_PROXY_FTP_PORT_KEY); + g_object_unref (child); + +- child = g_settings_get_child (settings, GNOME_PROXY_SOCKS_CHILD_SCHEMA); ++ { ++ GSettingsSchemaSource *schema_source; ++ GSettingsSchema *schema; ++ schema_source = g_settings_schema_source_new_from_directory("@gds_gsettings_path@", ++ g_settings_schema_source_get_default(), ++ TRUE, NULL); ++ schema = g_settings_schema_source_lookup(schema_source, ++ GNOME_PROXY_SETTINGS_SCHEMA "." GNOME_PROXY_SOCKS_CHILD_SCHEMA, ++ FALSE); ++ child = g_settings_new_full(schema, NULL, NULL); ++ g_settings_schema_source_unref(schema_source); ++ g_settings_schema_unref(schema); ++ } + g_settings_reset (child, GNOME_PROXY_SOCKS_HOST_KEY); + g_settings_reset (child, GNOME_PROXY_SOCKS_PORT_KEY); + g_object_unref (child); +@@ -88,21 +148,69 @@ + { + GSettings *settings, *child; + +- settings = g_settings_new (GNOME_PROXY_SETTINGS_SCHEMA); ++ { ++ GSettingsSchemaSource *schema_source; ++ GSettingsSchema *schema; ++ schema_source = g_settings_schema_source_new_from_directory("@gds_gsettings_path@", ++ g_settings_schema_source_get_default(), ++ TRUE, NULL); ++ schema = g_settings_schema_source_lookup(schema_source, ++ GNOME_PROXY_SETTINGS_SCHEMA, ++ FALSE); ++ settings = g_settings_new_full(schema, NULL, NULL); ++ g_settings_schema_source_unref(schema_source); ++ g_settings_schema_unref(schema); ++ } + g_settings_set_enum (settings, GNOME_PROXY_MODE_KEY, G_DESKTOP_PROXY_MODE_MANUAL); + g_settings_set_boolean (settings, GNOME_PROXY_USE_SAME_PROXY_KEY, TRUE); + +- child = g_settings_get_child (settings, GNOME_PROXY_HTTP_CHILD_SCHEMA); ++ { ++ GSettingsSchemaSource *schema_source; ++ GSettingsSchema *schema; ++ schema_source = g_settings_schema_source_new_from_directory("@gds_gsettings_path@", ++ g_settings_schema_source_get_default(), ++ TRUE, NULL); ++ schema = g_settings_schema_source_lookup(schema_source, ++ GNOME_PROXY_SETTINGS_SCHEMA "." GNOME_PROXY_HTTP_CHILD_SCHEMA, ++ FALSE); ++ child = g_settings_new_full(schema, NULL, NULL); ++ g_settings_schema_source_unref(schema_source); ++ g_settings_schema_unref(schema); ++ } + g_settings_set_string (child, GNOME_PROXY_HTTP_HOST_KEY, "proxy.example.com"); + g_settings_set_int (child, GNOME_PROXY_HTTP_PORT_KEY, 8080); + g_object_unref (child); + +- child = g_settings_get_child (settings, GNOME_PROXY_HTTPS_CHILD_SCHEMA); ++ { ++ GSettingsSchemaSource *schema_source; ++ GSettingsSchema *schema; ++ schema_source = g_settings_schema_source_new_from_directory("@gds_gsettings_path@", ++ g_settings_schema_source_get_default(), ++ TRUE, NULL); ++ schema = g_settings_schema_source_lookup(schema_source, ++ GNOME_PROXY_SETTINGS_SCHEMA "." GNOME_PROXY_HTTPS_CHILD_SCHEMA, ++ FALSE); ++ child = g_settings_new_full(schema, NULL, NULL); ++ g_settings_schema_source_unref(schema_source); ++ g_settings_schema_unref(schema); ++ } + g_settings_set_string (child, GNOME_PROXY_HTTPS_HOST_KEY, "proxy-s.example.com"); + g_settings_set_int (child, GNOME_PROXY_HTTPS_PORT_KEY, 7070); + g_object_unref (child); + +- child = g_settings_get_child (settings, GNOME_PROXY_FTP_CHILD_SCHEMA); ++ { ++ GSettingsSchemaSource *schema_source; ++ GSettingsSchema *schema; ++ schema_source = g_settings_schema_source_new_from_directory("@gds_gsettings_path@", ++ g_settings_schema_source_get_default(), ++ TRUE, NULL); ++ schema = g_settings_schema_source_lookup(schema_source, ++ GNOME_PROXY_SETTINGS_SCHEMA "." GNOME_PROXY_FTP_CHILD_SCHEMA, ++ FALSE); ++ child = g_settings_new_full(schema, NULL, NULL); ++ g_settings_schema_source_unref(schema_source); ++ g_settings_schema_unref(schema); ++ } + g_settings_set_string (child, GNOME_PROXY_FTP_HOST_KEY, "proxy-f.example.com"); + g_settings_set_int (child, GNOME_PROXY_FTP_PORT_KEY, 6060); + g_object_unref (child); +@@ -119,12 +227,36 @@ + GSettings *settings, *child; + const gchar *ignore_hosts[2] = { "127.0.0.1", NULL }; + +- settings = g_settings_new (GNOME_PROXY_SETTINGS_SCHEMA); ++ { ++ GSettingsSchemaSource *schema_source; ++ GSettingsSchema *schema; ++ schema_source = g_settings_schema_source_new_from_directory("@gds_gsettings_path@", ++ g_settings_schema_source_get_default(), ++ TRUE, NULL); ++ schema = g_settings_schema_source_lookup(schema_source, ++ GNOME_PROXY_SETTINGS_SCHEMA, ++ FALSE); ++ settings = g_settings_new_full(schema, NULL, NULL); ++ g_settings_schema_source_unref(schema_source); ++ g_settings_schema_unref(schema); ++ } + g_settings_set_enum (settings, GNOME_PROXY_MODE_KEY, G_DESKTOP_PROXY_MODE_MANUAL); + g_settings_set (settings, GNOME_PROXY_IGNORE_HOSTS_KEY, + "@as", g_variant_new_strv (ignore_hosts, -1)); + +- child = g_settings_get_child (settings, GNOME_PROXY_SOCKS_CHILD_SCHEMA); ++ { ++ GSettingsSchemaSource *schema_source; ++ GSettingsSchema *schema; ++ schema_source = g_settings_schema_source_new_from_directory("@gds_gsettings_path@", ++ g_settings_schema_source_get_default(), ++ TRUE, NULL); ++ schema = g_settings_schema_source_lookup(schema_source, ++ GNOME_PROXY_SETTINGS_SCHEMA "." GNOME_PROXY_SOCKS_CHILD_SCHEMA, ++ FALSE); ++ child = g_settings_new_full(schema, NULL, NULL); ++ g_settings_schema_source_unref(schema_source); ++ g_settings_schema_unref(schema); ++ } + g_settings_set_string (child, GNOME_PROXY_SOCKS_HOST_KEY, "proxy.example.com"); + g_settings_set_int (child, GNOME_PROXY_SOCKS_PORT_KEY, 1234); + g_object_unref (child); +@@ -139,12 +271,36 @@ + { + GSettings *settings, *http; + +- settings = g_settings_new (GNOME_PROXY_SETTINGS_SCHEMA); ++ { ++ GSettingsSchemaSource *schema_source; ++ GSettingsSchema *schema; ++ schema_source = g_settings_schema_source_new_from_directory("@gds_gsettings_path@", ++ g_settings_schema_source_get_default(), ++ TRUE, NULL); ++ schema = g_settings_schema_source_lookup(schema_source, ++ GNOME_PROXY_SETTINGS_SCHEMA, ++ FALSE); ++ settings = g_settings_new_full(schema, NULL, NULL); ++ g_settings_schema_source_unref(schema_source); ++ g_settings_schema_unref(schema); ++ } + g_settings_set_enum (settings, GNOME_PROXY_MODE_KEY, G_DESKTOP_PROXY_MODE_MANUAL); + g_settings_set (settings, GNOME_PROXY_IGNORE_HOSTS_KEY, + "@as", g_variant_new_strv (ignore_hosts, n_ignore_hosts)); + +- http = g_settings_get_child (settings, GNOME_PROXY_HTTP_CHILD_SCHEMA); ++ { ++ GSettingsSchemaSource *schema_source; ++ GSettingsSchema *schema; ++ schema_source = g_settings_schema_source_new_from_directory("@gds_gsettings_path@", ++ g_settings_schema_source_get_default(), ++ TRUE, NULL); ++ schema = g_settings_schema_source_lookup(schema_source, ++ GNOME_PROXY_SETTINGS_SCHEMA "." GNOME_PROXY_HTTP_CHILD_SCHEMA, ++ FALSE); ++ http = g_settings_new_full(schema, NULL, NULL); ++ g_settings_schema_source_unref(schema_source); ++ g_settings_schema_unref(schema); ++ } + g_settings_set_string (http, GNOME_PROXY_HTTP_HOST_KEY, "localhost"); + g_settings_set_int (http, GNOME_PROXY_HTTP_PORT_KEY, 8080); + diff --git a/nixpkgs/pkgs/development/libraries/glib-networking/installed-tests-path.patch b/nixpkgs/pkgs/development/libraries/glib-networking/installed-tests-path.patch new file mode 100644 index 000000000000..549307cca39d --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/glib-networking/installed-tests-path.patch @@ -0,0 +1,27 @@ +diff --git a/meson.build b/meson.build +index 01e18a9..5dbb2fc 100644 +--- a/meson.build ++++ b/meson.build +@@ -12,8 +12,8 @@ libdir = join_paths(prefix, get_option('libdir')) + libexecdir = join_paths(prefix, get_option('libexecdir')) + localedir = join_paths(prefix, get_option('localedir')) + +-installed_tests_metadir = join_paths(datadir, 'installed-tests', meson.project_name()) +-installed_tests_execdir = join_paths(libexecdir, 'installed-tests', meson.project_name()) ++installed_tests_metadir = join_paths(get_option('installed_test_prefix'), 'share', 'installed-tests', meson.project_name()) ++installed_tests_execdir = join_paths(get_option('installed_test_prefix'), 'libexec', 'installed-tests', meson.project_name()) + + cc = meson.get_compiler('c') + host_system = host_machine.system() +diff --git a/meson_options.txt b/meson_options.txt +index c566ccd..80f7c33 100644 +--- a/meson_options.txt ++++ b/meson_options.txt +@@ -10,6 +10,7 @@ option('environment_proxy', type: 'feature', value: 'auto', description: 'suppor + option('libproxy', type: 'feature', value: 'auto', description: 'support for libproxy proxy configration') + option('gnome_proxy', type: 'feature', value: 'auto', description: 'support for GNOME desktop proxy configuration') + option('installed_tests', type: 'boolean', value: false, description: 'enable installed tests') ++option('installed_test_prefix', type: 'string', value: '', description: 'Prefix for installed tests') + option('debug_logs', type: 'boolean', value: false, description: 'enable debug log messages (slow)') + + # Deprecated, use -Ddefault_library=static instead. |