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], 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 ===========================================================================
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 #if defined(__clang__)
298 #error "clang chokes on the inline assembly in pixman-mmx.c"
300 #include <mmintrin.h>
302 __m64 v = _mm_cvtsi32_si64 (1);
303 return _mm_cvtsi64_si32 (v);
304 }]])], have_mmx_intrinsics=yes)
305 CFLAGS=$xserver_save_CFLAGS
308 [AC_HELP_STRING([--disable-mmx],
309 [disable x86 MMX fast paths])],
310 [enable_mmx=$enableval], [enable_mmx=auto])
312 if test $enable_mmx = no ; then
313 have_mmx_intrinsics=disabled
316 if test $have_mmx_intrinsics = yes ; then
317 AC_DEFINE(USE_X86_MMX, 1, [use x86 MMX compiler intrinsics])
322 AC_MSG_RESULT($have_mmx_intrinsics)
323 if test $enable_mmx = yes && test $have_mmx_intrinsics = no ; then
324 AC_MSG_ERROR([x86 MMX intrinsics not detected])
327 AM_CONDITIONAL(USE_X86_MMX, test $have_mmx_intrinsics = yes)
329 dnl ===========================================================================
332 if test "x$SSE2_CFLAGS" = "x" ; then
333 if test "x$SUNCC" = "xyes"; then
334 # SSE2 is enabled by default in the Sun Studio 64-bit environment
335 if test "$AMD64_ABI" = "no" ; then
336 SSE2_CFLAGS="-xarch=sse2"
339 SSE2_CFLAGS="-msse2 -Winline"
343 have_sse2_intrinsics=no
344 AC_MSG_CHECKING(whether to use SSE2 intrinsics)
345 xserver_save_CFLAGS=$CFLAGS
346 CFLAGS="$SSE2_CFLAGS $CFLAGS"
348 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
349 #if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 2))
350 # if !defined(__amd64__) && !defined(__x86_64__)
351 # error "Need GCC >= 4.2 for SSE2 intrinsics on x86"
354 #include <mmintrin.h>
355 #include <xmmintrin.h>
356 #include <emmintrin.h>
358 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
359 c = _mm_xor_si128 (a, b);
361 }]])], have_sse2_intrinsics=yes)
362 CFLAGS=$xserver_save_CFLAGS
365 [AC_HELP_STRING([--disable-sse2],
366 [disable SSE2 fast paths])],
367 [enable_sse2=$enableval], [enable_sse2=auto])
369 if test $enable_sse2 = no ; then
370 have_sse2_intrinsics=disabled
373 if test $have_sse2_intrinsics = yes ; then
374 AC_DEFINE(USE_SSE2, 1, [use SSE2 compiler intrinsics])
377 AC_MSG_RESULT($have_sse2_intrinsics)
378 if test $enable_sse2 = yes && test $have_sse2_intrinsics = no ; then
379 AC_MSG_ERROR([SSE2 intrinsics not detected])
382 AM_CONDITIONAL(USE_SSE2, test $have_sse2_intrinsics = yes)
384 dnl ===========================================================================
385 dnl Other special flags needed when building code using MMX or SSE instructions
388 # When building 32-bit binaries, apply a mapfile to ensure that the
389 # binaries aren't flagged as only able to run on MMX+SSE capable CPUs
390 # since they check at runtime before using those instructions.
391 # Not all linkers grok the mapfile format so we check for that first.
392 if test "$AMD64_ABI" = "no" ; then
394 AC_MSG_CHECKING(whether to use a hardware capability map file)
395 hwcap_save_LDFLAGS="$LDFLAGS"
396 HWCAP_LDFLAGS='-Wl,-M,$(srcdir)/solaris-hwcap.mapfile'
397 LDFLAGS="$LDFLAGS -Wl,-M,pixman/solaris-hwcap.mapfile"
398 AC_LINK_IFELSE([AC_LANG_SOURCE([[int main() { return 0; }]])],
399 use_hwcap_mapfile=yes,
401 LDFLAGS="$hwcap_save_LDFLAGS"
402 AC_MSG_RESULT($use_hwcap_mapfile)
404 if test "x$MMX_LDFLAGS" = "x" ; then
405 MMX_LDFLAGS="$HWCAP_LDFLAGS"
407 if test "x$SSE2_LDFLAGS" = "x" ; then
408 SSE2_LDFLAGS="$HWCAP_LDFLAGS"
413 AC_SUBST(IWMMXT_CFLAGS)
415 AC_SUBST(MMX_LDFLAGS)
416 AC_SUBST(SSE2_CFLAGS)
417 AC_SUBST(SSE2_LDFLAGS)
419 dnl ===========================================================================
420 dnl Check for VMX/Altivec
421 if test -n "`$CC -v 2>&1 | grep version | grep Apple`"; then
422 VMX_CFLAGS="-faltivec"
424 VMX_CFLAGS="-maltivec -mabi=altivec"
427 have_vmx_intrinsics=no
428 AC_MSG_CHECKING(whether to use VMX/Altivec intrinsics)
429 xserver_save_CFLAGS=$CFLAGS
430 CFLAGS="$VMX_CFLAGS $CFLAGS"
431 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
432 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
433 #error "Need GCC >= 3.4 for sane altivec support"
437 vector unsigned int v = vec_splat_u32 (1);
440 }]])], have_vmx_intrinsics=yes)
441 CFLAGS=$xserver_save_CFLAGS
444 [AC_HELP_STRING([--disable-vmx],
445 [disable VMX fast paths])],
446 [enable_vmx=$enableval], [enable_vmx=auto])
448 if test $enable_vmx = no ; then
449 have_vmx_intrinsics=disabled
452 if test $have_vmx_intrinsics = yes ; then
453 AC_DEFINE(USE_VMX, 1, [use VMX compiler intrinsics])
458 AC_MSG_RESULT($have_vmx_intrinsics)
459 if test $enable_vmx = yes && test $have_vmx_intrinsics = no ; then
460 AC_MSG_ERROR([VMX intrinsics not detected])
465 AM_CONDITIONAL(USE_VMX, test $have_vmx_intrinsics = yes)
467 dnl ==========================================================================
468 dnl Check if assembler is gas compatible and supports ARM SIMD instructions
470 AC_MSG_CHECKING(whether to use ARM SIMD assembler)
471 xserver_save_CFLAGS=$CFLAGS
472 CFLAGS="-x assembler-with-cpp $CFLAGS"
473 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
480 #error EABI is required (to be sure that calling conventions are compatible)
483 uqadd8 r0, r0, r0]])], have_arm_simd=yes)
484 CFLAGS=$xserver_save_CFLAGS
486 AC_ARG_ENABLE(arm-simd,
487 [AC_HELP_STRING([--disable-arm-simd],
488 [disable ARM SIMD fast paths])],
489 [enable_arm_simd=$enableval], [enable_arm_simd=auto])
491 if test $enable_arm_simd = no ; then
492 have_arm_simd=disabled
495 if test $have_arm_simd = yes ; then
496 AC_DEFINE(USE_ARM_SIMD, 1, [use ARM SIMD assembly optimizations])
499 AM_CONDITIONAL(USE_ARM_SIMD, test $have_arm_simd = yes)
501 AC_MSG_RESULT($have_arm_simd)
502 if test $enable_arm_simd = yes && test $have_arm_simd = no ; then
503 AC_MSG_ERROR([ARM SIMD intrinsics not detected])
506 dnl ==========================================================================
507 dnl Check if assembler is gas compatible and supports NEON instructions
509 AC_MSG_CHECKING(whether to use ARM NEON assembler)
510 xserver_save_CFLAGS=$CFLAGS
511 CFLAGS="-x assembler-with-cpp $CFLAGS"
512 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
517 .eabi_attribute 10, 0
521 #error EABI is required (to be sure that calling conventions are compatible)
524 vmovn.u16 d0, q0]])], have_arm_neon=yes)
525 CFLAGS=$xserver_save_CFLAGS
527 AC_ARG_ENABLE(arm-neon,
528 [AC_HELP_STRING([--disable-arm-neon],
529 [disable ARM NEON fast paths])],
530 [enable_arm_neon=$enableval], [enable_arm_neon=auto])
532 if test $enable_arm_neon = no ; then
533 have_arm_neon=disabled
536 if test $have_arm_neon = yes ; then
537 AC_DEFINE(USE_ARM_NEON, 1, [use ARM NEON assembly optimizations])
540 AM_CONDITIONAL(USE_ARM_NEON, test $have_arm_neon = yes)
542 AC_MSG_RESULT($have_arm_neon)
543 if test $enable_arm_neon = yes && test $have_arm_neon = no ; then
544 AC_MSG_ERROR([ARM NEON intrinsics not detected])
547 dnl ===========================================================================
550 if test "x$IWMMXT_CFLAGS" = "x" ; then
551 IWMMXT_CFLAGS="-march=iwmmxt -flax-vector-conversions -Winline"
554 have_iwmmxt_intrinsics=no
555 AC_MSG_CHECKING(whether to use ARM IWMMXT intrinsics)
556 xserver_save_CFLAGS=$CFLAGS
557 CFLAGS="$IWMMXT_CFLAGS $CFLAGS"
558 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
560 #error "IWMMXT is only available on ARM"
562 #if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 6))
563 #error "Need GCC >= 4.6 for IWMMXT intrinsics"
565 #include <mmintrin.h>
570 } a = { .c = {1, 2, 3, 4, 5, 6, 7, 8} };
572 __m64 c = _mm_srli_si64 (a.v, b);
573 }]])], have_iwmmxt_intrinsics=yes)
574 CFLAGS=$xserver_save_CFLAGS
576 AC_ARG_ENABLE(arm-iwmmxt,
577 [AC_HELP_STRING([--disable-arm-iwmmxt],
578 [disable ARM IWMMXT fast paths])],
579 [enable_iwmmxt=$enableval], [enable_iwmmxt=auto])
581 if test $enable_iwmmxt = no ; then
582 have_iwmmxt_intrinsics=disabled
585 if test $have_iwmmxt_intrinsics = yes ; then
586 AC_DEFINE(USE_ARM_IWMMXT, 1, [use ARM IWMMXT compiler intrinsics])
591 AC_MSG_RESULT($have_iwmmxt_intrinsics)
592 if test $enable_iwmmxt = yes && test $have_iwmmxt_intrinsics = no ; then
593 AC_MSG_ERROR([IWMMXT intrinsics not detected])
596 AM_CONDITIONAL(USE_ARM_IWMMXT, test $have_iwmmxt_intrinsics = yes)
598 dnl ==========================================================================
599 dnl Check if assembler is gas compatible and supports MIPS DSPr2 instructions
602 AC_MSG_CHECKING(whether to use MIPS DSPr2 assembler)
603 xserver_save_CFLAGS=$CFLAGS
604 CFLAGS="-mdspr2 $CFLAGS"
607 #if !(defined(__mips__) && __mips_isa_rev >= 2)
608 #error MIPS DSPr2 is currently only available on MIPS32r2 platforms.
613 int c = 0, a = 0, b = 0;
614 __asm__ __volatile__ (
615 "precr.qb.ph %[c], %[a], %[b] \n\t"
617 : [a] "r" (a), [b] "r" (b)
620 }]], have_mips_dspr2=yes)
621 CFLAGS=$xserver_save_CFLAGS
623 AC_ARG_ENABLE(mips-dspr2,
624 [AC_HELP_STRING([--disable-mips-dspr2],
625 [disable MIPS DSPr2 fast paths])],
626 [enable_mips_dspr2=$enableval], [enable_mips_dspr2=auto])
628 if test $enable_mips_dspr2 = no ; then
629 have_mips_dspr2=disabled
632 if test $have_mips_dspr2 = yes ; then
633 AC_DEFINE(USE_MIPS_DSPR2, 1, [use MIPS DSPr2 assembly optimizations])
636 AM_CONDITIONAL(USE_MIPS_DSPR2, test $have_mips_dspr2 = yes)
638 AC_MSG_RESULT($have_mips_dspr2)
639 if test $enable_mips_dspr2 = yes && test $have_mips_dspr2 = no ; then
640 AC_MSG_ERROR([MIPS DSPr2 instructions not detected])
643 dnl =========================================================================================
644 dnl Check for GNU-style inline assembly support
646 have_gcc_inline_asm=no
647 AC_MSG_CHECKING(whether to use GNU-style inline assembler)
648 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
650 /* Most modern architectures have a NOP instruction, so this is a fairly generic test. */
651 asm volatile ( "\tnop\n" : : : "cc", "memory" );
653 }]])], have_gcc_inline_asm=yes)
655 AC_ARG_ENABLE(gcc-inline-asm,
656 [AC_HELP_STRING([--disable-gcc-inline-asm],
657 [disable GNU-style inline assembler])],
658 [enable_gcc_inline_asm=$enableval], [enable_gcc_inline_asm=auto])
660 if test $enable_gcc_inline_asm = no ; then
661 have_gcc_inline_asm=disabled
664 if test $have_gcc_inline_asm = yes ; then
665 AC_DEFINE(USE_GCC_INLINE_ASM, 1, [use GNU-style inline assembler])
668 AC_MSG_RESULT($have_gcc_inline_asm)
669 if test $enable_gcc_inline_asm = yes && test $have_gcc_inline_asm = no ; then
670 AC_MSG_ERROR([GNU-style inline assembler not detected])
673 AM_CONDITIONAL(USE_GCC_INLINE_ASM, test $have_gcc_inline_asm = yes)
675 dnl ==============================================
676 dnl Static test programs
678 AC_ARG_ENABLE(static-testprogs,
679 [AC_HELP_STRING([--enable-static-testprogs],
680 [build test programs as static binaries [default=no]])],
681 [enable_static_testprogs=$enableval], [enable_static_testprogs=no])
683 TESTPROGS_EXTRA_LDFLAGS=
684 if test "x$enable_static_testprogs" = "xyes" ; then
685 TESTPROGS_EXTRA_LDFLAGS="-all-static"
687 AC_SUBST(TESTPROGS_EXTRA_LDFLAGS)
689 dnl ==============================================
692 AC_ARG_ENABLE(timers,
693 [AC_HELP_STRING([--enable-timers],
694 [enable TIMER_BEGIN and TIMER_END macros [default=no]])],
695 [enable_timers=$enableval], [enable_timers=no])
697 if test $enable_timers = yes ; then
698 AC_DEFINE(PIXMAN_TIMERS, 1, [enable TIMER_BEGIN/TIMER_END macros])
700 AC_SUBST(PIXMAN_TIMERS)
702 dnl ===================================
706 [AC_HELP_STRING([--enable-gtk],
707 [enable tests using GTK+ [default=auto]])],
708 [enable_gtk=$enableval], [enable_gtk=auto])
712 if test $enable_gtk = yes ; then
713 AC_CHECK_LIB([pixman-1], [pixman_version_string])
714 PKG_CHECK_MODULES(GTK, [gtk+-2.0 pixman-1])
717 if test $enable_gtk = auto ; then
718 AC_CHECK_LIB([pixman-1], [pixman_version_string], [enable_gtk=auto], [enable_gtk=no])
721 if test $enable_gtk = auto ; then
722 PKG_CHECK_MODULES(GTK, [gtk+-2.0 pixman-1], [enable_gtk=yes], [enable_gtk=no])
725 AM_CONDITIONAL(HAVE_GTK, [test "x$enable_gtk" = xyes])
732 dnl =====================================
733 dnl posix_memalign, sigaction, alarm, gettimeofday
735 AC_CHECK_FUNC(posix_memalign, have_posix_memalign=yes, have_posix_memalign=no)
736 if test x$have_posix_memalign = xyes; then
737 AC_DEFINE(HAVE_POSIX_MEMALIGN, 1, [Whether we have posix_memalign()])
740 AC_CHECK_FUNC(sigaction, have_sigaction=yes, have_sigaction=no)
741 if test x$have_sigaction = xyes; then
742 AC_DEFINE(HAVE_SIGACTION, 1, [Whether we have sigaction()])
745 AC_CHECK_FUNC(alarm, have_alarm=yes, have_alarm=no)
746 if test x$have_alarm = xyes; then
747 AC_DEFINE(HAVE_ALARM, 1, [Whether we have alarm()])
750 AC_CHECK_HEADER([sys/mman.h],
751 [AC_DEFINE(HAVE_SYS_MMAN_H, [1], [Define to 1 if we have <sys/mman.h>])])
753 AC_CHECK_FUNC(mmap, have_mmap=yes, have_mmap=no)
754 if test x$have_mmap = xyes; then
755 AC_DEFINE(HAVE_MMAP, 1, [Whether we have mmap()])
758 AC_CHECK_FUNC(mprotect, have_mprotect=yes, have_mprotect=no)
759 if test x$have_mprotect = xyes; then
760 AC_DEFINE(HAVE_MPROTECT, 1, [Whether we have mprotect()])
763 AC_CHECK_FUNC(getpagesize, have_getpagesize=yes, have_getpagesize=no)
764 if test x$have_getpagesize = xyes; then
765 AC_DEFINE(HAVE_GETPAGESIZE, 1, [Whether we have getpagesize()])
768 AC_CHECK_HEADER([fenv.h],
769 [AC_DEFINE(HAVE_FENV_H, [1], [Define to 1 if we have <fenv.h>])])
771 AC_CHECK_LIB(m, feenableexcept, have_feenableexcept=yes, have_feenableexcept=no)
772 if test x$have_feenableexcept = xyes; then
773 AC_DEFINE(HAVE_FEENABLEEXCEPT, 1, [Whether we have feenableexcept()])
776 AC_CHECK_FUNC(gettimeofday, have_gettimeofday=yes, have_gettimeofday=no)
777 AC_CHECK_HEADER(sys/time.h, have_sys_time_h=yes, have_sys_time_h=no)
778 if test x$have_gettimeofday = xyes && test x$have_sys_time_h = xyes; then
779 AC_DEFINE(HAVE_GETTIMEOFDAY, 1, [Whether we have gettimeofday()])
782 dnl =====================================
783 dnl Thread local storage
785 support_for__thread=no
787 AC_MSG_CHECKING(for __thread)
788 AC_LINK_IFELSE([AC_LANG_SOURCE([[
789 #if defined(__MINGW32__) && !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5))
790 #error This MinGW version has broken __thread support
793 #error OpenBSD has broken __thread support
795 static __thread int x ;
796 int main () { x = 123; return x; }
797 ]])], support_for__thread=yes)
799 if test $support_for__thread = yes; then
800 AC_DEFINE([TOOLCHAIN_SUPPORTS__THREAD],[],[Whether the tool chain supports __thread])
803 AC_MSG_RESULT($support_for__thread)
809 m4_define([pthread_test_program],AC_LANG_SOURCE([[dnl
813 static pthread_once_t once_control = PTHREAD_ONCE_INIT;
814 static pthread_key_t key;
819 pthread_key_create (&key, NULL);
827 if (pthread_once (&once_control, make_key) != 0)
833 value = pthread_getspecific (key);
836 value = malloc (100);
837 pthread_setspecific (key, value);
844 AC_DEFUN([PIXMAN_CHECK_PTHREAD],[dnl
845 if test "z$support_for_pthread_setspecific" != "zyes"; then
846 PIXMAN_LINK_WITH_ENV(
847 [$1], [pthread_test_program],
848 [PTHREAD_CFLAGS="$CFLAGS"
850 PTHREAD_LDFLAGS="$LDFLAGS"
851 support_for_pthread_setspecific=yes])
855 if test $support_for__thread = no; then
856 support_for_pthread_setspecific=no
858 AC_MSG_CHECKING(for pthread_setspecific)
860 PIXMAN_CHECK_PTHREAD([CFLAGS="-D_REENTRANT"; LIBS="-lpthread"])
861 PIXMAN_CHECK_PTHREAD([CFLAGS="-pthread"; LDFLAGS="-pthread"])
862 PIXMAN_CHECK_PTHREAD([CFLAGS="-D_REENTRANT"; LDFLAGS="-lroot"])
864 if test $support_for_pthread_setspecific = yes; then
865 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
866 AC_DEFINE([HAVE_PTHREAD_SETSPECIFIC], [], [Whether pthread_setspecific() is supported])
869 AC_MSG_RESULT($support_for_pthread_setspecific);
872 AC_SUBST(TOOLCHAIN_SUPPORTS__THREAD)
873 AC_SUBST(HAVE_PTHREAD_SETSPECIFIC)
874 AC_SUBST(PTHREAD_LDFLAGS)
875 AC_SUBST(PTHREAD_LIBS)
877 dnl =====================================
878 dnl __attribute__((constructor))
880 support_for_attribute_constructor=no
882 AC_MSG_CHECKING(for __attribute__((constructor)))
883 AC_LINK_IFELSE([AC_LANG_SOURCE([[
884 #if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7))
885 /* attribute 'constructor' is supported since gcc 2.7, but some compilers
886 * may only pretend to be gcc, so let's try to actually use it
889 static void __attribute__((constructor)) constructor_function () { x = 0; }
890 int main (void) { return x; }
892 #error not gcc or gcc version is older than 2.7
894 ]])], support_for_attribute_constructor=yes)
896 if test x$support_for_attribute_constructor = xyes; then
897 AC_DEFINE([TOOLCHAIN_SUPPORTS_ATTRIBUTE_CONSTRUCTOR],
898 [],[Whether the tool chain supports __attribute__((constructor))])
901 AC_MSG_RESULT($support_for_attribute_constructor)
902 AC_SUBST(TOOLCHAIN_SUPPORTS_ATTRIBUTE_CONSTRUCTOR)
904 dnl ==================
907 AC_ARG_ENABLE(libpng, AS_HELP_STRING([--enable-libpng], [Build support for libpng (default: auto)]),
908 [have_libpng=$enableval], [have_libpng=auto])
910 case x$have_libpng in
911 xyes) PKG_CHECK_MODULES(PNG, [libpng]) ;;
913 *) PKG_CHECK_MODULES(PNG, [libpng], have_libpng=yes, have_libpng=no) ;;
916 if test x$have_libpng = xyes; then
917 AC_DEFINE([HAVE_LIBPNG], [1], [Whether we have libpng])
920 AC_SUBST(HAVE_LIBPNG)
922 AC_OUTPUT([pixman-1.pc
923 pixman-1-uninstalled.pc
926 pixman/pixman-version.h
930 m4_if(m4_eval(pixman_minor % 2), [1], [
932 echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
934 echo " Thanks for testing this development snapshot of pixman. Please"
935 echo " report any problems you find, either by sending email to "
937 echo " pixman@lists.freedesktop.org"
939 echo " or by filing a bug at "
941 echo " https://bugs.freedesktop.org/enter_bug.cgi?product=pixman "
943 echo " If you are looking for a stable release of pixman, please note "
944 echo " that stable releases have _even_ minor version numbers. Ie., "
945 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 "
946 echo " development snapshot that may contain bugs and experimental "
949 echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"