Pre-release version bump to 0.21.4
[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], 21)
57 m4_define([pixman_micro], 4)
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 #ifdef _WIN32
252 #error Have -fvisibility but it is ignored and generates a warning
253 #endif
254 #else
255 error Need GCC 4.0 for visibility
256 #endif
257 ])
258
259 PIXMAN_CHECK_CFLAG([-xldscope=hidden], [dnl
260 #if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
261 #else
262 error Need Sun Studio 8 for visibility
263 #endif
264 ])
265
266 dnl ===========================================================================
267 dnl Check for MMX
268
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"
276       fi
277    else
278       MMX_CFLAGS="-mmmx -Winline"
279    fi
280 fi
281
282 have_mmx_intrinsics=no
283 AC_MSG_CHECKING(whether to use MMX intrinsics)
284 xserver_save_CFLAGS=$CFLAGS
285 CFLAGS="$MMX_CFLAGS $CFLAGS"
286 AC_COMPILE_IFELSE([
287 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
288 error "Need GCC >= 3.4 for MMX intrinsics"
289 #endif
290 #include <mmintrin.h>
291 int main () {
292     __m64 v = _mm_cvtsi32_si64 (1);
293     return _mm_cvtsi64_si32 (v);
294 }], have_mmx_intrinsics=yes)
295 CFLAGS=$xserver_save_CFLAGS
296
297 AC_ARG_ENABLE(mmx,
298    [AC_HELP_STRING([--disable-mmx],
299                    [disable MMX fast paths])],
300    [enable_mmx=$enableval], [enable_mmx=auto])
301
302 if test $enable_mmx = no ; then
303    have_mmx_intrinsics=disabled
304 fi
305
306 if test $have_mmx_intrinsics = yes ; then
307    AC_DEFINE(USE_MMX, 1, [use MMX compiler intrinsics])
308 else
309    MMX_CFLAGS=
310 fi
311
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])
315 fi
316
317 AM_CONDITIONAL(USE_MMX, test $have_mmx_intrinsics = yes)
318
319 dnl ===========================================================================
320 dnl Check for SSE2
321
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"
327       fi
328    else
329       SSE2_CFLAGS="-mmmx -msse2 -Winline"
330    fi
331 fi
332
333 have_sse2_intrinsics=no
334 AC_MSG_CHECKING(whether to use SSE2 intrinsics)
335 xserver_save_CFLAGS=$CFLAGS
336 CFLAGS="$SSE2_CFLAGS $CFLAGS"
337
338 AC_COMPILE_IFELSE([
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"
342 #   endif
343 #endif
344 #include <mmintrin.h>
345 #include <xmmintrin.h>
346 #include <emmintrin.h>
347 int main () {
348     __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
349         c = _mm_xor_si128 (a, b);
350     return 0;
351 }], have_sse2_intrinsics=yes)
352 CFLAGS=$xserver_save_CFLAGS
353
354 AC_ARG_ENABLE(sse2,
355    [AC_HELP_STRING([--disable-sse2],
356                    [disable SSE2 fast paths])],
357    [enable_sse2=$enableval], [enable_sse2=auto])
358
359 if test $enable_sse2 = no ; then
360    have_sse2_intrinsics=disabled
361 fi
362
363 if test $have_sse2_intrinsics = yes ; then
364    AC_DEFINE(USE_SSE2, 1, [use SSE2 compiler intrinsics])
365 fi
366
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])
370 fi
371
372 AM_CONDITIONAL(USE_SSE2, test $have_sse2_intrinsics = yes)
373
374 dnl ===========================================================================
375 dnl Other special flags needed when building code using MMX or SSE instructions
376 case $host_os in
377    solaris*)
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
383          use_hwcap_mapfile=no
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,
390                         HWCAP_LDFLAGS="")
391          LDFLAGS="$hwcap_save_LDFLAGS"
392          AC_MSG_RESULT($use_hwcap_mapfile)
393       fi
394       if test "x$MMX_LDFLAGS" = "x" ; then
395          MMX_LDFLAGS="$HWCAP_LDFLAGS"
396       fi
397       if test "x$SSE2_LDFLAGS" = "x" ; then
398          SSE2_LDFLAGS="$HWCAP_LDFLAGS"
399       fi
400       ;;
401 esac
402
403 AC_SUBST(MMX_CFLAGS)
404 AC_SUBST(MMX_LDFLAGS)
405 AC_SUBST(SSE2_CFLAGS)
406 AC_SUBST(SSE2_LDFLAGS)
407
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"
412 else
413     VMX_CFLAGS="-maltivec -mabi=altivec"
414 fi
415
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"
420 AC_COMPILE_IFELSE([
421 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
422 error "Need GCC >= 3.4 for sane altivec support"
423 #endif
424 #include <altivec.h>
425 int main () {
426     vector unsigned int v = vec_splat_u32 (1);
427     v = vec_sub (v, v);
428     return 0;
429 }], have_vmx_intrinsics=yes)
430 CFLAGS=$xserver_save_CFLAGS
431
432 AC_ARG_ENABLE(vmx,
433    [AC_HELP_STRING([--disable-vmx],
434                    [disable VMX fast paths])],
435    [enable_vmx=$enableval], [enable_vmx=auto])
436
437 if test $enable_vmx = no ; then
438    have_vmx_intrinsics=disabled
439 fi
440
441 if test $have_vmx_intrinsics = yes ; then
442    AC_DEFINE(USE_VMX, 1, [use VMX compiler intrinsics])
443 else
444    VMX_CFLAGS=
445 fi
446
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])
450 fi
451
452 AC_SUBST(VMX_CFLAGS)
453
454 AM_CONDITIONAL(USE_VMX, test $have_vmx_intrinsics = yes)
455
456 dnl ==========================================================================
457 dnl Check if assembler is gas compatible and supports ARM SIMD instructions
458 have_arm_simd=no
459 AC_MSG_CHECKING(whether to use ARM SIMD assembler)
460 xserver_save_CFLAGS=$CFLAGS
461 CFLAGS="-x assembler-with-cpp $CFLAGS"
462 AC_COMPILE_IFELSE([[
463 .text
464 .arch armv6
465 .object_arch armv4
466 .arm
467 .altmacro
468 #ifndef __ARM_EABI__
469 #error EABI is required (to be sure that calling conventions are compatible)
470 #endif
471 pld [r0]
472 uqadd8 r0, r0, r0]], have_arm_simd=yes)
473 CFLAGS=$xserver_save_CFLAGS
474
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])
479
480 if test $enable_arm_simd = no ; then
481    have_arm_simd=disabled
482 fi
483
484 if test $have_arm_simd = yes ; then
485    AC_DEFINE(USE_ARM_SIMD, 1, [use ARM SIMD assembly optimizations])
486 fi
487
488 AM_CONDITIONAL(USE_ARM_SIMD, test $have_arm_simd = yes)
489
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])
493 fi
494
495 dnl ==========================================================================
496 dnl Check if assembler is gas compatible and supports NEON instructions
497 have_arm_neon=no
498 AC_MSG_CHECKING(whether to use ARM NEON assembler)
499 xserver_save_CFLAGS=$CFLAGS
500 CFLAGS="-x assembler-with-cpp $CFLAGS"
501 AC_COMPILE_IFELSE([[
502 .text
503 .fpu neon
504 .arch armv7a
505 .object_arch armv4
506 .eabi_attribute 10, 0
507 .arm
508 .altmacro
509 #ifndef __ARM_EABI__
510 #error EABI is required (to be sure that calling conventions are compatible)
511 #endif
512 pld [r0]
513 vmovn.u16 d0, q0]], have_arm_neon=yes)
514 CFLAGS=$xserver_save_CFLAGS
515
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])
520
521 if test $enable_arm_neon = no ; then
522    have_arm_neon=disabled
523 fi
524
525 if test $have_arm_neon = yes ; then
526    AC_DEFINE(USE_ARM_NEON, 1, [use ARM NEON assembly optimizations])
527 fi
528
529 AM_CONDITIONAL(USE_ARM_NEON, test $have_arm_neon = yes)
530
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])
534 fi
535
536 dnl =========================================================================================
537 dnl Check for GNU-style inline assembly support
538
539 have_gcc_inline_asm=no
540 AC_MSG_CHECKING(whether to use GNU-style inline assembler)
541 AC_COMPILE_IFELSE([
542 int main () {
543     /* Most modern architectures have a NOP instruction, so this is a fairly generic test. */
544         asm volatile ( "\tnop\n" : : : "cc", "memory" );
545     return 0;
546 }], have_gcc_inline_asm=yes)
547
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])
552
553 if test $enable_gcc_inline_asm = no ; then
554    have_gcc_inline_asm=disabled
555 fi
556
557 if test $have_gcc_inline_asm = yes ; then
558    AC_DEFINE(USE_GCC_INLINE_ASM, 1, [use GNU-style inline assembler])
559 fi
560
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])
564 fi
565
566 AM_CONDITIONAL(USE_GCC_INLINE_ASM, test $have_gcc_inline_asm = yes)
567
568 dnl ==============================================
569 dnl Static test programs
570
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])
575
576 TESTPROGS_EXTRA_LDFLAGS=
577 if test "x$enable_static_testprogs" = "xyes" ; then
578    TESTPROGS_EXTRA_LDFLAGS="-all-static"
579 fi
580 AC_SUBST(TESTPROGS_EXTRA_LDFLAGS)
581
582 dnl ==============================================
583 dnl Timers
584
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])
589
590 if test $enable_timers = yes ; then 
591    AC_DEFINE(PIXMAN_TIMERS, 1, [enable TIMER_BEGIN/TIMER_END macros])
592 fi
593 AC_SUBST(PIXMAN_TIMERS)
594
595 dnl ===================================
596 dnl GTK+
597
598 AC_ARG_ENABLE(gtk,
599    [AC_HELP_STRING([--enable-gtk],
600                    [enable tests using GTK+ [default=auto]])],
601    [enable_gtk=$enableval], [enable_gtk=auto])
602
603 PKG_PROG_PKG_CONFIG
604
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])
608 fi
609
610 if test $enable_gtk = auto ; then
611    AC_CHECK_LIB([pixman-1], [pixman_version_string], [enable_gtk=auto], [enable_gtk=no])
612 fi
613
614 if test $enable_gtk = auto ; then
615    PKG_CHECK_MODULES(GTK, [gtk+-2.0 pixman-1], [enable_gtk=yes], [enable_gtk=no])
616 fi
617
618 AM_CONDITIONAL(HAVE_GTK, [test "x$enable_gtk" = xyes])
619
620 AC_SUBST(GTK_CFLAGS)
621 AC_SUBST(GTK_LIBS)
622 AC_SUBST(DEP_CFLAGS)
623 AC_SUBST(DEP_LIBS)
624
625 dnl =====================================
626 dnl posix_memalign, sigaction, alarm, gettimeofday
627
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()])
631 fi
632
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()])
636 fi
637
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()])
641 fi
642
643 AC_CHECK_HEADER([sys/mman.h],
644    [AC_DEFINE(HAVE_SYS_MMAN_H, [1], [Define to 1 if we have <sys/mman.h>])])
645
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()])
649 fi
650
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()])
654 fi
655
656 AC_CHECK_HEADER([fenv.h],
657    [AC_DEFINE(HAVE_FENV_H, [1], [Define to 1 if we have <fenv.h>])])
658
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()])
662 fi
663
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()])
668 fi
669
670 dnl =====================================
671 dnl Thread local storage
672
673 support_for__thread=no
674
675 AC_MSG_CHECKING(for __thread)
676 AC_LINK_IFELSE([
677 #if defined(__MINGW32__) && !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5))
678 #error This MinGW version has broken __thread support
679 #endif
680 #ifdef __OpenBSD__
681 #error OpenBSD has broken __thread support
682 #endif
683 static __thread int x ;
684 int main () { x = 123; return x; }
685 ], support_for__thread=yes)
686
687 if test $support_for__thread = yes; then 
688    AC_DEFINE([TOOLCHAIN_SUPPORTS__THREAD],[],[Whether the tool chain supports __thread])
689 fi
690
691 AC_MSG_RESULT($support_for__thread)
692
693 dnl
694 dnl posix tls
695 dnl
696
697 m4_define([pthread_test_program],[dnl
698 #include <stdlib.h>
699 #include <pthread.h>
700
701 static pthread_once_t once_control = PTHREAD_ONCE_INIT;
702 static pthread_key_t key;
703
704 static void
705 make_key (void)
706 {
707     pthread_key_create (&key, NULL);
708 }
709
710 int
711 main ()
712 {
713     void *value = NULL;
714
715     if (pthread_once (&once_control, make_key) != 0)
716     {
717         value = NULL;
718     }
719     else
720     {
721         value = pthread_getspecific (key);
722         if (!value)
723         {
724             value = malloc (100);
725             pthread_setspecific (key, value);
726         }
727     }
728     return 0;
729 }
730 ])
731
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"
737                  PTHREAD_LIBS="$LIBS"
738                  PTHREAD_LDFLAGS="$LDFLAGS"
739                  support_for_pthread_setspecific=yes])
740     fi
741 ])
742
743 if test $support_for__thread = no; then
744     support_for_pthread_setspecific=no
745
746     AC_MSG_CHECKING(for pthread_setspecific)
747
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"])
751     
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])
755     fi
756
757     AC_MSG_RESULT($support_for_pthread_setspecific);
758 fi
759
760 AC_SUBST(TOOLCHAIN_SUPPORTS__THREAD)
761 AC_SUBST(HAVE_PTHREAD_SETSPECIFIC)
762 AC_SUBST(PTHREAD_LDFLAGS)
763 AC_SUBST(PTHREAD_LIBS)
764
765 dnl =====================================
766 dnl __attribute__((constructor))
767
768 support_for_attribute_constructor=no
769
770 AC_MSG_CHECKING(for __attribute__((constructor)))
771 AC_LINK_IFELSE([
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
775  */
776 static int x = 1;
777 static void __attribute__((constructor)) constructor_function () { x = 0; }
778 int main (void) { return x; }
779 #else
780 #error not gcc or gcc version is older than 2.7
781 #endif
782 ], support_for_attribute_constructor=yes)
783
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))])
787 fi
788
789 AC_MSG_RESULT($support_for_attribute_constructor)
790 AC_SUBST(TOOLCHAIN_SUPPORTS_ATTRIBUTE_CONSTRUCTOR)
791
792 AC_OUTPUT([pixman-1.pc
793            pixman-1-uninstalled.pc
794            Makefile
795            pixman/Makefile
796            pixman/pixman-version.h
797            test/Makefile])