]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
build-goo: make udev support build time optional
authorRay Strode <rstrode@redhat.com>
Thu, 8 Dec 2016 20:37:50 +0000 (15:37 -0500)
committerRay Strode <rstrode@redhat.com>
Fri, 9 Dec 2016 14:09:48 +0000 (09:09 -0500)
Some set ups just use /dev/fb0 and don't need udev.

configure.ac
src/libply-splash-core/ply-device-manager.c

index 66085d114da2d7e9469d8047032e816989f8fc36..0cbe4695889cb868962966fc7bde91bb1c6b475c 100644 (file)
@@ -38,10 +38,19 @@ PKG_CHECK_MODULES(IMAGE, [libpng >= 1.2.16 ])
 AC_SUBST(IMAGE_CFLAGS)
 AC_SUBST(IMAGE_LIBS)
 
-PKG_CHECK_MODULES(UDEV, [libudev]);
+AC_ARG_WITH(udev, AS_HELP_STRING([--with-udev], [Add udev support]),, with_udev=yes)
+PKG_CHECK_MODULES(UDEV, [libudev], have_udev=yes, have_udev=no)
 AC_SUBST(UDEV_CFLAGS)
 AC_SUBST(UDEV_LIBS)
 
+if test "x$with_udev" != "xno" ; then
+  if test "x$have_udev" = "xyes"; then
+    AC_DEFINE(HAVE_UDEV, 1, [Define if have udev support])
+  else
+    AC_MSG_ERROR([libudev is required unless --without-udev is passed])
+  fi
+fi
+
 PLYMOUTH_CFLAGS=""
 PLYMOUTH_LIBS="-lm -lrt -ldl"
 
index 7635780346200dc38ad3d874db2b7dea6c49ddac..88274c657bf6548e68d284d26cb1feb1fbea9e6f 100644 (file)
@@ -30,7 +30,9 @@
 #include <sys/stat.h>
 #include <sys/types.h>
 
+#ifdef HAVE_UDEV
 #include <libudev.h>
+#endif
 
 #include "ply-logger.h"
 #include "ply-event-loop.h"
@@ -41,7 +43,9 @@
 #define SUBSYSTEM_DRM "drm"
 #define SUBSYSTEM_FRAME_BUFFER "graphics"
 
+#ifdef HAVE_UDEV
 static void create_devices_from_udev (ply_device_manager_t *manager);
+#endif
 
 static void create_devices_for_terminal_and_renderer_type (ply_device_manager_t *manager,
                                                            const char           *device_path,
@@ -98,6 +102,57 @@ attach_to_event_loop (ply_device_manager_t *manager,
                                        manager);
 }
 
+static void
+free_displays_for_renderer (ply_device_manager_t *manager,
+                            ply_renderer_t       *renderer)
+{
+        ply_list_node_t *node;
+
+        node = ply_list_get_first_node (manager->pixel_displays);
+        while (node != NULL) {
+                ply_list_node_t *next_node;
+                ply_pixel_display_t *display;
+                ply_renderer_t *display_renderer;
+
+                display = ply_list_node_get_data (node);
+                next_node = ply_list_get_next_node (manager->pixel_displays, node);
+                display_renderer = ply_pixel_display_get_renderer (display);
+
+                if (display_renderer == renderer) {
+                        if (manager->pixel_display_removed_handler != NULL)
+                                manager->pixel_display_removed_handler (manager->event_handler_data, display);
+                        ply_pixel_display_free (display);
+                        ply_list_remove_node (manager->pixel_displays, node);
+
+                }
+
+                node = next_node;
+        }
+}
+
+static void
+free_devices_from_device_path (ply_device_manager_t *manager,
+                               const char           *device_path)
+{
+        char *key = NULL;
+        ply_renderer_t *renderer = NULL;
+
+        ply_hashtable_lookup_full (manager->renderers,
+                                   (void *) device_path,
+                                   (void **) &key,
+                                   (void **) &renderer);
+
+        if (renderer == NULL)
+                return;
+
+        free_displays_for_renderer (manager, renderer);
+
+        ply_hashtable_remove (manager->renderers, (void *) device_path);
+        free (key);
+        ply_renderer_free (renderer);
+}
+
+#ifdef HAVE_UDEV
 static bool
 drm_device_in_use (ply_device_manager_t *manager,
                    const char           *device_path)
@@ -198,56 +253,6 @@ create_devices_for_udev_device (ply_device_manager_t *manager,
         }
 }
 
