about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/libraries/glib-networking
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/libraries/glib-networking')
-rw-r--r--nixpkgs/pkgs/development/libraries/glib-networking/default.nix93
-rw-r--r--nixpkgs/pkgs/development/libraries/glib-networking/hardcode-gsettings.patch341
-rw-r--r--nixpkgs/pkgs/development/libraries/glib-networking/installed-tests-path.patch27
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.