[gvfs] metadata: Remove udev dependency in favor of gudev



commit c2d856447e9067089388d70a85ab47821b375729
Author: Ondrej Holy <oholy redhat com>
Date:   Tue Oct 24 16:12:39 2017 +0200

    metadata: Remove udev dependency in favor of gudev
    
    GVfs uses udev and also gudev. Let's use just gudev and remove corresponding
    --enable-udev option.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=786149

 configure.ac           |   15 ---------------
 meson.build            |    7 -------
 meson_options.txt      |    1 -
 metadata/Makefile.am   |    4 ++--
 metadata/meson.build   |    2 +-
 metadata/meta-daemon.c |   44 +++++++++++++++++++-------------------------
 6 files changed, 22 insertions(+), 51 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 5520d35..a41201f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -186,21 +186,6 @@ PKG_CHECK_MODULES([LIBXML], [libxml-2.0],
        [msg_libxml=yes],
         [AM_CONDITIONAL([HAVE_LIBXML], [false])])
 
-dnl *************************
-dnl *** Check for libudev ***
-dnl *************************
-AC_ARG_ENABLE([udev], [AS_HELP_STRING([--disable-udev],[build without libudev])])
-msg_udev=no
-
-if test "x$enable_udev" != "xno"; then
-  PKG_CHECK_EXISTS([libudev >= 138], [msg_udev=yes])
-
-  if test "x$msg_udev" = "xyes"; then
-    PKG_CHECK_MODULES([UDEV], [libudev])
-    AC_DEFINE([HAVE_LIBUDEV], 1, [Define to 1 if libudev is available])
-  fi
-fi
-
 dnl **********************
 dnl *** Check for gudev ***
 dnl **********************
diff --git a/meson.build b/meson.build
index b3e52ea..913355d 100644
--- a/meson.build
+++ b/meson.build
@@ -328,13 +328,6 @@ if enable_dnssd
 endif
 config_h.set('HAVE_AVAHI', enable_dnssd)
 
-# *** Check for libudev ***
-enable_udev = get_option('enable-udev')
-if enable_udev
-  libudev_dep = dependency('libudev', version: '>= 138')
-endif
-config_h.set('HAVE_LIBUDEV', enable_udev)
-
 # *** Check for gudev ***
 enable_gudev = get_option('enable-gudev')
 if enable_gudev
