Blame configure.ac

Packit 030a23
dnl  Copyright 2005 Red Hat, Inc.
Packit 030a23
dnl 
Packit 030a23
dnl  Permission to use, copy, modify, distribute, and sell this software and its
Packit 030a23
dnl  documentation for any purpose is hereby granted without fee, provided that
Packit 030a23
dnl  the above copyright notice appear in all copies and that both that
Packit 030a23
dnl  copyright notice and this permission notice appear in supporting
Packit 030a23
dnl  documentation, and that the name of Red Hat not be used in
Packit 030a23
dnl  advertising or publicity pertaining to distribution of the software without
Packit 030a23
dnl  specific, written prior permission.  Red Hat makes no
Packit 030a23
dnl  representations about the suitability of this software for any purpose.  It
Packit 030a23
dnl  is provided "as is" without express or implied warranty.
Packit 030a23
dnl 
Packit 030a23
dnl  RED HAT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
Packit 030a23
dnl  INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
Packit 030a23
dnl  EVENT SHALL RED HAT BE LIABLE FOR ANY SPECIAL, INDIRECT OR
Packit 030a23
dnl  CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
Packit 030a23
dnl  DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
Packit 030a23
dnl  TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
Packit 030a23
dnl  PERFORMANCE OF THIS SOFTWARE.
Packit 030a23
dnl
Packit 030a23
dnl Process this file with autoconf to create configure.
Packit 030a23
Packit 030a23
AC_PREREQ([2.57])
Packit 030a23
Packit 030a23
#   Pixman versioning scheme
Packit 030a23
#
Packit 030a23
#   - The version in git has an odd MICRO version number
Packit 030a23
#
Packit 030a23
#   - Released versions, both development and stable, have an
Packit 030a23
#     even MICRO version number
Packit 030a23
#
Packit 030a23
#   - Released development versions have an odd MINOR number
Packit 030a23
#
Packit 030a23
#   - Released stable versions have an even MINOR number
Packit 030a23
#
Packit 030a23
#   - Versions that break ABI must have a new MAJOR number
Packit 030a23
#
Packit 030a23
#   - If you break the ABI, then at least this must be done:
Packit 030a23
#
Packit 030a23
#        - increment MAJOR
Packit 030a23
#
Packit 030a23
#        - In the first development release where you break ABI, find
Packit 030a23
#          all instances of "pixman-n" and change them to pixman-(n+1)
Packit 030a23
#
Packit 030a23
#          This needs to be done at least in 
Packit 030a23
#                    configure.ac
Packit 030a23
#                    all Makefile.am's
Packit 030a23
#                    pixman-n.pc.in
Packit 030a23
#
Packit 030a23
#      This ensures that binary incompatible versions can be installed
Packit 030a23
#      in parallel.  See http://www106.pair.com/rhp/parallel.html for
Packit 030a23
#      more information
Packit 030a23
#
Packit 030a23
Packit 030a23
m4_define([pixman_major], 0)
Packit 030a23
m4_define([pixman_minor], 34)
Packit 030a23
m4_define([pixman_micro], 0)
Packit 030a23
Packit 030a23
m4_define([pixman_version],[pixman_major.pixman_minor.pixman_micro])
Packit 030a23
Packit 030a23
AC_INIT(pixman, pixman_version, [pixman@lists.freedesktop.org], pixman)
Packit 030a23
AM_INIT_AUTOMAKE([foreign dist-bzip2])
Packit 030a23
Packit 030a23
# Suppress verbose compile lines
Packit 030a23
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
Packit 030a23
Packit 030a23
AC_CONFIG_HEADERS(config.h)
Packit 030a23
Packit 030a23
AC_CANONICAL_HOST
Packit 030a23
Packit 030a23
test_CFLAGS=${CFLAGS+set} # We may override autoconf default CFLAGS.
Packit 030a23
Packit 030a23
AC_PROG_CC
Packit 030a23
AM_PROG_AS
Packit 030a23
AC_PROG_LIBTOOL
Packit 030a23
AC_CHECK_FUNCS([getisax])
Packit 030a23
AC_C_BIGENDIAN
Packit 030a23
AC_C_INLINE
Packit 030a23
Packit 030a23
dnl PIXMAN_LINK_WITH_ENV(env-setup, program, true-action, false-action)
Packit 030a23
dnl
Packit 030a23
dnl Compiles and links the given program in the environment setup by env-setup
Packit 030a23
dnl and executes true-action on success and false-action on failure.
Packit 030a23
AC_DEFUN([PIXMAN_LINK_WITH_ENV],[dnl
Packit 030a23
	save_CFLAGS="$CFLAGS"
Packit 030a23
	save_LDFLAGS="$LDFLAGS"
Packit 030a23
	save_LIBS="$LIBS"
Packit 030a23
	CFLAGS=""
Packit 030a23
	LDFLAGS=""
Packit 030a23
	LIBS=""
Packit 030a23
	$1
Packit 030a23
	CFLAGS="$save_CFLAGS $CFLAGS"
Packit 030a23
	LDFLAGS="$save_LDFLAGS $LDFLAGS"
Packit 030a23
	LIBS="$save_LIBS $LIBS"
Packit 030a23
	AC_LINK_IFELSE(
Packit 030a23
		[AC_LANG_SOURCE([$2])],
Packit 030a23
		[pixman_cc_stderr=`test -f conftest.err && cat conftest.err`
Packit 030a23
		 pixman_cc_flag=yes],
Packit 030a23
		[pixman_cc_stderr=`test -f conftest.err && cat conftest.err`
Packit 030a23
		 pixman_cc_flag=no])
Packit 030a23
Packit 030a23
	if test "x$pixman_cc_stderr" != "x"; then
Packit 030a23
		pixman_cc_flag=no
Packit 030a23
	fi
Packit 030a23
Packit 030a23
	if test "x$pixman_cc_flag" = "xyes"; then
Packit 030a23
		ifelse([$3], , :, [$3])
Packit 030a23
	else
Packit 030a23
		ifelse([$4], , :, [$4])
Packit 030a23
	fi
Packit 030a23
	CFLAGS="$save_CFLAGS"
Packit 030a23
	LDFLAGS="$save_LDFLAGS"
Packit 030a23
	LIBS="$save_LIBS"
Packit 030a23
])
Packit 030a23
Packit 030a23
dnl Find a -Werror for catching warnings.
Packit 030a23
WERROR=
Packit 030a23
for w in -Werror -errwarn; do
Packit 030a23
    if test "z$WERROR" = "z"; then
Packit 030a23
        AC_MSG_CHECKING([whether the compiler supports $w])
Packit 030a23
        PIXMAN_LINK_WITH_ENV(
Packit 030a23
		[CFLAGS=$w],
Packit 030a23
		[int main(int c, char **v) { (void)c; (void)v; return 0; }],
Packit 030a23
		[WERROR=$w; yesno=yes], [yesno=no])
Packit 030a23
	AC_MSG_RESULT($yesno)
Packit 030a23
    fi
Packit 030a23
done
Packit 030a23
Packit 030a23
dnl PIXMAN_CHECK_CFLAG(flag, [program])
Packit 030a23
dnl  Adds flag to CFLAGS if the given program links without warnings or errors.
Packit 030a23
AC_DEFUN([PIXMAN_CHECK_CFLAG], [dnl
Packit 030a23
	AC_MSG_CHECKING([whether the compiler supports $1])
Packit 030a23
	PIXMAN_LINK_WITH_ENV(
Packit 030a23
		[CFLAGS="$WERROR $1"],
Packit 030a23
		[$2
Packit 030a23
		 int main(int c, char **v) { (void)c; (void)v; return 0; }
Packit 030a23
		],
Packit 030a23
		[_yesno=yes],
Packit 030a23
		[_yesno=no])
Packit 030a23
	if test "x$_yesno" = xyes; then
Packit 030a23
	   CFLAGS="$CFLAGS $1"
Packit 030a23
	fi
Packit 030a23
	AC_MSG_RESULT($_yesno)
Packit 030a23
])
Packit 030a23
Packit 030a23
AC_CHECK_SIZEOF(long)
Packit 030a23
Packit 030a23
# Checks for Sun Studio compilers
Packit 030a23
AC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"])
Packit 030a23
AC_CHECK_DECL([__amd64], [AMD64_ABI="yes"], [AMD64_ABI="no"])
Packit 030a23
Packit 030a23
# Default CFLAGS to -O -g rather than just the -g from AC_PROG_CC
Packit 030a23
# if we're using Sun Studio and neither the user nor a config.site
Packit 030a23
# has set CFLAGS.
Packit 030a23
if test $SUNCC = yes &&			\
Packit 030a23
   test "x$test_CFLAGS" = "x" &&	\
