drm: reduce minimum build requirements This patch adds the respective configure options to make it possible to disable libdrm_intel, libdrm_radeon, libdrm_nouveau independently from each other. NOTE: The patch is based on work of Lucian Muresan that fixes bug report: https://bugs.freedesktop.org/show_bug.cgi?id=29804 This one is adjusted to version 0.8.3 which doesn't support libkms yet. --- diff -Naur plymouth-0.8.3/configure.ac plymouth-0.8.3.new/configure.ac --- plymouth-0.8.3/configure.ac 2010-05-06 19:32:20.000000000 +0200 +++ plymouth-0.8.3.new/configure.ac 2011-02-03 18:45:11.749557708 +0100 @@ -56,49 +56,150 @@ AC_SUBST(GTK_CFLAGS) AC_SUBST(GTK_LIBS) -PKG_CHECK_MODULES(DRM, [libdrm libdrm_intel libdrm_radeon libdrm_nouveau]) +AC_ARG_ENABLE(libdrm_intel, AS_HELP_STRING([--enable-libdrm_intel],[enable building with libdrm_intel support]),enable_libdrm_intel=$enableval,enable_libdrm_intel=yes) +AM_CONDITIONAL(ENABLE_LIBDRM_INTEL, [test "$enable_libdrm_intel" = yes]) -OLD_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS $DRM_CFLAGS" -AC_MSG_CHECKING([if i915_drm.h, radeon_drm.h and nouveau_drm.h are in include path]) -AC_COMPILE_IFELSE(AC_LANG_PROGRAM( -[[ - #include - #include - #include "i915_drm.h" - #include "radeon_drm.h" - #include "nouveau_drm.h" -]],[[]]),[found_drm_kernel_headers=yes],[found_drm_kernel_headers=no]) - -if test "$found_drm_kernel_headers" = "yes"; then - AC_MSG_RESULT([yes]) -else - AC_MSG_RESULT([no]) - AC_MSG_CHECKING([if we can find them anyway]) +if test x$enable_libdrm_intel = xyes; then + PKG_CHECK_MODULES(DRM_INTEL, [libdrm libdrm_intel]) + OLD_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $DRM_INTEL_CFLAGS" + AC_MSG_CHECKING([if i915_drm.h is in include path]) + AC_COMPILE_IFELSE(AC_LANG_PROGRAM( + [[ + #include + #include + #include "i915_drm.h" + ]],[[]]),[found_drm_intel_kernel_headers=yes],[found_drm_intel_kernel_headers=no]) + + if test "$found_drm_intel_kernel_headers" = "yes"; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + AC_MSG_CHECKING([if we can find them anyway]) + + MORE_DRM_CFLAGS="-I`$PKG_CONFIG --variable includedir libdrm`/drm" + CFLAGS="$CFLAGS $MORE_DRM_CFLAGS" + AC_COMPILE_IFELSE(AC_LANG_PROGRAM( + [[ + #include + #include + #include "i915_drm.h" + ]],[[]]),[found_drm_intel_kernel_headers=yes],[found_drm_intel_kernel_headers=no]) + + if test "$found_drm_intel_kernel_headers" = "yes"; then + AC_MSG_RESULT([yes]) + DRM_INTEL_CFLAGS="$DRM_INTEL_CFLAGS $MORE_DRM_CFLAGS" + else + AC_MSG_RESULT([no]) + AC_MSG_ERROR([Could not find i915_drm.h]) + fi + fi + + AC_SUBST(DRM_INTEL_CFLAGS) + AC_SUBST(DRM_INTEL_LIBS) + AC_DEFINE(PLY_ENABLE_LIBDRM_INTEL, 1, [Enable support for libdrm_intel driver]) +fi + +AC_ARG_ENABLE(libdrm_radeon, AS_HELP_STRING([--enable-libdrm_radeon],[enable building with libdrm_radeon support]),enable_libdrm_radeon=$enableval,enable_libdrm_radeon=yes) +AM_CONDITIONAL(ENABLE_LIBDRM_RADEON, [test "$enable_libdrm_radeon" = yes]) - MORE_DRM_CFLAGS="-I`$PKG_CONFIG --variable includedir libdrm`/drm" - CFLAGS="$CFLAGS $MORE_DRM_CFLAGS" +if test x$enable_libdrm_radeon = xyes; then + PKG_CHECK_MODULES(DRM_RADEON, [libdrm libdrm_radeon]) + OLD_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $DRM_RADEON_CFLAGS" + AC_MSG_CHECKING([if radeon_drm.h is in include path]) AC_COMPILE_IFELSE(AC_LANG_PROGRAM( [[ #include #include #include "i915_drm.h" #include "radeon_drm.h" + ]],[[]]),[found_drm_radeon_kernel_headers=yes],[found_drm_radeon_kernel_headers=no]) + + if test "$found_drm_radeon_kernel_headers" = "yes"; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + AC_MSG_CHECKING([if we can find them anyway]) + + MORE_DRM_CFLAGS="-I`$PKG_CONFIG --variable includedir libdrm`/drm" + CFLAGS="$CFLAGS $MORE_DRM_RADEON_CFLAGS" + AC_COMPILE_IFELSE(AC_LANG_PROGRAM( + [[ + #include + #include + #include "radeon_drm.h" + ]],[[]]),[found_drm_radeon_kernel_headers=yes],[found_drm_radeon_kernel_headers=no]) + + if test "$found_drm_radeon_kernel_headers" = "yes"; then + AC_MSG_RESULT([yes]) + DRM_RADEON_CFLAGS="$DRM_RADEON_CFLAGS $MORE_DRM_CFLAGS" + else + AC_MSG_RESULT([no]) + AC_MSG_ERROR([Could not find radeon_drm.h]) + fi + fi + + AC_SUBST(DRM_RADEON_CFLAGS) + AC_SUBST(DRM_RADEON_LIBS) + AC_DEFINE(PLY_ENABLE_LIBDRM_RADEON, 1, [Enable support for libdrm_radeon driver]) +fi + +AC_ARG_ENABLE(libdrm_nouveau, AS_HELP_STRING([--enable-libdrm_nouveau],[enable building with libdrm_nouveau support]),enable_libdrm_nouveau=$enableval,enable_libdrm_nouveau=yes) +AM_CONDITIONAL(ENABLE_LIBDRM_NOUVEAU, [test "$enable_libdrm_nouveau" = yes]) + +if test x$enable_libdrm_nouveau = xyes; then + PKG_CHECK_MODULES(DRM_NOUVEAU, [libdrm libdrm_nouveau]) + OLD_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $DRM_NOUVEAU_CFLAGS" + AC_MSG_CHECKING([if nouveau_drm.h is in include path]) + AC_COMPILE_IFELSE(AC_LANG_PROGRAM( + [[ + #include + #include #include "nouveau_drm.h" - ]],[[]]),[found_drm_kernel_headers=yes],[found_drm_kernel_headers=no]) + ]],[[]]),[found_drm_nouveau_kernel_headers=yes],[found_drm_nouveau_kernel_headers=no]) - if test "$found_drm_kernel_headers" = "yes"; then + if test "$found_drm_nouveau_kernel_headers" = "yes"; then AC_MSG_RESULT([yes]) DRM_CFLAGS="$DRM_CFLAGS $MORE_DRM_CFLAGS" else AC_MSG_RESULT([no]) - AC_MSG_ERROR([Could not find i915_drm.h, radeon_drm.h and/or nouveau_drm.h]) + AC_MSG_CHECKING([if we can find them anyway]) + + MORE_DRM_CFLAGS="-I`$PKG_CONFIG --variable includedir libdrm`/drm" + CFLAGS="$CFLAGS $MORE_DRM_CFLAGS" + AC_COMPILE_IFELSE(AC_LANG_PROGRAM( + [[ + #include + #include + #include "nouveau_drm.h" + ]],[[]]),[found_drm_nouveau_kernel_headers=yes],[found_drm_nouveau_kernel_headers=no]) + + if test "$found_drm_nouveau_kernel_headers" = "yes"; then + AC_MSG_RESULT([yes]) + DRM_NOUVEAU_CFLAGS="$DRM_NOUVEAU_CFLAGS $MORE_DRM_CFLAGS" + else + AC_MSG_RESULT([no]) + AC_MSG_ERROR([Could not find nouveau_drm.h]) + fi fi + + AC_SUBST(DRM_NOUVEAU_CFLAGS) + AC_SUBST(DRM_NOUVEAU_LIBS) + AC_DEFINE(PLY_ENABLE_LIBDRM_NOUVEAU, 1, [Enable support for libdrm_nouveau driver]) fi -CFLAGS="$OLD_CFLAGS" + +DRM_CFLAGS="$DRM_INTEL_CFLAGS $DRM_RADEON_CFLAGS $DRM_NOUVEAU_CFLAGS" +DRM_LIBS="$DRM_INTEL_LIBS $DRM_RADEON_LIBS $DRM_NOUVEAU_LIBS" AC_SUBST(DRM_CFLAGS) AC_SUBST(DRM_LIBS) +AM_CONDITIONAL(ENABLE_DRM_RENDERER, + [test x$enable_libdrm_intel = xyes \ + -o x$enable_libdrm_radeon = xyes \ + -o x$enable_libdrm_nouveau = xyes]) + AC_ARG_ENABLE(tracing, AS_HELP_STRING([--enable-tracing],[enable verbose tracing code]),enable_tracing=$enableval,enable_tracing=yes) if test x$enable_tracing = xyes; then diff -Naur plymouth-0.8.3/scripts/plymouth-populate-initrd.in plymouth-0.8.3.new/scripts/plymouth-populate-initrd.in --- plymouth-0.8.3/scripts/plymouth-populate-initrd.in 2010-05-06 19:32:20.000000000 +0200 +++ plymouth-0.8.3.new/scripts/plymouth-populate-initrd.in 2011-02-03 19:14:06.316946754 +0100 @@ -97,7 +97,7 @@ inst ${PLYMOUTH_PLUGIN_PATH}/${PLYMOUTH_MODULE_NAME}.so $INITRDDIR -inst ${PLYMOUTH_PLUGIN_PATH}/renderers/drm.so $INITRDDIR +[ -f "${PLYMOUTH_PLUGIN_PATH}/renderers/drm.so" ] && inst ${PLYMOUTH_PLUGIN_PATH}/renderers/drm.so $INITRDDIR inst ${PLYMOUTH_PLUGIN_PATH}/renderers/frame-buffer.so $INITRDDIR if [ -d ${PLYMOUTH_DATADIR}/plymouth/themes/${PLYMOUTH_THEME_NAME} ]; then diff -Naur plymouth-0.8.3/scripts/plymouth-populate-initrd.in.orig plymouth-0.8.3.new/scripts/plymouth-populate-initrd.in.orig --- plymouth-0.8.3/scripts/plymouth-populate-initrd.in.orig 1970-01-01 01:00:00.000000000 +0100 +++ plymouth-0.8.3.new/scripts/plymouth-populate-initrd.in.orig 2010-05-06 19:32:20.000000000 +0200 @@ -0,0 +1,114 @@ +#!/bin/bash + +[ -z "$DESTDIR" ] || exit 0 + +[ -z "$PLYMOUTH_LIBEXECDIR" ] && PLYMOUTH_LIBEXECDIR="@PLYMOUTH_LIBEXECDIR@" +[ -z "$PLYMOUTH_DATADIR" ] && PLYMOUTH_DATADIR="@PLYMOUTH_DATADIR@" +[ -z "$PLYMOUTH_PLUGIN_PATH" ] && PLYMOUTH_PLUGIN_PATH="$(plymouth --get-splash-plugin-path)" +[ -z "$PLYMOUTH_LOGO_FILE" ] && PLYMOUTH_LOGO_FILE="@logofile@" +[ -z "$PLYMOUTH_THEME_NAME" ] && PLYMOUTH_THEME_NAME=$(plymouth-set-default-theme) +[ -z "$PLYMOUTH_CONFDIR" ] && PLYMOUTH_CONFDIR="@PLYMOUTH_CONF_DIR@" +[ -z "$PLYMOUTH_POLICYDIR" ] && PLYMOUTH_POLICYDIR="@PLYMOUTH_POLICY_DIR@" + +if [ -z "$PLYMOUTH_POPULATE_SOURCE_FUNCTIONS" ]; then + + if [ -f "${PLYMOUTH_LIBEXECDIR}/initrd-functions" ]; then + PLYMOUTH_POPULATE_SOURCE_FUNCTIONS="${PLYMOUTH_LIBEXECDIR}/initrd-functions" + fi + + if [ -f "${PLYMOUTH_DATADIR}/dracut/dracut-functions" ]; then + PLYMOUTH_POPULATE_SOURCE_FUNCTIONS="${PLYMOUTH_DATADIR}/dracut/dracut-functions" + fi +fi + +if [ -n "$PLYMOUTH_POPULATE_SOURCE_FUNCTIONS" ]; then + source $PLYMOUTH_POPULATE_SOURCE_FUNCTIONS +fi + +if [ " $(type -t inst) " != " function " ]; then + echo "Need 'inst' function, try setting PLYMOUTH_POPULATE_SOURCE_FUNCTIONS to a file that defines it" 1>&2 + exit 1 +fi + +if [ " $(type -t set_verbose) " != " function " ]; then + function set_verbose { true; } +fi + +function usage() { + local output="/dev/stdout" + local rc=0 + if [ "$1" == "error" ]; then + output="/dev/stderr" + rc=1 + fi + + echo "usage: plymouth [ --verbose | -v ] { --targetdir | -t } " > $output + exit $rc +} + +verbose=false +INITRDDIR="" +while [ $# -gt 0 ]; do + case $1 in + --verbose|-v) + verbose=true + ;; + --targetdir|-t) + shift + INITRDDIR="$1" + ;; + --help|-h) + usage normal + ;; + *) + usage error + break + ;; + esac + shift +done +set_verbose $verbose || : + +[ -z "$INITRDDIR" ] && usage error + +mkdir -p ${INITRDDIR}${PLYMOUTH_DATADIR}/plymouth/themes +inst /sbin/plymouthd $INITRDDIR /bin/plymouthd +inst /bin/plymouth $INITRDDIR +inst ${PLYMOUTH_DATADIR}/plymouth/themes/text/text.plymouth $INITRDDIR +inst ${PLYMOUTH_PLUGIN_PATH}/text.so $INITRDDIR +inst ${PLYMOUTH_DATADIR}/plymouth/themes/details/details.plymouth $INITRDDIR +inst ${PLYMOUTH_PLUGIN_PATH}/details.so $INITRDDIR +inst ${PLYMOUTH_LOGO_FILE} $INITRDDIR +inst @RELEASE_FILE@ $INITRDDIR +inst ${PLYMOUTH_POLICYDIR}/plymouthd.defaults $INITRDDIR +inst ${PLYMOUTH_CONFDIR}/plymouthd.conf $INITRDDIR + +if [ -z "$PLYMOUTH_THEME_NAME" ]; then + echo "No default plymouth plugin is set" > /dev/stderr + exit 1 +fi + +PLYMOUTH_MODULE_NAME=$(grep "ModuleName *= *" ${PLYMOUTH_DATADIR}/plymouth/themes/${PLYMOUTH_THEME_NAME}/${PLYMOUTH_THEME_NAME}.plymouth | sed 's/ModuleName *= *//') + +if [ ! -f ${PLYMOUTH_PLUGIN_PATH}/${PLYMOUTH_MODULE_NAME}.so ]; then + echo "The default plymouth plugin (${PLYMOUTH_MODULE_NAME}) doesn't exist" > /dev/stderr + exit 1 +fi + +inst ${PLYMOUTH_PLUGIN_PATH}/${PLYMOUTH_MODULE_NAME}.so $INITRDDIR + +inst ${PLYMOUTH_PLUGIN_PATH}/renderers/drm.so $INITRDDIR +inst ${PLYMOUTH_PLUGIN_PATH}/renderers/frame-buffer.so $INITRDDIR + +if [ -d ${PLYMOUTH_DATADIR}/plymouth/themes/${PLYMOUTH_THEME_NAME} ]; then + for x in ${PLYMOUTH_DATADIR}/plymouth/themes/${PLYMOUTH_THEME_NAME}/* ; do + [ ! -f "$x" ] && break + inst $x $INITRDDIR + done +fi + +if [ -L ${PLYMOUTH_DATADIR}/plymouth/themes/default.plymouth ]; then + cp -a ${PLYMOUTH_DATADIR}/plymouth/themes/default.plymouth $INITRDDIR${PLYMOUTH_DATADIR}/plymouth/themes +fi + +# vim:ts=8:sw=4:sts=4:et diff -Naur plymouth-0.8.3/src/plugins/renderers/drm/Makefile.am plymouth-0.8.3.new/src/plugins/renderers/drm/Makefile.am --- plymouth-0.8.3/src/plugins/renderers/drm/Makefile.am 2010-05-06 19:32:20.000000000 +0200 +++ plymouth-0.8.3.new/src/plugins/renderers/drm/Makefile.am 2011-02-03 19:07:04.811686193 +0100 @@ -1,3 +1,4 @@ +if ENABLE_DRM_RENDERER INCLUDES = -I$(top_srcdir) \ -I$(srcdir)/../../../libply \ -I$(srcdir)/../../../libply-splash-core \ @@ -16,12 +17,22 @@ ../../../libply/libply.la \ ../../../libply-splash-core/libply-splash-core.la drm_la_SOURCES = $(srcdir)/plugin.c \ - $(srcdir)/ply-renderer-driver.h \ - $(srcdir)/ply-renderer-i915-driver.h \ - $(srcdir)/ply-renderer-i915-driver.c \ - $(srcdir)/ply-renderer-radeon-driver.h \ - $(srcdir)/ply-renderer-radeon-driver.c \ - $(srcdir)/ply-renderer-nouveau-driver.h \ - $(srcdir)/ply-renderer-nouveau-driver.c + $(srcdir)/ply-renderer-driver.h +if ENABLE_LIBDRM_INTEL +drm_la_SOURCES += $(srcdir)/ply-renderer-i915-driver.h \ + $(srcdir)/ply-renderer-i915-driver.c +endif + +if ENABLE_LIBDRM_RADEON +drm_la_SOURCES += $(srcdir)/ply-renderer-radeon-driver.h \ + $(srcdir)/ply-renderer-radeon-driver.c +endif + +if ENABLE_LIBDRM_NOUVEAU +drm_la_SOURCES += $(srcdir)/ply-renderer-nouveau-driver.h \ + $(srcdir)/ply-renderer-nouveau-driver.c +endif + +endif MAINTAINERCLEANFILES = Makefile.in diff -Naur plymouth-0.8.3/src/plugins/renderers/drm/plugin.c plymouth-0.8.3.new/src/plugins/renderers/drm/plugin.c --- plymouth-0.8.3/src/plugins/renderers/drm/plugin.c 2010-05-06 19:32:20.000000000 +0200 +++ plymouth-0.8.3.new/src/plugins/renderers/drm/plugin.c 2011-02-03 19:13:35.083078444 +0100 @@ -57,9 +57,15 @@ #include "ply-renderer.h" #include "ply-renderer-plugin.h" #include "ply-renderer-driver.h" +#ifdef PLY_ENABLE_LIBDRM_INTEL #include "ply-renderer-i915-driver.h" +#endif +#ifdef PLY_ENABLE_LIBDRM_RADEON #include "ply-renderer-radeon-driver.h" +#endif +#ifdef PLY_ENABLE_LIBDRM_NOUVEAU #include "ply-renderer-nouveau-driver.h" +#endif #define BYTES_PER_PIXEL (4) @@ -443,22 +449,29 @@ free (driver_name); return false; } - - if (strcmp (driver_name, "i915") == 0) + backend->driver_interface = NULL; +#ifdef PLY_ENABLE_LIBDRM_INTEL + if (backend->driver_interface == NULL && strcmp (driver_name, "i915") == 0) { backend->driver_interface = ply_renderer_i915_driver_get_interface (); backend->driver_supports_mapping_console = true; } - else if (strcmp (driver_name, "radeon") == 0) +#endif +#ifdef PLY_ENABLE_LIBDRM_RADEON + if (backend->driver_interface == NULL && strcmp (driver_name, "radeon") == 0) { backend->driver_interface = ply_renderer_radeon_driver_get_interface (); backend->driver_supports_mapping_console = false; } - else if (strcmp (driver_name, "nouveau") == 0) +#endif +#ifdef PLY_ENABLE_LIBDRM_NOUVEAU + if (backend->driver_interface == NULL && strcmp (driver_name, "nouveau") == 0) { backend->driver_interface = ply_renderer_nouveau_driver_get_interface (); backend->driver_supports_mapping_console = false; } +#endif + free (driver_name); if (backend->driver_interface == NULL) diff -Naur plymouth-0.8.3/src/plugins/renderers/Makefile.am plymouth-0.8.3.new/src/plugins/renderers/Makefile.am --- plymouth-0.8.3/src/plugins/renderers/Makefile.am 2010-05-06 19:32:20.000000000 +0200 +++ plymouth-0.8.3.new/src/plugins/renderers/Makefile.am 2011-02-03 19:14:06.316946754 +0100 @@ -1,2 +1,3 @@ -SUBDIRS = frame-buffer drm x11 +SUBDIRS = frame-buffer x11 drm + MAINTAINERCLEANFILES = Makefile.in