diff --git a/meson_options.txt b/meson_options.txt
index 3b2d755..833b7d7 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -26,7 +26,6 @@ option('enable-gudev', type: 'boolean', value: true, description: 'build with gu
 option('enable-keyring', type: 'boolean', value: true, description: 'build with keyring support')
 option('enable-logind', type: 'boolean', value: true, description: 'build with logind support')
 option('enable-libusb', type: 'boolean', value: true, description: 'build with libusb interruption support')
-option('enable-udev', type: 'boolean', value: true, description: 'build with libudev device support')
 
 option('enable-devel-utils', type: 'boolean', value: false, description: 'build with development utility 
programs')
 option('enable-installed-tests', type: 'boolean', value: false, description: 'enable installed unit tests')
diff --git a/metadata/Makefile.am b/metadata/Makefile.am
index 9acc213..a6da970 100644
--- a/metadata/Makefile.am
+++ b/metadata/Makefile.am
@@ -60,9 +60,9 @@ meta_get_tree_SOURCES = meta-get-tree.c
 convert_nautilus_metadata_LDADD = libmetadata.la $(LIBXML_LIBS)
 convert_nautilus_metadata_SOURCES = metadata-nautilus.c
 
-gvfsd_metadata_LDADD = libmetadata.la ../common/libgvfscommon.la $(UDEV_LIBS)
+gvfsd_metadata_LDADD = libmetadata.la ../common/libgvfscommon.la $(GUDEV_LIBS)
 gvfsd_metadata_SOURCES = meta-daemon.c
-gvfsd_metadata_CFLAFGS = $(UDEV_CFLAGS)
+gvfsd_metadata_CFLAGS = $(GUDEV_CFLAGS)
 
 # D-BUS service file
 %.service: %.service.in ../config.log
diff --git a/metadata/meson.build b/metadata/meson.build
index cdcb715..a4f939a 100644
--- a/metadata/meson.build
+++ b/metadata/meson.build
@@ -62,7 +62,7 @@ executable(
   dependencies: [
     libgvfscommon_dep,
     libmetadata_dep,
-    libudev_dep
+    gudev_dep
   ],
   c_args: cflags,
   install: true,
diff --git a/metadata/meta-daemon.c b/metadata/meta-daemon.c
index 17402df..444a439 100644
--- a/metadata/meta-daemon.c
+++ b/metadata/meta-daemon.c
@@ -31,9 +31,8 @@
 #include "gvfsdaemonprotocol.h"
 #include "metadata-dbus.h"
 
-#ifdef HAVE_LIBUDEV
-#define LIBUDEV_I_KNOW_THE_API_IS_SUBJECT_TO_CHANGE
-#include <libudev.h>
+#ifdef HAVE_GUDEV
+#include <gudev/gudev.h>
 #endif
 
 #if MAJOR_IN_MKDEV
@@ -53,6 +52,9 @@ typedef struct {
 
 static GHashTable *tree_infos = NULL;
 static GVfsMetadata *skeleton = NULL;
+#ifdef HAVE_GUDEV
+static GUdevClient *gudev_client = NULL;
+#endif
 
 static void
 tree_info_free (TreeInfo *info)
@@ -309,32 +311,21 @@ handle_get_tree_from_device (GVfsMetadata *object,
 {
   char *res = NULL;
 
-#ifdef HAVE_LIBUDEV
-  dev_t devnum = makedev (arg_major, arg_minor);
-  struct udev_device *dev;
-  const char *uuid, *label;
-  static struct udev *udev;
-
-  if (udev == NULL)
-    udev = udev_new ();
+#ifdef HAVE_GUDEV
+  GUdevDeviceNumber devnum = makedev (arg_major, arg_minor);
+  GUdevDevice *device;
 
-  dev = udev_device_new_from_devnum (udev, 'b', devnum);
-  uuid = udev_device_get_property_value (dev, "ID_FS_UUID_ENC");
+  if (g_once_init_enter (&gudev_client))
+    g_once_init_leave (&gudev_client, g_udev_client_new (NULL));
 
-  res = NULL;
-  if (uuid)
-    {
-      res = g_strconcat ("uuid-", uuid, NULL);
-    }
-  else
-    {
-      label = udev_device_get_property_value (dev, "ID_FS_LABEL_ENC");
+  device = g_udev_client_query_by_device_number (gudev_client, G_UDEV_DEVICE_TYPE_BLOCK, devnum);
 
-      if (label)
-        res = g_strconcat ("label-", label, NULL);
-    }
+  if (g_udev_device_has_property (device, "ID_FS_UUID_ENC"))
+    res = g_strconcat ("uuid-", g_udev_device_get_property (device, "ID_FS_UUID_ENC"), NULL);
+  else if (g_udev_device_has_property (device, "ID_FS_LABEL_ENC"))
+    res = g_strconcat ("label-", g_udev_device_get_property (device, "ID_FS_LABEL_ENC"), NULL);
 
-  udev_device_unref (dev);
+  g_clear_object (&device);
 #endif
 
   gvfs_metadata_complete_get_tree_from_device (object, invocation, res ? res : "");
@@ -485,6 +476,9 @@ main (int argc, char *argv[])
     g_object_unref (conn);
   if (loop != NULL)
     g_main_loop_unref (loop);
+#ifdef HAVE_GUDEV
+  g_clear_object (&gudev_client);
+#endif
 
   return 0;
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]