| # Copyright 2005 Adam Jackson. |
| # |
| # Permission is hereby granted, free of charge, to any person obtaining a |
| # copy of this software and associated documentation files (the "Software"), |
| # to deal in the Software without restriction, including without limitation |
| # on the rights to use, copy, modify, merge, publish, distribute, sub |
| # license, and/or sell copies of the Software, and to permit persons to whom |
| # the Software is furnished to do so, subject to the following conditions: |
| # |
| # The above copyright notice and this permission notice (including the next |
| # paragraph) shall be included in all copies or substantial portions of the |
| # Software. |
| # |
| # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| # FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL |
| # ADAM JACKSON BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER |
| # IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
| # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
| |
| AC_PREREQ(2.60) |
| AC_INIT([libdrm], 2.4.15, [dri-devel@lists.sourceforge.net], libdrm) |
| AC_USE_SYSTEM_EXTENSIONS |
| AC_CONFIG_SRCDIR([Makefile.am]) |
| AM_INIT_AUTOMAKE([dist-bzip2]) |
| |
| AM_CONFIG_HEADER([libdrm/config.h]) |
| |
| AC_DISABLE_STATIC |
| AC_PROG_LIBTOOL |
| AC_PROG_CC |
| |
| AC_HEADER_STDC |
| AC_SYS_LARGEFILE |
| |
| PKG_CHECK_MODULES(PTHREADSTUBS, pthread-stubs) |
| AC_SUBST(PTHREADSTUBS_CFLAGS) |
| AC_SUBST(PTHREADSTUBS_LIBS) |
| |
| pkgconfigdir=${libdir}/pkgconfig |
| AC_SUBST(pkgconfigdir) |
| AC_ARG_ENABLE(udev, AS_HELP_STRING([--enable-udev], |
| [Enable support for using udev instead of mknod (default: disabled)]), |
| [UDEV=$enableval], [UDEV=no]) |
| |
| AC_ARG_ENABLE(intel, |
| AS_HELP_STRING([--disable-intel], |
| [Enable support for intel's KMS API (default: auto)]), |
| [INTEL=$enableval], [INTEL=auto]) |
| |
| AC_ARG_ENABLE(nouveau-experimental-api, |
| AS_HELP_STRING([--enable-nouveau-experimental-api], |
| [Enable support for nouveau's experimental API (default: disabled)]), |
| [NOUVEAU=$enableval], [NOUVEAU=no]) |
| |
| AC_ARG_ENABLE(radeon-experimental-api, |
| AS_HELP_STRING([--enable-radeon-experimental-api], |
| [Enable support for radeon's KMS API (default: disabled)]), |
| [RADEON=$enableval], [RADEON=no]) |
| |
| dnl =========================================================================== |
| dnl check compiler flags |
| AC_DEFUN([LIBDRM_CC_TRY_FLAG], [ |
| AC_MSG_CHECKING([whether $CC supports $1]) |
| |
| libdrm_save_CFLAGS="$CFLAGS" |
| CFLAGS="$CFLAGS $1" |
| |
| AC_COMPILE_IFELSE([ ], [libdrm_cc_flag=yes], [libdrm_cc_flag=no]) |
| CFLAGS="$libdrm_save_CFLAGS" |
| |
| if test "x$libdrm_cc_flag" = "xyes"; then |
| ifelse([$2], , :, [$2]) |
| else |
| ifelse([$3], , :, [$3]) |
| fi |
| AC_MSG_RESULT([$libdrm_cc_flag]) |
| ]) |
| |
| dnl We use clock_gettime to check for timeouts in drmWaitVBlank |
| |
| AC_CHECK_FUNCS([clock_gettime], [CLOCK_LIB=], |
| [AC_CHECK_LIB([rt], [clock_gettime], [CLOCK_LIB=-lrt], |
| [AC_MSG_ERROR([Couldn't find clock_gettime])])]) |
| AC_SUBST([CLOCK_LIB]) |
| |
| dnl Use lots of warning flags with with gcc and compatible compilers |
| |
| dnl Note: if you change the following variable, the cache is automatically |
| dnl skipped and all flags rechecked. So there's no need to do anything |
| dnl else. If for any reason you need to force a recheck, just change |
| dnl MAYBE_WARN in an ignorable way (like adding whitespace) |
| |
| MAYBE_WARN="-Wall -Wextra \ |
| -Wsign-compare -Werror-implicit-function-declaration \ |
| -Wpointer-arith -Wwrite-strings -Wstrict-prototypes \ |
| -Wmissing-prototypes -Wmissing-declarations -Wnested-externs \ |
| -Wpacked -Wswitch-enum -Wmissing-format-attribute \ |
| -Wstrict-aliasing=2 -Winit-self -Wunsafe-loop-optimizations \ |
| -Wdeclaration-after-statement -Wold-style-definition \ |
| -Wno-missing-field-initializers -Wno-unused-parameter \ |
| -Wno-attributes -Wno-long-long -Winline" |
| |
| # invalidate cached value if MAYBE_WARN has changed |
| if test "x$libdrm_cv_warn_maybe" != "x$MAYBE_WARN"; then |
| unset libdrm_cv_warn_cflags |
| fi |
| AC_CACHE_CHECK([for supported warning flags], libdrm_cv_warn_cflags, [ |
| echo |
| WARN_CFLAGS="" |
| |
| # Some warning options are not supported by all versions of |
| # gcc, so test all desired options against the current |
| # compiler. |
| # |
| # Note that there are some order dependencies |
| # here. Specifically, an option that disables a warning will |
| # have no net effect if a later option then enables that |
| # warnings, (perhaps implicitly). So we put some grouped |
| # options (-Wall and -Wextra) up front and the -Wno options |
| # last. |
| |
| for W in $MAYBE_WARN; do |
| LIBDRM_CC_TRY_FLAG([$W], [WARN_CFLAGS="$WARN_CFLAGS $W"]) |
| done |
| |
| libdrm_cv_warn_cflags=$WARN_CFLAGS |
| libdrm_cv_warn_maybe=$MAYBE_WARN |
| |
| AC_MSG_CHECKING([which warning flags were supported])]) |
| WARN_CFLAGS="$libdrm_cv_warn_cflags" |
| |
| if test "x$UDEV" = xyes; then |
| AC_DEFINE(UDEV, 1, [Have UDEV support]) |
| fi |
| |
| AM_CONDITIONAL(HAVE_NOUVEAU, [test "x$NOUVEAU" = xyes]) |
| |
| AM_CONDITIONAL(HAVE_RADEON, [test "x$RADEON" = xyes]) |
| |
| PKG_CHECK_MODULES(CAIRO, cairo, [HAVE_CAIRO=yes], [HAVE_CAIRO=no]) |
| if test "x$HAVE_CAIRO" = xyes; then |
| AC_DEFINE(HAVE_CAIRO, 1, [Have cairo support]) |
| fi |
| AM_CONDITIONAL(HAVE_CAIRO, [test "x$HAVE_CAIRO" = xyes]) |
| |
| # For enumerating devices in test case |
| PKG_CHECK_MODULES(LIBUDEV, libudev, [HAVE_LIBUDEV=yes], [HAVE_LIBUDEV=no]) |
| if test "x$HAVE_LIBUDEV" = xyes; then |
| AC_DEFINE(HAVE_LIBUDEV, 1, [Have libudev support]) |
| fi |
| AM_CONDITIONAL(HAVE_LIBUDEV, [test "x$HAVE_LIBUDEV" = xyes]) |
| |
| if test "x$INTEL" != "xno"; then |
| # Check for atomic intrinsics |
| AC_CACHE_CHECK([for native atomic primitives], drm_cv_atomic_primitives, |
| [ |
| drm_cv_atomic_primitives="none" |
| |
| AC_TRY_LINK([ |
| int atomic_add(int i) { return __sync_fetch_and_add (&i, 1); } |
| int atomic_cmpxchg(int i, int j, int k) { return __sync_val_compare_and_swap (&i, j, k); } |
| ], [], |
| drm_cv_atomic_primitives="Intel" |
| ) |
| |
| if test "x$drm_cv_atomic_primitives" = "xnone"; then |
| AC_CHECK_HEADER([atomic_ops.h], drm_cv_atomic_primitives="libatomic-ops") |
| fi |
| |
| ]) |
| if test "x$drm_cv_atomic_primitives" = xIntel; then |
| AC_DEFINE(HAVE_INTEL_ATOMIC_PRIMITIVES, 1, |
| [Enable if your compiler supports the Intel __sync_* atomic primitives]) |
| fi |
| if test "x$drm_cv_atomic_primitives" = "xlibatomic-ops"; then |
| AC_DEFINE(HAVE_LIB_ATOMIC_OPS, 1, [Enable if you have libatomic-ops-dev installed]) |
| fi |
| |
| if test "x$drm_cv_atomic_primitives" = "xnone"; then |
| if test "x$INTEL" != "xauto"; then |
| 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]) |
| else |
| INTEL=no |
| fi |
| fi |
| fi |
| |
| AM_CONDITIONAL(HAVE_INTEL, [test "x$INTEL" != "xno"]) |
| |
| AC_ARG_WITH([kernel-source], |
| [AS_HELP_STRING([--with-kernel-source], |
| [specify path to linux kernel source])], |
| [kernel_source="$with_kernel_source"]) |
| AC_SUBST(kernel_source) |
| |
| AC_SUBST(WARN_CFLAGS) |
| AC_OUTPUT([ |
| Makefile |
| libdrm/Makefile |
| libdrm/intel/Makefile |
| libdrm/intel/libdrm_intel.pc |
| libdrm/radeon/Makefile |
| libdrm/radeon/libdrm_radeon.pc |
| libdrm/nouveau/Makefile |
| libdrm/nouveau/libdrm_nouveau.pc |
| shared-core/Makefile |
| tests/Makefile |
| tests/modeprint/Makefile |
| tests/modetest/Makefile |
| libdrm.pc]) |