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 AM_CONFIG_HEADER(config.h)
70 AC_CHECK_FUNCS([getisax])
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"])
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:
82 # pixman-$(pixman_major).0.minor.micro
84 m4_define([lt_current], [pixman_minor])
85 m4_define([lt_revision], [pixman_micro])
86 m4_define([lt_age], [pixman_minor])
88 LT_VERSION_INFO="lt_current:lt_revision:lt_age"
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)
97 AC_SUBST(LT_VERSION_INFO)
99 # Check for dependencies
100 #PKG_CHECK_MODULES(DEP, x11)
103 if test "x$GCC" = "xyes"; then
106 *[\ \ ]-Wall[\ \ ]*) ;;
107 *) CFLAGS="$CFLAGS -Wall" ;;
111 *[\ \ ]-fno-strict-aliasing[\ \ ]*) ;;
112 *) CFLAGS="$CFLAGS -fno-strict-aliasing" ;;
115 fi changequote([,])dnl
117 AC_PATH_PROG(PERL, perl, no)
118 if test "x$PERL" = xno; then
119 AC_MSG_ERROR([Perl is required to build pixman.])
123 dnl =========================================================================
124 dnl -fvisibility stuff
127 AC_MSG_CHECKING(for -fvisibility)
129 #if defined(__GNUC__) && (__GNUC__ >= 4)
131 error Need GCC 4.0 for visibility
133 int main () { return 0; }
136 if test "x$have_gcc4" = "xyes"; then
137 CFLAGS="$CFLAGS -fvisibility=hidden"
139 AC_MSG_RESULT($have_gcc4)
142 AC_MSG_CHECKING([for -xldscope (Sun compilers)])
144 #if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
146 error Need Sun Studio 8 for visibility
148 int main () { return 0; }
149 ], have_sunstudio8=yes)
151 if test "x$have_sunstudio8" = "xyes"; then
152 CFLAGS="$CFLAGS -xldscope=hidden"
154 AC_MSG_RESULT($have_sunstudio8)
156 dnl ===========================================================================
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"
168 MMX_CFLAGS="-mmmx -Winline"
172 have_mmx_intrinsics=no
173 AC_MSG_CHECKING(whether to use MMX intrinsics)
174 xserver_save_CFLAGS=$CFLAGS
175 CFLAGS="$MMX_CFLAGS $CFLAGS"
177 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
178 error "Need GCC >= 3.4 for MMX intrinsics"
180 #include <mmintrin.h>
182 __m64 v = _mm_cvtsi32_si64 (1);
183 return _mm_cvtsi64_si32 (v);
184 }], have_mmx_intrinsics=yes)
185 CFLAGS=$xserver_save_CFLAGS
188 [AC_HELP_STRING([--disable-mmx],
189 [disable MMX fast paths])],
190 [enable_mmx=$enableval], [enable_mmx=auto])
192 if test $enable_mmx = no ; then
193 have_mmx_intrinsics=disabled
196 if test $have_mmx_intrinsics = yes ; then
197 AC_DEFINE(USE_MMX, 1, [use MMX compiler intrinsics])
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])
207 AM_CONDITIONAL(USE_MMX, test $have_mmx_intrinsics = yes)
209 dnl ===========================================================================
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"
219 SSE2_CFLAGS="-mmmx -msse2 -Winline"
223 have_sse2_intrinsics=no
224 AC_MSG_CHECKING(whether to use SSE2 intrinsics)
225 xserver_save_CFLAGS=$CFLAGS
226 CFLAGS="$SSE2_CFLAGS $CFLAGS"
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"
234 #include <mmintrin.h>
235 #include <xmmintrin.h>
236 #include <emmintrin.h>
239 c = _mm_xor_si128 (a, b);
241 }], have_sse2_intrinsics=yes)
242 CFLAGS=$xserver_save_CFLAGS
245 [AC_HELP_STRING([--disable-sse2],
246 [disable SSE2 fast paths])],
247 [enable_sse2=$enableval], [enable_sse2=auto])
249 if test $enable_sse2 = no ; then
250 have_sse2_intrinsics=disabled
253 if test $have_sse2_intrinsics = yes ; then
254 AC_DEFINE(USE_SSE2, 1, [use SSE2 compiler intrinsics])
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])
262 AM_CONDITIONAL(USE_SSE2, test $have_sse2_intrinsics = yes)
264 dnl ===========================================================================
265 dnl Other special flags needed when building code using MMX or SSE instructions
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
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,
281 LDFLAGS="$hwcap_save_LDFLAGS"
282 AC_MSG_RESULT($use_hwcap_mapfile)
284 if test "x$MMX_LDFLAGS" = "x" ; then
285 MMX_LDFLAGS="$HWCAP_LDFLAGS"
287 if test "x$SSE2_LDFLAGS" = "x" ; then
288 SSE2_LDFLAGS="$HWCAP_LDFLAGS"
294 AC_SUBST(MMX_LDFLAGS)
295 AC_SUBST(SSE2_CFLAGS)
296 AC_SUBST(SSE2_LDFLAGS)
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"
303 VMX_CFLAGS="-maltivec -mabi=altivec"
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"
311 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
312 error "Need GCC >= 3.4 for sane altivec support"
316 vector unsigned int v = vec_splat_u32 (1);
319 }], have_vmx_intrinsics=yes)
320 CFLAGS=$xserver_save_CFLAGS
323 [AC_HELP_STRING([--disable-vmx],
324 [disable VMX fast paths])],
325 [enable_vmx=$enableval], [enable_vmx=auto])
327 if test $enable_vmx = no ; then
328 have_vmx_intrinsics=disabled
331 if test $have_vmx_intrinsics = yes ; then
332 AC_DEFINE(USE_VMX, 1, [use VMX compiler intrinsics])
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])
344 AM_CONDITIONAL(USE_VMX, test $have_vmx_intrinsics = yes)
346 dnl ===========================================================================
347 dnl Check for ARM SIMD instructions
348 ARM_SIMD_CFLAGS="-mcpu=arm1136j-s"
351 AC_MSG_CHECKING(whether to use ARM SIMD assembler)
352 xserver_save_CFLAGS=$CFLAGS
353 CFLAGS="$CFLAGS $ARM_SIMD_CFLAGS"
356 asm("uqadd8 r1, r1, r2");
358 }], have_arm_simd=yes)
359 CFLAGS=$xserver_save_CFLAGS
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])
366 if test $enable_arm_simd = no ; then
367 have_arm_simd=disabled
370 if test $have_arm_simd = yes ; then
371 AC_DEFINE(USE_ARM_SIMD, 1, [use ARM SIMD compiler intrinsics])
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])
381 AC_SUBST(ARM_SIMD_CFLAGS)
383 AM_CONDITIONAL(USE_ARM_SIMD, test $have_arm_simd = yes)
385 dnl ==========================================================================
386 dnl Check for ARM NEON instructions
387 ARM_NEON_CFLAGS="-mfpu=neon -mcpu=cortex-a8"
390 AC_MSG_CHECKING(whether to use ARM NEON)
391 xserver_save_CFLAGS=$CFLAGS
392 CFLAGS="$CFLAGS $ARM_NEON_CFLAGS"
394 #include <arm_neon.h>
396 uint8x8_t neon_test=vmov_n_u8(0);
398 }], have_arm_neon=yes)
399 CFLAGS=$xserver_save_CFLAGS
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])
406 if test $enable_arm_neon = no ; then
407 have_arm_neon=disabled
410 if test $have_arm_neon = yes ; then
411 AC_DEFINE(USE_ARM_NEON, 1, [use ARM NEON compiler intrinsics])
416 AC_SUBST(ARM_NEON_CFLAGS)
418 AM_CONDITIONAL(USE_ARM_NEON, test $have_arm_neon = yes)
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])
425 dnl =========================================================================================
426 dnl Check for GNU-style inline assembly support
428 have_gcc_inline_asm=no
429 AC_MSG_CHECKING(whether to use GNU-style inline assembler)
432 /* Most modern architectures have a NOP instruction, so this is a fairly generic test. */
433 asm volatile ( "\tnop\n" : : : "cc", "memory" );
435 }], have_gcc_inline_asm=yes)
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])
442 if test $enable_gcc_inline_asm = no ; then
443 have_gcc_inline_asm=disabled
446 if test $have_gcc_inline_asm = yes ; then
447 AC_DEFINE(USE_GCC_INLINE_ASM, 1, [use GNU-style inline assembler])
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])
455 AM_CONDITIONAL(USE_GCC_INLINE_ASM, test $have_gcc_inline_asm = yes)
457 dnl ==============================================
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])
465 if test $enable_timers = yes ; then
466 AC_DEFINE(PIXMAN_TIMERS, 1, [enable TIMER_BEGIN/TIMER_END macros])
468 AC_SUBST(PIXMAN_TIMERS)
470 dnl ===================================
474 [AC_HELP_STRING([--enable-gtk],
475 [enable tests using GTK+ [default=auto]])],
476 [enable_gtk=$enableval], [enable_gtk=auto])
479 if test $enable_gtk = auto ; then
480 PKG_CHECK_EXISTS([gtk+-2.0], [enable_gtk=yes], [enable_gtk=no])
482 if test $enable_gtk = yes ; then
483 PKG_CHECK_MODULES(GTK, [gtk+-2.0])
486 AM_CONDITIONAL(HAVE_GTK, [test "x$enable_gtk" = xyes])
493 dnl =====================================
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()])
501 AC_OUTPUT([pixman-1.pc
502 pixman-1-uninstalled.pc
505 pixman/pixman-version.h