1 dnl Copyright 2005 Red Hat, Inc.
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.
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.
21 dnl Process this file with autoconf to create configure.
25 # Pixman versioning scheme
27 # - The version in git has an odd MICRO version number
29 # - Released versions both development and stable have an even MICRO
32 # - Released development versions have an odd MINOR number
34 # - Released stable versions have an even MINOR number
36 # - Versions that break ABI must have a new MAJOR number
38 # - If you break the ABI, then at least this must be done:
42 # - In the first development release where you break ABI, find
43 # all instances of "pixman-n" and change them to pixman-(n+1)
45 # This needs to be done at least in
50 # This ensures that binary incompatible versions can be installed
51 # in parallel. See http://www106.pair.com/rhp/parallel.html for
55 m4_define([pixman_major], 0)
56 m4_define([pixman_minor], 17)
57 m4_define([pixman_micro], 1)
59 m4_define([pixman_version],[pixman_major.pixman_minor.pixman_micro])
61 AC_INIT(pixman, pixman_version, "sandmann@daimi.au.dk", pixman)
62 AM_INIT_AUTOMAKE([dist-bzip2])
64 # Suppress verbose compile lines
65 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
67 AM_CONFIG_HEADER(config.h)
71 test_CFLAGS=${CFLAGS+set} # We may override autoconf default CFLAGS.
75 AC_CHECK_FUNCS([getisax])
79 # Checks for Sun Studio compilers
80 AC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"])
81 AC_CHECK_DECL([__amd64], [AMD64_ABI="yes"], [AMD64_ABI="no"])
83 # Default CFLAGS to -O -g rather than just the -g from AC_PROG_CC
84 # if we're using Sun Studio and neither the user nor a config.site
86 if test $SUNCC = yes && \
87 test "$test_CFLAGS" == "" && \
93 CFLAGS="$CFLAGS -DPIXMAN_DISABLE_DEPRECATED -DPIXMAN_INTERNAL_API"
96 # We ignore pixman_major in the version here because the major version should
97 # always be encoded in the actual library name. Ie., the soname is:
99 # pixman-$(pixman_major).0.minor.micro
101 m4_define([lt_current], [pixman_minor])
102 m4_define([lt_revision], [pixman_micro])
103 m4_define([lt_age], [pixman_minor])
105 LT_VERSION_INFO="lt_current:lt_revision:lt_age"
107 PIXMAN_VERSION_MAJOR=pixman_major()
108 AC_SUBST(PIXMAN_VERSION_MAJOR)
109 PIXMAN_VERSION_MINOR=pixman_minor()
110 AC_SUBST(PIXMAN_VERSION_MINOR)
111 PIXMAN_VERSION_MICRO=pixman_micro()
112 AC_SUBST(PIXMAN_VERSION_MICRO)
114 AC_SUBST(LT_VERSION_INFO)
116 # Check for dependencies
117 #PKG_CHECK_MODULES(DEP, x11)
120 if test "x$GCC" = "xyes"; then
123 *[\ \ ]-Wall[\ \ ]*) ;;
124 *) CFLAGS="$CFLAGS -Wall" ;;
128 *[\ \ ]-fno-strict-aliasing[\ \ ]*) ;;
129 *) CFLAGS="$CFLAGS -fno-strict-aliasing" ;;
132 fi changequote([,])dnl
134 AC_PATH_PROG(PERL, perl, no)
135 if test "x$PERL" = xno; then
136 AC_MSG_ERROR([Perl is required to build pixman.])
140 dnl =========================================================================
141 dnl -fvisibility stuff
144 AC_MSG_CHECKING(for -fvisibility)
146 #if defined(__GNUC__) && (__GNUC__ >= 4)
148 error Need GCC 4.0 for visibility
150 int main () { return 0; }
153 if test "x$have_gcc4" = "xyes"; then
154 CFLAGS="$CFLAGS -fvisibility=hidden"
156 AC_MSG_RESULT($have_gcc4)
159 AC_MSG_CHECKING([for -xldscope (Sun compilers)])
161 #if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
163 error Need Sun Studio 8 for visibility
165 int main () { return 0; }
166 ], have_sunstudio8=yes)
168 if test "x$have_sunstudio8" = "xyes"; then
169 CFLAGS="$CFLAGS -xldscope=hidden"
171 AC_MSG_RESULT($have_sunstudio8)
173 dnl ===========================================================================
176 if test "x$MMX_CFLAGS" = "x" ; then
177 if test "x$SUNCC" = "xyes"; then
178 # Sun Studio doesn't have an -xarch=mmx flag, so we have to use sse
179 # but if we're building 64-bit, mmx & sse support is on by default and
180 # -xarch=sse throws an error instead
181 if test "$AMD64_ABI" = "no" ; then
182 MMX_CFLAGS="-xarch=sse"
185 MMX_CFLAGS="-mmmx -Winline"
189 have_mmx_intrinsics=no
190 AC_MSG_CHECKING(whether to use MMX intrinsics)
191 xserver_save_CFLAGS=$CFLAGS
192 CFLAGS="$MMX_CFLAGS $CFLAGS"
194 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
195 error "Need GCC >= 3.4 for MMX intrinsics"
197 #include <mmintrin.h>
199 __m64 v = _mm_cvtsi32_si64 (1);
200 return _mm_cvtsi64_si32 (v);
201 }], have_mmx_intrinsics=yes)
202 CFLAGS=$xserver_save_CFLAGS
205 [AC_HELP_STRING([--disable-mmx],
206 [disable MMX fast paths])],
207 [enable_mmx=$enableval], [enable_mmx=auto])
209 if test $enable_mmx = no ; then
210 have_mmx_intrinsics=disabled
213 if test $have_mmx_intrinsics = yes ; then
214 AC_DEFINE(USE_MMX, 1, [use MMX compiler intrinsics])
219 AC_MSG_RESULT($have_mmx_intrinsics)
220 if test $enable_mmx = yes && test $have_mmx_intrinsics = no ; then
221 AC_MSG_ERROR([MMX intrinsics not detected])
224 AM_CONDITIONAL(USE_MMX, test $have_mmx_intrinsics = yes)
226 dnl ===========================================================================
229 if test "x$SSE2_CFLAGS" = "x" ; then
230 if test "x$SUNCC" = "xyes"; then
231 # SSE2 is enabled by default in the Sun Studio 64-bit environment
232 if test "$AMD64_ABI" = "no" ; then
233 SSE2_CFLAGS="-xarch=sse2"
236 SSE2_CFLAGS="-mmmx -msse2 -Winline"
240 have_sse2_intrinsics=no
241 AC_MSG_CHECKING(whether to use SSE2 intrinsics)
242 xserver_save_CFLAGS=$CFLAGS
243 CFLAGS="$SSE2_CFLAGS $CFLAGS"
246 #if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 2))
247 # if !defined(__amd64__) && !defined(__x86_64__)
248 # error "Need GCC >= 4.2 for SSE2 intrinsics on x86"
251 #include <mmintrin.h>
252 #include <xmmintrin.h>
253 #include <emmintrin.h>
256 c = _mm_xor_si128 (a, b);
258 }], have_sse2_intrinsics=yes)
259 CFLAGS=$xserver_save_CFLAGS
262 [AC_HELP_STRING([--disable-sse2],
263 [disable SSE2 fast paths])],
264 [enable_sse2=$enableval], [enable_sse2=auto])
266 if test $enable_sse2 = no ; then
267 have_sse2_intrinsics=disabled
270 if test $have_sse2_intrinsics = yes ; then
271 AC_DEFINE(USE_SSE2, 1, [use SSE2 compiler intrinsics])
274 AC_MSG_RESULT($have_sse2_intrinsics)
275 if test $enable_sse2 = yes && test $have_sse2_intrinsics = no ; then
276 AC_MSG_ERROR([SSE2 intrinsics not detected])
279 AM_CONDITIONAL(USE_SSE2, test $have_sse2_intrinsics = yes)
281 dnl ===========================================================================
282 dnl Other special flags needed when building code using MMX or SSE instructions
285 # When building 32-bit binaries, apply a mapfile to ensure that the
286 # binaries aren't flagged as only able to run on MMX+SSE capable CPUs
287 # since they check at runtime before using those instructions.
288 # Not all linkers grok the mapfile format so we check for that first.
289 if test "$AMD64_ABI" = "no" ; then
291 AC_MSG_CHECKING(whether to use a hardware capability map file)
292 hwcap_save_LDFLAGS="$LDFLAGS"
293 HWCAP_LDFLAGS='-Wl,-M,$(srcdir)/solaris-hwcap.mapfile'
294 LDFLAGS="$LDFLAGS -Wl,-M,pixman/solaris-hwcap.mapfile"
295 AC_LINK_IFELSE([int main() { return 0; }],
296 use_hwcap_mapfile=yes,
298 LDFLAGS="$hwcap_save_LDFLAGS"
299 AC_MSG_RESULT($use_hwcap_mapfile)
301 if test "x$MMX_LDFLAGS" = "x" ; then
302 MMX_LDFLAGS="$HWCAP_LDFLAGS"
304 if test "x$SSE2_LDFLAGS" = "x" ; then
305 SSE2_LDFLAGS="$HWCAP_LDFLAGS"
311 AC_SUBST(MMX_LDFLAGS)
312 AC_SUBST(SSE2_CFLAGS)
313 AC_SUBST(SSE2_LDFLAGS)
315 dnl ===========================================================================
316 dnl Check for VMX/Altivec
317 if test -n "`$CC -v 2>&1 | grep version | grep Apple`"; then
318 VMX_CFLAGS="-faltivec"
320 VMX_CFLAGS="-maltivec -mabi=altivec"
323 have_vmx_intrinsics=no
324 AC_MSG_CHECKING(whether to use VMX/Altivec intrinsics)
325 xserver_save_CFLAGS=$CFLAGS
326 CFLAGS="$VMX_CFLAGS $CFLAGS"
328 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
329 error "Need GCC >= 3.4 for sane altivec support"
333 vector unsigned int v = vec_splat_u32 (1);
336 }], have_vmx_intrinsics=yes)
337 CFLAGS=$xserver_save_CFLAGS
340 [AC_HELP_STRING([--disable-vmx],
341 [disable VMX fast paths])],
342 [enable_vmx=$enableval], [enable_vmx=auto])
344 if test $enable_vmx = no ; then
345 have_vmx_intrinsics=disabled
348 if test $have_vmx_intrinsics = yes ; then
349 AC_DEFINE(USE_VMX, 1, [use VMX compiler intrinsics])
354 AC_MSG_RESULT($have_vmx_intrinsics)
355 if test $enable_vmx = yes && test $have_vmx_intrinsics = no ; then
356 AC_MSG_ERROR([VMX intrinsics not detected])
361 AM_CONDITIONAL(USE_VMX, test $have_vmx_intrinsics = yes)
363 dnl ===========================================================================
364 dnl Check for ARM SIMD instructions
365 ARM_SIMD_CFLAGS="-mcpu=arm1136j-s"
368 AC_MSG_CHECKING(whether to use ARM SIMD assembler)
369 xserver_save_CFLAGS=$CFLAGS
370 CFLAGS="$ARM_SIMD_CFLAGS $CFLAGS"
373 asm("uqadd8 r1, r1, r2");
375 }], have_arm_simd=yes)
376 CFLAGS=$xserver_save_CFLAGS
378 AC_ARG_ENABLE(arm-simd,
379 [AC_HELP_STRING([--disable-arm-simd],
380 [disable ARM SIMD fast paths])],
381 [enable_arm_simd=$enableval], [enable_arm_simd=auto])
383 if test $enable_arm_simd = no ; then
384 have_arm_simd=disabled
387 if test $have_arm_simd = yes ; then
388 AC_DEFINE(USE_ARM_SIMD, 1, [use ARM SIMD compiler intrinsics])
393 AC_MSG_RESULT($have_arm_simd)
394 if test $enable_arm_simd = yes && test $have_arm_simd = no ; then
395 AC_MSG_ERROR([ARM SIMD intrinsics not detected])
398 AC_SUBST(ARM_SIMD_CFLAGS)
400 AM_CONDITIONAL(USE_ARM_SIMD, test $have_arm_simd = yes)
402 dnl ==========================================================================
403 dnl Check for ARM NEON instructions
404 ARM_NEON_CFLAGS="-mfpu=neon -mcpu=cortex-a8"
407 AC_MSG_CHECKING(whether to use ARM NEON)
408 xserver_save_CFLAGS=$CFLAGS
409 CFLAGS="$ARM_NEON_CFLAGS $CFLAGS"
411 #include <arm_neon.h>
413 uint8x8_t neon_test=vmov_n_u8(0);
415 }], have_arm_neon=yes)
416 CFLAGS=$xserver_save_CFLAGS
418 AC_ARG_ENABLE(arm-neon,
419 [AC_HELP_STRING([--disable-arm-neon],
420 [disable ARM NEON fast paths])],
421 [enable_arm_neon=$enableval], [enable_arm_neon=auto])
423 if test $enable_arm_neon = no ; then
424 have_arm_neon=disabled
427 if test $have_arm_neon = yes ; then
428 AC_DEFINE(USE_ARM_NEON, 1, [use ARM NEON compiler intrinsics])
433 AC_SUBST(ARM_NEON_CFLAGS)
435 AM_CONDITIONAL(USE_ARM_NEON, test $have_arm_neon = yes)
437 AC_MSG_RESULT($have_arm_neon)
438 if test $enable_arm_neon = yes && test $have_arm_neon = no ; then
439 AC_MSG_ERROR([ARM NEON intrinsics not detected])
442 dnl =========================================================================================
443 dnl Check for GNU-style inline assembly support
445 have_gcc_inline_asm=no
446 AC_MSG_CHECKING(whether to use GNU-style inline assembler)
449 /* Most modern architectures have a NOP instruction, so this is a fairly generic test. */
450 asm volatile ( "\tnop\n" : : : "cc", "memory" );
452 }], have_gcc_inline_asm=yes)
454 AC_ARG_ENABLE(gcc-inline-asm,
455 [AC_HELP_STRING([--disable-gcc-inline-asm],
456 [disable GNU-style inline assembler])],
457 [enable_gcc_inline_asm=$enableval], [enable_gcc_inline_asm=auto])
459 if test $enable_gcc_inline_asm = no ; then
460 have_gcc_inline_asm=disabled
463 if test $have_gcc_inline_asm = yes ; then
464 AC_DEFINE(USE_GCC_INLINE_ASM, 1, [use GNU-style inline assembler])
467 AC_MSG_RESULT($have_gcc_inline_asm)
468 if test $enable_gcc_inline_asm = yes && test $have_gcc_inline_asm = no ; then
469 AC_MSG_ERROR([GNU-style inline assembler not detected])
472 AM_CONDITIONAL(USE_GCC_INLINE_ASM, test $have_gcc_inline_asm = yes)
474 dnl ==============================================
477 AC_ARG_ENABLE(timers,
478 [AC_HELP_STRING([--enable-timers],
479 [enable TIMER_BEGIN and TIMER_END macros [default=no]])],
480 [enable_timers=$enableval], [enable_timers=no])
482 if test $enable_timers = yes ; then
483 AC_DEFINE(PIXMAN_TIMERS, 1, [enable TIMER_BEGIN/TIMER_END macros])
485 AC_SUBST(PIXMAN_TIMERS)
487 dnl ===================================
491 [AC_HELP_STRING([--enable-gtk],
492 [enable tests using GTK+ [default=auto]])],
493 [enable_gtk=$enableval], [enable_gtk=auto])
496 if test $enable_gtk = auto ; then
497 PKG_CHECK_EXISTS([gtk+-2.0], [enable_gtk=yes], [enable_gtk=no])
499 if test $enable_gtk = yes ; then
500 PKG_CHECK_MODULES(GTK, [gtk+-2.0])
503 AM_CONDITIONAL(HAVE_GTK, [test "x$enable_gtk" = xyes])
510 dnl =====================================
513 AC_CHECK_FUNC(posix_memalign, have_posix_memalign=yes, have_posix_memalign=no)
514 if test x$have_posix_memalign = xyes; then
515 AC_DEFINE(HAVE_POSIX_MEMALIGN, 1, [Whether we have posix_memalign()])
518 AC_OUTPUT([pixman-1.pc
519 pixman-1-uninstalled.pc
522 pixman/pixman-version.h