1 dnl Copyright 2005 Red Hat, Inc.
3 dnl Permission to use, copy, modify, distribute, and sell this software and its
4 dnl documentation for any purpose is hereby granted without fee, provided that
5 dnl the above copyright notice appear in all copies and that both that
6 dnl copyright notice and this permission notice appear in supporting
7 dnl documentation, and that the name of Red Hat not be used in
8 dnl advertising or publicity pertaining to distribution of the software without
9 dnl specific, written prior permission. Red Hat makes no
10 dnl representations about the suitability of this software for any purpose. It
11 dnl is provided "as is" without express or implied warranty.
13 dnl RED HAT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
14 dnl INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
15 dnl EVENT SHALL RED HAT BE LIABLE FOR ANY SPECIAL, INDIRECT OR
16 dnl CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
17 dnl DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 dnl TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 dnl PERFORMANCE OF THIS SOFTWARE.
21 dnl Process this file with autoconf to create configure.
25 # Pixman versioning scheme
27 # - The version in git has an odd MICRO version number
29 # - Released versions, both development and stable, have an
30 # even MICRO version number
32 # - Released development versions have an odd MINOR number
34 # - Released stable versions have an even MINOR number
36 # - Versions that break ABI must have a new MAJOR number
38 # - If you break the ABI, then at least this must be done:
42 # - In the first development release where you break ABI, find
43 # all instances of "pixman-n" and change them to pixman-(n+1)
45 # This needs to be done at least in
50 # This ensures that binary incompatible versions can be installed
51 # in parallel. See http://www106.pair.com/rhp/parallel.html for
55 m4_define([pixman_major], 0)
56 m4_define([pixman_minor], 32)
57 m4_define([pixman_micro], 6)
59 m4_define([pixman_version],[pixman_major.pixman_minor.pixman_micro])
61 AC_INIT(pixman, pixman_version, [pixman@lists.freedesktop.org], pixman)
62 AM_INIT_AUTOMAKE([foreign dist-bzip2])
64 # Suppress verbose compile lines
65 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
67 AC_CONFIG_HEADERS(config.h)
71 test_CFLAGS=${CFLAGS+set} # We may override autoconf default CFLAGS.
76 AC_CHECK_FUNCS([getisax])
80 dnl PIXMAN_LINK_WITH_ENV(env-setup, program, true-action, false-action)
82 dnl Compiles and links the given program in the environment setup by env-setup
83 dnl and executes true-action on success and false-action on failure.
84 AC_DEFUN([PIXMAN_LINK_WITH_ENV],[dnl
86 save_LDFLAGS="$LDFLAGS"
92 CFLAGS="$save_CFLAGS $CFLAGS"
93 LDFLAGS="$save_LDFLAGS $LDFLAGS"
94 LIBS="$save_LIBS $LIBS"
96 [AC_LANG_SOURCE([$2])],
97 [pixman_cc_stderr=`test -f conftest.err && cat conftest.err`
99 [pixman_cc_stderr=`test -f conftest.err && cat conftest.err`
102 if test "x$pixman_cc_stderr" != "x"; then
106 if test "x$pixman_cc_flag" = "xyes"; then
107 ifelse([$3], , :, [$3])
109 ifelse([$4], , :, [$4])
111 CFLAGS="$save_CFLAGS"
112 LDFLAGS="$save_LDFLAGS"
116 dnl Find a -Werror for catching warnings.
118 for w in -Werror -errwarn; do
119 if test "z$WERROR" = "z"; then
120 AC_MSG_CHECKING([whether the compiler supports $w])
121 PIXMAN_LINK_WITH_ENV(
123 [int main(int c, char **v) { (void)c; (void)v; return 0; }],
124 [WERROR=$w; yesno=yes], [yesno=no])
125 AC_MSG_RESULT($yesno)
129 dnl PIXMAN_CHECK_CFLAG(flag, [program])
130 dnl Adds flag to CFLAGS if the given program links without warnings or errors.
131 AC_DEFUN([PIXMAN_CHECK_CFLAG], [dnl
132 AC_MSG_CHECKING([whether the compiler supports $1])
133 PIXMAN_LINK_WITH_ENV(
134 [CFLAGS="$WERROR $1"],
136 int main(int c, char **v) { (void)c; (void)v; return 0; }
140 if test "x$_yesno" = xyes; then
143 AC_MSG_RESULT($_yesno)
146 AC_CHECK_SIZEOF(long)
148 # Checks for Sun Studio compilers
149 AC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"])
150 AC_CHECK_DECL([__amd64], [AMD64_ABI="yes"], [AMD64_ABI="no"])
152 # Default CFLAGS to -O -g rather than just the -g from AC_PROG_CC
153 # if we're using Sun Studio and neither the user nor a config.site
155 if test $SUNCC = yes && \
156 test "x$test_CFLAGS" = "x" && \
157 test "$CFLAGS" = "-g"
163 # We ignore pixman_major in the version here because the major version should
164 # always be encoded in the actual library name. Ie., the soname is:
166 # pixman-$(pixman_major).0.minor.micro
168 m4_define([lt_current], [pixman_minor])
169 m4_define([lt_revision], [pixman_micro])
170 m4_define([lt_age], [pixman_minor])
172 LT_VERSION_INFO="lt_current:lt_revision:lt_age"
174 PIXMAN_VERSION_MAJOR=pixman_major()
175 AC_SUBST(PIXMAN_VERSION_MAJOR)
176 PIXMAN_VERSION_MINOR=pixman_minor()
177 AC_SUBST(PIXMAN_VERSION_MINOR)
178 PIXMAN_VERSION_MICRO=pixman_micro()
179 AC_SUBST(PIXMAN_VERSION_MICRO)
181 AC_SUBST(LT_VERSION_INFO)
183 # Check for dependencies
185 PIXMAN_CHECK_CFLAG([-Wall])
186 PIXMAN_CHECK_CFLAG([-Wdeclaration-after-statement])
187 PIXMAN_CHECK_CFLAG([-fno-strict-aliasing])
189 dnl =========================================================================
190 dnl OpenMP for the test suite?
193 # Check for OpenMP support only when autoconf support that (require autoconf >=2.62)
195 m4_ifdef([AC_OPENMP], [AC_OPENMP])
197 if test "x$enable_openmp" = "xyes" && test "x$ac_cv_prog_c_openmp" = "xunsupported" ; then
198 AC_MSG_WARN([OpenMP support requested but found unsupported])
201 dnl May not fail to link without -Wall -Werror added
202 dnl So try to link only when openmp is supported
203 dnl ac_cv_prog_c_openmp is not defined when --disable-openmp is used
204 if test "x$ac_cv_prog_c_openmp" != "xunsupported" && test "x$ac_cv_prog_c_openmp" != "x"; then
205 m4_define([openmp_test_program],[dnl
208 extern unsigned int lcg_seed;
209 #pragma omp threadprivate(lcg_seed)
210 unsigned int lcg_seed;
212 unsigned function(unsigned a, unsigned b)
215 return ((a + b) ^ a ) + lcg_seed;
218 int main(int argc, char **argv)
221 int n1 = 0, n2 = argc;
222 unsigned checksum = 0;
223 int verbose = argv != NULL;
224 unsigned (*test_function)(unsigned, unsigned);
225 test_function = function;
226 #pragma omp parallel for reduction(+:checksum) default(none) \
227 shared(n1, n2, test_function, verbose)
228 for (i = n1; i < n2; i++)
230 unsigned crc = test_function (i, 0);
232 printf ("%d: %08X\n", i, crc);
235 printf("%u\n", checksum);
240 PIXMAN_LINK_WITH_ENV(
241 [CFLAGS="$OPENMP_CFLAGS" LDFLAGS="$OPENMP_CFLAGS"],
242 [openmp_test_program],
245 if test "x$have_openmp" = "xyes" ; then
246 AC_DEFINE(USE_OPENMP, 1, [use OpenMP in the test suite])
249 AC_SUBST(OPENMP_CFLAGS)
251 dnl =========================================================================
252 dnl -fvisibility stuff
254 PIXMAN_CHECK_CFLAG([-fvisibility=hidden], [dnl
255 #if defined(__GNUC__) && (__GNUC__ >= 4)
257 #error Have -fvisibility but it is ignored and generates a warning
260 #error Need GCC 4.0 for visibility
264 PIXMAN_CHECK_CFLAG([-xldscope=hidden], [dnl
265 #if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
267 #error Need Sun Studio 8 for visibility
271 dnl ===========================================================================
272 dnl Check for Loongson Multimedia Instructions
274 if test "x$LS_CFLAGS" = "x" ; then
275 LS_CFLAGS="-march=loongson2f"
279 AC_MSG_CHECKING(whether to use Loongson MMI assembler)
281 xserver_save_CFLAGS=$CFLAGS
282 CFLAGS=" $LS_CFLAGS $CFLAGS -I$srcdir"
283 AC_LINK_IFELSE([AC_LANG_SOURCE([[
284 #ifndef __mips_loongson_vector_rev
285 #error "Loongson Multimedia Instructions are only available on Loongson"
287 #if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 4))
288 #error "Need GCC >= 4.4 for Loongson MMI compilation"
290 #include "pixman/loongson-mmintrin.h"
295 } a = { .c = {1, 2, 3, 4, 5, 6, 7, 8} };
297 __m64 c = _mm_srli_pi16 (a.v, b);
299 }]])], have_loongson_mmi=yes)
300 CFLAGS=$xserver_save_CFLAGS
302 AC_ARG_ENABLE(loongson-mmi,
303 [AC_HELP_STRING([--disable-loongson-mmi],
304 [disable Loongson MMI fast paths])],
305 [enable_loongson_mmi=$enableval], [enable_loongson_mmi=auto])
307 if test $enable_loongson_mmi = no ; then
308 have_loongson_mmi=disabled
311 if test $have_loongson_mmi = yes ; then
312 AC_DEFINE(USE_LOONGSON_MMI, 1, [use Loongson Multimedia Instructions])
317 AC_MSG_RESULT($have_loongson_mmi)
318 if test $enable_loongson_mmi = yes && test $have_loongson_mmi = no ; then
319 AC_MSG_ERROR([Loongson MMI not detected])
322 AM_CONDITIONAL(USE_LOONGSON_MMI, test $have_loongson_mmi = yes)
324 dnl ===========================================================================
327 if test "x$MMX_CFLAGS" = "x" ; then
328 if test "x$SUNCC" = "xyes"; then
329 # Sun Studio doesn't have an -xarch=mmx flag, so we have to use sse
330 # but if we're building 64-bit, mmx & sse support is on by default and
331 # -xarch=sse throws an error instead
332 if test "$AMD64_ABI" = "no" ; then
333 MMX_CFLAGS="-xarch=sse"
336 MMX_CFLAGS="-mmmx -Winline"
340 have_mmx_intrinsics=no
341 AC_MSG_CHECKING(whether to use MMX intrinsics)
342 xserver_save_CFLAGS=$CFLAGS
343 CFLAGS="$MMX_CFLAGS $CFLAGS"
344 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
345 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
346 #error "Need GCC >= 3.4 for MMX intrinsics"
348 #include <mmintrin.h>
350 __m64 v = _mm_cvtsi32_si64 (1);
353 /* Some versions of clang will choke on K */
354 asm ("pshufw %2, %1, %0\n\t"
359 /* Some versions of clang will choke on this */
360 asm ("pmulhuw %1, %0\n\t"
365 return _mm_cvtsi64_si32 (v);
366 }]])], have_mmx_intrinsics=yes)
367 CFLAGS=$xserver_save_CFLAGS
370 [AC_HELP_STRING([--disable-mmx],
371 [disable x86 MMX fast paths])],
372 [enable_mmx=$enableval], [enable_mmx=auto])
374 if test $enable_mmx = no ; then
375 have_mmx_intrinsics=disabled
378 if test $have_mmx_intrinsics = yes ; then
379 AC_DEFINE(USE_X86_MMX, 1, [use x86 MMX compiler intrinsics])
384 AC_MSG_RESULT($have_mmx_intrinsics)
385 if test $enable_mmx = yes && test $have_mmx_intrinsics = no ; then
386 AC_MSG_ERROR([x86 MMX intrinsics not detected])
389 AM_CONDITIONAL(USE_X86_MMX, test $have_mmx_intrinsics = yes)
391 dnl ===========================================================================
394 if test "x$SSE2_CFLAGS" = "x" ; then
395 if test "x$SUNCC" = "xyes"; then
396 # SSE2 is enabled by default in the Sun Studio 64-bit environment
397 if test "$AMD64_ABI" = "no" ; then
398 SSE2_CFLAGS="-xarch=sse2"
401 SSE2_CFLAGS="-msse2 -Winline"
405 have_sse2_intrinsics=no
406 AC_MSG_CHECKING(whether to use SSE2 intrinsics)
407 xserver_save_CFLAGS=$CFLAGS
408 CFLAGS="$SSE2_CFLAGS $CFLAGS"
410 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
411 #if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 2))
412 # if !defined(__amd64__) && !defined(__x86_64__)
413 # error "Need GCC >= 4.2 for SSE2 intrinsics on x86"
416 #include <mmintrin.h>
417 #include <xmmintrin.h>
418 #include <emmintrin.h>
420 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
421 c = _mm_xor_si128 (a, b);
423 }]])], have_sse2_intrinsics=yes)
424 CFLAGS=$xserver_save_CFLAGS
427 [AC_HELP_STRING([--disable-sse2],
428 [disable SSE2 fast paths])],
429 [enable_sse2=$enableval], [enable_sse2=auto])
431 if test $enable_sse2 = no ; then
432 have_sse2_intrinsics=disabled
435 if test $have_sse2_intrinsics = yes ; then
436 AC_DEFINE(USE_SSE2, 1, [use SSE2 compiler intrinsics])
439 AC_MSG_RESULT($have_sse2_intrinsics)
440 if test $enable_sse2 = yes && test $have_sse2_intrinsics = no ; then
441 AC_MSG_ERROR([SSE2 intrinsics not detected])
444 AM_CONDITIONAL(USE_SSE2, test $have_sse2_intrinsics = yes)
446 dnl ===========================================================================
449 if test "x$SSSE3_CFLAGS" = "x" ; then
450 SSSE3_CFLAGS="-mssse3 -Winline"
453 have_ssse3_intrinsics=no
454 AC_MSG_CHECKING(whether to use SSSE3 intrinsics)
455 xserver_save_CFLAGS=$CFLAGS
456 CFLAGS="$SSSE3_CFLAGS $CFLAGS"
458 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
459 #include <mmintrin.h>
460 #include <xmmintrin.h>
461 #include <emmintrin.h>
462 #include <tmmintrin.h>
464 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
465 c = _mm_maddubs_epi16 (a, b);
467 }]])], have_ssse3_intrinsics=yes)
468 CFLAGS=$xserver_save_CFLAGS
471 [AC_HELP_STRING([--disable-ssse3],
472 [disable SSSE3 fast paths])],
473 [enable_ssse3=$enableval], [enable_ssse3=auto])
475 if test $enable_ssse3 = no ; then
476 have_ssse3_intrinsics=disabled
479 if test $have_ssse3_intrinsics = yes ; then
480 AC_DEFINE(USE_SSSE3, 1, [use SSSE3 compiler intrinsics])
483 AC_MSG_RESULT($have_ssse3_intrinsics)
484 if test $enable_ssse3 = yes && test $have_ssse3_intrinsics = no ; then
485 AC_MSG_ERROR([SSSE3 intrinsics not detected])
488 AM_CONDITIONAL(USE_SSSE3, test $have_ssse3_intrinsics = yes)
490 dnl ===========================================================================
491 dnl Other special flags needed when building code using MMX or SSE instructions
494 # When building 32-bit binaries, apply a mapfile to ensure that the
495 # binaries aren't flagged as only able to run on MMX+SSE capable CPUs
496 # since they check at runtime before using those instructions.
497 # Not all linkers grok the mapfile format so we check for that first.
498 if test "$AMD64_ABI" = "no" ; then
500 AC_MSG_CHECKING(whether to use a hardware capability map file)
501 hwcap_save_LDFLAGS="$LDFLAGS"
502 HWCAP_LDFLAGS='-Wl,-M,$(srcdir)/solaris-hwcap.mapfile'
503 LDFLAGS="$LDFLAGS -Wl,-M,pixman/solaris-hwcap.mapfile"
504 AC_LINK_IFELSE([AC_LANG_SOURCE([[int main() { return 0; }]])],
505 use_hwcap_mapfile=yes,
507 LDFLAGS="$hwcap_save_LDFLAGS"
508 AC_MSG_RESULT($use_hwcap_mapfile)
510 if test "x$MMX_LDFLAGS" = "x" ; then
511 MMX_LDFLAGS="$HWCAP_LDFLAGS"
513 if test "x$SSE2_LDFLAGS" = "x" ; then
514 SSE2_LDFLAGS="$HWCAP_LDFLAGS"
520 AC_SUBST(IWMMXT_CFLAGS)
522 AC_SUBST(MMX_LDFLAGS)
523 AC_SUBST(SSE2_CFLAGS)
524 AC_SUBST(SSE2_LDFLAGS)
525 AC_SUBST(SSSE3_CFLAGS)
527 dnl ===========================================================================
528 dnl Check for VMX/Altivec
529 if test -n "`$CC -v 2>&1 | grep version | grep Apple`"; then
530 VMX_CFLAGS="-faltivec"
532 VMX_CFLAGS="-maltivec -mabi=altivec"
535 have_vmx_intrinsics=no
536 AC_MSG_CHECKING(whether to use VMX/Altivec intrinsics)
537 xserver_save_CFLAGS=$CFLAGS
538 CFLAGS="$VMX_CFLAGS $CFLAGS"
539 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
540 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
541 #error "Need GCC >= 3.4 for sane altivec support"
545 vector unsigned int v = vec_splat_u32 (1);
548 }]])], have_vmx_intrinsics=yes)
549 CFLAGS=$xserver_save_CFLAGS
552 [AC_HELP_STRING([--disable-vmx],
553 [disable VMX fast paths])],
554 [enable_vmx=$enableval], [enable_vmx=auto])
556 if test $enable_vmx = no ; then
557 have_vmx_intrinsics=disabled
560 if test $have_vmx_intrinsics = yes ; then
561 AC_DEFINE(USE_VMX, 1, [use VMX compiler intrinsics])
566 AC_MSG_RESULT($have_vmx_intrinsics)
567 if test $enable_vmx = yes && test $have_vmx_intrinsics = no ; then
568 AC_MSG_ERROR([VMX intrinsics not detected])
573 AM_CONDITIONAL(USE_VMX, test $have_vmx_intrinsics = yes)
575 dnl ==========================================================================
576 dnl Check if assembler is gas compatible and supports ARM SIMD instructions
578 AC_MSG_CHECKING(whether to use ARM SIMD assembler)
579 xserver_save_CFLAGS=$CFLAGS
580 CFLAGS="-x assembler-with-cpp $CFLAGS"
581 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
588 #error EABI is required (to be sure that calling conventions are compatible)
591 uqadd8 r0, r0, r0]])], have_arm_simd=yes)
592 CFLAGS=$xserver_save_CFLAGS
594 AC_ARG_ENABLE(arm-simd,
595 [AC_HELP_STRING([--disable-arm-simd],
596 [disable ARM SIMD fast paths])],
597 [enable_arm_simd=$enableval], [enable_arm_simd=auto])
599 if test $enable_arm_simd = no ; then
600 have_arm_simd=disabled
603 if test $have_arm_simd = yes ; then
604 AC_DEFINE(USE_ARM_SIMD, 1, [use ARM SIMD assembly optimizations])
607 AM_CONDITIONAL(USE_ARM_SIMD, test $have_arm_simd = yes)
609 AC_MSG_RESULT($have_arm_simd)
610 if test $enable_arm_simd = yes && test $have_arm_simd = no ; then
611 AC_MSG_ERROR([ARM SIMD intrinsics not detected])
614 dnl ==========================================================================
615 dnl Check if assembler is gas compatible and supports NEON instructions
617 AC_MSG_CHECKING(whether to use ARM NEON assembler)
618 xserver_save_CFLAGS=$CFLAGS
619 CFLAGS="-x assembler-with-cpp $CFLAGS"
620 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
625 .eabi_attribute 10, 0
629 #error EABI is required (to be sure that calling conventions are compatible)
632 vmovn.u16 d0, q0]])], have_arm_neon=yes)
633 CFLAGS=$xserver_save_CFLAGS
635 AC_ARG_ENABLE(arm-neon,
636 [AC_HELP_STRING([--disable-arm-neon],
637 [disable ARM NEON fast paths])],
638 [enable_arm_neon=$enableval], [enable_arm_neon=auto])
640 if test $enable_arm_neon = no ; then
641 have_arm_neon=disabled
644 if test $have_arm_neon = yes ; then
645 AC_DEFINE(USE_ARM_NEON, 1, [use ARM NEON assembly optimizations])
648 AM_CONDITIONAL(USE_ARM_NEON, test $have_arm_neon = yes)
650 AC_MSG_RESULT($have_arm_neon)
651 if test $enable_arm_neon = yes && test $have_arm_neon = no ; then
652 AC_MSG_ERROR([ARM NEON intrinsics not detected])
655 dnl ===========================================================================
658 AC_ARG_ENABLE(arm-iwmmxt,
659 [AC_HELP_STRING([--disable-arm-iwmmxt],
660 [disable ARM IWMMXT fast paths])],
661 [enable_iwmmxt=$enableval], [enable_iwmmxt=auto])
663 AC_ARG_ENABLE(arm-iwmmxt2,
664 [AC_HELP_STRING([--disable-arm-iwmmxt2],
665 [build ARM IWMMXT fast paths with -march=iwmmxt instead of -march=iwmmxt2])],
666 [enable_iwmmxt2=$enableval], [enable_iwmmxt2=auto])
668 if test "x$IWMMXT_CFLAGS" = "x" ; then
669 IWMMXT_CFLAGS="-flax-vector-conversions -Winline -march=iwmmxt"
670 if test $enable_iwmmxt2 != no ; then
671 IWMMXT_CFLAGS="${IWMMXT_CFLAGS}2"
675 have_iwmmxt_intrinsics=no
676 AC_MSG_CHECKING(whether to use ARM IWMMXT intrinsics)
677 xserver_save_CFLAGS=$CFLAGS
678 CFLAGS="$CFLAGS $IWMMXT_CFLAGS"
679 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
681 #error "IWMMXT is only available on ARM"
684 #error "IWMMXT not enabled (with -march=iwmmxt)"
686 #if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8))
687 #error "Need GCC >= 4.8 for IWMMXT intrinsics"
689 #include <mmintrin.h>
694 } a = { .c = {1, 2, 3, 4, 5, 6, 7, 8} };
696 __m64 c = _mm_srli_si64 (a.v, b);
697 }]])], have_iwmmxt_intrinsics=yes)
698 CFLAGS=$xserver_save_CFLAGS
700 if test $enable_iwmmxt = no ; then
701 have_iwmmxt_intrinsics=disabled
704 if test $have_iwmmxt_intrinsics = yes ; then
705 AC_DEFINE(USE_ARM_IWMMXT, 1, [use ARM IWMMXT compiler intrinsics])
710 AC_MSG_RESULT($have_iwmmxt_intrinsics)
711 if test $enable_iwmmxt = yes && test $have_iwmmxt_intrinsics = no ; then
712 AC_MSG_ERROR([IWMMXT intrinsics not detected])
715 AM_CONDITIONAL(USE_ARM_IWMMXT, test $have_iwmmxt_intrinsics = yes)
717 dnl ==========================================================================
718 dnl Check if assembler is gas compatible and supports MIPS DSPr2 instructions
721 AC_MSG_CHECKING(whether to use MIPS DSPr2 assembler)
722 xserver_save_CFLAGS=$CFLAGS
723 CFLAGS="-mdspr2 $CFLAGS"
725 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
726 #if !(defined(__mips__) && __mips_isa_rev >= 2)
727 #error MIPS DSPr2 is currently only available on MIPS32r2 platforms.
732 int c = 0, a = 0, b = 0;
733 __asm__ __volatile__ (
734 "precr.qb.ph %[c], %[a], %[b] \n\t"
736 : [a] "r" (a), [b] "r" (b)
739 }]])], have_mips_dspr2=yes)
740 CFLAGS=$xserver_save_CFLAGS
742 AC_ARG_ENABLE(mips-dspr2,
743 [AC_HELP_STRING([--disable-mips-dspr2],
744 [disable MIPS DSPr2 fast paths])],
745 [enable_mips_dspr2=$enableval], [enable_mips_dspr2=auto])
747 if test $enable_mips_dspr2 = no ; then
748 have_mips_dspr2=disabled
751 if test $have_mips_dspr2 = yes ; then
752 AC_DEFINE(USE_MIPS_DSPR2, 1, [use MIPS DSPr2 assembly optimizations])
755 AM_CONDITIONAL(USE_MIPS_DSPR2, test $have_mips_dspr2 = yes)
757 AC_MSG_RESULT($have_mips_dspr2)
758 if test $enable_mips_dspr2 = yes && test $have_mips_dspr2 = no ; then
759 AC_MSG_ERROR([MIPS DSPr2 instructions not detected])
762 dnl =========================================================================================
763 dnl Check for GNU-style inline assembly support
765 have_gcc_inline_asm=no
766 AC_MSG_CHECKING(whether to use GNU-style inline assembler)
767 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
769 /* Most modern architectures have a NOP instruction, so this is a fairly generic test. */
770 asm volatile ( "\tnop\n" : : : "cc", "memory" );
772 }]])], have_gcc_inline_asm=yes)
774 AC_ARG_ENABLE(gcc-inline-asm,
775 [AC_HELP_STRING([--disable-gcc-inline-asm],
776 [disable GNU-style inline assembler])],
777 [enable_gcc_inline_asm=$enableval], [enable_gcc_inline_asm=auto])
779 if test $enable_gcc_inline_asm = no ; then
780 have_gcc_inline_asm=disabled
783 if test $have_gcc_inline_asm = yes ; then
784 AC_DEFINE(USE_GCC_INLINE_ASM, 1, [use GNU-style inline assembler])
787 AC_MSG_RESULT($have_gcc_inline_asm)
788 if test $enable_gcc_inline_asm = yes && test $have_gcc_inline_asm = no ; then
789 AC_MSG_ERROR([GNU-style inline assembler not detected])
792 AM_CONDITIONAL(USE_GCC_INLINE_ASM, test $have_gcc_inline_asm = yes)
794 dnl ==============================================
795 dnl Static test programs
797 AC_ARG_ENABLE(static-testprogs,
798 [AC_HELP_STRING([--enable-static-testprogs],
799 [build test programs as static binaries [default=no]])],
800 [enable_static_testprogs=$enableval], [enable_static_testprogs=no])
802 TESTPROGS_EXTRA_LDFLAGS=
803 if test "x$enable_static_testprogs" = "xyes" ; then
804 TESTPROGS_EXTRA_LDFLAGS="-all-static"
806 AC_SUBST(TESTPROGS_EXTRA_LDFLAGS)
808 dnl ==============================================
811 AC_ARG_ENABLE(timers,
812 [AC_HELP_STRING([--enable-timers],
813 [enable TIMER_BEGIN and TIMER_END macros [default=no]])],
814 [enable_timers=$enableval], [enable_timers=no])
816 if test $enable_timers = yes ; then
817 AC_DEFINE(PIXMAN_TIMERS, 1, [enable TIMER_BEGIN/TIMER_END macros])
819 AC_SUBST(PIXMAN_TIMERS)
821 dnl ===================================
825 [AC_HELP_STRING([--enable-gtk],
826 [enable tests using GTK+ [default=auto]])],
827 [enable_gtk=$enableval], [enable_gtk=auto])
831 if test $enable_gtk = yes ; then
832 AC_CHECK_LIB([pixman-1], [pixman_version_string])
833 PKG_CHECK_MODULES(GTK, [gtk+-2.0 >= 2.16 pixman-1])
836 if test $enable_gtk = auto ; then
837 AC_CHECK_LIB([pixman-1], [pixman_version_string], [enable_gtk=auto], [enable_gtk=no])
840 if test $enable_gtk = auto ; then
841 PKG_CHECK_MODULES(GTK, [gtk+-2.0 >= 2.16 pixman-1], [enable_gtk=yes], [enable_gtk=no])
844 AM_CONDITIONAL(HAVE_GTK, [test "x$enable_gtk" = xyes])
849 dnl =====================================
850 dnl posix_memalign, sigaction, alarm, gettimeofday
852 AC_CHECK_FUNC(posix_memalign, have_posix_memalign=yes, have_posix_memalign=no)
853 if test x$have_posix_memalign = xyes; then
854 AC_DEFINE(HAVE_POSIX_MEMALIGN, 1, [Whether we have posix_memalign()])
857 AC_CHECK_FUNC(sigaction, have_sigaction=yes, have_sigaction=no)
858 if test x$have_sigaction = xyes; then
859 AC_DEFINE(HAVE_SIGACTION, 1, [Whether we have sigaction()])
862 AC_CHECK_FUNC(alarm, have_alarm=yes, have_alarm=no)
863 if test x$have_alarm = xyes; then
864 AC_DEFINE(HAVE_ALARM, 1, [Whether we have alarm()])
867 AC_CHECK_HEADER([sys/mman.h],
868 [AC_DEFINE(HAVE_SYS_MMAN_H, [1], [Define to 1 if we have <sys/mman.h>])])
870 AC_CHECK_FUNC(mmap, have_mmap=yes, have_mmap=no)
871 if test x$have_mmap = xyes; then
872 AC_DEFINE(HAVE_MMAP, 1, [Whether we have mmap()])
875 AC_CHECK_FUNC(mprotect, have_mprotect=yes, have_mprotect=no)
876 if test x$have_mprotect = xyes; then
877 AC_DEFINE(HAVE_MPROTECT, 1, [Whether we have mprotect()])
880 AC_CHECK_FUNC(getpagesize, have_getpagesize=yes, have_getpagesize=no)
881 if test x$have_getpagesize = xyes; then
882 AC_DEFINE(HAVE_GETPAGESIZE, 1, [Whether we have getpagesize()])
885 AC_CHECK_HEADER([fenv.h],
886 [AC_DEFINE(HAVE_FENV_H, [1], [Define to 1 if we have <fenv.h>])])
888 AC_CHECK_LIB(m, feenableexcept, have_feenableexcept=yes, have_feenableexcept=no)
889 if test x$have_feenableexcept = xyes; then
890 AC_DEFINE(HAVE_FEENABLEEXCEPT, 1, [Whether we have feenableexcept()])
893 AC_CHECK_FUNC(gettimeofday, have_gettimeofday=yes, have_gettimeofday=no)
894 AC_CHECK_HEADER(sys/time.h, have_sys_time_h=yes, have_sys_time_h=no)
895 if test x$have_gettimeofday = xyes && test x$have_sys_time_h = xyes; then
896 AC_DEFINE(HAVE_GETTIMEOFDAY, 1, [Whether we have gettimeofday()])
899 dnl =====================================
900 dnl Check for missing sqrtf() as, e.g., for Solaris 9
902 AC_SEARCH_LIBS([sqrtf], [m], [],
903 [AC_DEFINE([sqrtf], [sqrt],
904 [Define to sqrt if you do not have the `sqrtf' function.])])
906 dnl =====================================
907 dnl Thread local storage
909 AC_MSG_CHECKING(for thread local storage (TLS) support)
910 AC_CACHE_VAL(ac_cv_tls, [
912 keywords="__thread __declspec(thread)"
913 for kw in $keywords ; do
915 #if defined(__MINGW32__) && !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5))
916 #error This MinGW version has broken __thread support
919 #error OpenBSD has broken __thread support
922 int $kw test;], [], [ac_cv_tls=$kw; break])
925 AC_MSG_RESULT($ac_cv_tls)
927 if test "$ac_cv_tls" != "none"; then
928 AC_DEFINE_UNQUOTED([TLS], $ac_cv_tls, [The compiler supported TLS storage class])
935 m4_define([pthread_test_program],AC_LANG_SOURCE([[dnl
939 static pthread_once_t once_control = PTHREAD_ONCE_INIT;
940 static pthread_key_t key;
945 pthread_key_create (&key, NULL);
953 if (pthread_once (&once_control, make_key) != 0)
959 value = pthread_getspecific (key);
962 value = malloc (100);
963 pthread_setspecific (key, value);
970 AC_DEFUN([PIXMAN_CHECK_PTHREAD],[dnl
971 if test "z$support_for_pthreads" != "zyes"; then
972 PIXMAN_LINK_WITH_ENV(
973 [$1], [pthread_test_program],
974 [PTHREAD_CFLAGS="$CFLAGS"
976 PTHREAD_LDFLAGS="$LDFLAGS"
977 support_for_pthreads=yes])
981 support_for_pthreads=no
983 AC_MSG_CHECKING(for pthreads)
985 PIXMAN_CHECK_PTHREAD([CFLAGS="-pthread"; LDFLAGS="-pthread"])
986 PIXMAN_CHECK_PTHREAD([CFLAGS="-D_REENTRANT"; LIBS="-lpthread"])
987 PIXMAN_CHECK_PTHREAD([CFLAGS="-D_REENTRANT"; LDFLAGS="-lroot"])
989 if test $support_for_pthreads = yes; then
990 AC_DEFINE([HAVE_PTHREADS], [], [Whether pthreads is supported])
991 if test $ac_cv_tls = none ; then
992 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
996 AC_MSG_RESULT($support_for_pthreads)
998 AC_SUBST(TOOLCHAIN_SUPPORTS__THREAD)
999 AC_SUBST(HAVE_PTHREADS)
1000 AC_SUBST(PTHREAD_LDFLAGS)
1001 AC_SUBST(PTHREAD_LIBS)
1002 AC_SUBST(PTHREAD_CFLAGS)
1004 dnl =====================================
1005 dnl __attribute__((constructor))
1007 support_for_attribute_constructor=no
1009 AC_MSG_CHECKING(for __attribute__((constructor)))
1010 AC_LINK_IFELSE([AC_LANG_SOURCE([[
1011 #if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7))
1012 /* attribute 'constructor' is supported since gcc 2.7, but some compilers
1013 * may only pretend to be gcc, so let's try to actually use it
1016 static void __attribute__((constructor)) constructor_function () { x = 0; }
1017 int main (void) { return x; }
1019 #error not gcc or gcc version is older than 2.7
1021 ]])], support_for_attribute_constructor=yes)
1023 if test x$support_for_attribute_constructor = xyes; then
1024 AC_DEFINE([TOOLCHAIN_SUPPORTS_ATTRIBUTE_CONSTRUCTOR],
1025 [],[Whether the tool chain supports __attribute__((constructor))])
1028 AC_MSG_RESULT($support_for_attribute_constructor)
1029 AC_SUBST(TOOLCHAIN_SUPPORTS_ATTRIBUTE_CONSTRUCTOR)
1031 dnl =====================================
1034 support_for_float128=no
1036 AC_MSG_CHECKING(for __float128)
1037 AC_LINK_IFELSE([AC_LANG_SOURCE([[
1038 __float128 a = 1.0Q, b = 2.0Q; int main (void) { return a + b; }
1039 ]])], support_for_float128=yes)
1041 if test x$support_for_float128 = xyes; then
1042 AC_DEFINE([HAVE_FLOAT128], [], [Whether the tool chain supports __float128])
1045 AC_MSG_RESULT($support_for_float128)
1047 dnl =====================================
1050 support_for_builtin_clz=no
1052 AC_MSG_CHECKING(for __builtin_clz)
1053 AC_LINK_IFELSE([AC_LANG_SOURCE([[
1054 unsigned int x = 11; int main (void) { return __builtin_clz(x); }
1055 ]])], support_for_builtin_clz=yes)
1057 if test x$support_for_builtin_clz = xyes; then
1058 AC_DEFINE([HAVE_BUILTIN_CLZ], [], [Whether the compiler supports __builtin_clz])
1061 AC_MSG_RESULT($support_for_builtin_clz)
1063 dnl =====================================
1064 dnl GCC vector extensions
1066 support_for_gcc_vector_extensions=no
1068 AC_MSG_CHECKING(for GCC vector extensions)
1069 AC_LINK_IFELSE([AC_LANG_SOURCE([[
1070 unsigned int __attribute__ ((vector_size(16))) e, a, b;
1071 int main (void) { e = a - ((b << 27) + (b >> (32 - 27))) + 1; return e[0]; }
1072 ]])], support_for_gcc_vector_extensions=yes)
1074 if test x$support_for_gcc_vector_extensions = xyes; then
1075 AC_DEFINE([HAVE_GCC_VECTOR_EXTENSIONS], [],
1076 [Whether the compiler supports GCC vector extensions])
1079 AC_MSG_RESULT($support_for_gcc_vector_extensions)
1081 dnl ==================
1084 AC_ARG_ENABLE(libpng, AS_HELP_STRING([--enable-libpng], [Build support for libpng (default: auto)]),
1085 [have_libpng=$enableval], [have_libpng=auto])
1087 case x$have_libpng in
1088 xyes) PKG_CHECK_MODULES(PNG, [libpng]) ;;
1090 *) PKG_CHECK_MODULES(PNG, [libpng], have_libpng=yes, have_libpng=no) ;;
1093 if test x$have_libpng = xyes; then
1094 AC_DEFINE([HAVE_LIBPNG], [1], [Whether we have libpng])
1097 AC_SUBST(HAVE_LIBPNG)
1099 AC_OUTPUT([pixman-1.pc
1100 pixman-1-uninstalled.pc
1103 pixman/pixman-version.h
1107 m4_if(m4_eval(pixman_minor % 2), [1], [
1109 echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
1111 echo " Thanks for testing this development snapshot of pixman. Please"
1112 echo " report any problems you find, either by sending email to "
1114 echo " pixman@lists.freedesktop.org"
1116 echo " or by filing a bug at "
1118 echo " https://bugs.freedesktop.org/enter_bug.cgi?product=pixman "
1120 echo " If you are looking for a stable release of pixman, please note "
1121 echo " that stable releases have _even_ minor version numbers. Ie., "
1122 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 "
1123 echo " development snapshot that may contain bugs and experimental "
1126 echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"