diff --git a/.geoclue2.metadata b/.geoclue2.metadata index b9b85f5..7b3be29 100644 --- a/.geoclue2.metadata +++ b/.geoclue2.metadata @@ -1 +1 @@ -84cde181d17d58a52f6ac2d218b59c106f675fb0 SOURCES/geoclue-2.1.10.tar.xz +1b8e93ef7a15c2b730b0f5de4e610746e8138b00 SOURCES/geoclue-2.4.5.tar.xz diff --git a/.gitignore b/.gitignore index 6a6897c..8e5f3a7 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/geoclue-2.1.10.tar.xz +SOURCES/geoclue-2.4.5.tar.xz diff --git a/SOURCES/locator-Correct-source-accuracy-comparison.patch b/SOURCES/locator-Correct-source-accuracy-comparison.patch deleted file mode 100644 index b8d752b..0000000 --- a/SOURCES/locator-Correct-source-accuracy-comparison.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 76ba63f3cc55912e7d7886c0806640c5c6b726db Mon Sep 17 00:00:00 2001 -From: Fabrice Bellet -Date: Wed, 25 Mar 2015 16:08:34 +0100 -Subject: [PATCH 4/7] locator: Correct source accuracy comparison - -We now stop sources whose accuracy level becomes higher, rather than -lower, than the requested level. - -https://bugs.freedesktop.org/show_bug.cgi?id=89716 ---- - src/gclue-locator.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/gclue-locator.c b/src/gclue-locator.c -index 42ce395..91df67e 100644 ---- a/src/gclue-locator.c -+++ b/src/gclue-locator.c -@@ -184,7 +184,7 @@ on_avail_accuracy_level_changed (GObject *gobject, - !is_source_active (locator, src)) { - start_source (locator, src); - } else if ((level == GCLUE_ACCURACY_LEVEL_NONE || -- priv->accuracy_level > level) && -+ priv->accuracy_level < level) && - is_source_active (locator, src)) { - g_signal_handlers_disconnect_by_func (G_OBJECT (src), - G_CALLBACK (on_location_changed), --- -2.1.0 - diff --git a/SOURCES/modem-gps-Fix-GPS-coordinates-parsing.patch b/SOURCES/modem-gps-Fix-GPS-coordinates-parsing.patch deleted file mode 100644 index be007ef..0000000 --- a/SOURCES/modem-gps-Fix-GPS-coordinates-parsing.patch +++ /dev/null @@ -1,48 +0,0 @@ -From fea6f1844d2c8dc13f94da5af1aea10430ad8ede Mon Sep 17 00:00:00 2001 -From: Fabrice Bellet -Date: Wed, 25 Mar 2015 14:52:30 +0100 -Subject: [PATCH 3/7] modem-gps: Fix GPS coordinates parsing - -Latitude and longitude don't have the same number of digits -on the left side of the decimal point in the GGA NMEA sentence. - -https://bugs.freedesktop.org/show_bug.cgi?id=89715 ---- - src/gclue-modem-gps.c | 11 +++++++++-- - 1 file changed, 9 insertions(+), 2 deletions(-) - -diff --git a/src/gclue-modem-gps.c b/src/gclue-modem-gps.c -index 7f1338f..5295fe3 100644 ---- a/src/gclue-modem-gps.c -+++ b/src/gclue-modem-gps.c -@@ -215,6 +215,8 @@ parse_coordinate_string (const char *coordinate, - { - gdouble minutes, degrees, out; - gchar *degrees_str; -+ gchar *dot_str; -+ gint dot_offset; - - if (coordinate[0] == '\0' || - direction[0] == '\0' || -@@ -230,11 +232,16 @@ parse_coordinate_string (const char *coordinate, - return INVALID_COORDINATE; - } - -- degrees_str = g_strndup (coordinate, 2); -+ dot_str = g_strstr_len (coordinate, 6, "."); -+ if (dot_str == NULL) -+ return INVALID_COORDINATE; -+ dot_offset = dot_str - coordinate; -+ -+ degrees_str = g_strndup (coordinate, dot_offset - 2); - degrees = g_ascii_strtod (degrees_str, NULL); - g_free (degrees_str); - -- minutes = g_ascii_strtod (coordinate + 2, NULL); -+ minutes = g_ascii_strtod (coordinate + dot_offset - 2, NULL); - - /* Include the minutes as part of the degrees */ - out = degrees + (minutes / 60.0); --- -2.1.0 - diff --git a/SOURCES/modem-manager-Don-t-enable-the-modem.patch b/SOURCES/modem-manager-Don-t-enable-the-modem.patch deleted file mode 100644 index 642772e..0000000 --- a/SOURCES/modem-manager-Don-t-enable-the-modem.patch +++ /dev/null @@ -1,79 +0,0 @@ -From 4492e5066e786acc9e9ba86079ccce352a27df81 Mon Sep 17 00:00:00 2001 -From: "Zeeshan Ali (Khattak)" -Date: Thu, 2 Apr 2015 18:40:29 +0100 -Subject: [PATCH 6/7] modem-manager: Don't enable the modem - -Seems at least GNOME takes care of modem enabling for us and besides -this shouldn't be done by geoclue anyway (see bug#85040). - -https://bugs.freedesktop.org/show_bug.cgi?id=85305 ---- - src/gclue-modem-manager.c | 45 +++++++++------------------------------------ - 1 file changed, 9 insertions(+), 36 deletions(-) - -diff --git a/src/gclue-modem-manager.c b/src/gclue-modem-manager.c -index cce3065..71ab96d 100644 ---- a/src/gclue-modem-manager.c -+++ b/src/gclue-modem-manager.c -@@ -410,38 +410,6 @@ out: - } - - static void --on_modem_enabled (GObject *modem_object, -- GAsyncResult *res, -- gpointer user_data) --{ -- GTask *task = G_TASK (user_data); -- GClueModemManagerPrivate *priv; -- MMModemLocationSource caps; -- GError *error = NULL; -- -- if (!mm_modem_enable_finish (MM_MODEM (modem_object), res, &error)) { -- if (error->code == MM_CORE_ERROR_IN_PROGRESS) -- /* Seems a previous async call hasn't returned yet. */ -- g_task_return_boolean (task, TRUE); -- else -- g_task_return_error (task, error); -- g_object_unref (task); -- -- return; -- } -- priv = GCLUE_MODEM_MANAGER (g_task_get_source_object (task))->priv; -- g_debug ("manager '%s' enabled.", mm_object_get_path (priv->mm_object)); -- -- caps = mm_modem_location_get_enabled (priv->modem_location) | priv->caps; -- mm_modem_location_setup (priv->modem_location, -- caps, -- TRUE, -- g_task_get_cancellable (task), -- on_modem_location_setup, -- task); --} -- --static void - enable_caps (GClueModemManager *manager, - MMModemLocationSource caps, - GCancellable *cancellable, -@@ -454,10 +422,15 @@ enable_caps (GClueModemManager *manager, - priv->caps |= caps; - task = g_task_new (manager, cancellable, callback, user_data); - -- mm_modem_enable (priv->modem, -- cancellable, -- on_modem_enabled, -- task); -+ priv = GCLUE_MODEM_MANAGER (g_task_get_source_object (task))->priv; -+ -+ caps = mm_modem_location_get_enabled (priv->modem_location) | priv->caps; -+ mm_modem_location_setup (priv->modem_location, -+ caps, -+ TRUE, -+ g_task_get_cancellable (task), -+ on_modem_location_setup, -+ task); - } - - static gboolean --- -2.1.0 - diff --git a/SOURCES/modem-manager-Wait-for-modem-to-be-enabled.patch b/SOURCES/modem-manager-Wait-for-modem-to-be-enabled.patch deleted file mode 100644 index a0149c8..0000000 --- a/SOURCES/modem-manager-Wait-for-modem-to-be-enabled.patch +++ /dev/null @@ -1,101 +0,0 @@ -From 428063526f6bf032c2ecba28cd41865d9a5661fa Mon Sep 17 00:00:00 2001 -From: "Zeeshan Ali (Khattak)" -Date: Wed, 1 Apr 2015 20:22:20 +0100 -Subject: [PATCH 7/7] modem-manager: Wait for modem to be enabled - -Modem's location capabilities won't be known until its enabled. - -https://bugs.freedesktop.org/show_bug.cgi?id=85305 ---- - src/gclue-modem-manager.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++- - 1 file changed, 57 insertions(+), 1 deletion(-) - -diff --git a/src/gclue-modem-manager.c b/src/gclue-modem-manager.c -index 71ab96d..d48c0cb 100644 ---- a/src/gclue-modem-manager.c -+++ b/src/gclue-modem-manager.c -@@ -484,16 +484,72 @@ modem_has_caps (GClueModemManager *manager, - static void - on_mm_object_added (GDBusObjectManager *object_manager, - GDBusObject *object, -+ gpointer user_data); -+ -+static void -+on_mm_modem_state_notify (GObject *gobject, -+ GParamSpec *pspec, -+ gpointer user_data) -+{ -+ MMModem *mm_modem = MM_MODEM (gobject); -+ GClueModemManager *manager = GCLUE_MODEM_MANAGER (user_data); -+ GClueModemManagerPrivate *priv = manager->priv; -+ GDBusObjectManager *obj_manager = G_DBUS_OBJECT_MANAGER (priv->manager); -+ const char *path = mm_modem_get_path (mm_modem); -+ GDBusObject *object; -+ -+ if (priv->mm_object != NULL) { -+ // In the meantime another modem with location caps was found. -+ g_signal_handlers_disconnect_by_func (mm_modem, -+ on_mm_modem_state_notify, -+ user_data); -+ g_object_unref (gobject); -+ -+ return; -+ } -+ -+ if (mm_modem_get_state (mm_modem) < MM_MODEM_STATE_ENABLED) -+ return; -+ -+ g_debug ("Modem '%s' now enabled", path); -+ -+ g_signal_handlers_disconnect_by_func (mm_modem, -+ on_mm_modem_state_notify, -+ user_data); -+ -+ object = g_dbus_object_manager_get_object (obj_manager, path); -+ on_mm_object_added (obj_manager, object, user_data); -+ g_object_unref (mm_modem); -+} -+ -+static void -+on_mm_object_added (GDBusObjectManager *object_manager, -+ GDBusObject *object, - gpointer user_data) - { - MMObject *mm_object = MM_OBJECT (object); - GClueModemManager *manager = GCLUE_MODEM_MANAGER (user_data); -+ MMModem *mm_modem; - MMModemLocation *modem_location; - - if (manager->priv->mm_object != NULL) - return; - - g_debug ("New modem '%s'", mm_object_get_path (mm_object)); -+ mm_modem = mm_object_get_modem (mm_object); -+ if (mm_modem_get_state (mm_modem) < MM_MODEM_STATE_ENABLED) { -+ g_debug ("Modem '%s' not enabled", -+ mm_object_get_path (mm_object)); -+ -+ g_signal_connect_object (mm_modem, -+ "notify::state", -+ G_CALLBACK (on_mm_modem_state_notify), -+ manager, -+ 0); -+ -+ return; -+ } -+ - modem_location = mm_object_peek_modem_location (mm_object); - if (modem_location == NULL) - return; -@@ -502,7 +558,7 @@ on_mm_object_added (GDBusObjectManager *object_manager, - mm_object_get_path (mm_object)); - - manager->priv->mm_object = g_object_ref (mm_object); -- manager->priv->modem = mm_object_get_modem (mm_object); -+ manager->priv->modem = mm_modem; - manager->priv->modem_location = mm_object_get_modem_location (mm_object); - - g_signal_connect (G_OBJECT (manager->priv->modem_location), --- -2.1.0 - diff --git a/SOURCES/service-client-Delay-unrefing-ServiceLocation.patch b/SOURCES/service-client-Delay-unrefing-ServiceLocation.patch deleted file mode 100644 index e494ca8..0000000 --- a/SOURCES/service-client-Delay-unrefing-ServiceLocation.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 775211c190a01269aa731922f31b54b0451c7ce1 Mon Sep 17 00:00:00 2001 -From: "Zeeshan Ali (Khattak)" -Date: Wed, 1 Apr 2015 18:24:32 +0100 -Subject: [PATCH 5/7] service-client: Delay unrefing ServiceLocation - -Lets try to ensure that apps are not still accessing the last location -before unrefing (and therefore destroying) it by delaying the unref -operation by 5 seconds after a ServiceLocation object becomes obsolete. - -https://bugs.freedesktop.org/show_bug.cgi?id=89782 ---- - src/gclue-service-client.c | 13 ++++++++++++- - 1 file changed, 12 insertions(+), 1 deletion(-) - -diff --git a/src/gclue-service-client.c b/src/gclue-service-client.c -index 0ff3e85..ae22601 100644 ---- a/src/gclue-service-client.c -+++ b/src/gclue-service-client.c -@@ -138,6 +138,14 @@ below_threshold (GClueServiceClient *client, - return FALSE; - } - -+static gboolean -+on_prev_location_timeout (gpointer user_data) -+{ -+ g_object_unref (user_data); -+ -+ return FALSE; -+} -+ - static void - on_locator_location_changed (GObject *gobject, - GParamSpec *pspec, -@@ -163,7 +171,10 @@ on_locator_location_changed (GObject *gobject, - return; - } - -- g_clear_object (&priv->prev_location); -+ if (priv->prev_location != NULL) -+ // Lets try to ensure that apps are not still accessing the -+ // last location before unrefing (and therefore destroying) it. -+ g_timeout_add_seconds (5, on_prev_location_timeout, priv->prev_location); - priv->prev_location = priv->location; - - path = next_location_path (client); --- -2.1.0 - diff --git a/SOURCES/service-client-Gracefully-handle-NULL-agent.patch b/SOURCES/service-client-Gracefully-handle-NULL-agent.patch deleted file mode 100644 index c090af3..0000000 --- a/SOURCES/service-client-Gracefully-handle-NULL-agent.patch +++ /dev/null @@ -1,62 +0,0 @@ -From 07a4f0c0c2e252f8975039a4320d69d04200ac31 Mon Sep 17 00:00:00 2001 -From: "Zeeshan Ali (Khattak)" -Date: Thu, 6 Nov 2014 18:32:28 +0000 -Subject: [PATCH 1/7] service-client: Gracefully handle NULL agent - -Don't connect to signals on agent if its NULL. Agent is currently -entirely optional. ---- - src/gclue-service-client.c | 23 +++++++++++++++-------- - 1 file changed, 15 insertions(+), 8 deletions(-) - -diff --git a/src/gclue-service-client.c b/src/gclue-service-client.c -index c27faac..0ff3e85 100644 ---- a/src/gclue-service-client.c -+++ b/src/gclue-service-client.c -@@ -385,7 +385,11 @@ gclue_service_client_handle_start (GClueClient *client, - return TRUE; - } - -- max_accuracy = gclue_agent_get_max_accuracy_level (priv->agent_proxy); -+ if (priv->agent_proxy != NULL) -+ max_accuracy = gclue_agent_get_max_accuracy_level (priv->agent_proxy); -+ else -+ max_accuracy = GCLUE_ACCURACY_LEVEL_EXACT; -+ - if (max_accuracy == 0) { - g_dbus_method_invocation_return_error (invocation, - G_DBUS_ERROR, -@@ -429,9 +433,11 @@ gclue_service_client_finalize (GObject *object) - - g_clear_pointer (&priv->path, g_free); - g_clear_object (&priv->connection); -- g_signal_handlers_disconnect_by_func (priv->agent_proxy, -- G_CALLBACK (on_agent_props_changed), -- object); -+ if (priv->agent_proxy != NULL) -+ g_signal_handlers_disconnect_by_func -+ (priv->agent_proxy, -+ G_CALLBACK (on_agent_props_changed), -+ object); - g_clear_object (&priv->agent_proxy); - g_clear_object (&priv->locator); - g_clear_object (&priv->location); -@@ -495,10 +501,11 @@ gclue_service_client_set_property (GObject *object, - - case PROP_AGENT_PROXY: - client->priv->agent_proxy = g_value_dup_object (value); -- g_signal_connect (client->priv->agent_proxy, -- "g-properties-changed", -- G_CALLBACK (on_agent_props_changed), -- object); -+ if (client->priv->agent_proxy != NULL) -+ g_signal_connect (client->priv->agent_proxy, -+ "g-properties-changed", -+ G_CALLBACK (on_agent_props_changed), -+ object); - break; - - default: --- -2.1.0 - diff --git a/SOURCES/wifi-Remove-a-redundant-condition.patch b/SOURCES/wifi-Remove-a-redundant-condition.patch deleted file mode 100644 index f33b33f..0000000 --- a/SOURCES/wifi-Remove-a-redundant-condition.patch +++ /dev/null @@ -1,32 +0,0 @@ -From b5f71cefda98277272d483dd4a31c71208dafd5f Mon Sep 17 00:00:00 2001 -From: "Zeeshan Ali (Khattak)" -Date: Thu, 6 Nov 2014 20:21:50 +0000 -Subject: [PATCH 2/7] wifi: Remove a redundant condition - -We were only refreshing the location on starting of wifi source if -requested accuracy level was 'city'. This resulted in clients requesting -accuracy level other than 'city' to not get any location on machines -without a wifi card (e.g VMs). - -This patches fixes the issue by removing the redundant condition. ---- - src/gclue-wifi.c | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/src/gclue-wifi.c b/src/gclue-wifi.c -index cf2c455..e94ef04 100644 ---- a/src/gclue-wifi.c -+++ b/src/gclue-wifi.c -@@ -377,8 +377,7 @@ connect_bss_signals (GClueWifi *wifi) - if (priv->bss_added_id != 0) - return; - if (priv->interface == NULL) { -- if (wifi->priv->accuracy_level == GCLUE_ACCURACY_LEVEL_CITY) -- gclue_web_source_refresh (GCLUE_WEB_SOURCE (wifi)); -+ gclue_web_source_refresh (GCLUE_WEB_SOURCE (wifi)); - - return; - } --- -2.1.0 - diff --git a/SPECS/geoclue2.spec b/SPECS/geoclue2.spec index c234e2f..775c5d4 100644 --- a/SPECS/geoclue2.spec +++ b/SPECS/geoclue2.spec @@ -1,22 +1,15 @@ Name: geoclue2 -Version: 2.1.10 -Release: 5%{?dist} +Version: 2.4.5 +Release: 1%{?dist} Summary: Geolocation service License: GPLv2+ URL: http://www.freedesktop.org/wiki/Software/GeoClue/ -Source0: http://www.freedesktop.org/software/geoclue/releases/2.1/geoclue-%{version}.tar.xz - -# Fixes from 2.2.0 -Patch01: locator-Correct-source-accuracy-comparison.patch -Patch02: service-client-Delay-unrefing-ServiceLocation.patch -Patch03: modem-gps-Fix-GPS-coordinates-parsing.patch -Patch04: service-client-Gracefully-handle-NULL-agent.patch -Patch05: modem-manager-Don-t-enable-the-modem.patch -Patch06: wifi-Remove-a-redundant-condition.patch -Patch07: modem-manager-Wait-for-modem-to-be-enabled.patch +Source0: http://www.freedesktop.org/software/geoclue/releases/2.4/geoclue-%{version}.tar.xz +BuildRequires: avahi-glib-devel BuildRequires: glib2-devel +BuildRequires: gobject-introspection-devel BuildRequires: intltool BuildRequires: itstool BuildRequires: json-glib-devel @@ -38,42 +31,52 @@ simple as possible, while the secondary goal is to ensure that no application can access location information without explicit permission from user. +%package libs +Summary: Geoclue client library +License: LGPLv2+ +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description libs +The %{name}-libs package contains a convenience library to interact with +Geoclue service. + + %package devel Summary: Development files for %{name} Requires: %{name}%{?_isa} = %{version}-%{release} +Requires: %{name}-libs%{?_isa} = %{version}-%{release} %description devel The %{name}-devel package contains files for developing applications that use %{name}. +%package demos +Summary: Demo applications for %{name} +Requires: %{name}%{?_isa} = %{version}-%{release} +BuildRequires: libnotify-devel + +%description demos +The %{name}-demos package contains demo applications that use %{name}. + + %prep %setup -q -n geoclue-%{version} -%patch01 -p1 -b .locator-Correct-source-accuracy-comparison -%patch02 -p1 -b .service-client-Delay-unrefing-ServiceLocation -%patch03 -p1 -b .modem-gps-Fix-GPS-coordinates-parsing -%patch04 -p1 -b .service-client-Gracefully-handle-NULL-agent -%patch05 -p1 -b .modem-manager-Don-t-enable-the-modem -%patch06 -p1 -b .wifi-Remove-a-redundant-condition -%patch07 -p1 -b .modem-manager-Wait-for-modem-to-be-enabled %build -%configure --with-dbus-service-user=geoclue +%configure --with-dbus-service-user=geoclue --enable-demo-agent make %{?_smp_mflags} V=1 %install %make_install +find $RPM_BUILD_ROOT -name '*.la' -delete + # Home directory for the 'geoclue' user mkdir -p $RPM_BUILD_ROOT/var/lib/geoclue -# Remove demo files -rm $RPM_BUILD_ROOT%{_datadir}/applications/geoclue-demo-agent.desktop -rm $RPM_BUILD_ROOT%{_datadir}/applications/geoclue-where-am-i.desktop -rm $RPM_BUILD_ROOT%{_libexecdir}/geoclue-2.0/demos/where-am-i - %pre # Update the home directory for existing users @@ -95,9 +98,14 @@ exit 0 %postun %systemd_postun_with_restart geoclue.service +%post libs -p /sbin/ldconfig + +%postun libs -p /sbin/ldconfig + %files -%doc COPYING NEWS +%license COPYING +%doc NEWS %config %{_sysconfdir}/geoclue/ %{_sysconfdir}/dbus-1/system.d/org.freedesktop.GeoClue2.conf %{_sysconfdir}/dbus-1/system.d/org.freedesktop.GeoClue2.Agent.conf @@ -106,12 +114,32 @@ exit 0 %{_unitdir}/geoclue.service %attr(755,geoclue,geoclue) %dir /var/lib/geoclue +%files libs +%license COPYING.LIB +%{_libdir}/girepository-1.0/Geoclue-2.0.typelib +%{_libdir}/libgeoclue-2.so.0* + %files devel %{_datadir}/dbus-1/interfaces/org.freedesktop.GeoClue2*.xml +%{_datadir}/gir-1.0/Geoclue-2.0.gir +%{_includedir}/libgeoclue-2.0/ %{_libdir}/pkgconfig/geoclue-2.0.pc +%{_libdir}/pkgconfig/libgeoclue-2.0.pc +%{_libdir}/libgeoclue-2.so +%files demos +%dir %{_libexecdir}/geoclue-2.0 +%dir %{_libexecdir}/geoclue-2.0/demos +%{_libexecdir}/geoclue-2.0/demos/where-am-i +%{_libexecdir}/geoclue-2.0/demos/agent +%{_datadir}/applications/geoclue-demo-agent.desktop +%{_datadir}/applications/geoclue-where-am-i.desktop %changelog +* Fri Jan 27 2017 Kalev Lember - 2.4.5-1 +- Update to 2.4.5 +- Resolves: #1386867 + * Wed Apr 27 2016 Zeeshan Ali 2.1.10-5 - Don't obsolete geoclue1 (rhbz#1285479).