Packit 030a23
   test "$CFLAGS" = "-g"
Packit 030a23
then
Packit 030a23
  CFLAGS="-O -g"
Packit 030a23
fi
Packit 030a23
Packit 030a23
# 
Packit 030a23
# We ignore pixman_major in the version here because the major version should
Packit 030a23
# always be encoded in the actual library name. Ie., the soname is:
Packit 030a23
#
Packit 030a23
#      pixman-$(pixman_major).0.minor.micro
Packit 030a23
#
Packit 030a23
m4_define([lt_current], [pixman_minor])
Packit 030a23
m4_define([lt_revision], [pixman_micro])
Packit 030a23
m4_define([lt_age], [pixman_minor])
Packit 030a23
Packit 030a23
LT_VERSION_INFO="lt_current:lt_revision:lt_age"
Packit 030a23
Packit 030a23
PIXMAN_VERSION_MAJOR=pixman_major()
Packit 030a23
AC_SUBST(PIXMAN_VERSION_MAJOR)
Packit 030a23
PIXMAN_VERSION_MINOR=pixman_minor()
Packit 030a23
AC_SUBST(PIXMAN_VERSION_MINOR)
Packit 030a23
PIXMAN_VERSION_MICRO=pixman_micro()
Packit 030a23
AC_SUBST(PIXMAN_VERSION_MICRO)
Packit 030a23
Packit 030a23
AC_SUBST(LT_VERSION_INFO)
Packit 030a23
Packit 030a23
# Check for dependencies
Packit 030a23
Packit 030a23
PIXMAN_CHECK_CFLAG([-Wall])
Packit 030a23
PIXMAN_CHECK_CFLAG([-Wdeclaration-after-statement])
Packit 030a23
PIXMAN_CHECK_CFLAG([-Wno-unused-local-typedefs])
Packit 030a23
PIXMAN_CHECK_CFLAG([-fno-strict-aliasing])
Packit 030a23
Packit 030a23
dnl =========================================================================
Packit 030a23
dnl OpenMP for the test suite?
Packit 030a23
dnl
Packit 030a23
Packit 030a23
# Check for OpenMP support only when autoconf support that (require autoconf >=2.62)
Packit 030a23
OPENMP_CFLAGS=
Packit 030a23
m4_ifdef([AC_OPENMP], [AC_OPENMP])
Packit 030a23
Packit 030a23
if test "x$enable_openmp" = "xyes" && test "x$ac_cv_prog_c_openmp" = "xunsupported" ; then
Packit 030a23
  AC_MSG_WARN([OpenMP support requested but found unsupported])
Packit 030a23
fi
Packit 030a23
Packit 030a23
dnl May not fail to link without -Wall -Werror added
Packit 030a23
dnl So try to link only when openmp is supported
Packit 030a23
dnl ac_cv_prog_c_openmp is not defined when --disable-openmp is used
Packit 030a23
if test "x$ac_cv_prog_c_openmp" != "xunsupported" && test "x$ac_cv_prog_c_openmp" != "x"; then
Packit 030a23
  m4_define([openmp_test_program],[dnl
Packit 030a23
  #include <stdio.h>
Packit 030a23
Packit 030a23
  extern unsigned int lcg_seed;
Packit 030a23
  #pragma omp threadprivate(lcg_seed)
Packit 030a23
  unsigned int lcg_seed;
Packit 030a23
Packit 030a23
  unsigned function(unsigned a, unsigned b)
Packit 030a23
  {
Packit 030a23
	lcg_seed ^= b;
Packit 030a23
	return ((a + b) ^ a ) + lcg_seed;
Packit 030a23
  }
Packit 030a23
Packit 030a23
  int main(int argc, char **argv)
Packit 030a23
  {
Packit 030a23
	int i;
Packit 030a23
	int n1 = 0, n2 = argc;
Packit 030a23
	unsigned checksum = 0;
Packit 030a23
	int verbose = argv != NULL;
Packit 030a23
	unsigned (*test_function)(unsigned, unsigned);
Packit 030a23
	test_function = function;
Packit 030a23
	#pragma omp parallel for reduction(+:checksum) default(none) \
Packit 030a23
					shared(n1, n2, test_function, verbose)
Packit 030a23
	for (i = n1; i < n2; i++)
Packit 030a23
	{
Packit 030a23
		unsigned crc = test_function (i, 0);
Packit 030a23
		if (verbose)
Packit 030a23
			printf ("%d: %08X\n", i, crc);
Packit 030a23
		checksum += crc;
Packit 030a23
	}
Packit 030a23
	printf("%u\n", checksum);
Packit 030a23
	return 0;
Packit 030a23
  }
Packit 030a23
  ])
Packit 030a23
Packit 030a23
  PIXMAN_LINK_WITH_ENV(
Packit 030a23
	[CFLAGS="$OPENMP_CFLAGS" LDFLAGS="$OPENMP_CFLAGS"],
Packit 030a23
	[openmp_test_program],
Packit 030a23
	[have_openmp=yes],
Packit 030a23
	[have_openmp=no])
Packit 030a23
  if test "x$have_openmp" = "xyes" ; then
Packit 030a23
    AC_DEFINE(USE_OPENMP, 1, [use OpenMP in the test suite])
Packit 030a23
  fi
Packit 030a23
fi
Packit 030a23
AC_SUBST(OPENMP_CFLAGS)
Packit 030a23
Packit 030a23
dnl =========================================================================
Packit 030a23
dnl -fvisibility stuff
Packit 030a23
Packit 030a23
PIXMAN_CHECK_CFLAG([-fvisibility=hidden], [dnl
Packit 030a23
#if defined(__GNUC__) && (__GNUC__ >= 4)
Packit 030a23
#ifdef _WIN32
Packit 030a23
#error Have -fvisibility but it is ignored and generates a warning
Packit 030a23
#endif
Packit 030a23
#else
Packit 030a23
#error Need GCC 4.0 for visibility
Packit 030a23
#endif
Packit 030a23
])
Packit 030a23
Packit 030a23
PIXMAN_CHECK_CFLAG([-xldscope=hidden], [dnl
Packit 030a23
#if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
Packit 030a23
#else
Packit 030a23
#error Need Sun Studio 8 for visibility
Packit 030a23
#endif
Packit 030a23
])
Packit 030a23
Packit 030a23
dnl ===========================================================================
Packit 030a23
dnl Check for Loongson Multimedia Instructions
Packit 030a23
Packit 030a23
if test "x$LS_CFLAGS" = "x" ; then
Packit 030a23
    LS_CFLAGS="-march=loongson2f"
Packit 030a23
fi
Packit 030a23
Packit 030a23
have_loongson_mmi=no
Packit 030a23
AC_MSG_CHECKING(whether to use Loongson MMI assembler)
Packit 030a23
Packit 030a23
xserver_save_CFLAGS=$CFLAGS
Packit 030a23
CFLAGS=" $LS_CFLAGS $CFLAGS -I$srcdir"
Packit 030a23
AC_LINK_IFELSE([AC_LANG_SOURCE([[
Packit 030a23
#ifndef __mips_loongson_vector_rev
Packit 030a23
#error "Loongson Multimedia Instructions are only available on Loongson"
Packit 030a23
#endif
Packit 030a23
#if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 4))
Packit 030a23
#error "Need GCC >= 4.4 for Loongson MMI compilation"
Packit 030a23
#endif
Packit 030a23
#include "pixman/loongson-mmintrin.h"
Packit 030a23
int main () {
Packit 030a23
    union {
Packit 030a23
        __m64 v;
Packit 030a23
        char c[8];
Packit 030a23
    } a = { .c = {1, 2, 3, 4, 5, 6, 7, 8} };
Packit 030a23
    int b = 4;
Packit 030a23
    __m64 c = _mm_srli_pi16 (a.v, b);
Packit 030a23
    return 0;
Packit 030a23
}]])], have_loongson_mmi=yes)
Packit 030a23
CFLAGS=$xserver_save_CFLAGS
Packit 030a23
Packit 030a23
AC_ARG_ENABLE(loongson-mmi,
Packit 030a23
   [AC_HELP_STRING([--disable-loongson-mmi],
Packit 030a23
                   [disable Loongson MMI fast paths])],
Packit 030a23
   [enable_loongson_mmi=$enableval], [enable_loongson_mmi=auto])
