OSDN Git Service

Fix one warning (v2)
[android-x86/external-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.61],
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 # Require xorg-macros minimum of 1.12 for XORG_WITH_XSLTPROC
33 m4_ifndef([XORG_MACROS_VERSION],
34           [m4_fatal([must install xorg-macros 1.12 or later before running autoconf/autogen])])
35 XORG_MACROS_VERSION(1.12)
36 XORG_WITH_XSLTPROC
37 XORG_MANPAGE_SECTIONS
38
39 AM_INIT_AUTOMAKE([1.10 foreign dist-bzip2])
40
41 # Enable quiet compiles on automake 1.11.
42 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
43
44 # Check for programs
45 AC_PROG_CC
46 AC_PROG_CC_C99
47
48 if test "x$ac_cv_prog_cc_c99" = xno; then
49         AC_MSG_ERROR([Building libdrm requires C99 enabled compiler])
50 fi
51
52 AC_USE_SYSTEM_EXTENSIONS
53 AC_SYS_LARGEFILE
54 AC_FUNC_ALLOCA
55
56 AC_CHECK_HEADERS([sys/mkdev.h])
57
58 # Initialize libtool
59 LT_PREREQ([2.2])
60 LT_INIT([disable-static])
61
62
63 PKG_CHECK_MODULES(PTHREADSTUBS, pthread-stubs)
64 AC_SUBST(PTHREADSTUBS_CFLAGS)
65 AC_SUBST(PTHREADSTUBS_LIBS)
66
67 pkgconfigdir=${libdir}/pkgconfig
68 AC_SUBST(pkgconfigdir)
69 AC_ARG_ENABLE([udev],
70               [AS_HELP_STRING([--enable-udev],
71                               [Enable support for using udev instead of mknod (default: disabled)])],
72               [UDEV=$enableval], [UDEV=no])
73
74 AC_ARG_ENABLE(libkms,
75               AS_HELP_STRING([--disable-libkms],
76               [Disable KMS mm abstraction library (default: auto, enabled on supported platforms)]),
77               [LIBKMS=$enableval], [LIBKMS=auto])
78
79 AC_ARG_ENABLE(intel,
80               AS_HELP_STRING([--disable-intel],
81               [Enable support for intel's KMS API (default: auto, enabled on x86)]),
82               [INTEL=$enableval], [INTEL=auto])
83
84 AC_ARG_ENABLE(radeon,
85               AS_HELP_STRING([--disable-radeon],
86               [Enable support for radeon's KMS API (default: auto)]),
87               [RADEON=$enableval], [RADEON=auto])
88
89 AC_ARG_ENABLE(nouveau,
90               AS_HELP_STRING([--disable-nouveau],
91               [Enable support for nouveau's KMS API (default: auto)]),
92               [NOUVEAU=$enableval], [NOUVEAU=auto])
93
94 AC_ARG_ENABLE(vmwgfx,
95               AS_HELP_STRING([--disable-vmwgfx],
96               [Enable support for vmwgfx's KMS API (default: yes)]),
97               [VMWGFX=$enableval], [VMWGFX=yes])
98
99 AC_ARG_ENABLE(omap-experimental-api,
100               AS_HELP_STRING([--enable-omap-experimental-api],
101               [Enable support for OMAP's experimental API (default: disabled)]),
102               [OMAP=$enableval], [OMAP=no])
103
104 AC_ARG_ENABLE(exynos-experimental-api,
105               AS_HELP_STRING([--enable-exynos-experimental-api],
106               [Enable support for EXYNOS's experimental API (default: disabled)]),
107               [EXYNOS=$enableval], [EXYNOS=no])
108
109 AC_ARG_ENABLE(freedreno,
110               AS_HELP_STRING([--disable-freedreno],
111               [Enable support for freedreno's KMS API (default: auto, enabled on arm)]),
112               [FREEDRENO=$enableval], [FREEDRENO=auto])
113
114 AC_ARG_ENABLE(freedreno-kgsl,
115               AS_HELP_STRING([--enable-freedreno-kgsl],
116               [Enable support for freedreno's to use downstream android kernel API (default: disabled)]),
117               [FREEDRENO_KGSL=$enableval], [FREEDRENO_KGSL=no])
118
119 AC_ARG_ENABLE(tegra-experimental-api,
120               AS_HELP_STRING([--enable-tegra-experimental-api],
121               [Enable support for Tegra's experimental API (default: disabled)]),
122               [TEGRA=$enableval], [TEGRA=no])
123
124 AC_ARG_ENABLE(install-test-programs,
125                   AS_HELP_STRING([--enable-install-test-programs],
126                   [Install test programs (default: no)]),
127                   [INSTALL_TESTS=$enableval], [INSTALL_TESTS=no])
128
129 dnl ===========================================================================
130 dnl check compiler flags
131 AC_DEFUN([LIBDRM_CC_TRY_FLAG], [
132   AC_MSG_CHECKING([whether $CC supports $1])
133
134   libdrm_save_CFLAGS="$CFLAGS"
135   CFLAGS="$CFLAGS $1"
136
137   AC_COMPILE_IFELSE([AC_LANG_SOURCE([ ])], [libdrm_cc_flag=yes], [libdrm_cc_flag=no])
138   CFLAGS="$libdrm_save_CFLAGS"
139
140   if test "x$libdrm_cc_flag" = "xyes"; then
141     ifelse([$2], , :, [$2])
142   else
143     ifelse([$3], , :, [$3])
144   fi
145   AC_MSG_RESULT([$libdrm_cc_flag])
146 ])
147
148 dnl We use clock_gettime to check for timeouts in drmWaitVBlank
149
150 AC_CHECK_FUNCS([clock_gettime], [CLOCK_LIB=],
151                [AC_CHECK_LIB([rt], [clock_gettime], [CLOCK_LIB=-lrt],
152                              [AC_MSG_ERROR([Couldn't find clock_gettime])])])
153 AC_SUBST([CLOCK_LIB])
154
155 AC_CHECK_FUNCS([open_memstream], [HAVE_OPEN_MEMSTREAM=yes])
156
157 dnl Use lots of warning flags with with gcc and compatible compilers
158
159 dnl Note: if you change the following variable, the cache is automatically
160 dnl skipped and all flags rechecked.  So there's no need to do anything
161 dnl else.  If for any reason you need to force a recheck, just change
162 dnl MAYBE_WARN in an ignorable way (like adding whitespace)
163
164 MAYBE_WARN="-Wall -Wextra \
165 -Wsign-compare -Werror-implicit-function-declaration \
166 -Wpointer-arith -Wwrite-strings -Wstrict-prototypes \
167 -Wmissing-prototypes -Wmissing-declarations -Wnested-externs \
168 -Wpacked -Wswitch-enum -Wmissing-format-attribute \
169 -Wstrict-aliasing=2 -Winit-self \
170 -Wdeclaration-after-statement -Wold-style-definition \
171 -Wno-missing-field-initializers -Wno-unused-parameter \
172 -Wno-attributes -Wno-long-long -Winline"
173
174 # invalidate cached value if MAYBE_WARN has changed
175 if test "x$libdrm_cv_warn_maybe" != "x$MAYBE_WARN"; then
176         unset libdrm_cv_warn_cflags
177 fi
178 AC_CACHE_CHECK([for supported warning flags], libdrm_cv_warn_cflags, [
179         echo
180         WARN_CFLAGS=""
181
182         # Some warning options are not supported by all versions of
183         # gcc, so test all desired options against the current
184         # compiler.
185         #
186         # Note that there are some order dependencies
187         # here. Specifically, an option that disables a warning will
188         # have no net effect if a later option then enables that
189         # warnings, (perhaps implicitly). So we put some grouped
190         # options (-Wall and -Wextra) up front and the -Wno options
191         # last.
192
193         for W in $MAYBE_WARN; do
194                 LIBDRM_CC_TRY_FLAG([$W], [WARN_CFLAGS="$WARN_CFLAGS $W"])
195         done
196
197         libdrm_cv_warn_cflags=$WARN_CFLAGS
198         libdrm_cv_warn_maybe=$MAYBE_WARN
199
200         AC_MSG_CHECKING([which warning flags were supported])])
201 WARN_CFLAGS="$libdrm_cv_warn_cflags"
202
203 # Check for atomic intrinsics
204 AC_CACHE_CHECK([for native atomic primitives], drm_cv_atomic_primitives, [
205         drm_cv_atomic_primitives="none"
206
207         AC_LINK_IFELSE([AC_LANG_PROGRAM([[
208         int atomic_add(int i) { return __sync_fetch_and_add (&i, 1); }
209         int atomic_cmpxchg(int i, int j, int k) { return __sync_val_compare_and_swap (&i, j, k); }
210                                           ]],[[]])], [drm_cv_atomic_primitives="Intel"],[])
211
212         if test "x$drm_cv_atomic_primitives" = "xnone"; then
213                 AC_CHECK_HEADER([atomic_ops.h], drm_cv_atomic_primitives="libatomic-ops")
214         fi
215
216         # atomic functions defined in <atomic.h> & libc on Solaris
217         if test "x$drm_cv_atomic_primitives" = "xnone"; then
218                 AC_CHECK_FUNC([atomic_cas_uint], drm_cv_atomic_primitives="Solaris")
219         fi
220 ])
221
222 if test "x$drm_cv_atomic_primitives" = xIntel; then
223         AC_DEFINE(HAVE_LIBDRM_ATOMIC_PRIMITIVES, 1,
224                 [Enable if your compiler supports the Intel __sync_* atomic primitives])
225 fi
226 if test "x$drm_cv_atomic_primitives" = "xlibatomic-ops"; then
227         AC_DEFINE(HAVE_LIB_ATOMIC_OPS, 1, [Enable if you have libatomic-ops-dev installed])
228 fi
229
230 dnl Print out the approapriate message considering the value set be the
231 dnl respective in $1.
232 dnl $1 - value to be evaluated. Eg. $INTEL, $NOUVEAU, ...
233 dnl $2 - libdrm shortname. Eg. intel, freedreno, ...
234 dnl $3 - GPU name/brand. Eg. Intel, NVIDIA Tegra, ...
235 dnl $4 - Configure switch. Eg. intel, omap-experimental-api, ...
236 AC_DEFUN([LIBDRM_ATOMICS_NOT_FOUND_MSG], [
237         case "x$1" in
238                 xyes)   AC_MSG_ERROR([libdrm_$2 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 $3 GPUs by passing --disable-$4 to ./configure]) ;;
239                 xauto)  AC_MSG_WARN([Disabling $2. 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.]) ;;
240                 *)      ;;
241         esac
242 ])
243
244 if test "x$drm_cv_atomic_primitives" = "xnone"; then
245         LIBDRM_ATOMICS_NOT_FOUND_MSG($INTEL, intel, Intel, intel)
246         INTEL=no
247
248         LIBDRM_ATOMICS_NOT_FOUND_MSG($RADEON, radeon, Radeon, radeon)
249         RADEON=no
250
251         LIBDRM_ATOMICS_NOT_FOUND_MSG($NOUVEAU, nouveau, NVIDIA, nouveau)
252         NOUVEAU=no
253
254         LIBDRM_ATOMICS_NOT_FOUND_MSG($OMAP, omap, OMAP, omap-experimental-api)
255         OMAP=no
256
257         LIBDRM_ATOMICS_NOT_FOUND_MSG($FREEDRENO, freedreno, Qualcomm Adreno, freedreno)
258         FREEDRENO=no
259
260         LIBDRM_ATOMICS_NOT_FOUND_MSG($TEGRA, tegra, NVIDIA Tegra, tegra-experimental-api)
261         TEGRA=no
262 else
263         if test "x$INTEL" = xauto; then
264                 case $host_cpu in
265                         i?86|x86_64)    INTEL=yes ;;
266                         *)              INTEL=no ;;
267                 esac
268         fi
269         if test "x$RADEON" = xauto; then
270                 RADEON=yes
271         fi
272         if test "x$NOUVEAU" = xauto; then
273                 NOUVEAU=yes
274         fi
275         if test "x$FREEDRENO" = xauto; then
276                 case $host_cpu in
277                         arm*|aarch64)   FREEDRENO=yes ;;
278                         *)              FREEDRENO=no ;;
279                 esac
280         fi
281 fi
282
283 if test "x$INTEL" != "xno"; then
284         PKG_CHECK_MODULES(PCIACCESS, [pciaccess >= 0.10])
285 fi
286 AC_SUBST(PCIACCESS_CFLAGS)
287 AC_SUBST(PCIACCESS_LIBS)
288
289 if test "x$UDEV" = xyes; then
290         AC_DEFINE(UDEV, 1, [Have UDEV support])
291 fi
292
293 AC_CANONICAL_HOST
294 if test "x$LIBKMS" = xauto ; then
295         case $host_os in
296                 linux*)         LIBKMS="yes" ;;
297                 freebsd* | kfreebsd*-gnu)
298                                 LIBKMS="yes" ;;
299                 dragonfly*)     LIBKMS="yes" ;;
300                 *)              LIBKMS="no" ;;
301         esac
302 fi
303
304 AM_CONDITIONAL(HAVE_LIBKMS, [test "x$LIBKMS" = xyes])
305
306 AM_CONDITIONAL(HAVE_INTEL, [test "x$INTEL" = xyes])
307 if test "x$INTEL" = xyes; then
308         AC_DEFINE(HAVE_INTEL, 1, [Have intel support])
309 fi
310
311 AM_CONDITIONAL(HAVE_VMWGFX, [test "x$VMWGFX" = xyes])
312 if test "x$VMWGFX" = xyes; then
313         AC_DEFINE(HAVE_VMWGFX, 1, [Have vmwgfx kernel headers])
314 fi
315
316 AM_CONDITIONAL(HAVE_NOUVEAU, [test "x$NOUVEAU" = xyes])
317 if test "x$NOUVEAU" = xyes; then
318         AC_DEFINE(HAVE_NOUVEAU, 1, [Have nouveau (nvidia) support])
319 fi
320
321 AM_CONDITIONAL(HAVE_OMAP, [test "x$OMAP" = xyes])
322 if test "x$OMAP" = xyes; then
323         AC_DEFINE(HAVE_OMAP, 1, [Have OMAP support])
324 fi
325
326 AM_CONDITIONAL(HAVE_EXYNOS, [test "x$EXYNOS" = xyes])
327 if test "x$EXYNOS" = xyes; then
328         AC_DEFINE(HAVE_EXYNOS, 1, [Have EXYNOS support])
329 fi
330
331 AM_CONDITIONAL(HAVE_FREEDRENO, [test "x$FREEDRENO" = xyes])
332 if test "x$FREEDRENO" = xyes; then
333         AC_DEFINE(HAVE_FREEDRENO, 1, [Have freedreno support])
334 fi
335
336 if test "x$FREEDRENO_KGSL" = xyes; then
337         if test "x$FREEDRENO" != xyes; then
338                 AC_MSG_ERROR([Cannot enable freedreno KGSL interface if freedreno is disabled])
339         fi
340 fi
341 AM_CONDITIONAL(HAVE_FREEDRENO_KGSL, [test "x$FREEDRENO_KGSL" = xyes])
342 if test "x$FREEDRENO_KGSL" = xyes; then
343         AC_DEFINE(HAVE_FREEDRENO_KGSL, 1, [Have freedreno support for KGSL kernel interface])
344 fi
345
346 AM_CONDITIONAL(HAVE_RADEON, [test "x$RADEON" = xyes])
347 if test "x$RADEON" = xyes; then
348         AC_DEFINE(HAVE_RADEON, 1, [Have radeon support])
349 fi
350
351 AM_CONDITIONAL(HAVE_TEGRA, [test "x$TEGRA" = xyes])
352 if test "x$TEGRA" = xyes; then
353         AC_DEFINE(HAVE_TEGRA, 1, [Have Tegra support])
354 fi
355
356 AM_CONDITIONAL(HAVE_INSTALL_TESTS, [test "x$INSTALL_TESTS" = xyes])
357 if test "x$INSTALL_TESTS" = xyes; then
358         AC_DEFINE(HAVE_INSTALL_TESTS, 1, [Install test programs])
359 fi
360
361 AC_ARG_ENABLE([cairo-tests],
362               [AS_HELP_STRING([--enable-cairo-tests],
363                               [Enable support for Cairo rendering in tests (default: auto)])],
364               [CAIRO=$enableval], [CAIRO=auto])
365 PKG_CHECK_MODULES(CAIRO, cairo, [HAVE_CAIRO=yes], [HAVE_CAIRO=no])
366 AC_MSG_CHECKING([whether to enable Cairo tests])
367 if test "x$CAIRO" = xauto; then
368         CAIRO="$HAVE_CAIRO"
369 fi
370 if test "x$CAIRO" = xyes; then
371         if ! test "x$HAVE_CAIRO" = xyes; then
372                 AC_MSG_ERROR([Cairo support required but not present])
373         fi
374         AC_DEFINE(HAVE_CAIRO, 1, [Have Cairo support])
375 fi
376 AC_MSG_RESULT([$CAIRO])
377 AM_CONDITIONAL(HAVE_CAIRO, [test "x$CAIRO" = xyes])
378
379 # For enumerating devices in test case
380 PKG_CHECK_MODULES(LIBUDEV, libudev, [HAVE_LIBUDEV=yes], [HAVE_LIBUDEV=no])
381 if test "x$HAVE_LIBUDEV" = xyes; then
382         AC_DEFINE(HAVE_LIBUDEV, 1, [Have libudev support])
383 fi
384 AM_CONDITIONAL(HAVE_LIBUDEV, [test "x$HAVE_LIBUDEV" = xyes])
385
386 # xsltproc for docbook manpages
387 AC_ARG_ENABLE([manpages],
388               AS_HELP_STRING([--enable-manpages], [enable manpages @<:@default=auto@:>@]),
389               [MANS=$enableval], [MANS=auto])
390 AM_CONDITIONAL([BUILD_MANPAGES], [test "x$XSLTPROC" != "x" -a "x$MANS" != "xno"])
391
392 # check for offline man-pages stylesheet
393 AC_MSG_CHECKING([for docbook manpages stylesheet])
394 MANPAGES_STYLESHEET="http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl"
395 AC_PATH_PROGS_FEATURE_CHECK([XSLTPROC_TMP], [xsltproc],
396                             AS_IF([`"$ac_path_XSLTPROC_TMP" --nonet "$MANPAGES_STYLESHEET" > /dev/null 2>&1`],
397                                   [HAVE_MANPAGES_STYLESHEET=yes]))
398 if test "x$HAVE_MANPAGES_STYLESHEET" = "xyes"; then
399         AC_SUBST(MANPAGES_STYLESHEET)
400         AC_MSG_RESULT([yes])
401 else
402         AC_MSG_RESULT([no])
403 fi
404 AM_CONDITIONAL([HAVE_MANPAGES_STYLESHEET], [test "x$HAVE_MANPAGES_STYLESHEET" = "xyes"])
405
406 PKG_CHECK_MODULES(VALGRIND, [valgrind], [have_valgrind=yes], [have_valgrind=no])
407 if test "x$have_valgrind" = "xyes"; then
408         AC_DEFINE([HAVE_VALGRIND], 1, [Use valgrind intrinsics to suppress false warnings])
409 fi
410
411 AC_ARG_WITH([kernel-source],
412             [AS_HELP_STRING([--with-kernel-source],
413               [specify path to linux kernel source])],
414             [kernel_source="$with_kernel_source"])
415 AC_SUBST(kernel_source)
416
417 AC_MSG_CHECKING([whether $CC supports __attribute__(("hidden"))])
418 AC_LINK_IFELSE([AC_LANG_PROGRAM([
419     int foo_hidden( void ) __attribute__((visibility("hidden")));
420 ])], HAVE_ATTRIBUTE_VISIBILITY="yes"; AC_MSG_RESULT([yes]), AC_MSG_RESULT([no]));
421
422 if test "x$HAVE_ATTRIBUTE_VISIBILITY" = xyes; then
423     AC_DEFINE(HAVE_VISIBILITY, 1, [Compiler supports __attribute__(("hidden"))])
424 fi
425
426 AC_SUBST(WARN_CFLAGS)
427 AC_CONFIG_FILES([
428         Makefile
429         libkms/Makefile
430         libkms/libkms.pc
431         intel/Makefile
432         intel/libdrm_intel.pc
433         radeon/Makefile
434         radeon/libdrm_radeon.pc
435         nouveau/Makefile
436         nouveau/libdrm_nouveau.pc
437         omap/Makefile
438         omap/libdrm_omap.pc
439         exynos/Makefile
440         exynos/libdrm_exynos.pc
441         freedreno/Makefile
442         freedreno/libdrm_freedreno.pc
443         tegra/Makefile
444         tegra/libdrm_tegra.pc
445         tests/Makefile
446         tests/modeprint/Makefile
447         tests/modetest/Makefile
448         tests/kmstest/Makefile
449         tests/proptest/Makefile
450         tests/radeon/Makefile
451         tests/vbltest/Makefile
452         tests/exynos/Makefile
453         tests/tegra/Makefile
454         tests/nouveau/Makefile
455         man/Makefile
456         libdrm.pc])
457 AC_OUTPUT
458
459 echo ""
460 echo "$PACKAGE_STRING will be compiled with:"
461 echo ""
462 echo "  libkms         $LIBKMS"
463 echo "  Intel API      $INTEL"
464 echo "  vmwgfx API     $VMWGFX"
465 echo "  Radeon API     $RADEON"
466 echo "  Nouveau API    $NOUVEAU"
467 echo "  OMAP API       $OMAP"
468 echo "  EXYNOS API     $EXYNOS"
469 echo "  Freedreno API  $FREEDRENO (kgsl: $FREEDRENO_KGSL)"
470 echo "  Tegra API      $TEGRA"
471 echo ""