We used to simply probe every GPU that is reported by the kernel. However, if a system has multiple GPUs that share display controllers, we cannot use both simultaneously. Unfortunately, the kernel currently does not notify us about this. Hence, we use some heuristics to determine which GPU is the boot-gpu/primary-gpu. This only adds the detection logic, it does not modify any code to use this detection at all. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
1131 lines
33 KiB
Plaintext
1131 lines
33 KiB
Plaintext
#
|
|
# Kmscon - build configuration script
|
|
# Copyright (c) 2012 David Herrmann <dh.herrmann@googlemail.com>
|
|
#
|
|
|
|
AC_PREREQ(2.68)
|
|
|
|
AC_INIT([kmscon], [5])
|
|
AC_SUBST(PACKAGE_URL, [https://github.com/dvdhrm/kmscon])
|
|
AC_CONFIG_SRCDIR([src/kmscon_main.c])
|
|
AC_CONFIG_AUX_DIR([build-aux])
|
|
AC_CONFIG_MACRO_DIR([m4])
|
|
AC_CONFIG_HEADER(config.h)
|
|
|
|
AM_INIT_AUTOMAKE([foreign 1.11 subdir-objects dist-bzip2 no-dist-gzip tar-pax -Wall -Werror])
|
|
AM_SILENT_RULES([yes])
|
|
|
|
#
|
|
# Don't add a default "-g -O2" if CFLAGS wasn't specified. For debugging it is
|
|
# often more convenient to have "-g -O0". You can still override it by
|
|
# explicitely setting it on the command line.
|
|
#
|
|
|
|
: ${CFLAGS=""}
|
|
|
|
AC_USE_SYSTEM_EXTENSIONS
|
|
AC_PROG_CC
|
|
AC_PROG_CC_C99
|
|
AM_PROG_CC_C_O
|
|
m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
|
|
|
|
LT_PREREQ(2.2)
|
|
LT_INIT
|
|
|
|
#
|
|
# pkg-config dependencies
|
|
# This unconditionally checks for all dependencies even if they are disabled. We
|
|
# later look whether all required depedencies are met and finish the
|
|
# configuration. We group similar packages into one logical group here to avoid
|
|
# having variables for each single library.
|
|
# This, however, makes ./configure output very unintuitive error messages if a
|
|
# package is not found so we must make sure we print more verbose messages
|
|
# ourself.
|
|
#
|
|
|
|
PKG_CHECK_MODULES([XKBCOMMON], [xkbcommon],
|
|
[have_xkbcommon=yes], [have_xkbcommon=no])
|
|
AC_SUBST(XKBCOMMON_CFLAGS)
|
|
AC_SUBST(XKBCOMMON_LIBS)
|
|
|
|
PKG_CHECK_MODULES([WAYLAND], [wayland-client wayland-server wayland-cursor],
|
|
[have_wayland=yes], [have_wayland=no])
|
|
AC_SUBST(WAYLAND_CFLAGS)
|
|
AC_SUBST(WAYLAND_LIBS)
|
|
|
|
PKG_CHECK_MODULES([SYSTEMD], [libsystemd-login],
|
|
[have_systemd=yes], [have_systemd=no])
|
|
AC_SUBST(SYSTEMD_CFLAGS)
|
|
AC_SUBST(SYSTEMD_LIBS)
|
|
|
|
PKG_CHECK_MODULES([UDEV], [libudev],
|
|
[have_udev=yes], [have_udev=no])
|
|
AC_SUBST(UDEV_CFLAGS)
|
|
AC_SUBST(UDEV_LIBS)
|
|
|
|
PKG_CHECK_MODULES([DBUS], [dbus-1],
|
|
[have_dbus=yes], [have_dbus=no])
|
|
AC_SUBST(DBUS_CFLAGS)
|
|
AC_SUBST(DBUS_LIBS)
|
|
|
|
PKG_CHECK_MODULES([DRM], [libdrm],
|
|
[have_drm=yes], [have_drm=no])
|
|
AC_SUBST(DRM_CFLAGS)
|
|
AC_SUBST(DRM_LIBS)
|
|
|
|
PKG_CHECK_MODULES([GBM], [gbm],
|
|
[have_gbm=yes], [have_gbm=no])
|
|
AC_SUBST(GBM_CFLAGS)
|
|
AC_SUBST(GBM_LIBS)
|
|
|
|
PKG_CHECK_MODULES([EGL], [egl],
|
|
[have_egl=yes], [have_egl=no])
|
|
AC_SUBST(EGL_CFLAGS)
|
|
AC_SUBST(EGL_LIBS)
|
|
|
|
PKG_CHECK_MODULES([GLES2], [glesv2],
|
|
[have_gles2=yes], [have_gles2=no])
|
|
AC_SUBST(GLES2_CFLAGS)
|
|
AC_SUBST(GLES2_LIBS)
|
|
|
|
PKG_CHECK_MODULES([FREETYPE2], [freetype2 fontconfig],
|
|
[have_freetype2=yes], [have_freetype2=no])
|
|
AC_SUBST(FREETYPE2_CFLAGS)
|
|
AC_SUBST(FREETYPE2_LIBS)
|
|
|
|
PKG_CHECK_MODULES([PANGO], [pango pangoft2],
|
|
[have_pango=yes], [have_pango=no])
|
|
AC_SUBST(PANGO_CFLAGS)
|
|
AC_SUBST(PANGO_LIBS)
|
|
|
|
PKG_CHECK_MODULES([FUSE], [fuse],
|
|
[have_fuse=yes], [have_fuse=no])
|
|
AC_SUBST(FUSE_CFLAGS)
|
|
AC_SUBST(FUSE_LIBS)
|
|
|
|
PKG_CHECK_MODULES([PCIACCESS], [pciaccess],
|
|
[have_pciaccess=yes], [have_pciaccess=no])
|
|
AC_SUBST(PCIACCESS_CFLAGS)
|
|
AC_SUBST(PCIACCESS_LIBS)
|
|
|
|
#
|
|
# Parse arguments
|
|
# This parses all arguments that are given via "--enable-XY" or "--with-XY" and
|
|
# saves the results in local variables. This does not check dependencies or
|
|
# similar but does only parse the arguments.
|
|
#
|
|
|
|
# eloop
|
|
AC_MSG_CHECKING([whether user wants eloop])
|
|
AC_ARG_ENABLE([eloop],
|
|
[AS_HELP_STRING([--enable-eloop],
|
|
[build eloop library])])
|
|
if test "x$enable_eloop" = "x" ; then
|
|
enable_eloop="no (default)"
|
|
fi
|
|
AC_MSG_RESULT([$enable_eloop])
|
|
|
|
# TSM
|
|
AC_MSG_CHECKING([whether user wants TSM])
|
|
AC_ARG_ENABLE([tsm],
|
|
[AS_HELP_STRING([--enable-tsm],
|
|
[build tsm library])])
|
|
if test "x$enable_tsm" = "x" ; then
|
|
enable_tsm="no (default)"
|
|
fi
|
|
AC_MSG_RESULT([$enable_tsm])
|
|
|
|
# uterm
|
|
AC_MSG_CHECKING([whether user wants uterm])
|
|
AC_ARG_ENABLE([uterm],
|
|
[AS_HELP_STRING([--enable-uterm],
|
|
[build uterm library])])
|
|
if test "x$enable_uterm" = "x" ; then
|
|
enable_uterm="no (default)"
|
|
fi
|
|
AC_MSG_RESULT([$enable_uterm])
|
|
|
|
# kmscon
|
|
AC_MSG_CHECKING([whether user wants kmscon])
|
|
AC_ARG_ENABLE([kmscon],
|
|
[AS_HELP_STRING([--disable-kmscon],
|
|
[do not build kmscon])])
|
|
if test "x$enable_kmscon" = "x" ; then
|
|
enable_kmscon="yes (default)"
|
|
fi
|
|
AC_MSG_RESULT([$enable_kmscon])
|
|
|
|
# wlterm
|
|
AC_MSG_CHECKING([whether user wants wlterm])
|
|
AC_ARG_ENABLE([wlterm],
|
|
[AS_HELP_STRING([--enable-wlterm],
|
|
[build wlterm])])
|
|
if test "x$enable_wlterm" = "x" ; then
|
|
enable_wlterm="yes (default)"
|
|
fi
|
|
AC_MSG_RESULT([$enable_wlterm])
|
|
|
|
# debug
|
|
AC_MSG_CHECKING([whether to build with debugging on])
|
|
AC_ARG_ENABLE([debug],
|
|
[AS_HELP_STRING([--enable-debug],
|
|
[whether to build with debugging on])])
|
|
if test "x$enable_debug" = "x" ; then
|
|
enable_debug="yes (default)"
|
|
fi
|
|
AC_MSG_RESULT([$enable_debug])
|
|
|
|
# optimizations
|
|
AC_MSG_CHECKING([whether to disable code optimizations])
|
|
AC_ARG_ENABLE([optimizations],
|
|
[AS_HELP_STRING([--disable-optimizations],
|
|
[whether to disable code optimizations])])
|
|
if test "x$enable_optimizations" = "x" ; then
|
|
enable_optimizations="yes (default)"
|
|
fi
|
|
AC_MSG_RESULT([$enable_optimizations])
|
|
|
|
# multi-seat
|
|
AC_MSG_CHECKING([whether user wants systemd for multi-seat support])
|
|
AC_ARG_ENABLE([multi-seat],
|
|
[AS_HELP_STRING([--enable-multi-seat],
|
|
[enable multi-seat support with systemd])])
|
|
if test "x$enable_multi_seat" = "x" ; then
|
|
enable_multi_seat="yes (default)"
|
|
fi
|
|
AC_MSG_RESULT([$enable_multi_seat])
|
|
|
|
# hotplug
|
|
AC_MSG_CHECKING([whether user wants udev for device hotplug support])
|
|
AC_ARG_ENABLE([hotplug],
|
|
[AS_HELP_STRING([--enable-hotplug],
|
|
[enable device hotplug support with udev])])
|
|
if test "x$enable_hotplug" = "x" ; then
|
|
enable_hotplug="yes (default)"
|
|
fi
|
|
AC_MSG_RESULT([$enable_hotplug])
|
|
|
|
# pciaccess
|
|
AC_MSG_CHECKING([whether user wants pciaccess device detection])
|
|
AC_ARG_ENABLE([pciaccess],
|
|
[AS_HELP_STRING([--enable-pciaccess],
|
|
[enable device detection via pciaccess])])
|
|
if test "x$enable_pciaccess" = "x" ; then
|
|
enable_pciaccess="yes (default)"
|
|
fi
|
|
AC_MSG_RESULT([$enable_pciaccess])
|
|
|
|
# eloop-dbus
|
|
AC_MSG_CHECKING([whether user wants eloop dbus support])
|
|
AC_ARG_ENABLE([eloop-dbus],
|
|
[AS_HELP_STRING([--enable-eloop-dbus],
|
|
[enable eloop dbus support])])
|
|
if test "x$enable_eloop_dbus" = "x" ; then
|
|
enable_eloop_dbus="no (default)"
|
|
fi
|
|
AC_MSG_RESULT([$enable_eloop_dbus])
|
|
|
|
# video backends
|
|
AC_MSG_CHECKING([which video backends the user wants])
|
|
AC_ARG_WITH([video],
|
|
[AS_HELP_STRING([--with-video],
|
|
[specify list of optional video backends])])
|
|
enable_video_fbdev="no"
|
|
enable_video_dumb="no"
|
|
enable_video_drm="no"
|
|
if test "x$with_video" = "x" ; then
|
|
enable_video_fbdev="yes (default)"
|
|
enable_video_dumb="yes (default)"
|
|
enable_video_drm="yes (default)"
|
|
with_video="fbdev,dumb,drm (default)"
|
|
else
|
|
SAVEIFS="$IFS"
|
|
IFS=","
|
|
for i in $with_video ; do
|
|
if test "x$i" = "xfbdev" ; then
|
|
enable_video_fbdev="yes"
|
|
elif test "x$i" = "xdumb" ; then
|
|
enable_video_dumb="yes"
|
|
elif test "x$i" = "xdrm" ; then
|
|
enable_video_drm="yes"
|
|
else
|
|
IFS="$SAVEIFS"
|
|
AC_ERROR([Invalid video backend $i])
|
|
fi
|
|
done
|
|
IFS="$SAVEIFS"
|
|
fi
|
|
AC_MSG_RESULT([$with_video])
|
|
|
|
# renderers
|
|
AC_MSG_CHECKING([which render backends the user wants])
|
|
AC_ARG_WITH([renderers],
|
|
[AS_HELP_STRING([--with-renderers],
|
|
[specify list of optional render backends])])
|
|
enable_renderer_bblit="no"
|
|
enable_renderer_bbulk="no"
|
|
enable_renderer_gltex="no"
|
|
if test "x$with_renderers" = "x" ; then
|
|
enable_renderer_bblit="yes (default)"
|
|
enable_renderer_bbulk="yes (default)"
|
|
enable_renderer_gltex="yes (default)"
|
|
with_renderers="bblit,bbulk,gltex (default)"
|
|
else
|
|
SAVEIFS="$IFS"
|
|
IFS=","
|
|
for i in $with_renderers ; do
|
|
if test "x$i" = "xbblit" ; then
|
|
enable_renderer_bblit="yes"
|
|
elif test "x$i" = "xbbulk" ; then
|
|
enable_renderer_bbulk="yes"
|
|
elif test "x$i" = "xgltex" ; then
|
|
enable_renderer_gltex="yes"
|
|
else
|
|
IFS="$SAVEIFS"
|
|
AC_ERROR([Unknown renderer $i])
|
|
fi
|
|
done
|
|
IFS="$SAVEIFS"
|
|
fi
|
|
AC_MSG_RESULT([$with_renderers])
|
|
|
|
# font backends
|
|
AC_MSG_CHECKING([which font backends the user wants])
|
|
AC_ARG_WITH([fonts],
|
|
[AS_HELP_STRING([--with-fonts],
|
|
[specify list of optional font backends])])
|
|
enable_font_8x16="no"
|
|
enable_font_unifont="no"
|
|
enable_font_freetype2="no"
|
|
enable_font_pango="no"
|
|
if test "x$with_fonts" = "x" ; then
|
|
enable_font_8x16="yes (default)"
|
|
enable_font_unifont="no (default)"
|
|
enable_font_freetype2="yes (default)"
|
|
enable_font_pango="yes (default)"
|
|
with_fonts="8x16,freetype2,pango (default)"
|
|
else
|
|
SAVEIFS="$IFS"
|
|
IFS=","
|
|
for i in $with_fonts ; do
|
|
if test "x$i" = "x8x16" ; then
|
|
enable_font_8x16="yes"
|
|
elif test "x$i" = "xunifont" ; then
|
|
enable_font_unifont="yes"
|
|
elif test "x$i" = "xfreetype2" ; then
|
|
enable_font_freetype2="yes"
|
|
elif test "x$i" = "xpango" ; then
|
|
enable_font_pango="yes"
|
|
else
|
|
IFS="$SAVEIFS"
|
|
AC_ERROR([Unknown font backend $i])
|
|
fi
|
|
done
|
|
IFS="$SAVEIFS"
|
|
fi
|
|
AC_MSG_RESULT([$with_fonts])
|
|
|
|
# kmscon sessions
|
|
AC_MSG_CHECKING([which sessions the user wants])
|
|
AC_ARG_WITH([sessions],
|
|
[AS_HELP_STRING([--with-sessions],
|
|
[specify list of optional sessions])])
|
|
enable_session_dummy="no"
|
|
enable_session_terminal="no"
|
|
enable_session_cdev="no"
|
|
enable_session_compositor="no"
|
|
if test "x$with_sessions" = "x" ; then
|
|
enable_session_dummy="yes (default)"
|
|
enable_session_terminal="yes (default)"
|
|
enable_session_cdev="yes (default)"
|
|
enable_session_compositor="no (default)"
|
|
with_sessions="dummy,terminal,cdev (default)"
|
|
else
|
|
SAVEIFS="$IFS"
|
|
IFS=","
|
|
for i in $with_sessions ; do
|
|
if test "x$i" = "xdummy" ; then
|
|
enable_session_dummy="yes"
|
|
elif test "x$i" = "xterminal" ; then
|
|
enable_session_terminal="yes"
|
|
elif test "x$i" = "xcdev" ; then
|
|
enable_session_cdev="yes"
|
|
elif test "x$i" = "xcompositor" ; then
|
|
enable_session_compositor="yes"
|
|
else
|
|
IFS="$SAVEIFS"
|
|
AC_ERROR([Unknown session type $i])
|
|
fi
|
|
done
|
|
IFS="$SAVEIFS"
|
|
fi
|
|
AC_MSG_RESULT([$with_sessions])
|
|
|
|
#
|
|
# Check what can be built
|
|
# This checks each configuration option and tests whether all dependencies are
|
|
# met. This is done from bottom up to ensure the right order.
|
|
#
|
|
|
|
# debug
|
|
debug_avail=no
|
|
if test ! "x$enable_debug" = "xno" ; then
|
|
debug_avail=yes
|
|
fi
|
|
|
|
# optimizations
|
|
optimizations_avail=no
|
|
if test ! "x$enable_optimizations" = "xno" ; then
|
|
optimizations_avail=yes
|
|
fi
|
|
|
|
# eloop-dbus
|
|
eloop_dbus_avail=no
|
|
if test ! "x$enable_eloop_dbus" = "xno" ; then
|
|
if test "x$have_dbus" = "xyes" ; then
|
|
eloop_dbus_avail=yes
|
|
elif test "x$enable_eloop_dbus" = "xyes" ; then
|
|
AC_ERROR([DBus libraries not found for eloop-dbus])
|
|
fi
|
|
fi
|
|
|
|
# eloop
|
|
eloop_avail=no
|
|
if test ! "x$enable_eloop" = "xno" ; then
|
|
eloop_avail=yes
|
|
fi
|
|
|
|
# TSM
|
|
tsm_avail=no
|
|
if test ! "x$enable_tsm" = "xno" ; then
|
|
if test "x$have_xkbcommon" = "xyes" ; then
|
|
tsm_avail=yes
|
|
elif test "x$enable_tsm" = "xyes" ; then
|
|
AC_ERROR([xkbcommon libraries not found for TSM])
|
|
fi
|
|
fi
|
|
|
|
# video fbdev
|
|
video_fbdev_avail=no
|
|
if test ! "x$enable_video_fbdev" = "xno" ; then
|
|
# TODO: check for kernel headers
|
|
video_fbdev_avail=yes
|
|
fi
|
|
|
|
# video dumb
|
|
video_dumb_avail=no
|
|
if test ! "x$enable_video_dumb" = "xno" ; then
|
|
if test "x$have_drm" = "xyes" ; then
|
|
video_dumb_avail=yes
|
|
elif test "x$enable_video_dumb" = "xyes" ; then
|
|
AC_ERROR([DRM libraries not found for dumb video backend])
|
|
fi
|
|
fi
|
|
|
|
# video drm
|
|
video_drm_avail=no
|
|
if test ! "x$enable_video_drm" = "xno" ; then
|
|
if test "x$have_drm" = "xno" ; then
|
|
video_drm_avail=no
|
|
elif test "x$have_gbm" = "xno" ; then
|
|
video_drm_avail=no
|
|
elif test "x$have_egl" = "xno" ; then
|
|
video_drm_avail=no
|
|
elif test "x$have_gles2" = "xno" ; then
|
|
video_drm_avail=no
|
|
else
|
|
video_drm_avail=yes
|
|
fi
|
|
|
|
if test "x$video_drm_avail" = "xno" ; then
|
|
if test "x$enable_video_drm" = "xyes" ; then
|
|
AC_ERROR([DRM, gbm or EGL libraries not found for DRM video backend])
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# uterm
|
|
uterm_avail=no
|
|
if test ! "x$enable_uterm" = "xno" ; then
|
|
uterm_avail=yes
|
|
fi
|
|
|
|
# multi-seat
|
|
multi_seat_avail=no
|
|
if test ! "x$enable_multi_seat" = "xno" ; then
|
|
if test "x$have_systemd" = "xyes" ; then
|
|
multi_seat_avail=yes
|
|
elif test "x$enable_multi_seat" = "xyes" ; then
|
|
AC_ERROR([systemd libraries not found for multi-seat support])
|
|
fi
|
|
fi
|
|
|
|
# hotplug
|
|
hotplug_avail=no
|
|
if test ! "x$enable_hotplug" = "xno" ; then
|
|
if test "x$have_udev" = "xyes" ; then
|
|
hotplug_avail=yes
|
|
elif test "x$enable_hotplug" = "xyes" ; then
|
|
AC_ERROR([udev libraries not found for hotplug support])
|
|
fi
|
|
fi
|
|
|
|
# pciaccess
|
|
pciaccess_avail=no
|
|
if test ! "x$enable_pciaccess" = "xno" ; then
|
|
if test "x$have_pciaccess" = "xyes" ; then
|
|
pciaccess_avail=yes
|
|
elif test "x$enable_pciaccess" = "xyes" ; then
|
|
AC_ERROR([pciaccess libraries not found for pciaccess device detection])
|
|
fi
|
|
fi
|
|
|
|
# renderer bblit
|
|
renderer_bblit_avail=no
|
|
if test ! "x$enable_renderer_bblit" = "xno" ; then
|
|
renderer_bblit_avail=yes
|
|
fi
|
|
|
|
# renderer bbulk
|
|
renderer_bbulk_avail=no
|
|
if test ! "x$enable_renderer_bbulk" = "xno" ; then
|
|
renderer_bbulk_avail=yes
|
|
fi
|
|
|
|
# renderer gltex
|
|
renderer_gltex_avail=no
|
|
if test ! "x$enable_renderer_gltex" = "xno" ; then
|
|
if test "x$have_gles2" = "xyes" ; then
|
|
renderer_gltex_avail=yes
|
|
elif test "x$enable_renderer_gltex" = "xyes" ; then
|
|
AC_ERROR([OpenGLESv2 libraries not found for gltex renderer])
|
|
fi
|
|
fi
|
|
|
|
# font 8x16
|
|
font_8x16_avail=no
|
|
if test ! "x$enable_font_8x16" = "xno" ; then
|
|
font_8x16_avail=yes
|
|
fi
|
|
|
|
# font unifont
|
|
font_unifont_avail=no
|
|
if test ! "x$enable_font_unifont" = "xno" ; then
|
|
font_unifont_avail=yes
|
|
fi
|
|
|
|
# font freetype2
|
|
font_freetype2_avail=no
|
|
if test ! "x$enable_font_freetype2" = "xno" ; then
|
|
if test "x$have_freetype2" ; then
|
|
font_freetype2_avail=yes
|
|
elif test "x$enable_font_freetype2" = "xyes" ; then
|
|
AC_ERROR([freetype2 or fontconfig libs not found for freetype2 font backend])
|
|
fi
|
|
fi
|
|
|
|
# font pango
|
|
font_pango_avail=no
|
|
if test ! "x$enable_font_pango" = "xno" ; then
|
|
if test "x$have_pango" ; then
|
|
font_pango_avail=yes
|
|
elif test "x$enable_font_pango" = "xyes" ; then
|
|
AC_ERROR([pango libraries not found for pango font backend])
|
|
fi
|
|
fi
|
|
|
|
# session dummy
|
|
session_dummy_avail=no
|
|
if test ! "x$enable_session_dummy" = "xno" ; then
|
|
session_dummy_avail=yes
|
|
fi
|
|
|
|
# session terminal
|
|
session_terminal_avail=no
|
|
if test ! "x$enable_session_terminal" = "xno" ; then
|
|
if test "x$tsm_avail" = "xyes" ; then
|
|
session_terminal_avail=yes
|
|
elif test "x$enable_session_terminal" = "xyes" ; then
|
|
AC_ERROR([TSM cannot be built for kmscon terminal session])
|
|
fi
|
|
fi
|
|
|
|
# session cdev
|
|
session_cdev_avail=no
|
|
if test ! "x$enable_session_cdev" = "xno" ; then
|
|
if test "x$have_fuse" = "xno" ; then
|
|
session_cdev_avail=no
|
|
elif test "x$tsm_avail" = "xno" ; then
|
|
session_cdev_avail=no
|
|
else
|
|
session_cdev_avail=yes
|
|
fi
|
|
|
|
if "x$session_cdev_avail" = "xno" ; then
|
|
if test "x$enable_session_cdev" = "xyes" ; then
|
|
AC_ERROR([TSM or FUSE libraries not built/found for kmscon cdev session])
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# session compositor
|
|
session_compositor_avail=no
|
|
if test ! "x$enable_session_compositor" = "xno" ; then
|
|
if test "x$have_wayland" = "xyes" ; then
|
|
session_compositor_avail=yes
|
|
elif test "x$enable_session_compositor" = "xyes" ; then
|
|
AC_ERROR([wayland libraries not found for kmscon compositor session])
|
|
fi
|
|
fi
|
|
|
|
# kmscon
|
|
kmscon_avail=no
|
|
if test ! "x$enable_kmscon" = "xno" ; then
|
|
if test "x$eloop_avail" = "xno" ; then
|
|
kmscon_avail=no
|
|
elif test "x$tsm_avail" = "xno" ; then
|
|
kmscon_avail=no
|
|
elif test "x$uterm_avail" = "xno" ; then
|
|
kmscon_avail=no
|
|
else
|
|
kmscon_avail=yes
|
|
fi
|
|
|
|
if test "x$enable_kmscon" = "xyes" ; then
|
|
if test "x$kmscon_avail" = "xno" ; then
|
|
AC_ERROR([eloop, TSM or uterm cannot be built for kmscon])
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# wlterm
|
|
wlterm_avail=no
|
|
if test ! "x$enable_wlterm" = "xno" ; then
|
|
if test "x$tsm_avail" = "xno" ; then
|
|
wlterm_avail=no
|
|
elif test "x$eloop_avail" = "xno" ; then
|
|
wlterm_avail=no
|
|
else
|
|
wlterm_avail=yes
|
|
fi
|
|
|
|
if test "x$enable_wlterm" = "xyes" ; then
|
|
if test "x$wlterm_avail" = "xno" ; then
|
|
AC_ERROR([eloop or TSM cannot be built for wlterm])
|
|
fi
|
|
fi
|
|
|
|
if test "x$have_wayland" = "xyes" ; then
|
|
wlterm_avail=yes
|
|
elif test "x$enable_wlterm" = "xyes" ; then
|
|
AC_ERROR([wayland libraries not found for wlterm])
|
|
fi
|
|
fi
|
|
|
|
#
|
|
# Enable all required modules
|
|
# We now know which modules can be built by checking the *_avail variables set
|
|
# above. We now only have to disable all modules that are disabled by default
|
|
# and the user didn't force-enable them and no other module that is enabled
|
|
# needs them. This is done top-down of course.
|
|
#
|
|
|
|
# wlterm
|
|
wlterm_enabled=no
|
|
if test "x$wlterm_avail" = "xyes" ; then
|
|
if test "x${enable_wlterm% *}" = "xyes" ; then
|
|
wlterm_enabled=yes
|
|
enable_eloop=yes
|
|
enable_tsm=yes
|
|
fi
|
|
fi
|
|
|
|
# kmscon
|
|
kmscon_enabled=no
|
|
if test "x$kmscon_avail" = "xyes" ; then
|
|
if test "x${enable_kmscon% *}" = "xyes" ; then
|
|
kmscon_enabled=yes
|
|
enable_eloop=yes
|
|
enable_uterm=yes
|
|
fi
|
|
fi
|
|
|
|
# session compositor
|
|
session_compositor_enabled=no
|
|
if test "x$session_compositor_avail" = "xyes" ; then
|
|
if test "x${enable_session_compositor% *}" = "xyes" ; then
|
|
session_compositor_enabled=yes
|
|
fi
|
|
fi
|
|
|
|
# session cdev
|
|
session_cdev_enabled=no
|
|
if test "x$session_cdev_avail" = "xyes" ; then
|
|
if test "x${enable_session_cdev% *}" = "xyes" ; then
|
|
session_cdev_enabled=yes
|
|
fi
|
|
fi
|
|
|
|
# session terminal
|
|
session_terminal_enabled=no
|
|
if test "x$session_terminal_avail" = "xyes" ; then
|
|
if test "x${enable_session_terminal% *}" = "xyes" ; then
|
|
session_terminal_enabled=yes
|
|
enable_tsm=yes
|
|
fi
|
|
fi
|
|
|
|
# session dummy
|
|
session_dummy_enabled=no
|
|
if test "x$session_dummy_avail" = "xyes" ; then
|
|
if test "x${enable_session_dummy% *}" = "xyes" ; then
|
|
session_dummy_enabled=yes
|
|
fi
|
|
fi
|
|
|
|
# font pango
|
|
font_pango_enabled=no
|
|
if test "x$font_pango_avail" = "xyes" ; then
|
|
if test "x${enable_font_pango% *}" = "xyes" ; then
|
|
font_pango_enabled=yes
|
|
fi
|
|
fi
|
|
|
|
# font freetype2
|
|
font_freetype2_enabled=no
|
|
if test "x$font_freetype2_avail" = "xyes" ; then
|
|
if test "x${enable_font_freetype2% *}" = "xyes" ; then
|
|
font_freetype2_enabled=yes
|
|
fi
|
|
fi
|
|
|
|
# font unifont
|
|
font_unifont_enabled=no
|
|
if test "x$font_unifont_avail" = "xyes" ; then
|
|
if test "x${enable_font_unifont% *}" = "xyes" ; then
|
|
font_unifont_enabled=yes
|
|
fi
|
|
fi
|
|
|
|
# font 8x16
|
|
font_8x16_enabled=no
|
|
if test "x$font_8x16_avail" = "xyes" ; then
|
|
if test "x${enable_font_8x16% *}" = "xyes" ; then
|
|
font_8x16_enabled=yes
|
|
fi
|
|
fi
|
|
|
|
# renderer gltex
|
|
renderer_gltex_enabled=no
|
|
if test "x$renderer_gltex_avail" = "xyes" ; then
|
|
if test "x${enable_renderer_gltex% *}" = "xyes" ; then
|
|
renderer_gltex_enabled=yes
|
|
fi
|
|
fi
|
|
|
|
# renderer bbulk
|
|
renderer_bbulk_enabled=no
|
|
if test "x$renderer_bbulk_avail" = "xyes" ; then
|
|
if test "x${enable_renderer_bbulk% *}" = "xyes" ; then
|
|
renderer_bbulk_enabled=yes
|
|
fi
|
|
fi
|
|
|
|
# renderer bblit
|
|
renderer_bblit_enabled=no
|
|
if test "x$renderer_bblit_avail" = "xyes" ; then
|
|
if test "x${enable_renderer_bblit% *}" = "xyes" ; then
|
|
renderer_bblit_enabled=yes
|
|
fi
|
|
fi
|
|
|
|
# pciaccess
|
|
pciaccess_enabled=no
|
|
if test "x$pciaccess_avail" = "xyes" ; then
|
|
if test "x${enable_pciaccess% *}" = "xyes" ; then
|
|
pciaccess_enabled=yes
|
|
fi
|
|
fi
|
|
|
|
# hotplug
|
|
hotplug_enabled=no
|
|
if test "x$hotplug_avail" = "xyes" ; then
|
|
if test "x${enable_hotplug% *}" = "xyes" ; then
|
|
hotplug_enabled=yes
|
|
fi
|
|
fi
|
|
|
|
# multi-seat
|
|
multi_seat_enabled=no
|
|
if test "x$multi_seat_avail" = "xyes" ; then
|
|
if test "x${enable_multi_seat% *}" = "xyes" ; then
|
|
multi_seat_enabled=yes
|
|
fi
|
|
fi
|
|
|
|
# uterm
|
|
uterm_enabled=no
|
|
if test "x$uterm_avail" = "xyes" ; then
|
|
if test "x${enable_uterm% *}" = "xyes" ; then
|
|
uterm_enabled=yes
|
|
fi
|
|
fi
|
|
|
|
# video drm
|
|
video_drm_enabled=no
|
|
if test "x$video_drm_avail" = "xyes" ; then
|
|
if test "x${enable_video_drm% *}" = "xyes" ; then
|
|
video_drm_enabled=yes
|
|
fi
|
|
fi
|
|
|
|
# video dumb
|
|
video_dumb_enabled=no
|
|
if test "x$video_dumb_avail" = "xyes" ; then
|
|
if test "x${enable_video_dumb% *}" = "xyes" ; then
|
|
video_dumb_enabled=yes
|
|
fi
|
|
fi
|
|
|
|
# video fbdev
|
|
video_fbdev_enabled=no
|
|
if test "x$video_fbdev_avail" = "xyes" ; then
|
|
if test "x${enable_video_fbdev% *}" = "xyes" ; then
|
|
video_fbdev_enabled=yes
|
|
fi
|
|
fi
|
|
|
|
# tsm
|
|
tsm_enabled=no
|
|
if test "x$tsm_avail" = "xyes" ; then
|
|
if test "x${enable_tsm% *}" = "xyes" ; then
|
|
tsm_enabled=yes
|
|
fi
|
|
fi
|
|
|
|
# eloop
|
|
eloop_enabled=no
|
|
if test "x$eloop_avail" = "xyes" ; then
|
|
if test "x${enable_eloop% *}" = "xyes" ; then
|
|
eloop_enabled=yes
|
|
fi
|
|
fi
|
|
|
|
# eloop-dbus
|
|
eloop_dbus_enabled=no
|
|
if test "x$eloop_dbus_avail" = "xyes" ; then
|
|
if test "x${enable_eloop_dbus% *}" = "xyes" ; then
|
|
eloop_dbus_enabled=yes
|
|
fi
|
|
fi
|
|
|
|
# optimizations
|
|
optimizations_enabled=no
|
|
if test "x$optimizations_avail" = "xyes" ; then
|
|
if test "x${enable_optimizations% *}" = "xyes" ; then
|
|
optimizations_enabled=yes
|
|
fi
|
|
fi
|
|
|
|
# debug
|
|
debug_enabled=no
|
|
if test "x$debug_avail" = "xyes" ; then
|
|
if test "x${enable_debug% *}" = "xyes" ; then
|
|
debug_enabled=yes
|
|
fi
|
|
fi
|
|
|
|
#
|
|
# Module Configuration
|
|
# We have now done all dependency checking and default-value validation and we
|
|
# now know which modules are enabled via the *_enabled variables.
|
|
# Everything below is related to the configuration of each module and setting
|
|
# the correct flags for the build process.
|
|
#
|
|
|
|
# debug
|
|
if test "x$debug_enabled" = "xyes" ; then
|
|
AC_DEFINE([BUILD_ENABLE_DEBUG], [1], [Enable debug mode])
|
|
else
|
|
AC_DEFINE([NDEBUG], [1], [No Debug])
|
|
fi
|
|
|
|
AM_CONDITIONAL([BUILD_ENABLE_DEBUG],
|
|
[test "x$debug_enabled" = "xyes"])
|
|
|
|
# optimizations
|
|
AM_CONDITIONAL([BUILD_ENABLE_OPTIMIZATIONS],
|
|
[test "x$optimizations_enabled" = "xyes"])
|
|
|
|
# eloop-dbus
|
|
AM_CONDITIONAL([BUILD_ENABLE_ELOOP_DBUS],
|
|
[test "x$eloop_dbus_enabled" = "xyes"])
|
|
|
|
# eloop
|
|
AM_CONDITIONAL([BUILD_ENABLE_ELOOP],
|
|
[test "x$eloop_enabled" = "xyes"])
|
|
|
|
# TSM
|
|
AM_CONDITIONAL([BUILD_ENABLE_TSM],
|
|
[test "x$tsm_enabled" = "xyes"])
|
|
|
|
# video fbdev
|
|
if test "x$video_fbdev_enabled" = "xyes" ; then
|
|
AC_DEFINE([BUILD_ENABLE_VIDEO_FBDEV], [1],
|
|
[Build uterm fbdev video backend])
|
|
fi
|
|
|
|
AM_CONDITIONAL([BUILD_ENABLE_VIDEO_FBDEV],
|
|
[test "x$video_fbdev_enabled" = "xyes"])
|
|
|
|
# video dumb
|
|
if test "x$video_dumb_enabled" = "xyes" ; then
|
|
AC_DEFINE([BUILD_ENABLE_VIDEO_DUMB], [1],
|
|
[Build uterm dumb drm video backend])
|
|
fi
|
|
|
|
AM_CONDITIONAL([BUILD_ENABLE_VIDEO_DUMB],
|
|
[test "x$video_dumb_enabled" = "xyes"])
|
|
|
|
# video drm
|
|
if test "x$video_drm_enabled" = "xyes" ; then
|
|
AC_DEFINE([BUILD_ENABLE_VIDEO_DRM], [1],
|
|
[Build uterm drm video backend])
|
|
fi
|
|
|
|
AM_CONDITIONAL([BUILD_ENABLE_VIDEO_DRM],
|
|
[test "x$video_drm_enabled" = "xyes"])
|
|
|
|
# uterm
|
|
AM_CONDITIONAL([BUILD_ENABLE_UTERM],
|
|
[test "x$uterm_enabled" = "xyes"])
|
|
|
|
# multi-seat
|
|
if test "x$multi_seat_enabled" = "xyes" ; then
|
|
AC_DEFINE([BUILD_ENABLE_MULTI_SEAT], [1],
|
|
[Use systemd for multi-seat support])
|
|
fi
|
|
|
|
AM_CONDITIONAL([BUILD_ENABLE_MULTI_SEAT],
|
|
[test "x$multi_seat_enabled" = "xyes"])
|
|
|
|
# hotplug
|
|
if test "x$hotplug_enabled" = "xyes" ; then
|
|
AC_DEFINE([BUILD_ENABLE_HOTPLUG], [1],
|
|
[Use udev for hotplug support])
|
|
fi
|
|
|
|
AM_CONDITIONAL([BUILD_ENABLE_HOTPLUG],
|
|
[test "x$hotplug_enabled" = "xyes"])
|
|
|
|
# pciaccess
|
|
if test "x$pciaccess_enabled" = "xyes" ; then
|
|
AC_DEFINE([BUILD_ENABLE_PCIACCESS], [1],
|
|
[Use pciaccess for device detection])
|
|
fi
|
|
|
|
AM_CONDITIONAL([BUILD_ENABLE_PCIACCESS],
|
|
[test "x$pciaccess_enabled" = "xyes"])
|
|
|
|
# renderer bblit
|
|
if test "x$renderer_bblit_enabled" = "xyes" ; then
|
|
AC_DEFINE([BUILD_ENABLE_RENDERER_BBLIT], [1],
|
|
[Build bblit rendering backend])
|
|
fi
|
|
|
|
AM_CONDITIONAL([BUILD_ENABLE_RENDERER_BBLIT],
|
|
[test "x$renderer_bblit_enabled" = "xyes"])
|
|
|
|
# renderer bbulk
|
|
if test "x$renderer_bbulk_enabled" = "xyes" ; then
|
|
AC_DEFINE([BUILD_ENABLE_RENDERER_BBULK], [1],
|
|
[Build bbulk rendering backend])
|
|
fi
|
|
|
|
AM_CONDITIONAL([BUILD_ENABLE_RENDERER_BBULK],
|
|
[test "x$renderer_bbulk_enabled" = "xyes"])
|
|
|
|
# renderer gltex
|
|
if test "x$renderer_gltex_enabled" = "xyes" ; then
|
|
AC_DEFINE([BUILD_ENABLE_RENDERER_GLTEX], [1],
|
|
[Build gltex rendering backend])
|
|
fi
|
|
|
|
AM_CONDITIONAL([BUILD_ENABLE_RENDERER_GLTEX],
|
|
[test "x$renderer_gltex_enabled" = "xyes"])
|
|
|
|
# font 8x16
|
|
if test "x$font_8x16_enabled" = "xyes" ; then
|
|
AC_DEFINE([BUILD_ENABLE_FONT_8X16], [1],
|
|
[Build static 8x16 font backend])
|
|
fi
|
|
|
|
AM_CONDITIONAL([BUILD_ENABLE_FONT_8X16],
|
|
[test "x$font_8x16_enabled" = "xyes"])
|
|
|
|
# font unifont
|
|
if test "x$font_unifont_enabled" = "xyes" ; then
|
|
AC_DEFINE([BUILD_ENABLE_FONT_UNIFONT], [1],
|
|
[Build static unifont backend])
|
|
fi
|
|
|
|
AM_CONDITIONAL([BUILD_ENABLE_FONT_UNIFONT],
|
|
[test "x$font_unifont_enabled" = "xyes"])
|
|
|
|
# font freetype2
|
|
if test "x$font_freetype2_enabled" = "xyes" ; then
|
|
AC_DEFINE([BUILD_ENABLE_FONT_FREETYPE2], [1],
|
|
[Build freetype2 font backend])
|
|
fi
|
|
|
|
AM_CONDITIONAL([BUILD_ENABLE_FONT_FREETYPE2],
|
|
[test "x$font_freetype2_enabled" = "xyes"])
|
|
|
|
# font pango
|
|
if test "x$font_pango_enabled" = "xyes" ; then
|
|
AC_DEFINE([BUILD_ENABLE_FONT_PANGO], [1],
|
|
[Build pango font backend])
|
|
fi
|
|
|
|
AM_CONDITIONAL([BUILD_ENABLE_FONT_PANGO],
|
|
[test "x$font_pango_enabled" = "xyes"])
|
|
|
|
# session dummy
|
|
if test "x$session_dummy_enabled" = "xyes" ; then
|
|
AC_DEFINE([BUILD_ENABLE_SESSION_DUMMY], [1],
|
|
[Build dummy session])
|
|
fi
|
|
|
|
AM_CONDITIONAL([BUILD_ENABLE_SESSION_DUMMY],
|
|
[test "x$session_dummy_enabled" = "xyes"])
|
|
|
|
# session terminal
|
|
if test "x$session_terminal_enabled" = "xyes" ; then
|
|
AC_DEFINE([BUILD_ENABLE_SESSION_TERMINAL], [1],
|
|
[Build terminal session])
|
|
fi
|
|
|
|
AM_CONDITIONAL([BUILD_ENABLE_SESSION_TERMINAL],
|
|
[test "x$session_terminal_enabled" = "xyes"])
|
|
|
|
# session cdev
|
|
if test "x$session_cdev_enabled" = "xyes" ; then
|
|
AC_DEFINE([BUILD_ENABLE_SESSION_CDEV], [1],
|
|
[Build cdev session])
|
|
fi
|
|
|
|
AM_CONDITIONAL([BUILD_ENABLE_SESSION_CDEV],
|
|
[test "x$session_cdev_enabled" = "xyes"])
|
|
|
|
# session compositor
|
|
if test "x$session_compositor_enabled" = "xyes" ; then
|
|
AC_DEFINE([BUILD_ENABLE_SESSION_COMPOSITOR], [1],
|
|
[Build compositor session])
|
|
fi
|
|
|
|
AM_CONDITIONAL([BUILD_ENABLE_SESSION_COMPOSITOR],
|
|
[test "x$session_compositor_enabled" = "xyes"])
|
|
|
|
# kmscon
|
|
AM_CONDITIONAL([BUILD_ENABLE_KMSCON],
|
|
[test "x$kmscon_enabled" = "xyes"])
|
|
|
|
# wlterm
|
|
AM_CONDITIONAL([BUILD_ENABLE_WLTERM],
|
|
[test "x$wlterm_enabled" = "xyes"])
|
|
|
|
#
|
|
# Miscellaneous Checks
|
|
# All checks below are independent of module checking or depend on the results
|
|
# of it. They do not have any dependencies themself so they are not part of the
|
|
# module infrastructure.
|
|
#
|
|
|
|
# check for _Static_assert
|
|
AC_MSG_CHECKING([whether _Static_assert() is supported])
|
|
AC_LANG([C])
|
|
have_static_assert=yes
|
|
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[_Static_assert(1, "What?");]])],
|
|
[AC_DEFINE([BUILD_HAVE_STATIC_ASSERT],
|
|
[1],
|
|
[Define to 1 if _Static_assert() is supported])],
|
|
[have_static_assert=no])
|
|
AC_MSG_RESULT([$have_static_assert])
|
|
|
|
# check for gbm_bo_get_pitch() function, otherwise gbm_bo_get_stride() is used
|
|
if test x$have_gbm = xyes ; then
|
|
save_CFLAGS="$CFLAGS"
|
|
save_LIBS="$LIBS"
|
|
save_LDFLAGS="$LDFLAGS"
|
|
CFLAGS="$DRM_CFLAGS $GBM_CFLAGS"
|
|
LIBS="$DRM_LIBS $GBM_LIBS"
|
|
LDFLAGS=""
|
|
AC_CHECK_LIB([gbm],
|
|
[gbm_bo_get_pitch],
|
|
[AC_DEFINE([BUILD_HAVE_GBM_BO_GET_PITCH],
|
|
[1],
|
|
[Define to 1 if your libgbm provides gbm_bo_get_pitch])])
|
|
CFLAGS="$save_CFLAGS"
|
|
LIBS="$save_LIBS"
|
|
LDFLAGS="$save_LDFLAGS"
|
|
fi
|
|
|
|
#
|
|
# Makefile vars
|
|
# After everything is configured, we correctly substitute the values for the
|
|
# makefiles.
|
|
#
|
|
|
|
AC_CONFIG_FILES([Makefile
|
|
src/libeloop.pc
|
|
src/libtsm.pc
|
|
src/libuterm.pc])
|
|
AC_OUTPUT
|
|
|
|
#
|
|
# Configuration output
|
|
# Show configuration to the user so they can check whether everything was
|
|
# configured as expected.
|
|
#
|
|
|
|
AC_MSG_NOTICE([Build configuration:
|
|
|
|
Applications and Libraries:
|
|
kmscon: $kmscon_enabled ($kmscon_avail)
|
|
wlterm: $wlterm_enabled ($wlterm_avail)
|
|
uterm: $uterm_enabled ($uterm_avail)
|
|
tsm: $tsm_enabled ($tsm_avail)
|
|
eloop: $eloop_enabled ($eloop_avail)
|
|
|
|
Miscellaneous Options:
|
|
debug: $debug_enabled ($debug_avail)
|
|
optimizations: $optimizations_enabled ($optimizations_avail)
|
|
multi-seat: $multi_seat_enabled ($multi_seat_avail)
|
|
hotplug: $hotplug_enabled ($hotplug_avail)
|
|
pciaccess: $pciaccess_enabled ($pciaccess_avail)
|
|
eloop-dbus: $eloop_dbus_enabled ($eloop_dbus_avail)
|
|
|
|
Video Backends:
|
|
fbdev: $video_fbdev_enabled ($video_fbdev_avail)
|
|
dumb drm: $video_dumb_enabled ($video_dumb_avail)
|
|
drm: $video_drm_enabled ($video_drm_avail)
|
|
|
|
Font Backends:
|
|
8x16: $font_8x16_enabled ($font_8x16_avail)
|
|
unifont: $font_unifont_enabled ($font_unifont_avail)
|
|
freetype2: $font_freetype2_enabled ($font_freetype2_avail)
|
|
pango: $font_pango_enabled ($font_pango_avail)
|
|
|
|
Renderers:
|
|
bblit: $renderer_bblit_enabled ($renderer_bblit_avail)
|
|
bbulk: $renderer_bbulk_enabled ($renderer_bbulk_avail)
|
|
gltex: $renderer_gltex_enabled ($renderer_gltex_avail)
|
|
|
|
Session Types:
|
|
dummy: $session_dummy_enabled ($session_dummy_avail)
|
|
terminal: $session_terminal_enabled ($session_terminal_avail)
|
|
cdev: $session_cdev_enabled ($session_cdev_avail)
|
|
compositor: $session_compositor_enabled ($session_compositor_avail)
|
|
|
|
Run "make" to start compilation process])
|