]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - glsdk/libdrm.git/blobdiff - configure.ac
Merge branch 'master' into libkms-master
[glsdk/libdrm.git] / configure.ac
index c0b11b20126f03aa13b3010a8118119fdb5b5bc0..b95731452deee756a376c07f0c6d400709f985df 100644 (file)
 #  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.57)
-AC_INIT([libdrm], 2.3.0, [dri-devel@lists.sourceforge.net], libdrm)
+AC_PREREQ(2.60)
+AC_INIT([libdrm], 2.4.17, [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])
+AM_CONFIG_HEADER([config.h])
 
 AC_DISABLE_STATIC
 AC_PROG_LIBTOOL
@@ -32,7 +33,207 @@ 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(libkms,
+             AS_HELP_STRING([--enable-libkms],
+             [Enable KMS mm abstraction library (default: disabled)]),
+             [LIBKMS=$enableval], [LIBKMS=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(vmwgfx-experimental-api,
+             AS_HELP_STRING([--enable-vmwgfx-experimental-api],
+             [Install vmwgfx's experimental kernel API header (default: disabled)]),
+             [VMWGFX=$enableval], [VMWGFX=no])
+
+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_LIBKMS, [test "x$LIBKMS" = xyes])
+
+AM_CONDITIONAL(HAVE_VMWGFX, [test "x$VMWGFX" = xyes])
+
+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
+    else
+          INTEL=yes
+    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
+       libkms/Makefile
+       libkms/libkms.pc
+       intel/Makefile
+       intel/libdrm_intel.pc
+       radeon/Makefile
+       radeon/libdrm_radeon.pc
+       nouveau/Makefile
+       nouveau/libdrm_nouveau.pc
+       tests/Makefile
+       tests/modeprint/Makefile
+       tests/modetest/Makefile
+       include/Makefile
+       include/drm/Makefile
+       libdrm.pc])
 
-AC_OUTPUT([Makefile libdrm/Makefile shared-core/Makefile libdrm.pc])
+echo ""
+echo "$PACKAGE_STRING will be compiled with:"
+echo ""
+echo "  libkms         $LIBKMS"
+echo "  Intel API      $INTEL"
+echo "  vmwgfx API     $VMWGFX"
+echo "  Radeon API     $RADEON"
+echo "  Nouveau API    $NOUVEAU"
+echo ""