Packit 030a23
Packit 030a23
if test $enable_loongson_mmi = no ; then
Packit 030a23
   have_loongson_mmi=disabled
Packit 030a23
fi
Packit 030a23
Packit 030a23
if test $have_loongson_mmi = yes ; then
Packit 030a23
   AC_DEFINE(USE_LOONGSON_MMI, 1, [use Loongson Multimedia Instructions])
Packit 030a23
else
Packit 030a23
   LS_CFLAGS=
Packit 030a23
fi
Packit 030a23
Packit 030a23
AC_MSG_RESULT($have_loongson_mmi)
Packit 030a23
if test $enable_loongson_mmi = yes && test $have_loongson_mmi = no ; then
Packit 030a23
   AC_MSG_ERROR([Loongson MMI not detected])
Packit 030a23
fi
Packit 030a23
Packit 030a23
AM_CONDITIONAL(USE_LOONGSON_MMI, test $have_loongson_mmi = yes)
Packit 030a23
Packit 030a23
dnl ===========================================================================
Packit 030a23
dnl Check for MMX
Packit 030a23
Packit 030a23
if test "x$MMX_CFLAGS" = "x" ; then
Packit 030a23
   if test "x$SUNCC" = "xyes"; then
Packit 030a23
      # Sun Studio doesn't have an -xarch=mmx flag, so we have to use sse
Packit 030a23
      # but if we're building 64-bit, mmx & sse support is on by default and
Packit 030a23
      # -xarch=sse throws an error instead
Packit 030a23
      if test "$AMD64_ABI" = "no" ; then
Packit 030a23
         MMX_CFLAGS="-xarch=sse"
Packit 030a23
      fi
Packit 030a23
   else
Packit 030a23
      MMX_CFLAGS="-mmmx -Winline"
Packit 030a23
   fi
Packit 030a23
fi
Packit 030a23
Packit 030a23
have_mmx_intrinsics=no
Packit 030a23
AC_MSG_CHECKING(whether to use MMX intrinsics)
Packit 030a23
xserver_save_CFLAGS=$CFLAGS
Packit 030a23
CFLAGS="$MMX_CFLAGS $CFLAGS"
Packit 030a23
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
Packit 030a23
#if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
Packit 030a23
#error "Need GCC >= 3.4 for MMX intrinsics"
Packit 030a23
#endif
Packit 030a23
#include <mmintrin.h>
Packit 030a23
#include <stdint.h>
Packit 030a23
Packit 030a23
/* Check support for block expressions */
Packit 030a23
#define _mm_shuffle_pi16(A, N)						\
Packit 030a23
    ({									\
Packit 030a23
	__m64 ret;							\
Packit 030a23
									\
Packit 030a23
	/* Some versions of clang will choke on K */ 			\
Packit 030a23
	asm ("pshufw %2, %1, %0\n\t"					\
Packit 030a23
	     : "=y" (ret)						\
Packit 030a23
	     : "y" (A), "K" ((const int8_t)N)				\
Packit 030a23
	);								\
Packit 030a23
									\
Packit 030a23
	ret;								\
Packit 030a23
    })
Packit 030a23
Packit 030a23
int main () {
Packit 030a23
    __m64 v = _mm_cvtsi32_si64 (1);
Packit 030a23
    __m64 w;
Packit 030a23
Packit 030a23
    w = _mm_shuffle_pi16(v, 5);
Packit 030a23
Packit 030a23
    /* Some versions of clang will choke on this */
Packit 030a23
    asm ("pmulhuw %1, %0\n\t"
Packit 030a23
	: "+y" (w)
Packit 030a23
	: "y" (v)
Packit 030a23
    );
Packit 030a23
Packit 030a23
    return _mm_cvtsi64_si32 (v);
Packit 030a23
}]])], have_mmx_intrinsics=yes)
Packit 030a23
CFLAGS=$xserver_save_CFLAGS
Packit 030a23
Packit 030a23
AC_ARG_ENABLE(mmx,
Packit 030a23
   [AC_HELP_STRING([--disable-mmx],
Packit 030a23
                   [disable x86 MMX fast paths])],
Packit 030a23
   [enable_mmx=$enableval], [enable_mmx=auto])
Packit 030a23
Packit 030a23
if test $enable_mmx = no ; then
Packit 030a23
   have_mmx_intrinsics=disabled
Packit 030a23
fi
Packit 030a23
Packit 030a23
if test $have_mmx_intrinsics = yes ; then
Packit 030a23
   AC_DEFINE(USE_X86_MMX, 1, [use x86 MMX compiler intrinsics])
Packit 030a23
else
Packit 030a23
   MMX_CFLAGS=
Packit 030a23
fi
Packit 030a23
Packit 030a23
AC_MSG_RESULT($have_mmx_intrinsics)
Packit 030a23
if test $enable_mmx = yes && test $have_mmx_intrinsics = no ; then
Packit 030a23
   AC_MSG_ERROR([x86 MMX intrinsics not detected])
Packit 030a23
fi
Packit 030a23
Packit 030a23
AM_CONDITIONAL(USE_X86_MMX, test $have_mmx_intrinsics = yes)
Packit 030a23
Packit 030a23
dnl ===========================================================================
Packit 030a23
dnl Check for SSE2
Packit 030a23
Packit 030a23
if test "x$SSE2_CFLAGS" = "x" ; then
Packit 030a23
   if test "x$SUNCC" = "xyes"; then
Packit 030a23
      # SSE2 is enabled by default in the Sun Studio 64-bit environment
Packit 030a23
      if test "$AMD64_ABI" = "no" ; then
Packit 030a23
         SSE2_CFLAGS="-xarch=sse2"
Packit 030a23
      fi
Packit 030a23
   else
Packit 030a23
      SSE2_CFLAGS="-msse2 -Winline"
Packit 030a23
   fi
Packit 030a23
fi
Packit 030a23
Packit 030a23
have_sse2_intrinsics=no
Packit 030a23
AC_MSG_CHECKING(whether to use SSE2 intrinsics)
Packit 030a23
xserver_save_CFLAGS=$CFLAGS
Packit 030a23
CFLAGS="$SSE2_CFLAGS $CFLAGS"
Packit 030a23
Packit 030a23
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
Packit 030a23
#if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 2))
Packit 030a23
#   if !defined(__amd64__) && !defined(__x86_64__)
Packit 030a23
#      error "Need GCC >= 4.2 for SSE2 intrinsics on x86"
Packit 030a23
#   endif
Packit 030a23
#endif
Packit 030a23
#include <mmintrin.h>
Packit 030a23
#include <xmmintrin.h>
Packit 030a23
#include <emmintrin.h>
Packit 030a23
int param;
Packit 030a23
int main () {
Packit 030a23
    __m128i a = _mm_set1_epi32 (param), b = _mm_set1_epi32 (param + 1), c;
Packit 030a23
	c = _mm_xor_si128 (a, b);
Packit 030a23
    return _mm_cvtsi128_si32(c);
Packit 030a23
}]])], have_sse2_intrinsics=yes)
Packit 030a23
CFLAGS=$xserver_save_CFLAGS
Packit 030a23
Packit 030a23
AC_ARG_ENABLE(sse2,
Packit 030a23
   [AC_HELP_STRING([--disable-sse2],
Packit 030a23
                   [disable SSE2 fast paths])],
Packit 030a23
   [enable_sse2=$enableval], [enable_sse2=auto])
Packit 030a23
Packit 030a23
if test $enable_sse2 = no ; then
Packit 030a23
   have_sse2_intrinsics=disabled
