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