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], 19)
57 m4_define([pixman_micro], 1)
59 m4_define([pixman_version],[pixman_major.pixman_minor.pixman_micro])
61 AC_INIT(pixman, pixman_version, "pixman@lists.freedesktop.org", 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])
80 # Check for OpenMP support (only supported by autoconf >=2.62)
82 m4_ifdef([AC_OPENMP], [AC_OPENMP], [AC_SUBST(OPENMP_CFLAGS)])
86 # Checks for Sun Studio compilers
87 AC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"])
88 AC_CHECK_DECL([__amd64], [AMD64_ABI="yes"], [AMD64_ABI="no"])
90 # Default CFLAGS to -O -g rather than just the -g from AC_PROG_CC
91 # if we're using Sun Studio and neither the user nor a config.site
93 if test $SUNCC = yes && \
94 test "$test_CFLAGS" == "" && \
101 # We ignore pixman_major in the version here because the major version should
102 # always be encoded in the actual library name. Ie., the soname is:
104 # pixman-$(pixman_major).0.minor.micro
106 m4_define([lt_current], [pixman_minor])
107 m4_define([lt_revision], [pixman_micro])
108 m4_define([lt_age], [pixman_minor])
110 LT_VERSION_INFO="lt_current:lt_revision:lt_age"
112 PIXMAN_VERSION_MAJOR=pixman_major()
113 AC_SUBST(PIXMAN_VERSION_MAJOR)
114 PIXMAN_VERSION_MINOR=pixman_minor()
115 AC_SUBST(PIXMAN_VERSION_MINOR)
116 PIXMAN_VERSION_MICRO=pixman_micro()
117 AC_SUBST(PIXMAN_VERSION_MICRO)
119 AC_SUBST(LT_VERSION_INFO)
121 # Check for dependencies
122 #PKG_CHECK_MODULES(DEP, x11)
125 if test "x$GCC" = "xyes"; then
128 *[\ \ ]-Wall[\ \ ]*) ;;
129 *) CFLAGS="$CFLAGS -Wall" ;;
133 *[\ \ ]-fno-strict-aliasing[\ \ ]*) ;;
134 *) CFLAGS="$CFLAGS -fno-strict-aliasing" ;;
137 fi changequote([,])dnl
139 AC_PATH_PROG(PERL, perl, no)
140 if test "x$PERL" = xno; then
141 AC_MSG_ERROR([Perl is required to build pixman.])
145 dnl =========================================================================
146 dnl -fvisibility stuff
149 AC_MSG_CHECKING(for -fvisibility)
151 #if defined(__GNUC__) && (__GNUC__ >= 4)
153 error Need GCC 4.0 for visibility
155 int main () { return 0; }
158 if test "x$have_gcc4" = "xyes"; then
159 CFLAGS="$CFLAGS -fvisibility=hidden"
161 AC_MSG_RESULT($have_gcc4)
164 AC_MSG_CHECKING([for -xldscope (Sun compilers)])
166 #if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
168 error Need Sun Studio 8 for visibility
170 int main () { return 0; }
171 ], have_sunstudio8=yes)
173 if test "x$have_sunstudio8" = "xyes"; then
174 CFLAGS="$CFLAGS -xldscope=hidden"
176 AC_MSG_RESULT($have_sunstudio8)
178 dnl ===========================================================================
181 if test "x$MMX_CFLAGS" = "x" ; then
182 if test "x$SUNCC" = "xyes"; then
183 # Sun Studio doesn't have an -xarch=mmx flag, so we have to use sse
184 # but if we're building 64-bit, mmx & sse support is on by default and
185 # -xarch=sse throws an error instead
186 if test "$AMD64_ABI" = "no" ; then
187 MMX_CFLAGS="-xarch=sse"
190 MMX_CFLAGS="-mmmx -Winline"
194 have_mmx_intrinsics=no
195 AC_MSG_CHECKING(whether to use MMX intrinsics)
196 xserver_save_CFLAGS=$CFLAGS
197 CFLAGS="$MMX_CFLAGS $CFLAGS"
199 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
200 error "Need GCC >= 3.4 for MMX intrinsics"
202 #include <mmintrin.h>
204 __m64 v = _mm_cvtsi32_si64 (1);
205 return _mm_cvtsi64_si32 (v);
206 }], have_mmx_intrinsics=yes)
207 CFLAGS=$xserver_save_CFLAGS
210 [AC_HELP_STRING([--disable-mmx],
211 [disable MMX fast paths])],
212 [enable_mmx=$enableval], [enable_mmx=auto])
214 if test $enable_mmx = no ; then
215 have_mmx_intrinsics=disabled
218 if test $have_mmx_intrinsics = yes ; then
219 AC_DEFINE(USE_MMX, 1, [use MMX compiler intrinsics])
224 AC_MSG_RESULT($have_mmx_intrinsics)
225 if test $enable_mmx = yes && test $have_mmx_intrinsics = no ; then
226 AC_MSG_ERROR([MMX intrinsics not detected])
229 AM_CONDITIONAL(USE_MMX, test $have_mmx_intrinsics = yes)
231 dnl ===========================================================================
234 if test "x$SSE2_CFLAGS" = "x" ; then
235 if test "x$SUNCC" = "xyes"; then
236 # SSE2 is enabled by default in the Sun Studio 64-bit environment
237 if test "$AMD64_ABI" = "no" ; then
238 SSE2_CFLAGS="-xarch=sse2"
241 SSE2_CFLAGS="-mmmx -msse2 -Winline"
245 have_sse2_intrinsics=no
246 AC_MSG_CHECKING(whether to use SSE2 intrinsics)
247 xserver_save_CFLAGS=$CFLAGS
248 CFLAGS="$SSE2_CFLAGS $CFLAGS"
251 #if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 2))
252 # if !defined(__amd64__) && !defined(__x86_64__)
253 # error "Need GCC >= 4.2 for SSE2 intrinsics on x86"
256 #include <mmintrin.h>
257 #include <xmmintrin.h>
258 #include <emmintrin.h>
260 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
261 c = _mm_xor_si128 (a, b);
263 }], have_sse2_intrinsics=yes)
264 CFLAGS=$xserver_save_CFLAGS
267 [AC_HELP_STRING([--disable-sse2],
268 [disable SSE2 fast paths])],
269 [enable_sse2=$enableval], [enable_sse2=auto])
271 if test $enable_sse2 = no ; then
272 have_sse2_intrinsics=disabled
275 if test $have_sse2_intrinsics = yes ; then
276 AC_DEFINE(USE_SSE2, 1, [use SSE2 compiler intrinsics])
279 AC_MSG_RESULT($have_sse2_intrinsics)
280 if test $enable_sse2 = yes && test $have_sse2_intrinsics = no ; then
281 AC_MSG_ERROR([SSE2 intrinsics not detected])
284 AM_CONDITIONAL(USE_SSE2, test $have_sse2_intrinsics = yes)
286 dnl ===========================================================================
287 dnl Other special flags needed when building code using MMX or SSE instructions
290 # When building 32-bit binaries, apply a mapfile to ensure that the
291 # binaries aren't flagged as only able to run on MMX+SSE capable CPUs
292 # since they check at runtime before using those instructions.
293 # Not all linkers grok the mapfile format so we check for that first.
294 if test "$AMD64_ABI" = "no" ; then
296 AC_MSG_CHECKING(whether to use a hardware capability map file)
297 hwcap_save_LDFLAGS="$LDFLAGS"
298 HWCAP_LDFLAGS='-Wl,-M,$(srcdir)/solaris-hwcap.mapfile'
299 LDFLAGS="$LDFLAGS -Wl,-M,pixman/solaris-hwcap.mapfile"
300 AC_LINK_IFELSE([int main() { return 0; }],
301 use_hwcap_mapfile=yes,
303 LDFLAGS="$hwcap_save_LDFLAGS"
304 AC_MSG_RESULT($use_hwcap_mapfile)
306 if test "x$MMX_LDFLAGS" = "x" ; then
307 MMX_LDFLAGS="$HWCAP_LDFLAGS"
309 if test "x$SSE2_LDFLAGS" = "x" ; then
310 SSE2_LDFLAGS="$HWCAP_LDFLAGS"
316 AC_SUBST(MMX_LDFLAGS)
317 AC_SUBST(SSE2_CFLAGS)
318 AC_SUBST(SSE2_LDFLAGS)
320 dnl ===========================================================================
321 dnl Check for VMX/Altivec
322 if test -n "`$CC -v 2>&1 | grep version | grep Apple`"; then
323 VMX_CFLAGS="-faltivec"
325 VMX_CFLAGS="-maltivec -mabi=altivec"
328 have_vmx_intrinsics=no
329 AC_MSG_CHECKING(whether to use VMX/Altivec intrinsics)
330 xserver_save_CFLAGS=$CFLAGS
331 CFLAGS="$VMX_CFLAGS $CFLAGS"
333 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
334 error "Need GCC >= 3.4 for sane altivec support"
338 vector unsigned int v = vec_splat_u32 (1);
341 }], have_vmx_intrinsics=yes)
342 CFLAGS=$xserver_save_CFLAGS
345 [AC_HELP_STRING([--disable-vmx],
346 [disable VMX fast paths])],
347 [enable_vmx=$enableval], [enable_vmx=auto])
349 if test $enable_vmx = no ; then
350 have_vmx_intrinsics=disabled
353 if test $have_vmx_intrinsics = yes ; then
354 AC_DEFINE(USE_VMX, 1, [use VMX compiler intrinsics])
359 AC_MSG_RESULT($have_vmx_intrinsics)
360 if test $enable_vmx = yes && test $have_vmx_intrinsics = no ; then
361 AC_MSG_ERROR([VMX intrinsics not detected])
366 AM_CONDITIONAL(USE_VMX, test $have_vmx_intrinsics = yes)
368 dnl ==========================================================================
369 dnl Check if assembler is gas compatible and supports ARM SIMD instructions
371 AC_MSG_CHECKING(whether to use ARM SIMD assembler)
372 xserver_save_CFLAGS=$CFLAGS
373 CFLAGS="-x assembler-with-cpp $CFLAGS"
381 #error EABI is required (to be sure that calling conventions are compatible)
384 uqadd8 r0, r0, r0]], have_arm_simd=yes)
385 CFLAGS=$xserver_save_CFLAGS
387 AC_ARG_ENABLE(arm-simd,
388 [AC_HELP_STRING([--disable-arm-simd],
389 [disable ARM SIMD fast paths])],
390 [enable_arm_simd=$enableval], [enable_arm_simd=auto])
392 if test $enable_arm_simd = no ; then
393 have_arm_simd=disabled
396 if test $have_arm_simd = yes ; then
397 AC_DEFINE(USE_ARM_SIMD, 1, [use ARM SIMD assembly optimizations])
400 AM_CONDITIONAL(USE_ARM_SIMD, test $have_arm_simd = yes)
402 AC_MSG_RESULT($have_arm_simd)
403 if test $enable_arm_simd = yes && test $have_arm_simd = no ; then
404 AC_MSG_ERROR([ARM SIMD intrinsics not detected])
407 dnl ==========================================================================
408 dnl Check if assembler is gas compatible and supports NEON instructions
410 AC_MSG_CHECKING(whether to use ARM NEON assembler)
411 xserver_save_CFLAGS=$CFLAGS
412 CFLAGS="-x assembler-with-cpp $CFLAGS"
418 .eabi_attribute 10, 0
422 #error EABI is required (to be sure that calling conventions are compatible)
425 vmovn.u16 d0, q0]], have_arm_neon=yes)
426 CFLAGS=$xserver_save_CFLAGS
428 AC_ARG_ENABLE(arm-neon,
429 [AC_HELP_STRING([--disable-arm-neon],
430 [disable ARM NEON fast paths])],
431 [enable_arm_neon=$enableval], [enable_arm_neon=auto])
433 if test $enable_arm_neon = no ; then
434 have_arm_neon=disabled
437 if test $have_arm_neon = yes ; then
438 AC_DEFINE(USE_ARM_NEON, 1, [use ARM NEON assembly optimizations])
441 AM_CONDITIONAL(USE_ARM_NEON, test $have_arm_neon = yes)
443 AC_MSG_RESULT($have_arm_neon)
444 if test $enable_arm_neon = yes && test $have_arm_neon = no ; then
445 AC_MSG_ERROR([ARM NEON intrinsics not detected])
448 dnl =========================================================================================
449 dnl Check for GNU-style inline assembly support
451 have_gcc_inline_asm=no
452 AC_MSG_CHECKING(whether to use GNU-style inline assembler)
455 /* Most modern architectures have a NOP instruction, so this is a fairly generic test. */
456 asm volatile ( "\tnop\n" : : : "cc", "memory" );
458 }], have_gcc_inline_asm=yes)
460 AC_ARG_ENABLE(gcc-inline-asm,
461 [AC_HELP_STRING([--disable-gcc-inline-asm],
462 [disable GNU-style inline assembler])],
463 [enable_gcc_inline_asm=$enableval], [enable_gcc_inline_asm=auto])
465 if test $enable_gcc_inline_asm = no ; then
466 have_gcc_inline_asm=disabled
469 if test $have_gcc_inline_asm = yes ; then
470 AC_DEFINE(USE_GCC_INLINE_ASM, 1, [use GNU-style inline assembler])
473 AC_MSG_RESULT($have_gcc_inline_asm)
474 if test $enable_gcc_inline_asm = yes && test $have_gcc_inline_asm = no ; then
475 AC_MSG_ERROR([GNU-style inline assembler not detected])
478 AM_CONDITIONAL(USE_GCC_INLINE_ASM, test $have_gcc_inline_asm = yes)
480 dnl ==============================================
483 AC_ARG_ENABLE(timers,
484 [AC_HELP_STRING([--enable-timers],
485 [enable TIMER_BEGIN and TIMER_END macros [default=no]])],
486 [enable_timers=$enableval], [enable_timers=no])
488 if test $enable_timers = yes ; then
489 AC_DEFINE(PIXMAN_TIMERS, 1, [enable TIMER_BEGIN/TIMER_END macros])
491 AC_SUBST(PIXMAN_TIMERS)
493 dnl ===================================
497 [AC_HELP_STRING([--enable-gtk],
498 [enable tests using GTK+ [default=auto]])],
499 [enable_gtk=$enableval], [enable_gtk=auto])
502 if test $enable_gtk = auto ; then
503 PKG_CHECK_EXISTS([gtk+-2.0], [enable_gtk=yes], [enable_gtk=no])
505 if test $enable_gtk = yes ; then
506 PKG_CHECK_MODULES(GTK, [gtk+-2.0])
509 AM_CONDITIONAL(HAVE_GTK, [test "x$enable_gtk" = xyes])
516 dnl =====================================
519 AC_CHECK_FUNC(posix_memalign, have_posix_memalign=yes, have_posix_memalign=no)
520 if test x$have_posix_memalign = xyes; then
521 AC_DEFINE(HAVE_POSIX_MEMALIGN, 1, [Whether we have posix_memalign()])
524 dnl =====================================
525 dnl Thread local storage
527 support_for__thread=no
529 AC_MSG_CHECKING(for __thread)
532 #error MinGW has broken __thread support
534 static __thread int x ;
535 int main () { x = 123; return x; }
536 ], support_for__thread=yes)
538 if test $support_for__thread = yes; then
539 AC_DEFINE([TOOLCHAIN_SUPPORTS__THREAD],[],[Whether the tool chain supports __thread])
542 AC_MSG_RESULT($support_for__thread)
548 m4_define([pthread_test_program],[dnl
552 static pthread_once_t once_control = PTHREAD_ONCE_INIT;
553 static pthread_key_t key;
558 pthread_key_create (&key, NULL);
566 if (pthread_once (&once_control, make_key) != 0)
572 value = pthread_getspecific (key);
575 value = malloc (100);
576 pthread_setspecific (key, value);
583 AC_DEFUN([PIXMAN_CHECK_PTHREAD],[dnl
584 if test "z$support_for_pthread_setspecific" != "zyes"; then
585 save_CFLAGS="$CFLAGS"
586 save_LDFLAGS="$LDFLAGS"
592 AC_LINK_IFELSE([pthread_test_program],
593 [PTHREAD_CFLAGS="$CFLAGS"
595 PTHREAD_LDFLAGS="$LDFLAGS"
596 support_for_pthread_setspecific=yes])
597 CFLAGS="$save_CFLAGS"
598 LDFLAGS="$save_LDFLAGS"
603 if test $support_for__thread = no; then
604 support_for_pthread_setspecific=no
606 AC_MSG_CHECKING(for pthread_setspecific)
608 PIXMAN_CHECK_PTHREAD([CFLAGS="-D_REENTRANT"; LIBS="-lpthread"])
609 PIXMAN_CHECK_PTHREAD([CFLAGS="-pthread"; LDFLAGS="-pthread"])
611 if test $support_for_pthread_setspecific = yes; then
612 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
613 AC_DEFINE([HAVE_PTHREAD_SETSPECIFIC], [], [Whether pthread_setspecific() is supported])
616 AC_MSG_RESULT($support_for_pthread_setspecific);
619 AC_SUBST(TOOLCHAIN_SUPPORTS__THREAD)
620 AC_SUBST(HAVE_PTHREAD_SETSPECIFIC)
621 AC_SUBST(PTHREAD_LDFLAGS)
622 AC_SUBST(PTHREAD_LIBS)
624 AC_OUTPUT([pixman-1.pc
625 pixman-1-uninstalled.pc
628 pixman/pixman-version.h