configure: Stop using AM_MAINTAINER_MODE
[platform/upstream/libdrm.git] / configure.ac
1 #  Copyright 2005 Adam Jackson.
2 #
3 #  Permission is hereby granted, free of charge, to any person obtaining a
4 #  copy of this software and associated documentation files (the "Software"),
5 #  to deal in the Software without restriction, including without limitation
6 #  on the rights to use, copy, modify, merge, publish, distribute, sub
7 #  license, and/or sell copies of the Software, and to permit persons to whom
8 #  the Software is furnished to do so, subject to the following conditions:
9 #
10 #  The above copyright notice and this permission notice (including the next
11 #  paragraph) shall be included in all copies or substantial portions of the
12 #  Software.
13 #
14 #  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 #  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 #  FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
17 #  ADAM JACKSON BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
18 #  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
19 #  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20
21 AC_PREREQ([2.63])
22 AC_INIT([libdrm],
23         [2.4.59],
24         [https://bugs.freedesktop.org/enter_bug.cgi?product=DRI],
25         [libdrm])
26
27 AC_CONFIG_HEADERS([config.h])
28 AC_CONFIG_SRCDIR([Makefile.am])
29 AC_CONFIG_MACRO_DIR([m4])
30 AC_CONFIG_AUX_DIR([build-aux])
31
32 AM_INIT_AUTOMAKE([1.10 foreign dist-bzip2])
33
34 # Enable quiet compiles on automake 1.11.
35 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
36
37 # Check for programs
38 AC_PROG_CC
39
40 AC_USE_SYSTEM_EXTENSIONS
41 AC_SYS_LARGEFILE
42 AC_FUNC_ALLOCA
43
44 AC_CHECK_HEADERS([sys/mkdev.h])
45
46 # Initialize libtool
47 LT_PREREQ([2.2])
48 LT_INIT([disable-static])
49
50
51 PKG_CHECK_MODULES(PTHREADSTUBS, pthread-stubs)
52 AC_SUBST(PTHREADSTUBS_CFLAGS)
53 AC_SUBST(PTHREADSTUBS_LIBS)
54
55 pkgconfigdir=${libdir}/pkgconfig
56 AC_SUBST(pkgconfigdir)
57 AC_ARG_ENABLE([udev],
58               [AS_HELP_STRING([--enable-udev],
59                               [Enable support for using udev instead of mknod (default: disabled)])],
60               [UDEV=$enableval], [UDEV=no])
61
62 AC_ARG_ENABLE(libkms,
63               AS_HELP_STRING([--disable-libkms],
64               [Disable KMS mm abstraction library (default: auto, enabled on x86]),
65               [LIBKMS=$enableval], [LIBKMS=auto])
66
67 AC_ARG_ENABLE(intel,
68               AS_HELP_STRING([--disable-intel],
69               [Enable support for intel's KMS API (default: auto)]),
70               [INTEL=$enableval], [INTEL=auto])
71
72 AC_ARG_ENABLE(radeon,
73               AS_HELP_STRING([--disable-radeon],
74               [Enable support for radeon's KMS API (default: auto)]),
75               [RADEON=$enableval], [RADEON=auto])
76
77 AC_ARG_ENABLE(nouveau,
78               AS_HELP_STRING([--disable-nouveau],
79               [Enable support for nouveau's KMS API (default: auto)]),
80               [NOUVEAU=$enableval], [NOUVEAU=auto])
81
82 AC_ARG_ENABLE(vmwgfx,
83               AS_HELP_STRING([--disable-vmwgfx],
84               [Enable support for vmwgfx's KMS API (default: yes)]),
85               [VMWGFX=$enableval], [VMWGFX=yes])
86
87 AC_ARG_ENABLE(omap-experimental-api,
88               AS_HELP_STRING([--enable-omap-experimental-api],
89               [Enable support for OMAP's experimental API (default: disabled)]),
90               [OMAP=$enableval], [OMAP=no])
91
92 AC_ARG_ENABLE(exynos-experimental-api,
93               AS_HELP_STRING([--enable-exynos-experimental-api],
94               [Enable support for EXYNOS's experimental API (default: disabled)]),
95               [EXYNOS=$enableval], [EXYNOS=no])
96
97 AC_ARG_ENABLE(freedreno,
98               AS_HELP_STRING([--disable-freedreno],
99               [Enable support for freedreno's KMS API (default: auto, enabled on arm)]),
100               [FREEDRENO=$enableval], [FREEDRENO=auto])
101
102 AC_ARG_ENABLE(freedreno-kgsl,
103               AS_HELP_STRING([--enable-freedreno-kgsl],
104               [Enable support for freedreno's to use downstream android kernel API (default: disabled)]),
105               [FREEDRENO_KGSL=$enableval], [FREEDRENO_KGSL=no])
106
107 AC_ARG_ENABLE(tegra-experimental-api,
108               AS_HELP_STRING([--enable-tegra-experimental-api],
109               [Enable support for Tegra's experimental API (default: disabled)]),
110               [TEGRA=$enableval], [TEGRA=no])
111
112 AC_ARG_ENABLE(install-test-programs,
113                   AS_HELP_STRING([--enable-install-test-programs],
114                   [Install test programs (default: no)]),
115                   [INSTALL_TESTS=$enableval], [INSTALL_TESTS=no])
116
117 dnl ===========================================================================
118 dnl check compiler flags
119 AC_DEFUN([LIBDRM_CC_TRY_FLAG], [
120   AC_MSG_CHECKING([whether $CC supports $1])
121
122   libdrm_save_CFLAGS="$CFLAGS"
123   CFLAGS="$CFLAGS $1"
124
125   AC_COMPILE_IFELSE([AC_LANG_SOURCE([ ])], [libdrm_cc_flag=yes], [libdrm_cc_flag=no])
126   CFLAGS="$libdrm_save_CFLAGS"
127
128   if test "x$libdrm_cc_flag" = "xyes"; then
129     ifelse([$2], , :, [$2])
130   else
131     ifelse([$3], , :, [$3])
132   fi
133   AC_MSG_RESULT([$libdrm_cc_flag])
134 ])
135
136 dnl We use clock_gettime to check for timeouts in drmWaitVBlank
137
138 AC_CHECK_FUNCS([clock_gettime], [CLOCK_LIB=],
139                [AC_CHECK_LIB([rt], [clock_gettime], [CLOCK_LIB=-lrt],
140                              [AC_MSG_ERROR([Couldn't find clock_gettime])])])
141 AC_SUBST([CLOCK_LIB])
142
143 AC_CHECK_FUNCS([open_memstream], [HAVE_OPEN_MEMSTREAM=yes])
144
145 dnl Use lots of warning flags with with gcc and compatible compilers
146
147 dnl Note: if you change the following variable, the cache is automatically
148 dnl skipped and all flags rechecked.  So there's no need to do anything
149 dnl else.  If for any reason you need to force a recheck, just change
150 dnl MAYBE_WARN in an ignorable way (like adding whitespace)
151
152 MAYBE_WARN="-Wall -Wextra \
153 -Wsign-compare -Werror-implicit-function-declaration \
154 -Wpointer-arith -Wwrite-strings -Wstrict-prototypes \
155 -Wmissing-prototypes -Wmissing-declarations -Wnested-externs \
156 -Wpacked -Wswitch-enum -Wmissing-format-attribute \
157 -Wstrict-aliasing=2 -Winit-self \
158 -Wdeclaration-after-statement -Wold-style-definition \
159 -Wno-missing-field-initializers -Wno-unused-parameter \
160 -Wno-attributes -Wno-long-long -Winline"
161
162 # invalidate cached value if MAYBE_WARN has changed
163 if test "x$libdrm_cv_warn_maybe" != "x$MAYBE_WARN"; then
164         unset libdrm_cv_warn_cflags
165 fi
166 AC_CACHE_CHECK([for supported warning flags], libdrm_cv_warn_cflags, [
167         echo
168         WARN_CFLAGS=""
169
170         # Some warning options are not supported by all versions of
171         # gcc, so test all desired options against the current
172         # compiler.
173         #
174         # Note that there are some order dependencies
175         # here. Specifically, an option that disables a warning will
176         # have no net effect if a later option then enables that
177         # warnings, (perhaps implicitly). So we put some grouped
178         # options (-Wall and -Wextra) up front and the -Wno options
179         # last.
180
181         for W in $MAYBE_WARN; do
182                 LIBDRM_CC_TRY_FLAG([$W], [WARN_CFLAGS="$WARN_CFLAGS $W"])
183         done
184
185         libdrm_cv_warn_cflags=$WARN_CFLAGS
186         libdrm_cv_warn_maybe=$MAYBE_WARN
187
188         AC_MSG_CHECKING([which warning flags were supported])])
189 WARN_CFLAGS="$libdrm_cv_warn_cflags"
190
191 # Check for atomic intrinsics
192 AC_CACHE_CHECK([for native atomic primitives], drm_cv_atomic_primitives, [
193         drm_cv_atomic_primitives="none"
194
195         AC_LINK_IFELSE([AC_LANG_PROGRAM([[
196         int atomic_add(int i) { return __sync_fetch_and_add (&i, 1); }
197         int atomic_cmpxchg(int i, int j, int k) { return __sync_val_compare_and_swap (&i, j, k); }
198                                           ]],[[]])], [drm_cv_atomic_primitives="Intel"],[])
199
200         if test "x$drm_cv_atomic_primitives" = "xnone"; then
201                 AC_CHECK_HEADER([atomic_ops.h], drm_cv_atomic_primitives="libatomic-ops")
202         fi
203
204         # atomic functions defined in <atomic.h> & libc on Solaris
205         if test "x$drm_cv_atomic_primitives" = "xnone"; then
206                 AC_CHECK_FUNC([atomic_cas_uint], drm_cv_atomic_primitives="Solaris")
207         fi
208 ])
209
210 if test "x$drm_cv_atomic_primitives" = xIntel; then
211         AC_DEFINE(HAVE_LIBDRM_ATOMIC_PRIMITIVES, 1,
212                 [Enable if your compiler supports the Intel __sync_* atomic primitives])
213 fi
214 if test "x$drm_cv_atomic_primitives" = "xlibatomic-ops"; then
215         AC_DEFINE(HAVE_LIB_ATOMIC_OPS, 1, [Enable if you have libatomic-ops-dev installed])
216 fi
217
218 if test "x$INTEL" != "xno" -o \
219         "x$RADEON" != "xno" -o \
220         "x$NOUVEAU" != "xno" -o \
221         "x$OMAP" != "xno" -o \
222         "x$FREEDRENO" != "xno" -o \
223         "x$TEGRA" != "xno"; then
224         if test "x$drm_cv_atomic_primitives" = "xnone"; then
225                 if test "x$INTEL" != "xauto"; then
226                         if test "x$INTEL" != "xno"; then
227                                 AC_MSG_ERROR([libdrm_intel depends upon atomic operations, which were not found for your compiler/cpu. Try compiling with -march=native, or install the libatomics-op-dev package, or, failing both of those, disable support for Intel GPUs by passing --disable-intel to ./configure])
228                         fi
229                 else
230                         AC_MSG_WARN([Disabling libdrm_intel. It depends on atomic operations, which were not found for your compiler/cpu. Try compiling with -march=native, or install the libatomics-op-dev package.])
231                         INTEL=no
232                 fi
233                 if test "x$RADEON" != "xauto"; then
234                         if test "x$RADEON" != "xno"; then
235                                 AC_MSG_ERROR([libdrm_radeon depends upon atomic operations, which were not found for your compiler/cpu. Try compiling with -march=native, or install the libatomics-op-dev package, or, failing both of those, disable support for Radeon GPUs by passing --disable-radeon to ./configure])
236                         fi
237                 else
238                         AC_MSG_WARN([Disabling libdrm_radeon. It depends on atomic operations, which were not found for your compiler/cpu. Try compiling with -march=native, or install the libatomics-op-dev package.])
239                         RADEON=no
240                 fi
241                 if test "x$NOUVEAU" != "xauto"; then
242                         if test "x$NOUVEAU" != "xno"; then
243                                 AC_MSG_ERROR([libdrm_nouveau depends upon atomic operations, which were not found for your compiler/cpu. Try compiling with -march=native, or install the libatomics-op-dev package, or, failing both of those, disable support for NVIDIA GPUs by passing --disable-nouveau to ./configure])
244                         fi
245                 else
246                         AC_MSG_WARN([Disabling libdrm_nouveau. It depends on atomic operations, which were not found for your compiler/cpu. Try compiling with -march=native, or install the libatomics-op-dev package.])
247                         NOUVEAU=no
248                 fi
249                 if test "x$OMAP" != "xauto"; then
250                         AC_MSG_ERROR([libdrm_omap depends upon atomic operations, which were not found for your compiler/cpu. Try compiling with -march=native, or install the libatomics-op-dev package, or, failing both of those, disable support for OMAP GPUs by passing --disable-omap-experimental-api to ./configure])
251                 fi
252                 if test "x$FREEDRENO" != "xauto"; then
253                         AC_MSG_ERROR([libdrm_freedreno depends upon atomic operations, which were not found for your compiler/cpu. Try compiling with -march=native, or install the libatomics-op-dev package, or, failing both of those, disable support for QCOM's Adreno GPUs by passing --disable-freedreno to ./configure])
254                 fi
255                 if test "x$TEGRA" != "xauto"; then
256                         AC_MSG_ERROR([libdrm_tegra depends upon atomic operations, which were not found for your compiler/cpu. Try compiling with -march=native, or install the libatomics-op-dev package, or, failing both of those, disable support for NVIDIA's Tegra GPUs by passing --disable-tegra-experimental-api to ./configure])
257                 fi
258         else
259                 if test "x$INTEL" != "xno"; then
260                         case $host_cpu in
261                                 i?86|x86_64) INTEL=yes ;;
262                                 *) INTEL=no ;;
263                         esac
264                 fi
265                 if test "x$RADEON" != "xno"; then
266                         RADEON=yes
267                 fi
268                 if test "x$NOUVEAU" != "xno"; then
269                         NOUVEAU=yes
270                 fi
271                 if test "x$FREEDRENO" != "xno"; then
272                         case $host_cpu in
273                                 arm*|aarch64)   FREEDRENO=yes ;;
274                                 *)              FREEDRENO=no ;;
275                         esac
276                 fi
277         fi
278 fi
279
280 if test "x$INTEL" != "xno"; then
281         PKG_CHECK_MODULES(PCIACCESS, [pciaccess >= 0.10])
282 fi
283 AC_SUBST(PCIACCESS_CFLAGS)
284 AC_SUBST(PCIACCESS_LIBS)
285
286 if test "x$UDEV" = xyes; then
287         AC_DEFINE(UDEV, 1, [Have UDEV support])
288 fi
289
290 AC_CANONICAL_HOST
291 if test "x$LIBKMS" = xauto ; then
292         case $host_os in
293                 linux*)         LIBKMS="yes" ;;
294                 freebsd* | kfreebsd*-gnu)
295                                 LIBKMS="yes" ;;
296                 dragonfly*)     LIBKMS="yes" ;;
297                 *)              LIBKMS="no" ;;
298         esac
299 fi
300
301 AM_CONDITIONAL(HAVE_LIBKMS, [test "x$LIBKMS" = xyes])
302
303 AM_CONDITIONAL(HAVE_INTEL, [test "x$INTEL" = xyes])
304 if test "x$INTEL" = xyes; then
305         AC_DEFINE(HAVE_INTEL, 1, [Have intel support])
306 fi
307
308 AM_CONDITIONAL(HAVE_VMWGFX, [test "x$VMWGFX" = xyes])
309 if test "x$VMWGFX" = xyes; then
310         AC_DEFINE(HAVE_VMWGFX, 1, [Have vmwgfx kernel headers])
311 fi
312
313 AM_CONDITIONAL(HAVE_NOUVEAU, [test "x$NOUVEAU" = xyes])
314 if test "x$NOUVEAU" = xyes; then
315         AC_DEFINE(HAVE_NOUVEAU, 1, [Have nouveau (nvidia) support])
316 fi
317
318 AM_CONDITIONAL(HAVE_OMAP, [test "x$OMAP" = xyes])
319 if test "x$OMAP" = xyes; then
320         AC_DEFINE(HAVE_OMAP, 1, [Have OMAP support])
321 fi
322
323 AM_CONDITIONAL(HAVE_EXYNOS, [test "x$EXYNOS" = xyes])
324 if test "x$EXYNOS" = xyes; then
325         AC_DEFINE(HAVE_EXYNOS, 1, [Have EXYNOS support])
326 fi
327
328 AM_CONDITIONAL(HAVE_FREEDRENO, [test "x$FREEDRENO" = xyes])
329 if test "x$FREEDRENO" = xyes; then
330         AC_DEFINE(HAVE_FREEDRENO, 1, [Have freedreno support])
331 fi
332
333 AM_CONDITIONAL(HAVE_FREEDRENO_KGSL, [test "x$FREEDRENO_KGSL" = xyes])
334 if test "x$FREEDRENO_KGSL" = xyes; then
335         AC_DEFINE(HAVE_FREEDRENO_KGSL, 1, [Have freedreno support for KGSL kernel interface])
336 fi
337
338 AM_CONDITIONAL(HAVE_RADEON, [test "x$RADEON" = xyes])
339 if test "x$RADEON" = xyes; then
340         AC_DEFINE(HAVE_RADEON, 1, [Have radeon support])
341 fi
342
343 AM_CONDITIONAL(HAVE_TEGRA, [test "x$TEGRA" = xyes])
344 if test "x$TEGRA" = xyes; then
345         AC_DEFINE(HAVE_TEGRA, 1, [Have Tegra support])
346 fi
347
348 AM_CONDITIONAL(HAVE_INSTALL_TESTS, [test "x$INSTALL_TESTS" = xyes])
349 if test "x$INSTALL_TESTS" = xyes; then
350         AC_DEFINE(HAVE_INSTALL_TESTS, 1, [Install test programs])
351 fi
352
353 AC_ARG_ENABLE([cairo-tests],
354               [AS_HELP_STRING([--enable-cairo-tests],
355                               [Enable support for Cairo rendering in tests (default: auto)])],
356               [CAIRO=$enableval], [CAIRO=auto])
357 PKG_CHECK_MODULES(CAIRO, cairo, [HAVE_CAIRO=yes], [HAVE_CAIRO=no])
358 AC_MSG_CHECKING([whether to enable Cairo tests])
359 if test "x$CAIRO" = xauto; then
360         CAIRO="$HAVE_CAIRO"
361 fi
362 if test "x$CAIRO" = xyes; then
363         if ! test "x$HAVE_CAIRO" = xyes; then
364                 AC_MSG_ERROR([Cairo support required but not present])
365         fi
366         AC_DEFINE(HAVE_CAIRO, 1, [Have Cairo support])
367 fi
368 AC_MSG_RESULT([$CAIRO])
369 AM_CONDITIONAL(HAVE_CAIRO, [test "x$CAIRO" = xyes])
370
371 # For enumerating devices in test case
372 PKG_CHECK_MODULES(LIBUDEV, libudev, [HAVE_LIBUDEV=yes], [HAVE_LIBUDEV=no])
373 if test "x$HAVE_LIBUDEV" = xyes; then
374         AC_DEFINE(HAVE_LIBUDEV, 1, [Have libudev support])
375 fi
376 AM_CONDITIONAL(HAVE_LIBUDEV, [test "x$HAVE_LIBUDEV" = xyes])
377
378 # xsltproc for docbook manpages
379 AC_ARG_ENABLE([manpages],
380               AS_HELP_STRING([--disable-manpages], [disable manpages @<:@default=enabled@:>@]),
381               [MANS=$enableval], [MANS=auto])
382 AC_PATH_PROG(XSLTPROC, xsltproc)
383 AM_CONDITIONAL([BUILD_MANPAGES], [test "x$XSLTPROC" != "x" -a "x$MANS" != "xno"])
384
385 # check for offline man-pages stylesheet
386 AC_MSG_CHECKING([for docbook manpages stylesheet])
387 MANPAGES_STYLESHEET="http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl"
388 AC_PATH_PROGS_FEATURE_CHECK([XSLTPROC_TMP], [xsltproc],
389                             AS_IF([`"$ac_path_XSLTPROC_TMP" --nonet "$MANPAGES_STYLESHEET" > /dev/null 2>&1`],
390                                   [HAVE_MANPAGES_STYLESHEET=yes]))
391 if test "x$HAVE_MANPAGES_STYLESHEET" = "xyes"; then
392         AC_SUBST(MANPAGES_STYLESHEET)
393         AC_MSG_RESULT([yes])
394 else
395         AC_MSG_RESULT([no])
396 fi
397 AM_CONDITIONAL([HAVE_MANPAGES_STYLESHEET], [test "x$HAVE_MANPAGES_STYLESHEET" = "xyes"])
398
399 PKG_CHECK_MODULES(VALGRIND, [valgrind], [have_valgrind=yes], [have_valgrind=no])
400 if test "x$have_valgrind" = "xyes"; then
401         AC_DEFINE([HAVE_VALGRIND], 1, [Use valgrind intrinsics to suppress false warnings])
402 fi
403
404 AC_ARG_WITH([kernel-source],
405             [AS_HELP_STRING([--with-kernel-source],
406               [specify path to linux kernel source])],
407             [kernel_source="$with_kernel_source"])
408 AC_SUBST(kernel_source)
409
410 dnl Add flags for gcc and g++
411 if test "x$GCC" = xyes; then
412     # Enable -fvisibility=hidden if using a gcc that supports it
413     save_CFLAGS="$CFLAGS"
414     AC_MSG_CHECKING([whether $CC supports -fvisibility=hidden])
415     VISIBILITY_CFLAGS="-fvisibility=hidden"
416     CFLAGS="$CFLAGS $VISIBILITY_CFLAGS"
417     AC_LINK_IFELSE([AC_LANG_PROGRAM()], AC_MSG_RESULT([yes]),
418                    [VISIBILITY_CFLAGS=""; AC_MSG_RESULT([no])]);
419
420     # Restore CFLAGS; VISIBILITY_CFLAGS are added to it where needed.
421     CFLAGS=$save_CFLAGS
422
423     if test "x$VISIBILITY_CFLAGS" != x; then
424         AC_DEFINE(HAVE_VISIBILITY, 1, [Compiler has -fvisibility support])
425     fi
426
427     AC_SUBST([VISIBILITY_CFLAGS])
428 fi
429
430 AC_SUBST(WARN_CFLAGS)
431 AC_CONFIG_FILES([
432         Makefile
433         libkms/Makefile
434         libkms/libkms.pc
435         intel/Makefile
436         intel/libdrm_intel.pc
437         radeon/Makefile
438         radeon/libdrm_radeon.pc
439         nouveau/Makefile
440         nouveau/libdrm_nouveau.pc
441         omap/Makefile
442         omap/libdrm_omap.pc
443         exynos/Makefile
444         exynos/libdrm_exynos.pc
445         freedreno/Makefile
446         freedreno/libdrm_freedreno.pc
447         tegra/Makefile
448         tegra/libdrm_tegra.pc
449         tests/Makefile
450         tests/modeprint/Makefile
451         tests/modetest/Makefile
452         tests/kmstest/Makefile
453         tests/proptest/Makefile
454         tests/radeon/Makefile
455         tests/vbltest/Makefile
456         tests/exynos/Makefile
457         tests/tegra/Makefile
458         tests/nouveau/Makefile
459         man/Makefile
460         libdrm.pc])
461 AC_OUTPUT
462
463 echo ""
464 echo "$PACKAGE_STRING will be compiled with:"
465 echo ""
466 echo "  libkms         $LIBKMS"
467 echo "  Intel API      $INTEL"
468 echo "  vmwgfx API     $VMWGFX"
469 echo "  Radeon API     $RADEON"
470 echo "  Nouveau API    $NOUVEAU"
471 echo "  OMAP API       $OMAP"
472 echo "  EXYNOS API     $EXYNOS"
473 echo "  Freedreno API  $FREEDRENO (kgsl: $FREEDRENO_KGSL)"
474 echo "  Tegra API      $TEGRA"
475 echo ""