Clean up cairo handling somewhat
[platform/upstream/gobject-introspection.git] / configure.ac
1 #                                               -*- Autoconf -*-
2 # Process this file with autoconf to produce a configure script.
3
4 dnl the gi version number
5 m4_define(gi_major_version, 1)
6 m4_define(gi_minor_version, 35)
7 m4_define(gi_micro_version, 3)
8 m4_define(gi_version, gi_major_version.gi_minor_version.gi_micro_version)
9
10 AC_PREREQ([2.63])
11 AC_INIT([gobject-introspection],
12         [gi_version],
13         [http://bugzilla.gnome.org/enter_bug.cgi?product=glib&component=introspection],
14         [gobject-introspection])
15
16 AC_CONFIG_HEADER([config.h])
17 AC_CONFIG_MACRO_DIR([m4])
18 AC_CONFIG_AUX_DIR([build-aux])
19
20 AM_INIT_AUTOMAKE([1.11 tar-ustar dist-xz no-dist-gzip foreign -Wno-portability])
21 AM_MAINTAINER_MODE([enable])
22
23 AM_SILENT_RULES([yes])
24
25 # Check for Win32
26 AC_CANONICAL_HOST
27 case "$host" in
28 *-*-mingw*)
29         os_win32=yes
30         ;;
31 *)
32         os_win32=no
33         ;;
34 esac
35 AM_CONDITIONAL(OS_WIN32, [test "x$os_win32" = "xyes"])
36
37 # Checks for programs.
38 AC_PROG_CC
39 AM_PROG_CC_C_O
40 AC_PROG_MKDIR_P
41
42 # Initialize libtool
43 LT_PREREQ([2.2])
44 LT_INIT
45
46 PKG_PROG_PKG_CONFIG
47
48 AC_PROG_LEX
49 if test "$LEX" = :; then
50         AC_MSG_ERROR([flex not found but required])
51 fi
52
53 AC_CHECK_PROGS(YACC, 'bison -y', :)
54 if test "$YACC" = :; then
55         AC_MSG_ERROR([bison not found but required])
56 fi
57
58
59 changequote(,)dnl
60 ensureflag() {
61   flag="$1"; shift
62   result="$@"
63
64   case " ${result} " in
65   *[\ \ ]${flag}[\ \    ]*) ;;
66   *) result="${flag} ${result}" ;;
67   esac
68
69   echo ${result}
70 }
71 changequote([,])dnl
72
73 if test "$GCC" = "yes"; then
74     for flag in -Wall -Wchar-subscripts -Wmissing-declarations \
75         -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wcast-align \
76         -Wsign-compare -fno-strict-aliasing;
77     do
78         CFLAGS="$(ensureflag $flag $CFLAGS)"
79     done
80 fi
81
82 # Checks for libraries.
83 AC_CHECK_LIB([dl], [dlopen])
84
85 AC_MSG_CHECKING(for the suffix of shared libraries)
86 # libtool variables are immediately available since 2.0, prior to that we need
87 # to call libtool --config explicitly
88 if test "x$shrext_cmds" = x; then
89     shrext_cmds=`SED=$SED ./libtool --config | grep '^shrext_cmds='`
90     eval $shrext_cmds
91 fi
92 eval std_shrext=$shrext_cmds
93 # chop the initial dot
94 SHLIB_SUFFIX=${std_shrext#.}
95 AC_MSG_RESULT(.$SHLIB_SUFFIX)
96 # any reason it may fail?
97 if test "x$SHLIB_SUFFIX" = x; then
98         AC_MSG_ERROR(Cannot determine shared library suffix from libtool)
99 fi
100 AC_DEFINE_UNQUOTED([SHLIB_SUFFIX], "$SHLIB_SUFFIX", [Define to the platform's shared library suffix])
101
102 # Copied from dbus configure.in
103 #### find the actual value for $prefix that we'll end up with
104 ##   (I know this is broken and should be done in the Makefile, but
105 ##    that's a major pain and almost nobody actually seems to care)
106 AS_AC_EXPAND(EXPANDED_LOCALSTATEDIR, "$localstatedir")
107 AS_AC_EXPAND(EXPANDED_SYSCONFDIR, "$sysconfdir")
108 AS_AC_EXPAND(EXPANDED_BINDIR, "$bindir")
109 AS_AC_EXPAND(EXPANDED_LIBDIR, "$libdir")
110 AS_AC_EXPAND(EXPANDED_LIBEXECDIR, "$libexecdir")
111 AS_AC_EXPAND(EXPANDED_DATADIR, "$datadir")
112
113 #### Directory to install the libexec binaries
114 GOBJECT_INTROSPECTION_LIBDIR="$EXPANDED_LIBDIR"
115 AC_SUBST(GOBJECT_INTROSPECTION_LIBDIR)
116 AC_DEFINE_UNQUOTED(GOBJECT_INTROSPECTION_LIBDIR,"$GOBJECT_INTROSPECTION_LIBDIR", [Directory prefix for typelib installation])
117
118 #### Directory to install the gir files
119 GIR_SUFFIX="gir-1.0"
120 AC_SUBST(GIR_SUFFIX)
121 AC_DEFINE_UNQUOTED(GIR_SUFFIX, "$GIR_SUFFIX", [Name of the gir directory])
122
123 GIR_DIR="$EXPANDED_DATADIR/$GIR_SUFFIX"
124 AC_SUBST(GIR_DIR)
125 AC_DEFINE_UNQUOTED(GIR_DIR, "$GIR_DIR", [Director prefix for gir installation])
126
127 PKG_CHECK_MODULES(GLIB, [glib-2.0 >= 2.35.0])
128 PKG_CHECK_MODULES(GOBJECT, [gobject-2.0])
129 PKG_CHECK_MODULES(GMODULE, [gmodule-2.0])
130 PKG_CHECK_MODULES(GIO, [gio-2.0])
131 PKG_CHECK_MODULES(GIO_UNIX, [gio-unix-2.0], have_gio_unix=true, have_gio_unix=false)
132 AM_CONDITIONAL(HAVE_GIO_UNIX, test x$have_gio_unix = xtrue)
133
134 # Prefer cairo-gobject if we have it
135 AC_ARG_WITH(cairo,
136             AS_HELP_STRING([--with-cairo], [Use cairo @<:@default=maybe@:>@]),
137             [], [with_cairo=maybe])
138
139 AS_IF([test x${with_cairo} != xno], [
140   PKG_CHECK_MODULES(CAIRO, [cairo cairo-gobject], have_cairo=yes, have_cairo=no)
141   AS_IF([ test x$have_cairo = xyes && test x$with_cairo = xmaybe ], [
142     have_cairo=no
143   ], [ test x$have_cairo = xno && test x$with_cairo = xyes ], [
144     AC_MSG_ERROR([cairo enabled but not found])
145   ])
146 ])
147 AM_CONDITIONAL(HAVE_CAIRO, test x$have_cairo = xyes)
148
149 case "$host" in
150   *-*-darwin*)
151     CAIRO_SHARED_LIBRARY="libcairo-gobject.2.dylib"
152     ;;
153   *-*-mingw*)
154     CAIRO_SHARED_LIBRARY="libcairo-gobject-2.dll"
155     ;;
156   *-*-openbsd*)
157     CAIRO_SHARED_LIBRARY="libcairo-gobject.so"
158     ;;
159   *)
160     CAIRO_SHARED_LIBRARY="libcairo-gobject.so.2"
161     ;;
162 esac
163 CAIRO_GIR_PACKAGE="cairo-gobject"
164
165 AC_SUBST(CAIRO_SHARED_LIBRARY)
166 AC_SUBST(CAIRO_GIR_PACKAGE)
167
168
169 PKG_CHECK_MODULES(SCANNER, [gobject-2.0 gio-2.0])
170
171 dnl libffi
172 PKG_CHECK_MODULES(FFI, libffi, have_ffi_pkgconfig=yes, have_ffi_pkgconfig=no)
173 FFI_PC_CFLAGS=""
174 FFI_PC_LIBS=""
175 FFI_PC_PACKAGES=""
176 if test x"$have_ffi_pkgconfig" = xyes ; then
177     FFI_PC_PACKAGES="libffi"
178 else
179   AC_MSG_CHECKING(for ffi.h)
180
181   AC_PREPROC_IFELSE([AC_LANG_SOURCE([[#include <ffi.h>]])],
182                     [have_ffi_h=yes],[have_ffi_h=no])
183   if test x"$have_ffi_h" = x"yes"; then
184
185     save_LIBS=$LIBS
186     if test x"$with_ffi" = x"yes" || test x"$with_ffi" = x"auto"; then
187       other_LIBS=
188     else
189       other_LIBS=$with_ffi
190     fi
191
192     AC_SEARCH_LIBS(ffi_call,ffi,,AC_MSG_ERROR([libffi not found]),$other_LIBS)
193     if test x"$ac_cv_search_ffi_call" = x"none required" ; then
194       FFI_LIBS=$other_LIBS
195     else
196       FFI_LIBS="$ac_cv_search_ffi_call $other_LIBS"
197     fi
198
199     LIBS=$save_LIBS
200   fi
201   if test x"$have_ffi_h" != x"yes" ; then
202     AC_MSG_ERROR([ffi.h not found])
203   fi
204
205   FFI_PC_LIBS=$FFI_LIBS
206   FFI_PC_CFLAGS=$FFI_CFLAGS
207   FFI_CFLAGS=
208   AC_MSG_RESULT([$have_ffi_h])
209   AC_SUBST(FFI_LIBS)
210   AC_SUBST(FFI_CFLAGS)
211 fi
212 AC_SUBST(FFI_PC_CFLAGS)
213 AC_SUBST(FFI_PC_LIBS)
214 AC_SUBST(FFI_PC_PACKAGES)
215
216 AC_CHECK_SIZEOF(char)
217 AC_CHECK_SIZEOF(short)
218 AC_CHECK_SIZEOF(int)
219 AC_CHECK_SIZEOF(long)
220
221 PKG_CHECK_MODULES(GIREPO, [glib-2.0 >= 2.24.0 gobject-2.0 gmodule-2.0 gio-2.0])
222
223 # if we ever remove manual check for ffi and require .pc file, then
224 # just put libffi in the PKG_CHECK_MODULES(GIREPO) deps
225 GIREPO_LIBS="$GIREPO_LIBS $GCOV_LIBS $FFI_LIBS"
226 GIREPO_CFLAGS="$GIREPO_CFLAGS $FFI_CFLAGS"
227
228 GIREPO_CFLAGS="$GIREPO_CFLAGS $GCOV_CFLAGS"
229
230 # gtk-doc
231 # gtkdocize greps for ^GTK_DOC_CHECK and parses it, so you need to have
232 # it on it's own line.
233 m4_ifdef([GTK_DOC_CHECK], [
234 GTK_DOC_CHECK([1.15], [--flavour no-tmpl])
235 ],[
236 AM_CONDITIONAL([ENABLE_GTK_DOC],[false])
237 ])
238
239 # Checks for header files.
240 AC_HEADER_STDC
241 AC_CHECK_HEADERS([fcntl.h stdlib.h string.h])
242
243 # Checks for typedefs, structures, and compiler characteristics.
244 AC_C_CONST
245
246 # Checks for library functions.
247 AC_FUNC_STRTOD
248 AC_CHECK_FUNCS([memchr strchr strspn strstr strtol strtoull])
249 AC_CHECK_FUNCS([backtrace backtrace_symbols])
250
251 # Python
252 AM_PATH_PYTHON([2.5])
253 case "$host" in
254 *-*-mingw*)
255         # Change backslashes to forward slashes in pyexecdir to avoid
256         # quoting issues
257         pyexecdir=`echo $pyexecdir | tr '\\\\' '/'`
258         ;;
259 esac
260 AM_CHECK_PYTHON_HEADERS(, AC_MSG_ERROR([Python headers not found]))
261 if test "x$os_win32" = "xyes"; then
262   AM_CHECK_PYTHON_LIBS(, AC_MSG_ERROR([Python libs not found. Windows requires Python modules to be explicitly linked to libpython.]))
263 fi
264
265 dnl Not enabled by default until 3.6 cycle when we can propose mako as
266 dnl an external dependency
267 AC_ARG_ENABLE(doctool,[  --enable-doctool           enable g-ir-doctool ], enable_doctool=$enableval,enable_doctool=no)
268 if test x$enable_doctool != xno; then
269    AM_CHECK_PYMOD(mako,,,[AC_MSG_ERROR(Could not find python module: mako)])
270 fi
271 AM_CONDITIONAL(BUILD_DOCTOOL, test x$enable_doctool != xno)
272
273 # Glib documentation
274
275 GLIBSRC=
276 AC_MSG_CHECKING([for glib source directory to use for documentation])
277
278 AC_ARG_WITH(glib-src,
279         [  --with-glib-src=PATH    Source directory for glib - needed to add docs to gir],
280         GLIBSRC=$withval
281
282 AM_CONDITIONAL(WITH_GLIBSRC, test x"$GLIBSRC" != x)
283 AC_SUBST(GLIBSRC)
284 AC_MSG_RESULT([$GLIBSRC])
285
286 dnl
287 dnl Check for -Bsymbolic-functions linker flag used to avoid
288 dnl intra-library PLT jumps, if available.
289 dnl
290 AC_ARG_ENABLE(Bsymbolic,
291               [AS_HELP_STRING([--disable-Bsymbolic],
292                               [avoid linking with -Bsymbolic])],,
293               [SAVED_LDFLAGS="${LDFLAGS}"
294                AC_MSG_CHECKING([for -Bsymbolic-functions linker flag])
295                LDFLAGS=-Wl,-Bsymbolic-functions
296                AC_TRY_LINK([], [int main (void) { return 0; }],
297                            AC_MSG_RESULT(yes)
298                            enable_Bsymbolic=yes,
299                            AC_MSG_RESULT(no)
300                            enable_Bsymbolic=no)
301                LDFLAGS="${SAVED_LDFLAGS}"])
302
303 if test "x${enable_Bsymbolic}" = "xyes"; then
304   EXTRA_LINK_FLAGS=-Wl,-Bsymbolic-functions
305 fi
306
307 AC_SUBST(EXTRA_LINK_FLAGS)
308
309 AC_CONFIG_FILES([
310 Makefile
311 m4/Makefile
312 tests/Makefile
313 tests/offsets/Makefile
314 tests/scanner/Makefile
315 tests/repository/Makefile
316 tests/warn/Makefile
317 tests/doctool/Makefile
318 docs/Makefile
319 docs/reference/Makefile
320 gobject-introspection-1.0.pc
321 gobject-introspection-no-export-1.0.pc
322 config.h.win32
323 build/Makefile
324 build/win32/Makefile
325 build/win32/vs9/Makefile
326 build/win32/vs10/Makefile])
327 AC_OUTPUT
328
329 echo "
330     gobject-introspection $VERSION
331     ===============
332
333     tests: ${enable_tests}
334 "