Packit 030a23
fi
Packit 030a23
Packit 030a23
if test $have_sse2_intrinsics = yes ; then
Packit 030a23
   AC_DEFINE(USE_SSE2, 1, [use SSE2 compiler intrinsics])
Packit 030a23
fi
Packit 030a23
Packit 030a23
AC_MSG_RESULT($have_sse2_intrinsics)
Packit 030a23
if test $enable_sse2 = yes && test $have_sse2_intrinsics = no ; then
Packit 030a23
   AC_MSG_ERROR([SSE2 intrinsics not detected])
Packit 030a23
fi
Packit 030a23
Packit 030a23
AM_CONDITIONAL(USE_SSE2, test $have_sse2_intrinsics = yes)
Packit 030a23
Packit 030a23
dnl ===========================================================================
Packit 030a23
dnl Check for SSSE3
Packit 030a23
Packit 030a23
if test "x$SSSE3_CFLAGS" = "x" ; then
Packit 030a23
    SSSE3_CFLAGS="-mssse3 -Winline"
Packit 030a23
fi
Packit 030a23
Packit 030a23
have_ssse3_intrinsics=no
Packit 030a23
AC_MSG_CHECKING(whether to use SSSE3 intrinsics)
Packit 030a23
xserver_save_CFLAGS=$CFLAGS
Packit 030a23
CFLAGS="$SSSE3_CFLAGS $CFLAGS"
Packit 030a23
Packit 030a23
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
Packit 030a23
#include <mmintrin.h>
Packit 030a23
#include <xmmintrin.h>
Packit 030a23
#include <emmintrin.h>
Packit 030a23
#include <tmmintrin.h>
Packit 030a23
int param;
Packit 030a23
int main () {
Packit 030a23
    __m128i a = _mm_set1_epi32 (param), b = _mm_set1_epi32 (param + 1), c;
Packit 030a23
    c = _mm_maddubs_epi16 (a, b);
Packit 030a23
    return _mm_cvtsi128_si32(c);
Packit 030a23
}]])], have_ssse3_intrinsics=yes)
Packit 030a23
CFLAGS=$xserver_save_CFLAGS
Packit 030a23
Packit 030a23
AC_ARG_ENABLE(ssse3,
Packit 030a23
   [AC_HELP_STRING([--disable-ssse3],
Packit 030a23
                   [disable SSSE3 fast paths])],
Packit 030a23
   [enable_ssse3=$enableval], [enable_ssse3=auto])
Packit 030a23
Packit 030a23
if test $enable_ssse3 = no ; then
Packit 030a23
   have_ssse3_intrinsics=disabled
Packit 030a23
fi
Packit 030a23
Packit 030a23
if test $have_ssse3_intrinsics = yes ; then
Packit 030a23
   AC_DEFINE(USE_SSSE3, 1, [use SSSE3 compiler intrinsics])
Packit 030a23
fi
Packit 030a23
Packit 030a23
AC_MSG_RESULT($have_ssse3_intrinsics)
Packit 030a23
if test $enable_ssse3 = yes && test $have_ssse3_intrinsics = no ; then
Packit 030a23
   AC_MSG_ERROR([SSSE3 intrinsics not detected])
Packit 030a23
fi
Packit 030a23
Packit 030a23
AM_CONDITIONAL(USE_SSSE3, test $have_ssse3_intrinsics = yes)
Packit 030a23
Packit 030a23
dnl ===========================================================================
Packit 030a23
dnl Other special flags needed when building code using MMX or SSE instructions
Packit 030a23
case $host_os in
Packit 030a23
   solaris*)
Packit 030a23
      # When building 32-bit binaries, apply a mapfile to ensure that the
Packit 030a23
      # binaries aren't flagged as only able to run on MMX+SSE capable CPUs
Packit 030a23
      # since they check at runtime before using those instructions.
Packit 030a23
      # Not all linkers grok the mapfile format so we check for that first.
Packit 030a23
      if test "$AMD64_ABI" = "no" ; then
Packit 030a23
	 use_hwcap_mapfile=no
Packit 030a23
	 AC_MSG_CHECKING(whether to use a hardware capability map file)
Packit 030a23
	 hwcap_save_LDFLAGS="$LDFLAGS"
Packit 030a23
	 HWCAP_LDFLAGS='-Wl,-M,$(srcdir)/solaris-hwcap.mapfile'
Packit 030a23
	 LDFLAGS="$LDFLAGS -Wl,-M,pixman/solaris-hwcap.mapfile"
Packit 030a23
	 AC_LINK_IFELSE([AC_LANG_SOURCE([[int main() { return 0; }]])],
Packit 030a23
			use_hwcap_mapfile=yes,
Packit 030a23
			HWCAP_LDFLAGS="")
Packit 030a23
	 LDFLAGS="$hwcap_save_LDFLAGS"
Packit 030a23
	 AC_MSG_RESULT($use_hwcap_mapfile)
Packit 030a23
      fi
Packit 030a23
      if test "x$MMX_LDFLAGS" = "x" ; then
Packit 030a23
         MMX_LDFLAGS="$HWCAP_LDFLAGS"
Packit 030a23
      fi
Packit 030a23
      if test "x$SSE2_LDFLAGS" = "x" ; then
Packit 030a23
	 SSE2_LDFLAGS="$HWCAP_LDFLAGS"
Packit 030a23
      fi
Packit 030a23
      ;;
Packit 030a23
esac
Packit 030a23
Packit 030a23
AC_SUBST(LS_CFLAGS)
Packit 030a23
AC_SUBST(IWMMXT_CFLAGS)
Packit 030a23
AC_SUBST(MMX_CFLAGS)
Packit 030a23
AC_SUBST(MMX_LDFLAGS)
Packit 030a23
AC_SUBST(SSE2_CFLAGS)
Packit 030a23
AC_SUBST(SSE2_LDFLAGS)
Packit 030a23
AC_SUBST(SSSE3_CFLAGS)
Packit 030a23
Packit 030a23
dnl ===========================================================================
Packit 030a23
dnl Check for VMX/Altivec
Packit 030a23
if test -n "`$CC -v 2>&1 | grep version | grep Apple`"; then
Packit 030a23
    VMX_CFLAGS="-faltivec"
Packit 030a23
else
Packit 030a23
    VMX_CFLAGS="-maltivec -mabi=altivec"
Packit 030a23
fi
Packit 030a23
Packit 030a23
have_vmx_intrinsics=no
Packit 030a23
AC_MSG_CHECKING(whether to use VMX/Altivec intrinsics)
Packit 030a23
xserver_save_CFLAGS=$CFLAGS
Packit 030a23
CFLAGS="$VMX_CFLAGS $CFLAGS"
Packit 030a23
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
Packit 030a23
#if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
Packit 030a23
#error "Need GCC >= 3.4 for sane altivec support"
Packit 030a23
#endif
Packit 030a23
#include <altivec.h>
Packit 030a23
int main () {
Packit 030a23
    vector unsigned int v = vec_splat_u32 (1);
Packit 030a23
    v = vec_sub (v, v);
Packit 030a23
    return 0;
Packit 030a23
}]])], have_vmx_intrinsics=yes)
Packit 030a23
CFLAGS=$xserver_save_CFLAGS
Packit 030a23
Packit 030a23
AC_ARG_ENABLE(vmx,
Packit 030a23
   [AC_HELP_STRING([--disable-vmx],
Packit 030a23
                   [disable VMX fast paths])],
Packit 030a23
   [enable_vmx=$enableval], [enable_vmx=auto])
Packit 030a23
Packit 030a23
if test $enable_vmx = no ; then
Packit 030a23
   have_vmx_intrinsics=disabled
Packit 030a23
fi
Packit 030a23
Packit 030a23
if test $have_vmx_intrinsics = yes ; then
Packit 030a23
   AC_DEFINE(USE_VMX, 1, [use VMX compiler intrinsics])
Packit 030a23
else
Packit 030a23
   VMX_CFLAGS=
Packit 030a23
fi
Packit 030a23
Packit 030a23
AC_MSG_RESULT($have_vmx_intrinsics)
Packit 030a23
if test $enable_vmx = yes && test $have_vmx_intrinsics = no ; then
Packit 030a23
   AC_MSG_ERROR([VMX intrinsics not detected])
