X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=configure.ac;h=eb3020f06d8d378477575e9bbe3300e90b54e708;hb=refs%2Ftags%2Faccepted%2Ftizen%2Fcommon%2F20140625.161849;hp=c6c2aca050fdeae011598a543446bea0529e95aa;hpb=5517fa16bdce40f066e3271691226ee6c47e39c2;p=platform%2Fupstream%2Fkmscon.git diff --git a/configure.ac b/configure.ac index c6c2aca..eb3020f 100644 --- a/configure.ac +++ b/configure.ac @@ -5,41 +5,63 @@ AC_PREREQ(2.68) -AC_INIT([kmscon], [2]) -AC_SUBST(PACKAGE_URL, [https://github.com/dvdhrm/kmscon]) -AC_CONFIG_SRCDIR([src/main.c]) +AC_INIT([kmscon], + [8], + [http://bugs.freedesktop.org/enter_bug.cgi?product=kmscon], + [kmscon], + [http://www.freedesktop.org/wiki/Software/kmscon]) +AC_CONFIG_SRCDIR([src/kmscon_main.c]) AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_HEADER(config.h) +AC_USE_SYSTEM_EXTENSIONS +AC_SYS_LARGEFILE +AC_CANONICAL_SYSTEM -AM_INIT_AUTOMAKE([foreign 1.11 subdir-objects dist-bzip2 no-dist-gzip tar-pax -Wall -Werror]) +AM_INIT_AUTOMAKE([foreign 1.11 subdir-objects dist-xz no-dist-gzip tar-pax -Wall -Werror -Wno-portability]) 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. +# explicitly setting it on the command line. # : ${CFLAGS=""} -AC_USE_SYSTEM_EXTENSIONS AC_PROG_CC +AX_PROG_CC_FOR_BUILD AC_PROG_CC_C99 AM_PROG_CC_C_O -AM_PROG_AR +m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) +AC_PROG_SED +AC_PROG_MKDIR_P +AC_PROG_LN_S +AC_PROG_GREP +AC_PROG_AWK LT_PREREQ(2.2) LT_INIT # -# check for gtk-doc -# Use weird syntax to make "gtkdocize" happy. +# Required pkg-config dependencies # -m4_ifdef([GTK_DOC_CHECK],[ -GTK_DOC_CHECK([1.14],[--flavour no-tmpl]) -], [AM_CONDITIONAL([ENABLE_GTK_DOC], false)]) +PKG_CHECK_MODULES([XKBCOMMON], [xkbcommon]) +AC_SUBST(XKBCOMMON_CFLAGS) +AC_SUBST(XKBCOMMON_LIBS) + +PKG_CHECK_MODULES([TSM], [libtsm]) +AC_SUBST(TSM_CFLAGS) +AC_SUBST(TSM_LIBS) + +PKG_CHECK_MODULES([UDEV], [libudev >= 172]) +AC_SUBST(UDEV_CFLAGS) +AC_SUBST(UDEV_LIBS) + +PKG_CHECK_MODULES([DRM], [libdrm]) +AC_SUBST(DRM_CFLAGS) +AC_SUBST(DRM_LIBS) # # pkg-config dependencies @@ -52,298 +74,716 @@ GTK_DOC_CHECK([1.14],[--flavour no-tmpl]) # ourself. # -PKG_CHECK_MODULES([SYSTEMD], [libsystemd-login], +PKG_CHECK_MODULES([SYSTEMD], [libsystemd-daemon libsystemd-login], [have_systemd=yes], [have_systemd=no]) - -PKG_CHECK_MODULES([UDEV], [libudev], - [have_udev=yes], [have_udev=no]) - -PKG_CHECK_MODULES([DBUS], [dbus-1], - [have_dbus=yes], [have_dbus=no]) - -PKG_CHECK_MODULES([DRM], [libdrm], - [have_drm=yes], [have_drm=no]) +AC_SUBST(SYSTEMD_CFLAGS) +AC_SUBST(SYSTEMD_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]) - -PKG_CHECK_MODULES([XKBCOMMON], [xkbcommon], - [have_xkbcommon=yes], [have_xkbcommon=no]) +AC_SUBST(GLES2_CFLAGS) +AC_SUBST(GLES2_LIBS) PKG_CHECK_MODULES([PANGO], [pango pangoft2], [have_pango=yes], [have_pango=no]) +AC_SUBST(PANGO_CFLAGS) +AC_SUBST(PANGO_LIBS) -PKG_CHECK_MODULES([FREETYPE2], [freetype2], - [have_freetype2=yes], [have_freetype2=no]) +PKG_CHECK_MODULES([PIXMAN], [pixman-1], + [have_pixman=yes], [have_pixman=no]) +AC_SUBST(PIXMAN_CFLAGS) +AC_SUBST(PIXMAN_LIBS) # # Parse arguments -# Parse all command line arguments and save the values so we can check them -# later when configuring kmscon. +# 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. # -AC_MSG_CHECKING([whether to use systemd for multi-seat support]) -AC_ARG_ENABLE([systemd], - [AS_HELP_STRING([--enable-systemd], - [enable multi-seat support with systemd])]) -AC_MSG_RESULT([ok]) - -AC_MSG_CHECKING([whether to use udev for device hotplug support]) -AC_ARG_ENABLE([udev], - [AS_HELP_STRING([--enable-udev], - [enable device hotplug support with udev])]) -AC_MSG_RESULT([ok]) - -AC_MSG_CHECKING([whether to use uterm fbdev video backend]) -AC_ARG_ENABLE([fbdev], - [AS_HELP_STRING([--enable-fbdev], - [enable uterm fbdev video backend])]) -AC_MSG_RESULT([ok]) - -AC_MSG_CHECKING([whether to use uterm drm video backend]) -AC_ARG_ENABLE([drm], - [AS_HELP_STRING([--enable-drm], - [enable uterm drm video backend])]) -AC_MSG_RESULT([ok]) - -AC_MSG_CHECKING([whether to provide OpenGLES2 support]) -AC_ARG_ENABLE([gles2], - [AS_HELP_STRING([--enable-gles2], - [provide uterm OpenGLES2 support])]) -AC_MSG_RESULT([ok]) - -AC_MSG_CHECKING([whether to use xkbcommon keyboard backend]) -AC_ARG_ENABLE([xkbcommon], - [AS_HELP_STRING([--disable-xkbcommon], - [disable xkbcommon keyboard backend])]) -AC_MSG_RESULT([ok]) +# all +AC_MSG_CHECKING([whether user wants all]) +AC_ARG_ENABLE([all], + [AS_HELP_STRING([--enable-all], + [enable all options (used for debugging)])]) +if test "x$enable_all" = "x" ; then + enable_all="no" +fi +AC_MSG_RESULT([$enable_all]) +# 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])]) -AC_MSG_RESULT([ok]) +if test "x$enable_all" = "xyes" ; then + enable_debug="yes" +elif 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_all" = "xyes" ; then + enable_optimizations="yes" +elif 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_all" = "xyes" ; then + enable_multi_seat="yes" +elif test "x$enable_multi_seat" = "x" ; then + enable_multi_seat="yes (default)" +fi +AC_MSG_RESULT([$enable_multi_seat]) + +# 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])], + [], + [with_video="default"]) +enable_video_fbdev="no" +enable_video_drm2d="no" +enable_video_drm3d="no" +if test "x$enable_all" = "xyes" ; then + enable_video_fbdev="yes" + enable_video_drm2d="yes" + enable_video_drm3d="yes" + with_video="fbdev,drm2d,drm3d (all)" +elif test "x$with_video" = "xdefault" ; then + enable_video_fbdev="yes (default)" + enable_video_drm2d="yes (default)" + enable_video_drm3d="yes (default)" + with_video="fbdev,drm2d,drm3d (default)" +elif test ! "x$with_video" = "x" ; then + SAVEIFS="$IFS" + IFS="," + for i in $with_video ; do + if test "x$i" = "xfbdev" ; then + enable_video_fbdev="yes" + elif test "x$i" = "xdrm2d" ; then + enable_video_drm2d="yes" + elif test "x$i" = "xdrm3d" ; then + enable_video_drm3d="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])], + [], + [with_renderers="default"]) +enable_renderer_bbulk="no" +enable_renderer_gltex="no" +enable_renderer_pixman="no" +if test "x$enable_all" = "xyes" ; then + enable_renderer_bbulk="yes" + enable_renderer_gltex="yes" + enable_renderer_pixman="yes" + with_renderers="bbulk,gltex,pixman (all)" +elif test "x$with_renderers" = "xdefault" ; then + enable_renderer_bbulk="yes (default)" + enable_renderer_gltex="yes (default)" + enable_renderer_pixman="no (default)" + with_renderers="bbulk,gltex (default)" +elif test ! "x$with_renderers" = "x" ; then + SAVEIFS="$IFS" + IFS="," + for i in $with_renderers ; do + if test "x$i" = "xbbulk" ; then + enable_renderer_bbulk="yes" + elif test "x$i" = "xgltex" ; then + enable_renderer_gltex="yes" + elif test "x$i" = "xpixman" ; then + enable_renderer_pixman="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])], + [], + [with_fonts="default"]) +enable_font_unifont="no" +enable_font_pango="no" +if test "x$enable_all" = "xyes" ; then + enable_font_unifont="yes" + enable_font_pango="yes" + with_fonts="unifont,pango (all)" +elif test "x$with_fonts" = "xdefault" ; then + enable_font_unifont="yes (default)" + enable_font_pango="yes (default)" + with_fonts="unifont,pango (default)" +elif test ! "x$with_fonts" = "x" ; then + SAVEIFS="$IFS" + IFS="," + for i in $with_fonts ; do + if test "x$i" = "xunifont" ; then + enable_font_unifont="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])], + [], + [with_sessions="default"]) +enable_session_dummy="no" +enable_session_terminal="no" +if test "x$enable_all" = "xyes" ; then + enable_session_dummy="yes" + enable_session_terminal="yes" + with_sessions="dummy,terminal (all)" +elif test "x$with_sessions" = "xdefault" ; then + enable_session_dummy="yes (default)" + enable_session_terminal="yes (default)" + with_sessions="dummy,terminal (default)" +elif test ! "x$with_sessions" = "x" ; then + 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" + else + IFS="$SAVEIFS" + AC_ERROR([Unknown session type $i]) + fi + done + IFS="$SAVEIFS" +fi +AC_MSG_RESULT([$with_sessions]) # -# Debug mode -# In debug mode we use -g -O0 for compilation and set several flags so verbose -# logging is possible. +# 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_enabled=no -if test x$enable_debug = xyes ; then - debug_enabled=yes +# debug +debug_avail=no +debug_missing="" +if test ! "x$enable_debug" = "xno" ; then + debug_avail=yes +else + debug_missing="enable-debug" fi -if test x$debug_enabled = xyes ; then - AC_DEFINE([KMSCON_ENABLE_DEBUG], [1], - [Enable debug for kmscon]) - AC_DEFINE([LOG_ENABLE_DEBUG], [1], - [Enable debug for log subsystem]) - AC_DEFINE([LLOG_ENABLE_DEBUG], [1], - [Enable debug for llog subsystem]) +# optimizations +optimizations_avail=no +optimizations_missing="" +if test ! "x$enable_optimizations" = "xno" ; then + optimizations_avail=yes else - AC_DEFINE([NDEBUG], [1], [No Debug]) + optimizations_missing="enable-optimizations" fi -AM_CONDITIONAL([DEBUG], [test x$debug_enabled = xyes]) +# video fbdev +video_fbdev_avail=no +video_fbdev_missing="" +if test ! "x$enable_video_fbdev" = "xno" ; then + # TODO: check for kernel headers + video_fbdev_avail=yes +else + video_fbdev_missing="enable-video-fbdev" +fi -# -# Main dependencies -# This checks for all dependencies that are not optional. -# +# video drm2d +video_drm2d_avail=no +video_drm2d_missing="" +if test ! "x$enable_video_drm2d" = "xno" ; then + video_drm2d_avail=yes +else + video_drm2d_missing="enable-video-drm2d" +fi -# We currently have no mandatory dependencies! +# video drm3d +video_drm3d_avail=no +video_drm3d_missing="" +if test ! "x$enable_video_drm3d" = "xno" ; then + video_drm3d_avail=yes + if test "x$have_gbm" = "xno" ; then + video_drm3d_avail=no + video_drm3d_missing="libgbm,$video_drm3d_missing" + fi + if test "x$have_egl" = "xno" ; then + video_drm3d_avail=no + video_drm3d_missing="libegl,$video_drm3d_missing" + fi + if test "x$have_gles2" = "xno" ; then + video_drm3d_avail=no + video_drm3d_missing="libgles2,$video_drm3d_missing" + fi -# -# Systemd dependency -# We can optionally use systemd for multi-seat support. If systemd is not -# available or the system was not started with systemd, we simply fall back to -# single-seat mode. -# + if test "x$video_drm3d_avail" = "xno" ; then + if test "x$enable_video_drm3d" = "xyes" ; then + AC_ERROR([missing for drm3d video backend: $video_drm3d_missing]) + fi + fi +else + video_drm3d_missing="enable-video-drm3d" +fi + +# multi-seat +multi_seat_avail=no +multi_seat_missing="" +if test ! "x$enable_multi_seat" = "xno" ; then + multi_seat_avail=yes + if test "x$have_systemd" = "xno" ; then + multi_seat_avail=no + multi_seat_missing="libsystemd" + fi -systemd_enabled=no -if test ! x$enable_systemd = xno ; then - if test x$have_systemd = xyes ; then - systemd_enabled=yes - elif test x$enable_systemd = xyes ; then - AC_ERROR([systemd libraries not found for multi-seat support]) + if test "x$multi_seat_avail" = "xno" ; then + if test "x$enable_multi_seat" = "xyes" ; then + AC_ERROR([missing for multi-seat support: $multi_seat_missing]) + fi fi +else + multi_seat_missing="enable-multi-seat" fi -if test x$systemd_enabled = xyes ; then - AC_DEFINE([UTERM_HAVE_SYSTEMD], [1], - [Use systemd for multi-seat support]) +# renderer bbulk +renderer_bbulk_avail=no +renderer_bbulk_missing="" +if test ! "x$enable_renderer_bbulk" = "xno" ; then + renderer_bbulk_avail=yes else - SYSTEMD_CFLAGS="" - SYSTEMD_LIBS="" + renderer_bbulk_missing="enable-renderer-bbulk" fi -# -# Udev dependency -# For hotplugging support we need udev to notify us about system events. If udev -# is not available, we simply fall back to static mode. Periodic scanning is -# also supported. -# +# renderer gltex +renderer_gltex_avail=no +renderer_gltex_missing="" +if test ! "x$enable_renderer_gltex" = "xno" ; then + renderer_gltex_avail=yes + if test "x$have_gles2" = "xno" ; then + renderer_gltex_avail=no + renderer_gltex_missing="libgles2" + fi -udev_enabled=no -if test ! x$enable_udev = xno ; then - if test x$have_udev = xyes ; then - udev_enabled=yes - elif test x$enable_udev = xyes ; then - AC_ERROR([udev libraries not found for device hotplug support]) + if test "x$renderer_gltex_avail" = "xno" ; then + if test "x$enable_renderer_gltex" = "xyes" ; then + AC_ERROR([missing for renderer-gltex: $renderer_gltex_missing]) + fi fi +else + renderer_gltex_missing="enable-renderer-gltex" fi -if test x$udev_enabled = xyes ; then - AC_DEFINE([UTERM_HAVE_UDEV], [1], - [Use udev for device hotplug support]) +# renderer pixman +renderer_pixman_avail=no +renderer_pixman_missing="" +if test ! "x$enable_renderer_pixman" = "xno" ; then + renderer_pixman_avail=yes + if test "x$have_pixman" = "xno" ; then + renderer_pixman_avail=no + renderer_pixman_missing="pixman" + fi + + if test "x$renderer_pixman_avail" = "xno" ; then + if test "x$enable_renderer_pixman" = "xyes" ; then + AC_ERROR([missing for renderer-pixman: $renderer_pixman_missing]) + fi + fi else - UDEV_CFLAGS="" - UDEV_LIBS="" + renderer_pixman_missing="enable-renderer-pixman" fi -# -# DBus dependency -# For IPC mechanisms we use DBus. Especially multi-seat enabled multi-session -# capable applications need DBus to manage application and terminal switching. -# +# font unifont +font_unifont_avail=no +font_unifont_missing="" +if test ! "x$enable_font_unifont" = "xno" ; then + font_unifont_avail=yes +else + font_unifont_missing="enable-font-unifont" +fi -dbus_enabled=no -if test ! x$enable_dbus = xno ; then - if test x$have_dbus = xyes ; then - dbus_enabled=yes - elif test x$enable_dbus = xyes; then - AC_ERROR([dbus libraries not found]) +# font pango +font_pango_avail=no +font_pango_missing="" +if test ! "x$enable_font_pango" = "xno" ; then + font_pango_avail=yes + if test "x$have_pango" = "xno" ; then + font_pango_avail=no + font_pango_missing="libpango" fi + + if test "x$font_pango_avail" = "xno" ; then + if test "x$enable_font_pango" = "xyes" ; then + AC_ERROR([missing for font-pango: $font_pango_missing]) + fi + fi +else + font_pango_missing="enable-font-pango" fi -if test x$dbus_enabled = xyes; then - AC_DEFINE([EV_HAVE_DBUS], [1], - [Use dbus for IPC]) +# session dummy +session_dummy_avail=no +session_dummy_missing="" +if test ! "x$enable_session_dummy" = "xno" ; then + session_dummy_avail=yes else - DBUS_CFLAGS="" - DBUS_LIBS="" + session_dummy_missing="enable-session-dummy" fi -AM_CONDITIONAL([EV_HAVE_DBUS], [test x$dbus_enabled = xyes]) +# session terminal +session_terminal_avail=no +session_terminal_missing="" +if test ! "x$enable_session_terminal" = "xno" ; then + session_terminal_avail=yes +else + session_terminal_missing="enable-session-terminal" +fi # -# Uterm fbdev backend -# This checks whether the fbdev backend was requested and enables it then. There -# are no special dependencies for it except the kernel headers. -# TODO: check for kernel headers here +# 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. # -fbdev_enabled=no -if test ! x$enable_fbdev = xno ; then - fbdev_enabled=yes +# 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 + 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 -if test x$fbdev_enabled = xyes ; then - AC_DEFINE([UTERM_HAVE_FBDEV], [1], - [Use uterm fbdev video backend]) +# 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 -AM_CONDITIONAL([UTERM_HAVE_FBDEV], [test x$fbdev_enabled = xyes]) +# 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 -# -# Uterm drm backend -# This checks whether libdrm is available and some combination of libgbm, egl -# and gl or glesv2. If it is not available, then the drm backend is simply not -# built. -# +# 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 -dumb_enabled=no -drm_enabled=no -gles2_enabled=no -if test ! x$enable_drm = xno ; then - if test x$have_drm = xyes ; then - dumb_enabled=yes +# renderer pixman +renderer_pixman_enabled=no +if test "x$renderer_pixman_avail" = "xyes" ; then + if test "x${enable_renderer_pixman% *}" = "xyes" ; then + renderer_pixman_enabled=yes fi +fi - if test ! x$enable_gles2 = xno ; then - if test x$have_drm = xyes -a x$have_gbm = xyes -a x$have_egl = xyes ; then - if test x$have_gles2 = xyes ; then - drm_enabled=yes - gles2_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 + +# 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 - if test x$enable_drm = xyes -a x$dumb_enabled = xno ; then - AC_ERROR([drm library not found for uterm dumb drm backend]) +# video drm3d +video_drm3d_enabled=no +if test "x$video_drm3d_avail" = "xyes" ; then + if test "x${enable_video_drm3d% *}" = "xyes" ; then + video_drm3d_enabled=yes fi +fi - if test x$enable_gles2 = xyes -a x$drm_enabled = xno ; then - AC_ERROR([drm, gbm, egl, gl or gles2 libraries not found for uterm drm backend]) +# video drm2d +video_drm2d_enabled=no +if test "x$video_drm2d_avail" = "xyes" ; then + if test "x${enable_video_drm2d% *}" = "xyes" ; then + video_drm2d_enabled=yes fi fi -if test x$dumb_enabled = xyes ; then - AC_DEFINE([UTERM_HAVE_DUMB], [1], - [Use uterm dumb drm video backend]) +# 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 - if test x$drm_enabled = xyes ; then - AC_DEFINE([UTERM_HAVE_DRM], [1], - [Use uterm DRM video backend]) - else - GBM_CFLAGS="" - GBM_LIBS="" - EGL_CFLAGS="" - EGL_LIBS="" +# 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 -else - DRM_CFLAGS="" - DRM_LIBS="" - GBM_CFLAGS="" - GBM_LIBS="" - EGL_CFLAGS="" - EGL_LIBS="" fi -if test x$gles2_enabled = xyes ; then - AC_DEFINE([KMSCON_HAVE_GLES2], [1], - [Use OpenGLESv2 as drawing backend]) +# +# 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 - GLES2_CFLAGS="" - GLES2_LIBS="" + 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"]) + +# 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 drm2d +if test "x$video_drm2d_enabled" = "xyes" ; then + AC_DEFINE([BUILD_ENABLE_VIDEO_DRM2D], [1], + [Build uterm drm2d drm3d video backend]) +fi + +AM_CONDITIONAL([BUILD_ENABLE_VIDEO_DRM2D], + [test "x$video_drm2d_enabled" = "xyes"]) + +# video drm3d +if test "x$video_drm3d_enabled" = "xyes" ; then + AC_DEFINE([BUILD_ENABLE_VIDEO_DRM3D], [1], + [Build uterm drm3d video backend]) +fi + +AM_CONDITIONAL([BUILD_ENABLE_VIDEO_DRM3D], + [test "x$video_drm3d_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"]) + +# renderer bbulk +if test "x$renderer_bbulk_enabled" = "xyes" ; then + AC_DEFINE([BUILD_ENABLE_RENDERER_BBULK], [1], + [Build bbulk rendering backend]) fi -AM_CONDITIONAL([UTERM_HAVE_DUMB], [test x$dumb_enabled = xyes]) -AM_CONDITIONAL([UTERM_HAVE_DRM], [test x$drm_enabled = xyes]) -AM_CONDITIONAL([KMSCON_HAVE_GLES2], [test x$gles2_enabled = xyes]) +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"]) + +# renderer pixman +if test "x$renderer_pixman_enabled" = "xyes" ; then + AC_DEFINE([BUILD_ENABLE_RENDERER_PIXMAN], [1], + [Build pixman rendering backend]) +fi + +AM_CONDITIONAL([BUILD_ENABLE_RENDERER_PIXMAN], + [test "x$renderer_pixman_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 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"]) # -# xkbcommon keyboard backend -# This checks for the xkbcommon library for keyboard handling in uterm. If it is -# not available, we use a dumb-keyboard backend as fall-back. +# Miscellaneous Checks +# All checks below are independent of module checking or depend on the results +# of it. They do not have any dependencies themselves so they are not part of the +# module infrastructure. # -xkbcommon_enabled=no -if test ! x$enable_xkbcommon = xno ; then - if test x$have_xkbcommon = xyes ; then - xkbcommon_enabled=yes - elif test x$enable_xkbcommon = xyes ; then - AC_ERROR([xkbcommon not found for keyboard backend]) - fi +# 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 -if test x$xkbcommon_enabled = xyes ; then - AC_DEFINE([UTERM_HAVE_XKBCOMMON], [1], - [Use xkbcommon as input keyboard handling backend]) +# check for xsltproc +AC_ARG_VAR([XSLTPROC], [xsltproc program]) +AC_PATH_PROG(XSLTPROC, xsltproc) +AM_CONDITIONAL([BUILD_HAVE_XSLTPROC], [test "x$XSLTPROC" != "x"]) + +# check for offline man-pages stylesheet +AC_MSG_CHECKING([for docbook manpages stylesheet]) +BUILD_MANPAGES_STYLESHEET="http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl" +AC_PATH_PROGS_FEATURE_CHECK([XSLTPROC_TMP], [xsltproc], + AS_IF([`"$ac_path_XSLTPROC_TMP" --nonet "$BUILD_MANPAGES_STYLESHEET" > /dev/null 2>&1`], + [BUILD_HAVE_MANPAGES_STYLESHEET=yes])) +if test "x$BUILD_HAVE_MANPAGES_STYLESHEET" = "xyes"; then + AM_CONDITIONAL([BUILD_HAVE_MANPAGES_STYLESHEET], true) + AC_SUBST(BUILD_MANPAGES_STYLESHEET) + AC_MSG_RESULT([yes]) else - XKBCOMMON_CFLAGS="" - XKBCOMMON_LIBS="" + AM_CONDITIONAL([BUILD_HAVE_MANPAGES_STYLESHEET], false) + AC_MSG_RESULT([no]) fi -AM_CONDITIONAL([UTERM_HAVE_XKBCOMMON], [test x$xkbcommon_enabled = xyes]) +# gles2 helpers +AM_CONDITIONAL([BUILD_HAVE_GLES2], [test "x$have_gles2" = "xyes"]) + +# check for mandatory objcopy program +AC_ARG_VAR([OBJCOPY], [objcopy program]) +AC_CHECK_TOOL([OBJCOPY], [objcopy], "") + +if test "x$OBJCOPY" = "x" ; then + AC_ERROR([Cannot find "objcopy" program]) +fi # # Makefile vars @@ -351,29 +791,8 @@ AM_CONDITIONAL([UTERM_HAVE_XKBCOMMON], [test x$xkbcommon_enabled = xyes]) # makefiles. # -AC_SUBST(SYSTEMD_CFLAGS) -AC_SUBST(SYSTEMD_LIBS) -AC_SUBST(DBUS_CFLAGS) -AC_SUBST(DBUS_LIBS) -AC_SUBST(DRM_CFLAGS) -AC_SUBST(DRM_LIBS) -AC_SUBST(EGL_CFLAGS) -AC_SUBST(EGL_LIBS) -AC_SUBST(GBM_CFLAGS) -AC_SUBST(GBM_LIBS) -AC_SUBST(GLES2_CFLAGS) -AC_SUBST(GLES2_LIBS) -AC_SUBST(UDEV_CFLAGS) -AC_SUBST(UDEV_LIBS) -AC_SUBST(XKBCOMMON_CFLAGS) -AC_SUBST(XKBCOMMON_LIBS) -AC_SUBST(FREETYPE2_CFLAGS) -AC_SUBST(FREETYPE2_LIBS) -AC_SUBST(PANGO_CFLAGS) -AC_SUBST(PANGO_LIBS) - -AC_CONFIG_FILES([Makefile docs/reference/Makefile docs/reference/version.xml]) -AC_OUTPUT([src/genshader.c]) +AC_CONFIG_FILES([Makefile]) +AC_OUTPUT # # Configuration output @@ -383,17 +802,32 @@ AC_OUTPUT([src/genshader.c]) AC_MSG_NOTICE([Build configuration: - debug: $debug_enabled + prefix: $prefix + exec-prefix: $exec_prefix + libdir: $libdir + includedir: $includedir + + Miscellaneous Options: + debug: $debug_enabled ($debug_avail: $debug_missing) + optimizations: $optimizations_enabled ($optimizations_avail: $optimizations_missing) + multi-seat: $multi_seat_enabled ($multi_seat_avail: $multi_seat_missing) + + Video Backends: + fbdev: $video_fbdev_enabled ($video_fbdev_avail: $video_fbdev_missing) + drm2d: $video_drm2d_enabled ($video_drm2d_avail: $video_drm2d_missing) + drm3d: $video_drm3d_enabled ($video_drm3d_avail: $video_drm3d_missing) + + Font Backends: + unifont: $font_unifont_enabled ($font_unifont_avail: $font_unifont_missing) + pango: $font_pango_enabled ($font_pango_avail: $font_pango_missing) - systemd: $systemd_enabled - udev: $udev_enabled - dbus: $dbus_enabled - xkbcommon: $xkbcommon_enabled + Renderers: + bbulk: $renderer_bbulk_enabled ($renderer_bbulk_avail: $renderer_bbulk_missing) + gltex: $renderer_gltex_enabled ($renderer_gltex_avail: $renderer_gltex_missing) + pixman: $renderer_pixman_enabled ($renderer_pixman_avail: $renderer_pixman_missing) - libuterm video backends: - fbdev: $fbdev_enabled - dumb drm: $dumb_enabled - drm: $drm_enabled - OpenGLES2: $gles2_enabled + Session Types: + dummy: $session_dummy_enabled ($session_dummy_avail: $session_dummy_missing) + terminal: $session_terminal_enabled ($session_terminal_avail: $session_terminal_missing) - Run "make" to start compilation process]) + Run "${MAKE-make}" to start compilation process])