c6c2aca050fdeae011598a543446bea0529e95aa
[platform/upstream/kmscon.git] / configure.ac
1 #
2 # Kmscon - build configuration script
3 # Copyright (c) 2012 David Herrmann <dh.herrmann@googlemail.com>
4 #
5
6 AC_PREREQ(2.68)
7
8 AC_INIT([kmscon], [2])
9 AC_SUBST(PACKAGE_URL, [https://github.com/dvdhrm/kmscon])
10 AC_CONFIG_SRCDIR([src/main.c])
11 AC_CONFIG_AUX_DIR([build-aux])
12 AC_CONFIG_MACRO_DIR([m4])
13 AC_CONFIG_HEADER(config.h)
14
15 AM_INIT_AUTOMAKE([foreign 1.11 subdir-objects dist-bzip2 no-dist-gzip tar-pax -Wall -Werror])
16 AM_SILENT_RULES([yes])
17
18 #
19 # Don't add a default "-g -O2" if CFLAGS wasn't specified. For debugging it is
20 # often more convenient to have "-g -O0". You can still override it by
21 # explicitely setting it on the command line.
22 #
23
24 : ${CFLAGS=""}
25
26 AC_USE_SYSTEM_EXTENSIONS
27 AC_PROG_CC
28 AC_PROG_CC_C99
29 AM_PROG_CC_C_O
30 AM_PROG_AR
31
32 LT_PREREQ(2.2)
33 LT_INIT
34
35 #
36 # check for gtk-doc
37 # Use weird syntax to make "gtkdocize" happy.
38 #
39
40 m4_ifdef([GTK_DOC_CHECK],[
41 GTK_DOC_CHECK([1.14],[--flavour no-tmpl])
42 ], [AM_CONDITIONAL([ENABLE_GTK_DOC], false)])
43
44 #
45 # pkg-config dependencies
46 # This unconditionally checks for all dependencies even if they are disabled. We
47 # later look whether all required depedencies are met and finish the
48 # configuration. We group similar packages into one logical group here to avoid
49 # having variables for each single library.
50 # This, however, makes ./configure output very unintuitive error messages if a
51 # package is not found so we must make sure we print more verbose messages
52 # ourself.
53 #
54
55 PKG_CHECK_MODULES([SYSTEMD], [libsystemd-login],
56                   [have_systemd=yes], [have_systemd=no])
57
58 PKG_CHECK_MODULES([UDEV], [libudev],
59                   [have_udev=yes], [have_udev=no])
60
61 PKG_CHECK_MODULES([DBUS], [dbus-1],
62                   [have_dbus=yes], [have_dbus=no])
63
64 PKG_CHECK_MODULES([DRM], [libdrm],
65                   [have_drm=yes], [have_drm=no])
66
67 PKG_CHECK_MODULES([GBM], [gbm],
68                   [have_gbm=yes], [have_gbm=no])
69
70 PKG_CHECK_MODULES([EGL], [egl],
71                   [have_egl=yes], [have_egl=no])
72
73 PKG_CHECK_MODULES([GLES2], [glesv2],
74                   [have_gles2=yes], [have_gles2=no])
75
76 PKG_CHECK_MODULES([XKBCOMMON], [xkbcommon],
77                   [have_xkbcommon=yes], [have_xkbcommon=no])
78
79 PKG_CHECK_MODULES([PANGO], [pango pangoft2],
80                   [have_pango=yes], [have_pango=no])
81
82 PKG_CHECK_MODULES([FREETYPE2], [freetype2],
83                   [have_freetype2=yes], [have_freetype2=no])
84
85 #
86 # Parse arguments
87 # Parse all command line arguments and save the values so we can check them
88 # later when configuring kmscon.
89 #
90
91 AC_MSG_CHECKING([whether to use systemd for multi-seat support])
92 AC_ARG_ENABLE([systemd],
93               [AS_HELP_STRING([--enable-systemd],
94                               [enable multi-seat support with systemd])])
95 AC_MSG_RESULT([ok])
96
97 AC_MSG_CHECKING([whether to use udev for device hotplug support])
98 AC_ARG_ENABLE([udev],
99               [AS_HELP_STRING([--enable-udev],
100                               [enable device hotplug support with udev])])
101 AC_MSG_RESULT([ok])
102
103 AC_MSG_CHECKING([whether to use uterm fbdev video backend])
104 AC_ARG_ENABLE([fbdev],
105               [AS_HELP_STRING([--enable-fbdev],
106                               [enable uterm fbdev video backend])])
107 AC_MSG_RESULT([ok])
108
109 AC_MSG_CHECKING([whether to use uterm drm video backend])
110 AC_ARG_ENABLE([drm],
111               [AS_HELP_STRING([--enable-drm],
112                               [enable uterm drm video backend])])
113 AC_MSG_RESULT([ok])
114
115 AC_MSG_CHECKING([whether to provide OpenGLES2 support])
116 AC_ARG_ENABLE([gles2],
117               [AS_HELP_STRING([--enable-gles2],
118                               [provide uterm OpenGLES2 support])])
119 AC_MSG_RESULT([ok])
120
121 AC_MSG_CHECKING([whether to use xkbcommon keyboard backend])
122 AC_ARG_ENABLE([xkbcommon],
123               [AS_HELP_STRING([--disable-xkbcommon],
124                               [disable xkbcommon keyboard backend])])
125 AC_MSG_RESULT([ok])
126
127 AC_MSG_CHECKING([whether to build with debugging on])
128 AC_ARG_ENABLE([debug],
129               [AS_HELP_STRING([--enable-debug],
130                               [whether to build with debugging on])])
131 AC_MSG_RESULT([ok])
132
133 #
134 # Debug mode
135 # In debug mode we use -g -O0 for compilation and set several flags so verbose
136 # logging is possible.
137 #
138
139 debug_enabled=no
140 if test x$enable_debug = xyes ; then
141         debug_enabled=yes
142 fi
143
144 if test x$debug_enabled = xyes ; then
145         AC_DEFINE([KMSCON_ENABLE_DEBUG], [1],
146                   [Enable debug for kmscon])
147         AC_DEFINE([LOG_ENABLE_DEBUG], [1],
148                   [Enable debug for log subsystem])
149         AC_DEFINE([LLOG_ENABLE_DEBUG], [1],
150                   [Enable debug for llog subsystem])
151 else
152         AC_DEFINE([NDEBUG], [1], [No Debug])
153 fi
154
155 AM_CONDITIONAL([DEBUG], [test x$debug_enabled = xyes])
156
157 #
158 # Main dependencies
159 # This checks for all dependencies that are not optional.
160 #
161
162 # We currently have no mandatory dependencies!
163
164 #
165 # Systemd dependency
166 # We can optionally use systemd for multi-seat support. If systemd is not
167 # available or the system was not started with systemd, we simply fall back to
168 # single-seat mode.
169 #
170
171 systemd_enabled=no
172 if test ! x$enable_systemd = xno ; then
173         if test x$have_systemd = xyes ; then
174                 systemd_enabled=yes
175         elif test x$enable_systemd = xyes ; then
176                 AC_ERROR([systemd libraries not found for multi-seat support])
177         fi
178 fi
179
180 if test x$systemd_enabled = xyes ; then
181         AC_DEFINE([UTERM_HAVE_SYSTEMD], [1],
182                   [Use systemd for multi-seat support])
183 else
184         SYSTEMD_CFLAGS=""
185         SYSTEMD_LIBS=""
186 fi
187
188 #
189 # Udev dependency
190 # For hotplugging support we need udev to notify us about system events. If udev
191 # is not available, we simply fall back to static mode. Periodic scanning is
192 # also supported.
193 #
194
195 udev_enabled=no
196 if test ! x$enable_udev = xno ; then
197         if test x$have_udev = xyes ; then
198                 udev_enabled=yes
199         elif test x$enable_udev = xyes ; then
200                 AC_ERROR([udev libraries not found for device hotplug support])
201         fi
202 fi
203
204 if test x$udev_enabled = xyes ; then
205         AC_DEFINE([UTERM_HAVE_UDEV], [1],
206                   [Use udev for device hotplug support])
207 else
208         UDEV_CFLAGS=""
209         UDEV_LIBS=""
210 fi
211
212 #
213 # DBus dependency
214 # For IPC mechanisms we use DBus. Especially multi-seat enabled multi-session
215 # capable applications need DBus to manage application and terminal switching.
216 #
217
218 dbus_enabled=no
219 if test ! x$enable_dbus = xno ; then
220         if test x$have_dbus = xyes ; then
221                 dbus_enabled=yes
222         elif test x$enable_dbus = xyes; then
223                 AC_ERROR([dbus libraries not found])
224         fi
225 fi
226
227 if test x$dbus_enabled = xyes; then
228         AC_DEFINE([EV_HAVE_DBUS], [1],
229                   [Use dbus for IPC])
230 else
231         DBUS_CFLAGS=""
232         DBUS_LIBS=""
233 fi
234
235 AM_CONDITIONAL([EV_HAVE_DBUS], [test x$dbus_enabled = xyes])
236
237 #
238 # Uterm fbdev backend
239 # This checks whether the fbdev backend was requested and enables it then. There
240 # are no special dependencies for it except the kernel headers.
241 # TODO: check for kernel headers here
242 #
243
244 fbdev_enabled=no
245 if test ! x$enable_fbdev = xno ; then
246         fbdev_enabled=yes
247 fi
248
249 if test x$fbdev_enabled = xyes ; then
250         AC_DEFINE([UTERM_HAVE_FBDEV], [1],
251                   [Use uterm fbdev video backend])
252 fi
253
254 AM_CONDITIONAL([UTERM_HAVE_FBDEV], [test x$fbdev_enabled = xyes])
255
256 #
257 # Uterm drm backend
258 # This checks whether libdrm is available and some combination of libgbm, egl
259 # and gl or glesv2. If it is not available, then the drm backend is simply not
260 # built.
261 #
262
263 dumb_enabled=no
264 drm_enabled=no
265 gles2_enabled=no
266 if test ! x$enable_drm = xno ; then
267         if test x$have_drm = xyes ; then
268                 dumb_enabled=yes
269         fi
270
271         if test ! x$enable_gles2 = xno ; then
272                 if test x$have_drm = xyes -a x$have_gbm = xyes -a x$have_egl = xyes ; then
273                         if test x$have_gles2 = xyes ; then
274                                 drm_enabled=yes
275                                 gles2_enabled=yes
276                         fi
277                 fi
278         fi
279
280         if test x$enable_drm = xyes -a x$dumb_enabled = xno ; then
281                 AC_ERROR([drm library not found for uterm dumb drm backend])
282         fi
283
284         if test x$enable_gles2 = xyes -a x$drm_enabled = xno ; then
285                 AC_ERROR([drm, gbm, egl, gl or gles2 libraries not found for uterm drm backend])
286         fi
287 fi
288
289 if test x$dumb_enabled = xyes ; then
290         AC_DEFINE([UTERM_HAVE_DUMB], [1],
291                   [Use uterm dumb drm video backend])
292
293         if test x$drm_enabled = xyes ; then
294                 AC_DEFINE([UTERM_HAVE_DRM], [1],
295                           [Use uterm DRM video backend])
296         else
297                 GBM_CFLAGS=""
298                 GBM_LIBS=""
299                 EGL_CFLAGS=""
300                 EGL_LIBS=""
301         fi
302 else
303         DRM_CFLAGS=""
304         DRM_LIBS=""
305         GBM_CFLAGS=""
306         GBM_LIBS=""
307         EGL_CFLAGS=""
308         EGL_LIBS=""
309 fi
310
311 if test x$gles2_enabled = xyes ; then
312         AC_DEFINE([KMSCON_HAVE_GLES2], [1],
313                   [Use OpenGLESv2 as drawing backend])
314 else
315         GLES2_CFLAGS=""
316         GLES2_LIBS=""
317 fi
318
319 AM_CONDITIONAL([UTERM_HAVE_DUMB], [test x$dumb_enabled = xyes])
320 AM_CONDITIONAL([UTERM_HAVE_DRM], [test x$drm_enabled = xyes])
321 AM_CONDITIONAL([KMSCON_HAVE_GLES2], [test x$gles2_enabled = xyes])
322
323 #
324 # xkbcommon keyboard backend
325 # This checks for the xkbcommon library for keyboard handling in uterm. If it is
326 # not available, we use a dumb-keyboard backend as fall-back.
327 #
328
329 xkbcommon_enabled=no
330 if test ! x$enable_xkbcommon = xno ; then
331         if test x$have_xkbcommon = xyes ; then
332                 xkbcommon_enabled=yes
333         elif test x$enable_xkbcommon = xyes ; then
334                 AC_ERROR([xkbcommon not found for keyboard backend])
335         fi
336 fi
337
338 if test x$xkbcommon_enabled = xyes ; then
339         AC_DEFINE([UTERM_HAVE_XKBCOMMON], [1],
340                   [Use xkbcommon as input keyboard handling backend])
341 else
342         XKBCOMMON_CFLAGS=""
343         XKBCOMMON_LIBS=""
344 fi
345
346 AM_CONDITIONAL([UTERM_HAVE_XKBCOMMON], [test x$xkbcommon_enabled = xyes])
347
348 #
349 # Makefile vars
350 # After everything is configured, we correctly substitute the values for the
351 # makefiles.
352 #
353
354 AC_SUBST(SYSTEMD_CFLAGS)
355 AC_SUBST(SYSTEMD_LIBS)
356 AC_SUBST(DBUS_CFLAGS)
357 AC_SUBST(DBUS_LIBS)
358 AC_SUBST(DRM_CFLAGS)
359 AC_SUBST(DRM_LIBS)
360 AC_SUBST(EGL_CFLAGS)
361 AC_SUBST(EGL_LIBS)
362 AC_SUBST(GBM_CFLAGS)
363 AC_SUBST(GBM_LIBS)
364 AC_SUBST(GLES2_CFLAGS)
365 AC_SUBST(GLES2_LIBS)
366 AC_SUBST(UDEV_CFLAGS)
367 AC_SUBST(UDEV_LIBS)
368 AC_SUBST(XKBCOMMON_CFLAGS)
369 AC_SUBST(XKBCOMMON_LIBS)
370 AC_SUBST(FREETYPE2_CFLAGS)
371 AC_SUBST(FREETYPE2_LIBS)
372 AC_SUBST(PANGO_CFLAGS)
373 AC_SUBST(PANGO_LIBS)
374
375 AC_CONFIG_FILES([Makefile docs/reference/Makefile docs/reference/version.xml])
376 AC_OUTPUT([src/genshader.c])
377
378 #
379 # Configuration output
380 # Show configuration to the user so they can check whether everything was
381 # configured as expected.
382 #
383
384 AC_MSG_NOTICE([Build configuration:
385
386                 debug: $debug_enabled
387
388               systemd: $systemd_enabled
389                  udev: $udev_enabled
390                  dbus: $dbus_enabled
391             xkbcommon: $xkbcommon_enabled
392
393         libuterm video backends:
394                 fbdev: $fbdev_enabled
395              dumb drm: $dumb_enabled
396                   drm: $drm_enabled
397             OpenGLES2: $gles2_enabled
398
399         Run "make" to start compilation process])