packages: gimp/gimp.spec, gimp/gimp-udev.patch (NEW) - replace HAL with UDEV

baggins baggins at pld-linux.org
Thu Jul 21 14:34:22 CEST 2011


Author: baggins                      Date: Thu Jul 21 12:34:22 2011 GMT
Module: packages                      Tag: HEAD
---- Log message:
- replace HAL with UDEV

---- Files affected:
packages/gimp:
   gimp.spec (1.333 -> 1.334) , gimp-udev.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: packages/gimp/gimp.spec
diff -u packages/gimp/gimp.spec:1.333 packages/gimp/gimp.spec:1.334
--- packages/gimp/gimp.spec:1.333	Sat Mar 26 10:01:18 2011
+++ packages/gimp/gimp.spec	Thu Jul 21 14:34:17 2011
@@ -25,7 +25,7 @@
 Summary(zh_TW.UTF-8):	[圖像]GNU圖象處理工具
 Name:		gimp
 Version:	2.6.11
-Release:	4
+Release:	4.1
 Epoch:		1
 License:	GPL v2+
 Group:		X11/Applications/Graphics
@@ -34,6 +34,7 @@
 Patch0:		%{name}-home_etc.patch
 Patch1:		%{name}-desktop.patch
 Patch2:		%{name}-gcc4.patch
+Patch3:		%{name}-udev.patch
 URL:		http://www.gimp.org/
 %{?with_aalib:BuildRequires:	aalib-devel}
 BuildRequires:	alsa-lib-devel >= 1.0.11
@@ -50,7 +51,6 @@
 BuildRequires:	gtk+2-devel >= 2:2.12.5
 BuildRequires:	gtk-doc >= 1.6
 %{?with_webkit:BuildRequires:	gtk-webkit-devel >= 1.0}
-BuildRequires:	hal-devel >= 0.5.7
 BuildRequires:	intltool >= 0.36.3
 BuildRequires:	iso-codes
 BuildRequires:	lcms-devel >= 1.16
@@ -68,6 +68,7 @@
 BuildRequires:	poppler-glib-devel >= 0.6
 BuildRequires:	rpm-pythonprov
 BuildRequires:	rpmbuild(macros) >= 1.268
+BuildRequires:	udev-glib-devel
 BuildRequires:	xorg-lib-libXext-devel
 BuildRequires:	xorg-lib-libXfixes-devel
 BuildRequires:	xorg-lib-libXmu-devel
@@ -322,6 +323,7 @@
 %patch0 -p1
 %patch1 -p1
 %patch2 -p1
+%patch3 -p1
 
 %build
 rm acinclude.m4 m4macros/gtk-doc.m4
@@ -535,6 +537,9 @@
 All persons listed below can be reached at <cvs_login>@pld-linux.org
 
 $Log$
+Revision 1.334  2011/07/21 12:34:17  baggins
+- replace HAL with UDEV
+
 Revision 1.333  2011/03/26 09:01:18  qboosh
 - ca at valencia locale is supported now (via LANGUAGE)
 

