2010-10-13 Sergio Villar Senin <svillar@igalia.com>
[WebKit-https.git] / autotools / webkit.m4
1 dnl macros to check for JavaScriptCore and WebKit/Gtk+ dependencies
2 dnl
3 dnl The rationale is so that we can share these macros between 
4 dnl WebKit and JavaScriptCore builds.
5
6 # global states
7 m4_define([initialized], [no])
8
9 AC_DEFUN([INIT_C_CXX_FLAGS],
10 [dnl
11 # If CXXFLAGS and CFLAGS are unset, default to empty.
12 # This is to tell automake not to include '-g' if CXXFLAGS is not set
13 # For more info - http://www.gnu.org/software/automake/manual/autoconf.html#C_002b_002b-Compiler
14 if test -z "$CXXFLAGS"; then
15    CXXFLAGS=""
16 fi
17 if test -z "$CFLAGS"; then
18    CFLAGS=""
19 fi
20 ])
21
22 AC_DEFUN_ONCE([WEBKIT_INIT],
23 [dnl
24 dnl check if we have the required packages to have successful checks
25 dnl
26 # Make sure CXXFLAGS and CFLAGS are set before expanding AC_PROG_CXX to avoid
27 # building with '-g -O2' on Release builds.
28 AC_REQUIRE([INIT_C_CXX_FLAGS])
29
30 # check for -fvisibility=hidden compiler support (GCC >= 4)
31 saved_CFLAGS="$CFLAGS"
32 CFLAGS="$CFLAGS -fvisibility=hidden -fvisibility-inlines-hidden"
33 AC_MSG_CHECKING([if ${CXX} supports -fvisibility=hidden -fvisibility-inlines-hidden])
34 AC_COMPILE_IFELSE([char foo;],
35       [ AC_MSG_RESULT([yes])
36         SYMBOL_VISIBILITY="-fvisibility=hidden" SYMBOL_VISIBILITY_INLINES="-fvisibility-inlines-hidden" ],
37         AC_MSG_RESULT([no]))
38 CFLAGS="$saved_CFLAGS"
39 AC_SUBST(SYMBOL_VISIBILITY)
40 AC_SUBST(SYMBOL_VISIBILITY_INLINES)
41
42 # check for pkg-config
43 AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
44 if test "$PKG_CONFIG" = "no"; then
45    AC_MSG_ERROR([Cannot find pkg-config, make sure it is installed in your PATH])
46 fi
47
48 AC_PATH_PROG(PERL, perl)
49 if test -z "$PERL"; then
50    AC_MSG_ERROR([You need 'perl' to compile WebKit])
51 fi
52
53 AC_PATH_PROG(PYTHON, python)
54 if test -z "$PYTHON"; then
55    AC_MSG_ERROR([You need 'python' to compile WebKit])
56 fi
57
58 AC_PATH_PROG(BISON, bison)
59 if test -z "$BISON"; then
60    AC_MSG_ERROR([You need the 'bison' parser generator to compile WebKit])
61 fi
62
63 AC_PATH_PROG(MV, mv)
64 if test -z "$MV"; then
65    AC_MSG_ERROR([You need 'mv' to compile WebKit])
66 fi
67
68 AC_REQUIRE([AC_PROG_CC])
69 AC_REQUIRE([AC_PROG_CXX])
70 AM_PROG_CC_STDC
71 AM_PROG_CC_C_O
72 AC_PROG_INSTALL
73 AC_SYS_LARGEFILE
74
75 # Check whether a C++ was found (AC_PROG_CXX sets $CXX to "g++" even when it
76 # doesn't exist)
77 AC_LANG_PUSH([C++])
78 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],[],[AC_MSG_ERROR([No C++ compiler found])])
79 AC_LANG_POP([C++])
80
81 # C/C++ Language Features
82 AC_C_CONST
83 AC_C_INLINE
84 AC_C_VOLATILE
85
86 # C/C++ Headers
87 AC_REQUIRE([AC_HEADER_STDC])
88 AC_HEADER_STDBOOL
89
90 m4_define([initialized], [yes])
91 ])
92
93 AC_DEFUN_ONCE([WEBKIT_CHECK_DEPENDENCIES],
94 [dnl
95 dnl check for module dependencies
96 for module in $1
97 do
98     case $module in
99         glib) _WEBKIT_CHECK_GLIB ;;
100         unicode) _WEBKIT_CHECK_UNICODE ;;
101         *) AC_MSG_ERROR([I don't support that module. Sorry..]) ;;
102
103     esac
104 done
105 ])
106
107 AC_DEFUN_ONCE([_WEBKIT_CHECK_GLIB],
108 [dnl
109 dnl check for glib
110 # Version requirements
111 GLIB_REQUIRED_VERSION=2.24
112 GOBJECT_REQUIRED_VERSION=2.0
113 GTHREAD_REQUIRED_VERSION=2.0
114
115 PKG_CHECK_MODULES([GLIB],
116                   [glib-2.0 >= $GLIB_REQUIRED_VERSION
117                   gobject-2.0 >= $GOBJECT_REQUIRED_VERSION
118                   gthread-2.0 >= $GTHREAD_REQUIRED_VERSION])
119 AC_SUBST([GLIB_CFLAGS])
120 AC_SUBST([GLIB_LIBS])
121
122 # GTK+ port only
123 # Check for glib-genmarshal and glib-mkenums
124 AC_PATH_PROG([GLIB_GENMARSHAL], [glib-genmarshal])
125 AC_PATH_PROG([GLIB_MKENUMS],[glib-mkenums])
126 if test -z "$GLIB_GENMARSHAL" || test -z "$GLIB_MKENUMS"; then
127    AC_MSG_ERROR([You need the GLib dev tools in your path])
128 fi
129 ])
130
131 AC_DEFUN_ONCE([_WEBKIT_CHECK_UNICODE],
132 [dnl
133 dnl determine the Unicode backend
134 AC_MSG_CHECKING([which Unicode backend to use])
135 AC_ARG_WITH(unicode_backend,
136             AC_HELP_STRING([--with-unicode-backend=@<:@icu/glib@:>@],
137                            [Select Unicode backend (WARNING: the glib-based backend is slow, and incomplete) [default=icu]]),
138             [],[with_unicode_backend="icu"])
139
140 case "$with_unicode_backend" in
141      icu|glib) ;;
142      *) AC_MSG_ERROR([Invalid Unicode backend: must be icu or glib.]) ;;
143 esac
144
145 AC_MSG_RESULT([$with_unicode_backend])
146
147 if test "$with_unicode_backend" = "icu"; then
148         case "$host" in
149             *-*-darwin*)
150                 UNICODE_CFLAGS="-I$srcdir/JavaScriptCore/icu -I$srcdir/WebCore/icu"
151                 UNICODE_LIBS="-licucore"
152                 ;;
153             *-*-mingw*)
154                 UNICODE_CFLAGS=""
155                 UNICODE_LIBS="-licuin -licuuc"
156                 ;;
157             *)
158                 AC_PATH_PROG(icu_config, icu-config, no)
159                 if test "$icu_config" = "no"; then
160                         AC_MSG_ERROR([Cannot find icu-config. The ICU library is needed.])
161                 fi
162
163                 # We don't use --cflags as this gives us a lot of things that we don't
164                 # necessarily want, like debugging and optimization flags
165                 # See man (1) icu-config for more info.
166                 UNICODE_CFLAGS=`$icu_config --cppflags`
167                 UNICODE_LIBS=`$icu_config --ldflags-libsonly`
168                 ;;
169         esac
170 fi
171
172 if test "$with_unicode_backend" = "glib"; then
173         PKG_CHECK_MODULES([UNICODE], [glib-2.0 pango >= 1.21.0])
174 fi
175
176 AC_SUBST([UNICODE_CFLAGS])
177 AC_SUBST([UNICODE_LIBS])
178 ])