Packit 030a23
fi
Packit 030a23
Packit 030a23
AC_SUBST(VMX_CFLAGS)
Packit 030a23
Packit 030a23
AM_CONDITIONAL(USE_VMX, test $have_vmx_intrinsics = yes)
Packit 030a23
Packit 030a23
dnl ==========================================================================
Packit 030a23
dnl Check if assembler is gas compatible and supports ARM SIMD instructions
Packit 030a23
have_arm_simd=no
Packit 030a23
AC_MSG_CHECKING(whether to use ARM SIMD assembler)
Packit 030a23
xserver_save_CFLAGS=$CFLAGS
Packit 030a23
CFLAGS="-x assembler-with-cpp $CFLAGS"
Packit 030a23
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
Packit 030a23
.text
Packit 030a23
.arch armv6
Packit 030a23
.object_arch armv4
Packit 030a23
.arm
Packit 030a23
.altmacro
Packit 030a23
#ifndef __ARM_EABI__
Packit 030a23
#error EABI is required (to be sure that calling conventions are compatible)
Packit 030a23
#endif
Packit 030a23
pld [r0]
Packit 030a23
uqadd8 r0, r0, r0]])], have_arm_simd=yes)
Packit 030a23
CFLAGS=$xserver_save_CFLAGS
Packit 030a23
Packit 030a23
AC_ARG_ENABLE(arm-simd,
Packit 030a23
   [AC_HELP_STRING([--disable-arm-simd],
Packit 030a23
                   [disable ARM SIMD fast paths])],
Packit 030a23
   [enable_arm_simd=$enableval], [enable_arm_simd=auto])
Packit 030a23
Packit 030a23
if test $enable_arm_simd = no ; then
Packit 030a23
   have_arm_simd=disabled
Packit 030a23
fi
Packit 030a23
Packit 030a23
if test $have_arm_simd = yes ; then
Packit 030a23
   AC_DEFINE(USE_ARM_SIMD, 1, [use ARM SIMD assembly optimizations])
Packit 030a23
fi
Packit 030a23
Packit 030a23
AM_CONDITIONAL(USE_ARM_SIMD, test $have_arm_simd = yes)
Packit 030a23
Packit 030a23
AC_MSG_RESULT($have_arm_simd)
Packit 030a23
if test $enable_arm_simd = yes && test $have_arm_simd = no ; then
Packit 030a23
   AC_MSG_ERROR([ARM SIMD intrinsics not detected])
Packit 030a23
fi
Packit 030a23
Packit 030a23
dnl ==========================================================================
Packit 030a23
dnl Check if assembler is gas compatible and supports NEON instructions
Packit 030a23
have_arm_neon=no
Packit 030a23
AC_MSG_CHECKING(whether to use ARM NEON assembler)
Packit 030a23
xserver_save_CFLAGS=$CFLAGS
Packit 030a23
CFLAGS="-x assembler-with-cpp $CFLAGS"
Packit 030a23
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
Packit 030a23
.text
Packit 030a23
.fpu neon
Packit 030a23
.arch armv7a
Packit 030a23
.object_arch armv4
Packit 030a23
.eabi_attribute 10, 0
Packit 030a23
.arm
Packit 030a23
.altmacro
Packit 030a23
#ifndef __ARM_EABI__
Packit 030a23
#error EABI is required (to be sure that calling conventions are compatible)
Packit 030a23
#endif
Packit 030a23
pld [r0]
Packit 030a23
vmovn.u16 d0, q0]])], have_arm_neon=yes)
Packit 030a23
CFLAGS=$xserver_save_CFLAGS
Packit 030a23
Packit 030a23
AC_ARG_ENABLE(arm-neon,
Packit 030a23
   [AC_HELP_STRING([--disable-arm-neon],
Packit 030a23
                   [disable ARM NEON fast paths])],
Packit 030a23
   [enable_arm_neon=$enableval], [enable_arm_neon=auto])
Packit 030a23
Packit 030a23
if test $enable_arm_neon = no ; then
Packit 030a23
   have_arm_neon=disabled
Packit 030a23
fi
Packit 030a23
Packit 030a23
if test $have_arm_neon = yes ; then
Packit 030a23
   AC_DEFINE(USE_ARM_NEON, 1, [use ARM NEON assembly optimizations])
Packit 030a23
fi
Packit 030a23
Packit 030a23
AM_CONDITIONAL(USE_ARM_NEON, test $have_arm_neon = yes)
Packit 030a23
Packit 030a23
AC_MSG_RESULT($have_arm_neon)
Packit 030a23
if test $enable_arm_neon = yes && test $have_arm_neon = no ; then
Packit 030a23
   AC_MSG_ERROR([ARM NEON intrinsics not detected])
Packit 030a23
fi
Packit 030a23
Packit 030a23
dnl ===========================================================================
Packit 030a23
dnl Check for IWMMXT
Packit 030a23
Packit 030a23
AC_ARG_ENABLE(arm-iwmmxt,
Packit 030a23
   [AC_HELP_STRING([--disable-arm-iwmmxt],
Packit 030a23
                   [disable ARM IWMMXT fast paths])],
Packit 030a23
   [enable_iwmmxt=$enableval], [enable_iwmmxt=auto])
Packit 030a23
Packit 030a23
AC_ARG_ENABLE(arm-iwmmxt2,
Packit 030a23
   [AC_HELP_STRING([--disable-arm-iwmmxt2],
Packit 030a23
                   [build ARM IWMMXT fast paths with -march=iwmmxt instead of -march=iwmmxt2])],
Packit 030a23
   [enable_iwmmxt2=$enableval], [enable_iwmmxt2=auto])
Packit 030a23
Packit 030a23
if test "x$IWMMXT_CFLAGS" = "x" ; then
Packit 030a23
   IWMMXT_CFLAGS="-flax-vector-conversions -Winline -march=iwmmxt"
Packit 030a23
   if test $enable_iwmmxt2 != no ; then
Packit 030a23
      IWMMXT_CFLAGS="${IWMMXT_CFLAGS}2"
Packit 030a23
   fi
Packit 030a23
fi
Packit 030a23
Packit 030a23
have_iwmmxt_intrinsics=no
Packit 030a23
AC_MSG_CHECKING(whether to use ARM IWMMXT intrinsics)
Packit 030a23
xserver_save_CFLAGS=$CFLAGS
Packit 030a23
CFLAGS="$CFLAGS $IWMMXT_CFLAGS"
Packit 030a23
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
Packit 030a23
#ifndef __arm__
Packit 030a23
#error "IWMMXT is only available on ARM"
Packit 030a23
#endif
Packit 030a23
#ifndef __IWMMXT__
Packit 030a23
#error "IWMMXT not enabled (with -march=iwmmxt)"
Packit 030a23
#endif
Packit 030a23
#if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8))
Packit 030a23
#error "Need GCC >= 4.8 for IWMMXT intrinsics"
Packit 030a23
#endif
Packit 030a23
#include <mmintrin.h>
Packit 030a23
int main () {
Packit 030a23
	union {
Packit 030a23
		__m64 v;
Packit 030a23
		char c[8];
Packit 030a23
	} a = { .c = {1, 2, 3, 4, 5, 6, 7, 8} };
Packit 030a23
	int b = 4;
Packit 030a23
	__m64 c = _mm_srli_si64 (a.v, b);
Packit 030a23
}]])], have_iwmmxt_intrinsics=yes)
Packit 030a23
CFLAGS=$xserver_save_CFLAGS
Packit 030a23
Packit 030a23
if test $enable_iwmmxt = no ; then
Packit 030a23
   have_iwmmxt_intrinsics=disabled
Packit 030a23
fi
Packit 030a23
Packit 030a23
if test $have_iwmmxt_intrinsics = yes ; then
Packit 030a23
   AC_DEFINE(USE_ARM_IWMMXT, 1, [use ARM IWMMXT compiler intrinsics])
Packit 030a23
else
Packit 030a23
   IWMMXT_CFLAGS=