================================================================
Index: packages/gimp/gimp-udev.patch
diff -u /dev/null packages/gimp/gimp-udev.patch:1.1
--- /dev/null	Thu Jul 21 14:34:22 2011
+++ packages/gimp/gimp-udev.patch	Thu Jul 21 14:34:17 2011
@@ -0,0 +1,564 @@
+From f1bb40166b1061f630fab615f658310c25abf423 Mon Sep 17 00:00:00 2001
+From: Michael Natterer <mitch at gimp.org>
+Date: Thu, 23 Jun 2011 14:30:58 +0000
+Subject: Bug 592364 - Use GUdev rather than deprecated HAL for GIMP
+
+GIMP was probably the only user of libhal on most systems, this had
+to stop. Ported the linux-input module to GUdev.
+---
+diff --git a/configure.in b/configure.in
+index 1297e0c..f4c1457 100644
+--- a/configure.in
++++ b/configure.in
+@@ -58,7 +58,7 @@ m4_define([pygtk_required_version], [2.10.4])
+ m4_define([poppler_required_version], [0.12.4])
+ m4_define([libcurl_required_version], [7.15.1])
+ m4_define([dbus_glib_required_version], [0.70])
+-m4_define([libhal_required_version], [0.5.7])
++m4_define([libgudev_required_version], [167])
+ m4_define([exif_required_version], [0.6.15])
+ m4_define([lcms_required_version], [1.16])
+ m4_define([libpng_required_version], [1.2.37])
+@@ -1623,27 +1623,27 @@ if test "x$have_dbus_glib" = xyes; then
+ fi
+ 
+ 
+-###############################################
+-# Check for libhal (Hardware Abstraction Layer)
+-###############################################
++####################
++# Check for libgudev
++####################
+ 
+-AC_ARG_WITH(hal,   [  --without-hal           build without HAL support])
++AC_ARG_WITH(gudev, [  --without-gudev        build without GUdev support])
+ 
+-have_libhal=no
++have_libgudev=no
+ 
+-if test "x$with_hal" = xno; then
+-  have_libhal="no (disabled)"
++if test "x$with_gudev" = xno; then
++  have_libgudev="no (disabled)"
+ fi
+ 
+ if test "x$have_linux_input" = xyes && test "x$have_dbus_glib" = xyes &&
+-   test "x$with_hal" != xno; then
+-  PKG_CHECK_MODULES(HAL, hal >= libhal_required_version,
+-    have_libhal=yes,
+-    have_libhal="no (libhal not found)")
++   test "x$with_gudev" != xno; then
++  PKG_CHECK_MODULES(GUDEV, gudev-1.0 >= libgudev_required_version,
++    have_libgudev=yes,
++    have_libgudev="no (libgudev not found)")
+ fi
+ 
+-if test "x$have_libhal" = xyes; then
+-  AC_DEFINE(HAVE_LIBHAL, 1, [Define to 1 if libhal is available])
++if test "x$have_libgudev" = xyes; then
++  AC_DEFINE(HAVE_LIBGUDEV, 1, [Define to 1 if libgudev is available])
+ fi
+ 
+ 
+@@ -2304,7 +2304,7 @@ Plug-In Features:
+ 
+ Optional Modules:
+   ALSA (MIDI Input):   $have_alsa
+-  Linux Input:         $have_linux_input (HAL support: $have_libhal)
++  Linux Input:         $have_linux_input (GUdev support: $have_libgudev)
+   DirectInput (Win32): $have_dx_dinput
+   Color Correction:    $have_lcms
+   Soft Proof:          $have_lcms
+diff --git a/modules/Makefile.am b/modules/Makefile.am
+index 4dfced7..ab476a3 100644
+--- a/modules/Makefile.am
++++ b/modules/Makefile.am
+@@ -104,13 +104,13 @@ libdisplay_filter_proof_la_LDFLAGS = -avoid-version -module $(no_undefined)
+ libdisplay_filter_proof_la_LIBADD = $(display_filter_libadd) $(LCMS_LIBS)
+ 
+ libcontroller_linux_input_la_SOURCES = \
+-	gimpinputdevicestore-hal.c	\
++	gimpinputdevicestore-gudev.c	\
+ 	gimpinputdevicestore.h		\
+ 	controller-linux-input.c
+-libcontroller_linux_input_la_CFLAGS = $(DBUS_GLIB_CFLAGS) $(HAL_CFLAGS)
++libcontroller_linux_input_la_CFLAGS = $(GUDEV_CFLAGS)
+ libcontroller_linux_input_la_LDFLAGS = -avoid-version -module $(no_undefined)
+ libcontroller_linux_input_la_LIBADD = \
+-	$(controller_libadd) $(DBUS_GLIB_LIBS) $(HAL_LIBS)
++	$(controller_libadd) $(GUDEV_LIBS)
+ 
+ libcontroller_dx_dinput_la_SOURCES = \
+ 	gimpinputdevicestore-dx.c	\
+diff --git a/modules/controller-linux-input.c b/modules/controller-linux-input.c
+index b7f69e0..fe3f5e8 100644
+--- a/modules/controller-linux-input.c
++++ b/modules/controller-linux-input.c
+@@ -218,7 +218,7 @@ controller_linux_input_class_init (ControllerLinuxInputClass *klass)
+                                                         _("The name of the device to read Linux Input events from."),
+                                                         NULL,
+                                                         GIMP_CONFIG_PARAM_FLAGS));
+-#ifdef HAVE_LIBHAL
++#ifdef HAVE_LIBGUDEV
+   g_object_class_install_property (object_class, PROP_DEVICE_STORE,
+                                    g_param_spec_object ("device-values",
+                                                         NULL, NULL,
+@@ -480,11 +480,11 @@ linux_input_get_device_info (ControllerLinuxInput *controller,
+ 
+ static void
+ linux_input_device_changed (ControllerLinuxInput *controller,
+-                            const gchar          *udi)
++                            const gchar          *identifier)
+ {
+-  if (controller->device && strcmp (udi, controller->device) == 0)
++  if (controller->device && strcmp (identifier, controller->device) == 0)
+     {
+-      linux_input_set_device (controller, udi);
++      linux_input_set_device (controller, identifier);
+       g_object_notify (G_OBJECT (controller), "device");
+     }
+ }
+diff --git a/modules/gimpinputdevicestore-hal.c b/modules/gimpinputdevicestore-gudev.c
+index 06770dd..4c703bc 100644
+--- a/modules/gimpinputdevicestore-hal.c
++++ b/modules/gimpinputdevicestore-gudev.c
+@@ -1,9 +1,10 @@
+ /* GIMP - The GNU Image Manipulation Program
+  * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+  *
+- * gimpinputdevicestore-hal.c
+- * Input device store based on HAL, the hardware abstraction layer.
++ * gimpinputdevicestore-gudev.c
++ * Input device store based on GUdev, the hardware abstraction layer.
+  * Copyright (C) 2007  Sven Neumann <sven at gimp.org>
++ *               2011  Michael Natterer <mitch at gimp.org>
+  *
+  * This program is free software: you can redistribute it and/or modify
+  * it under the terms of the GNU General Public License as published by
+@@ -30,17 +31,16 @@
+ #include "gimpinputdevicestore.h"
+ 
+ 
+-#ifdef HAVE_LIBHAL
++#ifdef HAVE_LIBGUDEV
+ 
+-#include <dbus/dbus-glib.h>
+-#include <dbus/dbus-glib-lowlevel.h>
+-#include <hal/libhal.h>
++#include <gudev/gudev.h>
+ 
+ 
+ enum
+ {
+-  COLUMN_UDI,
++  COLUMN_IDENTIFIER,
+   COLUMN_LABEL,
++  COLUMN_DEVICE_FILE,
+   NUM_COLUMNS
+ };
+ 
+@@ -60,10 +60,10 @@ typedef struct _GimpInputDeviceStoreClass GimpInputDeviceStoreClass;
+ 
+ struct _GimpInputDeviceStore
+ {
+-  GtkListStore    parent_instance;
++  GtkListStore  parent_instance;
+ 
+-  LibHalContext  *context;
+-  GError         *error;
++  GUdevClient  *client;
++  GError       *error;
+ };
+ 
+ 
+@@ -72,23 +72,23 @@ struct _GimpInputDeviceStoreClass
+   GtkListStoreClass   parent_class;
+ 
+   void  (* device_added)   (GimpInputDeviceStore *store,
+-                            const gchar          *udi);
++                            const gchar          *identifier);
+   void  (* device_removed) (GimpInputDeviceStore *store,
+-                            const gchar          *udi);
++                            const gchar          *identifier);
+ };
+ 
+ 
+ static void      gimp_input_device_store_finalize   (GObject              *object);
+ 
+ static gboolean  gimp_input_device_store_add        (GimpInputDeviceStore *store,
+-                                                     const gchar          *udi);
++                                                     GUdevDevice          *device);
+ static gboolean  gimp_input_device_store_remove     (GimpInputDeviceStore *store,
+-                                                     const gchar          *udi);
++                                                     GUdevDevice          *device);
+ 
+-static void      gimp_input_device_store_device_added   (LibHalContext *ctx,
+-                                                         const char    *udi);
+-static void      gimp_input_device_store_device_removed (LibHalContext *ctx,
+-                                                         const char    *udi);
++static void      gimp_input_device_store_uevent     (GUdevClient          *client,
++                                                     const gchar          *action,
++                                                     GUdevDevice          *device,
++                                                     GimpInputDeviceStore *store);
+ 
+ 
+ G_DEFINE_DYNAMIC_TYPE (GimpInputDeviceStore, gimp_input_device_store,
+@@ -140,61 +140,31 @@ gimp_input_device_store_class_finalize (GimpInputDeviceStoreClass *klass)
+ static void
+ gimp_input_device_store_init (GimpInputDeviceStore *store)
+ {
+-  GType            types[] = { G_TYPE_STRING, G_TYPE_STRING };
+-  DBusGConnection *connection;
+-  DBusError        dbus_error;
++  GType        types[]      = { G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING };
++  const gchar *subsystems[] = { "input", NULL };
++  GList       *devices;
++  GList       *list;
+ 
+   gtk_list_store_set_column_types (GTK_LIST_STORE (store),
+                                    G_N_ELEMENTS (types), types);
+ 
+-  connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &store->error);
++  store->client = g_udev_client_new (subsystems);
+ 
+-  if (! connection)
+-    return;
++  devices = g_udev_client_query_by_subsystem (store->client, "input");
+ 
+-  store->context = libhal_ctx_new ();
+-
+-  libhal_ctx_set_dbus_connection (store->context,
+-                                  dbus_g_connection_get_connection (connection));
+-  dbus_g_connection_unref (connection);
+-
+-  dbus_error_init (&dbus_error);
+-
+-  if (libhal_ctx_init (store->context, &dbus_error))
++  for (list = devices; list; list = g_list_next (list))
+     {
+-      char **devices;
+-      int    i, num_devices;
+-
+-      devices = libhal_find_device_by_capability (store->context, "input",
+-                                                  &num_devices, NULL);
+-
+-      for (i = 0; i < num_devices; i++)
+-        gimp_input_device_store_add (store, devices[i]);
++      GUdevDevice *device = list->data;
+ 
+-      libhal_free_string_array (devices);
+-
+-      libhal_ctx_set_user_data (store->context, store);
+-
+-      libhal_ctx_set_device_added (store->context,
+-                                   gimp_input_device_store_device_added);
+-      libhal_ctx_set_device_removed (store->context,
+-                                     gimp_input_device_store_device_removed);
++      gimp_input_device_store_add (store, device);
++      g_object_unref (device);
+     }
+-  else
+-    {
+-      if (dbus_error_is_set (&dbus_error))
+-        {
+-          dbus_set_g_error (&store->error, &dbus_error);
+-          dbus_error_free (&dbus_error);
+-        }
+-      else
+-        {
+-          g_set_error (&store->error, 0, 0, "Unable to connect to hald");
+-        }
+ 
+-      libhal_ctx_free (store->context);
+-      store->context = NULL;
+-    }
++  g_list_free (devices);
++
++  g_signal_connect (store->client, "uevent",
++                    G_CALLBACK (gimp_input_device_store_uevent),
++                    store);
+ }
+ 
+ static void
+@@ -204,11 +172,10 @@ gimp_input_device_store_finalize (GObject *object)
+ {
+   GimpInputDeviceStore *store = GIMP_INPUT_DEVICE_STORE (object);
+ 
+-  if (store->context)
++  if (store->client)
+     {
+-      libhal_ctx_shutdown (store->context, NULL);
+-      libhal_ctx_free (store->context);
+-      store->context = NULL;
++      g_object_unref (store->client);
++      store->client = NULL;
+     }
+ 
+   if (store->error)
+@@ -222,7 +189,7 @@ gimp_input_device_store_finalize (GObject *object)
+ 
+ static gboolean
+ gimp_input_device_store_lookup (GimpInputDeviceStore *store,
+-                                const gchar          *udi,
++                                const gchar          *identifier,
+                                 GtkTreeIter          *iter)
+ {
+   GtkTreeModel *model = GTK_TREE_MODEL (store);
+@@ -235,11 +202,11 @@ gimp_input_device_store_lookup (GimpInputDeviceStore *store,
+     {
+       const gchar *str;
+ 
+-      gtk_tree_model_get_value (model, iter, COLUMN_UDI, &value);
++      gtk_tree_model_get_value (model, iter, COLUMN_IDENTIFIER, &value);
+ 
+       str = g_value_get_string (&value);
+ 
+-      if (strcmp (str, udi) == 0)
++      if (strcmp (str, identifier) == 0)
+         {
+           g_value_unset (&value);
+           break;
+@@ -254,8 +221,9 @@ gimp_input_device_store_lookup (GimpInputDeviceStore *store,
+ /*  insert in alphabetic order  */
+ static void
+ gimp_input_device_store_insert (GimpInputDeviceStore *store,
+-                                const gchar          *udi,
+-                                const gchar          *label)
++                                const gchar          *identifier,
++                                const gchar          *label,
++                                const gchar          *device_file)
+ {
+   GtkTreeModel *model = GTK_TREE_MODEL (store);
+   GtkTreeIter   iter;
+@@ -283,72 +251,90 @@ gimp_input_device_store_insert (GimpInputDeviceStore *store,
+     }
+ 
+   gtk_list_store_insert_with_values (GTK_LIST_STORE (store), &iter, pos,
+-                                     COLUMN_UDI,   udi,
+-                                     COLUMN_LABEL, label,
++                                     COLUMN_IDENTIFIER,  identifier,
++                                     COLUMN_LABEL,       label,
++                                     COLUMN_DEVICE_FILE, device_file,
+                                      -1);
+ }
+ 
+ static gboolean
+ gimp_input_device_store_add (GimpInputDeviceStore *store,
+-                             const gchar          *udi)
++                             GUdevDevice          *device)
+ {
+-  gboolean   added = FALSE;
+-  char     **caps;
+-  gint       i;
+-
+-  caps = libhal_device_get_property_strlist (store->context,
+-                                             udi, "info.capabilities",
+-                                             NULL);
+-
+-  for (i = 0; caps && caps[i] && !added; i++)
++  const gchar *device_file = g_udev_device_get_device_file (device);
++#if 0
++  const gchar *path        = g_udev_device_get_sysfs_path (device);
++#endif
++  const gchar *name        = g_udev_device_get_sysfs_attr (device, "name");
++
++#if 0
++  g_printerr ("\ndevice added: %s, %s, %s\n",
++              name ? name : "NULL",
++              device_file ? device_file : "NULL",
++              path);
++#endif
++
++  if (device_file)
+     {
+-      char *str;
++      if (name)
++        {
++          GtkTreeIter unused;
++
++          if (! gimp_input_device_store_lookup (store, name, &unused))
++            {
++              gimp_input_device_store_insert (store, name, name, device_file);
+ 
+-      if (strcmp (caps[i], "input") != 0)
+-        continue;
++              g_signal_emit (store, store_signals[DEVICE_ADDED], 0,
++                             name);
+ 
+-      /*  skip "PC Speaker" (why is this an input device at all?)  */
+-      str = libhal_device_get_property_string (store->context,
+-                                               udi, "input.physical_device",
+-                                               NULL);
+-      if (str)
++              return TRUE;
++            }
++        }
++      else
+         {
+-          gboolean speaker =
+-            strcmp (str, "/org/freedesktop/Hal/devices/platform_pcspkr") == 0;
++          GUdevDevice *parent = g_udev_device_get_parent (device);
++          const gchar *parent_name;
+ 
+-          libhal_free_string (str);
++          parent_name = g_udev_device_get_sysfs_attr (parent, "name");
+ 
+-          if (speaker)
+-            continue;
+-        }
++          if (parent_name)
++            {
++              GtkTreeIter unused;
+ 
+-      str = libhal_device_get_property_string (store->context,
+-                                               udi, "input.product",
+-                                               NULL);
+-      if (str)
+-        {
+-          gimp_input_device_store_insert (store, udi, str);
++              if (! gimp_input_device_store_lookup (store, parent_name, &unused))
++                {
++                  gimp_input_device_store_insert (store, parent_name, parent_name,
++                                                  device_file);
++
++                  g_signal_emit (store, store_signals[DEVICE_ADDED], 0,
++                                 parent_name);
+ 
+-          libhal_free_string (str);
++                  g_object_unref (parent);
++                  return TRUE;
++                }
++            }
+ 
+-          added = TRUE;
++          g_object_unref (parent);
++          return FALSE;
+         }
+     }
+ 
+-  libhal_free_string_array (caps);
+-
+-  return added;
++  return FALSE;
+ }
+ 
+ static gboolean
+ gimp_input_device_store_remove (GimpInputDeviceStore *store,
+-                                const gchar          *udi)
++                                GUdevDevice          *device)
+ {
++  const gchar *name = g_udev_device_get_sysfs_attr (device, "name");
+   GtkTreeIter  iter;
+ 
+-  if (gimp_input_device_store_lookup (store, udi, &iter))
++  if (gimp_input_device_store_lookup (store, name, &iter))
+     {
+       gtk_list_store_remove (GTK_LIST_STORE (store), &iter);
++
++      g_signal_emit (store, store_signals[DEVICE_REMOVED], 0, name);
++
+       return TRUE;
+     }
+ 
+@@ -356,26 +342,18 @@ gimp_input_device_store_remove (GimpInputDeviceStore *store,
+ }
+ 
+ static void
+-gimp_input_device_store_device_added (LibHalContext *ctx,
+-                                      const char    *udi)
++gimp_input_device_store_uevent (GUdevClient          *client,
++                                const gchar          *action,
++                                GUdevDevice          *device,
++                                GimpInputDeviceStore *store)
+ {
+-  GimpInputDeviceStore *store = libhal_ctx_get_user_data (ctx);
+-
+-  if (gimp_input_device_store_add (store, udi))
++  if (! strcmp (action, "add"))
+     {
+-      g_signal_emit (store, store_signals[DEVICE_ADDED], 0, udi);
++      gimp_input_device_store_add (store, device);
+     }
+-}
+-
+-static void
+-gimp_input_device_store_device_removed (LibHalContext *ctx,
+-                                        const char    *udi)
+-{
+-  GimpInputDeviceStore *store = libhal_ctx_get_user_data (ctx);
+-
+-  if (gimp_input_device_store_remove (store, udi))
++  else if (! strcmp (action, "remove"))
+     {
+-      g_signal_emit (store, store_signals[DEVICE_REMOVED], 0, udi);
++      gimp_input_device_store_remove (store, device);
+     }
+ }
+ 
+@@ -387,30 +365,26 @@ gimp_input_device_store_new (void)
+ 
+ gchar *
+ gimp_input_device_store_get_device_file (GimpInputDeviceStore *store,
+-                                         const gchar          *udi)
++                                         const gchar          *identifier)
+ {
+   GtkTreeIter iter;
+ 
+   g_return_val_if_fail (GIMP_IS_INPUT_DEVICE_STORE (store), NULL);
+-  g_return_val_if_fail (udi != NULL, NULL);
++  g_return_val_if_fail (identifier != NULL, NULL);
+ 
+-  if (! store->context)
++  if (! store->client)
+     return NULL;
+ 
+-  if (gimp_input_device_store_lookup (store, udi, &iter))
++  if (gimp_input_device_store_lookup (store, identifier, &iter))
+     {
+-      char *str = libhal_device_get_property_string (store->context,
+-                                                     udi, "input.device",
+-                                                     NULL);
+-
+-      if (str)
+-        {
+-          gchar *retval = g_strdup (str);
++      GtkTreeModel *model = GTK_TREE_MODEL (store);
++      gchar        *device_file;
+ 
+-          libhal_free_string (str);
++      gtk_tree_model_get (model, &iter,
++                          COLUMN_DEVICE_FILE, &device_file,
++                          -1);
+ 
+-          return retval;
+-        }
++      return device_file;
<<Diff was trimmed, longer than 597 lines>>

---- CVS-web:
    http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/gimp/gimp.spec?r1=1.333&r2=1.334&f=u



More information about the pld-cvs-commit mailing list