Enable libkms by default on DragonFly
[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.52],
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 AC_SUBST(WARN_CFLAGS)
370 AC_CONFIG_FILES([
371         Makefile
372         libkms/Makefile
373         libkms/libkms.pc
374         intel/Makefile
375         intel/libdrm_intel.pc
376         radeon/Makefile
377         radeon/libdrm_radeon.pc
378         nouveau/Makefile
379         nouveau/libdrm_nouveau.pc
380         omap/Makefile
381         omap/libdrm_omap.pc
382         exynos/Makefile
383         exynos/libdrm_exynos.pc
384         freedreno/Makefile
385         freedreno/libdrm_freedreno.pc
386         tests/Makefile
387         tests/modeprint/Makefile
388         tests/modetest/Makefile
389         tests/kmstest/Makefile
390         tests/radeon/Makefile
391         tests/vbltest/Makefile
392         tests/exynos/Makefile
393         include/Makefile
394         include/drm/Makefile
395         man/Makefile
396         libdrm.pc])
397 AC_OUTPUT
398
399 echo ""
400 echo "$PACKAGE_STRING will be compiled with:"
401 echo ""
402 echo "  libkms         $LIBKMS"
403 echo "  Intel API      $INTEL"
404 echo "  vmwgfx API     $VMWGFX"
405 echo "  Radeon API     $RADEON"
406 echo "  Nouveau API    $NOUVEAU"
407 echo "  OMAP API       $OMAP"
408 echo "  EXYNOS API     $EXYNOS"
409 echo "  Freedreno API  $FREEDRENO"
410 echo ""