Packit 030a23
fi
Packit 030a23
Packit 030a23
AC_MSG_RESULT($have_iwmmxt_intrinsics)
Packit 030a23
if test $enable_iwmmxt = yes && test $have_iwmmxt_intrinsics = no ; then
Packit 030a23
   AC_MSG_ERROR([IWMMXT intrinsics not detected])
Packit 030a23
fi
Packit 030a23
Packit 030a23
AM_CONDITIONAL(USE_ARM_IWMMXT, test $have_iwmmxt_intrinsics = yes)
Packit 030a23
Packit 030a23
dnl ==========================================================================
Packit 030a23
dnl Check if assembler is gas compatible and supports MIPS DSPr2 instructions
Packit 030a23
Packit 030a23
have_mips_dspr2=no
Packit 030a23
AC_MSG_CHECKING(whether to use MIPS DSPr2 assembler)
Packit 030a23
xserver_save_CFLAGS=$CFLAGS
Packit 030a23
CFLAGS="-mdspr2 $CFLAGS"
Packit 030a23
Packit 030a23
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
Packit 030a23
#if !(defined(__mips__) &&  __mips_isa_rev >= 2)
Packit 030a23
#error MIPS DSPr2 is currently only available on MIPS32r2 platforms.
Packit 030a23
#endif
Packit 030a23
int
Packit 030a23
main ()
Packit 030a23
{
Packit 030a23
    int c = 0, a = 0, b = 0;
Packit 030a23
    __asm__ __volatile__ (
Packit 030a23
        "precr.qb.ph %[c], %[a], %[b]          \n\t"
Packit 030a23
        : [c] "=r" (c)
Packit 030a23
        : [a] "r" (a), [b] "r" (b)
Packit 030a23
    );
Packit 030a23
    return c;
Packit 030a23
}]])], have_mips_dspr2=yes)
Packit 030a23
CFLAGS=$xserver_save_CFLAGS
Packit 030a23
Packit 030a23
AC_ARG_ENABLE(mips-dspr2,
Packit 030a23
   [AC_HELP_STRING([--disable-mips-dspr2],
Packit 030a23
                   [disable MIPS DSPr2 fast paths])],
Packit 030a23
   [enable_mips_dspr2=$enableval], [enable_mips_dspr2=auto])
Packit 030a23
Packit 030a23
if test $enable_mips_dspr2 = no ; then
Packit 030a23
   have_mips_dspr2=disabled
Packit 030a23
fi
Packit 030a23
Packit 030a23
if test $have_mips_dspr2 = yes ; then
Packit 030a23
   AC_DEFINE(USE_MIPS_DSPR2, 1, [use MIPS DSPr2 assembly optimizations])
Packit 030a23
fi
Packit 030a23
Packit 030a23
AM_CONDITIONAL(USE_MIPS_DSPR2, test $have_mips_dspr2 = yes)
Packit 030a23
Packit 030a23
AC_MSG_RESULT($have_mips_dspr2)
Packit 030a23
if test $enable_mips_dspr2 = yes && test $have_mips_dspr2 = no ; then
Packit 030a23
   AC_MSG_ERROR([MIPS DSPr2 instructions not detected])
Packit 030a23
fi
Packit 030a23
Packit 030a23
dnl =========================================================================================
Packit 030a23
dnl Check for GNU-style inline assembly support
Packit 030a23
Packit 030a23
have_gcc_inline_asm=no
Packit 030a23
AC_MSG_CHECKING(whether to use GNU-style inline assembler)
Packit 030a23
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
Packit 030a23
int main () {
Packit 030a23
    /* Most modern architectures have a NOP instruction, so this is a fairly generic test. */
Packit 030a23
	asm volatile ( "\tnop\n" : : : "cc", "memory" );
Packit 030a23
    return 0;
Packit 030a23
}]])], have_gcc_inline_asm=yes)
Packit 030a23
Packit 030a23
AC_ARG_ENABLE(gcc-inline-asm,
Packit 030a23
   [AC_HELP_STRING([--disable-gcc-inline-asm],
Packit 030a23
                   [disable GNU-style inline assembler])],
Packit 030a23
   [enable_gcc_inline_asm=$enableval], [enable_gcc_inline_asm=auto])
Packit 030a23
Packit 030a23
if test $enable_gcc_inline_asm = no ; then
Packit 030a23
   have_gcc_inline_asm=disabled
Packit 030a23
fi
Packit 030a23
Packit 030a23
if test $have_gcc_inline_asm = yes ; then
Packit 030a23
   AC_DEFINE(USE_GCC_INLINE_ASM, 1, [use GNU-style inline assembler])
Packit 030a23
fi
Packit 030a23
Packit 030a23
AC_MSG_RESULT($have_gcc_inline_asm)
Packit 030a23
if test $enable_gcc_inline_asm = yes && test $have_gcc_inline_asm = no ; then
Packit 030a23
   AC_MSG_ERROR([GNU-style inline assembler not detected])
Packit 030a23
fi
Packit 030a23
Packit 030a23
AM_CONDITIONAL(USE_GCC_INLINE_ASM, test $have_gcc_inline_asm = yes)
Packit 030a23
Packit 030a23
dnl ==============================================
Packit 030a23
dnl Static test programs
Packit 030a23
Packit 030a23
AC_ARG_ENABLE(static-testprogs,
Packit 030a23
   [AC_HELP_STRING([--enable-static-testprogs],
Packit 030a23
		   [build test programs as static binaries [default=no]])],
Packit 030a23
   [enable_static_testprogs=$enableval], [enable_static_testprogs=no])
Packit 030a23
Packit 030a23
TESTPROGS_EXTRA_LDFLAGS=
Packit 030a23
if test "x$enable_static_testprogs" = "xyes" ; then
Packit 030a23
   TESTPROGS_EXTRA_LDFLAGS="-all-static"
Packit 030a23
fi
Packit 030a23
AC_SUBST(TESTPROGS_EXTRA_LDFLAGS)
Packit 030a23
Packit 030a23
dnl ==============================================
Packit 030a23
dnl Timers
Packit 030a23
Packit 030a23
AC_ARG_ENABLE(timers,
Packit 030a23
   [AC_HELP_STRING([--enable-timers],
Packit 030a23
		   [enable TIMER_BEGIN and TIMER_END macros [default=no]])],
Packit 030a23
   [enable_timers=$enableval], [enable_timers=no])
Packit 030a23
Packit 030a23
if test $enable_timers = yes ; then 
Packit 030a23
   AC_DEFINE(PIXMAN_TIMERS, 1, [enable TIMER_BEGIN/TIMER_END macros])
Packit 030a23
fi
Packit 030a23
AC_SUBST(PIXMAN_TIMERS)
Packit 030a23
Packit 030a23
dnl ===================================
Packit 030a23
dnl GTK+
Packit 030a23
Packit 030a23
AC_ARG_ENABLE(gtk,
Packit 030a23
   [AC_HELP_STRING([--enable-gtk],
Packit 030a23
                   [enable tests using GTK+ [default=auto]])],
Packit 030a23
   [enable_gtk=$enableval], [enable_gtk=auto])
Packit 030a23
Packit 030a23
PKG_PROG_PKG_CONFIG
Packit 030a23
Packit 030a23
if test $enable_gtk = yes ; then
Packit 030a23
   AC_CHECK_LIB([pixman-1], [pixman_version_string])
Packit 030a23
   PKG_CHECK_MODULES(GTK, [gtk+-2.0 >= 2.16 pixman-1])
Packit 030a23
fi
Packit 030a23
Packit 030a23
if test $enable_gtk = auto ; then
Packit 030a23
   AC_CHECK_LIB([pixman-1], [pixman_version_string], [enable_gtk=auto], [enable_gtk=no])
Packit 030a23
fi
Packit 030a23
Packit 030a23
if test $enable_gtk = auto ; then
Packit 030a23
   PKG_CHECK_MODULES(GTK, [gtk+-2.0 >= 2.16 pixman-1], [enable_gtk=yes], [enable_gtk=no])
