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