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