Pre-release version bump to 0.19.2
[profile/ivi/pixman.git] / configure.ac
1 dnl  Copyright 2005 Red Hat, Inc.
2 dnl 
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.
12 dnl 
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.
20 dnl
21 dnl Process this file with autoconf to create configure.
22
23 AC_PREREQ([2.57])
24
25 #   Pixman versioning scheme
26 #
27 #   - The version in git has an odd MICRO version number
28 #
29 #   - Released versions both development and stable have an even MICRO 
30 #     version number
31 #
32 #   - Released development versions have an odd MINOR number
33 #
34 #   - Released stable versions have an even MINOR number
35 #
36 #   - Versions that break ABI must have a new MAJOR number
37 #
38 #   - If you break the ABI, then at least this must be done:
39 #
40 #        - increment MAJOR
41 #
42 #        - In the first development release where you break ABI, find
43 #          all instances of "pixman-n" and change them to pixman-(n+1)
44 #
45 #          This needs to be done at least in 
46 #                    configure.ac
47 #                    all Makefile.am's
48 #                    pixman-n.pc.in
49 #
50 #      This ensures that binary incompatible versions can be installed
51 #      in parallel.  See http://www106.pair.com/rhp/parallel.html for
52 #      more information
53 #
54
55 m4_define([pixman_major], 0)
56 m4_define([pixman_minor], 19)
57 m4_define([pixman_micro], 2)
58
59 m4_define([pixman_version],[pixman_major.pixman_minor.pixman_micro])
60
61 AC_INIT(pixman, pixman_version, "pixman@lists.freedesktop.org", pixman)
62 AM_INIT_AUTOMAKE([foreign dist-bzip2])
63
64 # Suppress verbose compile lines
65 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
66
67 AM_CONFIG_HEADER(config.h)
68
69 AC_CANONICAL_HOST
70
71 test_CFLAGS=${CFLAGS+set} # We may override autoconf default CFLAGS.
72
73 AC_PROG_CC
74 AM_PROG_AS
75 AC_PROG_LIBTOOL
76 AC_CHECK_FUNCS([getisax])
77 AC_C_BIGENDIAN
78 AC_C_INLINE
79
80 dnl PIXMAN_LINK_WITH_ENV(env-setup, program, true-action, false-action)
81 dnl
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
85         save_CFLAGS="$CFLAGS"
86         save_LDFLAGS="$LDFLAGS"
87         save_LIBS="$LIBS"
88         CFLAGS=""
89         LDFLAGS=""
90         LIBS=""
91         $1
92         AC_LINK_IFELSE(
93                 [$2],
94                 [pixman_cc_stderr=`test -f conftest.err && cat conftest.err`
95                  pixman_cc_flag=yes],
96                 [pixman_cc_stderr=`test -f conftest.err && cat conftest.err`
97                  pixman_cc_flag=no])
98
99         if test "x$pixman_cc_stderr" != "x"; then
100                 pixman_cc_flag=no
101         fi
102
103         if test "x$pixman_cc_flag" = "xyes"; then
104                 ifelse([$3], , :, [$3])
105         else
106                 ifelse([$4], , :, [$4])
107         fi
108         CFLAGS="$save_CFLAGS"
109         LDFLAGS="$save_LDFLAGS"
110         LIBS="$save_LIBS"
111 ])
112
113 dnl Find a -Werror for catching warnings.
114 WERROR=
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(
119                 [CFLAGS=$w],
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)
123     fi
124 done
125
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"],
132                 [$2
133                  int main(int c, char **v) { (void)c; (void)v; return 0; }
134                 ],
135                 [_yesno=yes],
136                 [_yesno=no])
137         if test "x$_yesno" = xyes; then
138            CFLAGS="$CFLAGS $1"
139         fi
140         AC_MSG_RESULT($_yesno)
141 ])
142
143 AC_CHECK_SIZEOF(long)
144
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"])
148
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
151 # has set CFLAGS.
152 if test $SUNCC = yes &&                 \
153    test "$test_CFLAGS" == "" &&         \
154    test "$CFLAGS" = "-g"
155 then
156   CFLAGS="-O -g"
157 fi
158
159
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:
162 #
163 #      pixman-$(pixman_major).0.minor.micro
164 #
165 m4_define([lt_current], [pixman_minor])
166 m4_define([lt_revision], [pixman_micro])
167 m4_define([lt_age], [pixman_minor])
168
169 LT_VERSION_INFO="lt_current:lt_revision:lt_age"
170
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)
177
178 AC_SUBST(LT_VERSION_INFO)
179
180 # Check for dependencies
181 #PKG_CHECK_MODULES(DEP, x11)
182
183 PIXMAN_CHECK_CFLAG([-Wall])
184 PIXMAN_CHECK_CFLAG([-fno-strict-aliasing])
185
186 AC_PATH_PROG(PERL, perl, no)
187 if test "x$PERL" = xno; then
188     AC_MSG_ERROR([Perl is required to build pixman.])
189 fi
190 AC_SUBST(PERL)
191
192 dnl =========================================================================
193 dnl OpenMP for the test suite?
194 dnl
195
196 # Check for OpenMP support (only supported by autoconf >=2.62)
197 OPENMP_CFLAGS=
198 m4_ifdef([AC_OPENMP], [AC_OPENMP])
199
200 m4_define([openmp_test_program],[dnl
201 #include <stdio.h>
202
203 extern unsigned int lcg_seed;
204 #pragma omp threadprivate(lcg_seed)
205 unsigned int lcg_seed;
206
207 unsigned function(unsigned a, unsigned b)
208 {
209         lcg_seed ^= b;
210         return ((a + b) ^ a ) + lcg_seed;
211 }
212
213 int main(int argc, char **argv)
214 {
215         int i;
216         int n1 = 0, n2 = argc;
217         unsigned checksum = 0;
218         int verbose = argv != NULL;
219         unsigned (*test_function)(unsigned, unsigned);
220         test_function = function;
221     #pragma omp parallel for reduction(+:checksum) default(none) \
222                                         shared(n1, n2, test_function, verbose)
223         for (i = n1; i < n2; i++)
224         {
225                 unsigned crc = test_function (i, 0);
226                 if (verbose)
227                         printf ("%d: %08X\n", i, crc);
228                 checksum += crc;
229         }
230         printf("%u\n", checksum);
231         return 0;
232 }
233 ])
234
235 PIXMAN_LINK_WITH_ENV(
236         [CFLAGS="$OPENMP_CFLAGS" LDFLAGS="$OPENMP_CFLAGS"],
237         [openmp_test_program],
238         [have_openmp=yes],
239         [have_openmp=no])
240 if test "x$have_openmp" = "xyes"; then
241    AC_DEFINE(USE_OPENMP, 1, [use OpenMP in the test suite])
242 else
243    OPENMP_CFLAGS=""
244 fi
245 AC_SUBST(OPENMP_CFLAGS)
246
247 dnl =========================================================================
248 dnl -fvisibility stuff
249
250 PIXMAN_CHECK_CFLAG([-fvisibility=hidden], [dnl
251 #if defined(__GNUC__) && (__GNUC__ >= 4)
252 #else
253 error Need GCC 4.0 for visibility
254 #endif
255 ])
256
257 PIXMAN_CHECK_CFLAG([-xldscope=hidden], [dnl
258 #if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
259 #else
260 error Need Sun Studio 8 for visibility
261 #endif
262 ])
263
264 dnl ===========================================================================
265 dnl Check for MMX
266
267 if test "x$MMX_CFLAGS" = "x" ; then
268    if test "x$SUNCC" = "xyes"; then
269       # Sun Studio doesn't have an -xarch=mmx flag, so we have to use sse
270       # but if we're building 64-bit, mmx & sse support is on by default and
271       # -xarch=sse throws an error instead
272       if test "$AMD64_ABI" = "no" ; then
273          MMX_CFLAGS="-xarch=sse"
274       fi
275    else
276       MMX_CFLAGS="-mmmx -Winline"
277    fi
278 fi
279
280 have_mmx_intrinsics=no
281 AC_MSG_CHECKING(whether to use MMX intrinsics)
282 xserver_save_CFLAGS=$CFLAGS
283 CFLAGS="$MMX_CFLAGS $CFLAGS"
284 AC_COMPILE_IFELSE([
285 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
286 error "Need GCC >= 3.4 for MMX intrinsics"
287 #endif
288 #include <mmintrin.h>
289 int main () {
290     __m64 v = _mm_cvtsi32_si64 (1);
291     return _mm_cvtsi64_si32 (v);
292 }], have_mmx_intrinsics=yes)
293 CFLAGS=$xserver_save_CFLAGS
294
295 AC_ARG_ENABLE(mmx,
296    [AC_HELP_STRING([--disable-mmx],
297                    [disable MMX fast paths])],
298    [enable_mmx=$enableval], [enable_mmx=auto])
299
300 if test $enable_mmx = no ; then
301    have_mmx_intrinsics=disabled
302 fi
303
304 if test $have_mmx_intrinsics = yes ; then
305    AC_DEFINE(USE_MMX, 1, [use MMX compiler intrinsics])
306 else
307    MMX_CFLAGS=
308 fi
309
310 AC_MSG_RESULT($have_mmx_intrinsics)
311 if test $enable_mmx = yes && test $have_mmx_intrinsics = no ; then
312    AC_MSG_ERROR([MMX intrinsics not detected])
313 fi
314
315 AM_CONDITIONAL(USE_MMX, test $have_mmx_intrinsics = yes)
316
317 dnl ===========================================================================
318 dnl Check for SSE2
319
320 if test "x$SSE2_CFLAGS" = "x" ; then
321    if test "x$SUNCC" = "xyes"; then
322       # SSE2 is enabled by default in the Sun Studio 64-bit environment
323       if test "$AMD64_ABI" = "no" ; then
324          SSE2_CFLAGS="-xarch=sse2"
325       fi
326    else
327       SSE2_CFLAGS="-mmmx -msse2 -Winline"
328    fi
329 fi
330
331 have_sse2_intrinsics=no
332 AC_MSG_CHECKING(whether to use SSE2 intrinsics)
333 xserver_save_CFLAGS=$CFLAGS
334 CFLAGS="$SSE2_CFLAGS $CFLAGS"
335
336 AC_COMPILE_IFELSE([
337 #if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 2))
338 #   if !defined(__amd64__) && !defined(__x86_64__)
339 #      error "Need GCC >= 4.2 for SSE2 intrinsics on x86"
340 #   endif
341 #endif
342 #include <mmintrin.h>
343 #include <xmmintrin.h>
344 #include <emmintrin.h>
345 int main () {
346     __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
347         c = _mm_xor_si128 (a, b);
348     return 0;
349 }], have_sse2_intrinsics=yes)
350 CFLAGS=$xserver_save_CFLAGS
351
352 AC_ARG_ENABLE(sse2,
353    [AC_HELP_STRING([--disable-sse2],
354                    [disable SSE2 fast paths])],
355    [enable_sse2=$enableval], [enable_sse2=auto])
356
357 if test $enable_sse2 = no ; then
358    have_sse2_intrinsics=disabled
359 fi
360
361 if test $have_sse2_intrinsics = yes ; then
362    AC_DEFINE(USE_SSE2, 1, [use SSE2 compiler intrinsics])
363 fi
364
365 AC_MSG_RESULT($have_sse2_intrinsics)
366 if test $enable_sse2 = yes && test $have_sse2_intrinsics = no ; then
367    AC_MSG_ERROR([SSE2 intrinsics not detected])
368 fi
369
370 AM_CONDITIONAL(USE_SSE2, test $have_sse2_intrinsics = yes)
371
372 dnl ===========================================================================
373 dnl Other special flags needed when building code using MMX or SSE instructions
374 case $host_os in
375    solaris*)
376       # When building 32-bit binaries, apply a mapfile to ensure that the
377       # binaries aren't flagged as only able to run on MMX+SSE capable CPUs
378       # since they check at runtime before using those instructions.
379       # Not all linkers grok the mapfile format so we check for that first.
380       if test "$AMD64_ABI" = "no" ; then
381          use_hwcap_mapfile=no
382          AC_MSG_CHECKING(whether to use a hardware capability map file)
383          hwcap_save_LDFLAGS="$LDFLAGS"
384          HWCAP_LDFLAGS='-Wl,-M,$(srcdir)/solaris-hwcap.mapfile'
385          LDFLAGS="$LDFLAGS -Wl,-M,pixman/solaris-hwcap.mapfile"
386          AC_LINK_IFELSE([int main() { return 0; }],
387                         use_hwcap_mapfile=yes,
388                         HWCAP_LDFLAGS="")
389          LDFLAGS="$hwcap_save_LDFLAGS"
390          AC_MSG_RESULT($use_hwcap_mapfile)
391       fi
392       if test "x$MMX_LDFLAGS" = "x" ; then
393          MMX_LDFLAGS="$HWCAP_LDFLAGS"
394       fi
395       if test "x$SSE2_LDFLAGS" = "x" ; then
396          SSE2_LDFLAGS="$HWCAP_LDFLAGS"
397       fi
398       ;;
399 esac
400
401 AC_SUBST(MMX_CFLAGS)
402 AC_SUBST(MMX_LDFLAGS)
403 AC_SUBST(SSE2_CFLAGS)
404 AC_SUBST(SSE2_LDFLAGS)
405
406 dnl ===========================================================================
407 dnl Check for VMX/Altivec
408 if test -n "`$CC -v 2>&1 | grep version | grep Apple`"; then
409     VMX_CFLAGS="-faltivec"
410 else
411     VMX_CFLAGS="-maltivec -mabi=altivec"
412 fi
413
414 have_vmx_intrinsics=no
415 AC_MSG_CHECKING(whether to use VMX/Altivec intrinsics)
416 xserver_save_CFLAGS=$CFLAGS
417 CFLAGS="$VMX_CFLAGS $CFLAGS"
418 AC_COMPILE_IFELSE([
419 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
420 error "Need GCC >= 3.4 for sane altivec support"
421 #endif
422 #include <altivec.h>
423 int main () {
424     vector unsigned int v = vec_splat_u32 (1);
425     v = vec_sub (v, v);
426     return 0;
427 }], have_vmx_intrinsics=yes)
428 CFLAGS=$xserver_save_CFLAGS
429
430 AC_ARG_ENABLE(vmx,
431    [AC_HELP_STRING([--disable-vmx],
432                    [disable VMX fast paths])],
433    [enable_vmx=$enableval], [enable_vmx=auto])
434
435 if test $enable_vmx = no ; then
436    have_vmx_intrinsics=disabled
437 fi
438
439 if test $have_vmx_intrinsics = yes ; then
440    AC_DEFINE(USE_VMX, 1, [use VMX compiler intrinsics])
441 else
442    VMX_CFLAGS=
443 fi
444
445 AC_MSG_RESULT($have_vmx_intrinsics)
446 if test $enable_vmx = yes && test $have_vmx_intrinsics = no ; then
447    AC_MSG_ERROR([VMX intrinsics not detected])
448 fi
449
450 AC_SUBST(VMX_CFLAGS)
451
452 AM_CONDITIONAL(USE_VMX, test $have_vmx_intrinsics = yes)
453
454 dnl ==========================================================================
455 dnl Check if assembler is gas compatible and supports ARM SIMD instructions
456 have_arm_simd=no
457 AC_MSG_CHECKING(whether to use ARM SIMD assembler)
458 xserver_save_CFLAGS=$CFLAGS
459 CFLAGS="-x assembler-with-cpp $CFLAGS"
460 AC_COMPILE_IFELSE([[
461 .text
462 .arch armv6
463 .object_arch armv4
464 .arm
465 .altmacro
466 #ifndef __ARM_EABI__
467 #error EABI is required (to be sure that calling conventions are compatible)
468 #endif
469 pld [r0]
470 uqadd8 r0, r0, r0]], have_arm_simd=yes)
471 CFLAGS=$xserver_save_CFLAGS
472
473 AC_ARG_ENABLE(arm-simd,
474    [AC_HELP_STRING([--disable-arm-simd],
475                    [disable ARM SIMD fast paths])],
476    [enable_arm_simd=$enableval], [enable_arm_simd=auto])
477
478 if test $enable_arm_simd = no ; then
479    have_arm_simd=disabled
480 fi
481
482 if test $have_arm_simd = yes ; then
483    AC_DEFINE(USE_ARM_SIMD, 1, [use ARM SIMD assembly optimizations])
484 fi
485
486 AM_CONDITIONAL(USE_ARM_SIMD, test $have_arm_simd = yes)
487
488 AC_MSG_RESULT($have_arm_simd)
489 if test $enable_arm_simd = yes && test $have_arm_simd = no ; then
490    AC_MSG_ERROR([ARM SIMD intrinsics not detected])
491 fi
492
493 dnl ==========================================================================
494 dnl Check if assembler is gas compatible and supports NEON instructions
495 have_arm_neon=no
496 AC_MSG_CHECKING(whether to use ARM NEON assembler)
497 xserver_save_CFLAGS=$CFLAGS
498 CFLAGS="-x assembler-with-cpp $CFLAGS"
499 AC_COMPILE_IFELSE([[
500 .text
501 .fpu neon
502 .arch armv7a
503 .object_arch armv4
504 .eabi_attribute 10, 0
505 .arm
506 .altmacro
507 #ifndef __ARM_EABI__
508 #error EABI is required (to be sure that calling conventions are compatible)
509 #endif
510 pld [r0]
511 vmovn.u16 d0, q0]], have_arm_neon=yes)
512 CFLAGS=$xserver_save_CFLAGS
513
514 AC_ARG_ENABLE(arm-neon,
515    [AC_HELP_STRING([--disable-arm-neon],
516                    [disable ARM NEON fast paths])],
517    [enable_arm_neon=$enableval], [enable_arm_neon=auto])
518
519 if test $enable_arm_neon = no ; then
520    have_arm_neon=disabled
521 fi
522
523 if test $have_arm_neon = yes ; then
524    AC_DEFINE(USE_ARM_NEON, 1, [use ARM NEON assembly optimizations])
525 fi
526
527 AM_CONDITIONAL(USE_ARM_NEON, test $have_arm_neon = yes)
528
529 AC_MSG_RESULT($have_arm_neon)
530 if test $enable_arm_neon = yes && test $have_arm_neon = no ; then
531    AC_MSG_ERROR([ARM NEON intrinsics not detected])
532 fi
533
534 dnl =========================================================================================
535 dnl Check for GNU-style inline assembly support
536
537 have_gcc_inline_asm=no
538 AC_MSG_CHECKING(whether to use GNU-style inline assembler)
539 AC_COMPILE_IFELSE([
540 int main () {
541     /* Most modern architectures have a NOP instruction, so this is a fairly generic test. */
542         asm volatile ( "\tnop\n" : : : "cc", "memory" );
543     return 0;
544 }], have_gcc_inline_asm=yes)
545
546 AC_ARG_ENABLE(gcc-inline-asm,
547    [AC_HELP_STRING([--disable-gcc-inline-asm],
548                    [disable GNU-style inline assembler])],
549    [enable_gcc_inline_asm=$enableval], [enable_gcc_inline_asm=auto])
550
551 if test $enable_gcc_inline_asm = no ; then
552    have_gcc_inline_asm=disabled
553 fi
554
555 if test $have_gcc_inline_asm = yes ; then
556    AC_DEFINE(USE_GCC_INLINE_ASM, 1, [use GNU-style inline assembler])
557 fi
558
559 AC_MSG_RESULT($have_gcc_inline_asm)
560 if test $enable_gcc_inline_asm = yes && test $have_gcc_inline_asm = no ; then
561    AC_MSG_ERROR([GNU-style inline assembler not detected])
562 fi
563
564 AM_CONDITIONAL(USE_GCC_INLINE_ASM, test $have_gcc_inline_asm = yes)
565
566 dnl ==============================================
567 dnl Timers
568
569 AC_ARG_ENABLE(timers,
570    [AC_HELP_STRING([--enable-timers],
571                    [enable TIMER_BEGIN and TIMER_END macros [default=no]])],
572    [enable_timers=$enableval], [enable_timers=no])
573
574 if test $enable_timers = yes ; then 
575    AC_DEFINE(PIXMAN_TIMERS, 1, [enable TIMER_BEGIN/TIMER_END macros])
576 fi
577 AC_SUBST(PIXMAN_TIMERS)
578
579 dnl ===================================
580 dnl GTK+
581
582 AC_ARG_ENABLE(gtk,
583    [AC_HELP_STRING([--enable-gtk],
584                    [enable tests using GTK+ [default=auto]])],
585    [enable_gtk=$enableval], [enable_gtk=auto])
586
587 PKG_PROG_PKG_CONFIG
588 if test $enable_gtk = auto ; then
589    PKG_CHECK_EXISTS([gtk+-2.0], [enable_gtk=yes], [enable_gtk=no])
590 fi
591 if test $enable_gtk = yes ; then
592    PKG_CHECK_MODULES(GTK, [gtk+-2.0])
593 fi
594
595 AM_CONDITIONAL(HAVE_GTK, [test "x$enable_gtk" = xyes])
596
597 AC_SUBST(GTK_CFLAGS)
598 AC_SUBST(GTK_LIBS)
599 AC_SUBST(DEP_CFLAGS)
600 AC_SUBST(DEP_LIBS)
601
602 dnl =====================================
603 dnl posix_memalign, sigaction, alarm
604
605 AC_CHECK_FUNC(posix_memalign, have_posix_memalign=yes, have_posix_memalign=no)
606 if test x$have_posix_memalign = xyes; then
607    AC_DEFINE(HAVE_POSIX_MEMALIGN, 1, [Whether we have posix_memalign()])
608 fi
609
610 AC_CHECK_FUNC(sigaction, have_sigaction=yes, have_sigaction=no)
611 if test x$have_sigaction = xyes; then
612    AC_DEFINE(HAVE_SIGACTION, 1, [Whether we have sigaction()])
613 fi
614
615 AC_CHECK_FUNC(alarm, have_alarm=yes, have_alarm=no)
616 if test x$have_alarm = xyes; then
617    AC_DEFINE(HAVE_ALARM, 1, [Whether we have alarm()])
618 fi
619
620 dnl =====================================
621 dnl Thread local storage
622
623 support_for__thread=no
624
625 AC_MSG_CHECKING(for __thread)
626 AC_LINK_IFELSE([
627 #ifdef __MINGW32__
628 #error MinGW has broken __thread support
629 #endif
630 #ifdef __OpenBSD__
631 #error OpenBSD has broken __thread support
632 #endif
633 static __thread int x ;
634 int main () { x = 123; return x; }
635 ], support_for__thread=yes)
636
637 if test $support_for__thread = yes; then 
638    AC_DEFINE([TOOLCHAIN_SUPPORTS__THREAD],[],[Whether the tool chain supports __thread])
639 fi
640
641 AC_MSG_RESULT($support_for__thread)
642
643 dnl
644 dnl posix tls
645 dnl
646
647 m4_define([pthread_test_program],[dnl
648 #include <stdlib.h>
649 #include <pthread.h>
650
651 static pthread_once_t once_control = PTHREAD_ONCE_INIT;
652 static pthread_key_t key;
653
654 static void
655 make_key (void)
656 {
657     pthread_key_create (&key, NULL);
658 }
659
660 int
661 main ()
662 {
663     void *value = NULL;
664
665     if (pthread_once (&once_control, make_key) != 0)
666     {
667         value = NULL;
668     }
669     else
670     {
671         value = pthread_getspecific (key);
672         if (!value)
673         {
674             value = malloc (100);
675             pthread_setspecific (key, value);
676         }
677     }
678     return 0;
679 }
680 ])
681
682 AC_DEFUN([PIXMAN_CHECK_PTHREAD],[dnl
683     if test "z$support_for_pthread_setspecific" != "zyes"; then
684         PIXMAN_LINK_WITH_ENV(
685                 [$1], [pthread_test_program],
686                 [PTHREAD_CFLAGS="$CFLAGS"
687                  PTHREAD_LIBS="$LIBS"
688                  PTHREAD_LDFLAGS="$LDFLAGS"
689                  support_for_pthread_setspecific=yes])
690     fi
691 ])
692
693 if test $support_for__thread = no; then
694     support_for_pthread_setspecific=no
695
696     AC_MSG_CHECKING(for pthread_setspecific)
697
698     PIXMAN_CHECK_PTHREAD([CFLAGS="-D_REENTRANT"; LIBS="-lpthread"])
699     PIXMAN_CHECK_PTHREAD([CFLAGS="-pthread"; LDFLAGS="-pthread"])
700
701     if test $support_for_pthread_setspecific = yes; then
702         CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
703         AC_DEFINE([HAVE_PTHREAD_SETSPECIFIC], [], [Whether pthread_setspecific() is supported])
704     fi
705
706     AC_MSG_RESULT($support_for_pthread_setspecific);
707 fi
708
709 AC_SUBST(TOOLCHAIN_SUPPORTS__THREAD)
710 AC_SUBST(HAVE_PTHREAD_SETSPECIFIC)
711 AC_SUBST(PTHREAD_LDFLAGS)
712 AC_SUBST(PTHREAD_LIBS)
713
714 AC_OUTPUT([pixman-1.pc
715            pixman-1-uninstalled.pc
716            Makefile
717            pixman/Makefile
718            pixman/pixman-version.h
719            test/Makefile])