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([foreign 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])
81 # Checks for Sun Studio compilers
82 AC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"])
83 AC_CHECK_DECL([__amd64], [AMD64_ABI="yes"], [AMD64_ABI="no"])
85 # Default CFLAGS to -O -g rather than just the -g from AC_PROG_CC
86 # if we're using Sun Studio and neither the user nor a config.site
88 if test $SUNCC = yes && \
89 test "$test_CFLAGS" == "" && \
95 CFLAGS="$CFLAGS -DPIXMAN_DISABLE_DEPRECATED -DPIXMAN_INTERNAL_API"
98 # We ignore pixman_major in the version here because the major version should
99 # always be encoded in the actual library name. Ie., the soname is:
101 # pixman-$(pixman_major).0.minor.micro
103 m4_define([lt_current], [pixman_minor])
104 m4_define([lt_revision], [pixman_micro])
105 m4_define([lt_age], [pixman_minor])
107 LT_VERSION_INFO="lt_current:lt_revision:lt_age"
109 PIXMAN_VERSION_MAJOR=pixman_major()
110 AC_SUBST(PIXMAN_VERSION_MAJOR)
111 PIXMAN_VERSION_MINOR=pixman_minor()
112 AC_SUBST(PIXMAN_VERSION_MINOR)
113 PIXMAN_VERSION_MICRO=pixman_micro()
114 AC_SUBST(PIXMAN_VERSION_MICRO)
116 AC_SUBST(LT_VERSION_INFO)
118 # Check for dependencies
119 #PKG_CHECK_MODULES(DEP, x11)
122 if test "x$GCC" = "xyes"; then
125 *[\ \ ]-Wall[\ \ ]*) ;;
126 *) CFLAGS="$CFLAGS -Wall" ;;
130 *[\ \ ]-fno-strict-aliasing[\ \ ]*) ;;
131 *) CFLAGS="$CFLAGS -fno-strict-aliasing" ;;
134 fi changequote([,])dnl
136 AC_PATH_PROG(PERL, perl, no)
137 if test "x$PERL" = xno; then
138 AC_MSG_ERROR([Perl is required to build pixman.])
142 dnl =========================================================================
143 dnl -fvisibility stuff
146 AC_MSG_CHECKING(for -fvisibility)
148 #if defined(__GNUC__) && (__GNUC__ >= 4)
150 error Need GCC 4.0 for visibility
152 int main () { return 0; }
155 if test "x$have_gcc4" = "xyes"; then
156 CFLAGS="$CFLAGS -fvisibility=hidden"
158 AC_MSG_RESULT($have_gcc4)
161 AC_MSG_CHECKING([for -xldscope (Sun compilers)])
163 #if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
165 error Need Sun Studio 8 for visibility
167 int main () { return 0; }
168 ], have_sunstudio8=yes)
170 if test "x$have_sunstudio8" = "xyes"; then
171 CFLAGS="$CFLAGS -xldscope=hidden"
173 AC_MSG_RESULT($have_sunstudio8)
175 dnl ===========================================================================
178 if test "x$MMX_CFLAGS" = "x" ; then
179 if test "x$SUNCC" = "xyes"; then
180 # Sun Studio doesn't have an -xarch=mmx flag, so we have to use sse
181 # but if we're building 64-bit, mmx & sse support is on by default and
182 # -xarch=sse throws an error instead
183 if test "$AMD64_ABI" = "no" ; then
184 MMX_CFLAGS="-xarch=sse"
187 MMX_CFLAGS="-mmmx -Winline"
191 have_mmx_intrinsics=no
192 AC_MSG_CHECKING(whether to use MMX intrinsics)
193 xserver_save_CFLAGS=$CFLAGS
194 CFLAGS="$MMX_CFLAGS $CFLAGS"
196 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
197 error "Need GCC >= 3.4 for MMX intrinsics"
199 #include <mmintrin.h>
201 __m64 v = _mm_cvtsi32_si64 (1);
202 return _mm_cvtsi64_si32 (v);
203 }], have_mmx_intrinsics=yes)
204 CFLAGS=$xserver_save_CFLAGS
207 [AC_HELP_STRING([--disable-mmx],
208 [disable MMX fast paths])],
209 [enable_mmx=$enableval], [enable_mmx=auto])
211 if test $enable_mmx = no ; then
212 have_mmx_intrinsics=disabled
215 if test $have_mmx_intrinsics = yes ; then
216 AC_DEFINE(USE_MMX, 1, [use MMX compiler intrinsics])
221 AC_MSG_RESULT($have_mmx_intrinsics)
222 if test $enable_mmx = yes && test $have_mmx_intrinsics = no ; then
223 AC_MSG_ERROR([MMX intrinsics not detected])
226 AM_CONDITIONAL(USE_MMX, test $have_mmx_intrinsics = yes)
228 dnl ===========================================================================
231 if test "x$SSE2_CFLAGS" = "x" ; then
232 if test "x$SUNCC" = "xyes"; then
233 # SSE2 is enabled by default in the Sun Studio 64-bit environment
234 if test "$AMD64_ABI" = "no" ; then
235 SSE2_CFLAGS="-xarch=sse2"
238 SSE2_CFLAGS="-mmmx -msse2 -Winline"
242 have_sse2_intrinsics=no
243 AC_MSG_CHECKING(whether to use SSE2 intrinsics)
244 xserver_save_CFLAGS=$CFLAGS
245 CFLAGS="$SSE2_CFLAGS $CFLAGS"
248 #if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 2))
249 # if !defined(__amd64__) && !defined(__x86_64__)
250 # error "Need GCC >= 4.2 for SSE2 intrinsics on x86"
253 #include <mmintrin.h>
254 #include <xmmintrin.h>
255 #include <emmintrin.h>
258 c = _mm_xor_si128 (a, b);
260 }], have_sse2_intrinsics=yes)
261 CFLAGS=$xserver_save_CFLAGS
264 [AC_HELP_STRING([--disable-sse2],
265 [disable SSE2 fast paths])],
266 [enable_sse2=$enableval], [enable_sse2=auto])
268 if test $enable_sse2 = no ; then
269 have_sse2_intrinsics=disabled
272 if test $have_sse2_intrinsics = yes ; then
273 AC_DEFINE(USE_SSE2, 1, [use SSE2 compiler intrinsics])
276 AC_MSG_RESULT($have_sse2_intrinsics)
277 if test $enable_sse2 = yes && test $have_sse2_intrinsics = no ; then
278 AC_MSG_ERROR([SSE2 intrinsics not detected])
281 AM_CONDITIONAL(USE_SSE2, test $have_sse2_intrinsics = yes)
283 dnl ===========================================================================
284 dnl Other special flags needed when building code using MMX or SSE instructions
287 # When building 32-bit binaries, apply a mapfile to ensure that the
288 # binaries aren't flagged as only able to run on MMX+SSE capable CPUs
289 # since they check at runtime before using those instructions.
290 # Not all linkers grok the mapfile format so we check for that first.
291 if test "$AMD64_ABI" = "no" ; then
293 AC_MSG_CHECKING(whether to use a hardware capability map file)
294 hwcap_save_LDFLAGS="$LDFLAGS"
295 HWCAP_LDFLAGS='-Wl,-M,$(srcdir)/solaris-hwcap.mapfile'
296 LDFLAGS="$LDFLAGS -Wl,-M,pixman/solaris-hwcap.mapfile"
297 AC_LINK_IFELSE([int main() { return 0; }],
298 use_hwcap_mapfile=yes,
300 LDFLAGS="$hwcap_save_LDFLAGS"
301 AC_MSG_RESULT($use_hwcap_mapfile)
303 if test "x$MMX_LDFLAGS" = "x" ; then
304 MMX_LDFLAGS="$HWCAP_LDFLAGS"
306 if test "x$SSE2_LDFLAGS" = "x" ; then
307 SSE2_LDFLAGS="$HWCAP_LDFLAGS"
313 AC_SUBST(MMX_LDFLAGS)
314 AC_SUBST(SSE2_CFLAGS)
315 AC_SUBST(SSE2_LDFLAGS)
317 dnl ===========================================================================
318 dnl Check for VMX/Altivec
319 if test -n "`$CC -v 2>&1 | grep version | grep Apple`"; then
320 VMX_CFLAGS="-faltivec"
322 VMX_CFLAGS="-maltivec -mabi=altivec"
325 have_vmx_intrinsics=no
326 AC_MSG_CHECKING(whether to use VMX/Altivec intrinsics)
327 xserver_save_CFLAGS=$CFLAGS
328 CFLAGS="$VMX_CFLAGS $CFLAGS"
330 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
331 error "Need GCC >= 3.4 for sane altivec support"
335 vector unsigned int v = vec_splat_u32 (1);
338 }], have_vmx_intrinsics=yes)
339 CFLAGS=$xserver_save_CFLAGS
342 [AC_HELP_STRING([--disable-vmx],
343 [disable VMX fast paths])],
344 [enable_vmx=$enableval], [enable_vmx=auto])
346 if test $enable_vmx = no ; then
347 have_vmx_intrinsics=disabled
350 if test $have_vmx_intrinsics = yes ; then
351 AC_DEFINE(USE_VMX, 1, [use VMX compiler intrinsics])
356 AC_MSG_RESULT($have_vmx_intrinsics)
357 if test $enable_vmx = yes && test $have_vmx_intrinsics = no ; then
358 AC_MSG_ERROR([VMX intrinsics not detected])
363 AM_CONDITIONAL(USE_VMX, test $have_vmx_intrinsics = yes)
365 dnl ===========================================================================
366 dnl Check for ARM SIMD instructions
367 ARM_SIMD_CFLAGS="-mcpu=arm1136j-s"
370 AC_MSG_CHECKING(whether to use ARM SIMD assembler)
371 xserver_save_CFLAGS=$CFLAGS
372 CFLAGS="$ARM_SIMD_CFLAGS $CFLAGS"
375 asm("uqadd8 r1, r1, r2");
377 }], have_arm_simd=yes)
378 CFLAGS=$xserver_save_CFLAGS
380 AC_ARG_ENABLE(arm-simd,
381 [AC_HELP_STRING([--disable-arm-simd],
382 [disable ARM SIMD fast paths])],
383 [enable_arm_simd=$enableval], [enable_arm_simd=auto])
385 if test $enable_arm_simd = no ; then
386 have_arm_simd=disabled
389 if test $have_arm_simd = yes ; then
390 AC_DEFINE(USE_ARM_SIMD, 1, [use ARM SIMD compiler intrinsics])
395 AC_MSG_RESULT($have_arm_simd)
396 if test $enable_arm_simd = yes && test $have_arm_simd = no ; then
397 AC_MSG_ERROR([ARM SIMD intrinsics not detected])
400 AC_SUBST(ARM_SIMD_CFLAGS)
402 AM_CONDITIONAL(USE_ARM_SIMD, test $have_arm_simd = yes)
404 dnl ==========================================================================
405 dnl Check for ARM NEON instructions
406 ARM_NEON_CFLAGS="-mfpu=neon -mcpu=cortex-a8"
409 AC_MSG_CHECKING(whether to use ARM NEON)
410 xserver_save_CFLAGS=$CFLAGS
411 CFLAGS="$ARM_NEON_CFLAGS $CFLAGS"
413 #include <arm_neon.h>
415 uint8x8_t neon_test=vmov_n_u8(0);
417 }], have_arm_neon=yes)
418 CFLAGS=$xserver_save_CFLAGS
420 AC_ARG_ENABLE(arm-neon,
421 [AC_HELP_STRING([--disable-arm-neon],
422 [disable ARM NEON fast paths])],
423 [enable_arm_neon=$enableval], [enable_arm_neon=auto])
425 if test $enable_arm_neon = no ; then
426 have_arm_neon=disabled
429 if test $have_arm_neon = yes ; then
430 AC_DEFINE(USE_ARM_NEON, 1, [use ARM NEON compiler intrinsics])
435 AC_SUBST(ARM_NEON_CFLAGS)
437 AM_CONDITIONAL(USE_ARM_NEON, test $have_arm_neon = yes)
439 AC_MSG_RESULT($have_arm_neon)
440 if test $enable_arm_neon = yes && test $have_arm_neon = no ; then
441 AC_MSG_ERROR([ARM NEON intrinsics not detected])
444 dnl =========================================================================================
445 dnl Check for GNU-style inline assembly support
447 have_gcc_inline_asm=no
448 AC_MSG_CHECKING(whether to use GNU-style inline assembler)
451 /* Most modern architectures have a NOP instruction, so this is a fairly generic test. */
452 asm volatile ( "\tnop\n" : : : "cc", "memory" );
454 }], have_gcc_inline_asm=yes)
456 AC_ARG_ENABLE(gcc-inline-asm,
457 [AC_HELP_STRING([--disable-gcc-inline-asm],
458 [disable GNU-style inline assembler])],
459 [enable_gcc_inline_asm=$enableval], [enable_gcc_inline_asm=auto])
461 if test $enable_gcc_inline_asm = no ; then
462 have_gcc_inline_asm=disabled
465 if test $have_gcc_inline_asm = yes ; then
466 AC_DEFINE(USE_GCC_INLINE_ASM, 1, [use GNU-style inline assembler])
469 AC_MSG_RESULT($have_gcc_inline_asm)
470 if test $enable_gcc_inline_asm = yes && test $have_gcc_inline_asm = no ; then
471 AC_MSG_ERROR([GNU-style inline assembler not detected])
474 AM_CONDITIONAL(USE_GCC_INLINE_ASM, test $have_gcc_inline_asm = yes)
476 dnl ==============================================
479 AC_ARG_ENABLE(timers,
480 [AC_HELP_STRING([--enable-timers],
481 [enable TIMER_BEGIN and TIMER_END macros [default=no]])],
482 [enable_timers=$enableval], [enable_timers=no])
484 if test $enable_timers = yes ; then
485 AC_DEFINE(PIXMAN_TIMERS, 1, [enable TIMER_BEGIN/TIMER_END macros])
487 AC_SUBST(PIXMAN_TIMERS)
489 dnl ===================================
493 [AC_HELP_STRING([--enable-gtk],
494 [enable tests using GTK+ [default=auto]])],
495 [enable_gtk=$enableval], [enable_gtk=auto])
498 if test $enable_gtk = auto ; then
499 PKG_CHECK_EXISTS([gtk+-2.0], [enable_gtk=yes], [enable_gtk=no])
501 if test $enable_gtk = yes ; then
502 PKG_CHECK_MODULES(GTK, [gtk+-2.0])
505 AM_CONDITIONAL(HAVE_GTK, [test "x$enable_gtk" = xyes])
512 dnl =====================================
515 AC_CHECK_FUNC(posix_memalign, have_posix_memalign=yes, have_posix_memalign=no)
516 if test x$have_posix_memalign = xyes; then
517 AC_DEFINE(HAVE_POSIX_MEMALIGN, 1, [Whether we have posix_memalign()])
520 AC_OUTPUT([pixman-1.pc
521 pixman-1-uninstalled.pc
524 pixman/pixman-version.h