ece54d229d35d207e665581f84210eb66d8116da
[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([BEFORE_AC_PROG_CXX],
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 # check for pkg-config
23 AC_DEFUN_ONCE([WEBKIT_INIT],
24 [dnl
25 dnl check if we have the required packages to have successful checks
26 dnl
27 # check for -fvisibility=hidden compiler support (GCC >= 4)
28 saved_CFLAGS="$CFLAGS"
29 CFLAGS="$CFLAGS -fvisibility=hidden -fvisibility-inlines-hidden"
30 AC_MSG_CHECKING([if ${CXX} supports -fvisibility=hidden -fvisibility-inlines-hidden])
31 AC_COMPILE_IFELSE([char foo;],
32       [ AC_MSG_RESULT([yes])
33         SYMBOL_VISIBILITY="-fvisibility=hidden" SYMBOL_VISIBILITY_INLINES="-fvisibility-inlines-hidden" ],
34         AC_MSG_RESULT([no]))
35 CFLAGS="$saved_CFLAGS"
36 AC_SUBST(SYMBOL_VISIBILITY)
37 AC_SUBST(SYMBOL_VISIBILITY_INLINES)
38
39 AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
40 if test "$PKG_CONFIG" = "no"; then
41    AC_MSG_ERROR([Cannot find pkg-config, make sure it is installed in your PATH])
42 fi
43
44 AC_PATH_PROG(PERL, perl)
45 if test -z "$PERL"; then
46    AC_MSG_ERROR([You need 'perl' to compile WebKit])
47 fi
48
49 AC_PATH_PROG(BISON, bison)
50 if test -z "$BISON"; then
51    AC_MSG_ERROR([You need the 'bison' parser generator to compile WebKit])
52 fi
53
54 AC_PATH_PROG(MV, mv)
55 if test -z "$MV"; then
56    AC_MSG_ERROR([You need 'mv' to compile WebKit])
57 fi
58
59 AM_PROG_CC_STDC
60 AM_PROG_CC_C_O
61 # Make sure CXXFLAGS and CFLAGS are set before expanding AC_PROG_CXX to avoid
62 # building with '-g -O2' on Release builds.
63 AC_REQUIRE([BEFORE_AC_PROG_CXX])
64 AC_REQUIRE([AC_PROG_CXX])
65 AC_PROG_INSTALL
66 AC_SYS_LARGEFILE
67
68 # Check whether a C++ was found (AC_PROG_CXX sets $CXX to "g++" even when it
69 # doesn't exist)
70 AC_LANG_PUSH([C++])
71 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],[],[AC_MSG_ERROR([No C++ compiler found])])
72 AC_LANG_POP([C++])
73
74 # C/C++ Language Features
75 AC_C_CONST
76 AC_C_INLINE
77 AC_C_VOLATILE
78
79 # C/C++ Headers
80 AC_REQUIRE([AC_HEADER_STDC])
81 AC_HEADER_STDBOOL
82
83 m4_define([initialized], [yes])
84 ])
85
86 AC_DEFUN_ONCE([WEBKIT_CHECK_DEPENDENCIES],
87 [dnl
88 dnl check for module dependencies
89 for module in $1
90 do
91     case $module in
92         glib) _WEBKIT_CHECK_GLIB ;;
93         unicode) _WEBKIT_CHECK_UNICODE ;;
94         *) AC_MSG_ERROR([I don't support that module. Sorry..]) ;;
95
96     esac
97 done
98 ])
99
100 AC_DEFUN_ONCE([_WEBKIT_CHECK_GLIB],
101 [dnl
102 dnl check for glib
103 # Version requirements
104 GLIB_REQUIRED_VERSION=2.0
105 GOBJECT_REQUIRED_VERSION=2.0
106 GTHREAD_REQUIRED_VERSION=2.0
107
108 PKG_CHECK_MODULES([GLIB],
109                   [glib-2.0 >= $GLIB_REQUIRED_VERSION
110                   gobject-2.0 >= $GOBJECT_REQUIRED_VERSION
111                   gthread-2.0 >= $GTHREAD_REQUIRED_VERSION])
112 AC_SUBST([GLIB_CFLAGS])
113 AC_SUBST([GLIB_LIBS])
114
115 # GTK+ port only
116 # Check for glib-genmarshal and glib-mkenums
117 AC_PATH_PROG([GLIB_GENMARSHAL], [glib-genmarshal])
118 AC_PATH_PROG([GLIB_MKENUMS],[glib-mkenums])
119 if test -z "$GLIB_GENMARSHAL" || test -z "$GLIB_MKENUMS"; then
120    AC_MSG_ERROR([You need the GLib dev tools in your path])
121 fi
122 ])
123
124 AC_DEFUN_ONCE([_WEBKIT_CHECK_UNICODE],
125 [dnl
126 dnl determine the Unicode backend
127 AC_MSG_CHECKING([which Unicode backend to use])
128 AC_ARG_WITH(unicode_backend,
129             AC_HELP_STRING([--with-unicode-backend=@<:@icu/glib@:>@],
130                            [Select Unicode backend (WARNING: the glib-based backend is slow, and incomplete) [default=icu]]),
131             [],[with_unicode_backend="icu"])
132
133 case "$with_unicode_backend" in
134      icu|glib) ;;
135      *) AC_MSG_ERROR([Invalid Unicode backend: must be icu or glib.]) ;;
136 esac
137
138 AC_MSG_RESULT([$with_unicode_backend])
139
140 # https://bugs.webkit.org/show_bug.cgi?id=15914
141 # Splitting ICU removal patch into smaller portions. We compile a hybrid version
142 # with the WTF Unicode backend being based on GLib while text codecs and TextBreakIterator
143 # keep the ICU dependency. That's why we temporarily add icu headers and libs for glib config case as well.
144 if test "$with_unicode_backend" = "icu" -o "$with_unicode_backend" = "glib"; then
145         if test "$os_darwin" = "yes"; then
146                 UNICODE_CFLAGS="-I\$(srcdir)/JavaScriptCore/icu -I\$(srcdir)/WebCore/icu"
147                 UNICODE_LIBS="-licucore"
148         elif test "$os_win32" = "yes"; then
149                 UNICODE_CFLAGS=""
150                 UNICODE_LIBS="-licuin -licuuc"
151         else
152                 AC_PATH_PROG(icu_config, icu-config, no)
153                 if test "$icu_config" = "no"; then
154                         AC_MSG_ERROR([Cannot find icu-config. The ICU library is needed.])
155                 fi
156
157                 # We don't use --cflags as this gives us a lot of things that we don't
158                 # necessarily want, like debugging and optimization flags
159                 # See man (1) icu-config for more info.
160                 UNICODE_CFLAGS=`$icu_config --cppflags`
161                 UNICODE_LIBS=`$icu_config --ldflags`
162         fi
163 fi
164
165 if test "$with_unicode_backend" = "glib"; then
166         # https://bugs.webkit.org/show_bug.cgi?id=15914
167         # Splitting ICU removal patch into smaller portions, that's why we
168         # temporarily retrieve flags & libs info for glib into UNICODEGLIB
169         # instead of UNICODE variable, then concatenate.
170         # Patch 3/4 of the above issue will rename the variable back to UNICODE.
171         PKG_CHECK_MODULES([UNICODEGLIB], [glib-2.0 pango >= 1.21.0])
172         UNICODE_CFLAGS="$UNICODE_CFLAGS $UNICODEGLIB_CFLAGS"
173         UNICODE_LIBS="$UNICODE_LIBS $UNICODEGLIB_LIBS"
174 fi
175
176 AC_SUBST([UNICODE_CFLAGS])
177 AC_SUBST([UNICODE_LIBS])
178 ])