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 even MICRO
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], 21)
57 m4_define([pixman_micro], 4)
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"
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 "$test_CFLAGS" == "" && \
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 supported by autoconf >=2.62)
197 m4_ifdef([AC_OPENMP], [AC_OPENMP])
199 m4_define([openmp_test_program],[dnl
202 extern unsigned int lcg_seed;
203 #pragma omp threadprivate(lcg_seed)
204 unsigned int lcg_seed;
206 unsigned function(unsigned a, unsigned b)
209 return ((a + b) ^ a ) + lcg_seed;
212 int main(int argc, char **argv)
215 int n1 = 0, n2 = argc;
216 unsigned checksum = 0;
217 int verbose = argv != NULL;
218 unsigned (*test_function)(unsigned, unsigned);
219 test_function = function;
220 #pragma omp parallel for reduction(+:checksum) default(none) \
221 shared(n1, n2, test_function, verbose)
222 for (i = n1; i < n2; i++)
224 unsigned crc = test_function (i, 0);
226 printf ("%d: %08X\n", i, crc);
229 printf("%u\n", checksum);
234 PIXMAN_LINK_WITH_ENV(
235 [CFLAGS="$OPENMP_CFLAGS" LDFLAGS="$OPENMP_CFLAGS"],
236 [openmp_test_program],
239 if test "x$have_openmp" = "xyes"; then
240 AC_DEFINE(USE_OPENMP, 1, [use OpenMP in the test suite])
244 AC_SUBST(OPENMP_CFLAGS)
246 dnl =========================================================================
247 dnl -fvisibility stuff
249 PIXMAN_CHECK_CFLAG([-fvisibility=hidden], [dnl
250 #if defined(__GNUC__) && (__GNUC__ >= 4)
252 #error Have -fvisibility but it is ignored and generates a warning
255 error Need GCC 4.0 for visibility
259 PIXMAN_CHECK_CFLAG([-xldscope=hidden], [dnl
260 #if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
262 error Need Sun Studio 8 for visibility
266 dnl ===========================================================================
269 if test "x$MMX_CFLAGS" = "x" ; then
270 if test "x$SUNCC" = "xyes"; then
271 # Sun Studio doesn't have an -xarch=mmx flag, so we have to use sse
272 # but if we're building 64-bit, mmx & sse support is on by default and
273 # -xarch=sse throws an error instead
274 if test "$AMD64_ABI" = "no" ; then
275 MMX_CFLAGS="-xarch=sse"
278 MMX_CFLAGS="-mmmx -Winline"
282 have_mmx_intrinsics=no
283 AC_MSG_CHECKING(whether to use MMX intrinsics)
284 xserver_save_CFLAGS=$CFLAGS
285 CFLAGS="$MMX_CFLAGS $CFLAGS"
287 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
288 error "Need GCC >= 3.4 for MMX intrinsics"
290 #include <mmintrin.h>
292 __m64 v = _mm_cvtsi32_si64 (1);
293 return _mm_cvtsi64_si32 (v);
294 }], have_mmx_intrinsics=yes)
295 CFLAGS=$xserver_save_CFLAGS
298 [AC_HELP_STRING([--disable-mmx],
299 [disable MMX fast paths])],
300 [enable_mmx=$enableval], [enable_mmx=auto])
302 if test $enable_mmx = no ; then
303 have_mmx_intrinsics=disabled
306 if test $have_mmx_intrinsics = yes ; then
307 AC_DEFINE(USE_MMX, 1, [use MMX compiler intrinsics])
312 AC_MSG_RESULT($have_mmx_intrinsics)
313 if test $enable_mmx = yes && test $have_mmx_intrinsics = no ; then
314 AC_MSG_ERROR([MMX intrinsics not detected])
317 AM_CONDITIONAL(USE_MMX, test $have_mmx_intrinsics = yes)
319 dnl ===========================================================================
322 if test "x$SSE2_CFLAGS" = "x" ; then
323 if test "x$SUNCC" = "xyes"; then
324 # SSE2 is enabled by default in the Sun Studio 64-bit environment
325 if test "$AMD64_ABI" = "no" ; then
326 SSE2_CFLAGS="-xarch=sse2"
329 SSE2_CFLAGS="-mmmx -msse2 -Winline"
333 have_sse2_intrinsics=no
334 AC_MSG_CHECKING(whether to use SSE2 intrinsics)
335 xserver_save_CFLAGS=$CFLAGS
336 CFLAGS="$SSE2_CFLAGS $CFLAGS"
339 #if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 2))
340 # if !defined(__amd64__) && !defined(__x86_64__)
341 # error "Need GCC >= 4.2 for SSE2 intrinsics on x86"
344 #include <mmintrin.h>
345 #include <xmmintrin.h>
346 #include <emmintrin.h>
348 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
349 c = _mm_xor_si128 (a, b);
351 }], have_sse2_intrinsics=yes)
352 CFLAGS=$xserver_save_CFLAGS
355 [AC_HELP_STRING([--disable-sse2],
356 [disable SSE2 fast paths])],
357 [enable_sse2=$enableval], [enable_sse2=auto])
359 if test $enable_sse2 = no ; then
360 have_sse2_intrinsics=disabled
363 if test $have_sse2_intrinsics = yes ; then
364 AC_DEFINE(USE_SSE2, 1, [use SSE2 compiler intrinsics])
367 AC_MSG_RESULT($have_sse2_intrinsics)
368 if test $enable_sse2 = yes && test $have_sse2_intrinsics = no ; then
369 AC_MSG_ERROR([SSE2 intrinsics not detected])
372 AM_CONDITIONAL(USE_SSE2, test $have_sse2_intrinsics = yes)
374 dnl ===========================================================================
375 dnl Other special flags needed when building code using MMX or SSE instructions
378 # When building 32-bit binaries, apply a mapfile to ensure that the
379 # binaries aren't flagged as only able to run on MMX+SSE capable CPUs
380 # since they check at runtime before using those instructions.
381 # Not all linkers grok the mapfile format so we check for that first.
382 if test "$AMD64_ABI" = "no" ; then
384 AC_MSG_CHECKING(whether to use a hardware capability map file)
385 hwcap_save_LDFLAGS="$LDFLAGS"
386 HWCAP_LDFLAGS='-Wl,-M,$(srcdir)/solaris-hwcap.mapfile'
387 LDFLAGS="$LDFLAGS -Wl,-M,pixman/solaris-hwcap.mapfile"
388 AC_LINK_IFELSE([int main() { return 0; }],
389 use_hwcap_mapfile=yes,
391 LDFLAGS="$hwcap_save_LDFLAGS"
392 AC_MSG_RESULT($use_hwcap_mapfile)
394 if test "x$MMX_LDFLAGS" = "x" ; then
395 MMX_LDFLAGS="$HWCAP_LDFLAGS"
397 if test "x$SSE2_LDFLAGS" = "x" ; then
398 SSE2_LDFLAGS="$HWCAP_LDFLAGS"
404 AC_SUBST(MMX_LDFLAGS)
405 AC_SUBST(SSE2_CFLAGS)
406 AC_SUBST(SSE2_LDFLAGS)
408 dnl ===========================================================================
409 dnl Check for VMX/Altivec
410 if test -n "`$CC -v 2>&1 | grep version | grep Apple`"; then
411 VMX_CFLAGS="-faltivec"
413 VMX_CFLAGS="-maltivec -mabi=altivec"
416 have_vmx_intrinsics=no
417 AC_MSG_CHECKING(whether to use VMX/Altivec intrinsics)
418 xserver_save_CFLAGS=$CFLAGS
419 CFLAGS="$VMX_CFLAGS $CFLAGS"
421 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
422 error "Need GCC >= 3.4 for sane altivec support"
426 vector unsigned int v = vec_splat_u32 (1);
429 }], have_vmx_intrinsics=yes)
430 CFLAGS=$xserver_save_CFLAGS
433 [AC_HELP_STRING([--disable-vmx],
434 [disable VMX fast paths])],
435 [enable_vmx=$enableval], [enable_vmx=auto])
437 if test $enable_vmx = no ; then
438 have_vmx_intrinsics=disabled
441 if test $have_vmx_intrinsics = yes ; then
442 AC_DEFINE(USE_VMX, 1, [use VMX compiler intrinsics])
447 AC_MSG_RESULT($have_vmx_intrinsics)
448 if test $enable_vmx = yes && test $have_vmx_intrinsics = no ; then
449 AC_MSG_ERROR([VMX intrinsics not detected])
454 AM_CONDITIONAL(USE_VMX, test $have_vmx_intrinsics = yes)
456 dnl ==========================================================================
457 dnl Check if assembler is gas compatible and supports ARM SIMD instructions
459 AC_MSG_CHECKING(whether to use ARM SIMD assembler)
460 xserver_save_CFLAGS=$CFLAGS
461 CFLAGS="-x assembler-with-cpp $CFLAGS"
469 #error EABI is required (to be sure that calling conventions are compatible)
472 uqadd8 r0, r0, r0]], have_arm_simd=yes)
473 CFLAGS=$xserver_save_CFLAGS
475 AC_ARG_ENABLE(arm-simd,
476 [AC_HELP_STRING([--disable-arm-simd],
477 [disable ARM SIMD fast paths])],
478 [enable_arm_simd=$enableval], [enable_arm_simd=auto])
480 if test $enable_arm_simd = no ; then
481 have_arm_simd=disabled
484 if test $have_arm_simd = yes ; then
485 AC_DEFINE(USE_ARM_SIMD, 1, [use ARM SIMD assembly optimizations])
488 AM_CONDITIONAL(USE_ARM_SIMD, test $have_arm_simd = yes)
490 AC_MSG_RESULT($have_arm_simd)
491 if test $enable_arm_simd = yes && test $have_arm_simd = no ; then
492 AC_MSG_ERROR([ARM SIMD intrinsics not detected])
495 dnl ==========================================================================
496 dnl Check if assembler is gas compatible and supports NEON instructions
498 AC_MSG_CHECKING(whether to use ARM NEON assembler)
499 xserver_save_CFLAGS=$CFLAGS
500 CFLAGS="-x assembler-with-cpp $CFLAGS"
506 .eabi_attribute 10, 0
510 #error EABI is required (to be sure that calling conventions are compatible)
513 vmovn.u16 d0, q0]], have_arm_neon=yes)
514 CFLAGS=$xserver_save_CFLAGS
516 AC_ARG_ENABLE(arm-neon,
517 [AC_HELP_STRING([--disable-arm-neon],
518 [disable ARM NEON fast paths])],
519 [enable_arm_neon=$enableval], [enable_arm_neon=auto])
521 if test $enable_arm_neon = no ; then
522 have_arm_neon=disabled
525 if test $have_arm_neon = yes ; then
526 AC_DEFINE(USE_ARM_NEON, 1, [use ARM NEON assembly optimizations])
529 AM_CONDITIONAL(USE_ARM_NEON, test $have_arm_neon = yes)
531 AC_MSG_RESULT($have_arm_neon)
532 if test $enable_arm_neon = yes && test $have_arm_neon = no ; then
533 AC_MSG_ERROR([ARM NEON intrinsics not detected])
536 dnl =========================================================================================
537 dnl Check for GNU-style inline assembly support
539 have_gcc_inline_asm=no
540 AC_MSG_CHECKING(whether to use GNU-style inline assembler)
543 /* Most modern architectures have a NOP instruction, so this is a fairly generic test. */
544 asm volatile ( "\tnop\n" : : : "cc", "memory" );
546 }], have_gcc_inline_asm=yes)
548 AC_ARG_ENABLE(gcc-inline-asm,
549 [AC_HELP_STRING([--disable-gcc-inline-asm],
550 [disable GNU-style inline assembler])],
551 [enable_gcc_inline_asm=$enableval], [enable_gcc_inline_asm=auto])
553 if test $enable_gcc_inline_asm = no ; then
554 have_gcc_inline_asm=disabled
557 if test $have_gcc_inline_asm = yes ; then
558 AC_DEFINE(USE_GCC_INLINE_ASM, 1, [use GNU-style inline assembler])
561 AC_MSG_RESULT($have_gcc_inline_asm)
562 if test $enable_gcc_inline_asm = yes && test $have_gcc_inline_asm = no ; then
563 AC_MSG_ERROR([GNU-style inline assembler not detected])
566 AM_CONDITIONAL(USE_GCC_INLINE_ASM, test $have_gcc_inline_asm = yes)
568 dnl ==============================================
569 dnl Static test programs
571 AC_ARG_ENABLE(static-testprogs,
572 [AC_HELP_STRING([--enable-static-testprogs],
573 [build test programs as static binaries [default=no]])],
574 [enable_static_testprogs=$enableval], [enable_static_testprogs=no])
576 TESTPROGS_EXTRA_LDFLAGS=
577 if test "x$enable_static_testprogs" = "xyes" ; then
578 TESTPROGS_EXTRA_LDFLAGS="-all-static"
580 AC_SUBST(TESTPROGS_EXTRA_LDFLAGS)
582 dnl ==============================================
585 AC_ARG_ENABLE(timers,
586 [AC_HELP_STRING([--enable-timers],
587 [enable TIMER_BEGIN and TIMER_END macros [default=no]])],
588 [enable_timers=$enableval], [enable_timers=no])
590 if test $enable_timers = yes ; then
591 AC_DEFINE(PIXMAN_TIMERS, 1, [enable TIMER_BEGIN/TIMER_END macros])
593 AC_SUBST(PIXMAN_TIMERS)
595 dnl ===================================
599 [AC_HELP_STRING([--enable-gtk],
600 [enable tests using GTK+ [default=auto]])],
601 [enable_gtk=$enableval], [enable_gtk=auto])
605 if test $enable_gtk = yes ; then
606 AC_CHECK_LIB([pixman-1], [pixman_version_string])
607 PKG_CHECK_MODULES(GTK, [gtk+-2.0 pixman-1])
610 if test $enable_gtk = auto ; then
611 AC_CHECK_LIB([pixman-1], [pixman_version_string], [enable_gtk=auto], [enable_gtk=no])
614 if test $enable_gtk = auto ; then
615 PKG_CHECK_MODULES(GTK, [gtk+-2.0 pixman-1], [enable_gtk=yes], [enable_gtk=no])
618 AM_CONDITIONAL(HAVE_GTK, [test "x$enable_gtk" = xyes])
625 dnl =====================================
626 dnl posix_memalign, sigaction, alarm, gettimeofday
628 AC_CHECK_FUNC(posix_memalign, have_posix_memalign=yes, have_posix_memalign=no)
629 if test x$have_posix_memalign = xyes; then
630 AC_DEFINE(HAVE_POSIX_MEMALIGN, 1, [Whether we have posix_memalign()])
633 AC_CHECK_FUNC(sigaction, have_sigaction=yes, have_sigaction=no)
634 if test x$have_sigaction = xyes; then
635 AC_DEFINE(HAVE_SIGACTION, 1, [Whether we have sigaction()])
638 AC_CHECK_FUNC(alarm, have_alarm=yes, have_alarm=no)
639 if test x$have_alarm = xyes; then
640 AC_DEFINE(HAVE_ALARM, 1, [Whether we have alarm()])
643 AC_CHECK_HEADER([sys/mman.h],
644 [AC_DEFINE(HAVE_SYS_MMAN_H, [1], [Define to 1 if we have <sys/mman.h>])])
646 AC_CHECK_FUNC(mprotect, have_mprotect=yes, have_mprotect=no)
647 if test x$have_mprotect = xyes; then
648 AC_DEFINE(HAVE_MPROTECT, 1, [Whether we have mprotect()])
651 AC_CHECK_FUNC(getpagesize, have_getpagesize=yes, have_getpagesize=no)
652 if test x$have_getpagesize = xyes; then
653 AC_DEFINE(HAVE_GETPAGESIZE, 1, [Whether we have getpagesize()])
656 AC_CHECK_HEADER([fenv.h],
657 [AC_DEFINE(HAVE_FENV_H, [1], [Define to 1 if we have <fenv.h>])])
659 AC_CHECK_LIB(m, feenableexcept, have_feenableexcept=yes, have_feenableexcept=no)
660 if test x$have_feenableexcept = xyes; then
661 AC_DEFINE(HAVE_FEENABLEEXCEPT, 1, [Whether we have feenableexcept()])
664 AC_CHECK_FUNC(gettimeofday, have_gettimeofday=yes, have_gettimeofday=no)
665 AC_CHECK_HEADER(sys/time.h, have_sys_time_h=yes, have_sys_time_h=no)
666 if test x$have_gettimeofday = xyes && test x$have_sys_time_h = xyes; then
667 AC_DEFINE(HAVE_GETTIMEOFDAY, 1, [Whether we have gettimeofday()])
670 dnl =====================================
671 dnl Thread local storage
673 support_for__thread=no
675 AC_MSG_CHECKING(for __thread)
677 #if defined(__MINGW32__) && !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5))
678 #error This MinGW version has broken __thread support
681 #error OpenBSD has broken __thread support
683 static __thread int x ;
684 int main () { x = 123; return x; }
685 ], support_for__thread=yes)
687 if test $support_for__thread = yes; then
688 AC_DEFINE([TOOLCHAIN_SUPPORTS__THREAD],[],[Whether the tool chain supports __thread])
691 AC_MSG_RESULT($support_for__thread)
697 m4_define([pthread_test_program],[dnl
701 static pthread_once_t once_control = PTHREAD_ONCE_INIT;
702 static pthread_key_t key;
707 pthread_key_create (&key, NULL);
715 if (pthread_once (&once_control, make_key) != 0)
721 value = pthread_getspecific (key);
724 value = malloc (100);
725 pthread_setspecific (key, value);
732 AC_DEFUN([PIXMAN_CHECK_PTHREAD],[dnl
733 if test "z$support_for_pthread_setspecific" != "zyes"; then
734 PIXMAN_LINK_WITH_ENV(
735 [$1], [pthread_test_program],
736 [PTHREAD_CFLAGS="$CFLAGS"
738 PTHREAD_LDFLAGS="$LDFLAGS"
739 support_for_pthread_setspecific=yes])
743 if test $support_for__thread = no; then
744 support_for_pthread_setspecific=no
746 AC_MSG_CHECKING(for pthread_setspecific)
748 PIXMAN_CHECK_PTHREAD([CFLAGS="-D_REENTRANT"; LIBS="-lpthread"])
749 PIXMAN_CHECK_PTHREAD([CFLAGS="-pthread"; LDFLAGS="-pthread"])
750 PIXMAN_CHECK_PTHREAD([CFLAGS="-D_REENTRANT"; LDFLAGS="-lroot"])
752 if test $support_for_pthread_setspecific = yes; then
753 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
754 AC_DEFINE([HAVE_PTHREAD_SETSPECIFIC], [], [Whether pthread_setspecific() is supported])
757 AC_MSG_RESULT($support_for_pthread_setspecific);
760 AC_SUBST(TOOLCHAIN_SUPPORTS__THREAD)
761 AC_SUBST(HAVE_PTHREAD_SETSPECIFIC)
762 AC_SUBST(PTHREAD_LDFLAGS)
763 AC_SUBST(PTHREAD_LIBS)
765 dnl =====================================
766 dnl __attribute__((constructor))
768 support_for_attribute_constructor=no
770 AC_MSG_CHECKING(for __attribute__((constructor)))
772 #if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7))
773 /* attribute 'constructor' is supported since gcc 2.7, but some compilers
774 * may only pretend to be gcc, so let's try to actually use it
777 static void __attribute__((constructor)) constructor_function () { x = 0; }
778 int main (void) { return x; }
780 #error not gcc or gcc version is older than 2.7
782 ], support_for_attribute_constructor=yes)
784 if test x$support_for_attribute_constructor = xyes; then
785 AC_DEFINE([TOOLCHAIN_SUPPORTS_ATTRIBUTE_CONSTRUCTOR],
786 [],[Whether the tool chain supports __attribute__((constructor))])
789 AC_MSG_RESULT($support_for_attribute_constructor)
790 AC_SUBST(TOOLCHAIN_SUPPORTS_ATTRIBUTE_CONSTRUCTOR)
792 AC_OUTPUT([pixman-1.pc
793 pixman-1-uninstalled.pc
796 pixman/pixman-version.h