Merge branch 'master' into vmx
[profile/ivi/pixman.git] / configure.ac
1 dnl  Copyright 2005 Red Hat, Inc.
2 dnl 
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.
12 dnl 
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.
20 dnl
21 dnl Process this file with autoconf to create configure.
22
23 AC_PREREQ([2.57])
24
25 #   Pixman versioning scheme
26 #
27 #   - The git version must at all times have an odd MICRO version
28 #     number.
29 #
30 #   - If you add API, increment the MICRO version to the next largest
31 #     odd number.
32 #
33 #   - If you release a version that contains new API, then increment
34 #     MINOR and set MICRO to 0. 
35 #
36 #   - If you release a new version that does not contain new API, then
37 #     increment MICRO to the next even number.
38 #
39 #   - After doing a release, increment MICRO again to make the version 
40 #     number in git odd.
41 #
42 #   - If you break the ABI, then
43 #
44 #        - increment MAJOR
45 #
46 #        - In the first development release where you break ABI, find
47 #          all instances of "pixman-n" and change them to pixman-(n+1)
48 #
49 #          This needs to be done at least in 
50 #                    configure.ac
51 #                    all Makefile.am's
52 #                    pixman-n.pc.in
53 #
54 #      This ensures that binary incompatible versions can be installed
55 #      in parallel.  See http://www106.pair.com/rhp/parallel.html for
56 #      more information
57
58 m4_define([pixman_major], 0)
59 m4_define([pixman_minor], 11)
60 m4_define([pixman_micro], 1)
61
62 m4_define([pixman_version],[pixman_major.pixman_minor.pixman_micro])
63
64 AC_INIT(pixman, pixman_version, "sandmann@daimi.au.dk", pixman)
65 AM_INIT_AUTOMAKE([dist-bzip2])
66
67 AM_CONFIG_HEADER(config.h)
68
69 AC_PROG_CC
70 AC_PROG_LIBTOOL
71 AC_CHECK_FUNCS([getisax])
72 AC_C_BIGENDIAN
73
74
75 # We ignore pixman_major in the version here because the major version should
76 # always be encoded in the actual library name. Ie., the soname is:
77 #
78 #      pixman-$(pixman_major).0.minor.micro
79 #
80 m4_define([lt_current], [pixman_minor])
81 m4_define([lt_revision], [pixman_micro])
82 m4_define([lt_age], [pixman_minor])
83
84 LT_VERSION_INFO="lt_current:lt_revision:lt_age"
85
86 PIXMAN_VERSION_MAJOR=pixman_major()
87 AC_SUBST(PIXMAN_VERSION_MAJOR)
88 PIXMAN_VERSION_MINOR=pixman_minor()
89 AC_SUBST(PIXMAN_VERSION_MINOR)
90 PIXMAN_VERSION_MICRO=pixman_micro()
91 AC_SUBST(PIXMAN_VERSION_MICRO)
92
93 AC_SUBST(LT_VERSION_INFO)
94
95 # Check for dependencies
96 #PKG_CHECK_MODULES(DEP, x11)
97
98 changequote(,)dnl
99 if test "x$GCC" = "xyes"; then
100   case " $CFLAGS " in
101   *[\ \ ]-Wall[\ \      ]*) ;;
102   *) CFLAGS="$CFLAGS -Wall" ;;
103   esac fi changequote([,])dnl
104
105 AC_PATH_PROG(PERL, perl, no)
106 if test "x$PERL" = xno; then
107     AC_MSG_ERROR([Perl is required to build pixman.])
108 fi
109 AC_SUBST(PERL)
110
111 dnl =========================================================================
112 dnl -fvisibility stuff
113
114 have_gcc4=no
115 AC_MSG_CHECKING(for -fvisibility)
116 AC_COMPILE_IFELSE([
117 #if defined(__GNUC__) && (__GNUC__ >= 4)
118 #else
119 #error Need GCC 4.0 for visibility
120 #endif
121 int main () { return 0; } 
122 ], have_gcc4=yes)
123
124 if test "x$have_gcc4" = "xyes"; then
125    CFLAGS="$CFLAGS -fvisibility=hidden"
126 fi
127 AC_MSG_RESULT($have_gcc4)
128
129 dnl ===========================================================================
130 dnl Check for MMX
131
132 MMX_CFLAGS="-mmmx -Winline"
133
134 have_mmx_intrinsics=no
135 AC_MSG_CHECKING(whether to use MMX intrinsics)
136 xserver_save_CFLAGS=$CFLAGS
137 CFLAGS="$CFLAGS $MMX_CFLAGS"
138 AC_COMPILE_IFELSE([
139 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
140 #error "Need GCC >= 3.4 for MMX intrinsics"
141 #endif
142 #include <mmintrin.h>
143 int main () {
144     __m64 v = _mm_cvtsi32_si64 (1);
145     return _mm_cvtsi64_si32 (v);
146 }], have_mmx_intrinsics=yes)
147 CFLAGS=$xserver_save_CFLAGS
148 AC_MSG_RESULT($have_mmx_intrinsics)
149
150 if test $have_mmx_intrinsics = yes ; then
151    AC_DEFINE(USE_MMX, 1, [use MMX compiler intrinsics])
152 else
153    MMX_CFLAGS=
154 fi
155
156 AM_CONDITIONAL(USE_MMX, test $have_mmx_intrinsics = yes)
157
158 dnl =======================================================
159
160 dnl GCC 4.2 when compiling with -msse will generate SSE instructions
161 dnl on its own.  This means anything compiled with -mss can only be
162 dnl run after a runtime check for SSE.  Unfortunately, since we still
163 dnl need to support MMX-but-not-SSE (such as the OLPC), this means we
164 dnl can only use SSE when compiling for x86-64 (where SSE is always
165 dnl supported).
166
167 have_sse_intrinsics=no
168 AC_MSG_CHECKING(whether to use SSE intrinsics)
169 xserver_save_CFLAGS=$CFLAGS
170 CFLAGS="$CFLAGS -msse $MMX_CFLAGS"
171
172 AC_COMPILE_IFELSE([
173 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
174 #error "Need GCC >= 3.4 for SSE intrinsics"
175 #endif
176 #if !defined(__amd64__) && !defined(__x86_64__)
177 #error "Need x86-64 for SSE"
178 #endif
179 #include <mmintrin.h>
180 #include <xmmintrin.h>
181 int main () {
182     __m64 v = _mm_cvtsi32_si64 (1);
183     v = _mm_shuffle_pi16 (v, _MM_SHUFFLE(3, 3, 3, 3));
184     return _mm_cvtsi64_si32 (v);
185 }], have_sse_intrinsics=yes)
186 CFLAGS=$xserver_save_CFLAGS
187 AC_MSG_RESULT($have_sse_intrinsics)
188
189 if test $have_sse_intrinsics = yes ; then
190    AC_DEFINE(USE_SSE, 1, [use SSE compiler intrinsics])
191    MMX_CFLAGS="-msse $MMX_CFLAGS"
192 fi
193
194 AM_CONDITIONAL(USE_SSE, test $have_sse_intrinsics = yes)
195
196
197 dnl ===========================================================================
198 dnl Check for SSE2
199
200 SSE_CFLAGS="-mmmx -msse2 -Winline"
201
202 have_sse2_intrinsics=no
203 AC_MSG_CHECKING(whether to use SSE2 intrinsics)
204 xserver_save_CFLAGS=$CFLAGS
205 CFLAGS="$CFLAGS -msse2 $SSE_CFLAGS"
206
207 AC_COMPILE_IFELSE([
208 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
209 #error "Need GCC >= 3.4 for SSE2 intrinsics"
210 #endif
211 #include <mmintrin.h>
212 #include <xmmintrin.h>
213 #include <emmintrin.h>
214 int main () {
215     __m128i a, b, c;
216         c = _mm_xor_si128 (a, b);
217     return 0;
218 }], have_sse2_intrinsics=yes)
219 CFLAGS=$xserver_save_CFLAGS
220 AC_MSG_RESULT($have_sse2_intrinsics)
221
222 if test $have_sse2_intrinsics = yes ; then
223    AC_DEFINE(USE_SSE2, 1, [use SSE compiler intrinsics])
224 fi
225
226 AM_CONDITIONAL(USE_SSE2, test $have_sse2_intrinsics = yes)
227
228 dnl ========================================================
229 AC_SUBST(MMX_CFLAGS)
230 AC_SUBST(SSE_CFLAGS)
231
232 dnl Check for VMX/Altivec
233 if test -n "`$CC -v 2>&1 | grep version | grep Apple`"; then
234     VMX_CFLAGS="-faltivec"
235 else
236     VMX_CFLAGS="-maltivec -mabi=altivec"
237 fi
238
239 have_vmx_intrinsics=no
240 AC_MSG_CHECKING(whether to use VMX/Altivec intrinsics)
241 xserver_save_CFLAGS=$CFLAGS
242 CFLAGS="$CFLAGS $VMX_CFLAGS"
243 AC_COMPILE_IFELSE([
244 #if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
245 #error "Need GCC >= 3.4 for sane altivec support"
246 #endif
247 #include <altivec.h>
248 int main () {
249     vector unsigned int v = vec_splat_u32 (1);
250     v = vec_sub (v, v);
251     return 0;
252 }], have_vmx_intrinsics=yes)
253 CFLAGS=$xserver_save_CFLAGS
254 AC_MSG_RESULT($have_vmx_intrinsics)
255
256 if test $have_vmx_intrinsics = yes ; then
257    AC_DEFINE(USE_VMX, 1, [use VMX compiler intrinsics])
258 else
259    VMX_CFLAGS=
260 fi
261 AC_SUBST(VMX_CFLAGS)
262
263 AM_CONDITIONAL(USE_VMX, test $have_vmx_intrinsics = yes)
264
265 dnl ===========================================================================
266
267 PKG_CHECK_MODULES(GTK, [gtk+-2.0], [HAVE_GTK=yes], [HAVE_GTK=no])
268 AM_CONDITIONAL(HAVE_GTK, [test "x$HAVE_GTK" = xyes])
269
270 AC_SUBST(GTK_CFLAGS)
271 AC_SUBST(GTK_LIBS)
272 AC_SUBST(DEP_CFLAGS)
273 AC_SUBST(DEP_LIBS)
274                   
275 AC_OUTPUT([pixman-1.pc
276            Makefile
277            pixman/Makefile
278            pixman/pixman-version.h
279            test/Makefile])