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