libdrm 2.4.44
[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.44],
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([ ], [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                 *)              LIBKMS="no" ;;
189         esac
190 fi
191
192 AM_CONDITIONAL(HAVE_LIBKMS, [test "x$LIBKMS" = xyes])
193
194 AM_CONDITIONAL(HAVE_VMWGFX, [test "x$VMWGFX" = xyes])
195 if test "x$VMWGFX" = xyes; then
196         AC_DEFINE(HAVE_VMWGFX, 1, [Have vmwgfx kernel headers])
197 fi
198
199 AM_CONDITIONAL(HAVE_NOUVEAU, [test "x$NOUVEAU" = xyes])
200 if test "x$NOUVEAU" = xyes; then
201         AC_DEFINE(HAVE_NOUVEAU, 1, [Have nouveau (nvidia) support])
202 fi
203
204 AM_CONDITIONAL(HAVE_OMAP, [test "x$OMAP" = xyes])
205 if test "x$OMAP" = xyes; then
206         AC_DEFINE(HAVE_OMAP, 1, [Have OMAP support])
207 fi
208
209 AM_CONDITIONAL(HAVE_EXYNOS, [test "x$EXYNOS" = xyes])
210 if test "x$EXYNOS" = xyes; then
211         AC_DEFINE(HAVE_EXYNOS, 1, [Have EXYNOS support])
212 fi
213
214 AM_CONDITIONAL(HAVE_FREEDRENO, [test "x$FREEDRENO" = xyes])
215 if test "x$FREEDRENO" = xyes; then
216         AC_DEFINE(HAVE_FREEDRENO, 1, [Have freedreno support])
217 fi
218
219 AM_CONDITIONAL(HAVE_INSTALL_TESTS, [test "x$INSTALL_TESTS" = xyes])
220 if test "x$INSTALL_TESTS" = xyes; then
221         AC_DEFINE(HAVE_INSTALL_TESTS, 1, [Install test programs])
222 fi
223
224 AC_ARG_ENABLE([cairo-tests],
225               [AS_HELP_STRING([--enable-cairo-tests],
226                               [Enable support for Cairo rendering in tests (default: auto)])],
227               [CAIRO=$enableval], [CAIRO=auto])
228 PKG_CHECK_MODULES(CAIRO, cairo, [HAVE_CAIRO=yes], [HAVE_CAIRO=no])
229 AC_MSG_CHECKING([whether to enable Cairo tests])
230 if test "x$CAIRO" = xauto; then
231         CAIRO="$HAVE_CAIRO"
232 fi
233 if test "x$CAIRO" = xyes; then
234         if ! test "x$HAVE_CAIRO" = xyes; then
235                 AC_MSG_ERROR([Cairo support required but not present])
236         fi
237         AC_DEFINE(HAVE_CAIRO, 1, [Have Cairo support])
238 fi
239 AC_MSG_RESULT([$CAIRO])
240 AM_CONDITIONAL(HAVE_CAIRO, [test "x$CAIRO" = xyes])
241
242 # For enumerating devices in test case
243 PKG_CHECK_MODULES(LIBUDEV, libudev, [HAVE_LIBUDEV=yes], [HAVE_LIBUDEV=no])
244 if test "x$HAVE_LIBUDEV" = xyes; then
245         AC_DEFINE(HAVE_LIBUDEV, 1, [Have libudev support])
246 fi
247 AM_CONDITIONAL(HAVE_LIBUDEV, [test "x$HAVE_LIBUDEV" = xyes])
248
249 # xsltproc for docbook manpages
250 AC_ARG_ENABLE([manpages],
251               AS_HELP_STRING([--disable-manpages], [disable manpages @<:@default=enabled@:>@]),
252               [MANS=$enableval], [MANS=auto])
253 AC_PATH_PROG(XSLTPROC, xsltproc)
254 AM_CONDITIONAL([BUILD_MANPAGES], [test "x$XSLTPROC" != "x" -a "x$MANS" != "xno"])
255
256 # check for offline man-pages stylesheet
257 AC_MSG_CHECKING([for docbook manpages stylesheet])
258 MANPAGES_STYLESHEET="http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl"
259 AC_PATH_PROGS_FEATURE_CHECK([XSLTPROC_TMP], [xsltproc],
260                             AS_IF([`"$ac_path_XSLTPROC_TMP" --nonet "$MANPAGES_STYLESHEET" > /dev/null 2>&1`],
261                                   [HAVE_MANPAGES_STYLESHEET=yes]))
262 if test "x$HAVE_MANPAGES_STYLESHEET" = "xyes"; then
263         AC_SUBST(MANPAGES_STYLESHEET)
264         AC_MSG_RESULT([yes])
265 else
266         AC_MSG_RESULT([no])
267 fi
268 AM_CONDITIONAL([HAVE_MANPAGES_STYLESHEET], [test "x$HAVE_MANPAGES_STYLESHEET" = "xyes"])
269
270 if test "x$INTEL" != "xno" -o "x$RADEON" != "xno" -o "x$NOUVEAU" != "xno" -o "x$OMAP" != "xno" -o "x$FREEDRENO" != "xno"; then
271     # Check for atomic intrinsics
272     AC_CACHE_CHECK([for native atomic primitives], drm_cv_atomic_primitives,
273     [
274             drm_cv_atomic_primitives="none"
275
276             AC_LINK_IFELSE([AC_LANG_PROGRAM([[
277     int atomic_add(int i) { return __sync_fetch_and_add (&i, 1); }
278     int atomic_cmpxchg(int i, int j, int k) { return __sync_val_compare_and_swap (&i, j, k); }
279                                             ]],[[]])],
280                            [drm_cv_atomic_primitives="Intel"],[])
281
282             if test "x$drm_cv_atomic_primitives" = "xnone"; then
283                     AC_CHECK_HEADER([atomic_ops.h], drm_cv_atomic_primitives="libatomic-ops")
284             fi
285
286             # atomic functions defined in <atomic.h> & libc on Solaris
287             if test "x$drm_cv_atomic_primitives" = "xnone"; then
288                     AC_CHECK_FUNC([atomic_cas_uint],
289                                   drm_cv_atomic_primitives="Solaris")
290             fi
291
292     ])
293     if test "x$drm_cv_atomic_primitives" = xIntel; then
294             AC_DEFINE(HAVE_LIBDRM_ATOMIC_PRIMITIVES, 1,
295                       [Enable if your compiler supports the Intel __sync_* atomic primitives])
296     fi
297     if test "x$drm_cv_atomic_primitives" = "xlibatomic-ops"; then
298             AC_DEFINE(HAVE_LIB_ATOMIC_OPS, 1, [Enable if you have libatomic-ops-dev installed])
299     fi
300
301     if test "x$drm_cv_atomic_primitives" = "xnone"; then
302            if test "x$INTEL" != "xauto"; then
303                    if test "x$INTEL" != "xno"; then
304                         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])
305                    fi
306            else
307                    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.])
308                    INTEL=no
309            fi
310            if test "x$RADEON" != "xauto"; then
311                    if test "x$RADEON" != "xno"; then
312                         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])
313                    fi
314            else
315                    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.])
316                    RADEON=no
317            fi
318            if test "x$NOUVEAU" != "xauto"; then
319                    if test "x$NOUVEAU" != "xno"; then
320                         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])
321                    fi
322            else
323                    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.])
324                    NOUVEAU=no
325            fi
326     else
327            if test "x$INTEL" != "xno"; then
328                    case $host_cpu in
329                            i?86|x86_64) INTEL=yes ;;
330                            *) INTEL=no ;;
331                    esac
332            fi
333            if test "x$RADEON" != "xno"; then
334                    RADEON=yes
335            fi
336            if test "x$NOUVEAU" != "xno"; then
337                    NOUVEAU=yes
338            fi
339     fi
340 fi
341
342 if test "x$INTEL" != "xno"; then
343         PKG_CHECK_MODULES(PCIACCESS, [pciaccess >= 0.10])
344 fi
345 AC_SUBST(PCIACCESS_CFLAGS)
346 AC_SUBST(PCIACCESS_LIBS)
347
348 PKG_CHECK_MODULES(VALGRIND, [valgrind], [have_valgrind=yes], [have_valgrind=no])
349 if test "x$have_valgrind" = "xyes"; then
350         AC_DEFINE([HAVE_VALGRIND], 1, [Use valgrind intrinsics to suppress false warnings])
351 fi
352
353 AM_CONDITIONAL(HAVE_INTEL, [test "x$INTEL" != "xno"])
354 AM_CONDITIONAL(HAVE_RADEON, [test "x$RADEON" != "xno"])
355 AM_CONDITIONAL(HAVE_NOUVEAU, [test "x$NOUVEAU" != "xno"])
356 if test "x$RADEON" = xyes; then
357         AC_DEFINE(HAVE_RADEON, 1, [Have radeon support])
358 fi
359
360 AC_ARG_WITH([kernel-source],
361             [AS_HELP_STRING([--with-kernel-source],
362               [specify path to linux kernel source])],
363             [kernel_source="$with_kernel_source"])
364 AC_SUBST(kernel_source)
365
366 AC_SUBST(WARN_CFLAGS)
367 AC_CONFIG_FILES([
368         Makefile
369         libkms/Makefile
370         libkms/libkms.pc
371         intel/Makefile
372         intel/libdrm_intel.pc
373         radeon/Makefile
374         radeon/libdrm_radeon.pc
375         nouveau/Makefile
376         nouveau/libdrm_nouveau.pc
377         omap/Makefile
378         omap/libdrm_omap.pc
379         exynos/Makefile
380         exynos/libdrm_exynos.pc
381         freedreno/Makefile
382         freedreno/libdrm_freedreno.pc
383         tests/Makefile
384         tests/modeprint/Makefile
385         tests/modetest/Makefile
386         tests/kmstest/Makefile
387         tests/radeon/Makefile
388         tests/vbltest/Makefile
389         tests/exynos/Makefile
390         include/Makefile
391         include/drm/Makefile
392         man/Makefile
393         libdrm.pc])
394 AC_OUTPUT
395
396 echo ""
397 echo "$PACKAGE_STRING will be compiled with:"
398 echo ""
399 echo "  libkms         $LIBKMS"
400 echo "  Intel API      $INTEL"
401 echo "  vmwgfx API     $VMWGFX"
402 echo "  Radeon API     $RADEON"
403 echo "  Nouveau API    $NOUVEAU"
404 echo "  OMAP API       $OMAP"
405 echo "  EXYNOS API     $EXYNOS"
406 echo "  Freedreno API  $FREEDRENO"
407 echo ""