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], 25)
57 m4_define([pixman_micro], 3)
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 ===========================================================================
276 if test "x$MMX_CFLAGS" = "x" ; then
277 if test "x$SUNCC" = "xyes"; then
278 # Sun Studio doesn't have an -xarch=mmx flag, so we have to use sse
279 # but if we're building 64-bit, mmx & sse support is on by default and
280 # -xarch=sse throws an error instead
281 if test "$AMD64_ABI" = "no" ; then
282 MMX_CFLAGS="-xarch=sse"
285 MMX_CFLAGS="-mmmx -Winline"
289 have_mmx_intrinsics=no
290 AC_MSG_CHECKING(whether to use MMX intrinsics)
291 xserver_save_CFLAGS=$CFLAGS
292 CFLAGS="$MMX_CFLAGS $CFLAGS"
293 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
294 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
295 #error "Need GCC >= 3.4 for MMX intrinsics"
297 #include <mmintrin.h>
299 __m64 v = _mm_cvtsi32_si64 (1);
300 return _mm_cvtsi64_si32 (v);
301 }]])], have_mmx_intrinsics=yes)
302 CFLAGS=$xserver_save_CFLAGS
305 [AC_HELP_STRING([--disable-mmx],
306 [disable x86 MMX fast paths])],
307 [enable_mmx=$enableval], [enable_mmx=auto])
309 if test $enable_mmx = no ; then
310 have_mmx_intrinsics=disabled
313 if test $have_mmx_intrinsics = yes ; then
314 AC_DEFINE(USE_X86_MMX, 1, [use x86 MMX compiler intrinsics])
319 AC_MSG_RESULT($have_mmx_intrinsics)
320 if test $enable_mmx = yes && test $have_mmx_intrinsics = no ; then
321 AC_MSG_ERROR([x86 MMX intrinsics not detected])
324 AM_CONDITIONAL(USE_X86_MMX, test $have_mmx_intrinsics = yes)
326 dnl ===========================================================================
329 if test "x$SSE2_CFLAGS" = "x" ; then
330 if test "x$SUNCC" = "xyes"; then
331 # SSE2 is enabled by default in the Sun Studio 64-bit environment
332 if test "$AMD64_ABI" = "no" ; then
333 SSE2_CFLAGS="-xarch=sse2"
336 SSE2_CFLAGS="-msse2 -Winline"
340 have_sse2_intrinsics=no
341 AC_MSG_CHECKING(whether to use SSE2 intrinsics)
342 xserver_save_CFLAGS=$CFLAGS
343 CFLAGS="$SSE2_CFLAGS $CFLAGS"
345 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
346 #if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 2))
347 # if !defined(__amd64__) && !defined(__x86_64__)
348 # error "Need GCC >= 4.2 for SSE2 intrinsics on x86"
351 #include <mmintrin.h>
352 #include <xmmintrin.h>
353 #include <emmintrin.h>
355 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
356 c = _mm_xor_si128 (a, b);
358 }]])], have_sse2_intrinsics=yes)
359 CFLAGS=$xserver_save_CFLAGS
362 [AC_HELP_STRING([--disable-sse2],
363 [disable SSE2 fast paths])],
364 [enable_sse2=$enableval], [enable_sse2=auto])
366 if test $enable_sse2 = no ; then
367 have_sse2_intrinsics=disabled
370 if test $have_sse2_intrinsics = yes ; then
371 AC_DEFINE(USE_SSE2, 1, [use SSE2 compiler intrinsics])
374 AC_MSG_RESULT($have_sse2_intrinsics)
375 if test $enable_sse2 = yes && test $have_sse2_intrinsics = no ; then
376 AC_MSG_ERROR([SSE2 intrinsics not detected])
379 AM_CONDITIONAL(USE_SSE2, test $have_sse2_intrinsics = yes)
381 dnl ===========================================================================
382 dnl Other special flags needed when building code using MMX or SSE instructions
385 # When building 32-bit binaries, apply a mapfile to ensure that the
386 # binaries aren't flagged as only able to run on MMX+SSE capable CPUs
387 # since they check at runtime before using those instructions.
388 # Not all linkers grok the mapfile format so we check for that first.
389 if test "$AMD64_ABI" = "no" ; then
391 AC_MSG_CHECKING(whether to use a hardware capability map file)
392 hwcap_save_LDFLAGS="$LDFLAGS"
393 HWCAP_LDFLAGS='-Wl,-M,$(srcdir)/solaris-hwcap.mapfile'
394 LDFLAGS="$LDFLAGS -Wl,-M,pixman/solaris-hwcap.mapfile"
395 AC_LINK_IFELSE([AC_LANG_SOURCE([[int main() { return 0; }]])],
396 use_hwcap_mapfile=yes,
398 LDFLAGS="$hwcap_save_LDFLAGS"
399 AC_MSG_RESULT($use_hwcap_mapfile)
401 if test "x$MMX_LDFLAGS" = "x" ; then
402 MMX_LDFLAGS="$HWCAP_LDFLAGS"
404 if test "x$SSE2_LDFLAGS" = "x" ; then
405 SSE2_LDFLAGS="$HWCAP_LDFLAGS"
410 AC_SUBST(IWMMXT_CFLAGS)
412 AC_SUBST(MMX_LDFLAGS)
413 AC_SUBST(SSE2_CFLAGS)
414 AC_SUBST(SSE2_LDFLAGS)
416 dnl ===========================================================================
417 dnl Check for VMX/Altivec
418 if test -n "`$CC -v 2>&1 | grep version | grep Apple`"; then
419 VMX_CFLAGS="-faltivec"
421 VMX_CFLAGS="-maltivec -mabi=altivec"
424 have_vmx_intrinsics=no
425 AC_MSG_CHECKING(whether to use VMX/Altivec intrinsics)
426 xserver_save_CFLAGS=$CFLAGS
427 CFLAGS="$VMX_CFLAGS $CFLAGS"
428 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
429 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
430 #error "Need GCC >= 3.4 for sane altivec support"
434 vector unsigned int v = vec_splat_u32 (1);
437 }]])], have_vmx_intrinsics=yes)
438 CFLAGS=$xserver_save_CFLAGS
441 [AC_HELP_STRING([--disable-vmx],
442 [disable VMX fast paths])],
443 [enable_vmx=$enableval], [enable_vmx=auto])
445 if test $enable_vmx = no ; then
446 have_vmx_intrinsics=disabled
449 if test $have_vmx_intrinsics = yes ; then
450 AC_DEFINE(USE_VMX, 1, [use VMX compiler intrinsics])
455 AC_MSG_RESULT($have_vmx_intrinsics)
456 if test $enable_vmx = yes && test $have_vmx_intrinsics = no ; then
457 AC_MSG_ERROR([VMX intrinsics not detected])
462 AM_CONDITIONAL(USE_VMX, test $have_vmx_intrinsics = yes)
464 dnl ==========================================================================
465 dnl Check if assembler is gas compatible and supports ARM SIMD instructions
467 AC_MSG_CHECKING(whether to use ARM SIMD assembler)
468 xserver_save_CFLAGS=$CFLAGS
469 CFLAGS="-x assembler-with-cpp $CFLAGS"
470 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
477 #error EABI is required (to be sure that calling conventions are compatible)
480 uqadd8 r0, r0, r0]])], have_arm_simd=yes)
481 CFLAGS=$xserver_save_CFLAGS
483 AC_ARG_ENABLE(arm-simd,
484 [AC_HELP_STRING([--disable-arm-simd],
485 [disable ARM SIMD fast paths])],
486 [enable_arm_simd=$enableval], [enable_arm_simd=auto])
488 if test $enable_arm_simd = no ; then
489 have_arm_simd=disabled
492 if test $have_arm_simd = yes ; then
493 AC_DEFINE(USE_ARM_SIMD, 1, [use ARM SIMD assembly optimizations])
496 AM_CONDITIONAL(USE_ARM_SIMD, test $have_arm_simd = yes)
498 AC_MSG_RESULT($have_arm_simd)
499 if test $enable_arm_simd = yes && test $have_arm_simd = no ; then
500 AC_MSG_ERROR([ARM SIMD intrinsics not detected])
503 dnl ==========================================================================
504 dnl Check if assembler is gas compatible and supports NEON instructions
506 AC_MSG_CHECKING(whether to use ARM NEON assembler)
507 xserver_save_CFLAGS=$CFLAGS
508 CFLAGS="-x assembler-with-cpp $CFLAGS"
509 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
514 .eabi_attribute 10, 0
518 #error EABI is required (to be sure that calling conventions are compatible)
521 vmovn.u16 d0, q0]])], have_arm_neon=yes)
522 CFLAGS=$xserver_save_CFLAGS
524 AC_ARG_ENABLE(arm-neon,
525 [AC_HELP_STRING([--disable-arm-neon],
526 [disable ARM NEON fast paths])],
527 [enable_arm_neon=$enableval], [enable_arm_neon=auto])
529 if test $enable_arm_neon = no ; then
530 have_arm_neon=disabled
533 if test $have_arm_neon = yes ; then
534 AC_DEFINE(USE_ARM_NEON, 1, [use ARM NEON assembly optimizations])
537 AM_CONDITIONAL(USE_ARM_NEON, test $have_arm_neon = yes)
539 AC_MSG_RESULT($have_arm_neon)
540 if test $enable_arm_neon = yes && test $have_arm_neon = no ; then
541 AC_MSG_ERROR([ARM NEON intrinsics not detected])
544 dnl ===========================================================================
547 if test "x$IWMMXT_CFLAGS" = "x" ; then
548 IWMMXT_CFLAGS="-march=iwmmxt -flax-vector-conversions -Winline"
551 have_iwmmxt_intrinsics=no
552 AC_MSG_CHECKING(whether to use ARM IWMMXT intrinsics)
553 xserver_save_CFLAGS=$CFLAGS
554 CFLAGS="$IWMMXT_CFLAGS $CFLAGS"
555 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
557 #error "IWMMXT is only available on ARM"
559 #if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 6))
560 #error "Need GCC >= 4.6 for IWMMXT intrinsics"
562 #include <mmintrin.h>
567 } a = { .c = {1, 2, 3, 4, 5, 6, 7, 8} };
569 __m64 c = _mm_srli_si64 (a.v, b);
570 }]])], have_iwmmxt_intrinsics=yes)
571 CFLAGS=$xserver_save_CFLAGS
573 AC_ARG_ENABLE(arm-iwmmxt,
574 [AC_HELP_STRING([--disable-arm-iwmmxt],
575 [disable ARM IWMMXT fast paths])],
576 [enable_iwmmxt=$enableval], [enable_iwmmxt=auto])
578 if test $enable_iwmmxt = no ; then
579 have_iwmmxt_intrinsics=disabled
582 if test $have_iwmmxt_intrinsics = yes ; then
583 AC_DEFINE(USE_ARM_IWMMXT, 1, [use ARM IWMMXT compiler intrinsics])
588 AC_MSG_RESULT($have_iwmmxt_intrinsics)
589 if test $enable_iwmmxt = yes && test $have_iwmmxt_intrinsics = no ; then
590 AC_MSG_ERROR([IWMMXT intrinsics not detected])
593 AM_CONDITIONAL(USE_ARM_IWMMXT, test $have_iwmmxt_intrinsics = yes)
595 dnl ==========================================================================
596 dnl Check if assembler is gas compatible and supports MIPS DSPr2 instructions
599 AC_MSG_CHECKING(whether to use MIPS DSPr2 assembler)
600 xserver_save_CFLAGS=$CFLAGS
601 CFLAGS="-mdspr2 $CFLAGS"
604 #if !(defined(__mips__) && __mips_isa_rev >= 2)
605 #error MIPS DSPr2 is currently only available on MIPS32r2 platforms.
610 int c = 0, a = 0, b = 0;
611 __asm__ __volatile__ (
612 "precr.qb.ph %[c], %[a], %[b] \n\t"
614 : [a] "r" (a), [b] "r" (b)
617 }]], have_mips_dspr2=yes)
618 CFLAGS=$xserver_save_CFLAGS
620 AC_ARG_ENABLE(mips-dspr2,
621 [AC_HELP_STRING([--disable-mips-dspr2],
622 [disable MIPS DSPr2 fast paths])],
623 [enable_mips_dspr2=$enableval], [enable_mips_dspr2=auto])
625 if test $enable_mips_dspr2 = no ; then
626 have_mips_dspr2=disabled
629 if test $have_mips_dspr2 = yes ; then
630 AC_DEFINE(USE_MIPS_DSPR2, 1, [use MIPS DSPr2 assembly optimizations])
633 AM_CONDITIONAL(USE_MIPS_DSPR2, test $have_mips_dspr2 = yes)
635 AC_MSG_RESULT($have_mips_dspr2)
636 if test $enable_mips_dspr2 = yes && test $have_mips_dspr2 = no ; then
637 AC_MSG_ERROR([MIPS DSPr2 instructions not detected])
640 dnl =========================================================================================
641 dnl Check for GNU-style inline assembly support
643 have_gcc_inline_asm=no
644 AC_MSG_CHECKING(whether to use GNU-style inline assembler)
645 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
647 /* Most modern architectures have a NOP instruction, so this is a fairly generic test. */
648 asm volatile ( "\tnop\n" : : : "cc", "memory" );
650 }]])], have_gcc_inline_asm=yes)
652 AC_ARG_ENABLE(gcc-inline-asm,
653 [AC_HELP_STRING([--disable-gcc-inline-asm],
654 [disable GNU-style inline assembler])],
655 [enable_gcc_inline_asm=$enableval], [enable_gcc_inline_asm=auto])
657 if test $enable_gcc_inline_asm = no ; then
658 have_gcc_inline_asm=disabled
661 if test $have_gcc_inline_asm = yes ; then
662 AC_DEFINE(USE_GCC_INLINE_ASM, 1, [use GNU-style inline assembler])
665 AC_MSG_RESULT($have_gcc_inline_asm)
666 if test $enable_gcc_inline_asm = yes && test $have_gcc_inline_asm = no ; then
667 AC_MSG_ERROR([GNU-style inline assembler not detected])
670 AM_CONDITIONAL(USE_GCC_INLINE_ASM, test $have_gcc_inline_asm = yes)
672 dnl ==============================================
673 dnl Static test programs
675 AC_ARG_ENABLE(static-testprogs,
676 [AC_HELP_STRING([--enable-static-testprogs],
677 [build test programs as static binaries [default=no]])],
678 [enable_static_testprogs=$enableval], [enable_static_testprogs=no])
680 TESTPROGS_EXTRA_LDFLAGS=
681 if test "x$enable_static_testprogs" = "xyes" ; then
682 TESTPROGS_EXTRA_LDFLAGS="-all-static"
684 AC_SUBST(TESTPROGS_EXTRA_LDFLAGS)
686 dnl ==============================================
689 AC_ARG_ENABLE(timers,
690 [AC_HELP_STRING([--enable-timers],
691 [enable TIMER_BEGIN and TIMER_END macros [default=no]])],
692 [enable_timers=$enableval], [enable_timers=no])
694 if test $enable_timers = yes ; then
695 AC_DEFINE(PIXMAN_TIMERS, 1, [enable TIMER_BEGIN/TIMER_END macros])
697 AC_SUBST(PIXMAN_TIMERS)
699 dnl ===================================
703 [AC_HELP_STRING([--enable-gtk],
704 [enable tests using GTK+ [default=auto]])],
705 [enable_gtk=$enableval], [enable_gtk=auto])
709 if test $enable_gtk = yes ; then
710 AC_CHECK_LIB([pixman-1], [pixman_version_string])
711 PKG_CHECK_MODULES(GTK, [gtk+-2.0 pixman-1])
714 if test $enable_gtk = auto ; then
715 AC_CHECK_LIB([pixman-1], [pixman_version_string], [enable_gtk=auto], [enable_gtk=no])
718 if test $enable_gtk = auto ; then
719 PKG_CHECK_MODULES(GTK, [gtk+-2.0 pixman-1], [enable_gtk=yes], [enable_gtk=no])
722 AM_CONDITIONAL(HAVE_GTK, [test "x$enable_gtk" = xyes])
729 dnl =====================================
730 dnl posix_memalign, sigaction, alarm, gettimeofday
732 AC_CHECK_FUNC(posix_memalign, have_posix_memalign=yes, have_posix_memalign=no)
733 if test x$have_posix_memalign = xyes; then
734 AC_DEFINE(HAVE_POSIX_MEMALIGN, 1, [Whether we have posix_memalign()])
737 AC_CHECK_FUNC(sigaction, have_sigaction=yes, have_sigaction=no)
738 if test x$have_sigaction = xyes; then
739 AC_DEFINE(HAVE_SIGACTION, 1, [Whether we have sigaction()])
742 AC_CHECK_FUNC(alarm, have_alarm=yes, have_alarm=no)
743 if test x$have_alarm = xyes; then
744 AC_DEFINE(HAVE_ALARM, 1, [Whether we have alarm()])
747 AC_CHECK_HEADER([sys/mman.h],
748 [AC_DEFINE(HAVE_SYS_MMAN_H, [1], [Define to 1 if we have <sys/mman.h>])])
750 AC_CHECK_FUNC(mmap, have_mmap=yes, have_mmap=no)
751 if test x$have_mmap = xyes; then
752 AC_DEFINE(HAVE_MMAP, 1, [Whether we have mmap()])
755 AC_CHECK_FUNC(mprotect, have_mprotect=yes, have_mprotect=no)
756 if test x$have_mprotect = xyes; then
757 AC_DEFINE(HAVE_MPROTECT, 1, [Whether we have mprotect()])
760 AC_CHECK_FUNC(getpagesize, have_getpagesize=yes, have_getpagesize=no)
761 if test x$have_getpagesize = xyes; then
762 AC_DEFINE(HAVE_GETPAGESIZE, 1, [Whether we have getpagesize()])
765 AC_CHECK_HEADER([fenv.h],
766 [AC_DEFINE(HAVE_FENV_H, [1], [Define to 1 if we have <fenv.h>])])
768 AC_CHECK_LIB(m, feenableexcept, have_feenableexcept=yes, have_feenableexcept=no)
769 if test x$have_feenableexcept = xyes; then
770 AC_DEFINE(HAVE_FEENABLEEXCEPT, 1, [Whether we have feenableexcept()])
773 AC_CHECK_FUNC(gettimeofday, have_gettimeofday=yes, have_gettimeofday=no)
774 AC_CHECK_HEADER(sys/time.h, have_sys_time_h=yes, have_sys_time_h=no)
775 if test x$have_gettimeofday = xyes && test x$have_sys_time_h = xyes; then
776 AC_DEFINE(HAVE_GETTIMEOFDAY, 1, [Whether we have gettimeofday()])
779 dnl =====================================
780 dnl Thread local storage
782 support_for__thread=no
784 AC_MSG_CHECKING(for __thread)
785 AC_LINK_IFELSE([AC_LANG_SOURCE([[
786 #if defined(__MINGW32__) && !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5))
787 #error This MinGW version has broken __thread support
790 #error OpenBSD has broken __thread support
792 static __thread int x ;
793 int main () { x = 123; return x; }
794 ]])], support_for__thread=yes)
796 if test $support_for__thread = yes; then
797 AC_DEFINE([TOOLCHAIN_SUPPORTS__THREAD],[],[Whether the tool chain supports __thread])
800 AC_MSG_RESULT($support_for__thread)
806 m4_define([pthread_test_program],AC_LANG_SOURCE([[dnl
810 static pthread_once_t once_control = PTHREAD_ONCE_INIT;
811 static pthread_key_t key;
816 pthread_key_create (&key, NULL);
824 if (pthread_once (&once_control, make_key) != 0)
830 value = pthread_getspecific (key);
833 value = malloc (100);
834 pthread_setspecific (key, value);
841 AC_DEFUN([PIXMAN_CHECK_PTHREAD],[dnl
842 if test "z$support_for_pthread_setspecific" != "zyes"; then
843 PIXMAN_LINK_WITH_ENV(
844 [$1], [pthread_test_program],
845 [PTHREAD_CFLAGS="$CFLAGS"
847 PTHREAD_LDFLAGS="$LDFLAGS"
848 support_for_pthread_setspecific=yes])
852 if test $support_for__thread = no; then
853 support_for_pthread_setspecific=no
855 AC_MSG_CHECKING(for pthread_setspecific)
857 PIXMAN_CHECK_PTHREAD([CFLAGS="-D_REENTRANT"; LIBS="-lpthread"])
858 PIXMAN_CHECK_PTHREAD([CFLAGS="-pthread"; LDFLAGS="-pthread"])
859 PIXMAN_CHECK_PTHREAD([CFLAGS="-D_REENTRANT"; LDFLAGS="-lroot"])
861 if test $support_for_pthread_setspecific = yes; then
862 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
863 AC_DEFINE([HAVE_PTHREAD_SETSPECIFIC], [], [Whether pthread_setspecific() is supported])
866 AC_MSG_RESULT($support_for_pthread_setspecific);
869 AC_SUBST(TOOLCHAIN_SUPPORTS__THREAD)
870 AC_SUBST(HAVE_PTHREAD_SETSPECIFIC)
871 AC_SUBST(PTHREAD_LDFLAGS)
872 AC_SUBST(PTHREAD_LIBS)
874 dnl =====================================
875 dnl __attribute__((constructor))
877 support_for_attribute_constructor=no
879 AC_MSG_CHECKING(for __attribute__((constructor)))
880 AC_LINK_IFELSE([AC_LANG_SOURCE([[
881 #if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7))
882 /* attribute 'constructor' is supported since gcc 2.7, but some compilers
883 * may only pretend to be gcc, so let's try to actually use it
886 static void __attribute__((constructor)) constructor_function () { x = 0; }
887 int main (void) { return x; }
889 #error not gcc or gcc version is older than 2.7
891 ]])], support_for_attribute_constructor=yes)
893 if test x$support_for_attribute_constructor = xyes; then
894 AC_DEFINE([TOOLCHAIN_SUPPORTS_ATTRIBUTE_CONSTRUCTOR],
895 [],[Whether the tool chain supports __attribute__((constructor))])
898 AC_MSG_RESULT($support_for_attribute_constructor)
899 AC_SUBST(TOOLCHAIN_SUPPORTS_ATTRIBUTE_CONSTRUCTOR)
901 dnl ==================
904 AC_ARG_ENABLE(libpng, AS_HELP_STRING([--enable-libpng], [Build support for libpng (default: auto)]),
905 [have_libpng=$enableval], [have_libpng=auto])
907 case x$have_libpng in
908 xyes) PKG_CHECK_MODULES(PNG, [libpng]) ;;
910 *) PKG_CHECK_MODULES(PNG, [libpng], have_libpng=yes, have_libpng=no) ;;
913 if test x$have_libpng = xyes; then
914 AC_DEFINE([HAVE_LIBPNG], [1], [Whether we have libpng])
917 AC_SUBST(HAVE_LIBPNG)
919 AC_OUTPUT([pixman-1.pc
920 pixman-1-uninstalled.pc
923 pixman/pixman-version.h
927 m4_if(m4_eval(pixman_minor % 2), [1], [
929 echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
931 echo " Thanks for testing this development snapshot of pixman. Please"
932 echo " report any problems you find, either by sending email to "
934 echo " pixman@lists.freedesktop.org"
936 echo " or by filing a bug at "
938 echo " https://bugs.freedesktop.org/enter_bug.cgi?product=pixman "
940 echo " If you are looking for a stable release of pixman, please note "
941 echo " that stable releases have _even_ minor version numbers. Ie., "
942 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 "
943 echo " development snapshot that may contain bugs and experimental "
946 echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"