Packit 030a23
fi
Packit 030a23
Packit 030a23
AM_CONDITIONAL(HAVE_GTK, [test "x$enable_gtk" = xyes])
Packit 030a23
Packit 030a23
AC_SUBST(GTK_CFLAGS)
Packit 030a23
AC_SUBST(GTK_LIBS)
Packit 030a23
Packit 030a23
dnl =====================================
Packit 030a23
dnl posix_memalign, sigaction, alarm, gettimeofday
Packit 030a23
Packit 030a23
AC_CHECK_FUNC(posix_memalign, have_posix_memalign=yes, have_posix_memalign=no)
Packit 030a23
if test x$have_posix_memalign = xyes; then
Packit 030a23
   AC_DEFINE(HAVE_POSIX_MEMALIGN, 1, [Whether we have posix_memalign()])
Packit 030a23
fi
Packit 030a23
Packit 030a23
AC_CHECK_FUNC(sigaction, have_sigaction=yes, have_sigaction=no)
Packit 030a23
if test x$have_sigaction = xyes; then
Packit 030a23
   AC_DEFINE(HAVE_SIGACTION, 1, [Whether we have sigaction()])
Packit 030a23
fi
Packit 030a23
Packit 030a23
AC_CHECK_FUNC(alarm, have_alarm=yes, have_alarm=no)
Packit 030a23
if test x$have_alarm = xyes; then
Packit 030a23
   AC_DEFINE(HAVE_ALARM, 1, [Whether we have alarm()])
Packit 030a23
fi
Packit 030a23
Packit 030a23
AC_CHECK_HEADER([sys/mman.h],
Packit 030a23
   [AC_DEFINE(HAVE_SYS_MMAN_H, [1], [Define to 1 if we have <sys/mman.h>])])
Packit 030a23
Packit 030a23
AC_CHECK_FUNC(mmap, have_mmap=yes, have_mmap=no)
Packit 030a23
if test x$have_mmap = xyes; then
Packit 030a23
   AC_DEFINE(HAVE_MMAP, 1, [Whether we have mmap()])
Packit 030a23
fi
Packit 030a23
Packit 030a23
AC_CHECK_FUNC(mprotect, have_mprotect=yes, have_mprotect=no)
Packit 030a23
if test x$have_mprotect = xyes; then
Packit 030a23
   AC_DEFINE(HAVE_MPROTECT, 1, [Whether we have mprotect()])
Packit 030a23
fi
Packit 030a23
Packit 030a23
AC_CHECK_FUNC(getpagesize, have_getpagesize=yes, have_getpagesize=no)
Packit 030a23
if test x$have_getpagesize = xyes; then
Packit 030a23
   AC_DEFINE(HAVE_GETPAGESIZE, 1, [Whether we have getpagesize()])
Packit 030a23
fi
Packit 030a23
Packit 030a23
AC_CHECK_HEADER([fenv.h],
Packit 030a23
   [AC_DEFINE(HAVE_FENV_H, [1], [Define to 1 if we have <fenv.h>])])
Packit 030a23
Packit 030a23
AC_CHECK_LIB(m, feenableexcept, have_feenableexcept=yes, have_feenableexcept=no)
Packit 030a23
if test x$have_feenableexcept = xyes; then
Packit 030a23
   AC_DEFINE(HAVE_FEENABLEEXCEPT, 1, [Whether we have feenableexcept()])
