Be more paranoid about checking for GTK+
[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], 3)
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
182 PIXMAN_CHECK_CFLAG([-Wall])
183 PIXMAN_CHECK_CFLAG([-fno-strict-aliasing])
184
185 AC_PATH_PROG(PERL, perl, no)
186 if test "x$PERL" = xno; then
187     AC_MSG_ERROR([Perl is required to build pixman.])
188 fi
189 AC_SUBST(PERL)
190
191 dnl =========================================================================
192 dnl OpenMP for the test suite?
193 dnl
194
195 # Check for OpenMP support (only supported by autoconf >=2.62)
196 OPENMP_CFLAGS=
197 m4_ifdef([AC_OPENMP], [AC_OPENMP])
198
199 m4_define([openmp_test_program],[dnl
200 #include <stdio.h>
201
202 extern unsigned int lcg_seed;
203 #pragma omp threadprivate(lcg_seed)
204 unsigned int lcg_seed;
205
206 unsigned function(unsigned a, unsigned b)
207 {
208         lcg_seed ^= b;
209         return ((a + b) ^ a ) + lcg_seed;
210 }
211
212 int main(int argc, char **argv)
213 {
214         int i;
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++)
223         {
224                 unsigned crc = test_function (i, 0);
225                 if (verbose)
226                         printf ("%d: %08X\n", i, crc);
227                 checksum += crc;
228         }
229         printf("%u\n", checksum);
230         return 0;
231 }
232 ])
233
234 PIXMAN_LINK_WITH_ENV(
235         [CFLAGS="$OPENMP_CFLAGS" LDFLAGS="$OPENMP_CFLAGS"],
236         [openmp_test_program],
237         [have_openmp=yes],
238         [have_openmp=no])
239 if test "x$have_openmp" = "xyes"; then
240    AC_DEFINE(USE_OPENMP, 1, [use OpenMP in the test suite])
241 else
242    OPENMP_CFLAGS=""
243 fi
244 AC_SUBST(OPENMP_CFLAGS)
245
246 dnl =========================================================================
247 dnl -fvisibility stuff
248
249 PIXMAN_CHECK_CFLAG([-fvisibility=hidden], [dnl
250 #if defined(__GNUC__) && (__GNUC__ >= 4)
251 #else
252 error Need GCC 4.0 for visibility
253 #endif
254 ])
255
256 PIXMAN_CHECK_CFLAG([-xldscope=hidden], [dnl
257 #if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
258 #else
259 error Need Sun Studio 8 for visibility
260 #endif
261 ])
262
263 dnl ===========================================================================
264 dnl Check for MMX
265
266 if test "x$MMX_CFLAGS" = "x" ; then
267    if test "x$SUNCC" = "xyes"; then
268       # Sun Studio doesn't have an -xarch=mmx flag, so we have to use sse
269       # but if we're building 64-bit, mmx & sse support is on by default and
270       # -xarch=sse throws an error instead
271       if test "$AMD64_ABI" = "no" ; then
272          MMX_CFLAGS="-xarch=sse"
273       fi
274    else
275       MMX_CFLAGS="-mmmx -Winline"
276    fi
277 fi
278
279 have_mmx_intrinsics=no
280 AC_MSG_CHECKING(whether to use MMX intrinsics)
281 xserver_save_CFLAGS=$CFLAGS
282 CFLAGS="$MMX_CFLAGS $CFLAGS"
283 AC_COMPILE_IFELSE([
284 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
285 error "Need GCC >= 3.4 for MMX intrinsics"
286 #endif
287 #include <mmintrin.h>
288 int main () {
289     __m64 v = _mm_cvtsi32_si64 (1);
290     return _mm_cvtsi64_si32 (v);
291 }], have_mmx_intrinsics=yes)
292 CFLAGS=$xserver_save_CFLAGS
293
294 AC_ARG_ENABLE(mmx,
295    [AC_HELP_STRING([--disable-mmx],
296                    [disable MMX fast paths])],
297    [enable_mmx=$enableval], [enable_mmx=auto])
298
299 if test $enable_mmx = no ; then
300    have_mmx_intrinsics=disabled
301 fi
302
303 if test $have_mmx_intrinsics = yes ; then
304    AC_DEFINE(USE_MMX, 1, [use MMX compiler intrinsics])
305 else
306    MMX_CFLAGS=
307 fi
308
309 AC_MSG_RESULT($have_mmx_intrinsics)
310 if test $enable_mmx = yes && test $have_mmx_intrinsics = no ; then
311    AC_MSG_ERROR([MMX intrinsics not detected])
312 fi
313
314 AM_CONDITIONAL(USE_MMX, test $have_mmx_intrinsics = yes)
315
316 dnl ===========================================================================
317 dnl Check for SSE2
318
319 if test "x$SSE2_CFLAGS" = "x" ; then
320    if test "x$SUNCC" = "xyes"; then
321       # SSE2 is enabled by default in the Sun Studio 64-bit environment
322       if test "$AMD64_ABI" = "no" ; then
323          SSE2_CFLAGS="-xarch=sse2"
324       fi
325    else
326       SSE2_CFLAGS="-mmmx -msse2 -Winline"
327    fi
328 fi
329
330 have_sse2_intrinsics=no
331 AC_MSG_CHECKING(whether to use SSE2 intrinsics)
332 xserver_save_CFLAGS=$CFLAGS
333 CFLAGS="$SSE2_CFLAGS $CFLAGS"
334
335 AC_COMPILE_IFELSE([
336 #if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 2))
337 #   if !defined(__amd64__) && !defined(__x86_64__)
338 #      error "Need GCC >= 4.2 for SSE2 intrinsics on x86"
339 #   endif
340 #endif
341 #include <mmintrin.h>
342 #include <xmmintrin.h>
343 #include <emmintrin.h>
344 int main () {
345     __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
346         c = _mm_xor_si128 (a, b);
347     return 0;
348 }], have_sse2_intrinsics=yes)
349 CFLAGS=$xserver_save_CFLAGS
350
351 AC_ARG_ENABLE(sse2,
352    [AC_HELP_STRING([--disable-sse2],
353                    [disable SSE2 fast paths])],
354    [enable_sse2=$enableval], [enable_sse2=auto])
355
356 if test $enable_sse2 = no ; then
357    have_sse2_intrinsics=disabled
358 fi
359
360 if test $have_sse2_intrinsics = yes ; then
361    AC_DEFINE(USE_SSE2, 1, [use SSE2 compiler intrinsics])
362 fi
363
364 AC_MSG_RESULT($have_sse2_intrinsics)
365 if test $enable_sse2 = yes && test $have_sse2_intrinsics = no ; then
366    AC_MSG_ERROR([SSE2 intrinsics not detected])
367 fi
368
369 AM_CONDITIONAL(USE_SSE2, test $have_sse2_intrinsics = yes)
370
371 dnl ===========================================================================
372 dnl Other special flags needed when building code using MMX or SSE instructions
373 case $host_os in
374    solaris*)
375       # When building 32-bit binaries, apply a mapfile to ensure that the
376       # binaries aren't flagged as only able to run on MMX+SSE capable CPUs
377       # since they check at runtime before using those instructions.
378       # Not all linkers grok the mapfile format so we check for that first.
379       if test "$AMD64_ABI" = "no" ; then
380          use_hwcap_mapfile=no
381          AC_MSG_CHECKING(whether to use a hardware capability map file)
382          hwcap_save_LDFLAGS="$LDFLAGS"
383          HWCAP_LDFLAGS='-Wl,-M,$(srcdir)/solaris-hwcap.mapfile'
384          LDFLAGS="$LDFLAGS -Wl,-M,pixman/solaris-hwcap.mapfile"
385          AC_LINK_IFELSE([int main() { return 0; }],
386                         use_hwcap_mapfile=yes,
387                         HWCAP_LDFLAGS="")
388          LDFLAGS="$hwcap_save_LDFLAGS"
389          AC_MSG_RESULT($use_hwcap_mapfile)
390       fi
391       if test "x$MMX_LDFLAGS" = "x" ; then
392          MMX_LDFLAGS="$HWCAP_LDFLAGS"
393       fi
394       if test "x$SSE2_LDFLAGS" = "x" ; then
395          SSE2_LDFLAGS="$HWCAP_LDFLAGS"
396       fi
397       ;;
398 esac
399
400 AC_SUBST(MMX_CFLAGS)
401 AC_SUBST(MMX_LDFLAGS)
402 AC_SUBST(SSE2_CFLAGS)
403 AC_SUBST(SSE2_LDFLAGS)
404
405 dnl ===========================================================================
406 dnl Check for VMX/Altivec
407 if test -n "`$CC -v 2>&1 | grep version | grep Apple`"; then
408     VMX_CFLAGS="-faltivec"
409 else
410     VMX_CFLAGS="-maltivec -mabi=altivec"
411 fi
412
413 have_vmx_intrinsics=no
414 AC_MSG_CHECKING(whether to use VMX/Altivec intrinsics)
415 xserver_save_CFLAGS=$CFLAGS
416 CFLAGS="$VMX_CFLAGS $CFLAGS"
417 AC_COMPILE_IFELSE([
418 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
419 error "Need GCC >= 3.4 for sane altivec support"
420 #endif
421 #include <altivec.h>
422 int main () {
423     vector unsigned int v = vec_splat_u32 (1);
424     v = vec_sub (v, v);
425     return 0;
426 }], have_vmx_intrinsics=yes)
427 CFLAGS=$xserver_save_CFLAGS
428
429 AC_ARG_ENABLE(vmx,
430    [AC_HELP_STRING([--disable-vmx],
431                    [disable VMX fast paths])],
432    [enable_vmx=$enableval], [enable_vmx=auto])
433
434 if test $enable_vmx = no ; then
435    have_vmx_intrinsics=disabled
436 fi
437
438 if test $have_vmx_intrinsics = yes ; then
439    AC_DEFINE(USE_VMX, 1, [use VMX compiler intrinsics])
440 else
441    VMX_CFLAGS=
442 fi
443
444 AC_MSG_RESULT($have_vmx_intrinsics)
445 if test $enable_vmx = yes && test $have_vmx_intrinsics = no ; then
446    AC_MSG_ERROR([VMX intrinsics not detected])
447 fi
448
449 AC_SUBST(VMX_CFLAGS)
450
451 AM_CONDITIONAL(USE_VMX, test $have_vmx_intrinsics = yes)
452
453 dnl ==========================================================================
454 dnl Check if assembler is gas compatible and supports ARM SIMD instructions
455 have_arm_simd=no
456 AC_MSG_CHECKING(whether to use ARM SIMD assembler)
457 xserver_save_CFLAGS=$CFLAGS
458 CFLAGS="-x assembler-with-cpp $CFLAGS"
459 AC_COMPILE_IFELSE([[
460 .text
461 .arch armv6
462 .object_arch armv4
463 .arm
464 .altmacro
465 #ifndef __ARM_EABI__
466 #error EABI is required (to be sure that calling conventions are compatible)
467 #endif
468 pld [r0]
469 uqadd8 r0, r0, r0]], have_arm_simd=yes)
470 CFLAGS=$xserver_save_CFLAGS
471
472 AC_ARG_ENABLE(arm-simd,
473    [AC_HELP_STRING([--disable-arm-simd],
474                    [disable ARM SIMD fast paths])],
475    [enable_arm_simd=$enableval], [enable_arm_simd=auto])
476
477 if test $enable_arm_simd = no ; then
478    have_arm_simd=disabled
479 fi
480
481 if test $have_arm_simd = yes ; then
482    AC_DEFINE(USE_ARM_SIMD, 1, [use ARM SIMD assembly optimizations])
483 fi
484
485 AM_CONDITIONAL(USE_ARM_SIMD, test $have_arm_simd = yes)
486
487 AC_MSG_RESULT($have_arm_simd)
488 if test $enable_arm_simd = yes && test $have_arm_simd = no ; then
489    AC_MSG_ERROR([ARM SIMD intrinsics not detected])
490 fi
491
492 dnl ==========================================================================
493 dnl Check if assembler is gas compatible and supports NEON instructions
494 have_arm_neon=no
495 AC_MSG_CHECKING(whether to use ARM NEON assembler)
496 xserver_save_CFLAGS=$CFLAGS
497 CFLAGS="-x assembler-with-cpp $CFLAGS"
498 AC_COMPILE_IFELSE([[
499 .text
500 .fpu neon
501 .arch armv7a
502 .object_arch armv4
503 .eabi_attribute 10, 0
504 .arm
505 .altmacro
506 #ifndef __ARM_EABI__
507 #error EABI is required (to be sure that calling conventions are compatible)
508 #endif
509 pld [r0]
510 vmovn.u16 d0, q0]], have_arm_neon=yes)
511 CFLAGS=$xserver_save_CFLAGS
512
513 AC_ARG_ENABLE(arm-neon,
514    [AC_HELP_STRING([--disable-arm-neon],
515                    [disable ARM NEON fast paths])],
516    [enable_arm_neon=$enableval], [enable_arm_neon=auto])
517
518 if test $enable_arm_neon = no ; then
519    have_arm_neon=disabled
520 fi
521
522 if test $have_arm_neon = yes ; then
523    AC_DEFINE(USE_ARM_NEON, 1, [use ARM NEON assembly optimizations])
524 fi
525
526 AM_CONDITIONAL(USE_ARM_NEON, test $have_arm_neon = yes)
527
528 AC_MSG_RESULT($have_arm_neon)
529 if test $enable_arm_neon = yes && test $have_arm_neon = no ; then
530    AC_MSG_ERROR([ARM NEON intrinsics not detected])
531 fi
532
533 dnl =========================================================================================
534 dnl Check for GNU-style inline assembly support
535
536 have_gcc_inline_asm=no
537 AC_MSG_CHECKING(whether to use GNU-style inline assembler)
538 AC_COMPILE_IFELSE([
539 int main () {
540     /* Most modern architectures have a NOP instruction, so this is a fairly generic test. */
541         asm volatile ( "\tnop\n" : : : "cc", "memory" );
542     return 0;
543 }], have_gcc_inline_asm=yes)
544
545 AC_ARG_ENABLE(gcc-inline-asm,
546    [AC_HELP_STRING([--disable-gcc-inline-asm],
547                    [disable GNU-style inline assembler])],
548    [enable_gcc_inline_asm=$enableval], [enable_gcc_inline_asm=auto])
549
550 if test $enable_gcc_inline_asm = no ; then
551    have_gcc_inline_asm=disabled
552 fi
553
554 if test $have_gcc_inline_asm = yes ; then
555    AC_DEFINE(USE_GCC_INLINE_ASM, 1, [use GNU-style inline assembler])
556 fi
557
558 AC_MSG_RESULT($have_gcc_inline_asm)
559 if test $enable_gcc_inline_asm = yes && test $have_gcc_inline_asm = no ; then
560    AC_MSG_ERROR([GNU-style inline assembler not detected])
561 fi
562
563 AM_CONDITIONAL(USE_GCC_INLINE_ASM, test $have_gcc_inline_asm = yes)
564
565 dnl ==============================================
566 dnl Timers
567
568 AC_ARG_ENABLE(timers,
569    [AC_HELP_STRING([--enable-timers],
570                    [enable TIMER_BEGIN and TIMER_END macros [default=no]])],
571    [enable_timers=$enableval], [enable_timers=no])
572
573 if test $enable_timers = yes ; then 
574    AC_DEFINE(PIXMAN_TIMERS, 1, [enable TIMER_BEGIN/TIMER_END macros])
575 fi
576 AC_SUBST(PIXMAN_TIMERS)
577
578 dnl ===================================
579 dnl GTK+
580
581 AC_ARG_ENABLE(gtk,
582    [AC_HELP_STRING([--enable-gtk],
583                    [enable tests using GTK+ [default=auto]])],
584    [enable_gtk=$enableval], [enable_gtk=auto])
585
586 PKG_PROG_PKG_CONFIG
587
588 if test $enable_gtk = yes ; then
589    AC_CHECK_LIB([pixman-1], [pixman_version_string])
590    PKG_CHECK_MODULES(GTK, [gtk+-2.0 pixman-1])
591 fi
592
593 if test $enable_gtk = auto ; then
594    AC_CHECK_LIB([pixman-1], [pixman_version_string], [enable_gtk=auto], [enable_gtk=no])
595 fi
596
597 if test $enable_gtk = auto ; then
598    PKG_CHECK_MODULES(GTK, [gtk+-2.0 pixman-1], [enable_gtk=yes], [enable_gtk=no])
599 fi
600
601 AM_CONDITIONAL(HAVE_GTK, [test "x$enable_gtk" = xyes])
602
603 AC_SUBST(GTK_CFLAGS)
604 AC_SUBST(GTK_LIBS)
605 AC_SUBST(DEP_CFLAGS)
606 AC_SUBST(DEP_LIBS)
607
608 dnl =====================================
609 dnl posix_memalign, sigaction, alarm
610
611 AC_CHECK_FUNC(posix_memalign, have_posix_memalign=yes, have_posix_memalign=no)
612 if test x$have_posix_memalign = xyes; then
613    AC_DEFINE(HAVE_POSIX_MEMALIGN, 1, [Whether we have posix_memalign()])
614 fi
615
616 AC_CHECK_FUNC(sigaction, have_sigaction=yes, have_sigaction=no)
617 if test x$have_sigaction = xyes; then
618    AC_DEFINE(HAVE_SIGACTION, 1, [Whether we have sigaction()])
619 fi
620
621 AC_CHECK_FUNC(alarm, have_alarm=yes, have_alarm=no)
622 if test x$have_alarm = xyes; then
623    AC_DEFINE(HAVE_ALARM, 1, [Whether we have alarm()])
624 fi
625
626 dnl =====================================
627 dnl Thread local storage
628
629 support_for__thread=no
630
631 AC_MSG_CHECKING(for __thread)
632 AC_LINK_IFELSE([
633 #ifdef __MINGW32__
634 #error MinGW has broken __thread support
635 #endif
636 #ifdef __OpenBSD__
637 #error OpenBSD has broken __thread support
638 #endif
639 static __thread int x ;
640 int main () { x = 123; return x; }
641 ], support_for__thread=yes)
642
643 if test $support_for__thread = yes; then 
644    AC_DEFINE([TOOLCHAIN_SUPPORTS__THREAD],[],[Whether the tool chain supports __thread])
645 fi
646
647 AC_MSG_RESULT($support_for__thread)
648
649 dnl
650 dnl posix tls
651 dnl
652
653 m4_define([pthread_test_program],[dnl
654 #include <stdlib.h>
655 #include <pthread.h>
656
657 static pthread_once_t once_control = PTHREAD_ONCE_INIT;
658 static pthread_key_t key;
659
660 static void
661 make_key (void)
662 {
663     pthread_key_create (&key, NULL);
664 }
665
666 int
667 main ()
668 {
669     void *value = NULL;
670
671     if (pthread_once (&once_control, make_key) != 0)
672     {
673         value = NULL;
674     }
675     else
676     {
677         value = pthread_getspecific (key);
678         if (!value)
679         {
680             value = malloc (100);
681             pthread_setspecific (key, value);
682         }
683     }
684     return 0;
685 }
686 ])
687
688 AC_DEFUN([PIXMAN_CHECK_PTHREAD],[dnl
689     if test "z$support_for_pthread_setspecific" != "zyes"; then
690         PIXMAN_LINK_WITH_ENV(
691                 [$1], [pthread_test_program],
692                 [PTHREAD_CFLAGS="$CFLAGS"
693                  PTHREAD_LIBS="$LIBS"
694                  PTHREAD_LDFLAGS="$LDFLAGS"
695                  support_for_pthread_setspecific=yes])
696     fi
697 ])
698
699 if test $support_for__thread = no; then
700     support_for_pthread_setspecific=no
701
702     AC_MSG_CHECKING(for pthread_setspecific)
703
704     PIXMAN_CHECK_PTHREAD([CFLAGS="-D_REENTRANT"; LIBS="-lpthread"])
705     PIXMAN_CHECK_PTHREAD([CFLAGS="-pthread"; LDFLAGS="-pthread"])
706
707     if test $support_for_pthread_setspecific = yes; then
708         CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
709         AC_DEFINE([HAVE_PTHREAD_SETSPECIFIC], [], [Whether pthread_setspecific() is supported])
710     fi
711
712     AC_MSG_RESULT($support_for_pthread_setspecific);
713 fi
714
715 AC_SUBST(TOOLCHAIN_SUPPORTS__THREAD)
716 AC_SUBST(HAVE_PTHREAD_SETSPECIFIC)
717 AC_SUBST(PTHREAD_LDFLAGS)
718 AC_SUBST(PTHREAD_LIBS)
719
720 AC_OUTPUT([pixman-1.pc
721            pixman-1-uninstalled.pc
722            Makefile
723            pixman/Makefile
724            pixman/pixman-version.h
725            test/Makefile])