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 event 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], 15)
57 m4_define([pixman_micro], 9)
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
105 *[\ \ ]-Wall[\ \ ]*) ;;
106 *) CFLAGS="$CFLAGS -Wall" ;;
107 esac fi changequote([,])dnl
109 AC_PATH_PROG(PERL, perl, no)
110 if test "x$PERL" = xno; then
111 AC_MSG_ERROR([Perl is required to build pixman.])
115 dnl =========================================================================
116 dnl -fvisibility stuff
119 AC_MSG_CHECKING(for -fvisibility)
121 #if defined(__GNUC__) && (__GNUC__ >= 4)
123 error Need GCC 4.0 for visibility
125 int main () { return 0; }
128 if test "x$have_gcc4" = "xyes"; then
129 CFLAGS="$CFLAGS -fvisibility=hidden"
131 AC_MSG_RESULT($have_gcc4)
134 AC_MSG_CHECKING([for -xldscope (Sun compilers)])
136 #if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
138 error Need Sun Studio 8 for visibility
140 int main () { return 0; }
141 ], have_sunstudio8=yes)
143 if test "x$have_sunstudio8" = "xyes"; then
144 CFLAGS="$CFLAGS -xldscope=hidden"
146 AC_MSG_RESULT($have_sunstudio8)
148 dnl ===========================================================================
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"
160 MMX_CFLAGS="-mmmx -Winline"
164 have_mmx_intrinsics=no
165 AC_MSG_CHECKING(whether to use MMX intrinsics)
166 xserver_save_CFLAGS=$CFLAGS
167 CFLAGS="$MMX_CFLAGS $CFLAGS"
169 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
170 error "Need GCC >= 3.4 for MMX intrinsics"
172 #include <mmintrin.h>
174 __m64 v = _mm_cvtsi32_si64 (1);
175 return _mm_cvtsi64_si32 (v);
176 }], have_mmx_intrinsics=yes)
177 CFLAGS=$xserver_save_CFLAGS
180 [AC_HELP_STRING([--disable-mmx],
181 [disable MMX fast paths])],
182 [enable_mmx=$enableval], [enable_mmx=auto])
184 if test $enable_mmx = no ; then
185 have_mmx_intrinsics=disabled
188 if test $have_mmx_intrinsics = yes ; then
189 AC_DEFINE(USE_MMX, 1, [use MMX compiler intrinsics])
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])
199 AM_CONDITIONAL(USE_MMX, test $have_mmx_intrinsics = yes)
201 dnl ===========================================================================
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"
211 SSE2_CFLAGS="-mmmx -msse2 -Winline"
215 have_sse2_intrinsics=no
216 AC_MSG_CHECKING(whether to use SSE2 intrinsics)
217 xserver_save_CFLAGS=$CFLAGS
218 CFLAGS="$SSE2_CFLAGS $CFLAGS"
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"
226 #include <mmintrin.h>
227 #include <xmmintrin.h>
228 #include <emmintrin.h>
231 c = _mm_xor_si128 (a, b);
233 }], have_sse2_intrinsics=yes)
234 CFLAGS=$xserver_save_CFLAGS
237 [AC_HELP_STRING([--disable-sse2],
238 [disable SSE2 fast paths])],
239 [enable_sse2=$enableval], [enable_sse2=auto])
241 if test $enable_sse2 = no ; then
242 have_sse2_intrinsics=disabled
245 if test $have_sse2_intrinsics = yes ; then
246 AC_DEFINE(USE_SSE2, 1, [use SSE2 compiler intrinsics])
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])
254 AM_CONDITIONAL(USE_SSE2, test $have_sse2_intrinsics = yes)
256 dnl ===========================================================================
257 dnl Other special flags needed when building code using MMX or SSE instructions
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'
266 if test "x$MMX_LDFLAGS" = "x" ; then
267 MMX_LDFLAGS="$HWCAP_LDFLAGS"
269 if test "x$SSE2_LDFLAGS" = "x" ; then
270 SSE2_LDFLAGS="$HWCAP_LDFLAGS"
276 AC_SUBST(MMX_LDFLAGS)
277 AC_SUBST(SSE2_CFLAGS)
278 AC_SUBST(SSE2_LDFLAGS)
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"
285 VMX_CFLAGS="-maltivec -mabi=altivec"
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"
293 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
294 error "Need GCC >= 3.4 for sane altivec support"
298 vector unsigned int v = vec_splat_u32 (1);
301 }], have_vmx_intrinsics=yes)
302 CFLAGS=$xserver_save_CFLAGS
305 [AC_HELP_STRING([--disable-vmx],
306 [disable VMX fast paths])],
307 [enable_vmx=$enableval], [enable_vmx=auto])
309 if test $enable_vmx = no ; then
310 have_vmx_intrinsics=disabled
313 if test $have_vmx_intrinsics = yes ; then
314 AC_DEFINE(USE_VMX, 1, [use VMX compiler intrinsics])
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])
326 AM_CONDITIONAL(USE_VMX, test $have_vmx_intrinsics = yes)
328 dnl ===========================================================================
329 dnl Check for ARM SIMD instructions
333 AC_MSG_CHECKING(whether to use ARM SIMD assembler)
334 xserver_save_CFLAGS=$CFLAGS
335 CFLAGS="$CFLAGS $ARM_SIMD_CFLAGS"
338 asm("uqadd8 r1, r1, r2");
340 }], have_arm_simd=yes)
341 CFLAGS=$xserver_save_CFLAGS
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])
348 if test $enable_arm_simd = no ; then
349 have_arm_simd=disabled
352 if test $have_arm_simd = yes ; then
353 AC_DEFINE(USE_ARM_SIMD, 1, [use ARM SIMD compiler intrinsics])
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])
363 AC_SUBST(ARM_SIMD_CFLAGS)
365 AM_CONDITIONAL(USE_ARM_SIMD, test $have_arm_simd = yes)
367 dnl ==========================================================================
368 dnl Check for ARM NEON instructions
369 ARM_NEON_CFLAGS="-mfpu=neon -mfloat-abi=softfp"
372 AC_MSG_CHECKING(whether to use ARM NEON)
373 xserver_save_CFLAGS=$CFLAGS
374 CFLAGS="$CFLAGS $ARM_NEON_CFLAGS"
376 #include <arm_neon.h>
378 uint8x8_t neon_test=vmov_n_u8(0);
380 }], have_arm_neon=yes)
381 CFLAGS=$xserver_save_CFLAGS
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])
388 if test $enable_arm_neon = no ; then
389 have_arm_neon=disabled
392 if test $have_arm_neon = yes ; then
393 AC_DEFINE(USE_ARM_NEON, 1, [use ARM NEON compiler intrinsics])
398 AC_SUBST(ARM_NEON_CFLAGS)
400 AM_CONDITIONAL(USE_ARM_NEON, test $have_arm_neon = yes)
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])
407 dnl =========================================================================================
408 dnl Check for GNU-style inline assembly support
410 have_gcc_inline_asm=no
411 AC_MSG_CHECKING(whether to use GNU-style inline assembler)
414 /* Most modern architectures have a NOP instruction, so this is a fairly generic test. */
415 asm volatile ( "\tnop\n" : : : "cc", "memory" );
417 }], have_gcc_inline_asm=yes)
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])
424 if test $enable_gcc_inline_asm = no ; then
425 have_gcc_inline_asm=disabled
428 if test $have_gcc_inline_asm = yes ; then
429 AC_DEFINE(USE_GCC_INLINE_ASM, 1, [use GNU-style inline assembler])
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])
437 AM_CONDITIONAL(USE_GCC_INLINE_ASM, test $have_gcc_inline_asm = yes)
439 dnl ==============================================
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])
447 AC_DEFINE(PIXMAN_TIMERS, 1, [enable TIMER_BEGIN/TIMER_END macros])
448 AC_SUBST(PIXMAN_TIMERS)
450 dnl ===================================
454 [AC_HELP_STRING([--enable-gtk],
455 [enable tests using GTK+ [default=auto]])],
456 [enable_gtk=$enableval], [enable_gtk=auto])
459 if test $enable_gtk = auto ; then
460 PKG_CHECK_EXISTS([gtk+-2.0], [enable_gtk=yes], [enable_gtk=no])
462 if test $enable_gtk = yes ; then
463 PKG_CHECK_MODULES(GTK, [gtk+-2.0])
466 AM_CONDITIONAL(HAVE_GTK, [test "x$enable_gtk" = xyes])
475 AC_OUTPUT([pixman-1.pc
476 pixman-1-uninstalled.pc
479 pixman/pixman-version.h