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], 27)
57 m4_define([pixman_micro], 1)
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 AM_CONFIG_HEADER(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"
93 [AC_LANG_SOURCE([$2])],
94 [pixman_cc_stderr=`test -f conftest.err && cat conftest.err`
96 [pixman_cc_stderr=`test -f conftest.err && cat conftest.err`
99 if test "x$pixman_cc_stderr" != "x"; then
103 if test "x$pixman_cc_flag" = "xyes"; then
104 ifelse([$3], , :, [$3])
106 ifelse([$4], , :, [$4])
108 CFLAGS="$save_CFLAGS"
109 LDFLAGS="$save_LDFLAGS"
113 dnl Find a -Werror for catching warnings.
115 for w in -Werror -errwarn; do
116 if test "z$WERROR" = "z"; then
117 AC_MSG_CHECKING([whether the compiler supports $w])
118 PIXMAN_LINK_WITH_ENV(
120 [int main(int c, char **v) { (void)c; (void)v; return 0; }],
121 [WERROR=$w; yesno=yes], [yesno=no])
122 AC_MSG_RESULT($yesno)
126 dnl PIXMAN_CHECK_CFLAG(flag, [program])
127 dnl Adds flag to CFLAGS if the given program links without warnings or errors.
128 AC_DEFUN([PIXMAN_CHECK_CFLAG], [dnl
129 AC_MSG_CHECKING([whether the compiler supports $1])
130 PIXMAN_LINK_WITH_ENV(
131 [CFLAGS="$WERROR $1"],
133 int main(int c, char **v) { (void)c; (void)v; return 0; }
137 if test "x$_yesno" = xyes; then
140 AC_MSG_RESULT($_yesno)
143 AC_CHECK_SIZEOF(long)
145 # Checks for Sun Studio compilers
146 AC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"])
147 AC_CHECK_DECL([__amd64], [AMD64_ABI="yes"], [AMD64_ABI="no"])
149 # Default CFLAGS to -O -g rather than just the -g from AC_PROG_CC
150 # if we're using Sun Studio and neither the user nor a config.site
152 if test $SUNCC = yes && \
153 test "x$test_CFLAGS" = "x" && \
154 test "$CFLAGS" = "-g"
160 # We ignore pixman_major in the version here because the major version should
161 # always be encoded in the actual library name. Ie., the soname is:
163 # pixman-$(pixman_major).0.minor.micro
165 m4_define([lt_current], [pixman_minor])
166 m4_define([lt_revision], [pixman_micro])
167 m4_define([lt_age], [pixman_minor])
169 LT_VERSION_INFO="lt_current:lt_revision:lt_age"
171 PIXMAN_VERSION_MAJOR=pixman_major()
172 AC_SUBST(PIXMAN_VERSION_MAJOR)
173 PIXMAN_VERSION_MINOR=pixman_minor()
174 AC_SUBST(PIXMAN_VERSION_MINOR)
175 PIXMAN_VERSION_MICRO=pixman_micro()
176 AC_SUBST(PIXMAN_VERSION_MICRO)
178 AC_SUBST(LT_VERSION_INFO)
180 # Check for dependencies
182 PIXMAN_CHECK_CFLAG([-Wall])
183 PIXMAN_CHECK_CFLAG([-fno-strict-aliasing])
185 AC_PATH_PROG(PERL, perl, no)
186 if test "x$PERL" = xno; then
187 AC_MSG_ERROR([Perl is required to build pixman.])
191 dnl =========================================================================
192 dnl OpenMP for the test suite?
195 # Check for OpenMP support only when autoconf support that (require autoconf >=2.62)
197 m4_ifdef([AC_OPENMP], [AC_OPENMP])
199 if test "x$enable_openmp" = "xyes" && test "x$ac_cv_prog_c_openmp" = "xunsupported" ; then
200 AC_MSG_WARN([OpenMP support requested but found unsupported])
203 dnl May not fail to link without -Wall -Werror added
204 dnl So try to link only when openmp is supported
205 dnl ac_cv_prog_c_openmp is not defined when --disable-openmp is used
206 if test "x$ac_cv_prog_c_openmp" != "xunsupported" && test "x$ac_cv_prog_c_openmp" != "x"; then
207 m4_define([openmp_test_program],[dnl
210 extern unsigned int lcg_seed;
211 #pragma omp threadprivate(lcg_seed)
212 unsigned int lcg_seed;
214 unsigned function(unsigned a, unsigned b)
217 return ((a + b) ^ a ) + lcg_seed;
220 int main(int argc, char **argv)
223 int n1 = 0, n2 = argc;
224 unsigned checksum = 0;
225 int verbose = argv != NULL;
226 unsigned (*test_function)(unsigned, unsigned);
227 test_function = function;
228 #pragma omp parallel for reduction(+:checksum) default(none) \
229 shared(n1, n2, test_function, verbose)
230 for (i = n1; i < n2; i++)
232 unsigned crc = test_function (i, 0);
234 printf ("%d: %08X\n", i, crc);
237 printf("%u\n", checksum);
242 PIXMAN_LINK_WITH_ENV(
243 [CFLAGS="$OPENMP_CFLAGS" LDFLAGS="$OPENMP_CFLAGS"],
244 [openmp_test_program],
247 if test "x$have_openmp" = "xyes" ; then
248 AC_DEFINE(USE_OPENMP, 1, [use OpenMP in the test suite])
251 AC_SUBST(OPENMP_CFLAGS)
253 dnl =========================================================================
254 dnl -fvisibility stuff
256 PIXMAN_CHECK_CFLAG([-fvisibility=hidden], [dnl
257 #if defined(__GNUC__) && (__GNUC__ >= 4)
259 #error Have -fvisibility but it is ignored and generates a warning
262 #error Need GCC 4.0 for visibility
266 PIXMAN_CHECK_CFLAG([-xldscope=hidden], [dnl
267 #if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
269 #error Need Sun Studio 8 for visibility
273 dnl ===========================================================================
274 dnl Check for Loongson Multimedia Instructions
276 if test "x$LS_CFLAGS" = "x" ; then
277 LS_CFLAGS="-march=loongson2f"
281 AC_MSG_CHECKING(whether to use Loongson MMI assembler)
283 xserver_save_CFLAGS=$CFLAGS
284 CFLAGS=" $LS_CFLAGS $CFLAGS -I$srcdir"
285 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
286 #ifndef __mips_loongson_vector_rev
287 #error "Loongson Multimedia Instructions are only available on Loongson"
289 #if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 4))
290 #error "Need GCC >= 4.4 for Loongson MMI compilation"
292 #include "pixman/loongson-mmintrin.h"
297 } a = { .c = {1, 2, 3, 4, 5, 6, 7, 8} };
299 __m64 c = _mm_srli_pi16 (a.v, b);
301 }]])], have_loongson_mmi=yes)
302 CFLAGS=$xserver_save_CFLAGS
304 AC_ARG_ENABLE(loongson-mmi,
305 [AC_HELP_STRING([--disable-loongson-mmi],
306 [disable Loongson MMI fast paths])],
307 [enable_loongson_mmi=$enableval], [enable_loongson_mmi=auto])
309 if test $enable_loongson_mmi = no ; then
310 have_loongson_mmi=disabled
313 if test $have_loongson_mmi = yes ; then
314 AC_DEFINE(USE_LOONGSON_MMI, 1, [use Loongson Multimedia Instructions])
319 AC_MSG_RESULT($have_loongson_mmi)
320 if test $enable_loongson_mmi = yes && test $have_loongson_mmi = no ; then
321 AC_MSG_ERROR([Loongson MMI not detected])
324 AM_CONDITIONAL(USE_LOONGSON_MMI, test $have_loongson_mmi = yes)
326 dnl ===========================================================================
329 if test "x$MMX_CFLAGS" = "x" ; then
330 if test "x$SUNCC" = "xyes"; then
331 # Sun Studio doesn't have an -xarch=mmx flag, so we have to use sse
332 # but if we're building 64-bit, mmx & sse support is on by default and
333 # -xarch=sse throws an error instead
334 if test "$AMD64_ABI" = "no" ; then
335 MMX_CFLAGS="-xarch=sse"
338 MMX_CFLAGS="-mmmx -Winline"
342 have_mmx_intrinsics=no
343 AC_MSG_CHECKING(whether to use MMX intrinsics)
344 xserver_save_CFLAGS=$CFLAGS
345 CFLAGS="$MMX_CFLAGS $CFLAGS"
346 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
347 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
348 #error "Need GCC >= 3.4 for MMX intrinsics"
350 #include <mmintrin.h>
352 __m64 v = _mm_cvtsi32_si64 (1);
356 /* Some versions of clang will choke on K */
357 asm ("pshufw %2, %1, %0\n\t"
362 return _mm_cvtsi64_si32 (v);
363 }]])], have_mmx_intrinsics=yes)
364 CFLAGS=$xserver_save_CFLAGS
367 [AC_HELP_STRING([--disable-mmx],
368 [disable x86 MMX fast paths])],
369 [enable_mmx=$enableval], [enable_mmx=auto])
371 if test $enable_mmx = no ; then
372 have_mmx_intrinsics=disabled
375 if test $have_mmx_intrinsics = yes ; then
376 AC_DEFINE(USE_X86_MMX, 1, [use x86 MMX compiler intrinsics])
381 AC_MSG_RESULT($have_mmx_intrinsics)
382 if test $enable_mmx = yes && test $have_mmx_intrinsics = no ; then
383 AC_MSG_ERROR([x86 MMX intrinsics not detected])
386 AM_CONDITIONAL(USE_X86_MMX, test $have_mmx_intrinsics = yes)
388 dnl ===========================================================================
391 if test "x$SSE2_CFLAGS" = "x" ; then
392 if test "x$SUNCC" = "xyes"; then
393 # SSE2 is enabled by default in the Sun Studio 64-bit environment
394 if test "$AMD64_ABI" = "no" ; then
395 SSE2_CFLAGS="-xarch=sse2"
398 SSE2_CFLAGS="-msse2 -Winline"
402 have_sse2_intrinsics=no
403 AC_MSG_CHECKING(whether to use SSE2 intrinsics)
404 xserver_save_CFLAGS=$CFLAGS
405 CFLAGS="$SSE2_CFLAGS $CFLAGS"
407 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
408 #if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 2))
409 # if !defined(__amd64__) && !defined(__x86_64__)
410 # error "Need GCC >= 4.2 for SSE2 intrinsics on x86"
413 #include <mmintrin.h>
414 #include <xmmintrin.h>
415 #include <emmintrin.h>
417 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
418 c = _mm_xor_si128 (a, b);
420 }]])], have_sse2_intrinsics=yes)
421 CFLAGS=$xserver_save_CFLAGS
424 [AC_HELP_STRING([--disable-sse2],
425 [disable SSE2 fast paths])],
426 [enable_sse2=$enableval], [enable_sse2=auto])
428 if test $enable_sse2 = no ; then
429 have_sse2_intrinsics=disabled
432 if test $have_sse2_intrinsics = yes ; then
433 AC_DEFINE(USE_SSE2, 1, [use SSE2 compiler intrinsics])
436 AC_MSG_RESULT($have_sse2_intrinsics)
437 if test $enable_sse2 = yes && test $have_sse2_intrinsics = no ; then
438 AC_MSG_ERROR([SSE2 intrinsics not detected])
441 AM_CONDITIONAL(USE_SSE2, test $have_sse2_intrinsics = yes)
443 dnl ===========================================================================
444 dnl Other special flags needed when building code using MMX or SSE instructions
447 # When building 32-bit binaries, apply a mapfile to ensure that the
448 # binaries aren't flagged as only able to run on MMX+SSE capable CPUs
449 # since they check at runtime before using those instructions.
450 # Not all linkers grok the mapfile format so we check for that first.
451 if test "$AMD64_ABI" = "no" ; then
453 AC_MSG_CHECKING(whether to use a hardware capability map file)
454 hwcap_save_LDFLAGS="$LDFLAGS"
455 HWCAP_LDFLAGS='-Wl,-M,$(srcdir)/solaris-hwcap.mapfile'
456 LDFLAGS="$LDFLAGS -Wl,-M,pixman/solaris-hwcap.mapfile"
457 AC_LINK_IFELSE([AC_LANG_SOURCE([[int main() { return 0; }]])],
458 use_hwcap_mapfile=yes,
460 LDFLAGS="$hwcap_save_LDFLAGS"
461 AC_MSG_RESULT($use_hwcap_mapfile)
463 if test "x$MMX_LDFLAGS" = "x" ; then
464 MMX_LDFLAGS="$HWCAP_LDFLAGS"
466 if test "x$SSE2_LDFLAGS" = "x" ; then
467 SSE2_LDFLAGS="$HWCAP_LDFLAGS"
473 AC_SUBST(IWMMXT_CFLAGS)
475 AC_SUBST(MMX_LDFLAGS)
476 AC_SUBST(SSE2_CFLAGS)
477 AC_SUBST(SSE2_LDFLAGS)
479 dnl ===========================================================================
480 dnl Check for VMX/Altivec
481 if test -n "`$CC -v 2>&1 | grep version | grep Apple`"; then
482 VMX_CFLAGS="-faltivec"
484 VMX_CFLAGS="-maltivec -mabi=altivec"
487 have_vmx_intrinsics=no
488 AC_MSG_CHECKING(whether to use VMX/Altivec intrinsics)
489 xserver_save_CFLAGS=$CFLAGS
490 CFLAGS="$VMX_CFLAGS $CFLAGS"
491 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
492 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
493 #error "Need GCC >= 3.4 for sane altivec support"
497 vector unsigned int v = vec_splat_u32 (1);
500 }]])], have_vmx_intrinsics=yes)
501 CFLAGS=$xserver_save_CFLAGS
504 [AC_HELP_STRING([--disable-vmx],
505 [disable VMX fast paths])],
506 [enable_vmx=$enableval], [enable_vmx=auto])
508 if test $enable_vmx = no ; then
509 have_vmx_intrinsics=disabled
512 if test $have_vmx_intrinsics = yes ; then
513 AC_DEFINE(USE_VMX, 1, [use VMX compiler intrinsics])
518 AC_MSG_RESULT($have_vmx_intrinsics)
519 if test $enable_vmx = yes && test $have_vmx_intrinsics = no ; then
520 AC_MSG_ERROR([VMX intrinsics not detected])
525 AM_CONDITIONAL(USE_VMX, test $have_vmx_intrinsics = yes)
527 dnl ==========================================================================
528 dnl Check if assembler is gas compatible and supports ARM SIMD instructions
530 AC_MSG_CHECKING(whether to use ARM SIMD assembler)
531 xserver_save_CFLAGS=$CFLAGS
532 CFLAGS="-x assembler-with-cpp $CFLAGS"
533 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
540 #error EABI is required (to be sure that calling conventions are compatible)
543 uqadd8 r0, r0, r0]])], have_arm_simd=yes)
544 CFLAGS=$xserver_save_CFLAGS
546 AC_ARG_ENABLE(arm-simd,
547 [AC_HELP_STRING([--disable-arm-simd],
548 [disable ARM SIMD fast paths])],
549 [enable_arm_simd=$enableval], [enable_arm_simd=auto])
551 if test $enable_arm_simd = no ; then
552 have_arm_simd=disabled
555 if test $have_arm_simd = yes ; then
556 AC_DEFINE(USE_ARM_SIMD, 1, [use ARM SIMD assembly optimizations])
559 AM_CONDITIONAL(USE_ARM_SIMD, test $have_arm_simd = yes)
561 AC_MSG_RESULT($have_arm_simd)
562 if test $enable_arm_simd = yes && test $have_arm_simd = no ; then
563 AC_MSG_ERROR([ARM SIMD intrinsics not detected])
566 dnl ==========================================================================
567 dnl Check if assembler is gas compatible and supports NEON instructions
569 AC_MSG_CHECKING(whether to use ARM NEON assembler)
570 xserver_save_CFLAGS=$CFLAGS
571 CFLAGS="-x assembler-with-cpp $CFLAGS"
572 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
577 .eabi_attribute 10, 0
581 #error EABI is required (to be sure that calling conventions are compatible)
584 vmovn.u16 d0, q0]])], have_arm_neon=yes)
585 CFLAGS=$xserver_save_CFLAGS
587 AC_ARG_ENABLE(arm-neon,
588 [AC_HELP_STRING([--disable-arm-neon],
589 [disable ARM NEON fast paths])],
590 [enable_arm_neon=$enableval], [enable_arm_neon=auto])
592 if test $enable_arm_neon = no ; then
593 have_arm_neon=disabled
596 if test $have_arm_neon = yes ; then
597 AC_DEFINE(USE_ARM_NEON, 1, [use ARM NEON assembly optimizations])
600 AM_CONDITIONAL(USE_ARM_NEON, test $have_arm_neon = yes)
602 AC_MSG_RESULT($have_arm_neon)
603 if test $enable_arm_neon = yes && test $have_arm_neon = no ; then
604 AC_MSG_ERROR([ARM NEON intrinsics not detected])
607 dnl ===========================================================================
610 if test "x$IWMMXT_CFLAGS" = "x" ; then
611 IWMMXT_CFLAGS="-march=iwmmxt -flax-vector-conversions -Winline"
614 have_iwmmxt_intrinsics=no
615 AC_MSG_CHECKING(whether to use ARM IWMMXT intrinsics)
616 xserver_save_CFLAGS=$CFLAGS
617 CFLAGS="$IWMMXT_CFLAGS $CFLAGS"
618 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
620 #error "IWMMXT is only available on ARM"
623 #error "IWMMXT not enabled (with -march=iwmmxt)"
625 #if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5))
626 #error "Need GCC >= 4.5 for IWMMXT intrinsics"
628 #include <mmintrin.h>
633 } a = { .c = {1, 2, 3, 4, 5, 6, 7, 8} };
635 __m64 c = _mm_srli_si64 (a.v, b);
636 }]])], have_iwmmxt_intrinsics=yes)
637 CFLAGS=$xserver_save_CFLAGS
639 AC_ARG_ENABLE(arm-iwmmxt,
640 [AC_HELP_STRING([--disable-arm-iwmmxt],
641 [disable ARM IWMMXT fast paths])],
642 [enable_iwmmxt=$enableval], [enable_iwmmxt=auto])
644 if test $enable_iwmmxt = no ; then
645 have_iwmmxt_intrinsics=disabled
648 if test $have_iwmmxt_intrinsics = yes ; then
649 AC_DEFINE(USE_ARM_IWMMXT, 1, [use ARM IWMMXT compiler intrinsics])
654 AC_MSG_RESULT($have_iwmmxt_intrinsics)
655 if test $enable_iwmmxt = yes && test $have_iwmmxt_intrinsics = no ; then
656 AC_MSG_ERROR([IWMMXT intrinsics not detected])
659 AM_CONDITIONAL(USE_ARM_IWMMXT, test $have_iwmmxt_intrinsics = yes)
661 dnl ==========================================================================
662 dnl Check if assembler is gas compatible and supports MIPS DSPr2 instructions
665 AC_MSG_CHECKING(whether to use MIPS DSPr2 assembler)
666 xserver_save_CFLAGS=$CFLAGS
667 CFLAGS="-mdspr2 $CFLAGS"
669 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
670 #if !(defined(__mips__) && __mips_isa_rev >= 2)
671 #error MIPS DSPr2 is currently only available on MIPS32r2 platforms.
676 int c = 0, a = 0, b = 0;
677 __asm__ __volatile__ (
678 "precr.qb.ph %[c], %[a], %[b] \n\t"
680 : [a] "r" (a), [b] "r" (b)
683 }]])], have_mips_dspr2=yes)
684 CFLAGS=$xserver_save_CFLAGS
686 AC_ARG_ENABLE(mips-dspr2,
687 [AC_HELP_STRING([--disable-mips-dspr2],
688 [disable MIPS DSPr2 fast paths])],
689 [enable_mips_dspr2=$enableval], [enable_mips_dspr2=auto])
691 if test $enable_mips_dspr2 = no ; then
692 have_mips_dspr2=disabled
695 if test $have_mips_dspr2 = yes ; then
696 AC_DEFINE(USE_MIPS_DSPR2, 1, [use MIPS DSPr2 assembly optimizations])
699 AM_CONDITIONAL(USE_MIPS_DSPR2, test $have_mips_dspr2 = yes)
701 AC_MSG_RESULT($have_mips_dspr2)
702 if test $enable_mips_dspr2 = yes && test $have_mips_dspr2 = no ; then
703 AC_MSG_ERROR([MIPS DSPr2 instructions not detected])
706 dnl =========================================================================================
707 dnl Check for GNU-style inline assembly support
709 have_gcc_inline_asm=no
710 AC_MSG_CHECKING(whether to use GNU-style inline assembler)
711 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
713 /* Most modern architectures have a NOP instruction, so this is a fairly generic test. */
714 asm volatile ( "\tnop\n" : : : "cc", "memory" );
716 }]])], have_gcc_inline_asm=yes)
718 AC_ARG_ENABLE(gcc-inline-asm,
719 [AC_HELP_STRING([--disable-gcc-inline-asm],
720 [disable GNU-style inline assembler])],
721 [enable_gcc_inline_asm=$enableval], [enable_gcc_inline_asm=auto])
723 if test $enable_gcc_inline_asm = no ; then
724 have_gcc_inline_asm=disabled
727 if test $have_gcc_inline_asm = yes ; then
728 AC_DEFINE(USE_GCC_INLINE_ASM, 1, [use GNU-style inline assembler])
731 AC_MSG_RESULT($have_gcc_inline_asm)
732 if test $enable_gcc_inline_asm = yes && test $have_gcc_inline_asm = no ; then
733 AC_MSG_ERROR([GNU-style inline assembler not detected])
736 AM_CONDITIONAL(USE_GCC_INLINE_ASM, test $have_gcc_inline_asm = yes)
738 dnl ==============================================
739 dnl Static test programs
741 AC_ARG_ENABLE(static-testprogs,
742 [AC_HELP_STRING([--enable-static-testprogs],
743 [build test programs as static binaries [default=no]])],
744 [enable_static_testprogs=$enableval], [enable_static_testprogs=no])
746 TESTPROGS_EXTRA_LDFLAGS=
747 if test "x$enable_static_testprogs" = "xyes" ; then
748 TESTPROGS_EXTRA_LDFLAGS="-all-static"
750 AC_SUBST(TESTPROGS_EXTRA_LDFLAGS)
752 dnl ==============================================
755 AC_ARG_ENABLE(timers,
756 [AC_HELP_STRING([--enable-timers],
757 [enable TIMER_BEGIN and TIMER_END macros [default=no]])],
758 [enable_timers=$enableval], [enable_timers=no])
760 if test $enable_timers = yes ; then
761 AC_DEFINE(PIXMAN_TIMERS, 1, [enable TIMER_BEGIN/TIMER_END macros])
763 AC_SUBST(PIXMAN_TIMERS)
765 dnl ===================================
769 [AC_HELP_STRING([--enable-gtk],
770 [enable tests using GTK+ [default=auto]])],
771 [enable_gtk=$enableval], [enable_gtk=auto])
775 if test $enable_gtk = yes ; then
776 AC_CHECK_LIB([pixman-1], [pixman_version_string])
777 PKG_CHECK_MODULES(GTK, [gtk+-2.0 pixman-1])
780 if test $enable_gtk = auto ; then
781 AC_CHECK_LIB([pixman-1], [pixman_version_string], [enable_gtk=auto], [enable_gtk=no])
784 if test $enable_gtk = auto ; then
785 PKG_CHECK_MODULES(GTK, [gtk+-2.0 pixman-1], [enable_gtk=yes], [enable_gtk=no])
788 AM_CONDITIONAL(HAVE_GTK, [test "x$enable_gtk" = xyes])
795 dnl =====================================
796 dnl posix_memalign, sigaction, alarm, gettimeofday
798 AC_CHECK_FUNC(posix_memalign, have_posix_memalign=yes, have_posix_memalign=no)
799 if test x$have_posix_memalign = xyes; then
800 AC_DEFINE(HAVE_POSIX_MEMALIGN, 1, [Whether we have posix_memalign()])
803 AC_CHECK_FUNC(sigaction, have_sigaction=yes, have_sigaction=no)
804 if test x$have_sigaction = xyes; then
805 AC_DEFINE(HAVE_SIGACTION, 1, [Whether we have sigaction()])
808 AC_CHECK_FUNC(alarm, have_alarm=yes, have_alarm=no)
809 if test x$have_alarm = xyes; then
810 AC_DEFINE(HAVE_ALARM, 1, [Whether we have alarm()])
813 AC_CHECK_HEADER([sys/mman.h],
814 [AC_DEFINE(HAVE_SYS_MMAN_H, [1], [Define to 1 if we have <sys/mman.h>])])
816 AC_CHECK_FUNC(mmap, have_mmap=yes, have_mmap=no)
817 if test x$have_mmap = xyes; then
818 AC_DEFINE(HAVE_MMAP, 1, [Whether we have mmap()])
821 AC_CHECK_FUNC(mprotect, have_mprotect=yes, have_mprotect=no)
822 if test x$have_mprotect = xyes; then
823 AC_DEFINE(HAVE_MPROTECT, 1, [Whether we have mprotect()])
826 AC_CHECK_FUNC(getpagesize, have_getpagesize=yes, have_getpagesize=no)
827 if test x$have_getpagesize = xyes; then
828 AC_DEFINE(HAVE_GETPAGESIZE, 1, [Whether we have getpagesize()])
831 AC_CHECK_HEADER([fenv.h],
832 [AC_DEFINE(HAVE_FENV_H, [1], [Define to 1 if we have <fenv.h>])])
834 AC_CHECK_LIB(m, feenableexcept, have_feenableexcept=yes, have_feenableexcept=no)
835 if test x$have_feenableexcept = xyes; then
836 AC_DEFINE(HAVE_FEENABLEEXCEPT, 1, [Whether we have feenableexcept()])
839 AC_CHECK_FUNC(gettimeofday, have_gettimeofday=yes, have_gettimeofday=no)
840 AC_CHECK_HEADER(sys/time.h, have_sys_time_h=yes, have_sys_time_h=no)
841 if test x$have_gettimeofday = xyes && test x$have_sys_time_h = xyes; then
842 AC_DEFINE(HAVE_GETTIMEOFDAY, 1, [Whether we have gettimeofday()])
845 dnl =====================================
846 dnl Thread local storage
848 AC_MSG_CHECKING(for thread local storage (TLS) support)
849 AC_CACHE_VAL(ac_cv_tls, [
851 keywords="__thread __declspec(thread)"
852 for kw in $keywords ; do
854 #if defined(__MINGW32__) && !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5))
855 #error This MinGW version has broken __thread support
858 #error OpenBSD has broken __thread support
861 int $kw test;], [], ac_cv_tls=$kw)
864 AC_MSG_RESULT($ac_cv_tls)
866 if test "$ac_cv_tls" != "none"; then
867 AC_DEFINE_UNQUOTED([TLS], $ac_cv_tls, [The compiler supported TLS storage class])
874 m4_define([pthread_test_program],AC_LANG_SOURCE([[dnl
878 static pthread_once_t once_control = PTHREAD_ONCE_INIT;
879 static pthread_key_t key;
884 pthread_key_create (&key, NULL);
892 if (pthread_once (&once_control, make_key) != 0)
898 value = pthread_getspecific (key);
901 value = malloc (100);
902 pthread_setspecific (key, value);
909 AC_DEFUN([PIXMAN_CHECK_PTHREAD],[dnl
910 if test "z$support_for_pthread_setspecific" != "zyes"; then
911 PIXMAN_LINK_WITH_ENV(
912 [$1], [pthread_test_program],
913 [PTHREAD_CFLAGS="$CFLAGS"
915 PTHREAD_LDFLAGS="$LDFLAGS"
916 support_for_pthread_setspecific=yes])
920 if test $ac_cv_tls = none ; then
921 support_for_pthread_setspecific=no
923 AC_MSG_CHECKING(for pthread_setspecific)
925 PIXMAN_CHECK_PTHREAD([CFLAGS="-D_REENTRANT"; LIBS="-lpthread"])
926 PIXMAN_CHECK_PTHREAD([CFLAGS="-pthread"; LDFLAGS="-pthread"])
927 PIXMAN_CHECK_PTHREAD([CFLAGS="-D_REENTRANT"; LDFLAGS="-lroot"])
929 if test $support_for_pthread_setspecific = yes; then
930 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
931 AC_DEFINE([HAVE_PTHREAD_SETSPECIFIC], [], [Whether pthread_setspecific() is supported])
934 AC_MSG_RESULT($support_for_pthread_setspecific);
937 AC_SUBST(TOOLCHAIN_SUPPORTS__THREAD)
938 AC_SUBST(HAVE_PTHREAD_SETSPECIFIC)
939 AC_SUBST(PTHREAD_LDFLAGS)
940 AC_SUBST(PTHREAD_LIBS)
942 dnl =====================================
943 dnl __attribute__((constructor))
945 support_for_attribute_constructor=no
947 AC_MSG_CHECKING(for __attribute__((constructor)))
948 AC_LINK_IFELSE([AC_LANG_SOURCE([[
949 #if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7))
950 /* attribute 'constructor' is supported since gcc 2.7, but some compilers
951 * may only pretend to be gcc, so let's try to actually use it
954 static void __attribute__((constructor)) constructor_function () { x = 0; }
955 int main (void) { return x; }
957 #error not gcc or gcc version is older than 2.7
959 ]])], support_for_attribute_constructor=yes)
961 if test x$support_for_attribute_constructor = xyes; then
962 AC_DEFINE([TOOLCHAIN_SUPPORTS_ATTRIBUTE_CONSTRUCTOR],
963 [],[Whether the tool chain supports __attribute__((constructor))])
966 AC_MSG_RESULT($support_for_attribute_constructor)
967 AC_SUBST(TOOLCHAIN_SUPPORTS_ATTRIBUTE_CONSTRUCTOR)
969 dnl ==================
972 AC_ARG_ENABLE(libpng, AS_HELP_STRING([--enable-libpng], [Build support for libpng (default: auto)]),
973 [have_libpng=$enableval], [have_libpng=auto])
975 case x$have_libpng in
976 xyes) PKG_CHECK_MODULES(PNG, [libpng]) ;;
978 *) PKG_CHECK_MODULES(PNG, [libpng], have_libpng=yes, have_libpng=no) ;;
981 if test x$have_libpng = xyes; then
982 AC_DEFINE([HAVE_LIBPNG], [1], [Whether we have libpng])
985 AC_SUBST(HAVE_LIBPNG)
987 AC_OUTPUT([pixman-1.pc
988 pixman-1-uninstalled.pc
991 pixman/pixman-version.h
995 m4_if(m4_eval(pixman_minor % 2), [1], [
997 echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
999 echo " Thanks for testing this development snapshot of pixman. Please"
1000 echo " report any problems you find, either by sending email to "
1002 echo " pixman@lists.freedesktop.org"
1004 echo " or by filing a bug at "
1006 echo " https://bugs.freedesktop.org/enter_bug.cgi?product=pixman "
1008 echo " If you are looking for a stable release of pixman, please note "
1009 echo " that stable releases have _even_ minor version numbers. Ie., "
1010 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 "
1011 echo " development snapshot that may contain bugs and experimental "
1014 echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"