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
21AC_PREREQ([2.63])
22AC_INIT([libdrm],
23        [2.4.100],
24        [https://bugs.freedesktop.org/enter_bug.cgi?product=DRI],
25        [libdrm])
26
27AC_CONFIG_HEADERS([config.h])
28AC_CONFIG_SRCDIR([Makefile.am])
29AC_CONFIG_MACRO_DIR([m4])
30AC_CONFIG_AUX_DIR([build-aux])
31PKG_PROG_PKG_CONFIG
32
33# Require xorg-macros minimum of 1.12 for XORG_WITH_XSLTPROC
34m4_ifndef([XORG_MACROS_VERSION],
35          [m4_fatal([must install xorg-macros 1.12 or later before running autoconf/autogen])])
36XORG_MACROS_VERSION(1.12)
37XORG_WITH_XSLTPROC
38XORG_MANPAGE_SECTIONS
39
40AM_INIT_AUTOMAKE([1.10 foreign dist-bzip2])
41
42# Enable quiet compiles on automake 1.11.
43m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
44
45# Check for programs
46AC_PROG_CC
47AC_PROG_CC_C99
48AC_PROG_NM
49
50if test "x$ac_cv_prog_cc_c99" = xno; then
51	AC_MSG_ERROR([Building libdrm requires C99 enabled compiler])
52fi
53
54AC_USE_SYSTEM_EXTENSIONS
55AC_SYS_LARGEFILE
56AC_FUNC_ALLOCA
57
58save_CFLAGS="$CFLAGS"
59export CFLAGS="$CFLAGS -Werror"
60AC_HEADER_MAJOR
61CFLAGS="$save_CFLAGS"
62
63AC_CHECK_HEADERS([sys/sysctl.h sys/select.h])
64
65# Initialize libtool
66LT_PREREQ([2.2])
67LT_INIT([disable-static])
68
69dnl pthread-stubs is mandatory on some BSD platforms, due to the nature of the
70dnl project. Even then there's a notable issue as described in the project README
71case "$host_os" in
72linux* | cygwin* | darwin* | solaris* | *-gnu* | gnu* | openbsd*)
73    pthread_stubs_possible="no"
74    ;;
75* )
76    pthread_stubs_possible="yes"
77    ;;
78esac
79
80if test "x$pthread_stubs_possible" = xyes; then
81    PKG_CHECK_MODULES(PTHREADSTUBS, pthread-stubs >= 0.4)
82    AC_SUBST(PTHREADSTUBS_CFLAGS)
83    AC_SUBST(PTHREADSTUBS_LIBS)
84fi
85
86pkgconfigdir=${libdir}/pkgconfig
87AC_SUBST(pkgconfigdir)
88libdrmdatadir=${datadir}/libdrm
89AC_SUBST(libdrmdatadir)
90
91AC_ARG_ENABLE([udev],
92              [AS_HELP_STRING([--enable-udev],
93                              [Enable support for using udev instead of mknod (default: disabled)])],
94              [UDEV=$enableval], [UDEV=no])
95
96AC_ARG_ENABLE(libkms,
97	      AS_HELP_STRING([--disable-libkms],
98	      [Disable KMS mm abstraction library (default: auto, enabled on supported platforms)]),
99	      [LIBKMS=$enableval], [LIBKMS=auto])
100
101AC_ARG_ENABLE(intel,
102	      AS_HELP_STRING([--disable-intel],
103	      [Enable support for intel's KMS API (default: auto, enabled on x86)]),
104	      [INTEL=$enableval], [INTEL=auto])
105
106AC_ARG_ENABLE(radeon,
107	      AS_HELP_STRING([--disable-radeon],
108	      [Enable support for radeon's KMS API (default: auto)]),
109	      [RADEON=$enableval], [RADEON=auto])
110
111AC_ARG_ENABLE(amdgpu,
112	      AS_HELP_STRING([--disable-amdgpu],
113	      [Enable support for amdgpu's KMS API (default: auto)]),
114	      [AMDGPU=$enableval], [AMDGPU=auto])
115
116AC_ARG_ENABLE(nouveau,
117	      AS_HELP_STRING([--disable-nouveau],
118	      [Enable support for nouveau's KMS API (default: auto)]),
119	      [NOUVEAU=$enableval], [NOUVEAU=auto])
120
121AC_ARG_ENABLE(vmwgfx,
122	      AS_HELP_STRING([--disable-vmwgfx],
123	      [Enable support for vmwgfx's KMS API (default: yes)]),
124	      [VMWGFX=$enableval], [VMWGFX=yes])
125
126AC_ARG_ENABLE(omap-experimental-api,
127	      AS_HELP_STRING([--enable-omap-experimental-api],
128	      [Enable support for OMAP's experimental API (default: disabled)]),
129	      [OMAP=$enableval], [OMAP=no])
130
131AC_ARG_ENABLE(exynos-experimental-api,
132	      AS_HELP_STRING([--enable-exynos-experimental-api],
133	      [Enable support for EXYNOS's experimental API (default: disabled)]),
134	      [EXYNOS=$enableval], [EXYNOS=no])
135
136AC_ARG_ENABLE(freedreno,
137	      AS_HELP_STRING([--disable-freedreno],
138	      [Enable support for freedreno's KMS API (default: auto, enabled on arm)]),
139	      [FREEDRENO=$enableval], [FREEDRENO=auto])
140
141AC_ARG_ENABLE(freedreno-kgsl,
142	      AS_HELP_STRING([--enable-freedreno-kgsl],
143	      [Enable support for freedreno's to use downstream android kernel API (default: disabled)]),
144	      [FREEDRENO_KGSL=$enableval], [FREEDRENO_KGSL=no])
145
146AC_ARG_ENABLE(tegra-experimental-api,
147	      AS_HELP_STRING([--enable-tegra-experimental-api],
148	      [Enable support for Tegra's experimental API (default: disabled)]),
149	      [TEGRA=$enableval], [TEGRA=no])
150
151AC_ARG_ENABLE(vc4,
152	      AS_HELP_STRING([--disable-vc4],
153	      [Enable support for vc4's API (default: auto, enabled on arm)]),
154	      [VC4=$enableval], [VC4=auto])
155
156AC_ARG_ENABLE(etnaviv-experimental-api,
157	      AS_HELP_STRING([--enable-etnaviv-experimental-api],
158	      [Enable support for etnaviv's experimental API (default: disabled)]),
159	      [ETNAVIV=$enableval], [ETNAVIV=no])
160
161AC_ARG_ENABLE(install-test-programs,
162		  AS_HELP_STRING([--enable-install-test-programs],
163		  [Install test programs (default: no)]),
164		  [INSTALL_TESTS=$enableval], [INSTALL_TESTS=no])
165
166dnl ===========================================================================
167dnl check compiler flags
168AC_DEFUN([LIBDRM_CC_TRY_FLAG], [
169  AC_MSG_CHECKING([whether $CC supports $1])
170
171  libdrm_save_CFLAGS="$CFLAGS"
172  CFLAGS="$CFLAGS $1"
173
174  AC_COMPILE_IFELSE([AC_LANG_SOURCE([ ])], [libdrm_cc_flag=yes], [libdrm_cc_flag=no])
175  CFLAGS="$libdrm_save_CFLAGS"
176
177  if test "x$libdrm_cc_flag" = "xyes"; then
178    ifelse([$2], , :, [$2])
179  else
180    ifelse([$3], , :, [$3])
181  fi
182  AC_MSG_RESULT([$libdrm_cc_flag])
183])
184
185dnl We use clock_gettime to check for timeouts in drmWaitVBlank
186
187AC_CHECK_FUNCS([clock_gettime], [CLOCK_LIB=],
188               [AC_CHECK_LIB([rt], [clock_gettime], [CLOCK_LIB=-lrt],
189                             [AC_MSG_ERROR([Couldn't find clock_gettime])])])
190AC_SUBST([CLOCK_LIB])
191
192AC_CHECK_FUNCS([open_memstream],
193               [AC_DEFINE([HAVE_OPEN_MEMSTREAM], 1, [Have open_memstream()])],
194               [AC_DEFINE([HAVE_OPEN_MEMSTREAM], 0)])
195
196dnl Use lots of warning flags with with gcc and compatible compilers
197
198dnl Note: if you change the following variable, the cache is automatically
199dnl skipped and all flags rechecked.  So there's no need to do anything
200dnl else.  If for any reason you need to force a recheck, just change
201dnl MAYBE_WARN in an ignorable way (like adding whitespace)
202
203MAYBE_WARN="-Wall -Wextra -Werror=undef \
204-Wsign-compare -Werror-implicit-function-declaration \
205-Wpointer-arith -Wwrite-strings -Wstrict-prototypes \
206-Wmissing-prototypes -Wmissing-declarations -Wnested-externs \
207-Wpacked -Wswitch-enum -Wmissing-format-attribute \
208-Wstrict-aliasing=2 -Winit-self \
209-Wdeclaration-after-statement -Wold-style-definition \
210-Wno-unused-parameter \
211-Wno-attributes -Wno-long-long -Winline -Wshadow \
212-Wno-missing-field-initializers"
213
214# invalidate cached value if MAYBE_WARN has changed
215if test "x$libdrm_cv_warn_maybe" != "x$MAYBE_WARN"; then
216	unset libdrm_cv_warn_cflags
217fi
218AC_CACHE_CHECK([for supported warning flags], libdrm_cv_warn_cflags, [
219	echo
220	WARN_CFLAGS=""
221
222	# Some warning options are not supported by all versions of
223	# gcc, so test all desired options against the current
224	# compiler.
225	#
226	# Note that there are some order dependencies
227	# here. Specifically, an option that disables a warning will
228	# have no net effect if a later option then enables that
229	# warnings, (perhaps implicitly). So we put some grouped
230	# options (-Wall and -Wextra) up front and the -Wno options
231	# last.
232
233	for W in $MAYBE_WARN; do
234		LIBDRM_CC_TRY_FLAG([$W], [WARN_CFLAGS="$WARN_CFLAGS $W"])
235	done
236
237	libdrm_cv_warn_cflags=$WARN_CFLAGS
238	libdrm_cv_warn_maybe=$MAYBE_WARN
239
240	AC_MSG_CHECKING([which warning flags were supported])])
241WARN_CFLAGS="$libdrm_cv_warn_cflags"
242
243# Check for atomic intrinsics
244AC_CACHE_CHECK([for native atomic primitives], drm_cv_atomic_primitives, [
245	drm_cv_atomic_primitives="none"
246
247	AC_LINK_IFELSE([AC_LANG_PROGRAM([[
248	int atomic_add(int *i) { return __sync_add_and_fetch (i, 1); }
249	int atomic_cmpxchg(int *i, int j, int k) { return __sync_val_compare_and_swap (i, j, k); }
250					  ]],[[]])], [drm_cv_atomic_primitives="Intel"],[])
251
252	if test "x$drm_cv_atomic_primitives" = "xnone"; then
253		AC_CHECK_HEADER([atomic_ops.h], drm_cv_atomic_primitives="libatomic-ops")
254	fi
255
256	# atomic functions defined in <atomic.h> & libc on Solaris
257	if test "x$drm_cv_atomic_primitives" = "xnone"; then
258		AC_CHECK_FUNC([atomic_cas_uint], drm_cv_atomic_primitives="Solaris")
259	fi
260])
261
262if test "x$drm_cv_atomic_primitives" = xIntel; then
263	AC_DEFINE(HAVE_LIBDRM_ATOMIC_PRIMITIVES, 1,
264		[Enable if your compiler supports the Intel __sync_* atomic primitives])
265else
266	AC_DEFINE(HAVE_LIBDRM_ATOMIC_PRIMITIVES, 0)
267fi
268if test "x$drm_cv_atomic_primitives" = "xlibatomic-ops"; then
269	AC_DEFINE(HAVE_LIB_ATOMIC_OPS, 1, [Enable if you have libatomic-ops-dev installed])
270else
271	AC_DEFINE(HAVE_LIB_ATOMIC_OPS, 0)
272fi
273
274dnl Print out the approapriate message considering the value set be the
275dnl respective in $1.
276dnl $1 - value to be evaluated. Eg. $INTEL, $NOUVEAU, ...
277dnl $2 - libdrm shortname. Eg. intel, freedreno, ...
278dnl $3 - GPU name/brand. Eg. Intel, NVIDIA Tegra, ...
279dnl $4 - Configure switch. Eg. intel, omap-experimental-api, ...
280AC_DEFUN([LIBDRM_ATOMICS_NOT_FOUND_MSG], [
281	case "x$1" in
282		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]) ;;
283		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.]) ;;
284		*)	;;
285	esac
286])
287
288if test "x$drm_cv_atomic_primitives" = "xnone"; then
289	LIBDRM_ATOMICS_NOT_FOUND_MSG($INTEL, intel, Intel, intel)
290	INTEL=no
291
292	LIBDRM_ATOMICS_NOT_FOUND_MSG($RADEON, radeon, Radeon, radeon)
293	RADEON=no
294
295	LIBDRM_ATOMICS_NOT_FOUND_MSG($AMDGPU, amdgpu, AMD, amdgpu)
296	AMDGPU=no
297
298	LIBDRM_ATOMICS_NOT_FOUND_MSG($NOUVEAU, nouveau, NVIDIA, nouveau)
299	NOUVEAU=no
300
301	LIBDRM_ATOMICS_NOT_FOUND_MSG($OMAP, omap, OMAP, omap-experimental-api)
302	OMAP=no
303
304	LIBDRM_ATOMICS_NOT_FOUND_MSG($FREEDRENO, freedreno, Qualcomm Adreno, freedreno)
305	FREEDRENO=no
306
307	LIBDRM_ATOMICS_NOT_FOUND_MSG($TEGRA, tegra, NVIDIA Tegra, tegra-experimental-api)
308	TEGRA=no
309
310	LIBDRM_ATOMICS_NOT_FOUND_MSG($ETNAVIV, etnaviv, Vivante, etnaviv-experimental-api)
311	ETNAVIV=no
312else
313	if test "x$INTEL" = xauto; then
314		case $host_cpu in
315			i?86|x86_64)	INTEL=yes ;;
316			*)		INTEL=no ;;
317		esac
318	fi
319	if test "x$RADEON" = xauto; then
320		RADEON=yes
321	fi
322	if test "x$AMDGPU" = xauto; then
323		AMDGPU=yes
324	fi
325	if test "x$NOUVEAU" = xauto; then
326		NOUVEAU=yes
327	fi
328	if test "x$FREEDRENO" = xauto; then
329		case $host_cpu in
330			arm*|aarch64)	FREEDRENO=yes ;;
331			*)		FREEDRENO=no ;;
332		esac
333	fi
334	if test "x$VC4" = xauto; then
335		case $host_cpu in
336			arm*|aarch64)	VC4=yes ;;
337			*)		VC4=no ;;
338		esac
339	fi
340fi
341
342if test "x$INTEL" != "xno"; then
343	PKG_CHECK_MODULES(PCIACCESS, [pciaccess >= 0.10])
344fi
345AC_SUBST(PCIACCESS_CFLAGS)
346AC_SUBST(PCIACCESS_LIBS)
347
348if test "x$UDEV" = xyes; then
349	AC_DEFINE(UDEV, 1, [Have UDEV support])
350else
351	AC_DEFINE(UDEV, 0)
352fi
353
354AC_CANONICAL_HOST
355if test "x$LIBKMS" = xauto ; then
356	case $host_os in
357		linux*)		LIBKMS="yes" ;;
358		freebsd* | kfreebsd*-gnu)
359				LIBKMS="yes" ;;
360		dragonfly*)	LIBKMS="yes" ;;
361		*)		LIBKMS="no" ;;
362	esac
363fi
364
365AM_CONDITIONAL(HAVE_LIBKMS, [test "x$LIBKMS" = xyes])
366
367AM_CONDITIONAL(HAVE_INTEL, [test "x$INTEL" = xyes])
368if test "x$INTEL" = xyes; then
369	AC_DEFINE(HAVE_INTEL, 1, [Have intel support])
370else
371	AC_DEFINE(HAVE_INTEL, 0)
372fi
373
374AM_CONDITIONAL(HAVE_VMWGFX, [test "x$VMWGFX" = xyes])
375if test "x$VMWGFX" = xyes; then
376	AC_DEFINE(HAVE_VMWGFX, 1, [Have vmwgfx kernel headers])
377else
378	AC_DEFINE(HAVE_VMWGFX, 0)
379fi
380
381AM_CONDITIONAL(HAVE_NOUVEAU, [test "x$NOUVEAU" = xyes])
382if test "x$NOUVEAU" = xyes; then
383	AC_DEFINE(HAVE_NOUVEAU, 1, [Have nouveau (nvidia) support])
384else
385	AC_DEFINE(HAVE_NOUVEAU, 0)
386fi
387
388AM_CONDITIONAL(HAVE_OMAP, [test "x$OMAP" = xyes])
389
390AM_CONDITIONAL(HAVE_EXYNOS, [test "x$EXYNOS" = xyes])
391if test "x$EXYNOS" = xyes; then
392	AC_DEFINE(HAVE_EXYNOS, 1, [Have EXYNOS support])
393else
394	AC_DEFINE(HAVE_EXYNOS, 0)
395fi
396
397AM_CONDITIONAL(HAVE_FREEDRENO, [test "x$FREEDRENO" = xyes])
398
399if test "x$FREEDRENO_KGSL" = xyes; then
400	if test "x$FREEDRENO" != xyes; then
401		AC_MSG_ERROR([Cannot enable freedreno KGSL interface if freedreno is disabled])
402	fi
403fi
404AM_CONDITIONAL(HAVE_FREEDRENO_KGSL, [test "x$FREEDRENO_KGSL" = xyes])
405if test "x$FREEDRENO_KGSL" = xyes; then
406	AC_DEFINE(HAVE_FREEDRENO_KGSL, 1, [Have freedreno support for KGSL kernel interface])
407else
408	AC_DEFINE(HAVE_FREEDRENO_KGSL, 0)
409fi
410
411AM_CONDITIONAL(HAVE_RADEON, [test "x$RADEON" = xyes])
412if test "x$RADEON" = xyes; then
413	AC_DEFINE(HAVE_RADEON, 1, [Have radeon support])
414else
415	AC_DEFINE(HAVE_RADEON, 0)
416fi
417
418if test "x$AMDGPU" != xno; then
419	# Detect cunit library
420	PKG_CHECK_MODULES([CUNIT], [cunit >= 2.1], [have_cunit=yes], [have_cunit=no])
421	# If pkg-config does not find cunit, check it using AC_CHECK_LIB.  We
422	# do this because Debian (Ubuntu) lacks pkg-config file for cunit.
423	# fixed in 2.1-2.dfsg-3: http://anonscm.debian.org/cgit/collab-maint/cunit.git/commit/?h=debian
424	if test "x${have_cunit}" = "xno"; then
425		AC_CHECK_LIB([cunit], [CU_initialize_registry], [have_cunit=yes], [have_cunit=no])
426		if test "x${have_cunit}" = "xyes"; then
427			CUNIT_LIBS="-lcunit"
428			CUNIT_CFLAGS=""
429			AC_SUBST([CUNIT_LIBS])
430			AC_SUBST([CUNIT_CFLAGS])
431		fi
432	fi
433else
434	have_cunit=no
435fi
436AM_CONDITIONAL(HAVE_CUNIT, [test "x$have_cunit" != "xno"])
437
438AM_CONDITIONAL(HAVE_AMDGPU, [test "x$AMDGPU" = xyes])
439if test "x$AMDGPU" = xyes; then
440	AC_DEFINE(HAVE_AMDGPU, 1, [Have amdgpu support])
441
442	if test "x$have_cunit" = "xno"; then
443		AC_MSG_WARN([Could not find cunit library. Disabling amdgpu tests])
444	fi
445else
446	AC_DEFINE(HAVE_AMDGPU, 0)
447fi
448
449AM_CONDITIONAL(HAVE_TEGRA, [test "x$TEGRA" = xyes])
450
451AM_CONDITIONAL(HAVE_VC4, [test "x$VC4" = xyes])
452if test "x$VC4" = xyes; then
453	AC_DEFINE(HAVE_VC4, 1, [Have VC4 support])
454else
455	AC_DEFINE(HAVE_VC4, 0)
456fi
457
458AM_CONDITIONAL(HAVE_ETNAVIV, [test "x$ETNAVIV" = xyes])
459
460AM_CONDITIONAL(HAVE_INSTALL_TESTS, [test "x$INSTALL_TESTS" = xyes])
461
462AC_ARG_ENABLE([cairo-tests],
463              [AS_HELP_STRING([--enable-cairo-tests],
464                              [Enable support for Cairo rendering in tests (default: auto)])],
465              [CAIRO=$enableval], [CAIRO=auto])
466if test "x$CAIRO" != xno; then
467	PKG_CHECK_MODULES(CAIRO, cairo, [HAVE_CAIRO=yes], [HAVE_CAIRO=no])
468fi
469AC_MSG_CHECKING([whether to enable Cairo tests])
470if test "x$CAIRO" = xauto; then
471	CAIRO="$HAVE_CAIRO"
472fi
473if test "x$CAIRO" = xyes; then
474	if ! test "x$HAVE_CAIRO" = xyes; then
475		AC_MSG_ERROR([Cairo support required but not present])
476	fi
477	AC_DEFINE(HAVE_CAIRO, 1, [Have Cairo support])
478else
479	AC_DEFINE(HAVE_CAIRO, 0)
480fi
481AC_MSG_RESULT([$CAIRO])
482AM_CONDITIONAL(HAVE_CAIRO, [test "x$CAIRO" = xyes])
483
484# xsltproc for docbook manpages
485AC_ARG_ENABLE([manpages],
486              AS_HELP_STRING([--enable-manpages], [enable manpages @<:@default=auto@:>@]),
487              [MANS=$enableval], [MANS=auto])
488AM_CONDITIONAL([BUILD_MANPAGES], [test "x$XSLTPROC" != "x" -a "x$MANS" != "xno"])
489
490# check for offline man-pages stylesheet
491AC_MSG_CHECKING([for docbook manpages stylesheet])
492MANPAGES_STYLESHEET="http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl"
493AC_PATH_PROGS_FEATURE_CHECK([XSLTPROC_TMP], [xsltproc],
494                            AS_IF([`"$ac_path_XSLTPROC_TMP" --nonet "$MANPAGES_STYLESHEET" > /dev/null 2>&1`],
495                                  [HAVE_MANPAGES_STYLESHEET=yes]))
496if test "x$HAVE_MANPAGES_STYLESHEET" = "xyes"; then
497        AC_SUBST(MANPAGES_STYLESHEET)
498        AC_MSG_RESULT([yes])
499else
500        AC_MSG_RESULT([no])
501fi
502AM_CONDITIONAL([HAVE_MANPAGES_STYLESHEET], [test "x$HAVE_MANPAGES_STYLESHEET" = "xyes"])
503
504AC_ARG_ENABLE(valgrind,
505              [AS_HELP_STRING([--enable-valgrind],
506                             [Build libdrm with  valgrind support (default: auto)])],
507                             [VALGRIND=$enableval], [VALGRIND=auto])
508if test "x$VALGRIND" != xno; then
509	PKG_CHECK_MODULES(VALGRIND, [valgrind], [have_valgrind=yes], [have_valgrind=no])
510fi
511AC_MSG_CHECKING([whether to enable Valgrind support])
512if test "x$VALGRIND" = xauto; then
513	VALGRIND="$have_valgrind"
514fi
515
516if test "x$VALGRIND" = "xyes"; then
517	if ! test "x$have_valgrind" = xyes; then
518		AC_MSG_ERROR([Valgrind support required but not present])
519	fi
520	AC_DEFINE([HAVE_VALGRIND], 1, [Use valgrind intrinsics to suppress false warnings])
521else
522	AC_DEFINE([HAVE_VALGRIND], 0)
523fi
524
525AC_MSG_RESULT([$VALGRIND])
526
527AC_ARG_WITH([kernel-source],
528            [AS_HELP_STRING([--with-kernel-source],
529              [specify path to linux kernel source])],
530	    [kernel_source="$with_kernel_source"])
531AC_SUBST(kernel_source)
532
533AC_MSG_CHECKING([whether $CC supports __attribute__(("hidden"))])
534AC_LINK_IFELSE([AC_LANG_PROGRAM([
535    int foo_hidden( void ) __attribute__((visibility("hidden")));
536])], HAVE_ATTRIBUTE_VISIBILITY="yes"; AC_MSG_RESULT([yes]), AC_MSG_RESULT([no]));
537
538if test "x$HAVE_ATTRIBUTE_VISIBILITY" = xyes; then
539    AC_DEFINE(HAVE_VISIBILITY, 1, [Compiler supports __attribute__(("hidden"))])
540else
541    AC_DEFINE(HAVE_VISIBILITY, 0)
542fi
543
544CPPFLAGS="$CPPFLAGS -include config.h"
545
546AC_SUBST(WARN_CFLAGS)
547AC_CONFIG_FILES([
548	Makefile
549	data/Makefile
550	libkms/Makefile
551	libkms/libkms.pc
552	intel/Makefile
553	intel/libdrm_intel.pc
554	radeon/Makefile
555	radeon/libdrm_radeon.pc
556	amdgpu/Makefile
557	amdgpu/libdrm_amdgpu.pc
558	nouveau/Makefile
559	nouveau/libdrm_nouveau.pc
560	omap/Makefile
561	omap/libdrm_omap.pc
562	exynos/Makefile
563	exynos/libdrm_exynos.pc
564	freedreno/Makefile
565	freedreno/libdrm_freedreno.pc
566	tegra/Makefile
567	tegra/libdrm_tegra.pc
568	vc4/Makefile
569	vc4/libdrm_vc4.pc
570	etnaviv/Makefile
571	etnaviv/libdrm_etnaviv.pc
572	tests/Makefile
573	tests/modeprint/Makefile
574	tests/modetest/Makefile
575	tests/kms/Makefile
576	tests/kmstest/Makefile
577	tests/proptest/Makefile
578	tests/radeon/Makefile
579	tests/amdgpu/Makefile
580	tests/vbltest/Makefile
581	tests/exynos/Makefile
582	tests/tegra/Makefile
583	tests/nouveau/Makefile
584	tests/etnaviv/Makefile
585	tests/util/Makefile
586	man/Makefile
587	libdrm.pc])
588AC_OUTPUT
589
590echo ""
591echo "$PACKAGE_STRING will be compiled with:"
592echo ""
593echo "  libkms         $LIBKMS"
594echo "  Intel API      $INTEL"
595echo "  vmwgfx API     $VMWGFX"
596echo "  Radeon API     $RADEON"
597echo "  AMDGPU API     $AMDGPU"
598echo "  Nouveau API    $NOUVEAU"
599echo "  OMAP API       $OMAP"
600echo "  EXYNOS API     $EXYNOS"
601echo "  Freedreno API  $FREEDRENO (kgsl: $FREEDRENO_KGSL)"
602echo "  Tegra API      $TEGRA"
603echo "  VC4 API        $VC4"
604echo "  Etnaviv API    $ETNAVIV"
605echo ""
606