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], 2)
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 dnl PIXMAN_LINK_WITH_ENV(env-setup, program, true-action, false-action)
82 dnl Compiles and links the given program in the environment setup by env-setup
83 dnl and executes true-action on success and false-action on failure.
84 AC_DEFUN([PIXMAN_LINK_WITH_ENV],[dnl
86 save_LDFLAGS="$LDFLAGS"
94 [pixman_cc_stderr=`test -f conftest.err && cat conftest.err`
96 [pixman_cc_stderr=`test -f conftest.err && cat conftest.err`
99 if test "x$pixman_cc_stderr" != "x"; then
103 if test "x$pixman_cc_flag" = "xyes"; then
104 ifelse([$3], , :, [$3])
106 ifelse([$4], , :, [$4])
108 CFLAGS="$save_CFLAGS"
109 LDFLAGS="$save_LDFLAGS"
113 dnl Find a -Werror for catching warnings.
115 for w in -Werror -errwarn; do
116 if test "z$WERROR" = "z"; then
117 AC_MSG_CHECKING([whether the compiler supports $w])
118 PIXMAN_LINK_WITH_ENV(
120 [int main(int c, char **v) { (void)c; (void)v; return 0; }],
121 [WERROR=$w; yesno=yes], [yesno=no])
122 AC_MSG_RESULT($_yesno)
126 dnl PIXMAN_CHECK_CFLAG(flag, [program])
127 dnl Adds flag to CFLAGS if the given program links without warnings or errors.
128 AC_DEFUN([PIXMAN_CHECK_CFLAG], [dnl
129 AC_MSG_CHECKING([whether the compiler supports $1])
130 PIXMAN_LINK_WITH_ENV(
131 [CFLAGS="$WERROR $1"],
133 int main(int c, char **v) { (void)c; (void)v; return 0; }
137 if test "x$_yesno" = xyes; then
140 AC_MSG_RESULT($_yesno)
143 AC_CHECK_SIZEOF(long)
145 # Checks for Sun Studio compilers
146 AC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"])
147 AC_CHECK_DECL([__amd64], [AMD64_ABI="yes"], [AMD64_ABI="no"])
149 # Default CFLAGS to -O -g rather than just the -g from AC_PROG_CC
150 # if we're using Sun Studio and neither the user nor a config.site
152 if test $SUNCC = yes && \
153 test "$test_CFLAGS" == "" && \
154 test "$CFLAGS" = "-g"
160 # We ignore pixman_major in the version here because the major version should
161 # always be encoded in the actual library name. Ie., the soname is:
163 # pixman-$(pixman_major).0.minor.micro
165 m4_define([lt_current], [pixman_minor])
166 m4_define([lt_revision], [pixman_micro])
167 m4_define([lt_age], [pixman_minor])
169 LT_VERSION_INFO="lt_current:lt_revision:lt_age"
171 PIXMAN_VERSION_MAJOR=pixman_major()
172 AC_SUBST(PIXMAN_VERSION_MAJOR)
173 PIXMAN_VERSION_MINOR=pixman_minor()
174 AC_SUBST(PIXMAN_VERSION_MINOR)
175 PIXMAN_VERSION_MICRO=pixman_micro()
176 AC_SUBST(PIXMAN_VERSION_MICRO)
178 AC_SUBST(LT_VERSION_INFO)
180 # Check for dependencies
181 #PKG_CHECK_MODULES(DEP, x11)
183 PIXMAN_CHECK_CFLAG([-Wall])
184 PIXMAN_CHECK_CFLAG([-fno-strict-aliasing])
186 AC_PATH_PROG(PERL, perl, no)
187 if test "x$PERL" = xno; then
188 AC_MSG_ERROR([Perl is required to build pixman.])
192 dnl =========================================================================
193 dnl OpenMP for the test suite?
196 # Check for OpenMP support (only supported by autoconf >=2.62)
198 m4_ifdef([AC_OPENMP], [AC_OPENMP])
200 m4_define([openmp_test_program],[dnl
203 extern unsigned int lcg_seed;
204 #pragma omp threadprivate(lcg_seed)
205 unsigned int lcg_seed;
207 unsigned function(unsigned a, unsigned b)
210 return ((a + b) ^ a ) + lcg_seed;
213 int main(int argc, char **argv)
216 int n1 = 0, n2 = argc;
217 unsigned checksum = 0;
218 int verbose = argv != NULL;
219 unsigned (*test_function)(unsigned, unsigned);
220 test_function = function;
221 #pragma omp parallel for reduction(+:checksum) default(none) \
222 shared(n1, n2, test_function, verbose)
223 for (i = n1; i < n2; i++)
225 unsigned crc = test_function (i, 0);
227 printf ("%d: %08X\n", i, crc);
230 printf("%u\n", checksum);
235 PIXMAN_LINK_WITH_ENV(
236 [CFLAGS="$OPENMP_CFLAGS" LDFLAGS="$OPENMP_CFLAGS"],
237 [openmp_test_program],
240 if test "x$have_openmp" = "xyes"; then
241 AC_DEFINE(USE_OPENMP, 1, [use OpenMP in the test suite])
245 AC_SUBST(OPENMP_CFLAGS)
247 dnl =========================================================================
248 dnl -fvisibility stuff
250 PIXMAN_CHECK_CFLAG([-fvisibility=hidden], [dnl
251 #if defined(__GNUC__) && (__GNUC__ >= 4)
253 error Need GCC 4.0 for visibility
257 PIXMAN_CHECK_CFLAG([-xldscope=hidden], [dnl
258 #if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
260 error Need Sun Studio 8 for visibility
264 dnl ===========================================================================
267 if test "x$MMX_CFLAGS" = "x" ; then
268 if test "x$SUNCC" = "xyes"; then
269 # Sun Studio doesn't have an -xarch=mmx flag, so we have to use sse
270 # but if we're building 64-bit, mmx & sse support is on by default and
271 # -xarch=sse throws an error instead
272 if test "$AMD64_ABI" = "no" ; then
273 MMX_CFLAGS="-xarch=sse"
276 MMX_CFLAGS="-mmmx -Winline"
280 have_mmx_intrinsics=no
281 AC_MSG_CHECKING(whether to use MMX intrinsics)
282 xserver_save_CFLAGS=$CFLAGS
283 CFLAGS="$MMX_CFLAGS $CFLAGS"
285 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
286 error "Need GCC >= 3.4 for MMX intrinsics"
288 #include <mmintrin.h>
290 __m64 v = _mm_cvtsi32_si64 (1);
291 return _mm_cvtsi64_si32 (v);
292 }], have_mmx_intrinsics=yes)
293 CFLAGS=$xserver_save_CFLAGS
296 [AC_HELP_STRING([--disable-mmx],
297 [disable MMX fast paths])],
298 [enable_mmx=$enableval], [enable_mmx=auto])
300 if test $enable_mmx = no ; then
301 have_mmx_intrinsics=disabled
304 if test $have_mmx_intrinsics = yes ; then
305 AC_DEFINE(USE_MMX, 1, [use MMX compiler intrinsics])
310 AC_MSG_RESULT($have_mmx_intrinsics)
311 if test $enable_mmx = yes && test $have_mmx_intrinsics = no ; then
312 AC_MSG_ERROR([MMX intrinsics not detected])
315 AM_CONDITIONAL(USE_MMX, test $have_mmx_intrinsics = yes)
317 dnl ===========================================================================
320 if test "x$SSE2_CFLAGS" = "x" ; then
321 if test "x$SUNCC" = "xyes"; then
322 # SSE2 is enabled by default in the Sun Studio 64-bit environment
323 if test "$AMD64_ABI" = "no" ; then
324 SSE2_CFLAGS="-xarch=sse2"
327 SSE2_CFLAGS="-mmmx -msse2 -Winline"
331 have_sse2_intrinsics=no
332 AC_MSG_CHECKING(whether to use SSE2 intrinsics)
333 xserver_save_CFLAGS=$CFLAGS
334 CFLAGS="$SSE2_CFLAGS $CFLAGS"
337 #if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 2))
338 # if !defined(__amd64__) && !defined(__x86_64__)
339 # error "Need GCC >= 4.2 for SSE2 intrinsics on x86"
342 #include <mmintrin.h>
343 #include <xmmintrin.h>
344 #include <emmintrin.h>
346 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
347 c = _mm_xor_si128 (a, b);
349 }], have_sse2_intrinsics=yes)
350 CFLAGS=$xserver_save_CFLAGS
353 [AC_HELP_STRING([--disable-sse2],
354 [disable SSE2 fast paths])],
355 [enable_sse2=$enableval], [enable_sse2=auto])
357 if test $enable_sse2 = no ; then
358 have_sse2_intrinsics=disabled
361 if test $have_sse2_intrinsics = yes ; then
362 AC_DEFINE(USE_SSE2, 1, [use SSE2 compiler intrinsics])
365 AC_MSG_RESULT($have_sse2_intrinsics)
366 if test $enable_sse2 = yes && test $have_sse2_intrinsics = no ; then
367 AC_MSG_ERROR([SSE2 intrinsics not detected])
370 AM_CONDITIONAL(USE_SSE2, test $have_sse2_intrinsics = yes)
372 dnl ===========================================================================
373 dnl Other special flags needed when building code using MMX or SSE instructions
376 # When building 32-bit binaries, apply a mapfile to ensure that the
377 # binaries aren't flagged as only able to run on MMX+SSE capable CPUs
378 # since they check at runtime before using those instructions.
379 # Not all linkers grok the mapfile format so we check for that first.
380 if test "$AMD64_ABI" = "no" ; then
382 AC_MSG_CHECKING(whether to use a hardware capability map file)
383 hwcap_save_LDFLAGS="$LDFLAGS"
384 HWCAP_LDFLAGS='-Wl,-M,$(srcdir)/solaris-hwcap.mapfile'
385 LDFLAGS="$LDFLAGS -Wl,-M,pixman/solaris-hwcap.mapfile"
386 AC_LINK_IFELSE([int main() { return 0; }],
387 use_hwcap_mapfile=yes,
389 LDFLAGS="$hwcap_save_LDFLAGS"
390 AC_MSG_RESULT($use_hwcap_mapfile)
392 if test "x$MMX_LDFLAGS" = "x" ; then
393 MMX_LDFLAGS="$HWCAP_LDFLAGS"
395 if test "x$SSE2_LDFLAGS" = "x" ; then
396 SSE2_LDFLAGS="$HWCAP_LDFLAGS"
402 AC_SUBST(MMX_LDFLAGS)
403 AC_SUBST(SSE2_CFLAGS)
404 AC_SUBST(SSE2_LDFLAGS)
406 dnl ===========================================================================
407 dnl Check for VMX/Altivec
408 if test -n "`$CC -v 2>&1 | grep version | grep Apple`"; then
409 VMX_CFLAGS="-faltivec"
411 VMX_CFLAGS="-maltivec -mabi=altivec"
414 have_vmx_intrinsics=no
415 AC_MSG_CHECKING(whether to use VMX/Altivec intrinsics)
416 xserver_save_CFLAGS=$CFLAGS
417 CFLAGS="$VMX_CFLAGS $CFLAGS"
419 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
420 error "Need GCC >= 3.4 for sane altivec support"
424 vector unsigned int v = vec_splat_u32 (1);
427 }], have_vmx_intrinsics=yes)
428 CFLAGS=$xserver_save_CFLAGS
431 [AC_HELP_STRING([--disable-vmx],
432 [disable VMX fast paths])],
433 [enable_vmx=$enableval], [enable_vmx=auto])
435 if test $enable_vmx = no ; then
436 have_vmx_intrinsics=disabled
439 if test $have_vmx_intrinsics = yes ; then
440 AC_DEFINE(USE_VMX, 1, [use VMX compiler intrinsics])
445 AC_MSG_RESULT($have_vmx_intrinsics)
446 if test $enable_vmx = yes && test $have_vmx_intrinsics = no ; then
447 AC_MSG_ERROR([VMX intrinsics not detected])
452 AM_CONDITIONAL(USE_VMX, test $have_vmx_intrinsics = yes)
454 dnl ==========================================================================
455 dnl Check if assembler is gas compatible and supports ARM SIMD instructions
457 AC_MSG_CHECKING(whether to use ARM SIMD assembler)
458 xserver_save_CFLAGS=$CFLAGS
459 CFLAGS="-x assembler-with-cpp $CFLAGS"
467 #error EABI is required (to be sure that calling conventions are compatible)
470 uqadd8 r0, r0, r0]], have_arm_simd=yes)
471 CFLAGS=$xserver_save_CFLAGS
473 AC_ARG_ENABLE(arm-simd,
474 [AC_HELP_STRING([--disable-arm-simd],
475 [disable ARM SIMD fast paths])],
476 [enable_arm_simd=$enableval], [enable_arm_simd=auto])
478 if test $enable_arm_simd = no ; then
479 have_arm_simd=disabled
482 if test $have_arm_simd = yes ; then
483 AC_DEFINE(USE_ARM_SIMD, 1, [use ARM SIMD assembly optimizations])
486 AM_CONDITIONAL(USE_ARM_SIMD, test $have_arm_simd = yes)
488 AC_MSG_RESULT($have_arm_simd)
489 if test $enable_arm_simd = yes && test $have_arm_simd = no ; then
490 AC_MSG_ERROR([ARM SIMD intrinsics not detected])
493 dnl ==========================================================================
494 dnl Check if assembler is gas compatible and supports NEON instructions
496 AC_MSG_CHECKING(whether to use ARM NEON assembler)
497 xserver_save_CFLAGS=$CFLAGS
498 CFLAGS="-x assembler-with-cpp $CFLAGS"
504 .eabi_attribute 10, 0
508 #error EABI is required (to be sure that calling conventions are compatible)
511 vmovn.u16 d0, q0]], have_arm_neon=yes)
512 CFLAGS=$xserver_save_CFLAGS
514 AC_ARG_ENABLE(arm-neon,
515 [AC_HELP_STRING([--disable-arm-neon],
516 [disable ARM NEON fast paths])],
517 [enable_arm_neon=$enableval], [enable_arm_neon=auto])
519 if test $enable_arm_neon = no ; then
520 have_arm_neon=disabled
523 if test $have_arm_neon = yes ; then
524 AC_DEFINE(USE_ARM_NEON, 1, [use ARM NEON assembly optimizations])
527 AM_CONDITIONAL(USE_ARM_NEON, test $have_arm_neon = yes)
529 AC_MSG_RESULT($have_arm_neon)
530 if test $enable_arm_neon = yes && test $have_arm_neon = no ; then
531 AC_MSG_ERROR([ARM NEON intrinsics not detected])
534 dnl =========================================================================================
535 dnl Check for GNU-style inline assembly support
537 have_gcc_inline_asm=no
538 AC_MSG_CHECKING(whether to use GNU-style inline assembler)
541 /* Most modern architectures have a NOP instruction, so this is a fairly generic test. */
542 asm volatile ( "\tnop\n" : : : "cc", "memory" );
544 }], have_gcc_inline_asm=yes)
546 AC_ARG_ENABLE(gcc-inline-asm,
547 [AC_HELP_STRING([--disable-gcc-inline-asm],
548 [disable GNU-style inline assembler])],
549 [enable_gcc_inline_asm=$enableval], [enable_gcc_inline_asm=auto])
551 if test $enable_gcc_inline_asm = no ; then
552 have_gcc_inline_asm=disabled
555 if test $have_gcc_inline_asm = yes ; then
556 AC_DEFINE(USE_GCC_INLINE_ASM, 1, [use GNU-style inline assembler])
559 AC_MSG_RESULT($have_gcc_inline_asm)
560 if test $enable_gcc_inline_asm = yes && test $have_gcc_inline_asm = no ; then
561 AC_MSG_ERROR([GNU-style inline assembler not detected])
564 AM_CONDITIONAL(USE_GCC_INLINE_ASM, test $have_gcc_inline_asm = yes)
566 dnl ==============================================
569 AC_ARG_ENABLE(timers,
570 [AC_HELP_STRING([--enable-timers],
571 [enable TIMER_BEGIN and TIMER_END macros [default=no]])],
572 [enable_timers=$enableval], [enable_timers=no])
574 if test $enable_timers = yes ; then
575 AC_DEFINE(PIXMAN_TIMERS, 1, [enable TIMER_BEGIN/TIMER_END macros])
577 AC_SUBST(PIXMAN_TIMERS)
579 dnl ===================================
583 [AC_HELP_STRING([--enable-gtk],
584 [enable tests using GTK+ [default=auto]])],
585 [enable_gtk=$enableval], [enable_gtk=auto])
588 if test $enable_gtk = auto ; then
589 PKG_CHECK_EXISTS([gtk+-2.0], [enable_gtk=yes], [enable_gtk=no])
591 if test $enable_gtk = yes ; then
592 PKG_CHECK_MODULES(GTK, [gtk+-2.0])
595 AM_CONDITIONAL(HAVE_GTK, [test "x$enable_gtk" = xyes])
602 dnl =====================================
603 dnl posix_memalign, sigaction, alarm
605 AC_CHECK_FUNC(posix_memalign, have_posix_memalign=yes, have_posix_memalign=no)
606 if test x$have_posix_memalign = xyes; then
607 AC_DEFINE(HAVE_POSIX_MEMALIGN, 1, [Whether we have posix_memalign()])
610 AC_CHECK_FUNC(sigaction, have_sigaction=yes, have_sigaction=no)
611 if test x$have_sigaction = xyes; then
612 AC_DEFINE(HAVE_SIGACTION, 1, [Whether we have sigaction()])
615 AC_CHECK_FUNC(alarm, have_alarm=yes, have_alarm=no)
616 if test x$have_alarm = xyes; then
617 AC_DEFINE(HAVE_ALARM, 1, [Whether we have alarm()])
620 dnl =====================================
621 dnl Thread local storage
623 support_for__thread=no
625 AC_MSG_CHECKING(for __thread)
628 #error MinGW has broken __thread support
631 #error OpenBSD has broken __thread support
633 static __thread int x ;
634 int main () { x = 123; return x; }
635 ], support_for__thread=yes)
637 if test $support_for__thread = yes; then
638 AC_DEFINE([TOOLCHAIN_SUPPORTS__THREAD],[],[Whether the tool chain supports __thread])
641 AC_MSG_RESULT($support_for__thread)
647 m4_define([pthread_test_program],[dnl
651 static pthread_once_t once_control = PTHREAD_ONCE_INIT;
652 static pthread_key_t key;
657 pthread_key_create (&key, NULL);
665 if (pthread_once (&once_control, make_key) != 0)
671 value = pthread_getspecific (key);
674 value = malloc (100);
675 pthread_setspecific (key, value);
682 AC_DEFUN([PIXMAN_CHECK_PTHREAD],[dnl
683 if test "z$support_for_pthread_setspecific" != "zyes"; then
684 PIXMAN_LINK_WITH_ENV(
685 [$1], [pthread_test_program],
686 [PTHREAD_CFLAGS="$CFLAGS"
688 PTHREAD_LDFLAGS="$LDFLAGS"
689 support_for_pthread_setspecific=yes])
693 if test $support_for__thread = no; then
694 support_for_pthread_setspecific=no
696 AC_MSG_CHECKING(for pthread_setspecific)
698 PIXMAN_CHECK_PTHREAD([CFLAGS="-D_REENTRANT"; LIBS="-lpthread"])
699 PIXMAN_CHECK_PTHREAD([CFLAGS="-pthread"; LDFLAGS="-pthread"])
701 if test $support_for_pthread_setspecific = yes; then
702 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
703 AC_DEFINE([HAVE_PTHREAD_SETSPECIFIC], [], [Whether pthread_setspecific() is supported])
706 AC_MSG_RESULT($support_for_pthread_setspecific);
709 AC_SUBST(TOOLCHAIN_SUPPORTS__THREAD)
710 AC_SUBST(HAVE_PTHREAD_SETSPECIFIC)
711 AC_SUBST(PTHREAD_LDFLAGS)
712 AC_SUBST(PTHREAD_LIBS)
714 AC_OUTPUT([pixman-1.pc
715 pixman-1-uninstalled.pc
718 pixman/pixman-version.h