Packit 030a23
fi
Packit 030a23
Packit 030a23
AC_CHECK_DECL([FE_DIVBYZERO],
Packit 030a23
	[AC_DEFINE(HAVE_FEDIVBYZERO, 1, [Whether we have FE_DIVBYZERO])],
Packit 030a23
	[],
Packit 030a23
	[[#include <fenv.h>]])
Packit 030a23
Packit 030a23
AC_CHECK_FUNC(gettimeofday, have_gettimeofday=yes, have_gettimeofday=no)
Packit 030a23
AC_CHECK_HEADER(sys/time.h, have_sys_time_h=yes, have_sys_time_h=no)
Packit 030a23
if test x$have_gettimeofday = xyes && test x$have_sys_time_h = xyes; then
Packit 030a23
   AC_DEFINE(HAVE_GETTIMEOFDAY, 1, [Whether we have gettimeofday()])
Packit 030a23
fi
Packit 030a23
Packit 030a23
dnl =====================================
Packit 030a23
dnl Check for missing sqrtf() as, e.g., for Solaris 9
Packit 030a23
Packit 030a23
AC_SEARCH_LIBS([sqrtf], [m], [],
Packit 030a23
               [AC_DEFINE([sqrtf], [sqrt],
Packit 030a23
                          [Define to sqrt if you do not have the `sqrtf' function.])])
Packit 030a23
Packit 030a23
dnl =====================================
Packit 030a23
dnl Thread local storage
Packit 030a23
Packit 030a23
AC_MSG_CHECKING(for thread local storage (TLS) support)
Packit 030a23
AC_CACHE_VAL(ac_cv_tls, [
Packit 030a23
    ac_cv_tls=none
Packit 030a23
    keywords="__thread __declspec(thread)"
Packit 030a23
    for kw in $keywords ; do
Packit 030a23
        AC_TRY_COMPILE([
Packit 030a23
#if defined(__MINGW32__) && !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5))
Packit 030a23
#error This MinGW version has broken __thread support
Packit 030a23
#endif
Packit 030a23
#ifdef __OpenBSD__
Packit 030a23
#error OpenBSD has broken __thread support
Packit 030a23
#endif
Packit 030a23
Packit 030a23
int $kw test;], [], [ac_cv_tls=$kw; break])
Packit 030a23
    done
Packit 030a23
])
Packit 030a23
AC_MSG_RESULT($ac_cv_tls)
Packit 030a23
Packit 030a23
if test "$ac_cv_tls" != "none"; then
Packit 030a23
    AC_DEFINE_UNQUOTED([TLS], $ac_cv_tls, [The compiler supported TLS storage class])
Packit 030a23
fi
Packit 030a23
Packit 030a23
dnl
Packit 030a23
dnl posix tls
Packit 030a23
dnl
Packit 030a23
Packit 030a23
m4_define([pthread_test_program],AC_LANG_SOURCE([[dnl
Packit 030a23
#include <stdlib.h>
Packit 030a23
#include <pthread.h>
Packit 030a23
Packit 030a23
static pthread_once_t once_control = PTHREAD_ONCE_INIT;
Packit 030a23
static pthread_key_t key;
Packit 030a23
Packit 030a23
static void
Packit 030a23
make_key (void)
Packit 030a23
{
Packit 030a23
    pthread_key_create (&key, NULL);
Packit 030a23
}
Packit 030a23
Packit 030a23
int
Packit 030a23
main ()
Packit 030a23
{
Packit 030a23
    void *value = NULL;
Packit 030a23
Packit 030a23
    if (pthread_once (&once_control, make_key) != 0)
Packit 030a23
    {
Packit 030a23
	value = NULL;
Packit 030a23
    }
Packit 030a23
    else
Packit 030a23
    {
Packit 030a23
	value = pthread_getspecific (key);
Packit 030a23
	if (!value)
Packit 030a23
	{
Packit 030a23
	    value = malloc (100);
Packit 030a23
	    pthread_setspecific (key, value);
Packit 030a23
	}
Packit 030a23
    }
Packit 030a23
    return 0;
Packit 030a23
}
Packit 030a23
]]))
Packit 030a23
Packit 030a23
AC_DEFUN([PIXMAN_CHECK_PTHREAD],[dnl
Packit 030a23
    if test "z$support_for_pthreads" != "zyes"; then
Packit 030a23
	PIXMAN_LINK_WITH_ENV(
Packit 030a23
		[$1], [pthread_test_program],
Packit 030a23
		[PTHREAD_CFLAGS="$CFLAGS"
Packit 030a23
		 PTHREAD_LIBS="$LIBS"
Packit 030a23
		 PTHREAD_LDFLAGS="$LDFLAGS"
Packit 030a23
		 support_for_pthreads=yes])
Packit 030a23
    fi
Packit 030a23
])
Packit 030a23
Packit 030a23
support_for_pthreads=no
Packit 030a23
Packit 030a23
AC_MSG_CHECKING(for pthreads)
Packit 030a23
Packit 030a23
PIXMAN_CHECK_PTHREAD([CFLAGS="-pthread"; LDFLAGS="-pthread"])
Packit 030a23
PIXMAN_CHECK_PTHREAD([CFLAGS="-D_REENTRANT"; LIBS="-lpthread"])
Packit 030a23
PIXMAN_CHECK_PTHREAD([CFLAGS="-D_REENTRANT"; LDFLAGS="-lroot"])
Packit 030a23
    
Packit 030a23
if test $support_for_pthreads = yes; then
Packit 030a23
    AC_DEFINE([HAVE_PTHREADS], [], [Whether pthreads is supported])
Packit 030a23
    if test $ac_cv_tls = none ; then
Packit 030a23
        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
Packit 030a23
    fi
Packit 030a23
fi
Packit 030a23
Packit 030a23
AC_MSG_RESULT($support_for_pthreads)
Packit 030a23
Packit 030a23
AC_SUBST(TOOLCHAIN_SUPPORTS__THREAD)
Packit 030a23
AC_SUBST(HAVE_PTHREADS)
Packit 030a23
AC_SUBST(PTHREAD_LDFLAGS)
Packit 030a23
AC_SUBST(PTHREAD_LIBS)
Packit 030a23
AC_SUBST(PTHREAD_CFLAGS)
Packit 030a23
Packit 030a23
dnl =====================================
Packit 030a23
dnl __attribute__((constructor))
Packit 030a23
Packit 030a23
support_for_attribute_constructor=no
Packit 030a23
Packit 030a23
AC_MSG_CHECKING(for __attribute__((constructor)))
Packit 030a23
AC_LINK_IFELSE([AC_LANG_SOURCE([[
Packit 030a23
#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7))
Packit 030a23
/* attribute 'constructor' is supported since gcc 2.7, but some compilers
Packit 030a23
 * may only pretend to be gcc, so let's try to actually use it
Packit 030a23
 */
Packit 030a23
static int x = 1;
Packit 030a23
static void __attribute__((constructor)) constructor_function () { x = 0; }
Packit 030a23
int main (void) { return x; }
Packit 030a23
#else
Packit 030a23
#error not gcc or gcc version is older than 2.7
Packit 030a23
#endif
Packit 030a23
]])], support_for_attribute_constructor=yes)
Packit 030a23
Packit 030a23
if test x$support_for_attribute_constructor = xyes; then
Packit 030a23
   AC_DEFINE([TOOLCHAIN_SUPPORTS_ATTRIBUTE_CONSTRUCTOR],
Packit 030a23
             [],[Whether the tool chain supports __attribute__((constructor))])
Packit 030a23
fi
Packit 030a23
Packit 030a23
AC_MSG_RESULT($support_for_attribute_constructor)
Packit 030a23
AC_SUBST(TOOLCHAIN_SUPPORTS_ATTRIBUTE_CONSTRUCTOR)
Packit 030a23
Packit 030a23
dnl =====================================
Packit 030a23
dnl __float128
Packit 030a23
Packit 030a23
support_for_float128=no
Packit 030a23
Packit 030a23
AC_MSG_CHECKING(for __float128)
Packit 030a23
AC_LINK_IFELSE([AC_LANG_SOURCE([[
Packit 030a23
__float128 a = 1.0Q, b = 2.0Q; int main (void) { return a + b; }
Packit 030a23
]])], support_for_float128=yes)
Packit 030a23
Packit 030a23
if test x$support_for_float128 = xyes; then
Packit 030a23
   AC_DEFINE([HAVE_FLOAT128], [], [Whether the tool chain supports __float128])
Packit 030a23
fi
Packit 030a23
Packit 030a23
AC_MSG_RESULT($support_for_float128)
Packit 030a23
Packit 030a23
dnl =====================================
Packit 030a23
dnl __builtin_clz
Packit 030a23
Packit 030a23
support_for_builtin_clz=no
Packit 030a23
Packit 030a23
AC_MSG_CHECKING(for __builtin_clz)
Packit 030a23
AC_LINK_IFELSE([AC_LANG_SOURCE([[
Packit 030a23
unsigned int x = 11; int main (void) { return __builtin_clz(x); }
Packit 030a23
]])], support_for_builtin_clz=yes)
Packit 030a23
Packit 030a23
if test x$support_for_builtin_clz = xyes; then
Packit 030a23
   AC_DEFINE([HAVE_BUILTIN_CLZ], [], [Whether the compiler supports __builtin_clz])
Packit 030a23
fi
Packit 030a23
Packit 030a23
AC_MSG_RESULT($support_for_builtin_clz)
Packit 030a23
Packit 030a23
dnl =====================================
Packit 030a23
dnl GCC vector extensions
Packit 030a23
Packit 030a23
support_for_gcc_vector_extensions=no
Packit 030a23
Packit 030a23
AC_MSG_CHECKING(for GCC vector extensions)
Packit 030a23
AC_LINK_IFELSE([AC_LANG_SOURCE([[
Packit 030a23
unsigned int __attribute__ ((vector_size(16))) e, a, b;
Packit 030a23
int main (void) { e = a - ((b << 27) + (b >> (32 - 27))) + 1; return e[0]; }
Packit 030a23
]])], support_for_gcc_vector_extensions=yes)
Packit 030a23
Packit 030a23
if test x$support_for_gcc_vector_extensions = xyes; then
Packit 030a23
   AC_DEFINE([HAVE_GCC_VECTOR_EXTENSIONS], [],
Packit 030a23
             [Whether the compiler supports GCC vector extensions])
Packit 030a23
fi
Packit 030a23
Packit 030a23
AC_MSG_RESULT($support_for_gcc_vector_extensions)
Packit 030a23
Packit 030a23
dnl ==================
Packit 030a23
dnl libpng
Packit 030a23
Packit 030a23
AC_ARG_ENABLE(libpng, AS_HELP_STRING([--enable-libpng], [Build support for libpng (default: auto)]),
Packit 030a23
                      [have_libpng=$enableval], [have_libpng=auto])
Packit 030a23
Packit 030a23
case x$have_libpng in
Packit 030a23
	xyes) PKG_CHECK_MODULES(PNG, [libpng]) ;;
Packit 030a23
	xno) ;;
Packit 030a23
	*) PKG_CHECK_MODULES(PNG, [libpng], have_libpng=yes, have_libpng=no) ;;
Packit 030a23
esac
Packit 030a23
Packit 030a23
if test x$have_libpng = xyes; then
Packit 030a23
    AC_DEFINE([HAVE_LIBPNG], [1], [Whether we have libpng])
Packit 030a23
fi
Packit 030a23
Packit 030a23
AC_SUBST(HAVE_LIBPNG)
Packit 030a23
Packit 030a23
AC_OUTPUT([pixman-1.pc
Packit 030a23
           pixman-1-uninstalled.pc
Packit 030a23
           Makefile
Packit 030a23
	   pixman/Makefile
Packit 030a23
	   pixman/pixman-version.h
Packit 030a23
	   demos/Makefile
Packit 030a23
	   test/Makefile])
Packit 030a23
Packit 030a23
m4_if(m4_eval(pixman_minor % 2), [1], [
Packit 030a23
   echo
Packit 030a23
   echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
Packit 030a23
   echo
Packit 030a23
   echo "      Thanks for testing this development snapshot of pixman. Please"
Packit 030a23
   echo "      report any problems you find, either by sending email to "
Packit 030a23
   echo
Packit 030a23
   echo "          pixman@lists.freedesktop.org"
Packit 030a23
   echo
Packit 030a23
   echo "      or by filing a bug at "
Packit 030a23
   echo
Packit 030a23
   echo "          https://bugs.freedesktop.org/enter_bug.cgi?product=pixman "
Packit 030a23
   echo
Packit 030a23
   echo "      If you are looking for a stable release of pixman, please note "
Packit 030a23
   echo "      that stable releases have _even_ minor version numbers. Ie., "
Packit 030a23
   echo "      pixman-0.]m4_eval(pixman_minor & ~1)[.x are stable releases, whereas pixman-$PIXMAN_VERSION_MAJOR.$PIXMAN_VERSION_MINOR.$PIXMAN_VERSION_MICRO is a "
Packit 030a23
   echo "      development snapshot that may contain bugs and experimental "
Packit 030a23
   echo "      features. "
Packit 030a23
   echo 
Packit 030a23
   echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
Packit 030a23
   echo
Packit 030a23
])