-static void
-free_displays_for_renderer (ply_device_manager_t *manager,
-                            ply_renderer_t       *renderer)
-{
-        ply_list_node_t *node;
-
-        node = ply_list_get_first_node (manager->pixel_displays);
-        while (node != NULL) {
-                ply_list_node_t *next_node;
-                ply_pixel_display_t *display;
-                ply_renderer_t *display_renderer;
-
-                display = ply_list_node_get_data (node);
-                next_node = ply_list_get_next_node (manager->pixel_displays, node);
-                display_renderer = ply_pixel_display_get_renderer (display);
-
-                if (display_renderer == renderer) {
-                        if (manager->pixel_display_removed_handler != NULL)
-                                manager->pixel_display_removed_handler (manager->event_handler_data, display);
-                        ply_pixel_display_free (display);
-                        ply_list_remove_node (manager->pixel_displays, node);
-
-                }
-
-                node = next_node;
-        }
-}
-
-static void
-free_devices_from_device_path (ply_device_manager_t *manager,
-                               const char           *device_path)
-{
-        char *key = NULL;
-        ply_renderer_t *renderer = NULL;
-
-        ply_hashtable_lookup_full (manager->renderers,
-                                   (void *) device_path,
-                                   (void **) &key,
-                                   (void **) &renderer);
-
-        if (renderer == NULL)
-                return;
-
-        free_displays_for_renderer (manager, renderer);
-
-        ply_hashtable_remove (manager->renderers, (void *) device_path);
-        free (key);
-        ply_renderer_free (renderer);
-}
-
 static void
 free_devices_for_udev_device (ply_device_manager_t *manager,
                               struct udev_device   *device)
@@ -386,6 +391,7 @@ watch_for_udev_events (ply_device_manager_t *manager)
                                  NULL,
                                  manager);
 }
+#endif
 
 static void
 free_terminal (char                 *device,
@@ -477,8 +483,12 @@ ply_device_manager_new (const char                *default_tty,
         manager->pixel_displays = ply_list_new ();
         manager->flags = flags;
 
+#ifdef HAVE_UDEV
         if (!(flags & PLY_DEVICE_MANAGER_FLAGS_IGNORE_UDEV))
                 manager->udev_context = udev_new ();
+#else
+        manager->flags |= PLY_DEVICE_MANAGER_FLAGS_IGNORE_UDEV;
+#endif
 
         attach_to_event_loop (manager, ply_event_loop_get_default ());
 
@@ -493,10 +503,6 @@ ply_device_manager_free (ply_device_manager_t *manager)
         if (manager == NULL)
                 return;
 
-        ply_event_loop_stop_watching_for_timeout (manager->loop,
-                                         (ply_event_loop_timeout_handler_t)
-                                         create_devices_from_udev, manager);
-
         ply_event_loop_stop_watching_for_exit (manager->loop,
                                                (ply_event_loop_exit_handler_t)
                                                detach_from_event_loop,
@@ -508,11 +514,17 @@ ply_device_manager_free (ply_device_manager_t *manager)
         free_renderers (manager);
         ply_hashtable_free (manager->renderers);
 
+#ifdef HAVE_UDEV
+        ply_event_loop_stop_watching_for_timeout (manager->loop,
+                                         (ply_event_loop_timeout_handler_t)
+                                         create_devices_from_udev, manager);
+
         if (manager->udev_monitor != NULL)
                 udev_monitor_unref (manager->udev_monitor);
 
         if (manager->udev_context != NULL)
                 udev_unref (manager->udev_context);
+#endif
 
         free (manager);
 }
@@ -755,6 +767,7 @@ create_devices_from_terminals (ply_device_manager_t *manager)
         return false;
 }
 
+#ifdef HAVE_UDEV
 static void
 create_devices_from_udev (ply_device_manager_t *manager)
 {
@@ -774,6 +787,7 @@ create_devices_from_udev (ply_device_manager_t *manager)
                                                     manager->local_console_terminal,
                                                     PLY_RENDERER_TYPE_NONE);
 }
+#endif
 
 static void
 create_fallback_devices (ply_device_manager_t *manager)
@@ -818,12 +832,14 @@ ply_device_manager_watch_devices (ply_device_manager_t                *manager,
                 return;
         }
 
+#ifdef HAVE_UDEV
         watch_for_udev_events (manager);
         create_devices_for_subsystem (manager, SUBSYSTEM_DRM);
         ply_event_loop_watch_for_timeout (manager->loop,
                                          device_timeout,
                                          (ply_event_loop_timeout_handler_t)
                                          create_devices_from_udev, manager);
+#endif
 }
 
 bool