Pre-release version bump
[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], 16)
57 m4_define([pixman_micro], 0)
58
59 m4_define([pixman_version],[pixman_major.pixman_minor.pixman_micro])
60
61 AC_INIT(pixman, pixman_version, "sandmann@daimi.au.dk", pixman)
62 AM_INIT_AUTOMAKE([dist-bzip2])
63
64 AM_CONFIG_HEADER(config.h)
65
66 AC_CANONICAL_HOST
67
68 AC_PROG_CC
69 AC_PROG_LIBTOOL
70 AC_CHECK_FUNCS([getisax])
71 AC_C_BIGENDIAN
72 AC_C_INLINE
73
74 # Checks for Sun Studio compilers
75 AC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"])
76 AC_CHECK_DECL([__amd64], [AMD64_ABI="yes"], [AMD64_ABI="no"])
77
78
79 # We ignore pixman_major in the version here because the major version should
80 # always be encoded in the actual library name. Ie., the soname is:
81 #
82 #      pixman-$(pixman_major).0.minor.micro
83 #
84 m4_define([lt_current], [pixman_minor])
85 m4_define([lt_revision], [pixman_micro])
86 m4_define([lt_age], [pixman_minor])
87
88 LT_VERSION_INFO="lt_current:lt_revision:lt_age"
89
90 PIXMAN_VERSION_MAJOR=pixman_major()
91 AC_SUBST(PIXMAN_VERSION_MAJOR)
92 PIXMAN_VERSION_MINOR=pixman_minor()
93 AC_SUBST(PIXMAN_VERSION_MINOR)
94 PIXMAN_VERSION_MICRO=pixman_micro()
95 AC_SUBST(PIXMAN_VERSION_MICRO)
96
97 AC_SUBST(LT_VERSION_INFO)
98
99 # Check for dependencies
100 #PKG_CHECK_MODULES(DEP, x11)
101
102 changequote(,)dnl
103 if test "x$GCC" = "xyes"; then
104
105   case " $CFLAGS " in
106   *[\ \ ]-Wall[\ \      ]*) ;;
107   *) CFLAGS="$CFLAGS -Wall" ;;
108   esac 
109
110   case " $CFLAGS " in
111   *[\ \ ]-fno-strict-aliasing[\ \       ]*) ;;
112   *) CFLAGS="$CFLAGS -fno-strict-aliasing" ;;
113   esac
114
115 fi changequote([,])dnl
116
117 AC_PATH_PROG(PERL, perl, no)
118 if test "x$PERL" = xno; then
119     AC_MSG_ERROR([Perl is required to build pixman.])
120 fi
121 AC_SUBST(PERL)
122
123 dnl =========================================================================
124 dnl -fvisibility stuff
125
126 have_gcc4=no
127 AC_MSG_CHECKING(for -fvisibility)
128 AC_COMPILE_IFELSE([
129 #if defined(__GNUC__) && (__GNUC__ >= 4)
130 #else
131 error Need GCC 4.0 for visibility
132 #endif
133 int main () { return 0; } 
134 ], have_gcc4=yes)
135
136 if test "x$have_gcc4" = "xyes"; then
137    CFLAGS="$CFLAGS -fvisibility=hidden"
138 fi
139 AC_MSG_RESULT($have_gcc4)
140
141 have_sunstudio8=no
142 AC_MSG_CHECKING([for -xldscope (Sun compilers)])
143 AC_COMPILE_IFELSE([
144 #if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
145 #else
146 error Need Sun Studio 8 for visibility
147 #endif
148 int main () { return 0; } 
149 ], have_sunstudio8=yes)
150
151 if test "x$have_sunstudio8" = "xyes"; then
152    CFLAGS="$CFLAGS -xldscope=hidden"
153 fi
154 AC_MSG_RESULT($have_sunstudio8)
155
156 dnl ===========================================================================
157 dnl Check for MMX
158
159 if test "x$MMX_CFLAGS" = "x" ; then
160    if test "x$SUNCC" = "xyes"; then
161       # Sun Studio doesn't have an -xarch=mmx flag, so we have to use sse
162       # but if we're building 64-bit, mmx & sse support is on by default and
163       # -xarch=sse throws an error instead
164       if test "$AMD64_ABI" = "no" ; then
165          MMX_CFLAGS="-xarch=sse"
166       fi
167    else
168       MMX_CFLAGS="-mmmx -Winline"
169    fi
170 fi
171
172 have_mmx_intrinsics=no
173 AC_MSG_CHECKING(whether to use MMX intrinsics)
174 xserver_save_CFLAGS=$CFLAGS
175 CFLAGS="$MMX_CFLAGS $CFLAGS"
176 AC_COMPILE_IFELSE([
177 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
178 error "Need GCC >= 3.4 for MMX intrinsics"
179 #endif
180 #include <mmintrin.h>
181 int main () {
182     __m64 v = _mm_cvtsi32_si64 (1);
183     return _mm_cvtsi64_si32 (v);
184 }], have_mmx_intrinsics=yes)
185 CFLAGS=$xserver_save_CFLAGS
186
187 AC_ARG_ENABLE(mmx,
188    [AC_HELP_STRING([--disable-mmx],
189                    [disable MMX fast paths])],
190    [enable_mmx=$enableval], [enable_mmx=auto])
191
192 if test $enable_mmx = no ; then
193    have_mmx_intrinsics=disabled
194 fi
195
196 if test $have_mmx_intrinsics = yes ; then
197    AC_DEFINE(USE_MMX, 1, [use MMX compiler intrinsics])
198 else
199    MMX_CFLAGS=
200 fi
201
202 AC_MSG_RESULT($have_mmx_intrinsics)
203 if test $enable_mmx = yes && test $have_mmx_intrinsics = no ; then
204    AC_MSG_ERROR([MMX intrinsics not detected])
205 fi
206
207 AM_CONDITIONAL(USE_MMX, test $have_mmx_intrinsics = yes)
208
209 dnl ===========================================================================
210 dnl Check for SSE2
211
212 if test "x$SSE2_CFLAGS" = "x" ; then
213    if test "x$SUNCC" = "xyes"; then
214       # SSE2 is enabled by default in the Sun Studio 64-bit environment
215       if test "$AMD64_ABI" = "no" ; then
216          SSE2_CFLAGS="-xarch=sse2"
217       fi
218    else
219       SSE2_CFLAGS="-mmmx -msse2 -Winline"
220    fi
221 fi
222
223 have_sse2_intrinsics=no
224 AC_MSG_CHECKING(whether to use SSE2 intrinsics)
225 xserver_save_CFLAGS=$CFLAGS
226 CFLAGS="$SSE2_CFLAGS $CFLAGS"
227
228 AC_COMPILE_IFELSE([
229 #if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 2))
230 #   if !defined(__amd64__) && !defined(__x86_64__)
231 #      error "Need GCC >= 4.2 for SSE2 intrinsics on x86"
232 #   endif
233 #endif
234 #include <mmintrin.h>
235 #include <xmmintrin.h>
236 #include <emmintrin.h>
237 int main () {
238     __m128i a, b, c;
239         c = _mm_xor_si128 (a, b);
240     return 0;
241 }], have_sse2_intrinsics=yes)
242 CFLAGS=$xserver_save_CFLAGS
243
244 AC_ARG_ENABLE(sse2,
245    [AC_HELP_STRING([--disable-sse2],
246                    [disable SSE2 fast paths])],
247    [enable_sse2=$enableval], [enable_sse2=auto])
248
249 if test $enable_sse2 = no ; then
250    have_sse2_intrinsics=disabled
251 fi
252
253 if test $have_sse2_intrinsics = yes ; then
254    AC_DEFINE(USE_SSE2, 1, [use SSE2 compiler intrinsics])
255 fi
256
257 AC_MSG_RESULT($have_sse2_intrinsics)
258 if test $enable_sse2 = yes && test $have_sse2_intrinsics = no ; then
259    AC_MSG_ERROR([SSE2 intrinsics not detected])
260 fi
261
262 AM_CONDITIONAL(USE_SSE2, test $have_sse2_intrinsics = yes)
263
264 dnl ===========================================================================
265 dnl Other special flags needed when building code using MMX or SSE instructions
266 case $host_os in
267    solaris*)
268       # When building 32-bit binaries, apply a mapfile to ensure that the
269       # binaries aren't flagged as only able to run on MMX+SSE capable CPUs
270       # since they check at runtime before using those instructions.
271       # Not all linkers grok the mapfile format so we check for that first.
272       if test "$AMD64_ABI" = "no" ; then
273          use_hwcap_mapfile=no
274          AC_MSG_CHECKING(whether to use a hardware capability map file)
275          hwcap_save_LDFLAGS="$LDFLAGS"
276          HWCAP_LDFLAGS='-Wl,-M,$(srcdir)/solaris-hwcap.mapfile'
277          LDFLAGS="$LDFLAGS -Wl,-M,pixman/solaris-hwcap.mapfile"
278          AC_LINK_IFELSE([int main() { return 0; }],
279                         use_hwcap_mapfile=yes,
280                         HWCAP_LDFLAGS="")
281          LDFLAGS="$hwcap_save_LDFLAGS"
282          AC_MSG_RESULT($use_hwcap_mapfile)
283       fi
284       if test "x$MMX_LDFLAGS" = "x" ; then
285          MMX_LDFLAGS="$HWCAP_LDFLAGS"
286       fi
287       if test "x$SSE2_LDFLAGS" = "x" ; then
288          SSE2_LDFLAGS="$HWCAP_LDFLAGS"
289       fi
290       ;;
291 esac
292
293 AC_SUBST(MMX_CFLAGS)
294 AC_SUBST(MMX_LDFLAGS)
295 AC_SUBST(SSE2_CFLAGS)
296 AC_SUBST(SSE2_LDFLAGS)
297
298 dnl ===========================================================================
299 dnl Check for VMX/Altivec
300 if test -n "`$CC -v 2>&1 | grep version | grep Apple`"; then
301     VMX_CFLAGS="-faltivec"
302 else
303     VMX_CFLAGS="-maltivec -mabi=altivec"
304 fi
305
306 have_vmx_intrinsics=no
307 AC_MSG_CHECKING(whether to use VMX/Altivec intrinsics)
308 xserver_save_CFLAGS=$CFLAGS
309 CFLAGS="$CFLAGS $VMX_CFLAGS"
310 AC_COMPILE_IFELSE([
311 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
312 error "Need GCC >= 3.4 for sane altivec support"
313 #endif
314 #include <altivec.h>
315 int main () {
316     vector unsigned int v = vec_splat_u32 (1);
317     v = vec_sub (v, v);
318     return 0;
319 }], have_vmx_intrinsics=yes)
320 CFLAGS=$xserver_save_CFLAGS
321
322 AC_ARG_ENABLE(vmx,
323    [AC_HELP_STRING([--disable-vmx],
324                    [disable VMX fast paths])],
325    [enable_vmx=$enableval], [enable_vmx=auto])
326
327 if test $enable_vmx = no ; then
328    have_vmx_intrinsics=disabled
329 fi
330
331 if test $have_vmx_intrinsics = yes ; then
332    AC_DEFINE(USE_VMX, 1, [use VMX compiler intrinsics])
333 else
334    VMX_CFLAGS=
335 fi
336
337 AC_MSG_RESULT($have_vmx_intrinsics)
338 if test $enable_vmx = yes && test $have_vmx_intrinsics = no ; then
339    AC_MSG_ERROR([VMX intrinsics not detected])
340 fi
341
342 AC_SUBST(VMX_CFLAGS)
343
344 AM_CONDITIONAL(USE_VMX, test $have_vmx_intrinsics = yes)
345
346 dnl ===========================================================================
347 dnl Check for ARM SIMD instructions
348 ARM_SIMD_CFLAGS="-mcpu=arm1136j-s"
349
350 have_arm_simd=no
351 AC_MSG_CHECKING(whether to use ARM SIMD assembler)
352 xserver_save_CFLAGS=$CFLAGS
353 CFLAGS="$CFLAGS $ARM_SIMD_CFLAGS"
354 AC_COMPILE_IFELSE([
355 int main () {
356     asm("uqadd8 r1, r1, r2");
357     return 0;
358 }], have_arm_simd=yes)
359 CFLAGS=$xserver_save_CFLAGS
360
361 AC_ARG_ENABLE(arm-simd,
362    [AC_HELP_STRING([--disable-arm-simd],
363                    [disable ARM SIMD fast paths])],
364    [enable_arm_simd=$enableval], [enable_arm_simd=auto])
365
366 if test $enable_arm_simd = no ; then
367    have_arm_simd=disabled
368 fi
369
370 if test $have_arm_simd = yes ; then
371    AC_DEFINE(USE_ARM_SIMD, 1, [use ARM SIMD compiler intrinsics])
372 else
373    ARM_SIMD_CFLAGS=
374 fi
375
376 AC_MSG_RESULT($have_arm_simd)
377 if test $enable_arm_simd = yes && test $have_arm_simd = no ; then
378    AC_MSG_ERROR([ARM SIMD intrinsics not detected])
379 fi
380
381 AC_SUBST(ARM_SIMD_CFLAGS)
382
383 AM_CONDITIONAL(USE_ARM_SIMD, test $have_arm_simd = yes)
384
385 dnl ==========================================================================
386 dnl Check for ARM NEON instructions
387 ARM_NEON_CFLAGS="-mfpu=neon -mcpu=cortex-a8"
388
389 have_arm_neon=no
390 AC_MSG_CHECKING(whether to use ARM NEON)
391 xserver_save_CFLAGS=$CFLAGS
392 CFLAGS="$CFLAGS $ARM_NEON_CFLAGS"
393 AC_COMPILE_IFELSE([
394 #include <arm_neon.h>
395 int main () {
396     uint8x8_t neon_test=vmov_n_u8(0);
397     return 0;
398 }], have_arm_neon=yes)
399 CFLAGS=$xserver_save_CFLAGS
400
401 AC_ARG_ENABLE(arm-neon,
402    [AC_HELP_STRING([--disable-arm-neon],
403                    [disable ARM NEON fast paths])],
404    [enable_arm_neon=$enableval], [enable_arm_neon=auto])
405
406 if test $enable_arm_neon = no ; then
407    have_arm_neon=disabled
408 fi
409
410 if test $have_arm_neon = yes ; then
411    AC_DEFINE(USE_ARM_NEON, 1, [use ARM NEON compiler intrinsics])
412 else
413    ARM_NEON_CFLAGS=
414 fi
415
416 AC_SUBST(ARM_NEON_CFLAGS)
417
418 AM_CONDITIONAL(USE_ARM_NEON, test $have_arm_neon = yes)
419
420 AC_MSG_RESULT($have_arm_neon)
421 if test $enable_arm_neon = yes && test $have_arm_neon = no ; then
422    AC_MSG_ERROR([ARM NEON intrinsics not detected])
423 fi
424
425 dnl =========================================================================================
426 dnl Check for GNU-style inline assembly support
427
428 have_gcc_inline_asm=no
429 AC_MSG_CHECKING(whether to use GNU-style inline assembler)
430 AC_COMPILE_IFELSE([
431 int main () {
432     /* Most modern architectures have a NOP instruction, so this is a fairly generic test. */
433         asm volatile ( "\tnop\n" : : : "cc", "memory" );
434     return 0;
435 }], have_gcc_inline_asm=yes)
436
437 AC_ARG_ENABLE(gcc-inline-asm,
438    [AC_HELP_STRING([--disable-gcc-inline-asm],
439                    [disable GNU-style inline assembler])],
440    [enable_gcc_inline_asm=$enableval], [enable_gcc_inline_asm=auto])
441
442 if test $enable_gcc_inline_asm = no ; then
443    have_gcc_inline_asm=disabled
444 fi
445
446 if test $have_gcc_inline_asm = yes ; then
447    AC_DEFINE(USE_GCC_INLINE_ASM, 1, [use GNU-style inline assembler])
448 fi
449
450 AC_MSG_RESULT($have_gcc_inline_asm)
451 if test $enable_gcc_inline_asm = yes && test $have_gcc_inline_asm = no ; then
452    AC_MSG_ERROR([GNU-style inline assembler not detected])
453 fi
454
455 AM_CONDITIONAL(USE_GCC_INLINE_ASM, test $have_gcc_inline_asm = yes)
456
457 dnl ==============================================
458 dnl Timers
459
460 AC_ARG_ENABLE(timers,
461    [AC_HELP_STRING([--enable-timers],
462                    [enable TIMER_BEGIN and TIMER_END macros [default=no]])],
463    [enable_timers=$enableval], [enable_timers=no])
464
465 if test $enable_timers = yes ; then 
466    AC_DEFINE(PIXMAN_TIMERS, 1, [enable TIMER_BEGIN/TIMER_END macros])
467 fi
468 AC_SUBST(PIXMAN_TIMERS)
469
470 dnl ===================================
471 dnl GTK+
472
473 AC_ARG_ENABLE(gtk,
474    [AC_HELP_STRING([--enable-gtk],
475                    [enable tests using GTK+ [default=auto]])],
476    [enable_gtk=$enableval], [enable_gtk=auto])
477
478 PKG_PROG_PKG_CONFIG
479 if test $enable_gtk = auto ; then
480    PKG_CHECK_EXISTS([gtk+-2.0], [enable_gtk=yes], [enable_gtk=no])
481 fi
482 if test $enable_gtk = yes ; then
483    PKG_CHECK_MODULES(GTK, [gtk+-2.0])
484 fi
485
486 AM_CONDITIONAL(HAVE_GTK, [test "x$enable_gtk" = xyes])
487
488 AC_SUBST(GTK_CFLAGS)
489 AC_SUBST(GTK_LIBS)
490 AC_SUBST(DEP_CFLAGS)
491 AC_SUBST(DEP_LIBS)
492
493 dnl =====================================
494 dnl posix_memalign 
495
496 AC_CHECK_FUNC(posix_memalign, have_posix_memalign=yes, have_posix_memalign=no)
497 if test x$have_posix_memalign = xyes; then
498    AC_DEFINE(HAVE_POSIX_MEMALIGN, 1, [Whether we have posix_memalign()])
499 fi
500
501 AC_OUTPUT([pixman-1.pc
502            pixman-1-uninstalled.pc
503            Makefile
504            pixman/Makefile
505            pixman/pixman-version.h
506            test/Makefile])