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], 5)
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.
76 AC_CHECK_FUNCS([getisax])
82 # Checks for Sun Studio compilers
83 AC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"])
84 AC_CHECK_DECL([__amd64], [AMD64_ABI="yes"], [AMD64_ABI="no"])
86 # Default CFLAGS to -O -g rather than just the -g from AC_PROG_CC
87 # if we're using Sun Studio and neither the user nor a config.site
89 if test $SUNCC = yes && \
90 test "$test_CFLAGS" == "" && \
97 # We ignore pixman_major in the version here because the major version should
98 # always be encoded in the actual library name. Ie., the soname is:
100 # pixman-$(pixman_major).0.minor.micro
102 m4_define([lt_current], [pixman_minor])
103 m4_define([lt_revision], [pixman_micro])
104 m4_define([lt_age], [pixman_minor])
106 LT_VERSION_INFO="lt_current:lt_revision:lt_age"
108 PIXMAN_VERSION_MAJOR=pixman_major()
109 AC_SUBST(PIXMAN_VERSION_MAJOR)
110 PIXMAN_VERSION_MINOR=pixman_minor()
111 AC_SUBST(PIXMAN_VERSION_MINOR)
112 PIXMAN_VERSION_MICRO=pixman_micro()
113 AC_SUBST(PIXMAN_VERSION_MICRO)
115 AC_SUBST(LT_VERSION_INFO)
117 # Check for dependencies
118 #PKG_CHECK_MODULES(DEP, x11)
121 if test "x$GCC" = "xyes"; then
124 *[\ \ ]-Wall[\ \ ]*) ;;
125 *) CFLAGS="$CFLAGS -Wall" ;;
129 *[\ \ ]-fno-strict-aliasing[\ \ ]*) ;;
130 *) CFLAGS="$CFLAGS -fno-strict-aliasing" ;;
133 fi changequote([,])dnl
135 AC_PATH_PROG(PERL, perl, no)
136 if test "x$PERL" = xno; then
137 AC_MSG_ERROR([Perl is required to build pixman.])
141 dnl =========================================================================
142 dnl -fvisibility stuff
145 AC_MSG_CHECKING(for -fvisibility)
147 #if defined(__GNUC__) && (__GNUC__ >= 4)
149 error Need GCC 4.0 for visibility
151 int main () { return 0; }
154 if test "x$have_gcc4" = "xyes"; then
155 CFLAGS="$CFLAGS -fvisibility=hidden"
157 AC_MSG_RESULT($have_gcc4)
160 AC_MSG_CHECKING([for -xldscope (Sun compilers)])
162 #if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
164 error Need Sun Studio 8 for visibility
166 int main () { return 0; }
167 ], have_sunstudio8=yes)
169 if test "x$have_sunstudio8" = "xyes"; then
170 CFLAGS="$CFLAGS -xldscope=hidden"
172 AC_MSG_RESULT($have_sunstudio8)
174 dnl ===========================================================================
177 if test "x$MMX_CFLAGS" = "x" ; then
178 if test "x$SUNCC" = "xyes"; then
179 # Sun Studio doesn't have an -xarch=mmx flag, so we have to use sse
180 # but if we're building 64-bit, mmx & sse support is on by default and
181 # -xarch=sse throws an error instead
182 if test "$AMD64_ABI" = "no" ; then
183 MMX_CFLAGS="-xarch=sse"
186 MMX_CFLAGS="-mmmx -Winline"
190 have_mmx_intrinsics=no
191 AC_MSG_CHECKING(whether to use MMX intrinsics)
192 xserver_save_CFLAGS=$CFLAGS
193 CFLAGS="$MMX_CFLAGS $CFLAGS"
195 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
196 error "Need GCC >= 3.4 for MMX intrinsics"
198 #include <mmintrin.h>
200 __m64 v = _mm_cvtsi32_si64 (1);
201 return _mm_cvtsi64_si32 (v);
202 }], have_mmx_intrinsics=yes)
203 CFLAGS=$xserver_save_CFLAGS
206 [AC_HELP_STRING([--disable-mmx],
207 [disable MMX fast paths])],
208 [enable_mmx=$enableval], [enable_mmx=auto])
210 if test $enable_mmx = no ; then
211 have_mmx_intrinsics=disabled
214 if test $have_mmx_intrinsics = yes ; then
215 AC_DEFINE(USE_MMX, 1, [use MMX compiler intrinsics])
220 AC_MSG_RESULT($have_mmx_intrinsics)
221 if test $enable_mmx = yes && test $have_mmx_intrinsics = no ; then
222 AC_MSG_ERROR([MMX intrinsics not detected])
225 AM_CONDITIONAL(USE_MMX, test $have_mmx_intrinsics = yes)
227 dnl ===========================================================================
230 if test "x$SSE2_CFLAGS" = "x" ; then
231 if test "x$SUNCC" = "xyes"; then
232 # SSE2 is enabled by default in the Sun Studio 64-bit environment
233 if test "$AMD64_ABI" = "no" ; then
234 SSE2_CFLAGS="-xarch=sse2"
237 SSE2_CFLAGS="-mmmx -msse2 -Winline"
241 have_sse2_intrinsics=no
242 AC_MSG_CHECKING(whether to use SSE2 intrinsics)
243 xserver_save_CFLAGS=$CFLAGS
244 CFLAGS="$SSE2_CFLAGS $CFLAGS"
247 #if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 2))
248 # if !defined(__amd64__) && !defined(__x86_64__)
249 # error "Need GCC >= 4.2 for SSE2 intrinsics on x86"
252 #include <mmintrin.h>
253 #include <xmmintrin.h>
254 #include <emmintrin.h>
256 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
257 c = _mm_xor_si128 (a, b);
259 }], have_sse2_intrinsics=yes)
260 CFLAGS=$xserver_save_CFLAGS
263 [AC_HELP_STRING([--disable-sse2],
264 [disable SSE2 fast paths])],
265 [enable_sse2=$enableval], [enable_sse2=auto])
267 if test $enable_sse2 = no ; then
268 have_sse2_intrinsics=disabled
271 if test $have_sse2_intrinsics = yes ; then
272 AC_DEFINE(USE_SSE2, 1, [use SSE2 compiler intrinsics])
275 AC_MSG_RESULT($have_sse2_intrinsics)
276 if test $enable_sse2 = yes && test $have_sse2_intrinsics = no ; then
277 AC_MSG_ERROR([SSE2 intrinsics not detected])
280 AM_CONDITIONAL(USE_SSE2, test $have_sse2_intrinsics = yes)
282 dnl ===========================================================================
283 dnl Other special flags needed when building code using MMX or SSE instructions
286 # When building 32-bit binaries, apply a mapfile to ensure that the
287 # binaries aren't flagged as only able to run on MMX+SSE capable CPUs
288 # since they check at runtime before using those instructions.
289 # Not all linkers grok the mapfile format so we check for that first.
290 if test "$AMD64_ABI" = "no" ; then
292 AC_MSG_CHECKING(whether to use a hardware capability map file)
293 hwcap_save_LDFLAGS="$LDFLAGS"
294 HWCAP_LDFLAGS='-Wl,-M,$(srcdir)/solaris-hwcap.mapfile'
295 LDFLAGS="$LDFLAGS -Wl,-M,pixman/solaris-hwcap.mapfile"
296 AC_LINK_IFELSE([int main() { return 0; }],
297 use_hwcap_mapfile=yes,
299 LDFLAGS="$hwcap_save_LDFLAGS"
300 AC_MSG_RESULT($use_hwcap_mapfile)
302 if test "x$MMX_LDFLAGS" = "x" ; then
303 MMX_LDFLAGS="$HWCAP_LDFLAGS"
305 if test "x$SSE2_LDFLAGS" = "x" ; then
306 SSE2_LDFLAGS="$HWCAP_LDFLAGS"
312 AC_SUBST(MMX_LDFLAGS)
313 AC_SUBST(SSE2_CFLAGS)
314 AC_SUBST(SSE2_LDFLAGS)
316 dnl ===========================================================================
317 dnl Check for VMX/Altivec
318 if test -n "`$CC -v 2>&1 | grep version | grep Apple`"; then
319 VMX_CFLAGS="-faltivec"
321 VMX_CFLAGS="-maltivec -mabi=altivec"
324 have_vmx_intrinsics=no
325 AC_MSG_CHECKING(whether to use VMX/Altivec intrinsics)
326 xserver_save_CFLAGS=$CFLAGS
327 CFLAGS="$VMX_CFLAGS $CFLAGS"
329 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
330 error "Need GCC >= 3.4 for sane altivec support"
334 vector unsigned int v = vec_splat_u32 (1);
337 }], have_vmx_intrinsics=yes)
338 CFLAGS=$xserver_save_CFLAGS
341 [AC_HELP_STRING([--disable-vmx],
342 [disable VMX fast paths])],
343 [enable_vmx=$enableval], [enable_vmx=auto])
345 if test $enable_vmx = no ; then
346 have_vmx_intrinsics=disabled
349 if test $have_vmx_intrinsics = yes ; then
350 AC_DEFINE(USE_VMX, 1, [use VMX compiler intrinsics])
355 AC_MSG_RESULT($have_vmx_intrinsics)
356 if test $enable_vmx = yes && test $have_vmx_intrinsics = no ; then
357 AC_MSG_ERROR([VMX intrinsics not detected])
362 AM_CONDITIONAL(USE_VMX, test $have_vmx_intrinsics = yes)
364 dnl ===========================================================================
365 dnl Check for ARM SIMD instructions
366 ARM_SIMD_CFLAGS="-mcpu=arm1136j-s"
369 AC_MSG_CHECKING(whether to use ARM SIMD assembler)
370 xserver_save_CFLAGS=$CFLAGS
371 CFLAGS="$ARM_SIMD_CFLAGS $CFLAGS"
374 asm("uqadd8 r1, r1, r2");
376 }], have_arm_simd=yes)
377 CFLAGS=$xserver_save_CFLAGS
379 AC_ARG_ENABLE(arm-simd,
380 [AC_HELP_STRING([--disable-arm-simd],
381 [disable ARM SIMD fast paths])],
382 [enable_arm_simd=$enableval], [enable_arm_simd=auto])
384 if test $enable_arm_simd = no ; then
385 have_arm_simd=disabled
388 if test $have_arm_simd = yes ; then
389 AC_DEFINE(USE_ARM_SIMD, 1, [use ARM SIMD compiler intrinsics])
394 AC_MSG_RESULT($have_arm_simd)
395 if test $enable_arm_simd = yes && test $have_arm_simd = no ; then
396 AC_MSG_ERROR([ARM SIMD intrinsics not detected])
399 AC_SUBST(ARM_SIMD_CFLAGS)
401 AM_CONDITIONAL(USE_ARM_SIMD, test $have_arm_simd = yes)
403 dnl ==========================================================================
404 dnl Check if assembler is gas compatible and supports NEON instructions
406 AC_MSG_CHECKING(whether to use ARM NEON assembler)
407 xserver_save_CFLAGS=$CFLAGS
408 CFLAGS="-x assembler-with-cpp"
414 #error EABI is required (to be sure that calling conventions are compatible)
417 vmovn.u16 d0, q0]], 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 assembly optimizations])
433 AM_CONDITIONAL(USE_ARM_NEON, test $have_arm_neon = yes)
435 AC_MSG_RESULT($have_arm_neon)
436 if test $enable_arm_neon = yes && test $have_arm_neon = no ; then
437 AC_MSG_ERROR([ARM NEON intrinsics not detected])
440 dnl =========================================================================================
441 dnl Check for GNU-style inline assembly support
443 have_gcc_inline_asm=no
444 AC_MSG_CHECKING(whether to use GNU-style inline assembler)
447 /* Most modern architectures have a NOP instruction, so this is a fairly generic test. */
448 asm volatile ( "\tnop\n" : : : "cc", "memory" );
450 }], have_gcc_inline_asm=yes)
452 AC_ARG_ENABLE(gcc-inline-asm,
453 [AC_HELP_STRING([--disable-gcc-inline-asm],
454 [disable GNU-style inline assembler])],
455 [enable_gcc_inline_asm=$enableval], [enable_gcc_inline_asm=auto])
457 if test $enable_gcc_inline_asm = no ; then
458 have_gcc_inline_asm=disabled
461 if test $have_gcc_inline_asm = yes ; then
462 AC_DEFINE(USE_GCC_INLINE_ASM, 1, [use GNU-style inline assembler])
465 AC_MSG_RESULT($have_gcc_inline_asm)
466 if test $enable_gcc_inline_asm = yes && test $have_gcc_inline_asm = no ; then
467 AC_MSG_ERROR([GNU-style inline assembler not detected])
470 AM_CONDITIONAL(USE_GCC_INLINE_ASM, test $have_gcc_inline_asm = yes)
472 dnl ==============================================
475 AC_ARG_ENABLE(timers,
476 [AC_HELP_STRING([--enable-timers],
477 [enable TIMER_BEGIN and TIMER_END macros [default=no]])],
478 [enable_timers=$enableval], [enable_timers=no])
480 if test $enable_timers = yes ; then
481 AC_DEFINE(PIXMAN_TIMERS, 1, [enable TIMER_BEGIN/TIMER_END macros])
483 AC_SUBST(PIXMAN_TIMERS)
485 dnl ===================================
489 [AC_HELP_STRING([--enable-gtk],
490 [enable tests using GTK+ [default=auto]])],
491 [enable_gtk=$enableval], [enable_gtk=auto])
494 if test $enable_gtk = auto ; then
495 PKG_CHECK_EXISTS([gtk+-2.0], [enable_gtk=yes], [enable_gtk=no])
497 if test $enable_gtk = yes ; then
498 PKG_CHECK_MODULES(GTK, [gtk+-2.0])
501 AM_CONDITIONAL(HAVE_GTK, [test "x$enable_gtk" = xyes])
508 dnl =====================================
511 AC_CHECK_FUNC(posix_memalign, have_posix_memalign=yes, have_posix_memalign=no)
512 if test x$have_posix_memalign = xyes; then
513 AC_DEFINE(HAVE_POSIX_MEMALIGN, 1, [Whether we have posix_memalign()])
516 AC_OUTPUT([pixman-1.pc
517 pixman-1-uninstalled.pc
520 pixman/pixman-version.h