Pre-release version bump to 0.25.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
30 #     even MICRO 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], 25)
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                 [AC_LANG_SOURCE([$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 "x$test_CFLAGS" = "x" &&        \
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 when autoconf support that (require autoconf >=2.62)
196 OPENMP_CFLAGS=
197 m4_ifdef([AC_OPENMP], [AC_OPENMP])
198
199 if test "x$enable_openmp" = "xyes" && test "x$ac_cv_prog_c_openmp" = "xunsupported" ; then
200   AC_MSG_WARN([OpenMP support requested but found unsupported])
201 fi
202
203 dnl May not fail to link without -Wall -Werror added
204 dnl So try to link only when openmp is supported
205 dnl ac_cv_prog_c_openmp is not defined when --disable-openmp is used
206 if test "x$ac_cv_prog_c_openmp" != "xunsupported" && test "x$ac_cv_prog_c_openmp" != "x"; then
207   m4_define([openmp_test_program],[dnl
208   #include <stdio.h>
209
210   extern unsigned int lcg_seed;
211   #pragma omp threadprivate(lcg_seed)
212   unsigned int lcg_seed;
213
214   unsigned function(unsigned a, unsigned b)
215   {
216         lcg_seed ^= b;
217         return ((a + b) ^ a ) + lcg_seed;
218   }
219
220   int main(int argc, char **argv)
221   {
222         int i;
223         int n1 = 0, n2 = argc;
224         unsigned checksum = 0;
225         int verbose = argv != NULL;
226         unsigned (*test_function)(unsigned, unsigned);
227         test_function = function;
228         #pragma omp parallel for reduction(+:checksum) default(none) \
229                                         shared(n1, n2, test_function, verbose)
230         for (i = n1; i < n2; i++)
231         {
232                 unsigned crc = test_function (i, 0);
233                 if (verbose)
234                         printf ("%d: %08X\n", i, crc);
235                 checksum += crc;
236         }
237         printf("%u\n", checksum);
238         return 0;
239   }
240   ])
241
242   PIXMAN_LINK_WITH_ENV(
243         [CFLAGS="$OPENMP_CFLAGS" LDFLAGS="$OPENMP_CFLAGS"],
244         [openmp_test_program],
245         [have_openmp=yes],
246         [have_openmp=no])
247   if test "x$have_openmp" = "xyes" ; then
248     AC_DEFINE(USE_OPENMP, 1, [use OpenMP in the test suite])
249   fi
250 fi
251 AC_SUBST(OPENMP_CFLAGS)
252
253 dnl =========================================================================
254 dnl -fvisibility stuff
255
256 PIXMAN_CHECK_CFLAG([-fvisibility=hidden], [dnl
257 #if defined(__GNUC__) && (__GNUC__ >= 4)
258 #ifdef _WIN32
259 #error Have -fvisibility but it is ignored and generates a warning
260 #endif
261 #else
262 #error Need GCC 4.0 for visibility
263 #endif
264 ])
265
266 PIXMAN_CHECK_CFLAG([-xldscope=hidden], [dnl
267 #if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
268 #else
269 #error Need Sun Studio 8 for visibility
270 #endif
271 ])
272
273 dnl ===========================================================================
274 dnl Check for MMX
275
276 if test "x$MMX_CFLAGS" = "x" ; then
277    if test "x$SUNCC" = "xyes"; then
278       # Sun Studio doesn't have an -xarch=mmx flag, so we have to use sse
279       # but if we're building 64-bit, mmx & sse support is on by default and
280       # -xarch=sse throws an error instead
281       if test "$AMD64_ABI" = "no" ; then
282          MMX_CFLAGS="-xarch=sse"
283       fi
284    else
285       MMX_CFLAGS="-mmmx -Winline"
286    fi
287 fi
288
289 have_mmx_intrinsics=no
290 AC_MSG_CHECKING(whether to use MMX intrinsics)
291 xserver_save_CFLAGS=$CFLAGS
292 CFLAGS="$MMX_CFLAGS $CFLAGS"
293 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
294 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
295 #error "Need GCC >= 3.4 for MMX intrinsics"
296 #endif
297 #if defined(__clang__)
298 #error "clang chokes on the inline assembly in pixman-mmx.c"
299 #endif
300 #include <mmintrin.h>
301 int main () {
302     __m64 v = _mm_cvtsi32_si64 (1);
303     return _mm_cvtsi64_si32 (v);
304 }]])], have_mmx_intrinsics=yes)
305 CFLAGS=$xserver_save_CFLAGS
306
307 AC_ARG_ENABLE(mmx,
308    [AC_HELP_STRING([--disable-mmx],
309                    [disable x86 MMX fast paths])],
310    [enable_mmx=$enableval], [enable_mmx=auto])
311
312 if test $enable_mmx = no ; then
313    have_mmx_intrinsics=disabled
314 fi
315
316 if test $have_mmx_intrinsics = yes ; then
317    AC_DEFINE(USE_X86_MMX, 1, [use x86 MMX compiler intrinsics])
318 else
319    MMX_CFLAGS=
320 fi
321
322 AC_MSG_RESULT($have_mmx_intrinsics)
323 if test $enable_mmx = yes && test $have_mmx_intrinsics = no ; then
324    AC_MSG_ERROR([x86 MMX intrinsics not detected])
325 fi
326
327 AM_CONDITIONAL(USE_X86_MMX, test $have_mmx_intrinsics = yes)
328
329 dnl ===========================================================================
330 dnl Check for SSE2
331
332 if test "x$SSE2_CFLAGS" = "x" ; then
333    if test "x$SUNCC" = "xyes"; then
334       # SSE2 is enabled by default in the Sun Studio 64-bit environment
335       if test "$AMD64_ABI" = "no" ; then
336          SSE2_CFLAGS="-xarch=sse2"
337       fi
338    else
339       SSE2_CFLAGS="-msse2 -Winline"
340    fi
341 fi
342
343 have_sse2_intrinsics=no
344 AC_MSG_CHECKING(whether to use SSE2 intrinsics)
345 xserver_save_CFLAGS=$CFLAGS
346 CFLAGS="$SSE2_CFLAGS $CFLAGS"
347
348 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
349 #if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 2))
350 #   if !defined(__amd64__) && !defined(__x86_64__)
351 #      error "Need GCC >= 4.2 for SSE2 intrinsics on x86"
352 #   endif
353 #endif
354 #include <mmintrin.h>
355 #include <xmmintrin.h>
356 #include <emmintrin.h>
357 int main () {
358     __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
359         c = _mm_xor_si128 (a, b);
360     return 0;
361 }]])], have_sse2_intrinsics=yes)
362 CFLAGS=$xserver_save_CFLAGS
363
364 AC_ARG_ENABLE(sse2,
365    [AC_HELP_STRING([--disable-sse2],
366                    [disable SSE2 fast paths])],
367    [enable_sse2=$enableval], [enable_sse2=auto])
368
369 if test $enable_sse2 = no ; then
370    have_sse2_intrinsics=disabled
371 fi
372
373 if test $have_sse2_intrinsics = yes ; then
374    AC_DEFINE(USE_SSE2, 1, [use SSE2 compiler intrinsics])
375 fi
376
377 AC_MSG_RESULT($have_sse2_intrinsics)
378 if test $enable_sse2 = yes && test $have_sse2_intrinsics = no ; then
379    AC_MSG_ERROR([SSE2 intrinsics not detected])
380 fi
381
382 AM_CONDITIONAL(USE_SSE2, test $have_sse2_intrinsics = yes)
383
384 dnl ===========================================================================
385 dnl Other special flags needed when building code using MMX or SSE instructions
386 case $host_os in
387    solaris*)
388       # When building 32-bit binaries, apply a mapfile to ensure that the
389       # binaries aren't flagged as only able to run on MMX+SSE capable CPUs
390       # since they check at runtime before using those instructions.
391       # Not all linkers grok the mapfile format so we check for that first.
392       if test "$AMD64_ABI" = "no" ; then
393          use_hwcap_mapfile=no
394          AC_MSG_CHECKING(whether to use a hardware capability map file)
395          hwcap_save_LDFLAGS="$LDFLAGS"
396          HWCAP_LDFLAGS='-Wl,-M,$(srcdir)/solaris-hwcap.mapfile'
397          LDFLAGS="$LDFLAGS -Wl,-M,pixman/solaris-hwcap.mapfile"
398          AC_LINK_IFELSE([AC_LANG_SOURCE([[int main() { return 0; }]])],
399                         use_hwcap_mapfile=yes,
400                         HWCAP_LDFLAGS="")
401          LDFLAGS="$hwcap_save_LDFLAGS"
402          AC_MSG_RESULT($use_hwcap_mapfile)
403       fi
404       if test "x$MMX_LDFLAGS" = "x" ; then
405          MMX_LDFLAGS="$HWCAP_LDFLAGS"
406       fi
407       if test "x$SSE2_LDFLAGS" = "x" ; then
408          SSE2_LDFLAGS="$HWCAP_LDFLAGS"
409       fi
410       ;;
411 esac
412
413 AC_SUBST(IWMMXT_CFLAGS)
414 AC_SUBST(MMX_CFLAGS)
415 AC_SUBST(MMX_LDFLAGS)
416 AC_SUBST(SSE2_CFLAGS)
417 AC_SUBST(SSE2_LDFLAGS)
418
419 dnl ===========================================================================
420 dnl Check for VMX/Altivec
421 if test -n "`$CC -v 2>&1 | grep version | grep Apple`"; then
422     VMX_CFLAGS="-faltivec"
423 else
424     VMX_CFLAGS="-maltivec -mabi=altivec"
425 fi
426
427 have_vmx_intrinsics=no
428 AC_MSG_CHECKING(whether to use VMX/Altivec intrinsics)
429 xserver_save_CFLAGS=$CFLAGS
430 CFLAGS="$VMX_CFLAGS $CFLAGS"
431 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
432 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
433 #error "Need GCC >= 3.4 for sane altivec support"
434 #endif
435 #include <altivec.h>
436 int main () {
437     vector unsigned int v = vec_splat_u32 (1);
438     v = vec_sub (v, v);
439     return 0;
440 }]])], have_vmx_intrinsics=yes)
441 CFLAGS=$xserver_save_CFLAGS
442
443 AC_ARG_ENABLE(vmx,
444    [AC_HELP_STRING([--disable-vmx],
445                    [disable VMX fast paths])],
446    [enable_vmx=$enableval], [enable_vmx=auto])
447
448 if test $enable_vmx = no ; then
449    have_vmx_intrinsics=disabled
450 fi
451
452 if test $have_vmx_intrinsics = yes ; then
453    AC_DEFINE(USE_VMX, 1, [use VMX compiler intrinsics])
454 else
455    VMX_CFLAGS=
456 fi
457
458 AC_MSG_RESULT($have_vmx_intrinsics)
459 if test $enable_vmx = yes && test $have_vmx_intrinsics = no ; then
460    AC_MSG_ERROR([VMX intrinsics not detected])
461 fi
462
463 AC_SUBST(VMX_CFLAGS)
464
465 AM_CONDITIONAL(USE_VMX, test $have_vmx_intrinsics = yes)
466
467 dnl ==========================================================================
468 dnl Check if assembler is gas compatible and supports ARM SIMD instructions
469 have_arm_simd=no
470 AC_MSG_CHECKING(whether to use ARM SIMD assembler)
471 xserver_save_CFLAGS=$CFLAGS
472 CFLAGS="-x assembler-with-cpp $CFLAGS"
473 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
474 .text
475 .arch armv6
476 .object_arch armv4
477 .arm
478 .altmacro
479 #ifndef __ARM_EABI__
480 #error EABI is required (to be sure that calling conventions are compatible)
481 #endif
482 pld [r0]
483 uqadd8 r0, r0, r0]])], have_arm_simd=yes)
484 CFLAGS=$xserver_save_CFLAGS
485
486 AC_ARG_ENABLE(arm-simd,
487    [AC_HELP_STRING([--disable-arm-simd],
488                    [disable ARM SIMD fast paths])],
489    [enable_arm_simd=$enableval], [enable_arm_simd=auto])
490
491 if test $enable_arm_simd = no ; then
492    have_arm_simd=disabled
493 fi
494
495 if test $have_arm_simd = yes ; then
496    AC_DEFINE(USE_ARM_SIMD, 1, [use ARM SIMD assembly optimizations])
497 fi
498
499 AM_CONDITIONAL(USE_ARM_SIMD, test $have_arm_simd = yes)
500
501 AC_MSG_RESULT($have_arm_simd)
502 if test $enable_arm_simd = yes && test $have_arm_simd = no ; then
503    AC_MSG_ERROR([ARM SIMD intrinsics not detected])
504 fi
505
506 dnl ==========================================================================
507 dnl Check if assembler is gas compatible and supports NEON instructions
508 have_arm_neon=no
509 AC_MSG_CHECKING(whether to use ARM NEON assembler)
510 xserver_save_CFLAGS=$CFLAGS
511 CFLAGS="-x assembler-with-cpp $CFLAGS"
512 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
513 .text
514 .fpu neon
515 .arch armv7a
516 .object_arch armv4
517 .eabi_attribute 10, 0
518 .arm
519 .altmacro
520 #ifndef __ARM_EABI__
521 #error EABI is required (to be sure that calling conventions are compatible)
522 #endif
523 pld [r0]
524 vmovn.u16 d0, q0]])], have_arm_neon=yes)
525 CFLAGS=$xserver_save_CFLAGS
526
527 AC_ARG_ENABLE(arm-neon,
528    [AC_HELP_STRING([--disable-arm-neon],
529                    [disable ARM NEON fast paths])],
530    [enable_arm_neon=$enableval], [enable_arm_neon=auto])
531
532 if test $enable_arm_neon = no ; then
533    have_arm_neon=disabled
534 fi
535
536 if test $have_arm_neon = yes ; then
537    AC_DEFINE(USE_ARM_NEON, 1, [use ARM NEON assembly optimizations])
538 fi
539
540 AM_CONDITIONAL(USE_ARM_NEON, test $have_arm_neon = yes)
541
542 AC_MSG_RESULT($have_arm_neon)
543 if test $enable_arm_neon = yes && test $have_arm_neon = no ; then
544    AC_MSG_ERROR([ARM NEON intrinsics not detected])
545 fi
546
547 dnl ===========================================================================
548 dnl Check for IWMMXT
549
550 if test "x$IWMMXT_CFLAGS" = "x" ; then
551    IWMMXT_CFLAGS="-march=iwmmxt -flax-vector-conversions -Winline"
552 fi
553
554 have_iwmmxt_intrinsics=no
555 AC_MSG_CHECKING(whether to use ARM IWMMXT intrinsics)
556 xserver_save_CFLAGS=$CFLAGS
557 CFLAGS="$IWMMXT_CFLAGS $CFLAGS"
558 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
559 #ifndef __arm__
560 #error "IWMMXT is only available on ARM"
561 #endif
562 #if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 6))
563 #error "Need GCC >= 4.6 for IWMMXT intrinsics"
564 #endif
565 #include <mmintrin.h>
566 int main () {
567         union {
568                 __m64 v;
569                 char c[8];
570         } a = { .c = {1, 2, 3, 4, 5, 6, 7, 8} };
571         int b = 4;
572         __m64 c = _mm_srli_si64 (a.v, b);
573 }]])], have_iwmmxt_intrinsics=yes)
574 CFLAGS=$xserver_save_CFLAGS
575
576 AC_ARG_ENABLE(arm-iwmmxt,
577    [AC_HELP_STRING([--disable-arm-iwmmxt],
578                    [disable ARM IWMMXT fast paths])],
579    [enable_iwmmxt=$enableval], [enable_iwmmxt=auto])
580
581 if test $enable_iwmmxt = no ; then
582    have_iwmmxt_intrinsics=disabled
583 fi
584
585 if test $have_iwmmxt_intrinsics = yes ; then
586    AC_DEFINE(USE_ARM_IWMMXT, 1, [use ARM IWMMXT compiler intrinsics])
587 else
588    IWMMXT_CFLAGS=
589 fi
590
591 AC_MSG_RESULT($have_iwmmxt_intrinsics)
592 if test $enable_iwmmxt = yes && test $have_iwmmxt_intrinsics = no ; then
593    AC_MSG_ERROR([IWMMXT intrinsics not detected])
594 fi
595
596 AM_CONDITIONAL(USE_ARM_IWMMXT, test $have_iwmmxt_intrinsics = yes)
597
598 dnl ==========================================================================
599 dnl Check if assembler is gas compatible and supports MIPS DSPr2 instructions
600
601 have_mips_dspr2=no
602 AC_MSG_CHECKING(whether to use MIPS DSPr2 assembler)
603 xserver_save_CFLAGS=$CFLAGS
604 CFLAGS="-mdspr2 $CFLAGS"
605
606 AC_COMPILE_IFELSE([[
607 #if !(defined(__mips__) &&  __mips_isa_rev >= 2)
608 #error MIPS DSPr2 is currently only available on MIPS32r2 platforms.
609 #endif
610 int
611 main ()
612 {
613     int c = 0, a = 0, b = 0;
614     __asm__ __volatile__ (
615         "precr.qb.ph %[c], %[a], %[b]          \n\t"
616         : [c] "=r" (c)
617         : [a] "r" (a), [b] "r" (b)
618     );
619     return c;
620 }]], have_mips_dspr2=yes)
621 CFLAGS=$xserver_save_CFLAGS
622
623 AC_ARG_ENABLE(mips-dspr2,
624    [AC_HELP_STRING([--disable-mips-dspr2],
625                    [disable MIPS DSPr2 fast paths])],
626    [enable_mips_dspr2=$enableval], [enable_mips_dspr2=auto])
627
628 if test $enable_mips_dspr2 = no ; then
629    have_mips_dspr2=disabled
630 fi
631
632 if test $have_mips_dspr2 = yes ; then
633    AC_DEFINE(USE_MIPS_DSPR2, 1, [use MIPS DSPr2 assembly optimizations])
634 fi
635
636 AM_CONDITIONAL(USE_MIPS_DSPR2, test $have_mips_dspr2 = yes)
637
638 AC_MSG_RESULT($have_mips_dspr2)
639 if test $enable_mips_dspr2 = yes && test $have_mips_dspr2 = no ; then
640    AC_MSG_ERROR([MIPS DSPr2 instructions not detected])
641 fi
642
643 dnl =========================================================================================
644 dnl Check for GNU-style inline assembly support
645
646 have_gcc_inline_asm=no
647 AC_MSG_CHECKING(whether to use GNU-style inline assembler)
648 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
649 int main () {
650     /* Most modern architectures have a NOP instruction, so this is a fairly generic test. */
651         asm volatile ( "\tnop\n" : : : "cc", "memory" );
652     return 0;
653 }]])], have_gcc_inline_asm=yes)
654
655 AC_ARG_ENABLE(gcc-inline-asm,
656    [AC_HELP_STRING([--disable-gcc-inline-asm],
657                    [disable GNU-style inline assembler])],
658    [enable_gcc_inline_asm=$enableval], [enable_gcc_inline_asm=auto])
659
660 if test $enable_gcc_inline_asm = no ; then
661    have_gcc_inline_asm=disabled
662 fi
663
664 if test $have_gcc_inline_asm = yes ; then
665    AC_DEFINE(USE_GCC_INLINE_ASM, 1, [use GNU-style inline assembler])
666 fi
667
668 AC_MSG_RESULT($have_gcc_inline_asm)
669 if test $enable_gcc_inline_asm = yes && test $have_gcc_inline_asm = no ; then
670    AC_MSG_ERROR([GNU-style inline assembler not detected])
671 fi
672
673 AM_CONDITIONAL(USE_GCC_INLINE_ASM, test $have_gcc_inline_asm = yes)
674
675 dnl ==============================================
676 dnl Static test programs
677
678 AC_ARG_ENABLE(static-testprogs,
679    [AC_HELP_STRING([--enable-static-testprogs],
680                    [build test programs as static binaries [default=no]])],
681    [enable_static_testprogs=$enableval], [enable_static_testprogs=no])
682
683 TESTPROGS_EXTRA_LDFLAGS=
684 if test "x$enable_static_testprogs" = "xyes" ; then
685    TESTPROGS_EXTRA_LDFLAGS="-all-static"
686 fi
687 AC_SUBST(TESTPROGS_EXTRA_LDFLAGS)
688
689 dnl ==============================================
690 dnl Timers
691
692 AC_ARG_ENABLE(timers,
693    [AC_HELP_STRING([--enable-timers],
694                    [enable TIMER_BEGIN and TIMER_END macros [default=no]])],
695    [enable_timers=$enableval], [enable_timers=no])
696
697 if test $enable_timers = yes ; then 
698    AC_DEFINE(PIXMAN_TIMERS, 1, [enable TIMER_BEGIN/TIMER_END macros])
699 fi
700 AC_SUBST(PIXMAN_TIMERS)
701
702 dnl ===================================
703 dnl GTK+
704
705 AC_ARG_ENABLE(gtk,
706    [AC_HELP_STRING([--enable-gtk],
707                    [enable tests using GTK+ [default=auto]])],
708    [enable_gtk=$enableval], [enable_gtk=auto])
709
710 PKG_PROG_PKG_CONFIG
711
712 if test $enable_gtk = yes ; then
713    AC_CHECK_LIB([pixman-1], [pixman_version_string])
714    PKG_CHECK_MODULES(GTK, [gtk+-2.0 pixman-1])
715 fi
716
717 if test $enable_gtk = auto ; then
718    AC_CHECK_LIB([pixman-1], [pixman_version_string], [enable_gtk=auto], [enable_gtk=no])
719 fi
720
721 if test $enable_gtk = auto ; then
722    PKG_CHECK_MODULES(GTK, [gtk+-2.0 pixman-1], [enable_gtk=yes], [enable_gtk=no])
723 fi
724
725 AM_CONDITIONAL(HAVE_GTK, [test "x$enable_gtk" = xyes])
726
727 AC_SUBST(GTK_CFLAGS)
728 AC_SUBST(GTK_LIBS)
729 AC_SUBST(DEP_CFLAGS)
730 AC_SUBST(DEP_LIBS)
731
732 dnl =====================================
733 dnl posix_memalign, sigaction, alarm, gettimeofday
734
735 AC_CHECK_FUNC(posix_memalign, have_posix_memalign=yes, have_posix_memalign=no)
736 if test x$have_posix_memalign = xyes; then
737    AC_DEFINE(HAVE_POSIX_MEMALIGN, 1, [Whether we have posix_memalign()])
738 fi
739
740 AC_CHECK_FUNC(sigaction, have_sigaction=yes, have_sigaction=no)
741 if test x$have_sigaction = xyes; then
742    AC_DEFINE(HAVE_SIGACTION, 1, [Whether we have sigaction()])
743 fi
744
745 AC_CHECK_FUNC(alarm, have_alarm=yes, have_alarm=no)
746 if test x$have_alarm = xyes; then
747    AC_DEFINE(HAVE_ALARM, 1, [Whether we have alarm()])
748 fi
749
750 AC_CHECK_HEADER([sys/mman.h],
751    [AC_DEFINE(HAVE_SYS_MMAN_H, [1], [Define to 1 if we have <sys/mman.h>])])
752
753 AC_CHECK_FUNC(mmap, have_mmap=yes, have_mmap=no)
754 if test x$have_mmap = xyes; then
755    AC_DEFINE(HAVE_MMAP, 1, [Whether we have mmap()])
756 fi
757
758 AC_CHECK_FUNC(mprotect, have_mprotect=yes, have_mprotect=no)
759 if test x$have_mprotect = xyes; then
760    AC_DEFINE(HAVE_MPROTECT, 1, [Whether we have mprotect()])
761 fi
762
763 AC_CHECK_FUNC(getpagesize, have_getpagesize=yes, have_getpagesize=no)
764 if test x$have_getpagesize = xyes; then
765    AC_DEFINE(HAVE_GETPAGESIZE, 1, [Whether we have getpagesize()])
766 fi
767
768 AC_CHECK_HEADER([fenv.h],
769    [AC_DEFINE(HAVE_FENV_H, [1], [Define to 1 if we have <fenv.h>])])
770
771 AC_CHECK_LIB(m, feenableexcept, have_feenableexcept=yes, have_feenableexcept=no)
772 if test x$have_feenableexcept = xyes; then
773    AC_DEFINE(HAVE_FEENABLEEXCEPT, 1, [Whether we have feenableexcept()])
774 fi
775
776 AC_CHECK_FUNC(gettimeofday, have_gettimeofday=yes, have_gettimeofday=no)
777 AC_CHECK_HEADER(sys/time.h, have_sys_time_h=yes, have_sys_time_h=no)
778 if test x$have_gettimeofday = xyes && test x$have_sys_time_h = xyes; then
779    AC_DEFINE(HAVE_GETTIMEOFDAY, 1, [Whether we have gettimeofday()])
780 fi
781
782 dnl =====================================
783 dnl Thread local storage
784
785 support_for__thread=no
786
787 AC_MSG_CHECKING(for __thread)
788 AC_LINK_IFELSE([AC_LANG_SOURCE([[
789 #if defined(__MINGW32__) && !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5))
790 #error This MinGW version has broken __thread support
791 #endif
792 #ifdef __OpenBSD__
793 #error OpenBSD has broken __thread support
794 #endif
795 static __thread int x ;
796 int main () { x = 123; return x; }
797 ]])], support_for__thread=yes)
798
799 if test $support_for__thread = yes; then 
800    AC_DEFINE([TOOLCHAIN_SUPPORTS__THREAD],[],[Whether the tool chain supports __thread])
801 fi
802
803 AC_MSG_RESULT($support_for__thread)
804
805 dnl
806 dnl posix tls
807 dnl
808
809 m4_define([pthread_test_program],AC_LANG_SOURCE([[dnl
810 #include <stdlib.h>
811 #include <pthread.h>
812
813 static pthread_once_t once_control = PTHREAD_ONCE_INIT;
814 static pthread_key_t key;
815
816 static void
817 make_key (void)
818 {
819     pthread_key_create (&key, NULL);
820 }
821
822 int
823 main ()
824 {
825     void *value = NULL;
826
827     if (pthread_once (&once_control, make_key) != 0)
828     {
829         value = NULL;
830     }
831     else
832     {
833         value = pthread_getspecific (key);
834         if (!value)
835         {
836             value = malloc (100);
837             pthread_setspecific (key, value);
838         }
839     }
840     return 0;
841 }
842 ]]))
843
844 AC_DEFUN([PIXMAN_CHECK_PTHREAD],[dnl
845     if test "z$support_for_pthread_setspecific" != "zyes"; then
846         PIXMAN_LINK_WITH_ENV(
847                 [$1], [pthread_test_program],
848                 [PTHREAD_CFLAGS="$CFLAGS"
849                  PTHREAD_LIBS="$LIBS"
850                  PTHREAD_LDFLAGS="$LDFLAGS"
851                  support_for_pthread_setspecific=yes])
852     fi
853 ])
854
855 if test $support_for__thread = no; then
856     support_for_pthread_setspecific=no
857
858     AC_MSG_CHECKING(for pthread_setspecific)
859
860     PIXMAN_CHECK_PTHREAD([CFLAGS="-D_REENTRANT"; LIBS="-lpthread"])
861     PIXMAN_CHECK_PTHREAD([CFLAGS="-pthread"; LDFLAGS="-pthread"])
862     PIXMAN_CHECK_PTHREAD([CFLAGS="-D_REENTRANT"; LDFLAGS="-lroot"])
863     
864     if test $support_for_pthread_setspecific = yes; then
865         CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
866         AC_DEFINE([HAVE_PTHREAD_SETSPECIFIC], [], [Whether pthread_setspecific() is supported])
867     fi
868
869     AC_MSG_RESULT($support_for_pthread_setspecific);
870 fi
871
872 AC_SUBST(TOOLCHAIN_SUPPORTS__THREAD)
873 AC_SUBST(HAVE_PTHREAD_SETSPECIFIC)
874 AC_SUBST(PTHREAD_LDFLAGS)
875 AC_SUBST(PTHREAD_LIBS)
876
877 dnl =====================================
878 dnl __attribute__((constructor))
879
880 support_for_attribute_constructor=no
881
882 AC_MSG_CHECKING(for __attribute__((constructor)))
883 AC_LINK_IFELSE([AC_LANG_SOURCE([[
884 #if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7))
885 /* attribute 'constructor' is supported since gcc 2.7, but some compilers
886  * may only pretend to be gcc, so let's try to actually use it
887  */
888 static int x = 1;
889 static void __attribute__((constructor)) constructor_function () { x = 0; }
890 int main (void) { return x; }
891 #else
892 #error not gcc or gcc version is older than 2.7
893 #endif
894 ]])], support_for_attribute_constructor=yes)
895
896 if test x$support_for_attribute_constructor = xyes; then
897    AC_DEFINE([TOOLCHAIN_SUPPORTS_ATTRIBUTE_CONSTRUCTOR],
898              [],[Whether the tool chain supports __attribute__((constructor))])
899 fi
900
901 AC_MSG_RESULT($support_for_attribute_constructor)
902 AC_SUBST(TOOLCHAIN_SUPPORTS_ATTRIBUTE_CONSTRUCTOR)
903
904 dnl ==================
905 dnl libpng
906
907 AC_ARG_ENABLE(libpng, AS_HELP_STRING([--enable-libpng], [Build support for libpng (default: auto)]),
908                       [have_libpng=$enableval], [have_libpng=auto])
909
910 case x$have_libpng in
911         xyes) PKG_CHECK_MODULES(PNG, [libpng]) ;;
912         xno) ;;
913         *) PKG_CHECK_MODULES(PNG, [libpng], have_libpng=yes, have_libpng=no) ;;
914 esac
915
916 if test x$have_libpng = xyes; then
917     AC_DEFINE([HAVE_LIBPNG], [1], [Whether we have libpng])
918 fi
919
920 AC_SUBST(HAVE_LIBPNG)
921
922 AC_OUTPUT([pixman-1.pc
923            pixman-1-uninstalled.pc
924            Makefile
925            pixman/Makefile
926            pixman/pixman-version.h
927            demos/Makefile
928            test/Makefile])
929
930 m4_if(m4_eval(pixman_minor % 2), [1], [
931    echo
932    echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
933    echo
934    echo "      Thanks for testing this development snapshot of pixman. Please"
935    echo "      report any problems you find, either by sending email to "
936    echo
937    echo "          pixman@lists.freedesktop.org"
938    echo
939    echo "      or by filing a bug at "
940    echo
941    echo "          https://bugs.freedesktop.org/enter_bug.cgi?product=pixman "
942    echo
943    echo "      If you are looking for a stable release of pixman, please note "
944    echo "      that stable releases have _even_ minor version numbers. Ie., "
945    echo "      pixman-0.]m4_eval(pixman_minor & ~1)[.x are stable releases, whereas pixman-$PIXMAN_VERSION_MAJOR.$PIXMAN_VERSION_MINOR.$PIXMAN_VERSION_MICRO is a "
946    echo "      development snapshot that may contain bugs and experimental "
947    echo "      features. "
948    echo 
949    echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
950    echo
951 ])