Bug 1023547 - Fix intermittent dom/workers/test/test_promise.html failure. r=bz,...
[gecko.git] / configure.in
blob94d2ec663545dac475b451be3301d1131affb090
2 dnl -*- Mode: Autoconf; tab-width: 4; indent-tabs-mode: nil; -*-
3 dnl vi: set tabstop=4 shiftwidth=4 expandtab syntax=m4:
4 dnl This Source Code Form is subject to the terms of the Mozilla Public
5 dnl License, v. 2.0. If a copy of the MPL was not distributed with this
6 dnl file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 dnl Process this file with autoconf to produce a configure script.
9 dnl ========================================================
11 AC_PREREQ(2.13)
12 AC_INIT(config/config.mk)
13 AC_CONFIG_AUX_DIR(${srcdir}/build/autoconf)
14 AC_CANONICAL_SYSTEM
15 TARGET_CPU="${target_cpu}"
16 TARGET_VENDOR="${target_vendor}"
17 TARGET_OS="${target_os}"
19 dnl ========================================================
20 dnl =
21 dnl = Don't change the following two lines.  Doing so breaks:
22 dnl =
23 dnl = CFLAGS="-foo" ./configure
24 dnl =
25 dnl ========================================================
26 CFLAGS="${CFLAGS=}"
27 CPPFLAGS="${CPPFLAGS=}"
28 CXXFLAGS="${CXXFLAGS=}"
29 LDFLAGS="${LDFLAGS=}"
30 HOST_CFLAGS="${HOST_CFLAGS=}"
31 HOST_CXXFLAGS="${HOST_CXXFLAGS=}"
32 HOST_LDFLAGS="${HOST_LDFLAGS=}"
34 dnl ========================================================
35 dnl = Preserve certain environment flags passed to configure
36 dnl = We want sub projects to receive the same flags
37 dnl = untainted by this configure script
38 dnl ========================================================
39 _SUBDIR_CC="$CC"
40 _SUBDIR_CXX="$CXX"
41 _SUBDIR_CFLAGS="$CFLAGS"
42 _SUBDIR_CPPFLAGS="$CPPFLAGS"
43 _SUBDIR_CXXFLAGS="$CXXFLAGS"
44 _SUBDIR_LDFLAGS="$LDFLAGS"
45 _SUBDIR_HOST_CC="$HOST_CC"
46 _SUBDIR_HOST_CFLAGS="$HOST_CFLAGS"
47 _SUBDIR_HOST_CXXFLAGS="$HOST_CXXFLAGS"
48 _SUBDIR_HOST_LDFLAGS="$HOST_LDFLAGS"
49 _SUBDIR_CONFIG_ARGS="$ac_configure_args"
51 dnl Set the version number of the libs included with mozilla
52 dnl ========================================================
53 MOZJPEG=62
54 MOZPNG=10610
55 NSPR_VERSION=4
56 NSS_VERSION=3
58 dnl Set the minimum version of toolkit libs used by mozilla
59 dnl ========================================================
60 GLIB_VERSION=1.2.0
61 PERL_VERSION=5.006
62 CAIRO_VERSION=1.10
63 PANGO_VERSION=1.22.0
64 GTK2_VERSION=2.10.0
65 GTK3_VERSION=3.0.0
66 WINDRES_VERSION=2.14.90
67 W32API_VERSION=3.14
68 GNOMEVFS_VERSION=2.0
69 GNOMEUI_VERSION=2.2.0
70 GCONF_VERSION=1.2.1
71 GIO_VERSION=2.20
72 STARTUP_NOTIFICATION_VERSION=0.8
73 DBUS_VERSION=0.60
74 SQLITE_VERSION=3.8.4.2
76 MSMANIFEST_TOOL=
78 dnl Set various checks
79 dnl ========================================================
80 MISSING_X=
81 AC_PROG_AWK
83 dnl Initialize the Pthread test variables early so they can be
84 dnl  overridden by each platform.
85 dnl ========================================================
86 MOZ_USE_PTHREADS=
87 _PTHREAD_LDFLAGS=""
89 dnl Do not allow objdir == srcdir builds.
90 dnl ==============================================================
91 _topsrcdir=`cd \`dirname $0\`; pwd`
92 _objdir=`pwd`
95 dnl TODO Don't exempt L10N builds once bug 842760 is resolved.
96 if test "$_topsrcdir" = "$_objdir" -a "${with_l10n_base+set}" != set; then
97   echo "  ***"
98   echo "  * Building directly in the main source directory is not allowed."
99   echo "  *"
100   echo "  * To build, you must run configure from a separate directory"
101   echo "  * (referred to as an object directory)."
102   echo "  *"
103   echo "  * If you are building with a mozconfig, you will need to change your"
104   echo "  * mozconfig to point to a different object directory."
105   echo "  ***"
106   exit 1
109 # Check for a couple representative files in the source tree
110 _conflict_files=
111 for file in $_topsrcdir/Makefile $_topsrcdir/config/autoconf.mk; do
112   if test -f $file; then
113     _conflict_files="$_conflict_files $file"
114   fi
115 done
116 if test "$_conflict_files"; then
117   echo "***"
118   echo "*   Your source tree contains these files:"
119   for file in $_conflict_files; do
120     echo "*         $file"
121   done
122   cat 1>&2 <<-EOF
123   *   This indicates that you previously built in the source tree.
124   *   A source tree build can confuse the separate objdir build.
125   *
126   *   To clean up the source tree:
127   *     1. cd $_topsrcdir
128   *     2. gmake distclean
129   ***
131   exit 1
132   break
134 MOZ_BUILD_ROOT=`pwd`
136 MOZ_PYTHON
138 MOZ_DEFAULT_COMPILER
140 COMPILE_ENVIRONMENT=1
141 MOZ_ARG_DISABLE_BOOL(compile-environment,
142 [  --disable-compile-environment
143                           Disable compiler/library checks.],
144     COMPILE_ENVIRONMENT= )
145 AC_SUBST(COMPILE_ENVIRONMENT)
147 MOZ_ARG_WITH_STRING(l10n-base,
148 [  --with-l10n-base=DIR    path to l10n repositories],
149     L10NBASEDIR=$withval)
150 if test -n "$L10NBASEDIR"; then
151     if test "$L10NBASEDIR" = "yes" -o "$L10NBASEDIR" = "no"; then
152         AC_MSG_ERROR([--with-l10n-base must specify a path])
153     elif test -d "$L10NBASEDIR"; then
154         L10NBASEDIR=`cd "$L10NBASEDIR" && pwd`
155     else
156         AC_MSG_ERROR([Invalid value --with-l10n-base, $L10NBASEDIR doesn't exist])
157     fi
159 AC_SUBST(L10NBASEDIR)
161 dnl Check for Perl first -- needed for win32 SDK checks
162 MOZ_PATH_PROGS(PERL, $PERL perl5 perl )
163 if test -z "$PERL" -o "$PERL" = ":"; then
164     AC_MSG_ERROR([perl not found in \$PATH])
167 if test -n "$GAIADIR" -a ! -d "$GAIADIR" ; then
168     AC_MSG_ERROR([GAIADIR '$GAIADIR' isn't a valid directory])
171 AC_SUBST(GAIADIR)
172 if test -n "$GAIADIR" ; then
173     AC_DEFINE(PACKAGE_GAIA)
176 if test -n "$FXOS_SIMULATOR" -a -z "$GAIADIR" ; then
177     AC_MSG_ERROR([FXOS_SIMULATOR=1 requires GAIADIR to be defined])
180 if test -n "$FXOS_SIMULATOR" ; then
181     AC_DEFINE(FXOS_SIMULATOR)
182     AC_SUBST(FXOS_SIMULATOR)
185 MOZ_ARG_WITH_STRING(gonk,
186 [  --with-gonk=DIR
187                location of gonk dir],
188     gonkdir=$withval)
190 MOZ_ARG_WITH_STRING(gonk-toolchain-prefix,
191 [  --with-gonk-toolchain-prefix=DIR
192                           prefix to gonk toolchain commands],
193     gonk_toolchain_prefix=$withval)
195 if test -n "$gonkdir" ; then
196     kernel_name=`uname -s | tr "[[:upper:]]" "[[:lower:]]"`
197     android_source="$gonkdir"
198     ANDROID_SOURCE="$android_source"
199     ANDROID_NDK="${ANDROID_SOURCE}/ndk"
200     dnl Default to ICS
201     ANDROID_VERSION=15
202     if test -n "${PLATFORM_SDK_VERSION}"; then
203         ANDROID_VERSION="${PLATFORM_SDK_VERSION}"
204     fi
206     dnl set up compilers
207     TOOLCHAIN_PREFIX="$gonk_toolchain_prefix"
208     AS="$gonk_toolchain_prefix"as
209     CC="$gonk_toolchain_prefix"gcc
210     CXX="$gonk_toolchain_prefix"g++
211     CPP="$gonk_toolchain_prefix"cpp
212     LD="$gonk_toolchain_prefix"ld
213     AR="$gonk_toolchain_prefix"ar
214     RANLIB="$gonk_toolchain_prefix"ranlib
215     STRIP="$gonk_toolchain_prefix"strip
216     OBJCOPY="$gonk_toolchain_prefix"objcopy
218     if ! test -e "$gonkdir/ndk/sources/cxx-stl/stlport/src/iostream.cpp"; then
219         AC_MSG_ERROR([Couldn't find path to stlport sources in the gonk tree])
220     fi
221     STLPORT_CPPFLAGS="-I$_topsrcdir/build/stlport/stlport -I$gonkdir/ndk/sources/cxx-stl/system/include"
222     STLPORT_LIBS="$_objdir/build/stlport/libstlport_static.a"
224     case "$target_cpu" in
225     arm)
226         ARCH_DIR=arch-arm
227         ;;
228     i?86)
229         ARCH_DIR=arch-x86
230         ;;
231     esac
233     case "$ANDROID_VERSION" in
234     15)
235         GONK_INCLUDES="-I$gonkdir/frameworks/base/opengl/include -I$gonkdir/frameworks/base/native/include -I$gonkdir/frameworks/base/include -I$gonkdir/frameworks/base/services/camera -I$gonkdir/frameworks/base/include/media/ -I$gonkdir/frameworks/base/include/media/stagefright -I$gonkdir/frameworks/base/include/media/stagefright/openmax -I$gonkdir/frameworks/base/media/libstagefright/rtsp -I$gonkdir/frameworks/base/media/libstagefright/include -I$gonkdir/external/dbus -I$gonkdir/external/bluetooth/bluez/lib -I$gonkdir/dalvik/libnativehelper/include/nativehelper"
236         MOZ_B2G_BT=1
237         MOZ_B2G_BT_BLUEZ=1
238         MOZ_NFC=1
239         MOZ_B2G_CAMERA=1
240         MOZ_OMX_DECODER=1
241         AC_SUBST(MOZ_OMX_DECODER)
242         MOZ_RTSP=1
243         ;;
244     17|18)
245         GONK_INCLUDES="-I$gonkdir/frameworks/native/include -I$gonkdir/frameworks/av/include -I$gonkdir/frameworks/av/include/media -I$gonkdir/frameworks/av/include/camera -I$gonkdir/frameworks/native/include/media/openmax -I$gonkdir/frameworks/av/media/libstagefright/include"
246         if test -d "$gonkdir/external/bluetooth/bluez"; then
247           GONK_INCLUDES="$GONK_INCLUDES -I$gonkdir/external/dbus -I$gonkdir/external/bluetooth/bluez/lib"
248             MOZ_B2G_BT=1
249             MOZ_B2G_BT_BLUEZ=1
250         elif test -d "$gonkdir/external/bluetooth/bluedroid"; then
251             MOZ_B2G_BT=1
252             MOZ_B2G_BT_BLUEDROID=1
253         fi
255         MOZ_RTSP=1
256         MOZ_NFC=1
257         MOZ_B2G_CAMERA=1
258         MOZ_OMX_DECODER=1
259         AC_SUBST(MOZ_OMX_DECODER)
260         MOZ_OMX_ENCODER=1
261         AC_SUBST(MOZ_OMX_ENCODER)
262         AC_DEFINE(MOZ_OMX_ENCODER)
263         ;;
264     19)
265         GONK_INCLUDES="-I$gonkdir/frameworks/native/include -I$gonkdir/frameworks/av/include -I$gonkdir/frameworks/av/include/media -I$gonkdir/frameworks/av/include/camera -I$gonkdir/frameworks/native/include/media/openmax -I$gonkdir/frameworks/av/media/libstagefright/include"
266         MOZ_B2G_CAMERA=1
267         MOZ_B2G_BT=1
268         MOZ_B2G_BT_BLUEDROID=1
269         MOZ_NFC=1
270         MOZ_RTSP=1
271         MOZ_OMX_DECODER=1
272         MOZ_OMX_ENCODER=1
273         AC_DEFINE(MOZ_OMX_ENCODER)
274         MOZ_AUDIO_OFFLOAD=1
275         AC_SUBST(MOZ_AUDIO_OFFLOAD)
276         AC_DEFINE(MOZ_AUDIO_OFFLOAD)
278         ;;
279     *)
280         AC_MSG_ERROR([Unsupported platform version: $ANDROID_VERSION])
281         ;;
282     esac
283     CPPFLAGS="-DANDROID -isystem $gonkdir/bionic/libc/$ARCH_DIR/include -isystem $gonkdir/bionic/libc/include/ -isystem $gonkdir/bionic/libc/kernel/common -isystem $gonkdir/bionic/libc/kernel/$ARCH_DIR -isystem $gonkdir/bionic/libm/include -I$gonkdir/system -I$gonkdir/system/core/include -isystem $gonkdir/bionic -I$gonkdir/hardware/libhardware/include -I$gonkdir/external/valgrind/fxos-include $GONK_INCLUDES $CPPFLAGS"
284     CFLAGS="-mandroid -fno-short-enums -fno-exceptions $CFLAGS"
285     CXXFLAGS="-mandroid -fno-short-enums -fno-exceptions -Wno-psabi $CXXFLAGS $STLPORT_CPPFLAGS"
286     dnl Add -llog by default, since we use it all over the place.
287     LIBS="$LIBS -llog"
289     LDFLAGS="-mandroid -L$gonkdir/out/target/product/$GONK_PRODUCT/obj/lib -Wl,-rpath-link=$gonkdir/out/target/product/$GONK_PRODUCT/obj/lib --sysroot=$gonkdir/out/target/product/$GONK_PRODUCT/obj/ $LDFLAGS"
291     dnl prevent cross compile section from using these flags as host flags
292     if test -z "$HOST_CPPFLAGS" ; then
293         HOST_CPPFLAGS=" "
294     fi
295     if test -z "$HOST_CFLAGS" ; then
296         HOST_CFLAGS=" "
297     fi
298     if test -z "$HOST_CXXFLAGS" ; then
299         HOST_CXXFLAGS=" "
300     fi
301     if test -z "$HOST_LDFLAGS" ; then
302         HOST_LDFLAGS=" "
303     fi
305     AC_DEFINE(ANDROID)
306     AC_DEFINE_UNQUOTED(ANDROID_VERSION, $ANDROID_VERSION)
307     AC_SUBST(ANDROID_VERSION)
308     AC_DEFINE(HAVE_SYS_UIO_H)
309     AC_DEFINE(HAVE_PTHREADS)
310     MOZ_CHROME_FILE_FORMAT=omni
311     direct_nspr_config=1
312 else
313     MOZ_ANDROID_NDK
315     case "$target" in
316     *-android*|*-linuxandroid*)
317         if test -z "$ANDROID_PACKAGE_NAME" ; then
318             ANDROID_PACKAGE_NAME='org.mozilla.$(MOZ_APP_NAME)'
319         fi
320         MOZ_CHROME_FILE_FORMAT=omni
321         ZLIB_DIR=yes
322         ;;
323     *-linux*)
324         AC_PATH_PROG(OBJCOPY,objcopy)
325         ;;
326     esac
329 AC_SUBST(ANDROID_SOURCE)
330 AC_SUBST(ANDROID_PACKAGE_NAME)
331 AC_SUBST(OBJCOPY)
333 dnl ========================================================
334 dnl Checks for compilers.
335 dnl ========================================================
337 dnl AR_FLAGS set here so HOST_AR_FLAGS can be set correctly (see bug 538269)
338 AR_FLAGS='crs $@'
340 if test "$COMPILE_ENVIRONMENT"; then
342 if test "$target" != "$host"; then
343     MOZ_CROSS_COMPILER
344 else
345     AC_PROG_CC
346     case "$target" in
347     *-mingw*)
348       # Work around the conftest.exe access problem on Windows
349       sleep 2
350     esac
351     AC_PROG_CXX
352     AC_PROG_RANLIB
353     MOZ_PATH_PROGS(AS, $AS as, $CC)
354     AC_CHECK_PROGS(AR, ar, :)
355     AC_CHECK_PROGS(LD, ld, :)
356     AC_CHECK_PROGS(STRIP, strip, :)
357     AC_CHECK_PROGS(WINDRES, windres, :)
358     if test -z "$HOST_CC"; then
359         HOST_CC="$CC"
360     fi
361     if test -z "$HOST_CFLAGS"; then
362         HOST_CFLAGS="$CFLAGS"
363     fi
364     if test -z "$HOST_CXX"; then
365         HOST_CXX="$CXX"
366     fi
367     if test -z "$HOST_CXXFLAGS"; then
368         HOST_CXXFLAGS="$CXXFLAGS"
369     fi
370     if test -z "$HOST_LDFLAGS"; then
371         HOST_LDFLAGS="$LDFLAGS"
372     fi
373     if test -z "$HOST_RANLIB"; then
374         HOST_RANLIB="$RANLIB"
375     fi
376     if test -z "$HOST_AR"; then
377         HOST_AR="$AR"
378     fi
379     if test -z "$HOST_AR_FLAGS"; then
380         HOST_AR_FLAGS="$AR_FLAGS"
381     fi
384 if test -n "$MOZ_WINCONSOLE"; then
385     AC_DEFINE(MOZ_WINCONSOLE)
388 MOZ_TOOL_VARIABLES
390 MOZ_CHECK_COMPILER_WRAPPER
392 if test -n "$GNU_CC" -a -z "$CLANG_CC" ; then
393     if test "$GCC_MAJOR_VERSION" -eq 4 -a "$GCC_MINOR_VERSION" -lt 4 ||
394        test "$GCC_MAJOR_VERSION" -lt 4; then
395         AC_MSG_ERROR([Only GCC 4.4 or newer supported])
396     fi
399 dnl ========================================================
400 dnl Special win32 checks
401 dnl ========================================================
403 MOZ_ARG_ENABLE_BOOL(metro,
404 [  --enable-metro           Enable Windows Metro build targets],
405     MOZ_METRO=1,
406     MOZ_METRO=)
407 if test -n "$MOZ_METRO"; then
408     AC_DEFINE(MOZ_METRO)
409     # Target the Windows 8 Kit
410     WINSDK_TARGETVER=602
411     WINVER=502
412     # toolkit/library/makefile.in needs these, see nsDllMain.
413     CRTDLLVERSION=110
414     CRTEXPDLLVERSION=1-1-0
415 else
416     # Target the Windows 7 SDK by default
417     WINSDK_TARGETVER=601
418     WINVER=502
421 AC_SUBST(CRTDLLVERSION)
422 AC_SUBST(CRTEXPDLLVERSION)
424 MOZ_ARG_WITH_STRING(windows-version,
425 [  --with-windows-version=WINSDK_TARGETVER
426                           Windows SDK version to target. Lowest version
427                           currently allowed is 601 (Win7), highest is 602 (Win8)],
428   WINSDK_TARGETVER=$withval)
430 # Currently only two sdk versions allowed, 601 and 602
431 case "$WINSDK_TARGETVER" in
432 601|602)
433     MOZ_WINSDK_TARGETVER=0${WINSDK_TARGETVER}0000
434     ;;
437     AC_MSG_ERROR([Invalid value for --with-windows-version ($WINSDK_TARGETVER)]);
438     ;;
439 esac
441 case "$target" in
442 *-mingw*)
443     if test "$GCC" != "yes" -a -z "$CLANG_CC"; then
444         # Check to see if we are really running in a msvc environemnt
445         _WIN32_MSVC=1
446         AC_CHECK_PROGS(MIDL, midl)
448         # Make sure compilers are valid
449         CFLAGS="$CFLAGS -TC -nologo"
450         CXXFLAGS="$CXXFLAGS -TP -nologo"
451         AC_LANG_SAVE
452         AC_LANG_C
453         AC_TRY_COMPILE([#include <stdio.h>],
454             [ printf("Hello World\n"); ],,
455             AC_MSG_ERROR([\$(CC) test failed.  You must have MS VC++ in your path to build.]) )
457         AC_LANG_CPLUSPLUS
458         AC_TRY_COMPILE([#include <new.h>],
459             [ unsigned *test = new unsigned(42); ],,
460             AC_MSG_ERROR([\$(CXX) test failed.  You must have MS VC++ in your path to build.]) )
461         AC_LANG_RESTORE
463         changequote(,)
464         _MSVC_VER_FILTER='s|.*[^!-~]([0-9]+\.[0-9]+\.[0-9]+(\.[0-9]+)?).*|\1|p'
465         changequote([,])
467         # Determine compiler version
468         CC_VERSION=`${CC} -v 2>&1 | sed -nre "$_MSVC_VER_FILTER"`
469         _CC_MAJOR_VERSION=`echo ${CC_VERSION} | $AWK -F\. '{ print $1 }'`
470         _CC_MINOR_VERSION=`echo ${CC_VERSION} | $AWK -F\. '{ print $2 }'`
471         _CC_RELEASE=`echo ${CC_VERSION} | $AWK -F\. '{ print $3 }'`
472         _CC_BUILD=`echo ${CC_VERSION} | $AWK -F\. '{ print $4 }'`
473         _MSC_VER=${_CC_MAJOR_VERSION}${_CC_MINOR_VERSION}
475         CXX_VERSION=`${CXX} -v 2>&1 | sed -nre "$_MSVC_VER_FILTER"`
476         _CXX_MAJOR_VERSION=`echo ${CXX_VERSION} | $AWK -F\. '{ print $1 }'`
478         if test "$_CC_MAJOR_VERSION" != "$_CXX_MAJOR_VERSION"; then
479             AC_MSG_ERROR([The major versions of \$CC and \$CXX do not match.])
480         fi
482         AC_DEFINE(_CRT_SECURE_NO_WARNINGS)
483         AC_DEFINE(_CRT_NONSTDC_NO_WARNINGS)
485         if test "$_CC_MAJOR_VERSION" = "16"; then
486             _CC_SUITE=10
487             MSVS_VERSION=2010
488         elif test "$_CC_MAJOR_VERSION" = "17"; then
489             _CC_SUITE=11
490             MSVS_VERSION=2012
491         elif test "$_CC_MAJOR_VERSION" = "18"; then
492             _CC_SUITE=12
493             MSVS_VERSION=2013
494         else
495             AC_MSG_ERROR([This version ($CC_VERSION) of the MSVC compiler is unsupported. See https://developer.mozilla.org/en/Windows_Build_Prerequisites.])
496         fi
497         AC_SUBST(MSVS_VERSION)
499         AC_DEFINE(HAVE_SEH_EXCEPTIONS)
501         if test -n "$WIN32_REDIST_DIR"; then
502           if test ! -d "$WIN32_REDIST_DIR"; then
503             AC_MSG_ERROR([Invalid Win32 Redist directory: ${WIN32_REDIST_DIR}])
504           fi
505           WIN32_REDIST_DIR=`cd "$WIN32_REDIST_DIR" && pwd`
506         fi
508         dnl Confirm we have the pri tools on win8 builds
509         if test -n "$MOZ_METRO"; then
510           AC_MSG_CHECKING([for makepri])
511           AC_CHECK_PROGS(MAKEPRI, makepri, "")
512           if test -z "MAKEPRI" ; then
513               AC_MSG_ERROR([makepri.exe is required for generating metro browser install components. It should be in the Win8 SDK.])
514           fi
515           AC_SUBST(MAKEPRI)
516         fi
518         dnl Ensure that mt.exe is 'Microsoft (R) Manifest Tool',
519         dnl not something else like "magnetic tape manipulation utility".
520         MSMT_TOOL=`mt 2>&1|grep 'Microsoft (R) Manifest Tool'`
521         if test -z "$MSMT_TOOL"; then
522           AC_MSG_ERROR([Microsoft (R) Manifest Tool must be in your \$PATH.])
523         fi
525         changequote(,)
526         _MSMT_VER_FILTER='s|.*[^!-~]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*|\1|p'
527         changequote([,])
528         MSMANIFEST_TOOL_VERSION=`echo ${MSMT_TOOL}|sed -ne "$_MSMT_VER_FILTER"`
529         if test -z "$MSMANIFEST_TOOL_VERSION"; then
530           AC_MSG_WARN([Unknown version of the Microsoft (R) Manifest Tool.])
531         fi
533         MSMANIFEST_TOOL=1
534         unset MSMT_TOOL
536         # Check linker version
537         _LD_FULL_VERSION=`"${LD}" -v 2>&1 | sed -nre "$_MSVC_VER_FILTER"`
538         _LD_MAJOR_VERSION=`echo ${_LD_FULL_VERSION} | $AWK -F\. '{ print $1 }'`
539         if test "$_LD_MAJOR_VERSION" != "$_CC_SUITE"; then
540             AC_MSG_ERROR([The linker major version, $_LD_FULL_VERSION,  does not match the compiler suite version, $_CC_SUITE.])
541         fi
543         INCREMENTAL_LINKER=1
545         # Set midl environment
546         case "$target" in
547         i*86-*)
548             MIDL_FLAGS="${MIDL_FLAGS} -env win32"
549             ;;
550         x86_64-*)
551             MIDL_FLAGS="${MIDL_FLAGS} -env x64"
552             ;;
553         esac
555         unset _MSVC_VER_FILTER
557         AC_CACHE_CHECK(for std::_Throw, ac_cv_have_std__Throw,
558             [
559                 AC_LANG_SAVE
560                 AC_LANG_CPLUSPLUS
561                 _SAVE_CXXFLAGS="$CXXFLAGS"
562                 CXXFLAGS="${CXXFLAGS} -D_HAS_EXCEPTIONS=0"
563                 AC_TRY_COMPILE([#include <exception>],
564                             [std::_Throw(std::exception()); return 0;],
565                             ac_cv_have_std__Throw="yes",
566                             ac_cv_have_std__Throw="no")
567                 CXXFLAGS="$_SAVE_CXXFLAGS"
568                 AC_LANG_RESTORE
569             ])
571         if test "$ac_cv_have_std__Throw" = "yes"; then
572             AC_CACHE_CHECK(for |class __declspec(dllimport) exception| bug,
573                            ac_cv_have_dllimport_exception_bug,
574                 [
575                     AC_LANG_SAVE
576                     AC_LANG_CPLUSPLUS
577                     _SAVE_CXXFLAGS="$CXXFLAGS"
578                     CXXFLAGS="${CXXFLAGS} -D_HAS_EXCEPTIONS=0"
579                     AC_TRY_LINK([#include <vector>],
580                                 [std::vector<int> v; return v.at(1);],
581                                 ac_cv_have_dllimport_exception_bug="no",
582                                 ac_cv_have_dllimport_exception_bug="yes")
583                     CXXFLAGS="$_SAVE_CXXFLAGS"
584                     AC_LANG_RESTORE
585                 ])
586             if test "$ac_cv_have_dllimport_exception_bug" = "no"; then
587                 WRAP_STL_INCLUDES=1
588                 MOZ_MSVC_STL_WRAP__Throw=1
589                 AC_DEFINE(MOZ_MSVC_STL_WRAP__Throw)
590             fi
591         else
592             AC_CACHE_CHECK(for overridable _RAISE,
593                            ac_cv_have__RAISE,
594                 [
595                     AC_LANG_SAVE
596                     AC_LANG_CPLUSPLUS
597                     _SAVE_CXXFLAGS="$CXXFLAGS"
598                     CXXFLAGS="${CXXFLAGS} -D_HAS_EXCEPTIONS=0"
599                     AC_TRY_COMPILE([#include <xstddef>
600                                     #undef _RAISE
601                                     #define _RAISE(x) externallyDefinedFunction((x).what())
602                                     #include <vector>
603                                    ],
604                                    [std::vector<int> v; return v.at(1);],
605                                    ac_cv_have__RAISE="no",
606                                    ac_cv_have__RAISE="yes")
607                     CXXFLAGS="$_SAVE_CXXFLAGS"
608                     AC_LANG_RESTORE
609                 ])
610             if test "$ac_cv_have__RAISE" = "yes"; then
611                 WRAP_STL_INCLUDES=1
612                 MOZ_MSVC_STL_WRAP__RAISE=1
613                 AC_DEFINE(MOZ_MSVC_STL_WRAP__RAISE)
614             else
615                 AC_MSG_ERROR([Gecko exception wrapping doesn't understand your your MSVC/SDK.  Please file a bug describing this error and your build configuration.])
616             fi
617         fi
619         if test "$WRAP_STL_INCLUDES" = "1"; then
620             STL_FLAGS='-D_HAS_EXCEPTIONS=0 -I$(DIST)/stl_wrappers'
621         fi
622     elif test -z "$CLANG_CC"; then
623         # Check w32api version
624         _W32API_MAJOR_VERSION=`echo $W32API_VERSION | $AWK -F\. '{ print $1 }'`
625         _W32API_MINOR_VERSION=`echo $W32API_VERSION | $AWK -F\. '{ print $2 }'`
626         AC_MSG_CHECKING([for w32api version >= $W32API_VERSION])
627         AC_TRY_COMPILE([#include <w32api.h>],
628             #if (__W32API_MAJOR_VERSION < $_W32API_MAJOR_VERSION) || \
629                 (__W32API_MAJOR_VERSION == $_W32API_MAJOR_VERSION && \
630                  __W32API_MINOR_VERSION < $_W32API_MINOR_VERSION)
631                 #error "test failed."
632             #endif
633             , [ res=yes ], [ res=no ])
634         AC_MSG_RESULT([$res])
635         if test "$res" != "yes"; then
636             AC_MSG_ERROR([w32api version $W32API_VERSION or higher required.])
637         fi
638         # Check windres version
639         AC_MSG_CHECKING([for windres version >= $WINDRES_VERSION])
640         _WINDRES_VERSION=`${WINDRES} --version 2>&1 | grep -i windres 2>/dev/null | $AWK '{ print $3 }'`
641         AC_MSG_RESULT([$_WINDRES_VERSION])
642         _WINDRES_MAJOR_VERSION=`echo $_WINDRES_VERSION | $AWK -F\. '{ print $1 }'`
643         _WINDRES_MINOR_VERSION=`echo $_WINDRES_VERSION | $AWK -F\. '{ print $2 }'`
644         _WINDRES_RELEASE_VERSION=`echo $_WINDRES_VERSION | $AWK -F\. '{ print $3 }'`
645         WINDRES_MAJOR_VERSION=`echo $WINDRES_VERSION | $AWK -F\. '{ print $1 }'`
646         WINDRES_MINOR_VERSION=`echo $WINDRES_VERSION | $AWK -F\. '{ print $2 }'`
647         WINDRES_RELEASE_VERSION=`echo $WINDRES_VERSION | $AWK -F\. '{ print $3 }'`
648         if test "$_WINDRES_MAJOR_VERSION" -lt "$WINDRES_MAJOR_VERSION" -o \
649                 "$_WINDRES_MAJOR_VERSION" -eq "$WINDRES_MAJOR_VERSION" -a \
650                 "$_WINDRES_MINOR_VERSION" -lt "$WINDRES_MINOR_VERSION" -o \
651                 "$_WINDRES_MAJOR_VERSION" -eq "$WINDRES_MAJOR_VERSION" -a \
652                 "$_WINDRES_MINOR_VERSION" -eq "$WINDRES_MINOR_VERSION" -a \
653                 "$_WINDRES_RELEASE_VERSION" -lt "$WINDRES_RELEASE_VERSION"
654         then
655             AC_MSG_ERROR([windres version $WINDRES_VERSION or higher is required to build.])
656         fi
658         AC_CHECK_PROGS(MIDL, $target-widl widl)
659         if test -n "$MIDL"; then
660             case "$target" in
661             i*86-*)
662                 MIDL_FLAGS="$MIDL_FLAGS --win32 -m32"
663                 ;;
664             x86_64-*)
665                 MIDL_FLAGS="$MIDL_FLAGS --win64 -m64"
666                 ;;
667             esac
668         fi
670         # strsafe.h on mingw uses macros for function deprecation that pollutes namespace
671         # causing problems with local implementations with the same name.
672         AC_DEFINE(STRSAFE_NO_DEPRECATE)
674         MOZ_WINSDK_MAXVER=0x06020000
675     fi # !GNU_CC
677     # If MSVC or clang
678     if test "$GCC" != "yes" -o -n "$CLANG_CC" ; then
679         MOZ_FIND_WINSDK_VERSION
680     fi
682     AC_DEFINE_UNQUOTED(WINVER,0x$WINVER)
683     AC_DEFINE_UNQUOTED(_WIN32_WINNT,0x$WINVER)
684     # Require OS features provided by IE 6.0 SP2 (XP SP2)
685     AC_DEFINE_UNQUOTED(_WIN32_IE,0x0603)
687     # If the maximum version supported by this SDK is lower than the target
688     # version, error out
689     AC_MSG_CHECKING([for Windows SDK being recent enough])
690     if $PERL -e "exit(0x$MOZ_WINSDK_TARGETVER > $MOZ_WINSDK_MAXVER)"; then
691         AC_MSG_RESULT("yes")
692     else
693         AC_MSG_RESULT("no")
694         AC_MSG_ERROR([You are targeting Windows version 0x$MOZ_WINSDK_TARGETVER, but your SDK only supports up to version $MOZ_WINSDK_MAXVER. Install and use an updated SDK, or target a lower version using --with-windows-version. Alternatively, try running the Windows SDK Configuration Tool and selecting a newer SDK. See https://developer.mozilla.org/En/Windows_SDK_versions for more details on fixing this.])
695     fi
697     AC_DEFINE_UNQUOTED(MOZ_WINSDK_TARGETVER,0x$MOZ_WINSDK_TARGETVER)
698     # Definitions matching sdkddkver.h
699     AC_DEFINE_UNQUOTED(MOZ_NTDDI_WIN7, 0x06010000)
700     AC_DEFINE_UNQUOTED(MOZ_WINSDK_MAXVER,$MOZ_WINSDK_MAXVER)
701     AC_SUBST(MOZ_WINSDK_MAXVER)
702     ;;
703 esac
705 AC_PROG_CPP
706 AC_PROG_CXXCPP
708 if test -n "$_WIN32_MSVC"; then
709     SKIP_PATH_CHECKS=1
710     SKIP_COMPILER_CHECKS=1
711     SKIP_LIBRARY_CHECKS=1
713     # Since we're skipping compiler and library checks, hard-code
714     # some facts here.
715     AC_DEFINE(HAVE_IO_H)
716     AC_DEFINE(HAVE_SETBUF)
717     AC_DEFINE(HAVE_ISATTY)
720 fi # COMPILE_ENVIRONMENT
722 AC_SUBST(MIDL_FLAGS)
723 AC_SUBST(_MSC_VER)
725 AC_SUBST(GNU_AS)
726 AC_SUBST(GNU_LD)
727 AC_SUBST(GNU_CC)
728 AC_SUBST(GNU_CXX)
729 AC_SUBST(INTEL_CC)
730 AC_SUBST(INTEL_CXX)
732 AC_SUBST(STL_FLAGS)
733 AC_SUBST(WRAP_STL_INCLUDES)
734 AC_SUBST(MOZ_MSVC_STL_WRAP__Throw)
735 AC_SUBST(MOZ_MSVC_STL_WRAP__RAISE)
737 dnl ========================================================
738 dnl Checks for programs.
739 dnl ========================================================
740 AC_PROG_INSTALL
741 AC_PROG_LN_S
743 if test -z "$TINDERBOX_SKIP_PERL_VERSION_CHECK"; then
744 AC_MSG_CHECKING([for minimum required perl version >= $PERL_VERSION])
745 _perl_version=`PERL_VERSION=$PERL_VERSION $PERL -e 'print "$]"; if ($] >= $ENV{PERL_VERSION}) { exit(0); } else { exit(1); }' 2>&5`
746 _perl_res=$?
747 AC_MSG_RESULT([$_perl_version])
749 if test "$_perl_res" != 0; then
750     AC_MSG_ERROR([Perl $PERL_VERSION or higher is required.])
754 AC_MSG_CHECKING([for full perl installation])
755 _perl_archlib=`$PERL -e 'use Config; if ( -d $Config{archlib} ) { exit(0); } else { exit(1); }' 2>&5`
756 _perl_res=$?
757 if test "$_perl_res" != 0; then
758     AC_MSG_RESULT([no])
759     AC_MSG_ERROR([Cannot find Config.pm or \$Config{archlib}.  A full perl installation is required.])
760 else
761     AC_MSG_RESULT([yes])
764 if test -z "$COMPILE_ENVIRONMENT"; then
765     NSINSTALL_BIN='$(PYTHON) $(topsrcdir)/config/nsinstall.py'
767 AC_SUBST(NSINSTALL_BIN)
769 MOZ_PATH_PROG(DOXYGEN, doxygen, :)
770 MOZ_PATH_PROG(AUTOCONF, autoconf, :)
771 MOZ_PATH_PROGS(UNZIP, unzip)
772 if test -z "$UNZIP" -o "$UNZIP" = ":"; then
773     AC_MSG_ERROR([unzip not found in \$PATH])
775 MOZ_PATH_PROGS(ZIP, zip)
776 if test -z "$ZIP" -o "$ZIP" = ":"; then
777     AC_MSG_ERROR([zip not found in \$PATH])
779 MOZ_PATH_PROG(XARGS, xargs)
780 if test -z "$XARGS" -o "$XARGS" = ":"; then
781     AC_MSG_ERROR([xargs not found in \$PATH .])
784 MOZ_PATH_PROG(RPMBUILD, rpmbuild, :)
785 AC_SUBST(RPMBUILD)
787 if test "$COMPILE_ENVIRONMENT"; then
789 dnl ========================================================
790 dnl = Mac OS X toolchain support
791 dnl ========================================================
793 dnl The universal machinery sets UNIVERSAL_BINARY to inform packager.mk
794 dnl that a universal binary is being produced and MOZ_CAN_RUN_PROGRAMS
795 dnl when we can run target binaries.
796 AC_SUBST(UNIVERSAL_BINARY)
797 AC_SUBST(MOZ_CAN_RUN_PROGRAMS)
799 MOZ_ARG_WITH_STRING(unify-dist,
800 [  --with-unify-dist=dir   Location of the dist directory to unify with at packaging time (Mac OS X universal build only)],
801     UNIFY_DIST=$withval)
802 if test -n "$UNIVERSAL_BINARY"; then
803     if test -z "$UNIFY_DIST"; then
804         AC_MSG_ERROR([You need to provide the --with-unify-dist=dir argument when performing a universal build])
805     fi
806     case "$UNIFY_DIST" in
807     /*)
808         ;;
809     *)
810         UNIFY_DIST="${MOZ_BUILD_ROOT}/${UNIFY_DIST}"
811         ;;
812     esac
814 AC_SUBST(UNIFY_DIST)
816 dnl ========================================================
817 dnl Check for MacOS deployment target version
818 dnl ========================================================
820 MOZ_ARG_ENABLE_STRING(macos-target,
821                       [  --enable-macos-target=VER (default=10.6)
822                           Set the minimum MacOS version needed at runtime],
823                       [_MACOSX_DEPLOYMENT_TARGET=$enableval])
825 case "$target" in
826 *-darwin*)
827     if test -n "$_MACOSX_DEPLOYMENT_TARGET" ; then
828         dnl Use the specified value
829         export MACOSX_DEPLOYMENT_TARGET=$_MACOSX_DEPLOYMENT_TARGET
830     else
831         dnl No value specified on the command line or in the environment,
832         dnl use architecture minimum.
833         export MACOSX_DEPLOYMENT_TARGET=10.6
834     fi
835     ;;
836 esac
838 AC_SUBST(MACOSX_DEPLOYMENT_TARGET)
840 dnl ========================================================
841 dnl = Mac OS X SDK support
842 dnl ========================================================
843 MACOS_SDK_DIR=
844 MOZ_ARG_WITH_STRING(macos-sdk,
845 [  --with-macos-sdk=dir    Location of platform SDK to use (Mac OS X only)],
846     MACOS_SDK_DIR=$withval)
848 MACOS_PRIVATE_FRAMEWORKS_DIR_DEFAULTED=
849 MOZ_ARG_WITH_STRING(macos-private-frameworks,
850 [  --with-macos-private-frameworks=dir    Location of private frameworks to use (Mac OS X only)],
851     MACOS_PRIVATE_FRAMEWORKS_DIR=$withval,
852     MACOS_PRIVATE_FRAMEWORKS_DIR=/System/Library/PrivateFrameworks
853     MACOS_PRIVATE_FRAMEWORKS_DEFAULTED=1)
855 if test -z "${MACOS_PRIVATE_FRAMEWORKS_DEFAULTED}"; then
856   if test -z "$CROSS_COMPILE"; then
857     AC_MSG_WARN([You should only be using --with-macos-private-frameworks when cross-compiling.])
858   fi
859   if test ! -d "$MACOS_PRIVATE_FRAMEWORKS_DIR"; then
860     AC_MSG_ERROR([PrivateFrameworks directory not found.])
861   fi
864 dnl MACOS_SDK_DIR will be set to the SDK location whenever one is in use.
865 AC_SUBST(MACOS_SDK_DIR)
866 AC_SUBST(MACOS_PRIVATE_FRAMEWORKS_DIR)
868 if test "$MACOS_SDK_DIR"; then
869   dnl Sync this section with the ones in NSPR and NSS.
870   dnl Changes to the cross environment here need to be accounted for in
871   dnl the libIDL checks (below) and xpidl build.
873   if test ! -d "$MACOS_SDK_DIR"; then
874     AC_MSG_ERROR([SDK not found.  When using --with-macos-sdk, you must
875 specify a valid SDK.  SDKs are installed when the optional cross-development
876 tools are selected during the Xcode/Developer Tools installation.])
877   fi
879   CFLAGS="$CFLAGS -isysroot ${MACOS_SDK_DIR}"
880   CXXFLAGS="$CXXFLAGS -isysroot ${MACOS_SDK_DIR}"
882   dnl CPP/CXXCPP needs to be set for MOZ_CHECK_HEADER.
883   CPP="$CPP -isysroot ${MACOS_SDK_DIR}"
884   CXXCPP="$CXXCPP -isysroot ${MACOS_SDK_DIR}"
886   AC_LANG_SAVE
887   AC_MSG_CHECKING([for valid compiler/Mac OS X SDK combination])
888   AC_LANG_CPLUSPLUS
889   AC_TRY_COMPILE([#include <new>],[],
890    result=yes,
891    result=no)
892   AC_LANG_RESTORE
893   AC_MSG_RESULT($result)
895   if test "$result" = "no" ; then
896     AC_MSG_ERROR([The selected compiler and Mac OS X SDK are incompatible.])
897   fi
900 fi # COMPILE_ENVIRONMENT
902 AC_MSG_CHECKING([compiler version])
903 # Just print it so it shows up in the logs.
904 cc_version=$($CC --version)
905 AC_MSG_RESULT([$cc_version])
907 if test -n "$MAKE"; then
908   if test `echo $MAKE | grep -c make.py` != 1; then
909      NOT_PYMAKE=$MAKE
910   fi
913 case "$host_os" in
914 mingw*)
915     MOZ_PATH_PROGS(GMAKE, $GMAKE $NOT_PYMAKE make gmake, :)
916     ;;
918     MOZ_PATH_PROGS(GMAKE, $GMAKE $NOT_PYMAKE gmake make, :)
919     ;;
920 esac
921 if test "$GMAKE" = ":"; then
922    AC_MSG_ERROR([GNU make not found])
924 AC_SUBST(GMAKE)
926 if test -z "$MAKE"; then
927   MAKE=$GMAKE
930 if test "$COMPILE_ENVIRONMENT"; then
932 AC_PATH_XTRA
934 XCFLAGS="$X_CFLAGS"
936 fi # COMPILE_ENVIRONMENT
938 dnl ========================================================
939 dnl set the defaults first
940 dnl ========================================================
941 AS_BIN=$AS
942 AR_LIST='$(AR) t'
943 AR_EXTRACT='$(AR) x'
944 AR_DELETE='$(AR) d'
945 AS='$(CC)'
946 AS_DASH_C_FLAG='-c'
947 DLL_PREFIX=lib
948 LIB_PREFIX=lib
949 DLL_SUFFIX=.so
950 OBJ_SUFFIX=o
951 LIB_SUFFIX=a
952 ASM_SUFFIX=s
953 IMPORT_LIB_SUFFIX=
954 TARGET_MD_ARCH=unix
955 DIRENT_INO=d_ino
956 MOZ_USER_DIR=".mozilla"
958 MOZ_JPEG_CFLAGS=
959 MOZ_JPEG_LIBS='$(call EXPAND_LIBNAME_PATH,mozjpeg,$(DEPTH)/media/libjpeg)'
960 MOZ_BZ2_CFLAGS=
961 MOZ_BZ2_LIBS='$(call EXPAND_LIBNAME_PATH,bz2,$(DEPTH)/modules/libbz2/src)'
962 MOZ_PNG_CFLAGS="-I$_objdir/dist/include" # needed for freetype compilation
963 MOZ_PNG_LIBS='$(call EXPAND_LIBNAME_PATH,mozpng,$(DEPTH)/media/libpng)'
965 MOZ_JS_STATIC_LIBS='$(call EXPAND_LIBNAME_PATH,js_static,$(LIBXUL_DIST)/lib)'
966 MOZ_JS_SHARED_LIBS='$(call EXPAND_LIBNAME_PATH,mozjs,$(LIBXUL_DIST)/lib)'
967 MOZ_FIX_LINK_PATHS='-Wl,-rpath-link,$(LIBXUL_DIST)/bin -Wl,-rpath-link,$(prefix)/lib'
968 XPCOM_FROZEN_LDOPTS='$(call EXPAND_LIBNAME_PATH,xul mozalloc,$(LIBXUL_DIST)/bin)'
969 LIBXUL_LIBS='$(XPCOM_FROZEN_LDOPTS)'
970 XPCOM_GLUE_LDOPTS='$(LIBXUL_DIST)/lib/$(LIB_PREFIX)xpcomglue_s.$(LIB_SUFFIX) $(XPCOM_FROZEN_LDOPTS)'
971 XPCOM_STANDALONE_GLUE_LDOPTS='$(LIBXUL_DIST)/lib/$(LIB_PREFIX)xpcomglue.$(LIB_SUFFIX)'
973 # These are specially defined on Windows only
974 case "$target" in
975 *-mingw*)
976   XPCOM_STATICRUNTIME_GLUE_LDOPTS='$(LIBXUL_DIST)/lib/$(LIB_PREFIX)xpcomglue_staticruntime_s.$(LIB_SUFFIX) $(XPCOM_FROZEN_LDOPTS)'
977   XPCOM_STANDALONE_STATICRUNTIME_GLUE_LDOPTS='$(LIBXUL_DIST)/lib/$(LIB_PREFIX)xpcomglue_staticruntime.$(LIB_SUFFIX)'
978   ;;
980   XPCOM_STATICRUNTIME_GLUE_LDOPTS=$XPCOM_GLUE_LDOPTS
981   XPCOM_STANDALONE_STATICRUNTIME_GLUE_LDOPTS=$XPCOM_STANDALONE_GLUE_LDOPTS
982   ;;
983 esac
985 MOZ_FS_LAYOUT=unix
987 MOZ_COMPONENT_NSPR_LIBS='-L$(LIBXUL_DIST)/bin $(NSPR_LIBS)'
989 USE_DEPENDENT_LIBS=1
991 _PLATFORM_DEFAULT_TOOLKIT=cairo-gtk2
993 if test -n "$CROSS_COMPILE"; then
994     OS_TARGET="${target_os}"
995     OS_ARCH=`echo $target_os | sed -e 's|/|_|g'`
996     OS_RELEASE=
997     case "${target_os}" in
998         linux*)       OS_ARCH=Linux OS_TARGET=Linux ;;
999         kfreebsd*-gnu) OS_ARCH=GNU_kFreeBSD OS_TARGET=GNU/kFreeBSD ;;
1000         gnu*)         OS_ARCH=GNU ;;
1001         solaris*)     OS_ARCH=SunOS OS_RELEASE=5 ;;
1002         mingw*)       OS_ARCH=WINNT OS_TARGET=WINNT ;;
1003         darwin*)      OS_ARCH=Darwin OS_TARGET=Darwin ;;
1004         dragonfly*)   OS_ARCH=DragonFly OS_TARGET=DragonFly ;;
1005         freebsd*)     OS_ARCH=FreeBSD OS_TARGET=FreeBSD ;;
1006         netbsd*)      OS_ARCH=NetBSD OS_TARGET=NetBSD ;;
1007         openbsd*)     OS_ARCH=OpenBSD OS_TARGET=OpenBSD ;;
1008     esac
1009     case "${target}" in
1010         *-android*|*-linuxandroid*) OS_ARCH=Linux OS_TARGET=Android ;;
1011     esac
1012 else
1013     OS_TARGET=`uname -s`
1014     OS_ARCH=`uname -s | sed -e 's|/|_|g'`
1015     OS_RELEASE=`uname -r`
1018 # Before this used `uname -m` when not cross compiling
1019 # but that breaks when you have a 64 bit kernel with a 32 bit userland.
1020 OS_TEST="${target_cpu}"
1022 HOST_OS_ARCH=`echo $host_os | sed -e 's|/|_|g'`
1024 #######################################################################
1025 # Master "Core Components" macros for getting the OS target           #
1026 #######################################################################
1029 # If OS_TARGET is not specified, it defaults to $(OS_ARCH), i.e., no
1030 # cross-compilation.
1034 # Define and override various archtecture-specific variables, including
1035 # HOST_OS_ARCH
1036 # OS_ARCH
1037 # OS_TEST
1038 # OS_TARGET
1039 # OS_RELEASE
1040 # OS_MINOR_RELEASE
1043 case "$HOST_OS_ARCH" in
1044 mingw*)
1045     HOST_OS_ARCH=WINNT
1046     ;;
1047 darwin*)
1048     HOST_OS_ARCH=Darwin
1049     ;;
1050 linux*)
1051     HOST_OS_ARCH=Linux
1052     ;;
1053 kfreebsd*-gnu)
1054     HOST_OS_ARCH=GNU_kFreeBSD
1055     ;;
1056 gnu*)
1057     HOST_OS_ARCH=GNU
1058     ;;
1059 dragonfly*)
1060     HOST_OS_ARCH=DragonFly
1061     ;;
1062 freebsd*)
1063     HOST_OS_ARCH=FreeBSD
1064     ;;
1065 netbsd*)
1066     HOST_OS_ARCH=NetBSD
1067     ;;
1068 openbsd*)
1069     HOST_OS_ARCH=OpenBSD
1070     ;;
1071 solaris*)
1072     HOST_OS_ARCH=SunOS
1073     SOLARIS_SUNPRO_CC=
1074     SOLARIS_SUNPRO_CXX=
1075     if test -z "$GNU_CC"; then
1076         if test "`$CC -V 2>&1 | egrep -c 'Sun.*C '`" != "0"; then
1077             SOLARIS_SUNPRO_CC=1
1078        fi
1079     fi
1081     if test -z "$GNU_CXX"; then
1082        if test "`$CXX -V 2>&1 | egrep -c 'Sun.*C\+\+ '`" != "0"; then
1083            SOLARIS_SUNPRO_CXX=1
1084        fi
1085     fi
1086     AC_SUBST(SOLARIS_SUNPRO_CC)
1087     AC_SUBST(SOLARIS_SUNPRO_CXX)
1088     ;;
1089 esac
1091 case "$OS_ARCH" in
1092 WINNT)
1093     if test -z "$CROSS_COMPILE" ; then
1094         OS_TEST=`uname -p`
1095     fi
1096     ;;
1097 Windows_NT)
1099 # If uname -s returns "Windows_NT", we assume that we are using
1100 # the uname.exe in MKS toolkit.
1102 # The -r option of MKS uname only returns the major version number.
1103 # So we need to use its -v option to get the minor version number.
1104 # Moreover, it doesn't have the -p option, so we need to use uname -m.
1106     OS_ARCH=WINNT
1107     OS_TARGET=WINNT
1108     OS_MINOR_RELEASE=`uname -v`
1109     if test "$OS_MINOR_RELEASE" = "00"; then
1110         OS_MINOR_RELEASE=0
1111     fi
1112     OS_RELEASE="${OS_RELEASE}.${OS_MINOR_RELEASE}"
1113     ;;
1114 MINGW*_NT*)
1116 # If uname -s returns MINGW32_NT-5.1, we assume that we are using
1117 # the uname.exe in the MSYS tools.
1119     OS_RELEASE=`expr $OS_ARCH : '.*NT-\(.*\)'`
1120     OS_ARCH=WINNT
1121     OS_TARGET=WINNT
1122     ;;
1123 AIX)
1124     OS_RELEASE=`uname -v`.`uname -r`
1125     OS_TEST=${target_cpu}
1126     ;;
1127 Darwin)
1128     case "${target_cpu}" in
1129     powerpc*)
1130         OS_TEST=ppc
1131         ;;
1132     i*86*)
1133         OS_TEST=i386
1134         ;;
1135     x86_64)
1136         OS_TEST=x86_64
1137         ;;
1138     *)
1139         if test -z "$CROSS_COMPILE" ; then
1140             OS_TEST=`uname -p`
1141         fi
1142         ;;
1143     esac
1144     ;;
1145 esac
1147 # Only set CPU_ARCH if we recognize the value of OS_TEST
1149 case "$OS_TEST" in
1150 *86 | i86pc)
1151     CPU_ARCH=x86
1152     ;;
1154 powerpc64 | ppc64 | powerpc64le | ppc64le)
1155     CPU_ARCH=ppc64
1156     ;;
1158 powerpc | ppc | rs6000)
1159     CPU_ARCH=ppc
1160     ;;
1162 Alpha | alpha | ALPHA)
1163     CPU_ARCH=Alpha
1164     ;;
1166 s390)
1167     CPU_ARCH=s390
1168     ;;
1170 s390x)
1171     CPU_ARCH=s390x
1172     ;;
1174 hppa* | parisc)
1175     CPU_ARCH=hppa
1176     ;;
1178 sun4u | sparc*)
1179     CPU_ARCH=sparc
1180     ;;
1182 x86_64 | ia64)
1183     CPU_ARCH="$OS_TEST"
1184     ;;
1186 arm*)
1187     CPU_ARCH=arm
1188     ;;
1190 mips|mipsel)
1191     CPU_ARCH="mips"
1192     ;;
1194 aarch64*)
1195     CPU_ARCH=aarch64
1196     ;;
1197 esac
1199 if test -z "$OS_TARGET"; then
1200     OS_TARGET=$OS_ARCH
1202 OS_CONFIG="${OS_TARGET}${OS_RELEASE}"
1204 dnl Set INTEL_ARCHITECTURE if we're compiling for x86-32 or x86-64.
1205 dnl ===============================================================
1206 INTEL_ARCHITECTURE=
1207 case "$OS_TEST" in
1208     x86_64|i?86)
1209       INTEL_ARCHITECTURE=1
1210 esac
1212 dnl Configure platform-specific CPU architecture compiler options.
1213 dnl ==============================================================
1214 MOZ_ARCH_OPTS
1216 dnl =================================================================
1217 dnl Set up and test static assertion macros used to avoid AC_TRY_RUN,
1218 dnl which is bad when cross compiling.
1219 dnl =================================================================
1220 if test "$COMPILE_ENVIRONMENT"; then
1221 configure_static_assert_macros='
1222 #define CONFIGURE_STATIC_ASSERT(condition) CONFIGURE_STATIC_ASSERT_IMPL(condition, __LINE__)
1223 #define CONFIGURE_STATIC_ASSERT_IMPL(condition, line) CONFIGURE_STATIC_ASSERT_IMPL2(condition, line)
1224 #define CONFIGURE_STATIC_ASSERT_IMPL2(condition, line) typedef int static_assert_line_##line[(condition) ? 1 : -1]
1227 dnl test that the macros actually work:
1228 AC_MSG_CHECKING(that static assertion macros used in autoconf tests work)
1229 AC_CACHE_VAL(ac_cv_static_assertion_macros_work,
1230  [AC_LANG_SAVE
1231   AC_LANG_C
1232   ac_cv_static_assertion_macros_work="yes"
1233   AC_TRY_COMPILE([$configure_static_assert_macros],
1234                  [CONFIGURE_STATIC_ASSERT(1)],
1235                  ,
1236                  ac_cv_static_assertion_macros_work="no")
1237   AC_TRY_COMPILE([$configure_static_assert_macros],
1238                  [CONFIGURE_STATIC_ASSERT(0)],
1239                  ac_cv_static_assertion_macros_work="no",
1240                  )
1241   AC_LANG_CPLUSPLUS
1242   AC_TRY_COMPILE([$configure_static_assert_macros],
1243                  [CONFIGURE_STATIC_ASSERT(1)],
1244                  ,
1245                  ac_cv_static_assertion_macros_work="no")
1246   AC_TRY_COMPILE([$configure_static_assert_macros],
1247                  [CONFIGURE_STATIC_ASSERT(0)],
1248                  ac_cv_static_assertion_macros_work="no",
1249                  )
1250   AC_LANG_RESTORE
1251  ])
1252 AC_MSG_RESULT("$ac_cv_static_assertion_macros_work")
1253 if test "$ac_cv_static_assertion_macros_work" = "no"; then
1254     AC_MSG_ERROR([Compiler cannot compile macros used in autoconf tests.])
1256 fi # COMPILE_ENVIRONMENT
1258 dnl ========================================================
1259 dnl Android libstdc++, placed here so it can use MOZ_ARCH
1260 dnl computed above.
1261 dnl ========================================================
1263 MOZ_ANDROID_STLPORT
1265 dnl ========================================================
1266 dnl Suppress Clang Argument Warnings
1267 dnl ========================================================
1268 if test -n "$CLANG_CC"; then
1269     _WARNINGS_CFLAGS="-Qunused-arguments ${_WARNINGS_CFLAGS}"
1270     CPPFLAGS="-Qunused-arguments ${CPPFLAGS}"
1272 if test -n "$CLANG_CXX"; then
1273     _WARNINGS_CXXFLAGS="-Qunused-arguments ${_WARNINGS_CXXFLAGS}"
1276 dnl ========================================================
1277 dnl = Use Address Sanitizer
1278 dnl ========================================================
1279 MOZ_ARG_ENABLE_BOOL(address-sanitizer,
1280 [  --enable-address-sanitizer       Enable Address Sanitizer (default=no)],
1281     MOZ_ASAN=1,
1282     MOZ_ASAN= )
1283 if test -n "$MOZ_ASAN"; then
1284     MOZ_LLVM_HACKS=1
1285     AC_DEFINE(MOZ_ASAN)
1286     MOZ_PATH_PROG(LLVM_SYMBOLIZER, llvm-symbolizer)
1288 AC_SUBST(MOZ_ASAN)
1289 AC_SUBST(LLVM_SYMBOLIZER)
1291 dnl ========================================================
1292 dnl = Enable hacks required for LLVM instrumentations
1293 dnl ========================================================
1294 MOZ_ARG_ENABLE_BOOL(llvm-hacks,
1295 [  --enable-llvm-hacks       Enable workarounds required for several LLVM instrumentations (default=no)],
1296     MOZ_LLVM_HACKS=1,
1297     MOZ_LLVM_HACKS= )
1298 if test -n "$MOZ_LLVM_HACKS"; then
1299     MOZ_NO_WLZDEFS=1
1300     MOZ_CFLAGS_NSS=1
1302 AC_SUBST(MOZ_NO_WLZDEFS)
1303 AC_SUBST(MOZ_CFLAGS_NSS)
1305 dnl ========================================================
1306 dnl GNU specific defaults
1307 dnl ========================================================
1308 if test "$GNU_CC"; then
1309     MMX_FLAGS="-mmmx"
1310     SSE_FLAGS="-msse"
1311     SSE2_FLAGS="-msse2"
1312     # Per bug 719659 comment 2, some of the headers on ancient build machines
1313     # may require gnu89 inline semantics.  But otherwise, we use C99.
1314     # But on OS X we just use C99 plus GNU extensions, in order to fix
1315     # bug 917526.
1316     CFLAGS="$CFLAGS -std=gnu99"
1317     if test "${OS_ARCH}" != Darwin; then
1318         CFLAGS="$CFLAGS -fgnu89-inline"
1319     fi
1320     # FIXME: Let us build with strict aliasing. bug 414641.
1321     CFLAGS="$CFLAGS -fno-strict-aliasing"
1322     MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -Wl,-h,$(notdir $@) -o $@'
1323     MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -Wl,-h,$(notdir $@) -o $@'
1324     WARNINGS_AS_ERRORS='-Werror'
1325     DSO_CFLAGS=''
1326     DSO_PIC_CFLAGS='-fPIC'
1327     ASFLAGS="$ASFLAGS -fPIC"
1328     AC_MSG_CHECKING([for --noexecstack option to as])
1329     _SAVE_CFLAGS=$CFLAGS
1330     CFLAGS="$CFLAGS -Wa,--noexecstack"
1331     AC_TRY_COMPILE(,,AC_MSG_RESULT([yes])
1332                      [ASFLAGS="$ASFLAGS -Wa,--noexecstack"],
1333                      AC_MSG_RESULT([no]))
1334     CFLAGS=$_SAVE_CFLAGS
1335     AC_MSG_CHECKING([for -z noexecstack option to ld])
1336     _SAVE_LDFLAGS=$LDFLAGS
1337     LDFLAGS="$LDFLAGS -Wl,-z,noexecstack"
1338     AC_TRY_LINK(,,AC_MSG_RESULT([yes]),
1339                   AC_MSG_RESULT([no])
1340                   LDFLAGS=$_SAVE_LDFLAGS)
1342     AC_MSG_CHECKING([for -z text option to ld])
1343     _SAVE_LDFLAGS=$LDFLAGS
1344     LDFLAGS="$LDFLAGS -Wl,-z,text"
1345     AC_TRY_LINK(,,AC_MSG_RESULT([yes])
1346                   [NSPR_LDFLAGS="$NSPR_LDFLAGS -Wl,-z,text"],
1347                   AC_MSG_RESULT([no])
1348                   LDFLAGS=$_SAVE_LDFLAGS)
1350     AC_MSG_CHECKING([for --build-id option to ld])
1351     _SAVE_LDFLAGS=$LDFLAGS
1352     LDFLAGS="$LDFLAGS -Wl,--build-id"
1353     AC_TRY_LINK(,,AC_MSG_RESULT([yes])
1354                   [NSPR_LDFLAGS="$NSPR_LDFLAGS -Wl,--build-id"],
1355                   AC_MSG_RESULT([no])
1356                   LDFLAGS=$_SAVE_LDFLAGS)
1358     AC_MSG_CHECKING([for --ignore-unresolved-symbol option to ld])
1359     HAVE_LINKER_SUPPORT_IGNORE_UNRESOLVED=
1360     _SAVE_LDFLAGS=$LDFLAGS
1361     LDFLAGS="$LDFLAGS -Wl,--ignore-unresolved-symbol,environ"
1362     AC_TRY_LINK(,,AC_MSG_RESULT([yes])
1363                   [HAVE_LINKER_SUPPORT_IGNORE_UNRESOLVED=1],
1364                   AC_MSG_RESULT([no]))
1365     LDFLAGS=$_SAVE_LDFLAGS
1367     # Check for -mssse3 on $CC
1368     AC_MSG_CHECKING([if toolchain supports -mssse3 option])
1369     HAVE_TOOLCHAIN_SUPPORT_MSSSE3=
1370     _SAVE_CFLAGS=$CFLAGS
1371     CFLAGS="$CFLAGS -mssse3"
1372     AC_TRY_COMPILE([asm ("pmaddubsw %xmm2,%xmm3");],,AC_MSG_RESULT([yes])
1373                      [HAVE_TOOLCHAIN_SUPPORT_MSSSE3=1],
1374                      AC_MSG_RESULT([no]))
1375     CFLAGS=$_SAVE_CFLAGS
1377     # Check for -msse4.1 on $CC
1378     AC_MSG_CHECKING([if toolchain supports -msse4.1 option])
1379     HAVE_TOOLCHAIN_SUPPORT_MSSE4_1=
1380     _SAVE_CFLAGS=$CFLAGS
1381     CFLAGS="$CFLAGS -msse4.1"
1382     AC_TRY_COMPILE([asm ("pmulld %xmm6,%xmm0");],,AC_MSG_RESULT([yes])
1383                      [HAVE_TOOLCHAIN_SUPPORT_MSSE4_1=1],
1384                      AC_MSG_RESULT([no]))
1385     CFLAGS=$_SAVE_CFLAGS
1387     case "${CPU_ARCH}" in
1388     x86 | x86_64)
1389       AC_MSG_CHECKING(for x86 AVX2 asm support in compiler)
1390       AC_TRY_COMPILE([],
1391                      [asm volatile ("vpermq      \$0xd8,%ymm0,%ymm0 \n");],
1392                      result="yes", result="no")
1393       AC_MSG_RESULT("$result")
1394       if test "$result" = "yes"; then
1395           HAVE_X86_AVX2=1
1396           AC_DEFINE(HAVE_X86_AVX2)
1397           AC_SUBST(HAVE_X86_AVX2)
1398       fi
1399     esac
1401     DSO_LDOPTS='-shared'
1402     if test "$GCC_USE_GNU_LD"; then
1403         # Some tools like ASan use a runtime library that is only
1404         # linked against executables, so we must allow undefined
1405         # symbols for shared objects in some cases.
1406         if test -z "$MOZ_NO_WLZDEFS"; then
1407             # Don't allow undefined symbols in libraries
1408             DSO_LDOPTS="$DSO_LDOPTS -Wl,-z,defs"
1410             # BSDs need `environ' exposed for posix_spawn (bug 753046)
1411             case "$OS_TARGET" in
1412             DragonFly|FreeBSD|NetBSD|OpenBSD)
1413                 if test -n "$HAVE_LINKER_SUPPORT_IGNORE_UNRESOLVED"; then
1414                     DSO_LDOPTS="$DSO_LDOPTS -Wl,--ignore-unresolved-symbol,environ"
1415                 else
1416                     DSO_LDOPTS="$DSO_LDOPTS -Wl,--warn-unresolved-symbols"
1417                 fi
1418                 ;;
1419             esac
1420         fi
1421     fi
1423     # Turn on GNU-specific warnings:
1424     # -Wall - turn on a lot of warnings
1425     # -Wpointer-arith - good to have
1426     # -Wdeclaration-after-statement - MSVC doesn't like these
1427     # -Werror=return-type - catches missing returns, zero false positives
1428     # -Werror=int-to-pointer-cast - catches cast to pointer from integer of different size
1429     # -Wtype-limits - catches overflow bugs, few false positives
1430     # -Wempty-body - catches bugs, e.g. "if (c); foo();", few false positives
1431     # -Wsign-compare - catches comparison of signed and unsigned types
1432     #
1433     _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Wall -Wpointer-arith -Wdeclaration-after-statement"
1434     MOZ_C_SUPPORTS_WARNING(-W, error=return-type, ac_c_has_werror_return_type)
1435     MOZ_C_SUPPORTS_WARNING(-W, error=int-to-pointer-cast, ac_c_has_werror_int_to_pointer_cast)
1436     MOZ_C_SUPPORTS_WARNING(-W, type-limits, ac_c_has_wtype_limits)
1437     MOZ_C_SUPPORTS_WARNING(-W, empty-body, ac_c_has_wempty_body)
1438     MOZ_C_SUPPORTS_WARNING(-W, sign-compare, ac_c_has_sign_compare)
1440     # Turn off the following warnings that -Wall turns on:
1441     # -Wno-unused - lots of violations in third-party code
1442     #
1443     _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Wno-unused"
1445     if test -z "$INTEL_CC" -a -z "$CLANG_CC"; then
1446        # Don't use -Wcast-align with ICC or clang
1447        case "$CPU_ARCH" in
1448            # And don't use it on hppa, ia64, sparc, arm, since it's noisy there
1449            hppa | ia64 | sparc | arm)
1450            ;;
1451            *)
1452         _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Wcast-align"
1453            ;;
1454        esac
1455     fi
1457     _DEFINES_CFLAGS='-include $(DEPTH)/mozilla-config.h -DMOZILLA_CLIENT'
1458     _USE_CPP_INCLUDE_FLAG=1
1459     ASFLAGS="$ASFLAGS $_DEFINES_CFLAGS"
1461 elif test "$SOLARIS_SUNPRO_CC"; then
1462     DSO_CFLAGS=''
1463     if test "$CPU_ARCH" = "sparc"; then
1464         # for Sun Studio on Solaris/SPARC
1465         DSO_PIC_CFLAGS='-xcode=pic32'
1466     else
1467         DSO_PIC_CFLAGS='-KPIC'
1468     fi
1469     _DEFINES_CFLAGS='$(ACDEFINES) -D_MOZILLA_CONFIG_H_ -DMOZILLA_CLIENT'
1470 else
1471     MKSHLIB='$(LD) $(DSO_LDOPTS) -h $(notdir $@) -o $@'
1472     MKCSHLIB='$(LD) $(DSO_LDOPTS) -h $(notdir $@) -o $@'
1474     DSO_LDOPTS='-shared'
1475     if test "$GNU_LD"; then
1476         # Don't allow undefined symbols in libraries
1477         DSO_LDOPTS="$DSO_LDOPTS -z defs"
1478     fi
1480     DSO_CFLAGS=''
1481     DSO_PIC_CFLAGS='-KPIC'
1482     _DEFINES_CFLAGS='$(ACDEFINES) -D_MOZILLA_CONFIG_H_ -DMOZILLA_CLIENT'
1485 if test "$GNU_CXX"; then
1486     # FIXME: Let us build with strict aliasing. bug 414641.
1487     CXXFLAGS="$CXXFLAGS -fno-exceptions -fno-strict-aliasing"
1489     # Turn on GNU-specific warnings:
1490     # -Wall - turn on a lot of warnings
1491     # -Wpointer-arith - good to have
1492     # -Woverloaded-virtual - ???
1493     # -Werror=return-type - catches missing returns, zero false positives
1494     # -Werror=int-to-pointer-cast - catches cast to pointer from integer of different size
1495     # -Wtype-limits - catches overflow bugs, few false positives
1496     # -Wempty-body - catches bugs, e.g. "if (c); foo();", few false positives
1497     # -Wsign-compare - catches comparison of signed and unsigned types
1498     #
1499     _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Wall -Wpointer-arith -Woverloaded-virtual"
1500     MOZ_CXX_SUPPORTS_WARNING(-W, error=return-type, ac_cxx_has_werror_return_type)
1501     MOZ_CXX_SUPPORTS_WARNING(-W, error=int-to-pointer-cast, ac_cxx_has_werror_int_to_pointer_cast)
1502     MOZ_CXX_SUPPORTS_WARNING(-W, type-limits, ac_cxx_has_wtype_limits)
1503     MOZ_CXX_SUPPORTS_WARNING(-W, empty-body, ac_cxx_has_wempty_body)
1504     MOZ_CXX_SUPPORTS_WARNING(-W, sign-compare, ac_cxx_has_sign_compare)
1506     # Turn off the following warnings that -Wall turns on:
1507     # -Wno-invalid-offsetof - we use offsetof on non-POD types frequently
1508     # -Wno-inline-new-delete - we inline 'new' and 'delete' in mozalloc
1509     #   for performance reasons, and because GCC and clang accept it (though
1510     #   clang warns about it).
1511     #
1512     MOZ_CXX_SUPPORTS_WARNING(-Wno-, invalid-offsetof, ac_cxx_has_wno_invalid_offsetof)
1513     MOZ_CXX_SUPPORTS_WARNING(-Wno-, inline-new-delete, ac_cxx_has_wno_inline_new_delete)
1515     if test -z "$INTEL_CXX" -a -z "$CLANG_CXX"; then
1516        # Don't use -Wcast-align with ICC or clang
1517        case "$CPU_ARCH" in
1518            # And don't use it on hppa, ia64, sparc, arm, since it's noisy there
1519            hppa | ia64 | sparc | arm)
1520            ;;
1521            *)
1522         _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Wcast-align"
1523            ;;
1524        esac
1525     fi
1527     _DEFINES_CXXFLAGS='-DMOZILLA_CLIENT -include $(DEPTH)/mozilla-config.h'
1528     _USE_CPP_INCLUDE_FLAG=1
1530     # Recent clang and gcc support C++11 deleted functions without warnings if
1531     # compiling with -std=c++0x or -std=gnu++0x (or c++11 or gnu++11 in very new
1532     # versions).  We can't use -std=c++0x yet, so gcc's support must remain
1533     # unused.  But clang's warning can be disabled, so when compiling with clang
1534     # we use it to opt out of the warning, enabling (macro-encapsulated) use of
1535     # deleted function syntax.
1536     if test "$CLANG_CXX"; then
1537         _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Wno-c++0x-extensions"
1538         MOZ_CXX_SUPPORTS_WARNING(-Wno-, extended-offsetof, ac_cxx_has_wno_extended_offsetof)
1539     fi
1541 else
1542     _DEFINES_CXXFLAGS='-DMOZILLA_CLIENT -D_MOZILLA_CONFIG_H_ $(ACDEFINES)'
1545 dnl gcc can come with its own linker so it is better to use the pass-thru calls
1546 dnl MKSHLIB_FORCE_ALL is used to force the linker to include all object
1547 dnl files present in an archive. MKSHLIB_UNFORCE_ALL reverts the linker to
1548 dnl normal behavior.
1549 dnl ========================================================
1550 MKSHLIB_FORCE_ALL=
1551 MKSHLIB_UNFORCE_ALL=
1553 if test "$COMPILE_ENVIRONMENT"; then
1554 if test "$GNU_CC"; then
1555   AC_MSG_CHECKING(whether ld has archive extraction flags)
1556   AC_CACHE_VAL(ac_cv_mkshlib_force_and_unforce,
1557    [_SAVE_LDFLAGS=$LDFLAGS; _SAVE_LIBS=$LIBS
1558     ac_cv_mkshlib_force_and_unforce="no"
1559     exec 3<&0 <<LOOP_INPUT
1560   force="-Wl,--whole-archive";   unforce="-Wl,--no-whole-archive"
1561   force="-Wl,-z -Wl,allextract"; unforce="-Wl,-z -Wl,defaultextract"
1562   force="-Wl,-all";              unforce="-Wl,-none"
1563 LOOP_INPUT
1564     while read line
1565     do
1566       eval $line
1567       LDFLAGS=$force
1568       LIBS=$unforce
1569       AC_TRY_LINK(,, ac_cv_mkshlib_force_and_unforce=$line; break)
1570     done
1571     exec 0<&3 3<&-
1572     LDFLAGS=$_SAVE_LDFLAGS; LIBS=$_SAVE_LIBS
1573    ])
1574   if test "$ac_cv_mkshlib_force_and_unforce" = "no"; then
1575     AC_MSG_RESULT(no)
1576   else
1577     AC_MSG_RESULT(yes)
1578     eval $ac_cv_mkshlib_force_and_unforce
1579     MKSHLIB_FORCE_ALL=$force
1580     MKSHLIB_UNFORCE_ALL=$unforce
1581   fi
1582 fi # GNU_CC
1583 fi # COMPILE_ENVIRONMENT
1585 dnl ========================================================
1586 dnl Checking for 64-bit OS
1587 dnl ========================================================
1588 if test "$COMPILE_ENVIRONMENT"; then
1589 AC_LANG_SAVE
1590 AC_LANG_C
1591 AC_MSG_CHECKING(for 64-bit OS)
1592 AC_TRY_COMPILE([$configure_static_assert_macros],
1593                [CONFIGURE_STATIC_ASSERT(sizeof(void*) == 8)],
1594                result="yes", result="no")
1595 AC_MSG_RESULT("$result")
1596 if test "$result" = "yes"; then
1597     AC_DEFINE(HAVE_64BIT_OS)
1598     HAVE_64BIT_OS=1
1600 AC_SUBST(HAVE_64BIT_OS)
1601 AC_LANG_RESTORE
1602 fi # COMPILE_ENVIRONMENT
1604 dnl ========================================================
1605 dnl = Use profiling compile flags
1606 dnl ========================================================
1607 MOZ_ARG_ENABLE_BOOL(profiling,
1608 [  --enable-profiling      Set compile flags necessary for using sampling profilers (e.g. shark, perf)],
1609     MOZ_PROFILING=1,
1610     MOZ_PROFILING= )
1612 dnl ========================================================
1613 dnl = Turn on systrace for android/b2g.
1614 dnl ========================================================
1615 MOZ_ARG_ENABLE_BOOL(systrace,
1616 [  --enable-systrace       Set compile flags necessary for using sampling profilers (e.g. shark, perf)],
1617     MOZ_USE_SYSTRACE=1,
1618     MOZ_USE_SYSTRACE= )
1619 if test -n "$MOZ_USE_SYSTRACE"; then
1620     AC_DEFINE(MOZ_USE_SYSTRACE)
1623 # For profiling builds keep the symbol information
1624 if test "$MOZ_PROFILING" -a -z "$STRIP_FLAGS"; then
1625     case "$OS_TARGET" in
1626     Linux|DragonFly|FreeBSD|NetBSD|OpenBSD)
1627         STRIP_FLAGS="--strip-debug"
1628         ;;
1629     esac
1632 dnl ========================================================
1633 dnl = Use Valgrind
1634 dnl ========================================================
1635 MOZ_ARG_ENABLE_BOOL(valgrind,
1636 [  --enable-valgrind       Enable Valgrind integration hooks (default=no)],
1637     MOZ_VALGRIND=1,
1638     MOZ_VALGRIND= )
1639 if test -n "$MOZ_VALGRIND"; then
1640     MOZ_CHECK_HEADER([valgrind/valgrind.h], [],
1641         AC_MSG_ERROR(
1642             [--enable-valgrind specified but Valgrind is not installed]))
1643     AC_DEFINE(MOZ_VALGRIND)
1645 AC_SUBST(MOZ_VALGRIND)
1647 dnl ========================================================
1648 dnl jprof
1649 dnl ========================================================
1650 MOZ_ARG_ENABLE_BOOL(jprof,
1651 [  --enable-jprof          Enable jprof profiling tool (needs mozilla/tools/jprof). Implies --enable-profiling.],
1652     MOZ_JPROF=1,
1653     MOZ_JPROF= )
1654 if test -n "$MOZ_JPROF"; then
1655     MOZ_PROFILING=1
1656     AC_DEFINE(MOZ_JPROF)
1659 dnl ========================================================
1660 dnl SPS Profiler
1661 dnl ========================================================
1662 MOZ_ENABLE_PROFILER_SPS=1
1664 case "${OS_TARGET}" in
1665 Android)
1666     case "${CPU_ARCH}" in
1667     x86 | arm) ;;
1668     *)
1669         MOZ_ENABLE_PROFILER_SPS=
1670     esac
1671     ;;
1672 Linux)
1673     case "${CPU_ARCH}" in
1674     x86 | x86_64) ;;
1675     *)
1676         MOZ_ENABLE_PROFILER_SPS=
1677     esac
1678     ;;
1679 WINNT|Darwin) ;;
1681     MOZ_ENABLE_PROFILER_SPS=
1682     ;;
1683 esac
1685 if test -n "$MOZ_ENABLE_PROFILER_SPS"; then
1686     AC_DEFINE(MOZ_ENABLE_PROFILER_SPS)
1689 dnl ========================================================
1690 dnl shark
1691 dnl ========================================================
1692 MOZ_ARG_ENABLE_BOOL(shark,
1693 [  --enable-shark          Enable shark remote profiling. Implies --enable-profiling.],
1694     MOZ_SHARK=1,
1695     MOZ_SHARK= )
1696 if test -n "$MOZ_SHARK"; then
1697     MOZ_PROFILING=1
1698     AC_DEFINE(MOZ_SHARK)
1701 dnl ========================================================
1702 dnl instruments
1703 dnl ========================================================
1704 MOZ_ARG_ENABLE_BOOL(instruments,
1705 [  --enable-instruments    Enable instruments remote profiling. Implies --enable-profiling.],
1706     MOZ_INSTRUMENTS=1,
1707     MOZ_INSTRUMENTS= )
1708 if test -n "$MOZ_INSTRUMENTS"; then
1709     MOZ_PROFILING=1
1710     AC_DEFINE(MOZ_INSTRUMENTS)
1713 dnl ========================================================
1714 dnl callgrind
1715 dnl ========================================================
1716 MOZ_ARG_ENABLE_BOOL(callgrind,
1717 [  --enable-callgrind      Enable callgrind profiling. Implies --enable-profiling.],
1718     MOZ_CALLGRIND=1,
1719     MOZ_CALLGRIND= )
1720 if test -n "$MOZ_CALLGRIND"; then
1721     MOZ_PROFILING=1
1722     AC_DEFINE(MOZ_CALLGRIND)
1725 dnl ========================================================
1726 dnl vtune
1727 dnl ========================================================
1728 MOZ_ARG_ENABLE_BOOL(vtune,
1729 [  --enable-vtune          Enable vtune profiling. Implies --enable-profiling.],
1730     MOZ_VTUNE=1,
1731     MOZ_VTUNE= )
1732 if test -n "$MOZ_VTUNE"; then
1733     MOZ_PROFILING=1
1734     AC_DEFINE(MOZ_VTUNE)
1737 dnl ========================================================
1738 dnl Profiling
1739 dnl ========================================================
1740 if test -n "$MOZ_PROFILING"; then
1741     AC_DEFINE(MOZ_PROFILING)
1744 dnl ========================================================
1745 dnl System overrides of the defaults for host
1746 dnl ========================================================
1747 case "$host" in
1748 *mingw*)
1749     if test -n "$_WIN32_MSVC"; then
1750         HOST_AR=lib
1751         HOST_AR_FLAGS='-NOLOGO -OUT:$@'
1752         HOST_CFLAGS="$HOST_CFLAGS -TC -nologo"
1753         HOST_RANLIB='echo ranlib'
1754     else
1755         HOST_CFLAGS="$HOST_CFLAGS -mwindows"
1756     fi
1757     HOST_CFLAGS="$HOST_CFLAGS -DXP_WIN32 -DXP_WIN -DWIN32 -D_WIN32 -DNO_X11 -D_CRT_SECURE_NO_WARNINGS"
1758     HOST_NSPR_MDCPUCFG='\"md/_winnt.cfg\"'
1759     HOST_OPTIMIZE_FLAGS="${HOST_OPTIMIZE_FLAGS=-O2}"
1760     HOST_BIN_SUFFIX=.exe
1761     case "$host" in
1762     *mingw*)
1763         PERL="/bin/sh ${_topsrcdir}/build/msys-perl-wrapper"
1764         ;;
1765     esac
1767     case "${host_cpu}" in
1768     i*86)
1769         if test -n "$_WIN32_MSVC"; then
1770             HOST_LDFLAGS="$HOST_LDFLAGS -MACHINE:X86"
1771         fi
1772         ;;
1773     x86_64)
1774         if test -n "$_WIN32_MSVC"; then
1775             HOST_LDFLAGS="$HOST_LDFLAGS -MACHINE:X64"
1776         fi
1777         HOST_CFLAGS="$HOST_CFLAGS -D_AMD64_"
1778         ;;
1779     esac
1780     ;;
1782 *-darwin*)
1783     HOST_CFLAGS="$HOST_CFLAGS -DXP_UNIX -DXP_MACOSX -DNO_X11"
1784     HOST_NSPR_MDCPUCFG='\"md/_darwin.cfg\"'
1785     HOST_OPTIMIZE_FLAGS="${HOST_OPTIMIZE_FLAGS=-O3}"
1786     ;;
1788 *-linux*|*-kfreebsd*-gnu|*-gnu*)
1789     HOST_CFLAGS="$HOST_CFLAGS -DXP_UNIX"
1790     HOST_NSPR_MDCPUCFG='\"md/_linux.cfg\"'
1791     HOST_OPTIMIZE_FLAGS="${HOST_OPTIMIZE_FLAGS=-O3}"
1792     ;;
1795     HOST_CFLAGS="$HOST_CFLAGS -DXP_UNIX"
1796     HOST_OPTIMIZE_FLAGS="${HOST_OPTIMIZE_FLAGS=-O2}"
1797     ;;
1798 esac
1800 dnl Check for using a custom <inttypes.h> implementation
1801 dnl ========================================================
1802 AC_MSG_CHECKING(for custom <inttypes.h> implementation)
1803 if test "$MOZ_CUSTOM_INTTYPES_H"; then
1804   AC_DEFINE_UNQUOTED(MOZ_CUSTOM_INTTYPES_H, "$MOZ_CUSTOM_INTTYPES_H")
1805   AC_MSG_RESULT(using $MOZ_CUSTOM_INTTYPES_H)
1806 else
1807   AC_MSG_RESULT(none specified)
1810 dnl Get mozilla version from central milestone file
1811 MOZILLA_VERSION=`$PERL $srcdir/config/milestone.pl -topsrcdir $srcdir`
1812 MOZILLA_UAVERSION=`$PERL $srcdir/config/milestone.pl -topsrcdir $srcdir -uaversion`
1813 MOZILLA_SYMBOLVERSION=`$PERL $srcdir/config/milestone.pl -topsrcdir $srcdir -symbolversion`
1815 dnl Get version of various core apps from the version files.
1816 FIREFOX_VERSION=`cat $_topsrcdir/browser/config/version.txt`
1818 if test -z "$FIREFOX_VERSION"; then
1819     AC_MSG_ERROR([FIREFOX_VERSION is unexpectedly blank.])
1822 AC_DEFINE_UNQUOTED(MOZILLA_VERSION,"$MOZILLA_VERSION")
1823 AC_DEFINE_UNQUOTED(MOZILLA_VERSION_U,$MOZILLA_VERSION)
1824 AC_DEFINE_UNQUOTED(MOZILLA_UAVERSION,"$MOZILLA_UAVERSION")
1825 AC_SUBST(MOZILLA_SYMBOLVERSION)
1827 MOZ_DOING_LTO(lto_is_enabled)
1829 dnl ========================================================
1830 dnl System overrides of the defaults for target
1831 dnl ========================================================
1833 case "$target" in
1834 *-aix*)
1835     AC_DEFINE(AIX)
1836     if test ! "$GNU_CC"; then
1837         if test ! "$HAVE_64BIT_OS"; then
1838             # Compiling with Visual Age C++ object model compat is the
1839             # default. To compile with object model ibm, add
1840             # AIX_OBJMODEL=ibm to .mozconfig.
1841             if test "$AIX_OBJMODEL" = "ibm"; then
1842                 CXXFLAGS="$CXXFLAGS -qobjmodel=ibm"
1843             else
1844                 AIX_OBJMODEL=compat
1845             fi
1846         else
1847             AIX_OBJMODEL=compat
1848         fi
1849         AC_SUBST(AIX_OBJMODEL)
1850         DSO_LDOPTS='-qmkshrobj=1'
1851         DSO_CFLAGS='-qflag=w:w'
1852         DSO_PIC_CFLAGS=
1853         LDFLAGS="$LDFLAGS -Wl,-brtl -blibpath:/usr/lib:/lib"
1854         MOZ_FIX_LINK_PATHS=
1855         MKSHLIB='$(CXX) $(DSO_LDOPTS) -o $@'
1856         MKCSHLIB='$(CC) $(DSO_LDOPTS) -o $@'
1857         if test "$COMPILE_ENVIRONMENT"; then
1858             AC_LANG_SAVE
1859             AC_LANG_CPLUSPLUS
1860             AC_MSG_CHECKING([for IBM XLC/C++ compiler version >= 9.0.0.7])
1861             AC_TRY_COMPILE([],
1862                 [#if (__IBMCPP__ < 900)
1863                  #error "Bad compiler"
1864                  #endif],
1865                 _BAD_COMPILER=,_BAD_COMPILER=1)
1866             if test -n "$_BAD_COMPILER"; then
1867                 AC_MSG_RESULT([no])
1868                 AC_MSG_ERROR([IBM XLC/C++ 9.0.0.7 or higher is required to build.])
1869             else
1870                 AC_MSG_RESULT([yes])
1871             fi
1872             AC_LANG_RESTORE
1873             TARGET_COMPILER_ABI="ibmc"
1874             CC_VERSION=`lslpp -Lcq vac.C 2>/dev/null | awk -F: '{ print $3 }'`
1875             CXX_VERSION=`lslpp -Lcq vacpp.cmp.core 2>/dev/null | awk -F: '{ print $3 }'`
1876         fi
1877     fi
1878     case "${target_os}" in
1879     aix4.1*)
1880         DLL_SUFFIX='_shr.a'
1881         ;;
1882     esac
1883     if test "$COMPILE_ENVIRONMENT"; then
1884         MOZ_CHECK_HEADERS(sys/inttypes.h)
1885     fi
1886     AC_DEFINE(NSCAP_DISABLE_DEBUG_PTR_TYPES)
1887     ;;
1889 *-darwin*)
1890     MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -o $@'
1891     MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -o $@'
1892     MOZ_OPTIMIZE_FLAGS="-O3"
1893     # Statically disable jemalloc on 10.5 and 32-bit 10.6.  See bug 702250.
1894     if test "$HAVE_64BIT_OS"; then
1895         MOZ_MEMORY=1
1896     fi
1897     DLL_SUFFIX=".dylib"
1898     DSO_LDOPTS=''
1899     STRIP_FLAGS="$STRIP_FLAGS -x -S"
1900     # Check whether we're targeting OS X or iOS
1901     AC_CACHE_CHECK(for iOS target,
1902                    ac_cv_ios_target,
1903                    [AC_TRY_COMPILE([#include <TargetConditionals.h>
1904 #if !(TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR)
1905 #error not iOS
1906 #endif],
1907                                    [],
1908                                    ac_cv_ios_target="yes",
1909                                    ac_cv_ios_target="no")])
1910     if test "$ac_cv_ios_target" = "yes"; then
1911         AC_DEFINE(XP_IOS)
1912         AC_DEFINE(XP_DARWIN)
1913         _PLATFORM_DEFAULT_TOOLKIT='cairo-uikit'
1914     else
1915         AC_DEFINE(XP_MACOSX)
1916         AC_DEFINE(XP_DARWIN)
1917         _PLATFORM_DEFAULT_TOOLKIT='cairo-cocoa'
1918         # The ExceptionHandling framework is needed for Objective-C exception
1919         # logging code in nsObjCExceptions.h. Currently we only use that in debug
1920         # builds.
1921         MOZ_DEBUG_LDFLAGS="$MOZ_DEBUG_LDFLAGS -framework ExceptionHandling";
1922     fi
1923     TARGET_NSPR_MDCPUCFG='\"md/_darwin.cfg\"'
1925     if test "x$lto_is_enabled" = "xyes"; then
1926         echo "Skipping -dead_strip because lto is enabled."
1927     dnl DTrace and -dead_strip don't interact well. See bug 403132.
1928     dnl ===================================================================
1929     elif test "x$enable_dtrace" = "xyes"; then
1930         echo "Skipping -dead_strip because DTrace is enabled. See bug 403132."
1931     else
1932         dnl check for the presence of the -dead_strip linker flag
1933         AC_MSG_CHECKING([for -dead_strip option to ld])
1934         _SAVE_LDFLAGS=$LDFLAGS
1935         LDFLAGS="$LDFLAGS -Wl,-dead_strip"
1936         AC_TRY_LINK(,[return 0;],_HAVE_DEAD_STRIP=1,_HAVE_DEAD_STRIP=)
1937         if test -n "$_HAVE_DEAD_STRIP" ; then
1938             AC_MSG_RESULT([yes])
1939             MOZ_OPTIMIZE_LDFLAGS="-Wl,-dead_strip"
1940         else
1941             AC_MSG_RESULT([no])
1942         fi
1944         LDFLAGS=$_SAVE_LDFLAGS
1945     fi
1947     dnl With newer linkers we need to pass -allow_heap_execute because of
1948     dnl Microsoft Silverlight (5.1.10411.0 at least).
1949     AC_MSG_CHECKING([for -allow_heap_execute option to ld])
1950     _SAVE_LDFLAGS=$LDFLAGS
1951     LDFLAGS="$LDFLAGS -Wl,-allow_heap_execute"
1952     AC_TRY_LINK(,[return 0;],_HAVE_ALLOW_HEAP_EXECUTE=1,
1953                 _HAVE_ALLOW_HEAP_EXECUTE=)
1954     if test -n "$_HAVE_ALLOW_HEAP_EXECUTE" ; then
1955         AC_MSG_RESULT([yes])
1956         MOZ_ALLOW_HEAP_EXECUTE_FLAGS="-Wl,-allow_heap_execute"
1957     else
1958         AC_MSG_RESULT([no])
1959     fi
1960     LDFLAGS=$_SAVE_LDFLAGS
1962     MOZ_FIX_LINK_PATHS='-Wl,-executable_path,$(LIBXUL_DIST)/bin'
1963     ;;
1965 ia64*-hpux*)
1966     DLL_SUFFIX=".so"
1967     if test ! "$GNU_CC"; then
1968        DSO_LDOPTS='-b'
1969        DSO_CFLAGS=""
1970        DSO_PIC_CFLAGS=
1971        MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_LDOPTS) -o $@'
1972        MKCSHLIB='$(CC) $(CFLAGS) $(DSO_LDOPTS) -o $@'
1973        CXXFLAGS="$CXXFLAGS -Wc,-ansi_for_scope,on"
1974     else
1975        DSO_LDOPTS='-b -E'
1976        MKSHLIB='$(LD) $(DSO_LDOPTS) -o $@'
1977        MKCSHLIB='$(LD) $(DSO_LDOPTS) -o $@'
1978     fi
1979     MOZ_FIX_LINK_PATHS=
1980     AC_DEFINE(NSCAP_DISABLE_DEBUG_PTR_TYPES)
1981     AC_DEFINE(_LARGEFILE64_SOURCE)
1982     ;;
1984 *-hpux*)
1985     DLL_SUFFIX=".sl"
1986     if test ! "$GNU_CC"; then
1987         DSO_LDOPTS='-b -Wl,+s'
1988         DSO_CFLAGS=""
1989         DSO_PIC_CFLAGS="+Z"
1990         MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_LDOPTS) -L$(LIBXUL_DIST)/bin -o $@'
1991         MKCSHLIB='$(LD) -b +s -L$(LIBXUL_DIST)/bin -o $@'
1992         CXXFLAGS="$CXXFLAGS -Wc,-ansi_for_scope,on"
1993     else
1994         DSO_LDOPTS='-b -E +s'
1995         MKSHLIB='$(LD) $(DSO_LDOPTS) -L$(LIBXUL_DIST)/bin -L$(LIBXUL_DIST)/lib -o $@'
1996         MKCSHLIB='$(LD) $(DSO_LDOPTS) -L$(LIBXUL_DIST)/bin -L$(LIBXUL_DIST)/lib -o $@'
1997     fi
1998     MOZ_POST_PROGRAM_COMMAND='chatr +s enable'
1999     AC_DEFINE(NSCAP_DISABLE_DEBUG_PTR_TYPES)
2000     ;;
2002 *-android*|*-linuxandroid*)
2003     AC_DEFINE(NO_PW_GECOS)
2004     no_x=yes
2005     if test -n "$gonkdir"; then
2006         _PLATFORM_DEFAULT_TOOLKIT=cairo-gonk
2007         _PLATFORM_HAVE_RIL=1
2008         MOZ_B2G_FM=1
2009         MOZ_SYNTH_PICO=1
2010     else
2011         _PLATFORM_DEFAULT_TOOLKIT=cairo-android
2012         MOZ_LINKER=1
2013     fi
2014     TARGET_NSPR_MDCPUCFG='\"md/_linux.cfg\"'
2016     MOZ_GFX_OPTIMIZE_MOBILE=1
2017     MOZ_OPTIMIZE_FLAGS="-Os -freorder-blocks -fno-reorder-functions"
2018     ;;
2020 *-*linux*)
2021     # Note: both GNU_CC and INTEL_CC are set when using Intel's C compiler.
2022     # Similarly for GNU_CXX and INTEL_CXX.
2023     if test "$INTEL_CC" -o "$INTEL_CXX"; then
2024         # -Os has been broken on Intel's C/C++ compilers for quite a
2025         # while; Intel recommends against using it.
2026         MOZ_OPTIMIZE_FLAGS="-O2"
2027     elif test "$GNU_CC" -o "$GNU_CXX"; then
2028         case $GCC_VERSION in
2029         4.5.*)
2030             # -Os is broken on gcc 4.5.x we need to tweak it to get good results.
2031             MOZ_OPTIMIZE_SIZE_TWEAK="-finline-limit=50"
2032         esac
2033         MOZ_PGO_OPTIMIZE_FLAGS="-O3"
2034         MOZ_OPTIMIZE_FLAGS="-Os -freorder-blocks $MOZ_OPTIMIZE_SIZE_TWEAK"
2035     fi
2037     TARGET_NSPR_MDCPUCFG='\"md/_linux.cfg\"'
2039     MOZ_MEMORY=1
2041     case "${target_cpu}" in
2042     alpha*)
2043         CFLAGS="$CFLAGS -mieee"
2044         CXXFLAGS="$CXXFLAGS -mieee"
2045     ;;
2046     esac
2048     if test -z "$MC"; then
2049         MC=mc.exe
2050     fi
2051     ;;
2052 *-mingw*)
2053     DSO_CFLAGS=
2054     DSO_PIC_CFLAGS=
2055     DLL_SUFFIX=.dll
2056     RC=rc.exe
2057     MC=mc.exe
2058     # certain versions of cygwin's makedepend barf on the
2059     # #include <string> vs -I./dist/include/string issue so don't use it
2060     XPCOM_FROZEN_LDOPTS='$(call EXPAND_LIBNAME_PATH,xul mozalloc,$(LIBXUL_DIST)/lib)'
2061     if test -n "$GNU_CC" -o -n "$CLANG_CC"; then
2062         CC="$CC -mwindows"
2063         CXX="$CXX -mwindows"
2064         CPP="$CPP -mwindows"
2065         CFLAGS="$CFLAGS -mms-bitfields"
2066         CXXFLAGS="$CXXFLAGS -mms-bitfields"
2067         DSO_LDOPTS='-shared'
2068         MKSHLIB='$(CXX) $(DSO_LDOPTS) -o $@'
2069         MKCSHLIB='$(CC) $(DSO_LDOPTS) -o $@'
2070         RC='$(WINDRES)'
2071         # Use static libgcc and libstdc++
2072         LDFLAGS="$LDFLAGS -static-libgcc -static-libstdc++"
2073         NSPR_LDFLAGS="$NSPR_LDFLAGS -static-libgcc"
2074         # Use temp file for windres (bug 213281)
2075         RCFLAGS='-O coff --use-temp-file'
2076         # mingw doesn't require kernel32, user32, and advapi32 explicitly
2077         LIBS="$LIBS -luuid -lgdi32 -lwinmm -lwsock32 -luserenv -lsecur32 -lnetapi32"
2078         MOZ_FIX_LINK_PATHS=
2079         DLL_PREFIX=
2080         IMPORT_LIB_SUFFIX=dll.a
2082         # We use mix of both POSIX and Win32 printf format across the tree, so format
2083         # warnings are useless on mingw.
2084         MOZ_C_SUPPORTS_WARNING(-Wno-, format, ac_c_has_wno_format)
2085         MOZ_CXX_SUPPORTS_WARNING(-Wno-, format, ac_cxx_has_wno_format)
2086     else
2087         TARGET_COMPILER_ABI=msvc
2088         HOST_CC='$(CC)'
2089         HOST_CXX='$(CXX)'
2090         HOST_LD='$(LD)'
2091         if test "$AS_BIN"; then
2092             AS="$(basename "$AS_BIN")"
2093         fi
2094         AR='lib'
2095         AR_FLAGS='-NOLOGO -OUT:$@'
2096         AR_EXTRACT=
2097         RANLIB='echo not_ranlib'
2098         STRIP='echo not_strip'
2099         PKG_SKIP_STRIP=1
2100         XARGS=xargs
2101         ZIP=zip
2102         UNZIP=unzip
2103         DOXYGEN=:
2104         ASM_SUFFIX=asm
2105         OBJ_SUFFIX=obj
2106         LIB_SUFFIX=lib
2107         DLL_PREFIX=
2108         LIB_PREFIX=
2109         IMPORT_LIB_SUFFIX=lib
2110         MKSHLIB='$(LD) -NOLOGO -DLL -OUT:$@ -PDB:$(LINK_PDBFILE) $(DSO_LDOPTS)'
2111         MKCSHLIB='$(LD) -NOLOGO -DLL -OUT:$@ -PDB:$(LINK_PDBFILE) $(DSO_LDOPTS)'
2112         MKSHLIB_FORCE_ALL=
2113         MKSHLIB_UNFORCE_ALL=
2114         DSO_LDOPTS=-SUBSYSTEM:WINDOWS
2115         _USE_CPP_INCLUDE_FLAG=1
2116         _DEFINES_CFLAGS='-FI $(DEPTH)/dist/include/mozilla-config.h -DMOZILLA_CLIENT'
2117         _DEFINES_CXXFLAGS='-FI $(DEPTH)/dist/include/mozilla-config.h -DMOZILLA_CLIENT'
2118         CFLAGS="$CFLAGS -W3 -Gy"
2119         CXXFLAGS="$CXXFLAGS -W3 -Gy"
2120         if test "$_CC_SUITE" -ge "12"; then
2121             dnl VS2013+ requires -FS when parallel building by make -jN.
2122             dnl If nothing, compiler sometimes causes C1041 error.
2123             dnl
2124             dnl Visual Studio 2013 supports -Gw flags
2125             dnl http://blogs.msdn.com/b/vcblog/archive/2013/09/11/introducing-gw-compiler-switch.aspx
2126             CFLAGS="$CFLAGS -FS -Gw"
2127             CXXFLAGS="$CXXFLAGS -FS -Gw"
2128         fi
2129         # khuey says we can safely ignore MSVC warning C4251
2130         # MSVC warning C4244 (implicit type conversion may lose data) warns
2131         # and requires workarounds for perfectly valid code.  Also, GCC/clang
2132         # don't warn about it by default. So for consistency/sanity, we turn
2133         # it off on MSVC, too.
2134         # MSVC warning C4345 warns of newly conformant behavior as of VS2003.
2135         # MSVC warning C4351 warns of newly conformant behavior as of VS2005.
2136         # MSVC warning C4482 warns when an enum value is refered specifing the
2137         # name of the enum itself.  This behavior is allowed in C++11, and the
2138         # warning has been removed in VS2012.
2139         # MSVC warning C4800 warns when a value is implicitly cast to bool,
2140         # because this also forces narrowing to a single byte, which can be a
2141         # perf hit.  But this matters so little in practice (and often we want
2142         # that behavior) that it's better to turn it off.
2143         # MSVC warning C4819 warns some UTF-8 characters (e.g. copyright sign)
2144         # on non-Western system locales even if it is in a comment.
2145         CFLAGS="$CFLAGS -wd4244 -wd4819"
2146         CXXFLAGS="$CXXFLAGS -wd4251 -wd4244 -wd4345 -wd4351 -wd4482 -wd4800 -wd4819"
2147         # make 'foo == bar;' error out
2148         CFLAGS="$CFLAGS -we4553"
2149         CXXFLAGS="$CXXFLAGS -we4553"
2150         LIBS="$LIBS kernel32.lib user32.lib gdi32.lib winmm.lib wsock32.lib advapi32.lib secur32.lib netapi32.lib"
2151         MOZ_DEBUG_LDFLAGS='-DEBUG -DEBUGTYPE:CV'
2152         WARNINGS_AS_ERRORS='-WX'
2153         MOZ_OPTIMIZE_FLAGS='-O1'
2154         MOZ_FIX_LINK_PATHS=
2155         MOZ_COMPONENT_NSPR_LIBS='$(NSPR_LIBS)'
2156         LDFLAGS="$LDFLAGS -LARGEADDRESSAWARE -NXCOMPAT"
2157         if test -z "$DEVELOPER_OPTIONS"; then
2158             LDFLAGS="$LDFLAGS -RELEASE"
2159         fi
2160         dnl For profile-guided optimization
2161         PROFILE_GEN_CFLAGS="-GL"
2162         PROFILE_GEN_LDFLAGS="-LTCG:PGINSTRUMENT"
2163         dnl XXX: PGO builds can fail with warnings treated as errors,
2164         dnl specifically "no profile data available" appears to be
2165         dnl treated as an error sometimes. This might be a consequence
2166         dnl of using WARNINGS_AS_ERRORS in some modules, combined
2167         dnl with the linker doing most of the work in the whole-program
2168         dnl optimization/PGO case. I think it's probably a compiler bug,
2169         dnl but we work around it here.
2170         PROFILE_USE_CFLAGS="-GL -wd4624 -wd4952"
2171         dnl XXX: should be -LTCG:PGOPTIMIZE, but that fails on libxul.
2172         dnl Probably also a compiler bug, but what can you do?
2173         PROFILE_USE_LDFLAGS="-LTCG:PGUPDATE"
2174         LDFLAGS="$LDFLAGS -DYNAMICBASE"
2175         dnl Minimum reqiurement of Gecko is VS2010 or later which supports
2176         dnl both SSSE3 and SSE4.1.
2177         HAVE_TOOLCHAIN_SUPPORT_MSSSE3=1
2178         HAVE_TOOLCHAIN_SUPPORT_MSSE4_1=1
2179     fi
2180     AC_DEFINE(HAVE_SNPRINTF)
2181     AC_DEFINE(_WINDOWS)
2182     AC_DEFINE(WIN32)
2183     AC_DEFINE(XP_WIN)
2184     AC_DEFINE(XP_WIN32)
2185     AC_DEFINE(HW_THREADS)
2186     AC_DEFINE(STDC_HEADERS)
2187     AC_DEFINE(WIN32_LEAN_AND_MEAN)
2188     TARGET_MD_ARCH=win32
2189     _PLATFORM_DEFAULT_TOOLKIT='cairo-windows'
2190     BIN_SUFFIX='.exe'
2191     MOZ_USER_DIR="Mozilla"
2193     dnl Hardcode to win95 for now - cls
2194     TARGET_NSPR_MDCPUCFG='\"md/_win95.cfg\"'
2196     dnl set NO_X11 defines here as the general check is skipped on win32
2197     no_x=yes
2198     AC_DEFINE(NO_X11)
2200     case "$host" in
2201     *-mingw*)
2202         MOZ_BUILD_ROOT=`cd $MOZ_BUILD_ROOT && pwd -W`
2203         if test -n "$L10NBASEDIR"; then
2204             L10NBASEDIR=`cd $L10NBASEDIR && pwd -W`
2205         fi
2206         ;;
2207     esac
2209     case "$host" in
2210     *-mingw*)
2211         if test -z "$MOZ_TOOLS"; then
2212             AC_MSG_ERROR([MOZ_TOOLS is not set])
2213         fi
2214         MOZ_TOOLS_DIR=`cd $MOZ_TOOLS && pwd -W`
2215         if test "$?" != "0" -o -z "$MOZ_TOOLS_DIR"; then
2216             AC_MSG_ERROR([cd \$MOZ_TOOLS failed. MOZ_TOOLS ==? $MOZ_TOOLS])
2217         fi
2218         MOZ_TOOLS_BIN_DIR="$(cd "$MOZ_TOOLS_DIR/bin" && pwd)"
2219         if test `echo ${PATH}: | grep -ic "$MOZ_TOOLS_BINDIR:"` = 0; then
2220             AC_MSG_ERROR([\$MOZ_TOOLS\\bin must be in your path.])
2221         fi
2222         ;;
2223     esac
2225     case "$host_os" in
2226     cygwin*|msvc*|mks*)
2227         AC_MSG_ERROR([Using a Cygwin build environment is unsupported. Configure cannot check for presence of necessary headers. Please upgrade to MozillaBuild; see https://developer.mozilla.org/en/Windows_Build_Prerequisites.])
2228         ;;
2229     esac
2231     case "$target" in
2232     i*86-*)
2233         if test "$HAVE_64BIT_OS"; then
2234             AC_MSG_ERROR([You are targeting i386 but using the 64-bit compiler.])
2235         fi
2237         if test -n "$GNU_CC"; then
2238             CFLAGS="$CFLAGS -mstackrealign -fno-keep-inline-dllexport"
2239             CXXFLAGS="$CXXFLAGS -mstackrealign -fno-keep-inline-dllexport"
2240             LDFLAGS="$LDFLAGS -Wl,--enable-stdcall-fixup -Wl,--large-address-aware"
2241         else
2242             DSO_LDOPTS="$DSO_LDOPTS -MACHINE:X86"
2243             LDFLAGS="$LDFLAGS -SAFESEH"
2244         fi
2246         AC_DEFINE(_X86_)
2247         ;;
2248     x86_64-*)
2249         if test -n "$_WIN32_MSVC"; then
2250             DSO_LDOPTS="$DSO_LDOPTS -MACHINE:X64"
2251         fi
2252         AC_DEFINE(_AMD64_)
2253         ;;
2254     *)
2255         AC_DEFINE(_CPU_ARCH_NOT_DEFINED)
2256         ;;
2257     esac
2258     ;;
2260 *-netbsd*)
2261     DSO_CFLAGS=''
2262     CFLAGS="$CFLAGS -Dunix"
2263     CXXFLAGS="$CXXFLAGS -Dunix"
2264     if $CC -E - -dM </dev/null | grep __ELF__ >/dev/null; then
2265         DLL_SUFFIX=".so"
2266         DSO_PIC_CFLAGS='-fPIC -DPIC'
2267         DSO_LDOPTS='-shared'
2268         BIN_FLAGS='-Wl,--export-dynamic'
2269     else
2270         DSO_PIC_CFLAGS='-fPIC -DPIC'
2271         DLL_SUFFIX=".so.1.0"
2272         DSO_LDOPTS='-shared'
2273     fi
2274     # This will fail on a.out systems prior to 1.5.1_ALPHA.
2275     MKSHLIB_FORCE_ALL='-Wl,--whole-archive'
2276     MKSHLIB_UNFORCE_ALL='-Wl,--no-whole-archive'
2277     if test "$LIBRUNPATH"; then
2278         DSO_LDOPTS="-Wl,-R$LIBRUNPATH $DSO_LDOPTS"
2279     fi
2280     MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -Wl,-soname,$(notdir $@) -o $@'
2281     MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -Wl,-soname,$(notdir $@)) -o $@'
2282     ;;
2284 *-openbsd*)
2285     if test "$SO_VERSION"; then
2286         DLL_SUFFIX=".so.$SO_VERSION"
2287     else
2288         DLL_SUFFIX=".so.1.0"
2289     fi
2290     MOZ_FIX_LINK_PATHS='-Wl,-rpath-link,$(LIBXUL_DIST)/bin -Wl,-rpath-link,$(prefix)/lib -Wl,-rpath-link,$(if $(X11BASE),$(X11BASE),/usr/X11R6)/lib'
2291     DSO_CFLAGS=''
2292     DSO_PIC_CFLAGS='-fPIC'
2293     DSO_LDOPTS='-shared -fPIC'
2294     if test "$LIBRUNPATH"; then
2295         DSO_LDOPTS="-R$LIBRUNPATH $DSO_LDOPTS"
2296     fi
2297     ;;
2299 *-solaris*)
2300     AC_DEFINE(SOLARIS)
2301     TARGET_NSPR_MDCPUCFG='\"md/_solaris.cfg\"'
2302     MOZ_FIX_LINK_PATHS=
2303     # $ORIGIN/.. is for shared libraries under components/ to locate shared
2304     # libraries one level up (e.g. libnspr4.so)
2305     if test "$SOLARIS_SUNPRO_CC"; then
2306        LDFLAGS="$LDFLAGS -z ignore -R '\$\$ORIGIN:\$\$ORIGIN/..' -z lazyload -z combreloc -z muldefs"
2307        LIBS="-lCrun -lCstd -lc $LIBS"
2308        AC_DEFINE(NSCAP_DISABLE_DEBUG_PTR_TYPES)
2309        CFLAGS="$CFLAGS -xlibmieee -xstrconst -xbuiltin=%all -D__FUNCTION__=__func__"
2310        CXXFLAGS="$CXXFLAGS -xlibmieee -xbuiltin=%all -features=tmplife,tmplrefstatic,extensions,no%except -norunpath -D__FUNCTION__=__func__ -template=no%extdef"
2311        LDFLAGS="-xildoff $LDFLAGS"
2312        MMX_FLAGS="-xarch=mmx -xO4"
2313        SSE_FLAGS="-xarch=sse"
2314        SSE2_FLAGS="-xarch=ssei2 -xO4"
2315        if test -z "$CROSS_COMPILE" -a -f /usr/lib/ld/map.noexstk; then
2316            _SAVE_LDFLAGS=$LDFLAGS
2317            LDFLAGS="-M /usr/lib/ld/map.noexstk $LDFLAGS"
2318            AC_TRY_LINK([#include <stdio.h>],
2319                        [printf("Hello World\n");],
2320                        ,
2321                        [LDFLAGS=$_SAVE_LDFLAGS])
2322        fi
2323        MOZ_OPTIMIZE_FLAGS="-xO4"
2324        MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_PIC_FLAGS) $(DSO_LDOPTS) -h $(notdir $@) -o $@'
2325        MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_FLAGS) $(DSO_LDOPTS) -h $(notdir $@) -o $@'
2326        MKSHLIB_FORCE_ALL='-z allextract'
2327        MKSHLIB_UNFORCE_ALL='-z defaultextract'
2328        DSO_LDOPTS='-G'
2329        AR_LIST="$AR t"
2330        AR_EXTRACT="$AR x"
2331        AR_DELETE="$AR d"
2332        AR='$(CXX) -xar'
2333        AR_FLAGS='-o $@'
2334        AS='/usr/ccs/bin/as'
2335        ASFLAGS="$ASFLAGS -K PIC -L -P -D_ASM -D__STDC__=0"
2336        AS_DASH_C_FLAG=''
2337        TARGET_COMPILER_ABI="sunc"
2338        CC_VERSION=`$CC -V 2>&1 | grep '^cc:' 2>/dev/null | $AWK -F\: '{ print $2 }'`
2339        CXX_VERSION=`$CXX -V 2>&1 | grep '^CC:' 2>/dev/null | $AWK -F\: '{ print $2 }'`
2340        AC_MSG_CHECKING([for Sun C++ compiler version >= 5.9])
2341        AC_LANG_SAVE
2342        AC_LANG_CPLUSPLUS
2343        AC_TRY_COMPILE([],
2344            [#if (__SUNPRO_CC < 0x590)
2345            #error "Denied"
2346            #endif],
2347            _BAD_COMPILER=,_BAD_COMPILER=1)
2348        if test -n "$_BAD_COMPILER"; then
2349            _res="no"
2350            AC_MSG_ERROR([Sun C++ 5.9 (Sun Studio 12) or higher is required to build. Your compiler version is $CXX_VERSION .])
2351        else
2352            _res="yes"
2353        fi
2354        AC_TRY_COMPILE([],
2355            [#if (__SUNPRO_CC >= 0x5100)
2356            #error "Sun C++ 5.10 or above"
2357            #endif],
2358            _ABOVE_SS12U1=,_ABOVE_SS12U1=1)
2359        if test "$_ABOVE_SS12U1"; then
2360            # disable xannotate
2361            CXXFLAGS="$CXXFLAGS -xannotate=no"
2362        fi
2363        AC_MSG_RESULT([$_res])
2364        AC_LANG_RESTORE
2365     else
2366        LDFLAGS="$LDFLAGS -Wl,-z,ignore -Wl,-R,'\$\$ORIGIN:\$\$ORIGIN/..' -Wl,-z,lazyload -Wl,-z,combreloc -Wl,-z,muldefs"
2367        LIBS="-lc $LIBS"
2368        MKSHLIB_FORCE_ALL='-Wl,-z -Wl,allextract'
2369        MKSHLIB_UNFORCE_ALL='-Wl,-z -Wl,defaultextract'
2370        ASFLAGS="$ASFLAGS -fPIC"
2371        DSO_LDOPTS='-shared'
2372        WARNINGS_AS_ERRORS='-Werror'
2373        _WARNINGS_CFLAGS=''
2374        _WARNINGS_CXXFLAGS=''
2375        if test "$OS_RELEASE" = "5.3"; then
2376            AC_DEFINE(MUST_UNDEF_HAVE_BOOLEAN_AFTER_INCLUDES)
2377        fi
2378     fi
2379     if test "$OS_RELEASE" = "5.5.1"; then
2380         AC_DEFINE(NEED_USLEEP_PROTOTYPE)
2381     fi
2382     ;;
2384 *-sunos*)
2385     DSO_LDOPTS='-Bdynamic'
2386     MKSHLIB='-$(LD) $(DSO_LDOPTS) -o $@'
2387     MKCSHLIB='-$(LD) $(DSO_LDOPTS) -o $@'
2388     AC_DEFINE(SUNOS4)
2389     AC_DEFINE(SPRINTF_RETURNS_STRING)
2390     case "$(target_os)" in
2391     sunos4.1*)
2392         DLL_SUFFIX='.so.1.0'
2393         ;;
2394     esac
2395     ;;
2397 esac
2399 AC_SUBST_LIST(MMX_FLAGS)
2400 AC_SUBST_LIST(SSE_FLAGS)
2401 AC_SUBST_LIST(SSE2_FLAGS)
2403 case "$target" in
2404 *-*linux*)
2405     # Includes linux-android
2406     AC_DEFINE(XP_LINUX)
2407     ;;
2408 esac
2410 AC_SUBST(MOZ_LINKER)
2411 if test -n "$MOZ_LINKER"; then
2412   AC_DEFINE(MOZ_LINKER)
2415 dnl Only one oddball right now (QNX), but this gives us flexibility
2416 dnl if any other platforms need to override this in the future.
2417 AC_DEFINE_UNQUOTED(D_INO,$DIRENT_INO)
2419 dnl ========================================================
2420 dnl Any platform that doesn't have MKSHLIB_FORCE_ALL defined
2421 dnl by now will not have any way to link most binaries (tests
2422 dnl as well as viewer, apprunner, etc.), because some symbols
2423 dnl will be left out of the "composite" .so's by ld as unneeded.
2424 dnl So, by defining NO_LD_ARCHIVE_FLAGS for these platforms,
2425 dnl they can link in the static libs that provide the missing
2426 dnl symbols.
2427 dnl ========================================================
2428 NO_LD_ARCHIVE_FLAGS=
2429 if test -z "$MKSHLIB_FORCE_ALL" -o -z "$MKSHLIB_UNFORCE_ALL"; then
2430     NO_LD_ARCHIVE_FLAGS=1
2432 case "$target" in
2433 *-aix4.3*|*-aix5*)
2434     NO_LD_ARCHIVE_FLAGS=
2435     ;;
2436 *-mingw*)
2437     if test -z "$GNU_CC"; then
2438         NO_LD_ARCHIVE_FLAGS=
2439     fi
2440     ;;
2441 esac
2442 AC_SUBST(NO_LD_ARCHIVE_FLAGS)
2444 dnl ========================================================
2445 dnl = Flags to strip unused symbols from .so components and
2446 dnl = to export jemalloc symbols when linking a program
2447 dnl ========================================================
2448 case "$target" in
2449     *-linux*|*-kfreebsd*-gnu|*-gnu*)
2450         MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS='-Wl,--version-script -Wl,$(BUILD_TOOLS)/gnu-ld-scripts/components-version-script'
2451         ;;
2452     *-solaris*)
2453         if test -z "$GNU_CC"; then
2454          MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS='-M $(BUILD_TOOLS)/gnu-ld-scripts/components-mapfile'
2455         else
2456          if test -z "$GCC_USE_GNU_LD"; then
2457           MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS='-Wl,-M -Wl,$(BUILD_TOOLS)/gnu-ld-scripts/components-mapfile'
2458          else
2459           MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS='-Wl,--version-script -Wl,$(BUILD_TOOLS)/gnu-ld-scripts/components-version-script'
2460          fi
2461         fi
2462         ;;
2463     *-darwin*)
2464         MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS='-Wl,-exported_symbols_list -Wl,$(BUILD_TOOLS)/gnu-ld-scripts/components-export-list'
2465         ;;
2466     *-mingw*)
2467         if test -n "$GNU_CC"; then
2468            MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS='-Wl,--version-script,$(BUILD_TOOLS)/gnu-ld-scripts/components-version-script'
2469         fi
2470         ;;
2471 esac
2473 if test -z "$COMPILE_ENVIRONMENT"; then
2474     SKIP_COMPILER_CHECKS=1
2475     SKIP_LIBRARY_CHECKS=1
2476 else
2477     MOZ_COMPILER_OPTS
2480 if test -z "$SKIP_COMPILER_CHECKS"; then
2481 dnl Checks for typedefs, structures, and compiler characteristics.
2482 dnl ========================================================
2483 AC_HEADER_STDC
2484 AC_C_CONST
2485 AC_TYPE_MODE_T
2486 AC_TYPE_OFF_T
2487 AC_TYPE_PID_T
2488 AC_TYPE_SIZE_T
2489 AC_LANG_CPLUSPLUS
2490 AC_LANG_C
2491 AC_MSG_CHECKING(for ssize_t)
2492 AC_CACHE_VAL(ac_cv_type_ssize_t,
2493  [AC_TRY_COMPILE([#include <stdio.h>
2494                   #include <sys/types.h>],
2495                  [ssize_t foo = 0;],
2496                  [ac_cv_type_ssize_t=true],
2497                  [ac_cv_type_ssize_t=false])])
2498 if test "$ac_cv_type_ssize_t" = true ; then
2499   AC_DEFINE(HAVE_SSIZE_T)
2500   AC_MSG_RESULT(yes)
2501 else
2502   AC_MSG_RESULT(no)
2504 AC_STRUCT_ST_BLKSIZE
2505 AC_MSG_CHECKING(for siginfo_t)
2506 AC_CACHE_VAL(ac_cv_siginfo_t,
2507  [AC_TRY_COMPILE([#define _POSIX_C_SOURCE 199506L
2508                   #include <signal.h>],
2509                  [siginfo_t* info;],
2510                  [ac_cv_siginfo_t=true],
2511                  [ac_cv_siginfo_t=false])])
2512 if test "$ac_cv_siginfo_t" = true ; then
2513   AC_DEFINE(HAVE_SIGINFO_T)
2514   AC_MSG_RESULT(yes)
2515 else
2516   AC_MSG_RESULT(no)
2519 AC_LANG_CPLUSPLUS
2521 MOZ_CXX11
2523 AC_LANG_C
2525 dnl Check for .hidden assembler directive and visibility attribute.
2526 dnl Borrowed from glibc configure.in
2527 dnl ===============================================================
2528 if test "$GNU_CC"; then
2529   AC_CACHE_CHECK(for visibility(hidden) attribute,
2530                  ac_cv_visibility_hidden,
2531                  [cat > conftest.c <<EOF
2532                   int foo __attribute__ ((visibility ("hidden"))) = 1;
2534                   ac_cv_visibility_hidden=no
2535                   if ${CC-cc} -Werror -S conftest.c -o conftest.s >/dev/null 2>&1; then
2536                     if egrep '\.(hidden|private_extern).*foo' conftest.s >/dev/null; then
2537                       ac_cv_visibility_hidden=yes
2538                     fi
2539                   fi
2540                   rm -f conftest.[cs]
2541                  ])
2542   if test "$ac_cv_visibility_hidden" = "yes"; then
2543     AC_DEFINE(HAVE_VISIBILITY_HIDDEN_ATTRIBUTE)
2545     AC_CACHE_CHECK(for visibility(default) attribute,
2546                    ac_cv_visibility_default,
2547                    [cat > conftest.c <<EOF
2548                     int foo __attribute__ ((visibility ("default"))) = 1;
2550                     ac_cv_visibility_default=no
2551                     if ${CC-cc} -fvisibility=hidden -Werror -S conftest.c -o conftest.s >/dev/null 2>&1; then
2552                       if ! egrep '\.(hidden|private_extern).*foo' conftest.s >/dev/null; then
2553                         ac_cv_visibility_default=yes
2554                       fi
2555                     fi
2556                     rm -f conftest.[cs]
2557                    ])
2558     if test "$ac_cv_visibility_default" = "yes"; then
2559       AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE)
2561       AC_CACHE_CHECK(for visibility pragma support,
2562                      ac_cv_visibility_pragma,
2563                      [cat > conftest.c <<EOF
2564 #pragma GCC visibility push(hidden)
2565                       int foo_hidden = 1;
2566 #pragma GCC visibility push(default)
2567                       int foo_default = 1;
2569                       ac_cv_visibility_pragma=no
2570                       if ${CC-cc} -Werror -S conftest.c -o conftest.s >/dev/null 2>&1; then
2571                         if egrep '\.(hidden|private_extern).*foo_hidden' conftest.s >/dev/null; then
2572                           if ! egrep '\.(hidden|private_extern).*foo_default' conftest.s > /dev/null; then
2573                             ac_cv_visibility_pragma=yes
2574                           fi
2575                         fi
2576                       fi
2577                       rm -f conftest.[cs]
2578                     ])
2579       if test "$ac_cv_visibility_pragma" = "yes"; then
2580         AC_CACHE_CHECK(For gcc visibility bug with class-level attributes (GCC bug 26905),
2581                        ac_cv_have_visibility_class_bug,
2582                        [cat > conftest.c <<EOF
2583 #pragma GCC visibility push(hidden)
2584 struct __attribute__ ((visibility ("default"))) TestStruct {
2585   static void Init();
2587 __attribute__ ((visibility ("default"))) void TestFunc() {
2588   TestStruct::Init();
2591                        ac_cv_have_visibility_class_bug=no
2592                        if ! ${CXX-g++} ${CXXFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -S -o conftest.S conftest.c > /dev/null 2>&1 ; then
2593                          ac_cv_have_visibility_class_bug=yes
2594                        else
2595                          if test `egrep -c '@PLT|\\$stub' conftest.S` = 0; then
2596                            ac_cv_have_visibility_class_bug=yes
2597                          fi
2598                        fi
2599                        rm -rf conftest.{c,S}
2600                        ])
2602         AC_CACHE_CHECK(For x86_64 gcc visibility bug with builtins (GCC bug 20297),
2603                        ac_cv_have_visibility_builtin_bug,
2604                        [cat > conftest.c <<EOF
2605 #pragma GCC visibility push(hidden)
2606 #pragma GCC visibility push(default)
2607 #include <string.h>
2608 #pragma GCC visibility pop
2610 __attribute__ ((visibility ("default"))) void Func() {
2611   char c[[100]];
2612   memset(c, 0, sizeof(c));
2615                        ac_cv_have_visibility_builtin_bug=no
2616                        if ! ${CC-cc} ${CFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -O2 -S -o conftest.S conftest.c > /dev/null 2>&1 ; then
2617                          ac_cv_have_visibility_builtin_bug=yes
2618                        else
2619                          if test `grep -c "@PLT" conftest.S` = 0; then
2620                            ac_cv_visibility_builtin_bug=yes
2621                          fi
2622                        fi
2623                        rm -f conftest.{c,S}
2624                        ])
2625         if test "$ac_cv_have_visibility_builtin_bug" = "no" -a \
2626                 "$ac_cv_have_visibility_class_bug" = "no"; then
2627           VISIBILITY_FLAGS='-I$(DIST)/system_wrappers -include $(topsrcdir)/config/gcc_hidden.h'
2628           WRAP_SYSTEM_INCLUDES=1
2629           STL_FLAGS='-I$(DIST)/stl_wrappers'
2630           WRAP_STL_INCLUDES=1
2631         else
2632           VISIBILITY_FLAGS='-fvisibility=hidden'
2633         fi # have visibility pragma bug
2634       fi   # have visibility pragma
2635     fi     # have visibility(default) attribute
2636   fi       # have visibility(hidden) attribute
2637 fi         # GNU_CC
2639 # visibility hidden flag for Sun Studio on Solaris
2640 if test "$SOLARIS_SUNPRO_CC"; then
2641 VISIBILITY_FLAGS='-xldscope=hidden'
2642 fi         # Sun Studio on Solaris
2644 AC_SUBST(WRAP_SYSTEM_INCLUDES)
2645 AC_SUBST(VISIBILITY_FLAGS)
2647 MOZ_GCC_PR49911
2648 MOZ_GCC_PR39608
2649 if test "$OS_TARGET" != WINNT; then
2650     # Only run this test with clang on non-Windows platforms, because clang
2651     # cannot do enough code gen for now to make this test work correctly.
2652     MOZ_LLVM_PR8927
2655 dnl Check for __force_align_arg_pointer__ for SSE2 on gcc
2656 dnl ========================================================
2657 if test "$GNU_CC"; then
2658   CFLAGS_save="${CFLAGS}"
2659   CFLAGS="${CFLAGS} -Werror"
2660   AC_CACHE_CHECK(for __force_align_arg_pointer__ attribute,
2661                  ac_cv_force_align_arg_pointer,
2662                  [AC_TRY_COMPILE([__attribute__ ((__force_align_arg_pointer__)) void test() {}],
2663                                  [],
2664                                  ac_cv_force_align_arg_pointer="yes",
2665                                  ac_cv_force_align_arg_pointer="no")])
2666   CFLAGS="${CFLAGS_save}"
2667   if test "$ac_cv_force_align_arg_pointer" = "yes"; then
2668     HAVE_GCC_ALIGN_ARG_POINTER=1
2669   else
2670     HAVE_GCC_ALIGN_ARG_POINTER=
2671   fi
2673 AC_SUBST(HAVE_GCC_ALIGN_ARG_POINTER)
2675 dnl Checks for header files.
2676 dnl ========================================================
2677 AC_HEADER_DIRENT
2678 case "$target_os" in
2679 freebsd*|openbsd*)
2680 # for stuff like -lXshm
2681     CPPFLAGS="${CPPFLAGS} ${X_CFLAGS}"
2682     ;;
2683 esac
2684 MOZ_CHECK_COMMON_HEADERS
2686 dnl These are all the places some variant of statfs can be hiding.
2687 MOZ_CHECK_HEADERS(sys/statvfs.h sys/statfs.h sys/vfs.h sys/mount.h)
2689 dnl Quota support
2690 MOZ_CHECK_HEADERS(sys/quota.h sys/sysmacros.h)
2691 MOZ_CHECK_HEADERS([linux/quota.h],,,[#include <sys/socket.h>])
2693 dnl SCTP support - needs various network include headers
2694 MOZ_CHECK_HEADERS([linux/if_addr.h linux/rtnetlink.h],,,[#include <sys/socket.h>])
2696 MOZ_CHECK_HEADERS(sys/types.h netinet/in.h byteswap.h)
2698 dnl Check for sin_len and sin6_len - used by SCTP; only appears in Mac/*BSD generally
2699 AC_CACHE_CHECK(for sockaddr_in.sin_len,
2700                    ac_cv_sockaddr_in_sin_len,
2701                    [AC_TRY_COMPILE([#ifdef HAVE_SYS_TYPES_H
2702                                     #include <sys/types.h>
2703                                     #endif
2704                                     #include <netinet/in.h>
2705                                     struct sockaddr_in x;
2706                                     void *foo = (void*) &x.sin_len;],
2707                                    [],
2708                                    [ac_cv_sockaddr_in_sin_len=true],
2709                                    [ac_cv_sockaddr_in_sin_len=false])])
2710 if test "$ac_cv_sockaddr_in_sin_len" = true ; then
2711   AC_DEFINE(HAVE_SIN_LEN)
2712 dnl HAVE_CONN_LEN must be the same as HAVE_SIN_LEN (and HAVE_SIN6_LEN too)
2713   AC_DEFINE(HAVE_SCONN_LEN)
2716 AC_CACHE_CHECK(for sockaddr_in6.sin6_len,
2717                ac_cv_sockaddr_in6_sin6_len,
2718                [AC_TRY_COMPILE([#ifdef HAVE_SYS_TYPES_H
2719                                 #include <sys/types.h>
2720                                 #endif
2721                                 #include <netinet/in.h>
2722                                 struct sockaddr_in6 x;
2723                                 void *foo = (void*) &x.sin6_len;],
2724                                [],
2725                                [ac_cv_sockaddr_in6_sin6_len=true],
2726                                [ac_cv_sockaddr_in6_sin6_len=false])])
2727 if test "$ac_cv_sockaddr_in6_sin6_len" = true ; then
2728   AC_DEFINE(HAVE_SIN6_LEN)
2731 AC_CACHE_CHECK(for sockaddr.sa_len,
2732                ac_cv_sockaddr_sa_len,
2733                [AC_TRY_COMPILE([#ifdef HAVE_SYS_TYPES_H
2734                                 #include <sys/types.h>
2735                                 #endif
2736                                 #include <sys/socket.h>
2737                                 struct sockaddr x;
2738                                 void *foo = (void*) &x.sa_len;],
2739                                [],
2740                                [ac_cv_sockaddr_sa_len=true],
2741                                [ac_cv_sockaddr_sa_len=false])])
2742 if test "$ac_cv_sockaddr_sa_len" = true ; then
2743   AC_DEFINE(HAVE_SA_LEN)
2746 AC_ARG_ENABLE(dtrace,
2747               [  --enable-dtrace         build with dtrace support if available (default=no)],
2748               [enable_dtrace="yes"],)
2749 if test "x$enable_dtrace" = "xyes"; then
2750   MOZ_CHECK_HEADER(sys/sdt.h, HAVE_DTRACE=1)
2751   if test -n "$HAVE_DTRACE"; then
2752       AC_DEFINE(INCLUDE_MOZILLA_DTRACE)
2753   else
2754       AC_MSG_ERROR([dtrace enabled but sys/sdt.h not found]);
2755   fi
2757 AC_SUBST(HAVE_DTRACE)
2759 case $target in
2760 *-aix4.3*|*-aix5*)
2761     ;;
2763     MOZ_CHECK_HEADERS(sys/cdefs.h)
2764     ;;
2765 esac
2767 MOZ_LINUX_PERF_EVENT
2769 dnl Checks for libraries.
2770 dnl ========================================================
2771 case $target in
2772 *-hpux11.*)
2773     ;;
2775     AC_CHECK_LIB(c_r, gethostbyname_r)
2776     ;;
2777 esac
2779 dnl We don't want to link with libdl even if it's present on OS X, since
2780 dnl it's not used and not part of the default installation. OS/2 has dlfcn
2781 dnl in libc.
2782 dnl We don't want to link against libm or libpthread on Darwin since
2783 dnl they both are just symlinks to libSystem and explicitly linking
2784 dnl against libSystem causes issues when debugging (see bug 299601).
2785 case $target in
2786 *-darwin*)
2787     ;;
2789     AC_SEARCH_LIBS(dlopen, dl,
2790         MOZ_CHECK_HEADER(dlfcn.h,
2791         AC_DEFINE(HAVE_DLOPEN)))
2792     ;;
2793 esac
2795 _SAVE_CFLAGS="$CFLAGS"
2796 CFLAGS="$CFLAGS -D_GNU_SOURCE"
2797 AC_CHECK_FUNCS(dladdr memmem)
2798 CFLAGS="$_SAVE_CFLAGS"
2800 if test ! "$GNU_CXX"; then
2802     case $target in
2803     *-aix*)
2804         AC_CHECK_LIB(C_r, demangle)
2805         ;;
2806      *)
2807         AC_CHECK_LIB(C, demangle)
2808         ;;
2809      esac
2812 AC_CHECK_LIB(socket, socket)
2814 XLDFLAGS="$X_LIBS"
2815 XLIBS="$X_EXTRA_LIBS"
2817 dnl ========================================================
2818 dnl Checks for X libraries.
2819 dnl Ordering is important.
2820 dnl Xt is dependent upon SM as of X11R6
2821 dnl ========================================================
2822 if test "$no_x" = "yes"; then
2823     AC_DEFINE(NO_X11)
2824 else
2825     AC_DEFINE_UNQUOTED(FUNCPROTO,15)
2826     XLIBS="-lX11 $XLIBS"
2827     _SAVE_LDFLAGS="$LDFLAGS"
2828     LDFLAGS="$XLDFLAGS $LDFLAGS"
2829     AC_CHECK_LIB(X11, XDrawLines, [X11_LIBS="-lX11"],
2830         [MISSING_X="$MISSING_X -lX11"], $XLIBS)
2831     AC_CHECK_LIB(Xext, XextAddDisplay, [XEXT_LIBS="-lXext"],
2832         [MISSING_X="$MISSING_X -lXext"], $XLIBS)
2834     AC_CHECK_LIB(Xt, XtFree, [ XT_LIBS="-lXt"], [
2835         unset ac_cv_lib_Xt_XtFree
2836         AC_CHECK_LIB(ICE, IceFlush, [XT_LIBS="-lICE $XT_LIBS"],, $XT_LIBS $XLIBS)
2837         AC_CHECK_LIB(SM, SmcCloseConnection, [XT_LIBS="-lSM $XT_LIBS"],, $XT_LIBS $XLIBS)
2838         AC_CHECK_LIB(Xt, XtFree, [ XT_LIBS="-lXt $XT_LIBS"],
2839             [MISSING_X="$MISSING_X -lXt"], $X_PRE_LIBS $XT_LIBS $XLIBS)
2840         ])
2842     # AIX needs the motif library linked before libXt to prevent
2843     # crashes in plugins linked against Motif - Bug #98892
2844     case "${target_os}" in
2845     aix*)
2846         XT_LIBS="-lXm $XT_LIBS"
2847         ;;
2848     esac
2850     dnl ========================================================
2851     dnl = Check for XShm
2852     dnl ========================================================
2853     AC_CHECK_LIB(Xext, XShmCreateImage, _HAVE_XSHM_XEXT=1,,
2854         $XLIBS $XEXT_LIBS)
2856     dnl ========================================================
2857     dnl = Check for Xss
2858     dnl ========================================================
2859     MOZ_CHECK_HEADER(X11/extensions/scrnsaver.h,
2860         AC_CHECK_LIB(Xss, XScreenSaverQueryInfo,
2861             [XSS_LIBS="-lXss $XEXT_LIBS $XLIBS"
2862              AC_DEFINE(HAVE_LIBXSS)],, $XEXT_LIBS $XLIBS))
2864     LDFLAGS="$_SAVE_LDFLAGS"
2865 fi # $no_x
2867 AC_SUBST(XCFLAGS)
2868 AC_SUBST(XLDFLAGS)
2869 AC_SUBST(XLIBS)
2870 AC_SUBST(XEXT_LIBS)
2871 AC_SUBST(XT_LIBS)
2872 AC_SUBST(XSS_LIBS)
2874 dnl ========================================================
2875 dnl = pthread support
2876 dnl = Start by checking whether the system support pthreads
2877 dnl ========================================================
2878 case "$target_os" in
2879 darwin*)
2880     MOZ_USE_PTHREADS=1
2881     ;;
2883     MOZ_CHECK_PTHREADS(pthreads,
2884         MOZ_USE_PTHREADS=1 _PTHREAD_LDFLAGS="-lpthreads",
2885         MOZ_CHECK_PTHREADS(pthread,
2886             MOZ_USE_PTHREADS=1 _PTHREAD_LDFLAGS="-lpthread",
2887             MOZ_CHECK_PTHREADS(c_r,
2888                 MOZ_USE_PTHREADS=1 _PTHREAD_LDFLAGS="-lc_r",
2889                 MOZ_CHECK_PTHREADS(c,
2890                     MOZ_USE_PTHREADS=1
2891                 )
2892             )
2893         )
2894     )
2895     ;;
2896 esac
2898 dnl ========================================================
2899 dnl Check the command line for --with-pthreads
2900 dnl ========================================================
2901 MOZ_ARG_WITH_BOOL(pthreads,
2902 [  --with-pthreads         Force use of system pthread library with NSPR ],
2903 [ if test "$MOZ_USE_PTHREADS"x = x; then
2904     AC_MSG_ERROR([ --with-pthreads specified for a system without pthread support ]);
2905 fi],
2906     MOZ_USE_PTHREADS=
2907     _PTHREAD_LDFLAGS=
2910 dnl ========================================================
2911 dnl Do the platform specific pthread hackery
2912 dnl ========================================================
2913 if test "$MOZ_USE_PTHREADS"x != x
2914 then
2915     dnl
2916     dnl See if -pthread is supported.
2917     dnl
2918     rm -f conftest*
2919     ac_cv_have_dash_pthread=no
2920     AC_MSG_CHECKING(whether ${CC-cc} accepts -pthread)
2921     echo 'int main() { return 0; }' | cat > conftest.c
2922     ${CC-cc} -pthread -o conftest conftest.c > conftest.out 2>&1
2923     if test $? -eq 0; then
2924         if test -z "`egrep -i '(unrecognize|unknown)' conftest.out | grep pthread`" -a -z "`egrep -i '(error|incorrect)' conftest.out`" ; then
2925             ac_cv_have_dash_pthread=yes
2926             case "$target_os" in
2927             freebsd*)
2928 # Freebsd doesn't use -pthread for compiles, it uses them for linking
2929                 ;;
2930             *)
2931                 CFLAGS="$CFLAGS -pthread"
2932                 CXXFLAGS="$CXXFLAGS -pthread"
2933                 ;;
2934             esac
2935         fi
2936     fi
2937     rm -f conftest*
2938     AC_MSG_RESULT($ac_cv_have_dash_pthread)
2940     dnl
2941     dnl See if -pthreads is supported.
2942     dnl
2943     ac_cv_have_dash_pthreads=no
2944     if test "$ac_cv_have_dash_pthread" = "no"; then
2945         AC_MSG_CHECKING(whether ${CC-cc} accepts -pthreads)
2946         echo 'int main() { return 0; }' | cat > conftest.c
2947         ${CC-cc} -pthreads -o conftest conftest.c > conftest.out 2>&1
2948         if test $? -eq 0; then
2949             if test -z "`egrep -i '(unrecognize|unknown)' conftest.out | grep pthreads`" -a -z "`egrep -i '(error|incorrect)' conftest.out`" ; then
2950                 ac_cv_have_dash_pthreads=yes
2951                 CFLAGS="$CFLAGS -pthreads"
2952                 CXXFLAGS="$CXXFLAGS -pthreads"
2953             fi
2954         fi
2955         rm -f conftest*
2956         AC_MSG_RESULT($ac_cv_have_dash_pthreads)
2957     fi
2959     case "$target" in
2960         *-*-freebsd*)
2961             AC_DEFINE(_REENTRANT)
2962             AC_DEFINE(_THREAD_SAFE)
2963             dnl -pthread links in -lpthread, so don't specify it explicitly.
2964             if test "$ac_cv_have_dash_pthread" = "yes"; then
2965                 _PTHREAD_LDFLAGS="-pthread"
2966             fi
2967             ;;
2969         *-*-openbsd*|*-*-bsdi*)
2970             AC_DEFINE(_REENTRANT)
2971             AC_DEFINE(_THREAD_SAFE)
2972             dnl -pthread links in -lc_r, so don't specify it explicitly.
2973             if test "$ac_cv_have_dash_pthread" = "yes"; then
2974                 _PTHREAD_LDFLAGS="-pthread"
2975             fi
2976             ;;
2978         *-*-linux*|*-*-kfreebsd*-gnu|*-*-gnu*)
2979             AC_DEFINE(_REENTRANT)
2980             ;;
2982         *-aix4.3*|*-aix5*)
2983             AC_DEFINE(_REENTRANT)
2984             ;;
2986         *-hpux11.*)
2987             AC_DEFINE(_REENTRANT)
2988             ;;
2990         *-*-solaris*)
2991             AC_DEFINE(_REENTRANT)
2992             if test "$SOLARIS_SUNPRO_CC"; then
2993                 CFLAGS="$CFLAGS -mt"
2994                 CXXFLAGS="$CXXFLAGS -mt"
2995             fi
2996             ;;
2997     esac
2998     LDFLAGS="${_PTHREAD_LDFLAGS} ${LDFLAGS}"
2999     AC_SUBST(MOZ_USE_PTHREADS)
3003 dnl Checks for library functions.
3004 dnl ========================================================
3005 AC_PROG_GCC_TRADITIONAL
3006 AC_FUNC_MEMCMP
3007 AC_CHECK_FUNCS(stat64 lstat64 truncate64 statvfs64 statvfs statfs64 statfs getpagesize localtime_r)
3009 dnl check for clock_gettime(), the CLOCK_MONOTONIC clock
3010 AC_CACHE_CHECK(for clock_gettime(CLOCK_MONOTONIC),
3011                ac_cv_clock_monotonic,
3012                [for libs in "" -lrt; do
3013                     _SAVE_LIBS="$LIBS"
3014                     LIBS="$LIBS $libs"
3015                     AC_TRY_LINK([#include <time.h>],
3016                                  [ struct timespec ts;
3017                                    clock_gettime(CLOCK_MONOTONIC, &ts); ],
3018                                  ac_cv_clock_monotonic=$libs
3019                                  LIBS="$_SAVE_LIBS"
3020                                  break,
3021                                  ac_cv_clock_monotonic=no)
3022                     LIBS="$_SAVE_LIBS"
3023                 done])
3024 if test "$ac_cv_clock_monotonic" != "no"; then
3025     HAVE_CLOCK_MONOTONIC=1
3026     REALTIME_LIBS=$ac_cv_clock_monotonic
3027     AC_DEFINE(HAVE_CLOCK_MONOTONIC)
3028     AC_SUBST(HAVE_CLOCK_MONOTONIC)
3029     AC_SUBST(REALTIME_LIBS)
3032 dnl check for wcrtomb/mbrtowc
3033 dnl =======================================================================
3034 if test -z "$MACOS_DEPLOYMENT_TARGET" || test "$MACOS_DEPLOYMENT_TARGET" -ge "100300"; then
3035 AC_LANG_SAVE
3036 AC_LANG_CPLUSPLUS
3037 AC_CACHE_CHECK(for wcrtomb,
3038     ac_cv_have_wcrtomb,
3039     [AC_TRY_LINK([#include <wchar.h>],
3040                  [mbstate_t ps={0};wcrtomb(0,'f',&ps);],
3041                  ac_cv_have_wcrtomb="yes",
3042                  ac_cv_have_wcrtomb="no")])
3043 if test "$ac_cv_have_wcrtomb" = "yes"; then
3044     AC_DEFINE(HAVE_WCRTOMB)
3046 AC_CACHE_CHECK(for mbrtowc,
3047     ac_cv_have_mbrtowc,
3048     [AC_TRY_LINK([#include <wchar.h>],
3049                  [mbstate_t ps={0};mbrtowc(0,0,0,&ps);],
3050                  ac_cv_have_mbrtowc="yes",
3051                  ac_cv_have_mbrtowc="no")])
3052 if test "$ac_cv_have_mbrtowc" = "yes"; then
3053     AC_DEFINE(HAVE_MBRTOWC)
3055 AC_LANG_RESTORE
3058 AC_CACHE_CHECK(
3059     [for res_ninit()],
3060     ac_cv_func_res_ninit,
3061     [if test "$OS_TARGET" = NetBSD -o "$OS_TARGET" = OpenBSD; then
3062         dnl no need for res_ninit() on NetBSD and OpenBSD
3063         ac_cv_func_res_ninit=no
3064      else
3065         AC_TRY_LINK([
3066             #ifdef linux
3067             #define _BSD_SOURCE 1
3068             #endif
3069             #include <sys/types.h>
3070             #include <netinet/in.h>
3071             #include <arpa/nameser.h>
3072             #include <resolv.h>
3073             ],
3074             [int foo = res_ninit(&_res);],
3075             [ac_cv_func_res_ninit=yes],
3076             [ac_cv_func_res_ninit=no])
3077      fi
3078     ])
3080 if test "$ac_cv_func_res_ninit" = "yes"; then
3081     AC_DEFINE(HAVE_RES_NINIT)
3082 dnl must add the link line we do something as foolish as this... dougt
3083 dnl else
3084 dnl    AC_CHECK_LIB(bind, res_ninit, AC_DEFINE(HAVE_RES_NINIT),
3085 dnl        AC_CHECK_LIB(resolv, res_ninit, AC_DEFINE(HAVE_RES_NINIT)))
3088 AC_LANG_CPLUSPLUS
3090 case $target_os in
3091     darwin*|mingw*)
3092         ;;
3093     *)
3095 AC_CHECK_LIB(c, iconv, [_ICONV_LIBS="$_ICONV_LIBS"],
3096     AC_CHECK_LIB(iconv, iconv, [_ICONV_LIBS="$_ICONV_LIBS -liconv"],
3097         AC_CHECK_LIB(iconv, libiconv, [_ICONV_LIBS="$_ICONV_LIBS -liconv"])))
3098 _SAVE_LIBS=$LIBS
3099 LIBS="$LIBS $_ICONV_LIBS"
3100 AC_CACHE_CHECK(
3101     [for iconv()],
3102     ac_cv_func_iconv,
3103     [AC_TRY_LINK([
3104         #include <stdlib.h>
3105         #include <iconv.h>
3106         ],
3107         [
3108             iconv_t h = iconv_open("", "");
3109             iconv(h, NULL, NULL, NULL, NULL);
3110             iconv_close(h);
3111         ],
3112         [ac_cv_func_iconv=yes],
3113         [ac_cv_func_iconv=no]
3114         )]
3115     )
3116 if test "$ac_cv_func_iconv" = "yes"; then
3117     AC_DEFINE(HAVE_ICONV)
3118     LIBXUL_LIBS="$LIBXUL_LIBS $_ICONV_LIBS"
3119     LIBICONV="$_ICONV_LIBS"
3120     AC_CACHE_CHECK(
3121         [for iconv() with const input],
3122         ac_cv_func_const_iconv,
3123         [AC_TRY_COMPILE([
3124             #include <stdlib.h>
3125             #include <iconv.h>
3126             ],
3127             [
3128                 const char *input = "testing";
3129                 iconv_t h = iconv_open("", "");
3130                 iconv(h, &input, NULL, NULL, NULL);
3131                 iconv_close(h);
3132             ],
3133             [ac_cv_func_const_iconv=yes],
3134             [ac_cv_func_const_iconv=no]
3135             )]
3136         )
3137     if test "$ac_cv_func_const_iconv" = "yes"; then
3138         AC_DEFINE(HAVE_ICONV_WITH_CONST_INPUT)
3139     fi
3141 LIBS=$_SAVE_LIBS
3143     ;;
3144 esac
3146 AM_LANGINFO_CODESET
3148 AC_LANG_C
3150 dnl **********************
3151 dnl *** va_copy checks ***
3152 AC_CACHE_CHECK([for an implementation of va_copy()],
3153                ac_cv_va_copy,
3154     [AC_TRY_COMPILE([#include <stdarg.h>
3155                      #include <stdlib.h>
3156         void f (int i, ...) {
3157             va_list args1, args2;
3158             va_start (args1, i);
3159             va_copy (args2, args1);
3160             if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
3161                 exit (1);
3162             va_end (args1); va_end (args2);
3163         }],
3164         [f(0, 42); return 0],
3165         [ac_cv_va_copy=yes],
3166         [ac_cv_va_copy=no]
3167     )]
3169 AC_CACHE_CHECK([whether va_list can be copied by value],
3170                ac_cv_va_val_copy,
3171     [AC_TRY_COMPILE([#include <stdarg.h>
3172                      #include <stdlib.h>
3173         void f (int i, ...) {
3174             va_list args1, args2;
3175             va_start (args1, i);
3176             args2 = args1;
3177             if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
3178                 exit (1);
3179             va_end (args1); va_end (args2);
3180         }],
3181         [f(0, 42); return 0],
3182         [ac_cv_va_val_copy=yes],
3183         [ac_cv_va_val_copy=no],
3184     )]
3186 if test "x$ac_cv_va_copy" = "xyes"; then
3187     AC_DEFINE(VA_COPY, va_copy)
3188     AC_DEFINE(HAVE_VA_COPY)
3191 if test "x$ac_cv_va_val_copy" = "xno"; then
3192    AC_DEFINE(HAVE_VA_LIST_AS_ARRAY)
3195 dnl ===================================================================
3196 dnl ========================================================
3197 dnl Put your C++ language/feature checks below
3198 dnl ========================================================
3199 AC_LANG_CPLUSPLUS
3201 ARM_ABI_PREFIX=
3202 if test "$GNU_CC"; then
3203   if test "$CPU_ARCH" = "arm" ; then
3204     AC_CACHE_CHECK(for ARM EABI,
3205         ac_cv_gcc_arm_eabi,
3206         [AC_TRY_COMPILE([],
3207                         [
3208 #if defined(__ARM_EABI__)
3209   return 0;
3210 #else
3211 #error Not ARM EABI.
3212 #endif
3213                         ],
3214                         ac_cv_gcc_arm_eabi="yes",
3215                         ac_cv_gcc_arm_eabi="no")])
3216     if test "$ac_cv_gcc_arm_eabi" = "yes"; then
3217         HAVE_ARM_EABI=1
3218         ARM_ABI_PREFIX=eabi-
3219     else
3220         ARM_ABI_PREFIX=oabi-
3221     fi
3222   fi
3224   TARGET_COMPILER_ABI="${TARGET_COMPILER_ABI-${ARM_ABI_PREFIX}gcc3}"
3227 dnl Check to see if we can resolve ambiguity with |using|.
3228 AC_CACHE_CHECK(whether the C++ \"using\" keyword resolves ambiguity,
3229                ac_cv_cpp_ambiguity_resolving_using,
3230                [AC_TRY_COMPILE(class X {
3231                                  public: int go(const X&) {return 3;}
3232                                          int jo(const X&) {return 3;}
3233                                };
3234                                class Y : public X {
3235                                  public:  int go(int) {return 2;}
3236                                           int jo(int) {return 2;}
3237                                           using X::jo;
3238                                  private: using X::go;
3239                                };,
3240                                X x; Y y; y.jo(x);,
3241                                ac_cv_cpp_ambiguity_resolving_using=yes,
3242                                ac_cv_cpp_ambiguity_resolving_using=no)])
3243 if test "$ac_cv_cpp_ambiguity_resolving_using" = yes ; then
3244    AC_DEFINE(HAVE_CPP_AMBIGUITY_RESOLVING_USING)
3247 dnl See if a dynamic_cast to void* gives the most derived object.
3248 AC_CACHE_CHECK(for C++ dynamic_cast to void*,
3249                ac_cv_cpp_dynamic_cast_void_ptr,
3250                [AC_TRY_RUN([class X { int i; public: virtual ~X() { } };
3251                             class Y { int j; public: virtual ~Y() { } };
3252                             class Z : public X, public Y { int k; };
3254                             int main() {
3255                                  Z mdo;
3256                                  X *subx = (X*)&mdo;
3257                                  Y *suby = (Y*)&mdo;
3258                                  return !((((void*)&mdo != (void*)subx) &&
3259                                            ((void*)&mdo == dynamic_cast<void*>(subx))) ||
3260                                           (((void*)&mdo != (void*)suby) &&
3261                                            ((void*)&mdo == dynamic_cast<void*>(suby))));
3262                             }],
3263                            ac_cv_cpp_dynamic_cast_void_ptr=yes,
3264                            ac_cv_cpp_dynamic_cast_void_ptr=no,
3265                            ac_cv_cpp_dynamic_cast_void_ptr=no)])
3266 if test "$ac_cv_cpp_dynamic_cast_void_ptr" = yes ; then
3267    AC_DEFINE(HAVE_CPP_DYNAMIC_CAST_TO_VOID_PTR)
3271 dnl note that this one is reversed - if the test fails, then
3272 dnl we require implementations of unused virtual methods. Which
3273 dnl really blows because it means we'll have useless vtable
3274 dnl bloat.
3275 AC_CACHE_CHECK(whether C++ requires implementation of unused virtual methods,
3276                ac_cv_cpp_unused_required,
3277                [AC_TRY_LINK(class X {private: virtual void never_called();};,
3278                                X x;,
3279                                ac_cv_cpp_unused_required=no,
3280                                ac_cv_cpp_unused_required=yes)])
3281 if test "$ac_cv_cpp_unused_required" = yes ; then
3282    AC_DEFINE(NEED_CPP_UNUSED_IMPLEMENTATIONS)
3286 dnl Some compilers have trouble comparing a constant reference to a templatized
3287 dnl class to zero, and require an explicit operator==() to be defined that takes
3288 dnl an int. This test separates the strong from the weak.
3290 AC_CACHE_CHECK(for trouble comparing to zero near std::operator!=(),
3291                ac_cv_trouble_comparing_to_zero,
3292                [AC_TRY_COMPILE([#include <algorithm>
3293                                 template <class T> class Foo {};
3294                                 class T2;
3295                                 template <class T> int operator==(const T2*, const T&) { return 0; }
3296                                 template <class T> int operator!=(const T2*, const T&) { return 0; }],
3297                                [Foo<int> f; return (0 != f);],
3298                                ac_cv_trouble_comparing_to_zero=no,
3299                                ac_cv_trouble_comparing_to_zero=yes)])
3300 if test "$ac_cv_trouble_comparing_to_zero" = yes ; then
3301   AC_DEFINE(HAVE_CPP_TROUBLE_COMPARING_TO_ZERO)
3304 # try harder, when checking for __thread support, see bug 521750 comment #33 and below
3305 # We pass MOZ_OPTIMIZE_LDFLAGS to the linker because if dead_strip is
3306 # enabled, the linker in xcode 4.1 will crash. Without this it would crash when
3307 # linking XUL.
3308 _SAVE_LDFLAGS=$LDFLAGS
3309 LDFLAGS="$LDFLAGS $DSO_PIC_CFLAGS $DSO_LDOPTS $MOZ_OPTIMIZE_LDFLAGS"
3310 AC_CACHE_CHECK(for __thread keyword for TLS variables,
3311                ac_cv_thread_keyword,
3312                [AC_TRY_LINK([__thread bool tlsIsMainThread = false;],
3313                             [return tlsIsMainThread;],
3314                             ac_cv_thread_keyword=yes,
3315                             ac_cv_thread_keyword=no)])
3316 LDFLAGS=$_SAVE_LDFLAGS
3317 # The custom dynamic linker doesn't support TLS variables
3318 MOZ_TLS=
3319 if test "$ac_cv_thread_keyword" = yes -a "$MOZ_LINKER" != 1; then
3320   # mips builds fail with TLS variables because of a binutils bug.
3321   # See bug 528687
3322   # OpenBSD doesn't have TLS support, and the test succeeds with clang++
3323   case "${target}" in
3324     mips*-*)
3325       :
3326       ;;
3327     *-android*|*-linuxandroid*)
3328       :
3329       ;;
3330     *-openbsd*)
3331       :
3332       ;;
3333     *)
3334       AC_DEFINE(HAVE_THREAD_TLS_KEYWORD)
3335       MOZ_TLS=1
3336       ;;
3337   esac
3340 dnl Using the custom linker on ARMv6 requires 16k alignment of ELF segments.
3341 if test -n "$MOZ_LINKER"; then
3342   if test "$CPU_ARCH" = arm; then
3343     dnl When building for < ARMv7, we need to ensure 16k alignment of ELF segments
3344     if test -n "$ARM_ARCH" && test "$ARM_ARCH" -lt 7; then
3345       LDFLAGS="$LDFLAGS -Wl,-z,max-page-size=0x4000 -Wl,-z,common-page-size=0x4000"
3346       _SUBDIR_LDFLAGS="$_SUBDIR_LDFLAGS -Wl,-z,max-page-size=0x4000 -Wl,-z,common-page-size=0x4000"
3347     fi
3348   fi
3351 dnl The custom linker doesn't support text relocations, but NDK >= r6b
3352 dnl creates some (http://code.google.com/p/android/issues/detail?id=23203)
3353 dnl We however want to avoid these text relocations, and this can be done
3354 dnl by making gcc not link crtbegin and crtend. In the broken NDKs, crtend
3355 dnl doesn't contain anything at all, beside placeholders for some sections,
3356 dnl and crtbegin only contains a finalizer function that calls
3357 dnl __cxa_finalize. The custom linker actually takes care of calling
3358 dnl __cxa_finalize when the library doesn't call it itself, which makes it
3359 dnl safe not to link crtbegin. Besides, previous versions of the NDK didn't
3360 dnl link crtbegin and crtend at all.
3361 if test -n "$MOZ_LINKER" -a "$OS_TARGET" = "Android"; then
3362   AC_CACHE_CHECK([whether the CRT objects have text relocations],
3363     ac_cv_crt_has_text_relocations,
3364     [echo 'int foo() { return 0; }' > conftest.cpp
3365      if AC_TRY_COMMAND(${CXX-g++} -o conftest${DLL_SUFFIX} $CXXFLAGS $DSO_LDOPTS $LDFLAGS conftest.cpp $LIBS 1>&5) &&
3366         test -s conftest${DLL_SUFFIX}; then
3367        if ${TOOLCHAIN_PREFIX}readelf -d conftest${DLL_SUFFIX} | grep TEXTREL > /dev/null; then
3368          ac_cv_crt_has_text_relocations=yes
3369        else
3370          ac_cv_crt_has_text_relocations=no
3371        fi
3372      else
3373        AC_ERROR([couldn't compile a simple C file])
3374      fi
3375      rm -rf conftest*])
3376   if test "$ac_cv_crt_has_text_relocations" = yes; then
3377     dnl While we want libraries to skip the CRT files, we don't want
3378     dnl executables to be treated the same way. We thus set the flag
3379     dnl in DSO_LDOPTS and not LDFLAGS. However, to pass it to nspr,
3380     dnl we need to use LDFLAGS because nspr doesn't inherit DSO_LDOPTS.
3381     dnl Using LDFLAGS in nspr is safe, since we only really build
3382     dnl libraries there.
3383     DSO_LDOPTS="$DSO_LDOPTS -nostartfiles"
3384     NSPR_LDFLAGS="$NSPR_LDFLAGS -nostartfiles"
3385   fi
3388 dnl Check for the existence of various allocation headers/functions
3390 MALLOC_HEADERS="malloc.h malloc_np.h malloc/malloc.h sys/malloc.h"
3391 MALLOC_H=
3393 for file in $MALLOC_HEADERS; do
3394   MOZ_CHECK_HEADER($file, [MALLOC_H=$file])
3395   if test "$MALLOC_H" != ""; then
3396     AC_DEFINE_UNQUOTED(MALLOC_H, <$MALLOC_H>)
3397     break
3398   fi
3399 done
3401 AC_CHECK_FUNCS(strndup posix_memalign memalign valloc)
3403 AC_CHECK_FUNCS(malloc_usable_size)
3405 dnl See if compiler supports some gcc-style attributes
3407 AC_CACHE_CHECK(for __attribute__((always_inline)),
3408                ac_cv_attribute_always_inline,
3409                [AC_TRY_COMPILE([inline void f(void) __attribute__((always_inline));],
3410                                [],
3411                                ac_cv_attribute_always_inline=yes,
3412                                ac_cv_attribute_always_inline=no)])
3414 AC_CACHE_CHECK(for __attribute__((malloc)),
3415                ac_cv_attribute_malloc,
3416                [AC_TRY_COMPILE([void* f(int) __attribute__((malloc));],
3417                                [],
3418                                ac_cv_attribute_malloc=yes,
3419                                ac_cv_attribute_malloc=no)])
3421 AC_CACHE_CHECK(for __attribute__((warn_unused_result)),
3422                ac_cv_attribute_warn_unused,
3423                [AC_TRY_COMPILE([int f(void) __attribute__((warn_unused_result));],
3424                                [],
3425                                ac_cv_attribute_warn_unused=yes,
3426                                ac_cv_attribute_warn_unused=no)])
3428 dnl End of C++ language/feature checks
3429 AC_LANG_C
3431 dnl ========================================================
3432 dnl =  Internationalization checks
3433 dnl ========================================================
3435 dnl Internationalization and Locale support is different
3436 dnl on various UNIX platforms.  Checks for specific i18n
3437 dnl features go here.
3439 dnl check for LC_MESSAGES
3440 AC_CACHE_CHECK(for LC_MESSAGES,
3441                ac_cv_i18n_lc_messages,
3442                [AC_TRY_COMPILE([#include <locale.h>],
3443                                [int category = LC_MESSAGES;],
3444                                ac_cv_i18n_lc_messages=yes,
3445                                ac_cv_i18n_lc_messages=no)])
3446 if test "$ac_cv_i18n_lc_messages" = yes; then
3447    AC_DEFINE(HAVE_I18N_LC_MESSAGES)
3450 AC_HAVE_FUNCS(localeconv)
3451 fi # ! SKIP_COMPILER_CHECKS
3453 TARGET_XPCOM_ABI=
3454 if test -n "${CPU_ARCH}" -a -n "${TARGET_COMPILER_ABI}"; then
3455     TARGET_XPCOM_ABI="${CPU_ARCH}-${TARGET_COMPILER_ABI}"
3458 dnl Mozilla specific options
3459 dnl ========================================================
3460 dnl The macros used for command line options
3461 dnl are defined in build/autoconf/altoptions.m4.
3463 dnl If the compiler supports these attributes, define them as
3464 dnl convenience macros.
3465 if test "$ac_cv_attribute_malloc" = yes ; then
3466   AC_DEFINE(NS_ATTR_MALLOC, [__attribute__((malloc))])
3467 else
3468   AC_DEFINE(NS_ATTR_MALLOC,)
3471 if test "$ac_cv_attribute_warn_unused" = yes ; then
3472   AC_DEFINE(NS_WARN_UNUSED_RESULT, [__attribute__((warn_unused_result))])
3473 else
3474   AC_DEFINE(NS_WARN_UNUSED_RESULT,)
3477 dnl We can't run TRY_COMPILE tests on Windows, so hard-code some
3478 dnl features that Windows actually does support.
3480 if test -n "$SKIP_COMPILER_CHECKS"; then
3481    dnl Windows has malloc.h
3482    AC_DEFINE(MALLOC_H, [<malloc.h>])
3483    AC_DEFINE(HAVE_FORCEINLINE)
3484    AC_DEFINE(HAVE_LOCALECONV)
3485 fi # SKIP_COMPILER_CHECKS
3487 dnl ========================================================
3488 dnl =
3489 dnl = Check for external package dependencies
3490 dnl =
3491 dnl ========================================================
3492 MOZ_ARG_HEADER(External Packages)
3494 MOZ_ARG_WITH_STRING(libxul-sdk,
3495 [  --with-libxul-sdk=PFX   Use the libXUL SDK at <PFX>],
3496   LIBXUL_SDK_DIR=$withval)
3498 if test "$LIBXUL_SDK_DIR" = "yes"; then
3499     AC_MSG_ERROR([--with-libxul-sdk must specify a path])
3500 elif test -n "$LIBXUL_SDK_DIR" -a "$LIBXUL_SDK_DIR" != "no"; then
3501     LIBXUL_SDK=`cd "$LIBXUL_SDK_DIR" && pwd`
3503     if test ! -f "$LIBXUL_SDK/include/xpcom-config.h"; then
3504         AC_MSG_ERROR([$LIBXUL_SDK/include/xpcom-config.h doesn't exist])
3505     fi
3508 AC_SUBST(LIBXUL_SDK)
3510 if test -n "$LIBXUL_SDK"; then
3511     LIBXUL_DIST="$LIBXUL_SDK"
3512 else
3513     LIBXUL_DIST="$MOZ_BUILD_ROOT/dist"
3515 AC_SUBST(LIBXUL_DIST)
3517 SYSTEM_LIBXUL=
3519 MOZ_ARG_WITH_BOOL(system-libxul,
3520 [  --with-system-libxul    Use system installed libxul SDK],
3521     SYSTEM_LIBXUL=1)
3523 dnl ========================================================
3524 dnl = If NSPR was not detected in the system,
3525 dnl = use the one in the source tree (mozilla/nsprpub)
3526 dnl ========================================================
3527 MOZ_ARG_WITH_BOOL(system-nspr,
3528 [  --with-system-nspr      Use system installed NSPR],
3529     _USE_SYSTEM_NSPR=1 )
3531 if test -n "$_USE_SYSTEM_NSPR"; then
3532     AM_PATH_NSPR(4.10.6, [MOZ_NATIVE_NSPR=1], [AC_MSG_ERROR([your don't have NSPR installed or your version is too old])])
3535 if test -n "$MOZ_NATIVE_NSPR"; then
3536     _SAVE_CFLAGS=$CFLAGS
3537     CFLAGS="$CFLAGS $NSPR_CFLAGS"
3538     AC_TRY_COMPILE([#include "prtypes.h"],
3539                 [#ifndef PR_STATIC_ASSERT
3540                  #error PR_STATIC_ASSERT not defined or requires including prtypes.h
3541                  #endif],
3542                 [MOZ_NATIVE_NSPR=1],
3543                 AC_MSG_ERROR([system NSPR does not support PR_STATIC_ASSERT or including prtypes.h does not provide it]))
3544     AC_TRY_COMPILE([#include "prtypes.h"],
3545                 [#ifndef PR_UINT64
3546                  #error PR_UINT64 not defined or requires including prtypes.h
3547                  #endif],
3548                 [MOZ_NATIVE_NSPR=1],
3549                 AC_MSG_ERROR([system NSPR does not support PR_UINT64 or including prtypes.h does not provide it]))
3550     CFLAGS=$_SAVE_CFLAGS
3551 else
3552     if test -z "$LIBXUL_SDK"; then
3553         NSPR_CFLAGS="-I${LIBXUL_DIST}/include/nspr"
3554         if test -n "$GNU_CC"; then
3555             NSPR_LIBS="-L${LIBXUL_DIST}/lib -lnspr${NSPR_VERSION} -lplc${NSPR_VERSION} -lplds${NSPR_VERSION}"
3556         else
3557             NSPR_LIBS="${LIBXUL_DIST}/lib/nspr${NSPR_VERSION}.lib ${LIBXUL_DIST}/lib/plc${NSPR_VERSION}.lib ${LIBXUL_DIST}/lib/plds${NSPR_VERSION}.lib "
3558         fi
3559     else
3560         NSPR_CFLAGS=`"${LIBXUL_DIST}"/sdk/bin/nspr-config --prefix="${LIBXUL_DIST}" --includedir="${LIBXUL_DIST}/include/nspr" --cflags`
3561         NSPR_LIBS=`"${LIBXUL_DIST}"/sdk/bin/nspr-config --prefix="${LIBXUL_DIST}" --libdir="${LIBXUL_DIST}"/lib --libs`
3562     fi
3565 dnl set GRE_MILESTONE
3566 dnl ========================================================
3567 if test -n "$LIBXUL_SDK"; then
3568     GRE_MILESTONE=`$PYTHON "$_topsrcdir"/config/printconfigsetting.py "$LIBXUL_DIST"/bin/platform.ini Build Milestone`
3569 else
3570     GRE_MILESTONE=`tail -n 1 "$_topsrcdir"/config/milestone.txt 2>/dev/null || tail -1 "$_topsrcdir"/config/milestone.txt`
3572 AC_SUBST(GRE_MILESTONE)
3574 # set RELEASE_BUILD and NIGHTLY_BUILD variables depending on the cycle we're in
3575 # The logic works like this:
3576 # - if we have "a1" in GRE_MILESTONE, we're building Nightly (define NIGHTLY_BUILD)
3577 # - otherwise, if we have "a" in GRE_MILESTONE, we're building Nightly or Aurora
3578 # - otherwise, we're building Release/Beta (define RELEASE_BUILD)
3579 case "$GRE_MILESTONE" in
3580   *a1*)
3581       NIGHTLY_BUILD=1
3582       AC_DEFINE(NIGHTLY_BUILD)
3583       ;;
3584   *a*)
3585       ;;
3586   *)
3587       RELEASE_BUILD=1
3588       AC_DEFINE(RELEASE_BUILD)
3589       ;;
3590 esac
3591 AC_SUBST(NIGHTLY_BUILD)
3592 AC_SUBST(RELEASE_BUILD)
3594 dnl ========================================================
3595 dnl Disable compiling sources in unified mode.
3596 dnl ========================================================
3598 if test -z "$NIGHTLY_BUILD"; then
3599     MOZ_DISABLE_UNIFIED_COMPILATION=1
3602 MOZ_ARG_DISABLE_BOOL(unified-compilation,
3603 [  --disable-unified-compilation
3604                           Disable unified compilation of some C/C++ sources],
3605     MOZ_DISABLE_UNIFIED_COMPILATION=1,
3606     MOZ_DISABLE_UNIFIED_COMPILATION=)
3607 AC_SUBST(MOZ_DISABLE_UNIFIED_COMPILATION)
3609 dnl system libevent Support
3610 dnl ========================================================
3611 MOZ_ARG_WITH_STRING(system-libevent,
3612 [  --with-system-libevent[=PFX]
3613                           Use system libevent [installed at prefix PFX]],
3614     LIBEVENT_DIR=$withval)
3616 _SAVE_CFLAGS=$CFLAGS
3617 _SAVE_LDFLAGS=$LDFLAGS
3618 _SAVE_LIBS=$LIBS
3619 if test "$LIBEVENT_DIR" = yes; then
3620     PKG_CHECK_MODULES(MOZ_LIBEVENT, libevent,
3621         MOZ_NATIVE_LIBEVENT=1,
3622         LIBEVENT_DIR=/usr)
3624 if test -z "$LIBEVENT_DIR" -o "$LIBEVENT_DIR" = no; then
3625     MOZ_NATIVE_LIBEVENT=
3626 elif test -z "$MOZ_NATIVE_LIBEVENT"; then
3627     CFLAGS="-I${LIBEVENT_DIR}/include $CFLAGS"
3628     LDFLAGS="-L${LIBEVENT_DIR}/lib $LDFLAGS"
3629     MOZ_CHECK_HEADER(event.h,
3630         [if test ! -f "${LIBEVENT_DIR}/include/event.h"; then
3631              AC_MSG_ERROR([event.h found, but is not in ${LIBEVENT_DIR}/include])
3632          fi],
3633         AC_MSG_ERROR([--with-system-libevent requested but event.h not found]))
3634     AC_CHECK_LIB(event, event_init,
3635                  [MOZ_NATIVE_LIBEVENT=1
3636                   MOZ_LIBEVENT_CFLAGS="-I${LIBEVENT_DIR}/include"
3637                   MOZ_LIBEVENT_LIBS="-L${LIBEVENT_DIR}/lib -levent"],
3638                  [MOZ_NATIVE_LIBEVENT= MOZ_LIBEVENT_CFLAGS= MOZ_LIBEVENT_LIBS=])
3640 CFLAGS=$_SAVE_CFLAGS
3641 LDFLAGS=$_SAVE_LDFLAGS
3642 LIBS=$_SAVE_LIBS
3644 AC_SUBST(MOZ_NATIVE_LIBEVENT)
3645 AC_SUBST(MOZ_LIBEVENT_CFLAGS)
3646 AC_SUBST(MOZ_LIBEVENT_LIBS)
3648 dnl ========================================================
3649 dnl = If NSS was not detected in the system,
3650 dnl = use the one in the source tree (mozilla/security/nss)
3651 dnl ========================================================
3653 MOZ_ARG_WITH_BOOL(system-nss,
3654 [  --with-system-nss       Use system installed NSS],
3655     _USE_SYSTEM_NSS=1 )
3657 if test -n "$_USE_SYSTEM_NSS"; then
3658     AM_PATH_NSS(3.16.2, [MOZ_NATIVE_NSS=1], [AC_MSG_ERROR([you don't have NSS installed or your version is too old])])
3661 if test -n "$MOZ_NATIVE_NSS"; then
3662    NSS_LIBS="$NSS_LIBS -lcrmf"
3663 else
3664    NSS_CFLAGS='-I$(LIBXUL_DIST)/include/nss'
3666    if test -z "$GNU_CC" -a "$OS_ARCH" = "WINNT"; then
3667        NSS_LIBS="\
3668         \$(LIBXUL_DIST)/lib/\$(LIB_PREFIX)crmf.\$(LIB_SUFFIX) \
3669         \$(LIBXUL_DIST)/lib/\$(LIB_PREFIX)smime$NSS_VERSION.\$(LIB_SUFFIX) \
3670         \$(LIBXUL_DIST)/lib/\$(LIB_PREFIX)ssl$NSS_VERSION.\$(LIB_SUFFIX) \
3671         \$(LIBXUL_DIST)/lib/\$(LIB_PREFIX)nss$NSS_VERSION.\$(LIB_SUFFIX) \
3672         \$(LIBXUL_DIST)/lib/\$(LIB_PREFIX)nssutil$NSS_VERSION.\$(LIB_SUFFIX)"
3673    else
3674        NSS_LIBS='$(LIBS_DIR)'" -lcrmf -lsmime$NSS_VERSION -lssl$NSS_VERSION -lnss$NSS_VERSION -lnssutil$NSS_VERSION"
3675    fi
3678 dnl ======================
3679 dnl Detect yasm
3680 dnl ======================
3682 AC_MSG_CHECKING([for YASM assembler])
3683 AC_CHECK_PROGS(YASM, yasm, "")
3685 if test -n "$YASM"; then
3686   dnl Pull out yasm's version string
3687   YASM_VERSION=`yasm --version | $AWK '/^yasm/ { print $2 }'`
3688   _YASM_MAJOR_VERSION=`echo ${YASM_VERSION} | $AWK -F\. '{ print $1 }'`
3689   _YASM_MINOR_VERSION=`echo ${YASM_VERSION} | $AWK -F\. '{ print $2 }'`
3690   _YASM_RELEASE=`      echo ${YASM_VERSION} | $AWK -F\. '{ print $3 }'`
3691   _YASM_BUILD=`        echo ${YASM_VERSION} | $AWK -F\. '{ print $4 }'`
3694 if test -z "$SKIP_LIBRARY_CHECKS"; then
3695 dnl system JPEG support
3696 dnl ========================================================
3697 MOZ_ARG_WITH_STRING(system-jpeg,
3698 [  --with-system-jpeg[=PFX]
3699                           Use system libjpeg [installed at prefix PFX]],
3700     JPEG_DIR=$withval)
3702 _SAVE_CFLAGS=$CFLAGS
3703 _SAVE_LDFLAGS=$LDFLAGS
3704 _SAVE_LIBS=$LIBS
3705 if test -n "${JPEG_DIR}" -a "${JPEG_DIR}" != "yes"; then
3706     CFLAGS="-I${JPEG_DIR}/include $CFLAGS"
3707     LDFLAGS="-L${JPEG_DIR}/lib $LDFLAGS"
3709 if test -z "$JPEG_DIR" -o "$JPEG_DIR" = no; then
3710     MOZ_NATIVE_JPEG=
3711 else
3712     AC_CHECK_LIB(jpeg, jpeg_destroy_compress, [MOZ_NATIVE_JPEG=1 MOZ_JPEG_LIBS="-ljpeg"], MOZ_NATIVE_JPEG=)
3715 if test "$MOZ_NATIVE_JPEG" = 1; then
3716     AC_TRY_COMPILE([ #include <stdio.h>
3717                      #include <sys/types.h>
3718                      #include <jpeglib.h> ],
3719                    [ #if JPEG_LIB_VERSION < $MOZJPEG
3720                      #error "Insufficient JPEG library version ($MOZJPEG required)."
3721                      #endif
3722                      #ifndef JCS_EXTENSIONS
3723                      #error "libjpeg-turbo JCS_EXTENSIONS required"
3724                      #endif
3725                      ],
3726                    MOZ_NATIVE_JPEG=1,
3727                    AC_MSG_ERROR([Insufficient JPEG library version for --with-system-jpeg]))
3729 CFLAGS=$_SAVE_CFLAGS
3730 LDFLAGS=$_SAVE_LDFLAGS
3731 LIBS=$_SAVE_LIBS
3733 if test -n "${JPEG_DIR}" -a -d "${JPEG_DIR}" -a "$MOZ_NATIVE_JPEG" = 1; then
3734     MOZ_JPEG_CFLAGS="-I${JPEG_DIR}/include"
3735     MOZ_JPEG_LIBS="-L${JPEG_DIR}/lib ${MOZ_JPEG_LIBS}"
3737 fi # SKIP_LIBRARY_CHECKS
3739 dnl system ZLIB support
3740 dnl ========================================================
3741 MOZ_ZLIB_CHECK([1.2.3])
3743 if test "$MOZ_NATIVE_ZLIB" != 1; then
3744     MOZ_ZLIB_CFLAGS="-I${_topsrcdir}/modules/zlib/src"
3745     MOZ_ZLIB_LIBS='$(call EXPAND_LIBNAME_PATH,mozz,'"$MOZ_BUILD_ROOT"'/modules/zlib/src)'
3748 if test "$MOZ_LINKER" = 1 -a "$MOZ_NATIVE_ZLIB" != 1; then
3749     AC_MSG_ERROR([Custom dynamic linker requires --with-system-zlib])
3752 MOZ_PNG_ARM_NEON=
3754 if test -z "$SKIP_LIBRARY_CHECKS"; then
3755 dnl system BZIP2 Support
3756 dnl ========================================================
3757 MOZ_ARG_WITH_STRING(system-bz2,
3758 [  --with-system-bz2[=PFX]
3759                           Use system libbz2 [installed at prefix PFX]],
3760     BZ2_DIR=$withval)
3762 _SAVE_CFLAGS=$CFLAGS
3763 _SAVE_LDFLAGS=$LDFLAGS
3764 _SAVE_LIBS=$LIBS
3765 if test -n "${BZ2_DIR}" -a "${BZ2_DIR}" != "yes"; then
3766     CFLAGS="-I${BZ2_DIR}/include $CFLAGS"
3767     LDFLAGS="-L${BZ2_DIR}/lib $LDFLAGS"
3769 if test -z "$BZ2_DIR" -o "$BZ2_DIR" = no; then
3770     MOZ_NATIVE_BZ2=
3771 else
3772     AC_CHECK_LIB(bz2, BZ2_bzread, [MOZ_NATIVE_BZ2=1 MOZ_BZ2_LIBS="-lbz2"],
3773     [MOZ_NATIVE_BZ2= MOZ_BZ2_CFLAGS= MOZ_BZ2_LIBS=])
3775 CFLAGS=$_SAVE_CFLAGS
3776 LDFLAGS=$_SAVE_LDFLAGS
3777 LIBS=$_SAVE_LIBS
3779 if test "${BZ2_DIR}" -a -d "${BZ2_DIR}" -a "$MOZ_NATIVE_BZ2" = 1; then
3780     MOZ_BZ2_CFLAGS="-I${BZ2_DIR}/include"
3781     MOZ_BZ2_LIBS="-L${BZ2_DIR}/lib ${MOZ_BZ2_LIBS}"
3784 dnl ========================================================
3785 dnl system PNG Support
3786 dnl ========================================================
3787 MOZ_ARG_WITH_STRING(system-png,
3788 [  --with-system-png[=PFX]
3789                           Use system libpng [installed at prefix PFX]],
3790     PNG_DIR=$withval)
3792 _SAVE_CFLAGS=$CFLAGS
3793 _SAVE_LDFLAGS=$LDFLAGS
3794 _SAVE_LIBS=$LIBS
3795 if test -n "${PNG_DIR}" -a "${PNG_DIR}" != "yes"; then
3796     CFLAGS="-I${PNG_DIR}/include $CFLAGS"
3797     LDFLAGS="-L${PNG_DIR}/lib $LDFLAGS"
3799 if test -z "$PNG_DIR" -o "$PNG_DIR" = no; then
3800     MOZ_NATIVE_PNG=
3801 else
3802     AC_CHECK_LIB(png, png_get_valid, [MOZ_NATIVE_PNG=1 MOZ_PNG_LIBS="-lpng"],
3803                  AC_MSG_ERROR([--with-system-png requested but no working libpng found]))
3804     AC_CHECK_LIB(png, png_get_acTL, ,
3805                  AC_MSG_ERROR([--with-system-png won't work because the system's libpng doesn't have APNG support]))
3807 if test "$MOZ_NATIVE_PNG" = 1; then
3808     AC_TRY_COMPILE([ #include <stdio.h>
3809                      #include <sys/types.h>
3810                      #include <png.h> ],
3811                    [ #if PNG_LIBPNG_VER < $MOZPNG
3812                      #error "Insufficient libpng version ($MOZPNG required)."
3813                      #endif
3814                      #ifndef PNG_UINT_31_MAX
3815                      #error "Insufficient libpng version."
3816                      #endif ],
3817                    MOZ_NATIVE_PNG=1,
3818                    AC_MSG_ERROR([--with-system-png requested but no working libpng found]))
3820 CFLAGS=$_SAVE_CFLAGS
3821 LDFLAGS=$_SAVE_LDFLAGS
3822 LIBS=$_SAVE_LIBS
3824 if test "${PNG_DIR}" -a -d "${PNG_DIR}" -a "$MOZ_NATIVE_PNG" = 1; then
3825     MOZ_PNG_CFLAGS="-I${PNG_DIR}/include"
3826     MOZ_PNG_LIBS="-L${PNG_DIR}/lib ${MOZ_PNG_LIBS}"
3829 MOZ_PNG_ARM_NEON_CHECK=
3830 if test "$MOZ_NATIVE_PNG" != 1 -a "$CPU_ARCH" = "arm" ; then
3831     MOZ_ARG_ENABLE_STRING(png-arm-neon-support,
3832         [  --enable-png-arm-neon-support=TYPE
3833              Options include:
3834                  no
3835                  check (default)
3836                  nocheck (faster but unsafe)],
3837         [MOZ_PNG_ARM_NEON_SUPPORT=$enableval ] )
3838     case "$MOZ_PNG_ARM_NEON_SUPPORT" in
3839         no)
3840             # enable-png-arm-neon-support = no
3841             ;;
3842         nocheck)
3843             # enable-png-arm-neon-support = nocheck
3844             MOZ_PNG_ARM_NEON=1
3845             ;;
3846         *)
3847             MOZ_PNG_ARM_NEON=1
3848             MOZ_PNG_ARM_NEON_CHECK=1
3849             ;;
3850     esac
3853 AC_SUBST(MOZ_PNG_ARM_NEON_CHECK)
3855 fi # SKIP_LIBRARY_CHECKS
3857 AC_SUBST(MOZ_PNG_ARM_NEON)
3859 dnl ========================================================
3860 dnl system HunSpell Support
3861 dnl ========================================================
3862 MOZ_ARG_ENABLE_BOOL(system-hunspell,
3863 [  --enable-system-hunspell
3864                           Use system hunspell (located with pkgconfig)],
3865     MOZ_NATIVE_HUNSPELL=1 )
3867 if test -n "$MOZ_NATIVE_HUNSPELL"; then
3868     PKG_CHECK_MODULES(MOZ_HUNSPELL, hunspell)
3871 AC_SUBST(MOZ_NATIVE_HUNSPELL)
3873 dnl ========================================================
3874 dnl system libffi Support
3875 dnl ========================================================
3876 MOZ_CONFIG_FFI()
3878 if test -n "$MOZ_NATIVE_FFI"; then
3879     MOZ_JS_STATIC_LIBS="$MOZ_JS_STATIC_LIBS $MOZ_FFI_LIBS"
3882 # split JS out by default to avoid VS2005 PGO crash (bug 591836).
3883 if test "$OS_ARCH" = "WINNT"; then
3884   JS_SHARED_LIBRARY=1
3887 MOZ_ARG_ENABLE_BOOL(shared-js,
3888 [  --enable-shared-js
3889                           Create a shared JavaScript library.],
3890     JS_SHARED_LIBRARY=1,
3891     JS_SHARED_LIBRARY=)
3893 dnl ========================================================
3894 dnl Java SDK support
3895 dnl ========================================================
3897 JAVA_BIN_PATH=
3898 MOZ_ARG_WITH_STRING(java-bin-path,
3899 [  --with-java-bin-path=dir
3900                           Location of Java binaries (java, javac, jar)],
3901     JAVA_BIN_PATH=$withval)
3903 dnl ========================================================
3904 dnl =
3905 dnl = Application
3906 dnl =
3907 dnl ========================================================
3909 MOZ_ARG_HEADER(Application)
3911 ENABLE_TESTS=1
3912 ENABLE_SYSTEM_EXTENSION_DIRS=1
3913 MOZ_BRANDING_DIRECTORY=
3914 MOZ_OFFICIAL_BRANDING=
3915 MOZ_FEEDS=1
3916 MOZ_WEBAPP_RUNTIME=
3917 MOZ_JSDEBUGGER=1
3918 MOZ_AUTH_EXTENSION=1
3919 MOZ_RAW=
3920 MOZ_VORBIS=
3921 MOZ_TREMOR=
3922 MOZ_WAVE=1
3923 MOZ_SAMPLE_TYPE_FLOAT32=
3924 MOZ_SAMPLE_TYPE_S16=
3925 MOZ_OPUS=1
3926 MOZ_WEBM=1
3927 MOZ_GSTREAMER=
3928 MOZ_DIRECTSHOW=
3929 MOZ_WMF=
3930 MOZ_FMP4=
3931 MOZ_FFMPEG=
3932 MOZ_WEBRTC=1
3933 MOZ_PEERCONNECTION=
3934 MOZ_SRTP=
3935 MOZ_WEBRTC_SIGNALING=
3936 MOZ_WEBRTC_ASSERT_ALWAYS=1
3937 MOZ_SCTP=
3938 MOZ_MEDIA_PLUGINS=
3939 MOZ_MEDIA_NAVIGATOR=
3940 MOZ_OMX_PLUGIN=
3941 MOZ_VPX=
3942 MOZ_VPX_ERROR_CONCEALMENT=
3943 MOZ_WEBSPEECH=1
3944 VPX_AS=
3945 VPX_ASFLAGS=
3946 VPX_AS_DASH_C_FLAG=
3947 VPX_AS_CONVERSION=
3948 VPX_ASM_SUFFIX=
3949 VPX_X86_ASM=
3950 VPX_ARM_ASM=
3951 LIBJPEG_TURBO_AS=
3952 LIBJPEG_TURBO_ASFLAGS=
3953 LIBJPEG_TURBO_X86_ASM=
3954 LIBJPEG_TURBO_X64_ASM=
3955 LIBJPEG_TURBO_ARM_ASM=
3956 MOZ_PERMISSIONS=1
3957 MOZ_PLACES=1
3958 MOZ_SOCIAL=1
3959 MOZ_PREF_EXTENSIONS=1
3960 MOZ_PROFILELOCKING=1
3961 MOZ_REFLOW_PERF=
3962 MOZ_SAFE_BROWSING=
3963 MOZ_HELP_VIEWER=
3964 MOZ_SPELLCHECK=1
3965 MOZ_ANDROID_OMTC=
3966 MOZ_TOOLKIT_SEARCH=1
3967 MOZ_UI_LOCALE=en-US
3968 MOZ_UNIVERSALCHARDET=1
3969 MOZ_URL_CLASSIFIER=
3970 MOZ_XUL=1
3971 MOZ_ZIPWRITER=1
3972 NS_PRINTING=1
3973 MOZ_PDF_PRINTING=
3974 MOZ_DISABLE_CRYPTOLEGACY=
3975 NSS_DISABLE_DBM=
3976 NECKO_COOKIES=1
3977 NECKO_PROTOCOLS_DEFAULT="about app data file ftp http res viewsource websocket wyciwyg device"
3978 if test -n "$MOZ_RTSP"; then
3979   NECKO_PROTOCOLS_DEFAULT="$NECKO_PROTOCOLS_DEFAULT rtsp"
3981 USE_ARM_KUSER=
3982 BUILD_CTYPES=1
3983 MOZ_USE_NATIVE_POPUP_WINDOWS=
3984 MOZ_ANDROID_HISTORY=
3985 MOZ_WEBSMS_BACKEND=
3986 MOZ_ANDROID_BEAM=
3987 MOZ_ANDROID_SYNTHAPKS=
3988 ACCESSIBILITY=1
3989 MOZ_TIME_MANAGER=
3990 MOZ_PAY=
3991 MOZ_AUDIO_CHANNEL_MANAGER=
3992 NSS_NO_LIBPKIX=
3993 MOZ_CONTENT_SANDBOX=
3994 MOZ_CONTENT_SANDBOX_REPORTER=1
3995 JSGC_USE_EXACT_ROOTING=
3997 case "$target_os" in
3998     mingw*)
3999         NS_ENABLE_TSF=1
4000         AC_DEFINE(NS_ENABLE_TSF)
4001         ;;
4002 esac
4004 case "${target}" in
4005     *-android*|*-linuxandroid*)
4006         if test "$CPU_ARCH" = "arm" ; then
4007           USE_ARM_KUSER=1
4008         fi
4010         NSS_DISABLE_DBM=1
4011         MOZ_THEME_FASTSTRIPE=1
4012         MOZ_TREE_FREETYPE=1
4013         MOZ_MEMORY=1
4014         MOZ_RAW=1
4015         ;;
4017 esac
4019 MOZ_ARG_WITH_STRING(external-source-dir,
4020 [  --with-external-source-dir=dir
4021                           External directory containing additional build files.],
4022 [ EXTERNAL_SOURCE_DIR=$withval])
4023 AC_SUBST(EXTERNAL_SOURCE_DIR)
4025 MOZ_ARG_ENABLE_STRING(application,
4026 [  --enable-application=APP
4027                           Options include:
4028                             browser (Firefox)
4029                             xulrunner
4030                             tools/update-packaging (AUS-related packaging tools)],
4031 [ MOZ_BUILD_APP=$enableval ] )
4033 MOZ_ARG_WITH_STRING(xulrunner-stub-name,
4034 [  --with-xulrunner-stub-name=appname   Create the xulrunner stub with the given name],
4035   XULRUNNER_STUB_NAME=$withval)
4037 if test -z "$XULRUNNER_STUB_NAME"; then
4038   case "$target_os" in
4039   darwin*)
4040     XULRUNNER_STUB_NAME=xulrunner
4041     ;;
4042   *)
4043     XULRUNNER_STUB_NAME=xulrunner-stub
4044   esac
4046 AC_SUBST(XULRUNNER_STUB_NAME)
4048 AC_MSG_CHECKING([for application to build])
4049 if test -z "$MOZ_BUILD_APP"; then
4050   AC_MSG_RESULT([browser])
4051   MOZ_BUILD_APP=browser
4052 else
4053   # "mobile" no longer exists.
4054   if test "$MOZ_BUILD_APP" = "mobile" ; then
4055     AC_MSG_RESULT([none])
4056     AC_MSG_ERROR([--enable-application=mobile is no longer supported.])
4057   fi
4058   # We have a valid application only if it has a build.mk file in its top
4059   # directory.
4060   if test ! -f "${srcdir}/${MOZ_BUILD_APP}/build.mk" ; then
4061     AC_MSG_RESULT([none])
4062     AC_MSG_ERROR([--enable-application value not recognized (${MOZ_BUILD_APP}/build.mk does not exist).])
4063   else
4064     AC_MSG_RESULT([$MOZ_BUILD_APP])
4065   fi
4068 # The app update channel is 'default' when not supplied. The value is used in
4069 # the application's confvars.sh so it must be set before confvars.sh is called.
4070 MOZ_ARG_ENABLE_STRING([update-channel],
4071 [  --enable-update-channel=CHANNEL
4072                           Select application update channel (default=default)],
4073     MOZ_UPDATE_CHANNEL=`echo $enableval | tr A-Z a-z`)
4075 if test -z "$MOZ_UPDATE_CHANNEL"; then
4076     MOZ_UPDATE_CHANNEL=default
4078 AC_DEFINE_UNQUOTED(MOZ_UPDATE_CHANNEL, $MOZ_UPDATE_CHANNEL)
4079 AC_SUBST(MOZ_UPDATE_CHANNEL)
4081 # Allow to specify a Mozilla API key file that contains the secret key to be
4082 # used for various Mozilla API requests.
4083 MOZ_ARG_WITH_STRING(mozilla-api-keyfile,
4084 [  --with-mozilla-api-keyfile=file   Use the secret key contained in the given keyfile for Mozilla API requests],
4085   MOZ_MOZILLA_API_KEY=`cat $withval`)
4086 if test -z "$MOZ_MOZILLA_API_KEY"; then
4087     MOZ_MOZILLA_API_KEY=no-mozilla-api-key
4089 AC_SUBST(MOZ_MOZILLA_API_KEY)
4091 # Allow to specify a Google API key file that contains the secret key to be
4092 # used for various Google API requests.
4093 MOZ_ARG_WITH_STRING(google-api-keyfile,
4094 [  --with-google-api-keyfile=file   Use the secret key contained in the given keyfile for Google API requests],
4095   MOZ_GOOGLE_API_KEY=`cat $withval`)
4096 if test -z "$MOZ_GOOGLE_API_KEY"; then
4097     MOZ_GOOGLE_API_KEY=no-google-api-key
4099 AC_SUBST(MOZ_GOOGLE_API_KEY)
4101 # Allow the application to influence configure with a confvars.sh script.
4102 AC_MSG_CHECKING([if app-specific confvars.sh exists])
4103 if test -f "${srcdir}/${MOZ_BUILD_APP}/confvars.sh" ; then
4104   AC_MSG_RESULT([${srcdir}/${MOZ_BUILD_APP}/confvars.sh])
4105   . "${srcdir}/${MOZ_BUILD_APP}/confvars.sh"
4106 else
4107   AC_MSG_RESULT([no])
4110 # Allow influencing configure with a defines.sh script.
4111 . "${srcdir}/build/defines.sh"
4113 # If we're not building a release build, define EARLY_BETA_OR_EARLIER if it is
4114 # set in defines.sh
4115 if test "$BUILDING_RELEASE"; then
4116   # Override value in defines.sh, if any
4117   EARLY_BETA_OR_EARLIER=
4118 elif test "$EARLY_BETA_OR_EARLIER"; then
4119   AC_DEFINE(EARLY_BETA_OR_EARLIER)
4121 AC_SUBST(EARLY_BETA_OR_EARLIER)
4123 # Allow the application to provide a subconfigure script
4124 if test -f "${srcdir}/${MOZ_BUILD_APP}/configure.in" ; then
4125   do_output_subdirs() {
4126     if test -n "$_subconfigure_subdirs"; then
4127       AC_MSG_ERROR([Cannot specify more than one sub-sub-configure])
4128      fi
4129     _subconfigure_subdir="$1"
4130     _subconfigure_config_args="$ac_configure_args"
4131   }
4132   tmpscript=`$PYTHON -c 'import os, tempfile; print tempfile.mktemp(prefix="subscript.").replace(os.sep, "/")'` || exit 1
4133   m4 "${srcdir}/build/autoconf/subconfigure.m4" \
4134      "${srcdir}/build/autoconf/altoptions.m4" \
4135      "${srcdir}/${MOZ_BUILD_APP}/configure.in" > $tmpscript
4136   . $tmpscript
4137   rm -f $tmpscript
4140 # Allow someone to change MOZ_APP_NAME and MOZ_APP_BASENAME in mozconfig
4141 MOZ_ARG_WITH_STRING(app-name,
4142 [--with-app-name=APPNAME sets MOZ_APP_NAME to APPNAME],
4143 WITH_APP_NAME=$withval,
4146 if test -n "$WITH_APP_NAME" ; then
4147     MOZ_APP_NAME="$WITH_APP_NAME"
4150 MOZ_ARG_WITH_STRING(app-basename,
4151 [--with-app-basename=BASENAME sets MOZ_APP_BASENAME to BASENAME],
4152 WITH_APP_BASENAME=$withval,
4155 if test -n "$WITH_APP_BASENAME" ; then
4156     MOZ_APP_BASENAME="$WITH_APP_BASENAME"
4159 # Now is a good time to test for logic errors, define mismatches, etc.
4160 case "$MOZ_BUILD_APP" in
4161 xulrunner)
4162   if test "$LIBXUL_SDK"; then
4163     AC_MSG_ERROR([Building XULRunner --with-libxul-sdk doesn't make sense; XULRunner provides the libxul SDK.])
4164   fi
4165   ;;
4166 esac
4168 # Special cases where we need to AC_DEFINE something. Also a holdover for apps
4169 # that haven't made a confvars.sh yet. Don't add new stuff here, use
4170 # MOZ_BUILD_APP.
4171 case "$MOZ_BUILD_APP" in
4172 browser)
4173   AC_DEFINE(MOZ_PHOENIX)
4174   ;;
4176 xulrunner)
4177   AC_DEFINE(MOZ_XULRUNNER)
4178   ;;
4179 b2g)
4180   AC_DEFINE(MOZ_B2G)
4181   ;;
4182 esac
4184 AC_SUBST(MOZ_BUILD_APP)
4185 AC_SUBST(MOZ_PHOENIX)
4186 AC_SUBST(MOZ_XULRUNNER)
4187 AC_SUBST(MOZ_B2G)
4188 AC_SUBST(MOZ_B2G_VERSION)
4190 AC_DEFINE_UNQUOTED(MOZ_BUILD_APP,$MOZ_BUILD_APP)
4192 dnl ========================================================
4193 dnl Check android sdk version depending on mobile target
4194 dnl ========================================================
4196 if test -z "$gonkdir" ; then
4197     # Minimum Android SDK API Level we require.
4198     case "$MOZ_BUILD_APP" in
4199     mobile/android)
4200         android_min_api_level=16
4201         case "$target" in
4202         *-android*|*-linuxandroid*)
4203             :
4204             ;;
4205         *)
4206             AC_MSG_ERROR([You must specify --target=arm-linux-androideabi (or some other valid android target) when building with --enable-application=mobile/android. See https://wiki.mozilla.org/Mobile/Fennec/Android#Setup_Fennec_mozconfig for more information about the necessary options])
4207             ;;
4208         esac
4209         ;;
4210     esac
4212     MOZ_ANDROID_SDK($android_min_api_level)
4215 dnl ========================================================
4216 dnl =
4217 dnl = Toolkit Options
4218 dnl =
4219 dnl ========================================================
4220 MOZ_ARG_HEADER(Toolkit Options)
4222     dnl ========================================================
4223     dnl = Select the default toolkit
4224     dnl ========================================================
4225     MOZ_ARG_ENABLE_STRING(default-toolkit,
4226     [  --enable-default-toolkit=TK
4227                           Select default toolkit
4228                           Platform specific defaults:
4229                             Mac OS X - cairo-cocoa
4230                             Win32 - cairo-windows
4231                             * - cairo-gtk2
4232                             * - cairo-gtk3
4233                             * - cairo-qt],
4234     [ _DEFAULT_TOOLKIT=$enableval ],
4235     [ _DEFAULT_TOOLKIT=$_PLATFORM_DEFAULT_TOOLKIT])
4237     if test "$_DEFAULT_TOOLKIT" = "cairo-windows" \
4238         -o "$_DEFAULT_TOOLKIT" = "cairo-gtk2" \
4239         -o "$_DEFAULT_TOOLKIT" = "cairo-gtk2-x11" \
4240         -o "$_DEFAULT_TOOLKIT" = "cairo-gtk3" \
4241         -o "$_DEFAULT_TOOLKIT" = "cairo-qt" \
4242         -o "$_DEFAULT_TOOLKIT" = "cairo-cocoa" \
4243         -o "$_DEFAULT_TOOLKIT" = "cairo-uikit" \
4244         -o "$_DEFAULT_TOOLKIT" = "cairo-android" \
4245         -o "$_DEFAULT_TOOLKIT" = "cairo-gonk"
4246     then
4247         dnl nglayout only supports building with one toolkit,
4248         dnl so ignore everything after the first comma (",").
4249         MOZ_WIDGET_TOOLKIT=`echo "$_DEFAULT_TOOLKIT" | sed -e "s/,.*$//"`
4250     else
4251         AC_MSG_ERROR([You must specify a default toolkit (perhaps $_PLATFORM_DEFAULT_TOOLKIT).])
4252     fi
4254 MOZ_ARG_WITHOUT_BOOL(x,
4255 [  --without-x              Build without X11],
4256     WITHOUT_X11=1)
4258 dnl ========================================================
4259 dnl = Enable the toolkit as needed                         =
4260 dnl ========================================================
4262 MOZ_WIDGET_GTK=
4264 case "$MOZ_WIDGET_TOOLKIT" in
4266 cairo-windows)
4267     MOZ_WIDGET_TOOLKIT=windows
4268     MOZ_WEBGL=1
4269     MOZ_PDF_PRINTING=1
4270     MOZ_INSTRUMENT_EVENT_LOOP=1
4271     if test -n "$GNU_CC"; then
4272         MOZ_FOLD_LIBS=
4273     fi
4274     ;;
4276 cairo-gtk3)
4277     MOZ_WIDGET_TOOLKIT=gtk3
4278     MOZ_ENABLE_GTK=1
4279     MOZ_ENABLE_GTK3=1
4280     MOZ_ENABLE_XREMOTE=1
4281     MOZ_WEBGL=1
4282     MOZ_GL_DEFAULT_PROVIDER=GLX
4284     AC_DEFINE(MOZ_X11)
4285     MOZ_X11=1
4286     USE_FC_FREETYPE=1
4288     TK_CFLAGS='$(MOZ_GTK3_CFLAGS)'
4289     TK_LIBS='$(MOZ_GTK3_LIBS)'
4290     MOZ_WIDGET_GTK=3
4291     AC_DEFINE_UNQUOTED(MOZ_WIDGET_GTK,$MOZ_WIDGET_GTK)
4292     MOZ_PDF_PRINTING=1
4293     MOZ_INSTRUMENT_EVENT_LOOP=1
4294     ;;
4296 cairo-gtk2|cairo-gtk2-x11)
4297     MOZ_WIDGET_TOOLKIT=gtk2
4298     MOZ_ENABLE_GTK=1
4299     MOZ_ENABLE_GTK2=1
4300     MOZ_ENABLE_XREMOTE=1
4301     MOZ_WEBGL=1
4302     MOZ_GL_DEFAULT_PROVIDER=GLX
4304     AC_DEFINE(MOZ_X11)
4305     MOZ_X11=1
4306     USE_FC_FREETYPE=1
4308     TK_CFLAGS='$(MOZ_GTK2_CFLAGS)'
4309     TK_LIBS='$(MOZ_GTK2_LIBS)'
4310     AC_DEFINE(MOZ_WIDGET_GTK2)
4311     MOZ_WIDGET_GTK=2
4312     AC_DEFINE_UNQUOTED(MOZ_WIDGET_GTK,$MOZ_WIDGET_GTK)
4313     MOZ_PDF_PRINTING=1
4314     MOZ_INSTRUMENT_EVENT_LOOP=1
4315     ;;
4317 cairo-qt)
4318     MOZ_WIDGET_TOOLKIT=qt
4319     MOZ_ENABLE_QT=1
4320     if test -z "$WITHOUT_X11"; then
4321       MOZ_ENABLE_XREMOTE=1
4322       MOZ_GL_DEFAULT_PROVIDER=GLX
4323       MOZ_X11=1
4324       AC_DEFINE(MOZ_X11)
4325       XT_LIBS=
4326     fi
4328     MOZ_WEBGL=1
4329     USE_FC_FREETYPE=1
4330     TK_CFLAGS='$(MOZ_QT_CFLAGS)'
4331     TK_LIBS='$(MOZ_QT_LIBS)'
4332     AC_DEFINE(MOZ_WIDGET_QT)
4333     MOZ_PDF_PRINTING=1
4334     AC_DEFINE(QT_NO_KEYWORDS)
4335     ;;
4337 cairo-cocoa)
4338     MOZ_WIDGET_TOOLKIT=cocoa
4339     AC_DEFINE(MOZ_WIDGET_COCOA)
4340     LDFLAGS="$LDFLAGS -framework Cocoa -lobjc"
4341     TK_LIBS='-framework CoreLocation -framework QuartzCore -framework Carbon -framework CoreAudio -framework AudioToolbox -framework AudioUnit -framework AddressBook -framework OpenGL'
4342     TK_CFLAGS="-DNO_X11"
4343     CFLAGS="$CFLAGS $TK_CFLAGS"
4344     CXXFLAGS="$CXXFLAGS $TK_CFLAGS"
4345     XPCOM_FROZEN_LDOPTS='$(LIBXUL_DIST)/bin/XUL $(call EXPAND_LIBNAME_PATH,mozalloc,$(LIBXUL_DIST)/bin)'
4346     MOZ_USER_DIR="Mozilla"
4347     MOZ_FS_LAYOUT=bundle
4348     MOZ_WEBGL=1
4349     MOZ_INSTRUMENT_EVENT_LOOP=1
4350     ;;
4352 cairo-uikit)
4353     MOZ_WIDGET_TOOLKIT=uikit
4354     AC_DEFINE(MOZ_WIDGET_UIKIT)
4355     LDFLAGS="$LDFLAGS -framework UIKit -lobjc"
4356     TK_CFLAGS="-DNO_X11"
4357     TK_LIBS='-framework Foundation -framework CoreFoundation -framework CoreGraphics -framework CoreText'
4358     CFLAGS="$CFLAGS $TK_CFLAGS"
4359     CXXFLAGS="$CXXFLAGS $TK_CFLAGS"
4360     XPCOM_FROZEN_LDOPTS='$(LIBXUL_DIST)/bin/XUL $(call EXPAND_LIBNAME_PATH,mozalloc,$(LIBXUL_DIST)/bin)'
4361     MOZ_USER_DIR="Mozilla"
4362     MOZ_FS_LAYOUT=bundle
4363     ;;
4365 cairo-android)
4366     AC_DEFINE(MOZ_WIDGET_ANDROID)
4367     MOZ_WIDGET_TOOLKIT=android
4368     TK_CFLAGS='$(MOZ_CAIRO_CFLAGS) $(MOZ_PIXMAN_CFLAGS)'
4369     TK_LIBS='$(MOZ_CAIRO_LIBS) $(MOZ_PIXMAN_LIBS)'
4370     MOZ_WEBGL=1
4371     MOZ_PDF_PRINTING=1
4372     MOZ_INSTRUMENT_EVENT_LOOP=1
4373     ;;
4375 cairo-gonk)
4376     XPCOM_FROZEN_LDOPTS='$(call EXPAND_LIBNAME_PATH,xul mozalloc,$(LIBXUL_DIST)/lib)'
4377     AC_DEFINE(MOZ_WIDGET_GONK)
4378     AC_DEFINE(MOZ_TOUCH)
4379     MOZ_WIDGET_TOOLKIT=gonk
4380     TK_CFLAGS='$(MOZ_CAIRO_CFLAGS) $(MOZ_PIXMAN_CFLAGS)'
4381     TK_LIBS='$(MOZ_CAIRO_LIBS) $(MOZ_PIXMAN_LIBS)'
4382     MOZ_WEBGL=1
4383     MOZ_PDF_PRINTING=1
4384     MOZ_TOUCH=1
4385     MOZ_INSTRUMENT_EVENT_LOOP=1
4386     ;;
4388 esac
4390 AC_SUBST(MOZ_PDF_PRINTING)
4391 if test "$MOZ_PDF_PRINTING"; then
4392    PDF_SURFACE_FEATURE="#define CAIRO_HAS_PDF_SURFACE 1"
4393    AC_DEFINE(MOZ_PDF_PRINTING)
4396 if test "$MOZ_ENABLE_XREMOTE"; then
4397     AC_DEFINE(MOZ_ENABLE_XREMOTE)
4400 if test "$MOZ_INSTRUMENT_EVENT_LOOP"; then
4401    AC_DEFINE(MOZ_INSTRUMENT_EVENT_LOOP)
4404 if test "$COMPILE_ENVIRONMENT"; then
4405   if test "$MOZ_ENABLE_GTK3"; then
4406     PKG_CHECK_MODULES(MOZ_GTK3, gtk+-3.0 >= $GTK3_VERSION gtk+-unix-print-3.0 glib-2.0 gobject-2.0 $GDK_PACKAGES)
4407   fi
4408   if test "$MOZ_ENABLE_GTK2"; then
4409     if test "$MOZ_X11"; then
4410       GDK_PACKAGES=gdk-x11-2.0
4411     fi
4413     PKG_CHECK_MODULES(MOZ_GTK2, gtk+-2.0 >= $GTK2_VERSION gtk+-unix-print-2.0 glib-2.0 gobject-2.0 $GDK_PACKAGES)
4414   fi
4416 fi # COMPILE_ENVIRONMENT
4418 AC_SUBST(MOZ_FS_LAYOUT)
4420 dnl ========================================================
4421 dnl Use ARM userspace kernel helpers; tell NSPR to enable
4422 dnl their usage and use them in spidermonkey.
4423 dnl ========================================================
4424 MOZ_ARG_WITH_BOOL(arm-kuser,
4425 [  --with-arm-kuser         Use kuser helpers (Linux/ARM only -- requires kernel 2.6.13 or later)],
4426     USE_ARM_KUSER=1,)
4427 if test -n "$USE_ARM_KUSER"; then
4428    AC_DEFINE(USE_ARM_KUSER)
4431 dnl ========================================================
4432 dnl = startup-notification support module
4433 dnl ========================================================
4435 if test "$MOZ_ENABLE_GTK"
4436 then
4437     MOZ_ENABLE_STARTUP_NOTIFICATION=
4439     MOZ_ARG_ENABLE_BOOL(startup-notification,
4440     [  --enable-startup-notification
4441                           Enable startup-notification support (default: disabled) ],
4442         MOZ_ENABLE_STARTUP_NOTIFICATION=force,
4443         MOZ_ENABLE_STARTUP_NOTIFICATION=)
4444     if test "$MOZ_ENABLE_STARTUP_NOTIFICATION"
4445     then
4446         PKG_CHECK_MODULES(MOZ_STARTUP_NOTIFICATION,
4447                           libstartup-notification-1.0 >= $STARTUP_NOTIFICATION_VERSION,
4448         [MOZ_ENABLE_STARTUP_NOTIFICATION=1], [
4449             if test "$MOZ_ENABLE_STARTUP_NOTIFICATION" = "force"
4450             then
4451                 AC_MSG_ERROR([* * * Could not find startup-notification >= $STARTUP_NOTIFICATION_VERSION])
4452             fi
4453             MOZ_ENABLE_STARTUP_NOTIFICATION=
4454         ])
4455     fi
4457     if test "$MOZ_ENABLE_STARTUP_NOTIFICATION"; then
4458         AC_DEFINE(MOZ_ENABLE_STARTUP_NOTIFICATION)
4459     fi
4461     TK_LIBS="$TK_LIBS $MOZ_STARTUP_NOTIFICATION_LIBS"
4463 AC_SUBST(MOZ_ENABLE_STARTUP_NOTIFICATION)
4464 AC_SUBST(MOZ_STARTUP_NOTIFICATION_CFLAGS)
4465 AC_SUBST(MOZ_STARTUP_NOTIFICATION_LIBS)
4467 dnl ========================================================
4468 dnl Disable printing
4469 dnl ========================================================
4470 MOZ_ARG_DISABLE_BOOL(printing,
4471 [  --disable-printing      Disable printing support],
4472     NS_PRINTING=,
4473     NS_PRINTING=1)
4475 if test "$NS_PRINTING"; then
4476     AC_DEFINE(NS_PRINTING)
4477     AC_DEFINE(NS_PRINT_PREVIEW)
4480 dnl ========================================================
4481 dnl = QT support
4482 dnl ========================================================
4483 if test "$MOZ_ENABLE_QT"
4484 then
4485     MOZ_ARG_WITH_STRING(qtdir,
4486     [  --with-qtdir=\$dir       Specify Qt directory ],
4487     [ QTDIR=$withval])
4489     if test -z "$QTDIR"; then
4490         AC_CHECK_PROGS(HOST_QMAKE, $HOST_QMAKE qmake, "")
4491     else
4492         HOST_QMAKE="$QTDIR/bin/qmake"
4493     fi
4494     QT_VERSION=`$HOST_QMAKE -v | grep 'Using Qt version' | egrep -o '[[0-9]]+\.[[0-9]]+\.[[0-9]]+'`
4496     if test -z "$QTDIR"; then
4497         case $QT_VERSION in
4498         5.*)
4499             AC_MSG_RESULT("Using qt5: $QT_VERSION")
4500             PKG_CHECK_MODULES(MOZ_QT, Qt5Gui Qt5Network Qt5Core Qt5Quick, ,
4501             [
4502               AC_MSG_ERROR([$MOZ_QT_PKG_ERRORS Need qtbase development packages, (On Ubuntu, you might try installing the packages qtbase5-dev libqt5opengl5-dev.)])
4503             ])
4504             QT5INCDIR=`pkg-config --variable=includedir Qt5Gui`
4505             MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS -I$QT5INCDIR/QtGui/$QT_VERSION/QtGui"
4506             if test "$NS_PRINTING"; then
4507                 PKG_CHECK_MODULES(MOZ_QT_WIDGETS, Qt5PrintSupport, ,
4508                 [
4509                   AC_MSG_ERROR([$MOZ_QT_PKG_ERRORS Need qtbase widgets development package])
4510                 ])
4511                 MOZ_QT_LIBS="$MOZ_QT_LIBS $MOZ_QT_WIDGETS_LIBS"
4512                 MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS $MOZ_QT_WIDGETS_CFLAGS"
4513             fi
4514             ;;
4515         *)
4516             AC_MSG_ERROR([* * * Unsupported Qt Version: $QT_VERSION])
4517             ;;
4518         esac
4520         AC_CHECK_PROGS(HOST_MOC, $MOC moc, "")
4521         AC_CHECK_PROGS(HOST_RCC, $RCC rcc, "")
4522     else
4523         MOZ_QT_CFLAGS="-DQT_SHARED"
4524         MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS -I$QTDIR/include"
4525         MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS -I$QTDIR/include/QtGui"
4526         MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS -I$QTDIR/include/QtCore"
4527         MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS -I$QTDIR/include/QtNetwork"
4528         MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS -I$QTDIR/include/QtXml"
4529         MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS -I$QTDIR/include/QtDeclarative"
4530         case $QT_VERSION in
4531         5.*)
4532             AC_MSG_RESULT("Using qt5: $QT_VERSION")
4533             MOZ_QT_LIBS="$MOZ_QT_LIBS -L$QTDIR/lib/ -lQt5Gui -lQt5Network -lQt5Core -lQt5Xml"
4534             MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS -I$QTDIR/include/QtGui/$QT_VERSION/QtGui"
4535             if test "$NS_PRINTING"; then
4536                 MOZ_QT_LIBS="$MOZ_QT_LIBS -lQt5Widgets -lQt5PrintSupport"
4537                 MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS -I$QTDIR/include/QtPrintSupport"
4538             fi
4539             ;;
4540         *)
4541             AC_MSG_ERROR([* * * Unsupported Qt Version: $QT_VERSION])
4542             ;;
4543         esac
4545         HOST_MOC="$QTDIR/bin/moc"
4546         HOST_RCC="$QTDIR/bin/rcc"
4547     fi
4548     if test -z "$HOST_MOC"; then
4549         AC_MSG_ERROR([No acceptable moc preprocessor found. Qt SDK is not installed or --with-qt is incorrect])
4550     fi
4551     if test -z "$HOST_RCC"; then
4552         AC_MSG_ERROR([No acceptable rcc preprocessor found. Qt SDK is not installed or --with-qt is incorrect])
4553     fi
4555     MOC=$HOST_MOC
4556     RCC=$HOST_RCC
4558     MOZ_ENABLE_QMSYSTEM2=
4559     PKG_CHECK_MODULES(_QMSYSTEM2, qmsystem2,
4560                       MOZ_ENABLE_QMSYSTEM2=1,
4561                       MOZ_ENABLE_QMSYSTEM2=)
4563     if test "$MOZ_ENABLE_QMSYSTEM2"; then
4564       MOZ_ENABLE_QMSYSTEM2=1
4565       MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS $_QMSYSTEM2_CFLAGS"
4566       MOZ_QT_LIBS="$MOZ_QT_LIBS $_QMSYSTEM2_LIBS"
4567       AC_DEFINE(MOZ_ENABLE_QMSYSTEM2)
4568     fi
4570     MOZ_ENABLE_QTNETWORK=
4571     PKG_CHECK_MODULES(_QTNETWORK, QtNetwork >= 4.7,
4572                       MOZ_ENABLE_QTNETWORK=1,
4573                       MOZ_ENABLE_QTNETWORK=)
4575     if test "$MOZ_ENABLE_QTNETWORK"; then
4576       MOZ_ENABLE_QTNETWORK=1
4577       AC_DEFINE(MOZ_ENABLE_QTNETWORK)
4578     fi
4580     MOZ_ENABLE_QTMOBILITY=
4581     PKG_CHECK_MODULES(_QTMOBILITY, QtSensors QtFeedback QtLocation,
4582                       MOZ_ENABLE_QTMOBILITY=1,
4583                       MOZ_ENABLE_QTMOBILITY=)
4584     if test "$MOZ_ENABLE_QTMOBILITY"; then
4585        MOZ_ENABLE_QTMOBILITY=1
4586        MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS $_QTMOBILITY_CFLAGS"
4587        MOZ_QT_LIBS="$MOZ_QT_LIBS $_QTMOBILITY_LIBS"
4588        AC_DEFINE(MOZ_ENABLE_QTMOBILITY)
4589        AC_SUBST(MOZ_ENABLE_QTMOBILITY)
4590     else
4591        AC_CHECK_LIB(QtSensors, main, [
4592           MOZ_ENABLE_QTMOBILITY=1
4593           MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS -I$QTDIR/include/QtMobility"
4594           MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS -I$QTDIR/include/QtSensors"
4595           MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS -I$QTDIR/include/QtFeedback"
4596           MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS -I$QTDIR/include/QtLocation"
4597           MOZ_QT_LIBS="$MOZ_QT_LIBS -lQtSensors -lQtFeedback -lQtLocation"
4598        ])
4599     fi
4601     MOZ_ENABLE_QT5FEEDBACK=
4602     PKG_CHECK_MODULES(_QT5FEEDBACK, Qt0Feedback,
4603                       MOZ_ENABLE_QT5FEEDBACK=1,
4604                       MOZ_ENABLE_QT5FEEDBACK=)
4605     if test "$MOZ_ENABLE_QT5FEEDBACK"; then
4606        MOZ_ENABLE_QT5FEEDBACK=1
4607        MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS $_QT5FEEDBACK_CFLAGS"
4608        MOZ_QT_LIBS="$MOZ_QT_LIBS $_QT5FEEDBACK_LIBS"
4609        AC_DEFINE(MOZ_ENABLE_QT5FEEDBACK)
4610        AC_SUBST(MOZ_ENABLE_QT5FEEDBACK)
4611     fi
4613     MOZ_ENABLE_QT5GEOPOSITION=
4614     PKG_CHECK_MODULES(_QT5GEOPOSITION, Qt5Positioning,
4615                       MOZ_ENABLE_QT5GEOPOSITION=1,
4616                       MOZ_ENABLE_QT5GEOPOSITION=)
4617     if test "$MOZ_ENABLE_QT5GEOPOSITION"; then
4618        MOZ_ENABLE_QT5GEOPOSITION=1
4619        MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS $_QT5GEOPOSITION_CFLAGS"
4620        MOZ_QT_LIBS="$MOZ_QT_LIBS $_QT5GEOPOSITION_LIBS"
4621        AC_DEFINE(MOZ_ENABLE_QT5GEOPOSITION)
4622        AC_SUBST(MOZ_ENABLE_QT5GEOPOSITION)
4623     fi
4625     if test "$MOZ_ENABLE_CONTENTACTION"; then
4626       MOZ_ENABLE_CONTENTACTION=1
4627       AC_DEFINE(MOZ_ENABLE_CONTENTACTION)
4628     fi
4630     MOZ_ENABLE_CONTENTACTION=
4631     PKG_CHECK_MODULES(LIBCONTENTACTION, contentaction-0.1, _LIB_FOUND=1, _LIB_FOUND=)
4632     if test "$MOZ_ENABLE_CONTENTACTION"; then
4633        MOZ_ENABLE_CONTENTACTION=1
4634        MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS $_CONTENTACTION_CFLAGS"
4635        MOZ_QT_LIBS="$MOZ_QT_LIBS $_CONTENTACTION_LIBS"
4636        AC_DEFINE(MOZ_ENABLE_CONTENTACTION)
4637        AC_SUBST(MOZ_ENABLE_CONTENTACTION)
4638     fi
4641 AC_SUBST(GTK_CONFIG)
4642 AC_SUBST(TK_CFLAGS)
4643 AC_SUBST(TK_LIBS)
4645 AC_SUBST(MOZ_ENABLE_GTK2)
4646 AC_SUBST(MOZ_ENABLE_GTK3)
4647 AC_SUBST(MOZ_ENABLE_GTK)
4648 AC_SUBST(MOZ_ENABLE_QT)
4649 AC_SUBST(MOZ_ENABLE_QTNETWORK)
4650 AC_SUBST(MOZ_ENABLE_QMSYSTEM2)
4651 AC_SUBST(MOZ_ENABLE_QTMOBILITY)
4652 AC_SUBST(MOZ_ENABLE_XREMOTE)
4653 AC_SUBST(MOZ_GTK2_CFLAGS)
4654 AC_SUBST(MOZ_GTK2_LIBS)
4655 AC_SUBST(MOZ_GTK3_CFLAGS)
4656 AC_SUBST(MOZ_GTK3_LIBS)
4657 AC_SUBST(MOZ_WIDGET_GTK)
4658 AC_SUBST(MOZ_QT_CFLAGS)
4659 AC_SUBST(MOZ_QT_LIBS)
4661 AC_SUBST(MOC)
4662 AC_SUBST(RCC)
4664 AC_SUBST(MOZ_X11)
4666 dnl ========================================================
4667 dnl =
4668 dnl = Components & Features
4669 dnl =
4670 dnl ========================================================
4671 MOZ_ARG_HEADER(Components and Features)
4673 dnl ========================================================
4674 dnl = Localization
4675 dnl ========================================================
4676 MOZ_ARG_ENABLE_STRING(ui-locale,
4677 [  --enable-ui-locale=ab-CD
4678                           Select the user interface locale (default: en-US)],
4679     MOZ_UI_LOCALE=$enableval )
4680 AC_SUBST(MOZ_UI_LOCALE)
4682 dnl ========================================================
4683 dnl = Trademarked Branding
4684 dnl ========================================================
4685 MOZ_ARG_ENABLE_BOOL(official-branding,
4686 [  --enable-official-branding
4687                           Enable Official mozilla.org Branding
4688                           Do not distribute builds with
4689                           --enable-official-branding unless you have
4690                           permission to use trademarks per
4691                           http://www.mozilla.org/foundation/trademarks/ .],
4693   if test -z "$MOZ_OFFICIAL_BRANDING_DIRECTORY"; then
4694     AC_MSG_ERROR([You must specify MOZ_OFFICIAL_BRANDING_DIRECTORY to use --enable-official-branding.])
4695   else
4696     MOZ_BRANDING_DIRECTORY=${MOZ_OFFICIAL_BRANDING_DIRECTORY}
4697     MOZ_OFFICIAL_BRANDING=1
4698   fi
4699 ], MOZ_OFFICIAL_BRANDING=)
4701 AC_SUBST(MOZ_OFFICIAL_BRANDING)
4702 if test -n "$MOZ_OFFICIAL_BRANDING"; then
4703   AC_DEFINE(MOZ_OFFICIAL_BRANDING)
4706 MOZ_ARG_WITH_STRING(branding,
4707 [  --with-branding=dir     Use branding from the specified directory.],
4708     MOZ_BRANDING_DIRECTORY=$withval)
4710 REAL_BRANDING_DIRECTORY="${MOZ_BRANDING_DIRECTORY}"
4711 if test -z "$REAL_BRANDING_DIRECTORY"; then
4712   REAL_BRANDING_DIRECTORY=${MOZ_BUILD_APP}/branding/nightly
4715 if test -f "${_topsrcdir}/$REAL_BRANDING_DIRECTORY/configure.sh"; then
4716   . "${_topsrcdir}/$REAL_BRANDING_DIRECTORY/configure.sh"
4719 AC_SUBST(MOZ_BRANDING_DIRECTORY)
4721 dnl ========================================================
4722 dnl = Distribution ID
4723 dnl ========================================================
4724 MOZ_ARG_WITH_STRING(distribution-id,
4725 [  --with-distribution-id=ID
4726                           Set distribution-specific id (default=org.mozilla)],
4727 [ val=`echo $withval`
4728     MOZ_DISTRIBUTION_ID="$val"])
4730 if test -z "$MOZ_DISTRIBUTION_ID"; then
4731    MOZ_DISTRIBUTION_ID="org.mozilla"
4734 AC_DEFINE_UNQUOTED(MOZ_DISTRIBUTION_ID,"$MOZ_DISTRIBUTION_ID")
4735 AC_SUBST(MOZ_DISTRIBUTION_ID)
4738 dnl ========================================================
4739 dnl = Pango
4740 dnl ========================================================
4741 if test "$MOZ_ENABLE_GTK" -o "$MOZ_ENABLE_QT"
4742 then
4743     PKG_CHECK_MODULES(_PANGOCHK, pango >= $PANGO_VERSION)
4745     PKG_CHECK_MODULES(MOZ_PANGO, pango >= $PANGO_VERSION pangoft2 >= $PANGO_VERSION pangocairo >= $PANGO_VERSION)
4746     AC_SUBST(MOZ_PANGO_CFLAGS)
4747     AC_SUBST(MOZ_PANGO_LIBS)
4750 dnl ========================================================
4751 dnl = GnomeVFS, GIO and GConf support module
4752 dnl ========================================================
4754 if test "$MOZ_X11"
4755 then
4756     dnl build the GIO extension by default only when the
4757     dnl GTK2 toolkit is in use.
4758     if test "$MOZ_ENABLE_GTK"
4759     then
4760         MOZ_ENABLE_GIO=1
4761         MOZ_ENABLE_GCONF=1
4762     fi
4764     dnl ========================================================
4765     dnl = GnomeVFS support module
4766     dnl ========================================================
4767     MOZ_ARG_ENABLE_BOOL(gnomevfs,
4768     [  --enable-gnomevfs       Enable GnomeVFS support (default: disabled)],
4769         MOZ_ENABLE_GNOMEVFS=force,
4770         MOZ_ENABLE_GNOMEVFS=)
4772     if test "$MOZ_ENABLE_GNOMEVFS"
4773     then
4774         PKG_CHECK_MODULES(MOZ_GNOMEVFS, gnome-vfs-2.0 >= $GNOMEVFS_VERSION gnome-vfs-module-2.0 >= $GNOMEVFS_VERSION,[
4775             MOZ_GNOMEVFS_LIBS=`echo $MOZ_GNOMEVFS_LIBS | sed 's/-llinc\>//'`
4776             MOZ_ENABLE_GNOMEVFS=1
4777             AC_DEFINE(MOZ_ENABLE_GNOMEVFS)
4778         ],[
4779             if test "$MOZ_ENABLE_GNOMEVFS" = "force"
4780             then
4781                 AC_MSG_ERROR([* * * Could not find gnome-vfs-module-2.0 >= $GNOMEVFS_VERSION])
4782             fi
4783             MOZ_ENABLE_GNOMEVFS=
4784         ])
4785     fi
4787     AC_SUBST(MOZ_ENABLE_GNOMEVFS)
4788     AC_SUBST(MOZ_GNOMEVFS_CFLAGS)
4789     AC_SUBST(MOZ_GNOMEVFS_LIBS)
4791     dnl ========================================================
4792     dnl = GIO support module
4793     dnl ========================================================
4794     MOZ_ARG_DISABLE_BOOL(gio,
4795     [  --disable-gio           Disable GIO support],
4796         MOZ_ENABLE_GIO=,
4797         MOZ_ENABLE_GIO=force)
4799     if test "$MOZ_ENABLE_GIO" -a "$MOZ_ENABLE_GTK"
4800     then
4801         if test "$MOZ_ENABLE_GTK2"
4802         then
4803             PKG_CHECK_MODULES(_GTKCHECK, gtk+-2.0 >= 2.14, ,
4804                               [AC_MSG_ERROR([* * * Could not find gtk+-2.0 > 2.14. Required for build with gio.])])
4805         fi
4806         PKG_CHECK_MODULES(MOZ_GIO, gio-2.0 >= $GIO_VERSION,[
4807             MOZ_GIO_LIBS=`echo $MOZ_GIO_LIBS | sed 's/-llinc\>//'`
4808             MOZ_ENABLE_GIO=1
4809             AC_DEFINE(MOZ_ENABLE_GIO)
4810         ],[
4811             if test "$MOZ_ENABLE_GIO" = "force"
4812             then
4813                 AC_MSG_ERROR([* * * Could not find gio-2.0 >= $GIO_VERSION])
4814             fi
4815             MOZ_ENABLE_GIO=
4816         ])
4817     fi
4819     AC_SUBST(MOZ_ENABLE_GIO)
4820     AC_SUBST(MOZ_GIO_CFLAGS)
4821     AC_SUBST(MOZ_GIO_LIBS)
4823     dnl ========================================================
4824     dnl = GConf support module
4825     dnl ========================================================
4826     MOZ_ARG_DISABLE_BOOL(gconf,
4827     [  --disable-gconf      Disable Gconf support ],
4828         MOZ_ENABLE_GCONF=,
4829         MOZ_ENABLE_GCONF=force)
4831     if test "$MOZ_ENABLE_GCONF"
4832     then
4833         PKG_CHECK_MODULES(MOZ_GCONF, gconf-2.0 >= $GCONF_VERSION gobject-2.0 ,[
4834             MOZ_GCONF_LIBS=`$PKG_CONFIG --libs gobject-2.0`
4835             MOZ_ENABLE_GCONF=1
4836         ],[
4837             if test "$MOZ_ENABLE_GCONF" = "force"
4838             then
4839                 AC_MSG_ERROR([* * * Could not find gconf-2.0 ])
4840             fi
4841             MOZ_ENABLE_GCONF=
4842         ])
4843     fi
4845     if test "$MOZ_ENABLE_GCONF"; then
4846         AC_DEFINE(MOZ_ENABLE_GCONF)
4847     fi
4849     AC_SUBST(MOZ_ENABLE_GCONF)
4850     AC_SUBST(MOZ_GCONF_CFLAGS)
4851     AC_SUBST(MOZ_GCONF_LIBS)
4854 dnl ========================================================
4855 dnl = libproxy support
4856 dnl ========================================================
4858 if test "$MOZ_ENABLE_GTK" -o "$MOZ_ENABLE_QT"
4859 then
4860     MOZ_ENABLE_LIBPROXY=
4862     MOZ_ARG_ENABLE_BOOL(libproxy,
4863     [  --enable-libproxy         Enable libproxy support ],
4864     MOZ_ENABLE_LIBPROXY=1,
4865     MOZ_ENABLE_LIBPROXY=)
4867     if test "$MOZ_ENABLE_LIBPROXY"
4868     then
4869         PKG_CHECK_MODULES(MOZ_LIBPROXY, libproxy-1.0)
4870         AC_DEFINE(MOZ_ENABLE_LIBPROXY)
4871     fi
4873 AC_SUBST(MOZ_ENABLE_LIBPROXY)
4874 AC_SUBST(MOZ_LIBPROXY_CFLAGS)
4875 AC_SUBST(MOZ_LIBPROXY_LIBS)
4877 dnl ========================================================
4878 dnl = GNOME component (mozgnome)
4879 dnl ========================================================
4881 if test "$MOZ_ENABLE_GTK"
4882 then
4883     MOZ_ENABLE_GNOME_COMPONENT=1
4885 AC_SUBST(MOZ_ENABLE_GNOME_COMPONENT)
4887 dnl ========================================================
4888 dnl = libgnomeui support module
4889 dnl ========================================================
4891 if test "$MOZ_ENABLE_GTK"
4892 then
4893     MOZ_ARG_ENABLE_BOOL(gnomeui,
4894     [  --enable-gnomeui        Enable libgnomeui instead of GIO & GTK for icon theme support ],
4895         MOZ_ENABLE_GNOMEUI=force,
4896         MOZ_ENABLE_GNOMEUI=)
4898     if test "$MOZ_ENABLE_GNOMEUI"
4899     then
4900         PKG_CHECK_MODULES(MOZ_GNOMEUI, libgnomeui-2.0 >= $GNOMEUI_VERSION,
4901         [
4902             MOZ_ENABLE_GNOMEUI=1
4903         ],[
4904             if test "$MOZ_ENABLE_GNOMEUI" = "force"
4905             then
4906                 AC_MSG_ERROR([* * * Could not find libgnomeui-2.0 >= $GNOMEUI_VERSION])
4907             fi
4908             MOZ_ENABLE_GNOMEUI=
4909         ])
4910     fi
4912     if test "$MOZ_ENABLE_GNOMEUI"; then
4913         AC_DEFINE(MOZ_ENABLE_GNOMEUI)
4914     fi
4917 AC_SUBST(MOZ_ENABLE_GNOMEUI)
4918 AC_SUBST(MOZ_GNOMEUI_CFLAGS)
4920 dnl ========================================================
4921 dnl = dbus support
4922 dnl ========================================================
4924 if test "$MOZ_ENABLE_GTK" -o "$MOZ_ENABLE_QT"
4925 then
4926     MOZ_ENABLE_DBUS=1
4928     MOZ_ARG_DISABLE_BOOL(dbus,
4929     [  --disable-dbus          Disable dbus support ],
4930         MOZ_ENABLE_DBUS=,
4931         MOZ_ENABLE_DBUS=1)
4933     if test "$MOZ_ENABLE_DBUS"
4934     then
4935         PKG_CHECK_MODULES(MOZ_DBUS, dbus-1 >= $DBUS_VERSION)
4936         PKG_CHECK_MODULES(MOZ_DBUS_GLIB, dbus-glib-1 >= $DBUS_VERSION)
4937         AC_DEFINE(MOZ_ENABLE_DBUS)
4938     fi
4940 AC_SUBST(MOZ_ENABLE_DBUS)
4941 AC_SUBST(MOZ_DBUS_CFLAGS)
4942 AC_SUBST(MOZ_DBUS_LIBS)
4943 AC_SUBST(MOZ_DBUS_GLIB_CFLAGS)
4944 AC_SUBST(MOZ_DBUS_GLIB_LIBS)
4946 dnl ========================================================
4947 dnl = Enable Android History instead of Places
4948 dnl ========================================================
4949 if test -n "$MOZ_ANDROID_HISTORY"; then
4950     if test -z "$MOZ_PLACES"; then
4951         AC_DEFINE(MOZ_ANDROID_HISTORY)
4952     else
4953         AC_MSG_ERROR([Cannot use MOZ_ANDROID_HISTORY alongside MOZ_PLACES.])
4954     fi
4957 dnl ========================================================
4958 dnl = Build with the Android compositor
4959 dnl ========================================================
4960 if test -n "$MOZ_ANDROID_OMTC"; then
4961      dnl Do this if defined in confvars.sh
4962      AC_DEFINE(MOZ_ANDROID_OMTC)
4965 dnl ========================================================
4966 dnl = Disable WebSMS backend
4967 dnl ========================================================
4968 MOZ_ARG_DISABLE_BOOL(websms-backend,
4969 [  --disable-websms-backend
4970                            Disable WebSMS backend],
4971     MOZ_WEBSMS_BACKEND=,
4972     MOZ_WEBSMS_BACKEND=1)
4974 if test -n "$MOZ_WEBSMS_BACKEND"; then
4975     AC_DEFINE(MOZ_WEBSMS_BACKEND)
4978 dnl ========================================================
4979 dnl = Enable NFC permission on Android
4980 dnl ========================================================
4981 if test -n "$MOZ_ANDROID_BEAM"; then
4982     AC_DEFINE(MOZ_ANDROID_BEAM)
4985 dnl ========================================================
4986 dnl = Synthesized Webapp APKs on Android
4987 dnl ========================================================
4988 MOZ_ARG_ENABLE_BOOL(android-synthapks,
4989 [  --enable-android-synthapks       Enable synthesized APKs],
4990     MOZ_ANDROID_SYNTHAPKS=1,
4991     MOZ_ANDROID_SYNTHAPKS=)
4993 if test -n "$MOZ_ANDROID_SYNTHAPKS"; then
4994     AC_DEFINE(MOZ_ANDROID_SYNTHAPKS)
4997 dnl ========================================================
4998 dnl = JS Debugger XPCOM component (js/jsd)
4999 dnl ========================================================
5000 MOZ_ARG_DISABLE_BOOL(jsd,
5001 [  --disable-jsd           Disable JavaScript debug library],
5002     MOZ_JSDEBUGGER=,
5003     MOZ_JSDEBUGGER=1)
5006 dnl ========================================================
5007 dnl = Enable IPDL's "expensive" unit tests
5008 dnl ========================================================
5009 MOZ_IPDL_TESTS=
5011 MOZ_ARG_ENABLE_BOOL(ipdl-tests,
5012 [  --enable-ipdl-tests     Enable expensive IPDL tests],
5013     MOZ_IPDL_TESTS=1,
5014     MOZ_IPDL_TESTS=)
5016 if test -n "$MOZ_IPDL_TESTS"; then
5017     AC_DEFINE(MOZ_IPDL_TESTS)
5020 AC_SUBST(MOZ_IPDL_TESTS)
5022 dnl ========================================================
5023 dnl = Disable building dbm
5024 dnl ========================================================
5025 MOZ_ARG_DISABLE_BOOL(dbm,
5026 [  --disable-dbm           Disable building dbm],
5027     NSS_DISABLE_DBM=1,
5028     NSS_DISABLE_DBM=)
5030 dnl ========================================================
5031 dnl accessibility support on by default on all platforms
5032 dnl ========================================================
5033 MOZ_ARG_DISABLE_BOOL(accessibility,
5034 [  --disable-accessibility Disable accessibility support],
5035     ACCESSIBILITY=,
5036     ACCESSIBILITY=1 )
5037 if test "$ACCESSIBILITY"; then
5038     case "$target" in
5039     *-mingw*)
5040         if test -z "$MIDL"; then
5041             if test "$GCC" != "yes"; then
5042                 AC_MSG_ERROR([MIDL could not be found. Building accessibility without MIDL is not supported.])
5043             else
5044                 AC_MSG_ERROR([You have accessibility enabled, but widl could not be found. Add --disable-accessibility to your mozconfig or install widl. See https://developer.mozilla.org/en-US/docs/Cross_Compile_Mozilla_for_Mingw32 for details.])
5045             fi
5046         fi
5047     esac
5048     AC_DEFINE(ACCESSIBILITY)
5051 dnl ========================================================
5052 dnl Accessibility is required for the linuxgl widget
5053 dnl backend
5054 dnl ========================================================
5055 if test "${MOZ_WIDGET_TOOLKIT}" = "linuxgl" -a "$ACCESSIBILITY" != "1"; then
5056     AC_MSG_ERROR(["Accessibility is required for the linuxgl widget backend"])
5059 dnl Turn off webrtc for OS's we don't handle yet, but allow
5060 dnl --enable-webrtc to override.  Can disable for everything in
5061 dnl the master list above.
5062 if test -n "$MOZ_WEBRTC"; then
5063     case "$target" in
5064     *-linux*|*-mingw*|*-darwin*|*-android*|*-linuxandroid*|*-dragonfly*|*-freebsd*|*-netbsd*|*-openbsd*)
5065         dnl Leave enabled
5066         ;;
5067     *)
5068         dnl default to disabled for all others
5069         MOZ_WEBRTC=
5070         ;;
5071     esac
5074 AC_TRY_COMPILE([#include <linux/ethtool.h>],
5075                [ struct ethtool_cmd cmd; cmd.speed_hi = 0; ],
5076                MOZ_WEBRTC_HAVE_ETHTOOL_SPEED_HI=1)
5078 AC_SUBST(MOZ_WEBRTC_HAVE_ETHTOOL_SPEED_HI)
5080 # target_arch is from {ia32|x64|arm|ppc}
5081 case "$CPU_ARCH" in
5082 x86_64 | arm | x86 | ppc* | ia64)
5083     :
5084     ;;
5086 # unsupported arch for webrtc
5087     MOZ_WEBRTC=
5088     ;;
5090 esac
5092 dnl ========================================================
5093 dnl = Disable WebRTC code
5094 dnl ========================================================
5095 MOZ_ARG_DISABLE_BOOL(webrtc,
5096 [  --disable-webrtc        Disable support for WebRTC],
5097     MOZ_WEBRTC=,
5098     MOZ_WEBRTC=1)
5100 if test -n "$MOZ_WEBRTC"; then
5101     AC_DEFINE(MOZ_WEBRTC)
5102     dnl MOZ_WEBRTC_ASSERT_ALWAYS turns on a number of safety asserts in
5103     dnl opt/production builds (via MOZ_CRASH())
5104     AC_DEFINE(MOZ_WEBRTC_ASSERT_ALWAYS)
5105     MOZ_RAW=1
5106     MOZ_VPX=1
5107     MOZ_VPX_ERROR_CONCEALMENT=1
5109 dnl enable once Signaling lands
5110     MOZ_WEBRTC_SIGNALING=1
5111     AC_DEFINE(MOZ_WEBRTC_SIGNALING)
5112 dnl enable once PeerConnection lands
5113     MOZ_PEERCONNECTION=1
5114     AC_DEFINE(MOZ_PEERCONNECTION)
5115     MOZ_SCTP=1
5116     MOZ_SRTP=1
5117     AC_DEFINE(MOZ_SCTP)
5118     AC_DEFINE(MOZ_SRTP)
5119 else
5120     MOZ_SYNTH_PICO=
5123 AC_SUBST(MOZ_WEBRTC)
5124 AC_SUBST(MOZ_WEBRTC_LEAKING_TESTS)
5125 AC_SUBST(MOZ_WEBRTC_SIGNALING)
5126 AC_SUBST(MOZ_PEERCONNECTION)
5127 AC_SUBST(MOZ_WEBRTC_ASSERT_ALWAYS)
5128 AC_SUBST(MOZ_SCTP)
5129 AC_SUBST(MOZ_SRTP)
5131 dnl Use integers over floats for audio on B2G and Android, because audio
5132 dnl backends for those platforms don't support floats.
5133 if test "$OS_TARGET" = "Android"; then
5134     MOZ_SAMPLE_TYPE_S16=1
5135     AC_DEFINE(MOZ_SAMPLE_TYPE_S16)
5136     AC_SUBST(MOZ_SAMPLE_TYPE_S16)
5137 else
5138     MOZ_SAMPLE_TYPE_FLOAT32=1
5139     AC_DEFINE(MOZ_SAMPLE_TYPE_FLOAT32)
5140     AC_SUBST(MOZ_SAMPLE_TYPE_FLOAT32)
5143 dnl ========================================================
5144 dnl = Disable Speech API code
5145 dnl ========================================================
5146 MOZ_ARG_DISABLE_BOOL(webspeech,
5147 [  --disable-webspeech        Disable support for HTML Speech API],
5148     MOZ_WEBSPEECH=,
5149     MOZ_WEBSPEECH=1)
5151 if test -n "$MOZ_WEBSPEECH"; then
5152     AC_DEFINE(MOZ_WEBSPEECH)
5155 AC_SUBST(MOZ_WEBSPEECH)
5157 dnl ========================================================
5158 dnl = Enable Raw Codecs
5159 dnl ========================================================
5160 MOZ_ARG_ENABLE_BOOL(raw,
5161 [  --enable-raw           Enable support for RAW media],
5162     MOZ_RAW=1,
5163     MOZ_RAW=)
5165 if test -n "$MOZ_RAW"; then
5166     AC_DEFINE(MOZ_RAW)
5169 AC_SUBST(MOZ_RAW)
5171 dnl Checks for __attribute__(aligned()) directive need by libogg
5172 AC_CACHE_CHECK([__attribute__ ((aligned ())) support],
5173     [ac_cv_c_attribute_aligned],
5174     [ac_cv_c_attribute_aligned=0
5175      CFLAGS_save="${CFLAGS}"
5176      CFLAGS="${CFLAGS} -Werror"
5177      for ac_cv_c_attr_align_try in 64 32 16 8; do
5178        echo "trying $ac_cv_c_attr_align_try"
5179        AC_TRY_COMPILE([],
5180                       [static char c __attribute__ ((aligned(${ac_cv_c_attr_align_try}))) = 0; return c;],
5181                       [ac_cv_c_attribute_aligned="${ac_cv_c_attr_align_try}"])
5182        if test "$ac_cv_c_attribute_aligned" != 0; then
5183          break;
5184        fi
5185      done
5186        CFLAGS="${CFLAGS_save}"])
5187 if test "${ac_cv_c_attribute_aligned}" != "0"; then
5188   AC_DEFINE_UNQUOTED([ATTRIBUTE_ALIGNED_MAX],
5189                      [${ac_cv_c_attribute_aligned}],[Maximum supported data alignment])
5192 dnl ========================================================
5193 dnl = Disable Opus audio codec support
5194 dnl ========================================================
5195 MOZ_ARG_DISABLE_BOOL(opus,
5196 [  --disable-opus          Disable support for Opus audio],
5197     MOZ_OPUS=,
5198     MOZ_OPUS=1)
5200 dnl ========================================================
5201 dnl = Disable VP8 decoder support
5202 dnl ========================================================
5203 MOZ_ARG_DISABLE_BOOL(webm,
5204 [  --disable-webm          Disable support for WebM media (VP8 video and Vorbis audio)],
5205     MOZ_WEBM=,
5206     MOZ_WEBM=1)
5208 if test -n "$MOZ_WEBM"; then
5209     AC_DEFINE(MOZ_WEBM)
5210     MOZ_VPX=1
5213 dnl ========================================================
5214 dnl = DirectShow support
5215 dnl ========================================================
5216 if test "$OS_ARCH" = "WINNT"; then
5217     dnl Enable DirectShow support by default.
5218     MOZ_DIRECTSHOW=1
5221 MOZ_ARG_DISABLE_BOOL(directshow,
5222 [  --disable-directshow  Disable support for DirectShow],
5223     MOZ_DIRECTSHOW=,
5224     MOZ_DIRECTSHOW=1)
5226 if test -n "$MOZ_DIRECTSHOW"; then
5227     AC_DEFINE(MOZ_DIRECTSHOW)
5230 dnl ========================================================
5231 dnl = Windows Media Foundation support
5232 dnl ========================================================
5233 if test "$OS_ARCH" = "WINNT"; then
5234     dnl Enable Windows Media Foundation support by default.
5235     dnl Note our minimum SDK version is Windows 7 SDK, so we are (currently)
5236     dnl guaranteed to have a recent-enough SDK to build WMF.
5237     MOZ_WMF=1
5240 MOZ_ARG_DISABLE_BOOL(wmf,
5241 [  --disable-wmf  Disable support for Windows Media Foundation],
5242     MOZ_WMF=,
5243     MOZ_WMF=1)
5245 if test -n "$MOZ_WMF"; then
5246     AC_DEFINE(MOZ_WMF)
5249 dnl ========================================================
5250 dnl FFmpeg H264/AAC Decoding Support
5251 dnl ========================================================
5252 case "$OS_TARGET" in
5253 WINNT|Darwin|Android)
5254     ;;
5256     MOZ_FFMPEG=1
5257     ;;
5258 esac
5260 MOZ_ARG_DISABLE_BOOL(ffmpeg,
5261 [  --disable-ffmpeg         Disable FFmpeg for fragmented H264/AAC decoding],
5262     MOZ_FFMPEG=,
5263     MOZ_FFMPEG=1
5266 if test -n "$MOZ_FFMPEG"; then
5267     AC_DEFINE(MOZ_FFMPEG)
5270 dnl ========================================================
5271 dnl = Built-in fragmented MP4 support.
5272 dnl ========================================================
5273 if test -n "$MOZ_WMF" -o -n "$MOZ_FFMPEG"; then
5274     dnl Enable fragmented MP4 parser on Windows by default.
5275     dnl We will also need to enable it on other platforms as we implement
5276     dnl platform decoder support there too.
5277     MOZ_FMP4=1
5280 MOZ_ARG_DISABLE_BOOL(fmp4,
5281 [  --disable-fmp4  Disable support for in built Fragmented MP4 parsing],
5282     MOZ_FMP4=,
5283     MOZ_FMP4=1)
5285 if test -n "$MOZ_FMP4"; then
5286     AC_DEFINE(MOZ_FMP4)
5290 dnl ========================================================
5291 dnl = Enable media plugin support
5292 dnl ========================================================
5293 if test "$OS_TARGET" = Android -a x"$MOZ_WIDGET_TOOLKIT" != x"gonk"; then
5294   dnl Enable support on android by default
5295   MOZ_MEDIA_PLUGINS=1
5298 MOZ_ARG_ENABLE_BOOL(media-plugins,
5299 [  --enable-media-plugins  Enable support for media plugins],
5300     MOZ_MEDIA_PLUGINS=1,
5301     MOZ_MEDIA_PLUGINS=)
5303 if test -n "$MOZ_MEDIA_PLUGINS"; then
5304   AC_DEFINE(MOZ_MEDIA_PLUGINS)
5307 dnl ========================================================
5308 dnl = Disable platform MP3 decoder on OSX
5309 dnl ========================================================
5310 if test "$MOZ_WIDGET_TOOLKIT" = "cocoa"; then
5311   MOZ_APPLEMEDIA=1
5314 MOZ_ARG_DISABLE_BOOL(apple-media,
5315 [  --disable-apple-media  Disable support for Apple AudioToolbox/VideoToolbox],
5316     MOZ_APPLEMEDIA=,
5317     MOZ_APPLEMEDIA=1)
5319 if test -n "$MOZ_APPLEMEDIA"; then
5320   AC_DEFINE(MOZ_APPLEMEDIA)
5323 dnl ========================================================
5324 dnl = Enable getUserMedia support
5325 dnl ========================================================
5326 MOZ_ARG_ENABLE_BOOL(media-navigator,
5327 [  --enable-media-navigator  Enable support for getUserMedia],
5328     MOZ_MEDIA_NAVIGATOR=1,
5329     MOZ_MEDIA_NAVIGATOR=)
5331 if test -n "$MOZ_MEDIA_NAVIGATOR"; then
5332   AC_DEFINE(MOZ_MEDIA_NAVIGATOR)
5335 dnl ========================================================
5336 dnl = Enable building OMX media plugin (B2G or Android)
5337 dnl ========================================================
5338 if test "$OS_TARGET" = Android -a x"$MOZ_WIDGET_TOOLKIT" != x"gonk"; then
5339   dnl Enable support on android by default
5340   MOZ_OMX_PLUGIN=1
5343 MOZ_ARG_ENABLE_BOOL(omx-plugin,
5344 [  --enable-omx-plugin      Enable building OMX plugin (B2G)],
5345     MOZ_OMX_PLUGIN=1,
5346     MOZ_OMX_PLUGIN=)
5348 if test -n "$MOZ_OMX_PLUGIN"; then
5349     if test "$OS_TARGET" = "Android"; then
5350         dnl Only allow building OMX plugin on Gonk (B2G) or Android
5351         AC_DEFINE(MOZ_OMX_PLUGIN)
5352     else
5353        dnl fail if we're not building on Gonk or Android
5354        AC_MSG_ERROR([OMX media plugin can only be built on B2G or Android])
5355     fi
5358 dnl system libvpx Support
5359 dnl ========================================================
5360 MOZ_ARG_WITH_BOOL(system-libvpx,
5361 [  --with-system-libvpx    Use system libvpx (located with pkgconfig)],
5362     MOZ_NATIVE_LIBVPX=1)
5364 MOZ_LIBVPX_CFLAGS=
5365 MOZ_LIBVPX_LIBS=
5367 if test -n "$MOZ_VPX"; then
5368     AC_DEFINE(MOZ_VPX)
5369     if test -n "$MOZ_VPX_ERROR_CONCEALMENT" ; then
5370         AC_DEFINE(MOZ_VPX_ERROR_CONCEALMENT)
5371     fi
5373     _SAVE_CFLAGS=$CFLAGS
5374     _SAVE_LIBS=$LIBS
5375     if test -n "$MOZ_NATIVE_LIBVPX"; then
5376         dnl ============================
5377         dnl === libvpx Version check ===
5378         dnl ============================
5379         dnl Check to see if we have a system libvpx package.
5380         PKG_CHECK_MODULES(MOZ_LIBVPX, vpx >= 1.3.0)
5382         CFLAGS="$CFLAGS $MOZ_LIBVPX_CFLAGS"
5383         LIBS="$LIBS $MOZ_LIBVPX_LIBS"
5385         MOZ_CHECK_HEADER([vpx/vpx_decoder.h], [],
5386          [AC_MSG_ERROR([Couldn't find vpx/vpx_decoder.h which is required for build with system libvpx. Use --without-system-libvpx to build with in-tree libvpx.])])
5388         AC_CHECK_LIB(vpx, vpx_codec_dec_init_ver, [],
5389          [AC_MSG_ERROR([--with-system-libvpx requested but symbol vpx_codec_dec_init_ver not found])])
5391         MOZ_CHECK_HEADER([vpx_mem/vpx_mem.h],
5392          [AC_CHECK_FUNC(vpx_mem_set_functions)])
5393         if test "$ac_cv_header_vpx_mem_vpx_mem_h" = no -o \
5394                 "$ac_cv_func_vpx_mem_set_functions" = no; then
5395             AC_DEFINE(MOZ_VPX_NO_MEM_REPORTING)
5396         fi
5397     fi
5398     CFLAGS=$_SAVE_CFLAGS
5399     LIBS=$_SAVE_LIBS
5402 AC_SUBST(MOZ_NATIVE_LIBVPX)
5403 AC_SUBST(MOZ_LIBVPX_CFLAGS)
5404 AC_SUBST(MOZ_LIBVPX_LIBS)
5406 if test "$MOZ_WEBM"; then
5407     if test "$MOZ_SAMPLE_TYPE_FLOAT32"; then
5408         MOZ_VORBIS=1
5409     else
5410         MOZ_TREMOR=1
5411     fi
5414 if test -n "$MOZ_VPX" -a -z "$MOZ_NATIVE_LIBVPX"; then
5416     dnl Detect if we can use an assembler to compile optimized assembly for libvpx.
5417     dnl We currently require yasm on all x86 platforms and require yasm 1.1.0 on Win32.
5418     dnl We currently require gcc on all arm platforms.
5419     VPX_AS=$YASM
5420     VPX_ASM_SUFFIX=asm
5421     VPX_NEED_OBJ_INT_EXTRACT=
5423     dnl See if we have assembly on this platform.
5424     case "$OS_ARCH:$CPU_ARCH" in
5425     Darwin:x86)
5426       VPX_ASFLAGS="-f macho32 -rnasm -pnasm -DPIC"
5427       VPX_X86_ASM=1
5428     ;;
5429     Darwin:x86_64)
5430       VPX_ASFLAGS="-f macho64 -rnasm -pnasm -DPIC"
5431       VPX_X86_ASM=1
5432     ;;
5433     WINNT:x86_64)
5434       VPX_ASFLAGS="-f x64 -rnasm -pnasm"
5435       VPX_X86_ASM=1
5436     ;;
5437     WINNT:x86)
5438       dnl Check for yasm 1.1 or greater.
5439       if test -n "$COMPILE_ENVIRONMENT" -a -z "$YASM"; then
5440         AC_MSG_ERROR([yasm 1.1 or greater is required to build libvpx on Win32, but it appears not to be installed.  Install it (included in MozillaBuild 1.5.1 and newer) or configure with --disable-webm (which disables the WebM video format). See https://developer.mozilla.org/en/YASM for more details.])
5441       elif test -n "$COMPILE_ENVIRONMENT" -a "$_YASM_MAJOR_VERSION" -lt "1" -o \( "$_YASM_MAJOR_VERSION" -eq "1" -a "$_YASM_MINOR_VERSION" -lt "1" \) ; then
5442         AC_MSG_ERROR([yasm 1.1 or greater is required to build libvpx on Win32, but you appear to have version $_YASM_MAJOR_VERSION.$_YASM_MINOR_VERSION.  Upgrade to the newest version (included in MozillaBuild 1.5.1 and newer) or configure with --disable-webm (which disables the WebM video format). See https://developer.mozilla.org/en/YASM for more details.])
5443       else
5444         VPX_ASFLAGS="-f win32 -rnasm -pnasm -DPIC"
5445         VPX_X86_ASM=1
5446         dnl The encoder needs obj_int_extract to get asm offsets.
5447       fi
5448     ;;
5449     *:arm*)
5450       if test -n "$GNU_AS" ; then
5451         VPX_AS=$AS
5452         dnl These flags are a lie; they're just used to enable the requisite
5453         dnl opcodes; actual arch detection is done at runtime.
5454         VPX_ASFLAGS="-march=armv7-a -mfpu=neon"
5455         VPX_DASH_C_FLAG="-c"
5456         VPX_AS_CONVERSION='$(PERL) $(topsrcdir)/media/libvpx/build/make/ads2gas.pl'
5457         VPX_ASM_SUFFIX="$ASM_SUFFIX"
5458         VPX_ARM_ASM=1
5459       fi
5460     ;;
5461     *:x86)
5462       if $CC -E -dM -</dev/null | grep -q __ELF__; then
5463         VPX_ASFLAGS="-f elf32 -rnasm -pnasm -DPIC"
5464         VPX_X86_ASM=1
5465       fi
5466     ;;
5467     *:x86_64)
5468       if $CC -E -dM -</dev/null | grep -q __ELF__; then
5469         VPX_ASFLAGS="-f elf64 -rnasm -pnasm -DPIC"
5470         VPX_X86_ASM=1
5471       fi
5472     ;;
5473     esac
5475     if test -n "$COMPILE_ENVIRONMENT" -a -n "$VPX_X86_ASM" -a -z "$VPX_AS"; then
5476       AC_MSG_ERROR([yasm is a required build tool for this architecture when webm is enabled. You may either install yasm or --disable-webm (which disables the WebM video format). See https://developer.mozilla.org/en/YASM for more details.])
5477     fi
5479     if test -z "$GNU_CC" -a -z "$INTEL_CC" -a -z "$CLANG_CC" ; then
5480       dnl We prefer to get asm offsets using inline assembler, which the above
5481       dnl compilers can do. When we're not using one of those, we have to fall
5482       dnl back to obj_int_extract, which reads them from a compiled object
5483       dnl file. Unfortunately, that only works if we're compiling on a system
5484       dnl with the header files for the appropriate object file format.
5485       VPX_NEED_OBJ_INT_EXTRACT=1
5486     fi
5488     if test -n "$VPX_X86_ASM"; then
5489       AC_DEFINE(VPX_X86_ASM)
5490     elif test -n "$VPX_ARM_ASM"; then
5491       AC_DEFINE(VPX_ARM_ASM)
5492     else
5493       AC_MSG_WARN([No assembler or assembly support for libvpx. Using unoptimized C routines.])
5494     fi
5497 dnl ========================================================
5498 dnl = Disable Wave decoder support
5499 dnl ========================================================
5500 MOZ_ARG_DISABLE_BOOL(wave,
5501 [  --disable-wave          Disable Wave decoder support],
5502     MOZ_WAVE=,
5503     MOZ_WAVE=1)
5505 if test -n "$MOZ_WAVE"; then
5506     AC_DEFINE(MOZ_WAVE)
5509 dnl ========================================================
5510 dnl = Handle dependent MEDIA defines
5511 dnl ========================================================
5513 if test -n "$MOZ_VORBIS" -a -n "$MOZ_TREMOR"; then
5514     AC_MSG_ERROR([MOZ_VORBIS and MOZ_TREMOR are mutually exclusive!  The build system should not allow them both to be set, but they are.  Please file a bug at https://bugzilla.mozilla.org/])
5517 if test -n "$MOZ_WEBRTC" -a -z "$MOZ_OPUS"; then
5518     AC_MSG_ERROR([MOZ_WEBRTC requires MOZ_OPUS which is disabled.])
5521 if test -n "$MOZ_VORBIS"; then
5522     AC_DEFINE(MOZ_VORBIS)
5525 if test -n "$MOZ_TREMOR"; then
5526     AC_DEFINE(MOZ_TREMOR)
5529 if test -n "$MOZ_OPUS"; then
5530     AC_DEFINE(MOZ_OPUS)
5533 if test -n "$MOZ_WEBM_ENCODER"; then
5534     AC_DEFINE(MOZ_WEBM_ENCODER)
5536 AC_SUBST(MOZ_WEBM_ENCODER)
5538 dnl ==================================
5539 dnl = Check alsa availability on Linux
5540 dnl ==================================
5542 dnl If using Linux, ensure that the alsa library is available
5543 if test "$OS_TARGET" = "Linux"; then
5544     MOZ_ALSA=1
5547 MOZ_ARG_ENABLE_BOOL(alsa,
5548 [  --enable-alsa          Enable Alsa support (default on Linux)],
5549    MOZ_ALSA=1,
5550    MOZ_ALSA=)
5552 if test -n "$MOZ_ALSA"; then
5553     PKG_CHECK_MODULES(MOZ_ALSA, alsa, ,
5554          [echo "$MOZ_ALSA_PKG_ERRORS"
5555           AC_MSG_ERROR([Need alsa for Ogg, Wave or WebM decoding on Linux.  Disable with --disable-ogg --disable-wave --disable-webm.  (On Ubuntu, you might try installing the package libasound2-dev.)])])
5558 AC_SUBST(MOZ_ALSA)
5559 AC_SUBST(MOZ_ALSA_CFLAGS)
5560 AC_SUBST(MOZ_ALSA_LIBS)
5562 dnl ========================================================
5563 dnl = Disable PulseAudio
5564 dnl ========================================================
5566 dnl If using Linux, ensure that the PA library is available
5567 case "$OS_TARGET" in
5568 WINNT|Darwin|Android|OpenBSD)
5569     ;;
5571     if test -z "$MOZ_B2G"; then
5572         MOZ_PULSEAUDIO=1
5573     fi
5574     ;;
5575 esac
5577 MOZ_ARG_DISABLE_BOOL(pulseaudio,
5578 [  --disable-pulseaudio          Disable PulseAudio support],
5579    MOZ_PULSEAUDIO=,
5580    MOZ_PULSEAUDIO=1)
5582 if test -n "$MOZ_PULSEAUDIO"; then
5583     if test -z "$gonkdir"; then
5584         PKG_CHECK_MODULES(MOZ_PULSEAUDIO, libpulse, ,
5585              [echo "$MOZ_PULSEAUDIO_PKG_ERRORS"
5586               AC_MSG_ERROR([pulseaudio audio backend requires libpulse development package])])
5587     else
5588         MOZ_PULSEAUDIO_CFLAGS="-I$gonkdir/external/pulseaudio/pulseaudio/src"
5589     fi
5592 AC_SUBST(MOZ_PULSEAUDIO)
5593 AC_SUBST(MOZ_PULSEAUDIO_CFLAGS)
5595 dnl ========================================================
5596 dnl = Enable GStreamer
5597 dnl ========================================================
5598 case "$OS_TARGET" in
5599 WINNT|Darwin|Android)
5600     ;;
5602     MOZ_GSTREAMER=1
5603     GST_API_VERSION=0.10
5604     ;;
5605 esac
5607 MOZ_ARG_ENABLE_STRING(gstreamer,
5608 [  --enable-gstreamer[=0.10]           Enable GStreamer support],
5609 [ MOZ_GSTREAMER=1
5610   # API version, eg 0.10, 1.0 etc
5611   if test -z "$enableval" -o "$enableval" = "yes"; then
5612     GST_API_VERSION=0.10
5613   elif test "$enableval" = "no"; then
5614     MOZ_GSTREAMER=
5615   else
5616     GST_API_VERSION=$enableval
5617   fi],
5620 if test -n "$MOZ_GSTREAMER"; then
5621     # core/base release number
5622     if test "$GST_API_VERSION" = "1.0"; then
5623       GST_VERSION=1.0
5624     else
5625       GST_VERSION=0.10.25
5626     fi
5628     PKG_CHECK_MODULES(GSTREAMER,
5629                       gstreamer-$GST_API_VERSION >= $GST_VERSION
5630                       gstreamer-app-$GST_API_VERSION
5631                       gstreamer-plugins-base-$GST_API_VERSION,
5632                       [_HAVE_GSTREAMER=1],
5633                       [_HAVE_GSTREAMER=])
5634     if test -z "$_HAVE_GSTREAMER"; then
5635         AC_MSG_ERROR([gstreamer and gstreamer-plugins-base development packages are needed to build gstreamer backend. Install them or disable gstreamer support with --disable-gstreamer])
5636     fi
5638     _SAVE_LDFLAGS=$LDFLAGS
5639     LDFLAGS="$LDFLAGS $GSTREAMER_LIBS -lgstvideo-$GST_API_VERSION"
5640     AC_TRY_LINK(,[return 0;],_HAVE_LIBGSTVIDEO=1,_HAVE_LIBGSTVIDEO=)
5641     if test -n "$_HAVE_LIBGSTVIDEO" ; then
5642         GSTREAMER_LIBS="$GSTREAMER_LIBS -lgstvideo-$GST_API_VERSION"
5643     else
5644         AC_MSG_ERROR([gstreamer-plugins-base found, but no libgstvideo. Something has gone terribly wrong. Try reinstalling gstreamer-plugins-base; failing that, disable the gstreamer backend with --disable-gstreamer.])
5645     fi
5646     LDFLAGS=$_SAVE_LDFLAGS
5648     AC_SUBST(GSTREAMER_CFLAGS)
5649     AC_SUBST(GSTREAMER_LIBS)
5652 AC_SUBST(MOZ_GSTREAMER)
5653 AC_SUBST(GST_API_VERSION)
5655 if test -n "$MOZ_GSTREAMER"; then
5656      AC_DEFINE(MOZ_GSTREAMER)
5657      AC_DEFINE_UNQUOTED(GST_API_VERSION, "$GST_API_VERSION")
5661 dnl ========================================================
5662 dnl Permissions System
5663 dnl ========================================================
5664 MOZ_ARG_DISABLE_BOOL(permissions,
5665 [  --disable-permissions   Disable permissions (popup and cookie blocking)],
5666     MOZ_PERMISSIONS=,
5667     MOZ_PERMISSIONS=1
5670 dnl ========================================================
5671 dnl Child permissions, currently only used for b2g
5672 dnl ========================================================
5673 if test -n "$MOZ_B2G"; then
5674     if test -n "$MOZ_PERMISSIONS"; then
5675         MOZ_CHILD_PERMISSIONS=1
5676     else
5677         AC_MSG_ERROR([You need to enable MOZ_PERMISSIONS for MOZ_CHILD_PERMISSIONS])
5678     fi
5680 AC_SUBST(MOZ_CHILD_PERMISSIONS)
5682 dnl ========================================================
5683 dnl NegotiateAuth
5684 dnl ========================================================
5685 MOZ_ARG_DISABLE_BOOL(negotiateauth,
5686 [  --disable-negotiateauth Disable GSS-API negotiation ],
5687     MOZ_AUTH_EXTENSION=,
5688     MOZ_AUTH_EXTENSION=1 )
5690 dnl ========================================================
5691 dnl Pref extensions (autoconfig)
5692 dnl ========================================================
5693 MOZ_ARG_DISABLE_BOOL(pref-extensions,
5694 [  --disable-pref-extensions
5695                           Disable pref extensions such as autoconfig],
5696   MOZ_PREF_EXTENSIONS=,
5697   MOZ_PREF_EXTENSIONS=1 )
5699 dnl ========================================================
5700 dnl Searching of system directories for extensions.
5701 dnl Note: this switch is meant to be used for test builds
5702 dnl whose behavior should not depend on what happens to be
5703 dnl installed on the local machine.
5704 dnl ========================================================
5705 MOZ_ARG_DISABLE_BOOL(system-extension-dirs,
5706 [  --disable-system-extension-dirs
5707                           Disable searching system- and account-global
5708                           directories for extensions of any kind; use
5709                           only profile-specific extension directories],
5710   ENABLE_SYSTEM_EXTENSION_DIRS=,
5711   ENABLE_SYSTEM_EXTENSION_DIRS=1 )
5712 if test "$ENABLE_SYSTEM_EXTENSION_DIRS"; then
5713   AC_DEFINE(ENABLE_SYSTEM_EXTENSION_DIRS)
5716 dnl ========================================================
5717 dnl = Universalchardet
5718 dnl ========================================================
5719 MOZ_ARG_DISABLE_BOOL(universalchardet,
5720 [  --disable-universalchardet
5721                           Disable universal encoding detection],
5722   MOZ_UNIVERSALCHARDET=,
5723   MOZ_UNIVERSALCHARDET=1 )
5725 if test -n "${JAVA_BIN_PATH}"; then
5726   dnl Look for javac and jar in the specified path.
5727   JAVA_PATH="$JAVA_BIN_PATH"
5728 else
5729   dnl No path specified, so look for javac and jar in $JAVA_HOME & $PATH.
5730   JAVA_PATH="$JAVA_HOME/bin:$PATH"
5733 MOZ_PATH_PROG(JAVA, java, :, [$JAVA_PATH])
5734 MOZ_PATH_PROG(JAVAC, javac, :, [$JAVA_PATH])
5735 MOZ_PATH_PROG(JAVAH, javah, :, [$JAVA_PATH])
5736 MOZ_PATH_PROG(JAR, jar, :, [$JAVA_PATH])
5737 MOZ_PATH_PROG(JARSIGNER, jarsigner, :, [$JAVA_PATH])
5738 MOZ_PATH_PROG(KEYTOOL, keytool, :, [$JAVA_PATH])
5740 if test -n "${JAVA_BIN_PATH}" -o \
5741   \( "$OS_TARGET" = Android -a x"$MOZ_WIDGET_TOOLKIT" != x"gonk" \); then
5742   if test -z "$JAVA" -o "$JAVA" = ":"; then
5743     AC_MSG_ERROR([The program java was not found.  Set \$JAVA_HOME to your Java SDK directory or use --with-java-bin-path={java-bin-dir}])
5744   fi
5745   if test -z "$JAVAC" -o "$JAVAC" = ":"; then
5746     AC_MSG_ERROR([The program javac was not found.  Set \$JAVA_HOME to your Java SDK directory or use --with-java-bin-path={java-bin-dir}])
5747   fi
5748   if test -z "$JAVAH" -o "$JAVAH" = ":"; then
5749     AC_MSG_ERROR([The program javah was not found.  Set \$JAVA_HOME to your Java SDK directory or use --with-java-bin-path={java-bin-dir}])
5750   fi
5751   if test -z "$JAR" -o "$JAR" = ":"; then
5752     AC_MSG_ERROR([The program jar was not found.  Set \$JAVA_HOME to your Java SDK directory or use --with-java-bin-path={java-bin-dir}])
5753   fi
5754   if test -z "$JARSIGNER" -o "$JARSIGNER" = ":"; then
5755     AC_MSG_ERROR([The program jarsigner was not found.  Set \$JAVA_HOME to your Java SDK directory or use --with-java-bin-path={java-bin-dir}])
5756   fi
5757   if test -z "$KEYTOOL" -o "$KEYTOOL" = ":"; then
5758     AC_MSG_ERROR([The program keytool was not found.  Set \$JAVA_HOME to your Java SDK directory or use --with-java-bin-path={java-bin-dir}])
5759   fi
5762 dnl ========================================================
5763 dnl = ANGLE OpenGL->D3D translator for WebGL
5764 dnl = * only applies to win32
5765 dnl = * enabled by default (shipping build); requires explicit --disable to disable
5766 dnl ========================================================
5767 MOZ_ANGLE_RENDERER=
5768 MOZ_DIRECTX_SDK_CPU_SUFFIX=
5769 MOZ_DIRECTX_SDK_PATH=
5770 MOZ_D3DCOMPILER_DLL=
5771 MOZ_HAS_WINSDK_WITH_D3D=
5772 MOZ_D3DCOMPILER_DLL_PATH=
5773 MOZ_D3DCOMPILER_CAB=
5774 case "$target_os" in
5775 *mingw*)
5776     MOZ_ANGLE_RENDERER=1
5777     ;;
5778 esac
5780 # The DirectX SDK libraries are split into x86 and x64 sub-directories
5781 case "${target_cpu}" in
5782 i*86)
5783   MOZ_DIRECTX_SDK_CPU_SUFFIX=x86
5784   ;;
5785 x86_64)
5786   MOZ_DIRECTX_SDK_CPU_SUFFIX=x64
5787   ;;
5788 esac
5790 MOZ_ARG_DISABLE_BOOL(webgl,
5791 [  --disable-webgl     Disable building of the WebGL implementation],
5792     MOZ_WEBGL_DISABLED=1,
5793     MOZ_WEBGL_DISABLED=)
5795 MOZ_ARG_ENABLE_BOOL(winsdk-directx,
5796 [  --enable-winsdk-directx use DirectX SDK in Windows SDK],
5797     MOZ_WINSDK_DIRECTX=1,
5798     MOZ_WINSDK_DIRECTX=)
5800 if test -n "$MOZ_WEBGL_DISABLED"; then
5801   MOZ_WEBGL=
5802   MOZ_ANGLE_RENDERER=
5805 if test -n "$MOZ_WEBGL"; then
5806   AC_DEFINE(MOZ_WEBGL)
5809 if test -n "$MOZ_WEBGL_CONFORMANT"; then
5810   AC_DEFINE(MOZ_WEBGL_CONFORMANT)
5814 # Locate a DirectX SDK here so we can use it for both ANGLE and
5815 # Joystick support.
5816 if test "$OS_TARGET" = "WINNT" -a -z "$CROSS_COMPILE"; then
5817   # Get the SDK path from the registry.
5818   # First try to get the June 2010 SDK
5819   MOZ_DIRECTX_SDK_REG_KEY=`reg query 'HKLM\Software\Microsoft\DirectX' //s | grep 'Microsoft DirectX SDK (June 2010)' | head -n 1`
5820   if test -z "$MOZ_DIRECTX_SDK_REG_KEY" ; then
5821     # Otherwise just take whatever comes first
5822     MOZ_DIRECTX_SDK_REG_KEY=`reg query 'HKLM\Software\Microsoft\DirectX' //s | grep 'Microsoft DirectX SDK' | head -n 1`
5823   fi
5824   MOZ_DIRECTX_SDK_PATH=`reg query "$MOZ_DIRECTX_SDK_REG_KEY" //v InstallPath | grep REG_SZ | sed 's/.*\([[a-zA-Z]]\)\\:\\\\/\\1\\:\\\\/' | sed 's,\\\\,/,g'`
5826   if test -n "$MOZ_DIRECTX_SDK_PATH" &&
5827      test -f "$MOZ_DIRECTX_SDK_PATH"/lib/$MOZ_DIRECTX_SDK_CPU_SUFFIX/dxguid.lib ; then
5828     AC_MSG_RESULT([Found DirectX SDK via registry, using $MOZ_DIRECTX_SDK_PATH])
5829   else
5830     AC_MSG_RESULT([Couldn't find the DirectX SDK.])
5831   fi
5834 # On mingw, check if headers are provided by toolchain.
5835 if test "$OS_TARGET" = "WINNT" -a -n "$GNU_CC"; then
5836   MOZ_CHECK_HEADER(d3d10.h, MOZ_HAS_WINSDK_WITH_D3D=1)
5839 dnl ========================================================
5840 dnl D3D compiler DLL
5841 dnl ========================================================
5843 if test -n "$MOZ_ANGLE_RENDERER"; then
5844   # Check that our DirectX SDK is acceptable.
5845   if test -n "$MOZ_DIRECTX_SDK_PATH"; then
5846     if test -n "`echo $MOZ_DIRECTX_SDK_REG_KEY | grep 'February 2010'`" ; then
5847       AC_MSG_RESULT([Found the February 2010 DirectX SDK, which is unacceptable to ANGLE.])
5848       MOZ_DIRECTX_SDK_PATH_BAD=1
5849     fi
5851     if test -n "$MOZ_DIRECTX_SDK_PATH" &&
5852        test -f "$MOZ_DIRECTX_SDK_PATH"/include/d3dx9.h &&
5853        test -f "$MOZ_DIRECTX_SDK_PATH"/lib/$MOZ_DIRECTX_SDK_CPU_SUFFIX/dxguid.lib ; then
5854       AC_MSG_RESULT([Found acceptable DirectX SDK for ANGLE.])
5855     else
5856       AC_MSG_RESULT([Found DirectX SDK is unacceptable for ANGLE.])
5857       MOZ_DIRECTX_SDK_PATH_BAD=1
5858     fi
5859   fi
5861   if test -n "$MOZ_DIRECTX_SDK_PATH_BAD"; then
5862     AC_MSG_ERROR([Couldn't find an acceptable DirectX SDK for ANGLE. Either install DirectX SDK (June 2010 version or newer), or reconfigure with --disable-webgl.])
5863   fi
5865   # Find a D3D compiler DLL in a Windows SDK.
5866   MOZ_D3DCOMPILER_DLL=
5867   if test -n "$MOZ_WINSDK_DIRECTX"; then
5868     case "$MOZ_WINSDK_MAXVER" in
5869     0x0603*)
5870       MOZ_D3DCOMPILER_DLL=d3dcompiler_47.dll
5871       AC_MSG_RESULT([Found D3D compiler in Windows SDK 8.1.])
5872     ;;
5873     0x0602*)
5874       MOZ_D3DCOMPILER_DLL=d3dcompiler_46.dll
5875       AC_MSG_RESULT([Found D3D compiler in Windows SDK 8.0.])
5876     ;;
5877     esac
5878   fi
5880   if test -n "$MOZ_D3DCOMPILER_DLL"; then
5881     # We have a name, now track down the path.
5882     if test -n "$WINDOWSSDKDIR"; then
5883       MOZ_D3DCOMPILER_DLL_PATH="$WINDOWSSDKDIR/Redist/D3D/$MOZ_DIRECTX_SDK_CPU_SUFFIX/$MOZ_D3DCOMPILER_DLL"
5884       if test -f "$MOZ_D3DCOMPILER_DLL_PATH"; then
5885         MOZ_HAS_WINSDK_WITH_D3D=1
5886         AC_MSG_RESULT([Found MOZ_D3DCOMPILER_DLL_PATH: $MOZ_D3DCOMPILER_DLL_PATH])
5887       else
5888         AC_MSG_RESULT([MOZ_D3DCOMPILER_DLL_PATH doesn't exist: $MOZ_D3DCOMPILER_DLL_PATH])
5889       fi
5890     else
5891       AC_MSG_RESULT([WINDOWSSDKDIR is missing.])
5892     fi
5893   fi
5895   # Find a D3D compiler DLL in the DirectX SDK, if we didn't find one already.
5896   # Get the SDK numeric version (e.g. 43) by looking at the dependencies of d3dx9.lib
5897   if test -z "$MOZ_HAS_WINSDK_WITH_D3D"; then
5898     MOZ_D3DX9_VERSION=`dumpbin //headers "$MOZ_DIRECTX_SDK_PATH"/lib/$MOZ_DIRECTX_SDK_CPU_SUFFIX/d3dx9.lib | egrep d3dx9_[[0-9]][[0-9]]\.dll | head -n1 | sed 's/.*\([[0-9]][[0-9]]\).*/\\1/g'`
5900     if test -n "$MOZ_D3DX9_VERSION" ; then
5901       MOZ_D3DCOMPILER_CAB=`find "$MOZ_DIRECTX_SDK_PATH"/Redist -name *D3DCompiler_${MOZ_D3DX9_VERSION}_${MOZ_DIRECTX_SDK_CPU_SUFFIX}.cab | head -n1`
5902       MOZ_D3DCOMPILER_DLL=D3DCompiler_$MOZ_D3DX9_VERSION.dll
5903     else
5904       AC_MSG_RESULT([Couldn't determine the D3DX9 version for the DirectX SDK.])
5905     fi
5907     if test -z "$MOZ_D3DCOMPILER_CAB"; then
5908       AC_MSG_RESULT([Couldn't find a CAB containing the D3D compiler DLL.])
5909     fi
5910   fi
5912   if test -z "$MOZ_D3DCOMPILER_DLL_PATH" -a -z "$MOZ_D3DCOMPILER_CAB" -a -z "$CROSS_COMPILE"; then
5913     AC_MSG_ERROR([Couldn't find an acceptable D3D compiler DLL. Either install Windows SDK 8.0+ and reconfigure with --enable-winsdk-directx, install DirectX SDK (June 2010 version or newer), or reconfigure with --disable-webgl.])
5914   fi
5918 dnl ========================================================
5919 dnl Gamepad support
5920 dnl ========================================================
5921 MOZ_GAMEPAD=
5922 MOZ_GAMEPAD_BACKEND=stub
5924 # Gamepad DOM is built on supported platforms by default.
5925 case "$OS_TARGET" in
5926      Darwin|WINNT|Linux)
5927        MOZ_GAMEPAD=1
5928        ;;
5929      *)
5930        ;;
5931 esac
5933 MOZ_ARG_DISABLE_BOOL(gamepad,
5934 [  --disable-gamepad   Disable gamepad support],
5935     MOZ_GAMEPAD=,
5936     MOZ_GAMEPAD=1)
5938 if test "$MOZ_GAMEPAD"; then
5939     case "$OS_TARGET" in
5940     Darwin)
5941         MOZ_GAMEPAD_BACKEND=cocoa
5942         ;;
5943     WINNT)
5944         if test -z "$MOZ_HAS_WINSDK_WITH_D3D"; then
5945             if test -n "$MOZ_DIRECTX_SDK_PATH" ; then
5946                 if ! test -f "$MOZ_DIRECTX_SDK_PATH"/lib/$MOZ_DIRECTX_SDK_CPU_SUFFIX/dxguid.lib ; then
5947                    MOZ_GAMEPAD=
5948                 fi
5949             elif test "$GCC" != "yes"; then
5950                 MOZ_GAMEPAD=
5951             fi
5952         fi
5953         if test -z "$MOZ_GAMEPAD"; then
5954            AC_MSG_ERROR([Couldn't find the DirectX SDK, needed for gamepad support. Please install it or, reconfigure with --disable-gamepad to disable gamepad support.])
5955         fi
5956         MOZ_GAMEPAD_BACKEND=windows
5957         ;;
5958     Linux)
5959         MOZ_CHECK_HEADER([linux/joystick.h])
5960         if test "$ac_cv_header_linux_joystick_h" != "yes"; then
5961           AC_MSG_ERROR([Can't find header linux/joystick.h, needed for gamepad support. Please install Linux kernel headers or reconfigure with --disable-gamepad to disable gamepad support.])
5962         fi
5963         MOZ_GAMEPAD_BACKEND=linux
5964         ;;
5965     *)
5966         ;;
5967    esac
5969   AC_DEFINE(MOZ_GAMEPAD)
5971 AC_SUBST(MOZ_GAMEPAD)
5972 AC_SUBST(MOZ_GAMEPAD_BACKEND)
5974 dnl ========================================================
5975 dnl = Breakpad crash reporting (on by default on supported platforms)
5976 dnl ========================================================
5978 case $target in
5979 i?86-*-mingw*|x86_64-*-mingw*)
5980   MOZ_CRASHREPORTER=1
5981   ;;
5982 i?86-apple-darwin*|x86_64-apple-darwin*)
5983   MOZ_CRASHREPORTER=1
5984   ;;
5985 i?86-*-linux*|x86_64-*-linux*|arm-*-linux*)
5986   if test "$MOZ_ENABLE_GTK"; then
5987     MOZ_CRASHREPORTER=1
5988   fi
5989   ;;
5990 *-android*|*-linuxandroid*)
5991   MOZ_CRASHREPORTER=1
5992   ;;
5993 *solaris*)
5994   MOZ_CRASHREPORTER=1
5995   ;;
5996 esac
5998 MOZ_ARG_DISABLE_BOOL(crashreporter,
5999 [  --disable-crashreporter Disable breakpad crash reporting],
6000     [MOZ_CRASHREPORTER=],
6001     [MOZ_CRASHREPORTER=F # Force enable breakpad])
6003 if test "$OS_ARCH" != "$HOST_OS_ARCH" -a "$OS_ARCH" != "WINNT"; then
6004   if test "$MOZ_CRASHREPORTER" = F; then
6005     AC_MSG_ERROR([Cannot --enable-crashreporter, as breakpad tools do not support compiling on $HOST_OS_ARCH while targeting $OS_ARCH.])
6006   fi
6007   MOZ_CRASHREPORTER=
6010 if test -n "$MOZ_CRASHREPORTER"; then
6011    AC_DEFINE(MOZ_CRASHREPORTER)
6013   if test "$OS_TARGET" = "Linux" -o "$OS_ARCH" = "SunOS" && \
6014     test -z "$SKIP_LIBRARY_CHECKS"; then
6015     PKG_CHECK_MODULES(MOZ_GTHREAD, gthread-2.0)
6016     AC_SUBST(MOZ_GTHREAD_CFLAGS)
6017     AC_SUBST(MOZ_GTHREAD_LIBS)
6018   fi
6020   if test "$OS_ARCH" = "WINNT"; then
6021     if test -z "$HAVE_64BIT_OS"; then
6022       MOZ_CRASHREPORTER_INJECTOR=1
6023       AC_DEFINE(MOZ_CRASHREPORTER_INJECTOR)
6024     fi
6025   fi
6028 MOZ_ARG_WITH_STRING(crashreporter-enable-percent,
6029 [  --with-crashreporter-enable-percent=NN
6030                           Enable sending crash reports by default on NN% of users. (default=100)],
6031 [ val=`echo $withval | sed 's/[^0-9]//g'`
6032     MOZ_CRASHREPORTER_ENABLE_PERCENT="$val"])
6034 if test -z "$MOZ_CRASHREPORTER_ENABLE_PERCENT"; then
6035    MOZ_CRASHREPORTER_ENABLE_PERCENT=100
6037 AC_DEFINE_UNQUOTED(MOZ_CRASHREPORTER_ENABLE_PERCENT, $MOZ_CRASHREPORTER_ENABLE_PERCENT)
6039 dnl ========================================================
6040 dnl = libjpeg-turbo configuration
6041 dnl ========================================================
6042 MOZ_LIBJPEG_TURBO=
6043 if test -z "$MOZ_NATIVE_JPEG"; then
6044     MOZ_LIBJPEG_TURBO=1
6047 MOZ_ARG_DISABLE_BOOL(libjpeg_turbo,
6048 [ --disable-libjpeg-turbo  Disable optimized jpeg decoding routines],
6049     MOZ_LIBJPEG_TURBO=,
6050     MOZ_LIBJPEG_TURBO=1)
6052 if test "$MOZ_NATIVE_JPEG" = 1 -a "$MOZ_LIBJPEG_TURBO" = 1; then
6053     AC_MSG_ERROR([cannot use --with-system-jpeg with --enable-libjpeg-turbo.])
6056 dnl Detect if we can use yasm to compile libjpeg-turbo's optimized assembly
6057 dnl files.
6059 if test -n "$MOZ_LIBJPEG_TURBO"; then
6061   dnl Do we support libjpeg-turbo on this platform?
6062   case "$OS_ARCH:$OS_TEST" in
6063   Darwin:i?86)
6064     LIBJPEG_TURBO_ASFLAGS="-f macho32 -rnasm -pnasm -DPIC -DMACHO"
6065     LIBJPEG_TURBO_X86_ASM=1
6066   ;;
6067   Darwin:x86_64)
6068     LIBJPEG_TURBO_ASFLAGS="-f macho64 -rnasm -pnasm -D__x86_64__ -DPIC -DMACHO"
6069     LIBJPEG_TURBO_X64_ASM=1
6070   ;;
6071   WINNT:x86|WINNT:i?86)
6072     LIBJPEG_TURBO_ASFLAGS="-f win32 -rnasm -pnasm -DPIC -DWIN32"
6073     LIBJPEG_TURBO_X86_ASM=1
6074   ;;
6075   WINNT:x86_64)
6076     LIBJPEG_TURBO_ASFLAGS="-f win64 -rnasm -pnasm -D__x86_64__ -DPIC -DWIN64 -DMSVC"
6077     LIBJPEG_TURBO_X64_ASM=1
6078   ;;
6079   *:arm*)
6080     LIBJPEG_TURBO_ASFLAGS="-march=armv7-a -mfpu=neon"
6081     LIBJPEG_TURBO_ARM_ASM=1
6082   ;;
6083   *:x86|*:i?86)
6084     if $CC -E -dM -</dev/null | grep -q __ELF__; then
6085       LIBJPEG_TURBO_ASFLAGS="-f elf32 -rnasm -pnasm -DPIC -DELF"
6086       LIBJPEG_TURBO_X86_ASM=1
6087     fi
6088   ;;
6089   *:x86_64)
6090     if $CC -E -dM -</dev/null | grep -q __ELF__; then
6091       LIBJPEG_TURBO_ASFLAGS="-f elf64 -rnasm -pnasm -D__x86_64__ -DPIC -DELF"
6092       LIBJPEG_TURBO_X64_ASM=1
6093     fi
6094   ;;
6095   esac
6099 dnl If we're on an x86 or x64 system which supports libjpeg-turbo's asm routines
6100 dnl and --disable-libjpeg-turbo wasn't passed, check for Yasm, and error out if
6101 dnl it doesn't exist or we have too old of a version.
6102 if test -n "$LIBJPEG_TURBO_X86_ASM" -o -n "$LIBJPEG_TURBO_X64_ASM" ; then
6103     LIBJPEG_TURBO_AS=$YASM
6105     if test -z "$LIBJPEG_TURBO_AS" ; then
6106         AC_MSG_ERROR([Yasm is required to build with libjpeg-turbo's optimized JPEG decoding routines, but you do not appear to have Yasm installed.  Either install it or configure with --disable-libjpeg-turbo to use the pure C JPEG decoder.  See https://developer.mozilla.org/en/YASM for more details.])
6107     fi
6109     dnl Check that we have the right yasm version.  We require 1.0.1 or newer
6110     dnl on Linux and 1.1 or newer everywhere else.
6111     if test "$OS_ARCH" = "Linux" ; then
6112         if test "$_YASM_MAJOR_VERSION" -lt "1" -o \( "$_YASM_MAJOR_VERSION" -eq "1" -a "$_YASM_MINOR_VERSION" -eq "0" -a "$_YASM_RELEASE" -lt "1" \) ; then
6113             AC_MSG_ERROR([Yasm 1.0.1 or greater is required to build with libjpeg-turbo's optimized JPEG decoding routines, but you appear to have version $_YASM_MAJOR_VERSION.$_YASM_MINOR_VERSION.$_YASM_RELEASE.  Upgrade to the newest version or configure with --disable-libjpeg-turbo to use the pure C JPEG decoder.  See https://developer.mozilla.org/en/YASM for more details.])
6114         fi
6115     else
6116         if test "$_YASM_MAJOR_VERSION" -lt "1" -o \( "$_YASM_MAJOR_VERSION" -eq "1" -a "$_YASM_MINOR_VERSION" -lt "1" \) ; then
6117             AC_MSG_ERROR([Yasm 1.1 or greater is required to build with libjpeg-turbo's optimized JPEG decoding routines, but you appear to have version $_YASM_MAJOR_VERSION.$_YASM_MINOR_VERSION.  Upgrade to the newest version or configure with --disable-libjpeg-turbo to use the pure C JPEG decoder.  See https://developer.mozilla.org/en/YASM for more details.])
6118         fi
6119     fi
6122 dnl If we're on an ARM system which supports libjpeg-turbo's asm routines and
6123 dnl --disable-libjpeg-turbo wasn't passed, use the C compiler as the assembler.
6124 if test -n "$LIBJPEG_TURBO_ARM_ASM" ; then
6125     echo "Using $AS as the assembler for ARM code."
6126     LIBJPEG_TURBO_AS=$AS
6129 if test -n "$LIBJPEG_TURBO_X86_ASM"; then
6130     AC_DEFINE(LIBJPEG_TURBO_X86_ASM)
6131 elif test -n "$LIBJPEG_TURBO_X64_ASM"; then
6132     AC_DEFINE(LIBJPEG_TURBO_X64_ASM)
6133 elif test -n "$LIBJPEG_TURBO_ARM_ASM"; then
6134     AC_DEFINE(LIBJPEG_TURBO_ARM_ASM)
6135 elif test -n "$MOZ_LIBJPEG_TURBO"; then
6136     dnl Warn if we're not building the optimized routines, even though the user
6137     dnl didn't specify --disable-libjpeg-turbo.
6138     AC_MSG_WARN([No assembler or assembly support for libjpeg-turbo.  Using unoptimized C routines.])
6141 dnl ========================================================
6142 dnl = Enable compilation of specific extension modules
6143 dnl ========================================================
6145 MOZ_ARG_ENABLE_STRING(extensions,
6146 [  --enable-extensions     Enable extensions],
6147 [ for option in `echo $enableval | sed 's/,/ /g'`; do
6148     if test "$option" = "yes" -o "$option" = "all"; then
6149         AC_MSG_ERROR([--enable-extensions=$option is no longer supported.])
6150     elif test "$option" = "no" -o "$option" = "none"; then
6151         MOZ_EXTENSIONS=""
6152     elif test "$option" = "default"; then
6153         MOZ_EXTENSIONS="$MOZ_EXTENSIONS $MOZ_EXTENSIONS_DEFAULT"
6154     elif test `echo "$option" | grep -c \^-` != 0; then
6155         option=`echo $option | sed 's/^-//'`
6156         MOZ_EXTENSIONS=`echo "$MOZ_EXTENSIONS" | sed "s/ ${option}//"`
6157     else
6158         MOZ_EXTENSIONS="$MOZ_EXTENSIONS $option"
6159     fi
6160 done],
6161     MOZ_EXTENSIONS="$MOZ_EXTENSIONS_DEFAULT")
6163 if test -z "$MOZ_ENABLE_GNOMEVFS" -a `echo "$MOZ_EXTENSIONS" | grep -c gnomevfs` -ne 0; then
6164     # Suppress warning on non-X11 platforms
6165     if test -n "$MOZ_X11"; then
6166         AC_MSG_WARN([Removing gnomevfs from MOZ_EXTENSIONS due to no --enable-gnomevfs.])
6167     fi
6168     MOZ_EXTENSIONS=`echo $MOZ_EXTENSIONS | sed -e 's|gnomevfs||'`
6171 dnl Do not build gnomevfs with libxul based apps
6172 if test -n "$LIBXUL_SDK_DIR" -a `echo "$MOZ_EXTENSIONS" | grep -c gnomevfs` -ne 0; then
6173     MOZ_EXTENSIONS=`echo $MOZ_EXTENSIONS | sed -e 's|gnomevfs||'`
6176 if test -z "$MOZ_ENABLE_GIO" -a `echo "$MOZ_EXTENSIONS" | grep -c gio` -ne 0; then
6177     # Suppress warning on non-X11 platforms
6178     if test -n "$MOZ_X11"; then
6179         AC_MSG_WARN([Removing gio from MOZ_EXTENSIONS due to --disable-gio.])
6180     fi
6181     MOZ_EXTENSIONS=`echo $MOZ_EXTENSIONS | sed -e 's|gio||'`
6184 dnl Do not build gio with libxul based apps
6185 if test -n "$LIBXUL_SDK_DIR" -a `echo "$MOZ_EXTENSIONS" | grep -c gio` -ne 0; then
6186     MOZ_EXTENSIONS=`echo $MOZ_EXTENSIONS | sed -e 's|gio||'`
6189 if test `echo "$MOZ_EXTENSIONS" | grep -c gio` -ne 0; then
6190     MOZ_GIO_COMPONENT=1
6191     MOZ_EXTENSIONS=`echo $MOZ_EXTENSIONS | sed -e 's|gio||'`
6193 AC_SUBST(MOZ_GIO_COMPONENT)
6195 if test -z "$MOZ_JSDEBUGGER" -a `echo "$MOZ_EXTENSIONS" | grep -c venkman` -ne 0; then
6196     AC_MSG_WARN([Cannot build venkman without JavaScript debug library. Removing venkman from MOZ_EXTENSIONS.])
6197     MOZ_EXTENSIONS=`echo $MOZ_EXTENSIONS | sed -e 's|venkman||'`
6200 dnl Remove dupes
6201 MOZ_EXTENSIONS=`${PERL} ${srcdir}/build/unix/uniq.pl ${MOZ_EXTENSIONS}`
6203 dnl Ensure every extension exists, to avoid mostly-inscrutable error messages
6204 dnl when trying to build a nonexistent extension.
6205 for extension in $MOZ_EXTENSIONS; do
6206     if test ! -d "${srcdir}/extensions/${extension}"; then
6207         AC_MSG_ERROR([Unrecognized extension provided to --enable-extensions: ${extension}.])
6208     fi
6209 done
6211 if test -n "$MOZ_USE_NATIVE_POPUP_WINDOWS"; then
6212   AC_DEFINE(MOZ_USE_NATIVE_POPUP_WINDOWS)
6215 dnl ========================================================
6216 dnl Build Freetype in the tree
6217 dnl ========================================================
6218 MOZ_ARG_ENABLE_BOOL(tree-freetype,
6219 [  --enable-tree-freetype  Enable Tree FreeType],
6220     MOZ_TREE_FREETYPE=1,
6221     MOZ_TREE_FREETYPE= )
6222 if test -n "$MOZ_TREE_FREETYPE"; then
6223    if test -n "$_WIN32_MSVC"; then
6224       AC_ERROR("building with in-tree freetype is not supported on MSVC")
6225    fi
6226    AC_DEFINE(MOZ_TREE_FREETYPE)
6227    AC_SUBST(MOZ_TREE_FREETYPE)
6228    MOZ_ENABLE_CAIRO_FT=1
6229    FT_FONT_FEATURE="#define CAIRO_HAS_FT_FONT 1"
6230    FT2_CFLAGS='-I$(topsrcdir)/modules/freetype2/include'
6231    CAIRO_FT_CFLAGS='-I$(topsrcdir)/modules/freetype2/include'
6232    FT2_LIBS='$(call EXPAND_LIBNAME_PATH,freetype,$(DEPTH)/modules/freetype2/.libs)'
6233    CAIRO_FT_OSLIBS=''
6234    AC_DEFINE(HAVE_FT_BITMAP_SIZE_Y_PPEM)
6235    AC_DEFINE(HAVE_FT_GLYPHSLOT_EMBOLDEN)
6236    AC_DEFINE(HAVE_FT_LOAD_SFNT_TABLE)
6237    AC_SUBST(CAIRO_FT_CFLAGS)
6240 dnl ========================================================
6241 dnl Installer
6242 dnl ========================================================
6243 dnl Abort Windows build if the required major version and
6244 dnl minimum minor version of Unicode NSIS isn't in the path
6245 dnl (unless in case of cross compiling, for which Unicode
6246 dnl is not yet sufficient).
6247 if test "$OS_ARCH" = "WINNT"; then
6248     MIN_NSIS_MAJOR_VER=2
6249     MIN_NSIS_MINOR_VER=46
6250     MOZ_PATH_PROGS(MAKENSISU, $MAKENSISU makensisu-3.0a2.exe makensisu-2.46.exe makensis)
6251     if test -n "$MAKENSISU" -a "$MAKENSISU" != ":"; then
6252       AC_MSG_RESULT([yes])
6253       MAKENSISU_VER=`"$MAKENSISU" -version 2>/dev/null`
6254       changequote(,)
6255       MAKENSISU_PARSED_VER=`echo "$MAKENSISU_VER" | sed -e '/-Unicode/!s/.*//g' -e 's/^v\([0-9]\+\.[0-9]\+\).*\-Unicode$/\1/g'`
6256       changequote([,])
6257       if test "$MAKENSISU_PARSED_VER" = ""; then
6258           changequote(,)
6259           MAKENSISU_PARSED_VER=`echo "$MAKENSISU_VER" | sed -e 's/^v\([0-9]\+\.[0-9]\+\).*$/\1/g'`
6260           changequote([,])
6261       fi
6262       MAKENSISU_MAJOR_VER=0
6263       MAKENSISU_MINOR_VER=0
6264       if test ! "$MAKENSISU_PARSED_VER" = ""; then
6265           MAKENSISU_MAJOR_VER=`echo $MAKENSISU_PARSED_VER | $AWK -F\. '{ print $1 }'`
6266           MAKENSISU_MINOR_VER=`echo $MAKENSISU_PARSED_VER | $AWK -F\. '{ print $2 }'`
6267       fi
6268       AC_MSG_CHECKING([for Unicode NSIS version $MIN_NSIS_MAJOR_VER.$MIN_NSIS_MINOR_VER or greater])
6269       if test "$MAKENSISU_MAJOR_VER" -eq $MIN_NSIS_MAJOR_VER -a \
6270               "$MAKENSISU_MINOR_VER" -ge $MIN_NSIS_MINOR_VER ||
6271          test "$MAKENSISU_MAJOR_VER" -gt $MIN_NSIS_MAJOR_VER; then
6272           AC_MSG_RESULT([yes])
6273       else
6274           AC_MSG_RESULT([no])
6275           if test -z "$CROSS_COMPILE"; then
6276             AC_MSG_ERROR([To build the installer you must have the latest MozillaBuild or Unicode NSIS version $REQ_NSIS_MAJOR_VER.$MIN_NSIS_MINOR_VER or greater in your path.])
6277           else
6278             MAKENSISU=
6279           fi
6280       fi
6281     elif test -z "$CROSS_COMPILE"; then
6282       AC_MSG_ERROR([To build the installer you must have the latest MozillaBuild or Unicode NSIS version $REQ_NSIS_MAJOR_VER.$MIN_NSIS_MINOR_VER or greater in your path.])
6283     else
6284       MAKENSISU=
6285     fi
6288 dnl ========================================================
6289 dnl Web App Runtime
6290 dnl ========================================================
6291 MOZ_ARG_DISABLE_BOOL(webapp-runtime,
6292 [  --disable-webapp-runtime  Disable Web App Runtime],
6293     MOZ_WEBAPP_RUNTIME=,
6294     MOZ_WEBAPP_RUNTIME=1)
6295 if test "$MOZ_WIDGET_TOOLKIT" != "windows" -a "$MOZ_WIDGET_TOOLKIT" != "cocoa" -a "$MOZ_WIDGET_TOOLKIT" != "gtk2"; then
6296     MOZ_WEBAPP_RUNTIME=
6298 if test "$OS_ARCH" = "WINNT" -a -z "$MAKENSISU" -a -n "$CROSS_COMPILE"; then
6299     MOZ_WEBAPP_RUNTIME=
6301 AC_SUBST(MOZ_WEBAPP_RUNTIME)
6302 if test "$MOZ_WEBAPP_RUNTIME"; then
6303     AC_DEFINE(MOZ_WEBAPP_RUNTIME)
6306 AC_MSG_CHECKING([for tar archiver])
6307 AC_CHECK_PROGS(TAR, gnutar gtar tar, "")
6308 if test -z "$TAR"; then
6309     AC_MSG_ERROR([no tar archiver found in \$PATH])
6311 AC_MSG_RESULT([$TAR])
6312 AC_SUBST(TAR)
6314 AC_MSG_CHECKING([for wget])
6315 AC_CHECK_PROGS(WGET, wget, "")
6316 AC_MSG_RESULT([$WGET])
6317 AC_SUBST(WGET)
6319 dnl ========================================================
6320 dnl Signing
6321 dnl ========================================================
6323 if test -n "$MOZ_SIGN_CMD"; then
6324     AC_DEFINE(MOZ_SIGNING)
6327 dnl ========================================================
6328 dnl Maintenance Service
6329 dnl ========================================================
6331 MOZ_ARG_ENABLE_BOOL(maintenance-service,
6332 [  --enable-maintenance-service       Enable building of maintenanceservice],
6333     MOZ_MAINTENANCE_SERVICE=1,
6334     MOZ_MAINTENANCE_SERVICE= )
6336 if test -n "$MOZ_MAINTENANCE_SERVICE"; then
6337   if test "$OS_ARCH" = "WINNT"; then
6338     AC_DEFINE(MOZ_MAINTENANCE_SERVICE)
6339   else
6340     AC_MSG_ERROR([Can only build with --enable-maintenance-service with a Windows target])
6341   fi
6344 dnl ========================================================
6345 dnl Verify MAR signatures
6346 dnl ========================================================
6348 MOZ_ARG_ENABLE_BOOL(verify-mar,
6349 [  --enable-verify-mar     Enable verifying MAR signatures],
6350     MOZ_VERIFY_MAR_SIGNATURE=1,
6351     MOZ_VERIFY_MAR_SIGNATURE= )
6353 if test -n "$MOZ_VERIFY_MAR_SIGNATURE"; then
6354   if test "$OS_ARCH" = "WINNT"; then
6355     AC_DEFINE(MOZ_VERIFY_MAR_SIGNATURE)
6356   else
6357     AC_MSG_ERROR([Can only build with --enable-verify-mar with a Windows target])
6358   fi
6361 dnl ========================================================
6362 dnl Enable building the signmar program.
6363 dnl This option is much different than the --enable-verify-mar option.
6364 dnl --enable-verify-mar is for enabling the verification check on MAR
6365 dnl files in the updater.  The --enable-signmar option is for building
6366 dnl the signmar program.
6367 dnl ========================================================
6369 MOZ_ARG_ENABLE_BOOL(signmar,
6370 [  --enable-signmar     Enable building the signmar program],
6371     MOZ_ENABLE_SIGNMAR=1,
6372     MOZ_ENABLE_SIGNMAR= )
6374 if test -n "$MOZ_ENABLE_SIGNMAR"; then
6375   AC_DEFINE(MOZ_ENABLE_SIGNMAR)
6378 dnl ========================================================
6379 dnl Updater
6380 dnl ========================================================
6382 MOZ_ARG_DISABLE_BOOL(updater,
6383 [  --disable-updater       Disable building of updater],
6384     MOZ_UPDATER=,
6385     MOZ_UPDATER=1 )
6387 if test -n "$MOZ_UPDATER"; then
6388     AC_DEFINE(MOZ_UPDATER)
6391 # tools/update-packaging is not checked out by default.
6392 MOZ_ARG_ENABLE_BOOL(update-packaging,
6393 [  --enable-update-packaging
6394                           Enable tools/update-packaging],
6395     MOZ_UPDATE_PACKAGING=1,
6396     MOZ_UPDATE_PACKAGING= )
6397 AC_SUBST(MOZ_UPDATE_PACKAGING)
6399 dnl ========================================================
6400 dnl build the tests by default
6401 dnl ========================================================
6402 MOZ_ARG_DISABLE_BOOL(tests,
6403 [  --disable-tests         Do not build test libraries & programs],
6404     ENABLE_TESTS=,
6405     ENABLE_TESTS=1 )
6407 if test -n "$ENABLE_TESTS"; then
6408     GTEST_HAS_RTTI=0
6409     AC_DEFINE_UNQUOTED(GTEST_HAS_RTTI, 0)
6410     AC_SUBST(GTEST_HAS_RTTI)
6411     if test -n "$_WIN32_MSVC"; then
6412           AC_DEFINE_UNQUOTED(_VARIADIC_MAX, 10)
6413     fi
6414     if test "${OS_TARGET}" = "Android"; then
6415         AC_DEFINE(GTEST_OS_LINUX_ANDROID)
6416         AC_DEFINE(GTEST_USE_OWN_TR1_TUPLE)
6417         AC_DEFINE_UNQUOTED(GTEST_HAS_CLONE, 0)
6418         AC_SUBST(GTEST_OS_LINUX_ANDROID)
6419         AC_SUBST(GTEST_USE_OWN_TR1_TUPLE)
6420         AC_SUBST(GTEST_HAS_CLONE)
6421     fi
6424 dnl ========================================================
6425 dnl parental controls (for Windows Vista)
6426 dnl ========================================================
6427 MOZ_ARG_DISABLE_BOOL(parental-controls,
6428 [  --disable-parental-controls
6429                           Do not build parental controls],
6430    MOZ_DISABLE_PARENTAL_CONTROLS=1,
6431    MOZ_DISABLE_PARENTAL_CONTROLS=)
6432 if test -n "$MOZ_DISABLE_PARENTAL_CONTROLS"; then
6433     AC_DEFINE(MOZ_DISABLE_PARENTAL_CONTROLS)
6436 AC_SUBST(MOZ_DISABLE_PARENTAL_CONTROLS)
6438 dnl ========================================================
6439 dnl = Disable DOMCrypto
6440 dnl ========================================================
6441 if test -n "$MOZ_DISABLE_CRYPTOLEGACY"; then
6442     AC_DEFINE(MOZ_DISABLE_CRYPTOLEGACY)
6444 AC_SUBST(MOZ_DISABLE_CRYPTOLEGACY)
6446 dnl ========================================================
6447 dnl = Disable EV certificate verification
6448 dnl ========================================================
6449 if test -n "$MOZ_NO_EV_CERTS"; then
6450     AC_DEFINE(MOZ_NO_EV_CERTS)
6452 AC_SUBST(MOZ_NO_EV_CERTS)
6454 dnl ========================================================
6455 dnl = Disable libpkix
6456 dnl ========================================================
6457 if test -n "$NSS_NO_LIBPKIX"; then
6458     AC_DEFINE(NSS_NO_LIBPKIX)
6460 AC_SUBST(NSS_NO_LIBPKIX)
6462 dnl ========================================================
6463 dnl = Content process sandboxing
6464 dnl ========================================================
6465 if test -n "$gonkdir"; then
6466     MOZ_CONTENT_SANDBOX=1
6469 MOZ_ARG_ENABLE_BOOL(content-sandbox,
6470 [  --enable-content-sandbox        Enable sandboxing support for content-processes],
6471     MOZ_CONTENT_SANDBOX=1,
6472     MOZ_CONTENT_SANDBOX=)
6474 if test -n "$MOZ_CONTENT_SANDBOX"; then
6475     AC_DEFINE(MOZ_CONTENT_SANDBOX)
6478 AC_SUBST(MOZ_CONTENT_SANDBOX)
6480 MOZ_ARG_ENABLE_BOOL(content-sandbox-reporter,
6481 [ --enable-content-sandbox-reporter        Enable syscall reporter to troubleshoot syscalls denied by the content-processes sandbox],
6482     MOZ_CONTENT_SANDBOX_REPORTER=1,
6483     MOZ_CONTENT_SANDBOX_REPORTER=)
6485 if test -n "$MOZ_CONTENT_SANDBOX_REPORTER"; then
6486     AC_DEFINE(MOZ_CONTENT_SANDBOX_REPORTER)
6489 AC_SUBST(MOZ_CONTENT_SANDBOX_REPORTER)
6491 dnl ========================================================
6492 dnl =
6493 dnl = Module specific options
6494 dnl =
6495 dnl ========================================================
6496 MOZ_ARG_HEADER(Individual module options)
6498 dnl ========================================================
6499 dnl = Disable feed handling components
6500 dnl ========================================================
6501 MOZ_ARG_DISABLE_BOOL(feeds,
6502 [  --disable-feeds         Disable feed handling and processing components],
6503     MOZ_FEEDS=,
6504     MOZ_FEEDS=1 )
6505 if test -n "$MOZ_FEEDS"; then
6506     AC_DEFINE(MOZ_FEEDS)
6507 else
6508     if test "$MOZ_BUILD_APP" = "browser"; then
6509         AC_MSG_ERROR([Cannot build Firefox with --disable-feeds.])
6510     fi
6513 dnl ========================================================
6514 dnl Check for sqlite
6515 dnl ========================================================
6517 MOZ_NATIVE_SQLITE=
6518 MOZ_ARG_ENABLE_BOOL(system-sqlite,
6519 [  --enable-system-sqlite  Use system sqlite (located with pkgconfig)],
6520 MOZ_NATIVE_SQLITE=1,
6521 MOZ_NATIVE_SQLITE= )
6523 if test -z "$MOZ_NATIVE_SQLITE"
6524 then
6525     SQLITE_CFLAGS=
6526     SQLITE_LIBS='$(call EXPAND_LIBNAME_PATH,mozsqlite3,$(DIST)/lib)'
6527 else
6528     dnl ============================
6529     dnl === SQLite Version check ===
6530     dnl ============================
6531     dnl Check to see if the system SQLite package is new enough.
6532     PKG_CHECK_MODULES(SQLITE, sqlite3 >= $SQLITE_VERSION)
6534     dnl ==================================
6535     dnl === SQLITE_SECURE_DELETE check ===
6536     dnl ==================================
6537     dnl Check to see if the system SQLite package is compiled with
6538     dnl SQLITE_SECURE_DELETE enabled.
6539     AC_MSG_CHECKING(for SQLITE_SECURE_DELETE support in system SQLite)
6540     _SAVE_CFLAGS="$CFLAGS"
6541     CFLAGS="$CFLAGS $SQLITE_CFLAGS"
6542     _SAVE_LIBS="$LIBS"
6543     LIBS="$LIBS $SQLITE_LIBS"
6544     AC_CACHE_VAL(ac_cv_sqlite_secure_delete,[
6545         AC_TRY_RUN([
6546             #include "sqlite3.h"
6548             int main(int argc, char **argv){
6549               return !sqlite3_compileoption_used("SQLITE_SECURE_DELETE");
6550             }],
6551             ac_cv_sqlite_secure_delete=yes,
6552             ac_cv_sqlite_secure_delete=no,
6553             ac_cv_sqlite_secure_delete=no
6554         )
6555     ])
6556     AC_MSG_RESULT($ac_cv_sqlite_secure_delete)
6557     CFLAGS="$_SAVE_CFLAGS"
6558     LIBS="$_SAVE_LIBS"
6559     if test "x$ac_cv_sqlite_secure_delete" = "xno"; then
6560         AC_MSG_ERROR([System SQLite library is not compiled with SQLITE_SECURE_DELETE.])
6561     fi
6563     dnl ===============================
6564     dnl === SQLITE_THREADSAFE check ===
6565     dnl ===============================
6566     dnl Check to see if the system SQLite package is compiled with
6567     dnl SQLITE_THREADSAFE enabled.
6568     AC_MSG_CHECKING(for SQLITE_THREADSAFE support in system SQLite)
6569     _SAVE_CFLAGS="$CFLAGS"
6570     CFLAGS="$CFLAGS $SQLITE_CFLAGS"
6571     _SAVE_LIBS="$LIBS"
6572     LIBS="$LIBS $SQLITE_LIBS"
6573     AC_CACHE_VAL(ac_cv_sqlite_threadsafe,[
6574         AC_TRY_RUN([
6575             #include "sqlite3.h"
6577             int main(int argc, char **argv){
6578               return !sqlite3_compileoption_used("SQLITE_THREADSAFE=1");
6579             }],
6580             ac_cv_sqlite_threadsafe=yes,
6581             ac_cv_sqlite_threadsafe=no,
6582             ac_cv_sqlite_threadsafe=no
6583         )
6584     ])
6585     AC_MSG_RESULT($ac_cv_sqlite_threadsafe)
6586     CFLAGS="$_SAVE_CFLAGS"
6587     LIBS="$_SAVE_LIBS"
6588     if test "x$ac_cv_sqlite_threadsafe" = "xno"; then
6589         AC_MSG_ERROR([System SQLite library is not compiled with SQLITE_THREADSAFE.])
6590     fi
6592     dnl ================================
6593     dnl === SQLITE_ENABLE_FTS3 check ===
6594     dnl ================================
6595     dnl check to see if the system SQLite package is compiled with
6596     dnl SQLITE_ENABLE_FTS3 enabled.
6597     AC_MSG_CHECKING(for SQLITE_ENABLE_FTS3 support in system SQLite)
6598     _SAVE_CFLAGS="$CFLAGS"
6599     CFLAGS="$CFLAGS $SQLITE_CFLAGS"
6600     _SAVE_LIBS="$LIBS"
6601     LIBS="$LIBS $SQLITE_LIBS"
6602     AC_CACHE_VAL(ac_cv_sqlite_enable_fts3,[
6603         AC_TRY_RUN([
6604             #include "sqlite3.h"
6606             int main(int argc, char **argv){
6607               return !sqlite3_compileoption_used("SQLITE_ENABLE_FTS3");
6608             }],
6609             ac_cv_sqlite_enable_fts3=yes,
6610             ac_cv_sqlite_enable_fts3=no,
6611             ac_cv_sqlite_enable_fts3=no
6612         )
6613     ])
6614     AC_MSG_RESULT($ac_cv_sqlite_enable_fts3)
6615     CFLAGS="$_SAVE_CFLAGS"
6616     LIBS="$_SAVE_LIBS"
6617     if test "x$ac_cv_sqlite_enable_fts3" = "xno"; then
6618         AC_MSG_ERROR([System SQLite library is not compiled with SQLITE_ENABLE_FTS3.])
6619     fi
6621     dnl =========================================
6622     dnl === SQLITE_ENABLE_UNLOCK_NOTIFY check ===
6623     dnl =========================================
6624     dnl check to see if the system SQLite package is compiled with
6625     dnl SQLITE_ENABLE_UNLOCK_NOTIFY enabled.
6626     AC_MSG_CHECKING(for SQLITE_ENABLE_UNLOCK_NOTIFY support in system SQLite)
6627     _SAVE_CFLAGS="$CFLAGS"
6628     CFLAGS="$CFLAGS $SQLITE_CFLAGS"
6629     _SAVE_LIBS="$LIBS"
6630     LIBS="$LIBS $SQLITE_LIBS"
6631     AC_CACHE_VAL(ac_cv_sqlite_enable_unlock_notify,[
6632         AC_TRY_RUN([
6633             #include "sqlite3.h"
6635             int main(int argc, char **argv){
6636               return !sqlite3_compileoption_used("SQLITE_ENABLE_UNLOCK_NOTIFY");
6637             }],
6638             ac_cv_sqlite_enable_unlock_notify=yes,
6639             ac_cv_sqlite_enable_unlock_notify=no,
6640             ac_cv_sqlite_enable_unlock_notify=no
6641         )
6642     ])
6643     AC_MSG_RESULT($ac_cv_sqlite_enable_unlock_notify)
6644     CFLAGS="$_SAVE_CFLAGS"
6645     LIBS="$_SAVE_LIBS"
6646     if test "x$ac_cv_sqlite_enable_unlock_notify" = "xno"; then
6647         AC_MSG_ERROR([System SQLite library is not compiled with SQLITE_ENABLE_UNLOCK_NOTIFY.])
6648     fi
6651 if test -n "$MOZ_NATIVE_SQLITE"; then
6652     AC_DEFINE(MOZ_NATIVE_SQLITE)
6654 AC_SUBST(MOZ_NATIVE_SQLITE)
6656 dnl ========================================================
6657 dnl = Enable help viewer (off by default)
6658 dnl ========================================================
6659 if test -n "$MOZ_HELP_VIEWER"; then
6660      dnl Do this if defined in confvars.sh
6661      AC_DEFINE(MOZ_HELP_VIEWER)
6664 dnl ========================================================
6665 dnl = Enable safe browsing (anti-phishing)
6666 dnl ========================================================
6667 MOZ_ARG_ENABLE_BOOL(safe-browsing,
6668 [  --enable-safe-browsing  Enable safe browsing (anti-phishing) implementation],
6669     MOZ_SAFE_BROWSING=1,
6670     MOZ_SAFE_BROWSING= )
6671 if test -n "$MOZ_SAFE_BROWSING"; then
6672     AC_DEFINE(MOZ_SAFE_BROWSING)
6674 AC_SUBST(MOZ_SAFE_BROWSING)
6676 dnl ========================================================
6677 dnl = Enable url-classifier
6678 dnl ========================================================
6679 dnl Implicitly enabled by default if building with safe-browsing
6680 if test -n "$MOZ_SAFE_BROWSING"; then
6681     MOZ_URL_CLASSIFIER=1
6683 MOZ_ARG_ENABLE_BOOL(url-classifier,
6684 [  --enable-url-classifier Enable url classifier module],
6685     MOZ_URL_CLASSIFIER=1,
6686     MOZ_URL_CLASSIFIER= )
6687 if test -n "$MOZ_URL_CLASSIFIER"; then
6688     AC_DEFINE(MOZ_URL_CLASSIFIER)
6690 AC_SUBST(MOZ_URL_CLASSIFIER)
6692 dnl ========================================================
6693 dnl = Disable zipwriter
6694 dnl ========================================================
6695 MOZ_ARG_DISABLE_BOOL(zipwriter,
6696 [  --disable-zipwriter     Disable zipwriter component],
6697     MOZ_ZIPWRITER=,
6698     MOZ_ZIPWRITER=1 )
6699 AC_SUBST(MOZ_ZIPWRITER)
6701 dnl ========================================================
6702 dnl GL provider
6703 dnl ========================================================
6704 MOZ_GL_PROVIDER=
6705 MOZ_ARG_WITH_STRING(gl-provider,
6706 [  --with-gl-provider=ID
6707                           Set GL provider backend type],
6708 [ val=`echo $withval`
6709     MOZ_GL_PROVIDER="$val"])
6711 if test -n "$MOZ_GL_PROVIDER"; then
6712 MOZ_GL_DEFAULT_PROVIDER=$MOZ_GL_PROVIDER
6713 AC_SUBST(MOZ_GL_PROVIDER)
6714 AC_DEFINE_UNQUOTED(MOZ_GL_PROVIDER, GLContextProvider$MOZ_GL_PROVIDER)
6716 AC_SUBST(MOZ_GL_DEFAULT_PROVIDER)
6717 AC_DEFINE_UNQUOTED(GL_PROVIDER_$MOZ_GL_DEFAULT_PROVIDER)
6719 dnl ========================================================
6720 dnl = faststripe theme
6721 dnl ========================================================
6722 MOZ_ARG_ENABLE_BOOL(faststripe,
6723 [  --enable-faststripe     Use faststripe theme],
6724     MOZ_THEME_FASTSTRIPE=1,
6725     MOZ_THEME_FASTSTRIPE= )
6726 AC_SUBST(MOZ_THEME_FASTSTRIPE)
6728 dnl ========================================================
6729 dnl =
6730 dnl = Feature options that require extra sources to be pulled
6731 dnl =
6732 dnl ========================================================
6733 dnl MOZ_ARG_HEADER(Features that require extra sources)
6735 dnl ========================================================
6736 dnl =
6737 dnl = Runtime debugging and Optimization Options
6738 dnl =
6739 dnl ========================================================
6740 MOZ_ARG_HEADER(Runtime debugging and Optimizations)
6742 dnl ========================================================
6743 dnl enable mobile optimizations
6744 dnl ========================================================
6745 MOZ_ARG_ENABLE_BOOL(mobile-optimize,
6746 [  --enable-mobile-optimize
6747                           Enable mobile optimizations],
6748     MOZ_GFX_OPTIMIZE_MOBILE=1)
6750 AC_SUBST(MOZ_GFX_OPTIMIZE_MOBILE)
6752 if test "$MOZ_GFX_OPTIMIZE_MOBILE"; then
6753     AC_DEFINE(MOZ_GFX_OPTIMIZE_MOBILE)
6756 dnl ========================================================
6757 dnl = Enable code optimization. ON by default.
6758 dnl ========================================================
6759 if test -z "$MOZ_OPTIMIZE_FLAGS"; then
6760     MOZ_OPTIMIZE_FLAGS="-O"
6763 MOZ_ARG_ENABLE_STRING(optimize,
6764 [  --disable-optimize      Disable compiler optimization
6765   --enable-optimize=[OPT] Specify compiler optimization flags [OPT=-O]],
6766 [ if test "$enableval" != "no"; then
6767     MOZ_OPTIMIZE=1
6768     if test -n "$enableval" -a "$enableval" != "yes"; then
6769         MOZ_OPTIMIZE_FLAGS=`echo "$enableval" | sed -e 's|\\\ | |g'`
6770         MOZ_OPTIMIZE=2
6771     fi
6772 else
6773     MOZ_OPTIMIZE=
6774 fi ], MOZ_OPTIMIZE=1)
6776 MOZ_SET_FRAMEPTR_FLAGS
6778 if test "$COMPILE_ENVIRONMENT"; then
6779 if test -n "$MOZ_OPTIMIZE"; then
6780     AC_MSG_CHECKING([for valid optimization flags])
6781     _SAVE_CFLAGS=$CFLAGS
6782     CFLAGS="$CFLAGS $MOZ_OPTIMIZE_FLAGS"
6783     AC_TRY_COMPILE([#include <stdio.h>],
6784         [printf("Hello World\n");],
6785         _results=yes,
6786         _results=no)
6787     AC_MSG_RESULT([$_results])
6788     if test "$_results" = "no"; then
6789         AC_MSG_ERROR([These compiler flags are invalid: $MOZ_OPTIMIZE_FLAGS])
6790     fi
6791     CFLAGS=$_SAVE_CFLAGS
6793 fi # COMPILE_ENVIRONMENT
6795 AC_SUBST(MOZ_OPTIMIZE)
6796 AC_SUBST(MOZ_FRAMEPTR_FLAGS)
6797 AC_SUBST(MOZ_OPTIMIZE_FLAGS)
6798 AC_SUBST(MOZ_OPTIMIZE_LDFLAGS)
6799 AC_SUBST(MOZ_ALLOW_HEAP_EXECUTE_FLAGS)
6800 AC_SUBST(MOZ_OPTIMIZE_SIZE_TWEAK)
6801 AC_SUBST(MOZ_PGO)
6802 AC_SUBST(MOZ_PGO_OPTIMIZE_FLAGS)
6804 dnl ========================================================
6805 dnl = Enable any treating of compile warnings as errors
6806 dnl ========================================================
6807 MOZ_ARG_ENABLE_BOOL(warnings-as-errors,
6808 [  --enable-warnings-as-errors
6809                           Enable treating of warnings as errors],
6810     MOZ_ENABLE_WARNINGS_AS_ERRORS=1,
6811     MOZ_ENABLE_WARNINGS_AS_ERRORS=)
6812 if test -z "$MOZ_ENABLE_WARNINGS_AS_ERRORS"; then
6813    WARNINGS_AS_ERRORS=''
6814 elif test "$GNU_CC"; then
6815     # Prevent the following GCC warnings from being treated as errors:
6816     # -Wuninitialized - too many false positives
6817     # -Wmaybe-uninitialized - too many false positives
6818     # -Wdeprecated-declarations - we don't want our builds held hostage when a
6819     #   platform-specific API becomes deprecated.
6820     MOZ_C_SUPPORTS_WARNING(-W, no-error=uninitialized, ac_c_has_noerror_uninitialized)
6821     MOZ_CXX_SUPPORTS_WARNING(-W, no-error=uninitialized, ac_cxx_has_noerror_uninitialized)
6822     MOZ_C_SUPPORTS_WARNING(-W, no-error=maybe-uninitialized, ac_c_has_noerror_maybe_uninitialized)
6823     MOZ_CXX_SUPPORTS_WARNING(-W, no-error=maybe-uninitialized, ac_cxx_has_noerror_maybe_uninitialized)
6824     MOZ_C_SUPPORTS_WARNING(-W, no-error=deprecated-declarations, ac_c_has_noerror_deprecated_declarations)
6825     MOZ_CXX_SUPPORTS_WARNING(-W, no-error=deprecated-declarations, ac_cxx_has_noerror_deprecated_declarations)
6828 dnl ========================================================
6829 dnl = Disable runtime logging checks
6830 dnl ========================================================
6831 MOZ_ARG_DISABLE_BOOL(logging,
6832 [  --disable-logging       Disable logging facilities],
6833     NS_DISABLE_LOGGING=1,
6834     NS_DISABLE_LOGGING= )
6835 if test "$NS_DISABLE_LOGGING"; then
6836     AC_DEFINE(NS_DISABLE_LOGGING)
6837 else
6838     AC_DEFINE(MOZ_LOGGING)
6841 dnl ========================================================
6842 dnl = This will enable logging of addref, release, ctor, dtor.
6843 dnl ========================================================
6844 _ENABLE_LOGREFCNT=42
6845 MOZ_ARG_ENABLE_BOOL(logrefcnt,
6846 [  --enable-logrefcnt      Enable logging of refcounts (default=debug) ],
6847     _ENABLE_LOGREFCNT=1,
6848     _ENABLE_LOGREFCNT= )
6849 if test "$_ENABLE_LOGREFCNT" = "1"; then
6850     AC_DEFINE(FORCE_BUILD_REFCNT_LOGGING)
6851 elif test -z "$_ENABLE_LOGREFCNT"; then
6852     AC_DEFINE(NO_BUILD_REFCNT_LOGGING)
6855 dnl ========================================================
6856 dnl moz_dump_painting
6857 dnl ========================================================
6858 MOZ_ARG_ENABLE_BOOL(dump-painting,
6859 [  --enable-dump-painting          Enable paint debugging.],
6860     MOZ_DUMP_PAINTING=1,
6861     MOZ_DUMP_PAINTING= )
6862 if test -n "$MOZ_DUMP_PAINTING"; then
6863     AC_DEFINE(MOZ_DUMP_PAINTING)
6864     AC_DEFINE(MOZ_LAYERS_HAVE_LOG)
6866 if test -n "$MOZ_DEBUG"; then
6867     AC_DEFINE(MOZ_DUMP_PAINTING)
6870 dnl ========================================================
6871 dnl = Enable trace malloc
6872 dnl ========================================================
6873 NS_TRACE_MALLOC=${MOZ_TRACE_MALLOC}
6874 MOZ_ARG_ENABLE_BOOL(trace-malloc,
6875 [  --enable-trace-malloc   Enable malloc tracing; also disables DMD and jemalloc],
6876     NS_TRACE_MALLOC=1,
6877     NS_TRACE_MALLOC= )
6878 if test "$NS_TRACE_MALLOC"; then
6879   # Please, Mr. Linker Man, don't take away our symbol names
6880   MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS=
6881   AC_DEFINE(NS_TRACE_MALLOC)
6883 AC_SUBST(NS_TRACE_MALLOC)
6885 dnl ========================================================
6886 dnl = Enable DMD
6887 dnl ========================================================
6889 MOZ_ARG_ENABLE_BOOL(dmd,
6890 [  --enable-dmd            Enable DMD; also enables jemalloc and replace-malloc],
6891     MOZ_DMD=1,
6892     MOZ_DMD= )
6894 dnl The two options are conflicting. Fails the configure to alert the user.
6895 if test "$NS_TRACE_MALLOC" -a "$MOZ_DMD"; then
6896     AC_MSG_ERROR([--enable-trace-malloc and --enable-dmd are conflicting options])
6899 if test "$MOZ_DMD"; then
6900     AC_DEFINE(MOZ_DMD)
6902     if test "${CPU_ARCH}" = "arm"; then
6903         CFLAGS="$CFLAGS -funwind-tables"
6904         CXXFLAGS="$CXXFLAGS -funwind-tables"
6905     fi
6907     MOZ_MEMORY=1                        # DMD enables jemalloc
6908     MOZ_REPLACE_MALLOC=1                # DMD enables replace-malloc
6910 AC_SUBST(MOZ_DMD)
6912 dnl ========================================================
6913 dnl = Enable jemalloc
6914 dnl ========================================================
6915 MOZ_ARG_ENABLE_BOOL(jemalloc,
6916 [  --enable-jemalloc       Replace memory allocator with jemalloc],
6917     MOZ_MEMORY=1,
6918     MOZ_MEMORY=)
6920 if test "$NS_TRACE_MALLOC"; then
6921     MOZ_MEMORY=
6924 if test "${OS_TARGET}" = "Android"; then
6925   dnl On Android, we use WRAP_LDFLAGS to link everything to mozglue
6926   :
6927 elif test "${OS_TARGET}" = "WINNT" -o "${OS_TARGET}" = "Darwin"; then
6928   dnl On Windows and OSX, we want to link all our binaries against mozglue
6929   if test -z "$GNU_CC"; then
6930     MOZ_GLUE_LDFLAGS='$(call EXPAND_LIBNAME_PATH,mozglue,$(LIBXUL_DIST)/lib)'
6931   else
6932     MOZ_GLUE_LDFLAGS='-L$(LIBXUL_DIST)/lib $(call EXPAND_LIBNAME,mozglue)'
6933   fi
6934 else
6935   dnl On other Unix systems, we only want to link executables against mozglue
6936   MOZ_GLUE_PROGRAM_LDFLAGS='$(MKSHLIB_FORCE_ALL) $(call EXPAND_LIBNAME_PATH,mozglue,$(LIBXUL_DIST)/lib)'
6937   dnl On other Unix systems, where mozglue is a static library, jemalloc is
6938   dnl separated for the SDK, so we need to add it here.
6939   if test "$MOZ_MEMORY" = 1 -o \( "$LIBXUL_SDK" -a -f "$LIBXUL_SDK/lib/${LIB_PREFIX}memory.${LIB_SUFFIX}" \); then
6940     MOZ_GLUE_PROGRAM_LDFLAGS="$MOZ_GLUE_PROGRAM_LDFLAGS "'$(call EXPAND_LIBNAME_PATH,memory,$(LIBXUL_DIST)/lib)'
6941   fi
6942   MOZ_GLUE_PROGRAM_LDFLAGS="$MOZ_GLUE_PROGRAM_LDFLAGS "'$(MKSHLIB_UNFORCE_ALL)'
6943   if test -n "$GNU_CC"; then
6944     dnl And we need mozglue symbols to be exported.
6945     MOZ_GLUE_PROGRAM_LDFLAGS="$MOZ_GLUE_PROGRAM_LDFLAGS -rdynamic"
6946   fi
6947   if test "$MOZ_LINKER" = 1; then
6948     MOZ_GLUE_PROGRAM_LDFLAGS="$MOZ_GLUE_PROGRAM_LDFLAGS $MOZ_ZLIB_LIBS"
6949   fi
6952 dnl ========================================================
6953 dnl = Enable dynamic replacement of malloc implementation
6954 dnl ========================================================
6955 MOZ_ARG_ENABLE_BOOL(replace-malloc,
6956 [  --enable-replace-malloc   Enable ability to dynamically replace the malloc implementation],
6957     MOZ_REPLACE_MALLOC=1,
6958     MOZ_REPLACE_MALLOC= )
6960 dnl The two options are conflicting. Fails the configure to alert the user.
6961 if test "$NS_TRACE_MALLOC" -a "$MOZ_REPLACE_MALLOC"; then
6962     AC_MSG_ERROR([--enable-trace-malloc and --enable-replace-malloc are conflicting options])
6965 if test -n "$MOZ_REPLACE_MALLOC" -a -z "$MOZ_MEMORY"; then
6966     dnl We don't want to enable jemalloc unconditionally because it may be a
6967     dnl deliberate choice not to enable it (bug 702250, for instance)
6968     AC_MSG_ERROR([--enable-replace-malloc requires --enable-jemalloc])
6969 elif test -n "$MOZ_REPLACE_MALLOC"; then
6970     MOZ_NATIVE_JEMALLOC=
6972     dnl Replace-malloc Mac linkage quirks
6973     if test -n "$MACOSX_DEPLOYMENT_TARGET"; then
6974         AC_CACHE_CHECK([how to do weak dynamic linking],
6975             ac_cv_weak_dynamic_linking,
6976             [echo 'extern void foo() __attribute__((weak_import));int bar() { if (foo) foo(); return 0; }' > conftest.c
6977              if AC_TRY_COMMAND([${CC-cc} -o conftest${DLL_SUFFIX} $CFLAGS -dynamiclib $LDFLAGS -Wl,-U,_foo conftest.c $LIBS 1>&5]) &&
6978                 test -s conftest${DLL_SUFFIX}; then
6979                  dnl There are several ways the linker can put link edit rules in a binary:
6980                  dnl - classic info only (for OSX < 10.6)
6981                  dnl - dyld info only
6982                  dnl - both
6983                  if otool -l conftest${DLL_SUFFIX} 2> /dev/null | grep "LC_DYLD_INFO_ONLY" > /dev/null; then
6984                      _CLASSIC_INFO=
6985                  else
6986                      _CLASSIC_INFO=1
6987                  fi
6988                  if otool -l conftest${DLL_SUFFIX} 2> /dev/null | grep "LC_DYLD_INFO" > /dev/null; then
6989                      _DYLD_INFO=1
6990                  else
6991                      _DYLD_INFO=
6992                  fi
6993                  dnl With classic info, we need to build with -flat_namespace.
6994                  dnl With dyld info, Xcode 4.5 does the right thing without additional flags,
6995                  dnl but Xcode < 4.5 requires a dummy library and -flat_namespace because it
6996                  dnl forgets to set the weak flag in the dyld info.
6997                  dnl See http://glandium.org/blog/?p=2764 for more details.
6998                  dnl
6999                  dnl Values for ac_cv_weak_dynamic_linking, and subsequently
7000                  dnl MOZ_REPLACE_MALLOC_LINKAGE are thus:
7001                  dnl - "flat namespace" when -flat_namespace alone is needed
7002                  dnl - "dummy library" when a dummy library and -flat_namespace are needed
7003                  dnl - "compiler support" when nothing is needed
7004                  if test -n "$_DYLD_INFO" && dyldinfo -bind conftest${DLL_SUFFIX} 2> /dev/null | grep "_foo (weak import)" > /dev/null; then
7005                      if test -n "$_CLASSIC_INFO"; then
7006                          ac_cv_weak_dynamic_linking="flat namespace"
7007                      else
7008                          ac_cv_weak_dynamic_linking="compiler support"
7009                      fi
7010                  else
7011                      if test -n "$_DYLD_INFO"; then
7012                          ac_cv_weak_dynamic_linking="dummy library"
7013                      else
7014                          ac_cv_weak_dynamic_linking="flat namespace"
7015                      fi
7016                  fi
7017              else
7018                  AC_ERROR([couldn't compile a simple C file])
7019              fi
7020              rm -rf conftest*])
7021         MOZ_REPLACE_MALLOC_LINKAGE="$ac_cv_weak_dynamic_linking"
7022     fi
7024 AC_SUBST(MOZ_REPLACE_MALLOC)
7025 AC_SUBST(MOZ_REPLACE_MALLOC_LINKAGE)
7027 dnl ========================================================
7028 dnl = Jemalloc build setup
7029 dnl ========================================================
7030 if test -z "$MOZ_MEMORY"; then
7031   if test -n "$MOZ_JEMALLOC3" -a -z "$MOZ_REPLACE_MALLOC"; then
7032     MOZ_NATIVE_JEMALLOC=1
7033     AC_CHECK_FUNCS(mallctl nallocm,,
7034       [MOZ_NATIVE_JEMALLOC=
7035        break])
7036     if test -n "$MOZ_NATIVE_JEMALLOC"; then
7037       MOZ_MEMORY=1
7038       AC_DEFINE(MOZ_MEMORY)
7039       AC_DEFINE(MOZ_JEMALLOC3)
7040       AC_DEFINE(MOZ_NATIVE_JEMALLOC)
7041     fi
7042   fi
7043   case "${target}" in
7044     *-mingw*)
7045       if test -z "$WIN32_REDIST_DIR" -a -z "$MOZ_DEBUG"; then
7046         AC_MSG_WARN([When not building jemalloc, you need to set WIN32_REDIST_DIR to the path to the Visual C++ Redist (usually VCINSTALLDIR\redist\x86\Microsoft.VC80.CRT, for VC++ v8) if you intend to distribute your build.])
7047       fi
7048       ;;
7049   esac
7050 else
7051   AC_DEFINE(MOZ_MEMORY)
7052   if test -n "$MOZ_JEMALLOC3"; then
7053     AC_DEFINE(MOZ_JEMALLOC3)
7054   fi
7055   if test "x$MOZ_DEBUG" = "x1"; then
7056     AC_DEFINE(MOZ_MEMORY_DEBUG)
7057   fi
7058   dnl The generic feature tests that determine how to compute ncpus are long and
7059   dnl complicated.  Therefore, simply define special cpp variables for the
7060   dnl platforms we have special knowledge of.
7061   case "${target}" in
7062   *-darwin*)
7063     AC_DEFINE(MOZ_MEMORY_DARWIN)
7064     ;;
7065   *-*freebsd*)
7066     AC_DEFINE(MOZ_MEMORY_BSD)
7067     ;;
7068   *-android*|*-linuxandroid*)
7069     AC_DEFINE(MOZ_MEMORY_LINUX)
7070     AC_DEFINE(MOZ_MEMORY_ANDROID)
7071     if test -z "$gonkdir"; then
7072       _WRAP_MALLOC=1
7073     else
7074       AC_DEFINE(MOZ_MEMORY_GONK)
7075     fi
7076     MOZ_GLUE_LDFLAGS=
7077     ;;
7078   *-*linux*)
7079     AC_DEFINE(MOZ_MEMORY_LINUX)
7080     ;;
7081   *-netbsd*)
7082     AC_DEFINE(MOZ_MEMORY_BSD)
7083     ;;
7084   *-solaris*)
7085     AC_DEFINE(MOZ_MEMORY_SOLARIS)
7086     ;;
7087   *-mingw*)
7088     AC_DEFINE(MOZ_MEMORY_WINDOWS)
7089     if test -z "$MOZ_DEBUG"; then
7090       WIN32_CRT_LIBS="msvcrt.lib msvcprt.lib"
7091     else
7092       WIN32_CRT_LIBS="msvcrtd.lib msvcprtd.lib"
7093     fi
7094     dnl Look for a broken crtdll.obj
7095     WIN32_CRTDLL_FULLPATH=`lib -nologo -list $WIN32_CRT_LIBS | grep crtdll\\.obj`
7096     lib -NOLOGO -OUT:crtdll.obj $WIN32_CRT_LIBS -EXTRACT:$WIN32_CRTDLL_FULLPATH
7097     if grep -q '__imp__\{0,1\}free' crtdll.obj; then
7098       MOZ_GLUE_LDFLAGS='-LIBPATH:$(DIST)/lib -NODEFAULTLIB:msvcrt -NODEFAULTLIB:msvcrtd -NODEFAULTLIB:msvcprt -NODEFAULTLIB:msvcprtd -DEFAULTLIB:mozcrt'
7099       dnl Also pass this to NSPR/NSS
7100       DLLFLAGS="$DLLFLAGS $MOZ_GLUE_LDFLAGS"
7101     else
7102       DLLFLAGS="$DLLFLAGS -LIBPATH:\$(DIST)/lib -DEFAULTLIB:mozglue"
7103     fi
7104     rm crtdll.obj
7106     export DLLFLAGS
7107     ;;
7108   *)
7109     AC_MSG_ERROR([--enable-jemalloc not supported on ${target}])
7110     ;;
7111   esac
7112 fi # MOZ_MEMORY
7113 AC_SUBST(MOZ_MEMORY)
7114 AC_SUBST(MOZ_JEMALLOC3)
7115 AC_SUBST(MOZ_NATIVE_JEMALLOC)
7116 AC_SUBST(MOZ_GLUE_LDFLAGS)
7117 AC_SUBST(MOZ_GLUE_PROGRAM_LDFLAGS)
7118 AC_SUBST(WIN32_CRT_LIBS)
7119 dnl Need to set this for make because NSS doesn't have configure
7120 AC_SUBST(DLLFLAGS)
7122 dnl We need to wrap dlopen and related functions on Android because we use
7123 dnl our own linker.
7124 if test "$OS_TARGET" = Android; then
7125     WRAP_LDFLAGS="${WRAP_LDFLAGS} -L$_objdir/dist/lib -lmozglue"
7126     WRAP_LDFLAGS="${WRAP_LDFLAGS} -Wl,--wrap=PR_GetEnv,--wrap=PR_SetEnv"
7127     if test "$MOZ_WIDGET_TOOLKIT" = android; then
7128         WRAP_LDFLAGS="${WRAP_LDFLAGS} -Wl,--wrap=getaddrinfo,--wrap=freeaddrinfo,--wrap=gai_strerror"
7129     fi
7130     if test -z "$gonkdir"; then
7131         WRAP_LDFLAGS="${WRAP_LDFLAGS} -Wl,--wrap=fork,--wrap=pthread_atfork,--wrap=raise"
7132         WRAP_LDFLAGS="${WRAP_LDFLAGS} -Wl,--wrap=memccpy,--wrap=memchr,--wrap=memrchr,--wrap=memcmp,--wrap=memcpy,--wrap=memmove,--wrap=memset,--wrap=memmem,--wrap=memswap,--wrap=index,--wrap=strchr,--wrap=strrchr,--wrap=strlen,--wrap=strcmp,--wrap=strcpy,--wrap=strcat,--wrap=strcasecmp,--wrap=strncasecmp,--wrap=strstr,--wrap=strcasestr,--wrap=strtok,--wrap=strtok_r,--wrap=strerror,--wrap=strerror_r,--wrap=strnlen,--wrap=strncat,--wrap=strncmp,--wrap=strncpy,--wrap=strlcat,--wrap=strlcpy,--wrap=strcspn,--wrap=strpbrk,--wrap=strsep,--wrap=strspn,--wrap=strcoll,--wrap=strxfrm"
7133     fi
7134     if test "$MOZ_WIDGET_TOOLKIT" = gonk -a -n "$MOZ_NUWA_PROCESS"; then
7135         WRAP_LDFLAGS="${WRAP_LDFLAGS} -Wl,--wrap=pthread_create,--wrap=epoll_wait,--wrap=poll,--wrap=pthread_cond_timedwait,--wrap=__pthread_cond_timedwait,--wrap=pthread_cond_wait,--wrap=epoll_create,--wrap=epoll_ctl,--wrap=close,--wrap=pthread_key_create,--wrap=pthread_key_delete,--wrap=socketpair,--wrap=pthread_self,--wrap=pthread_mutex_lock,--wrap=pthread_join,--wrap=pipe,--wrap=pipe2,--wrap=tgkill"
7136     fi
7139 dnl ========================================================
7140 dnl = Use malloc wrapper lib
7141 dnl ========================================================
7142 MOZ_ARG_ENABLE_BOOL(wrap-malloc,
7143 [  --enable-wrap-malloc    Wrap malloc calls (gnu linker only)],
7144     _WRAP_MALLOC=1,
7145     _WRAP_MALLOC= )
7147 if test -n "$_WRAP_MALLOC"; then
7148     if test -n "$GNU_CC"; then
7149         WRAP_LDFLAGS="${WRAP_LDFLAGS} -Wl,--wrap=malloc,--wrap=calloc,--wrap=valloc,--wrap=free,--wrap=realloc,--wrap=memalign"
7150         WRAP_LDFLAGS="${WRAP_LDFLAGS} -Wl,--wrap=__builtin_new,--wrap=__builtin_vec_new,--wrap=__builtin_delete,--wrap=__builtin_vec_delete"
7151         WRAP_LDFLAGS="${WRAP_LDFLAGS} -Wl,--wrap=strdup,--wrap=strndup"
7152         WRAP_LDFLAGS="${WRAP_LDFLAGS} -Wl,--wrap=vasprintf,--wrap=asprintf"
7153         WRAP_LDFLAGS="${WRAP_LDFLAGS} -Wl,--wrap=posix_memalign,--wrap=malloc_usable_size"
7154         dnl Wrap operator new and operator delete on Android.
7155         if test "$OS_TARGET" = "Android"; then
7156             WRAP_LDFLAGS="${WRAP_LDFLAGS} -Wl,--wrap=_Znwj,--wrap=_Znaj,--wrap=_ZdlPv,--wrap=_ZdaPv"
7157             dnl Wrap the nothrow variants too.
7158             WRAP_LDFLAGS="${WRAP_LDFLAGS} -Wl,--wrap=_ZnwjRKSt9nothrow_t,--wrap=_ZnajRKSt9nothrow_t,--wrap=_ZdlPvRKSt9nothrow_t,--wrap=_ZdaPvRKSt9nothrow_t"
7159         fi
7160     else
7161         AC_MSG_ERROR([--enable-wrap-malloc is not supported for non-GNU toolchains])
7162     fi
7165 dnl ========================================================
7166 dnl = Location of malloc wrapper lib
7167 dnl ========================================================
7168 MOZ_ARG_WITH_STRING(wrap-malloc,
7169 [  --with-wrap-malloc=DIR  Location of malloc wrapper library],
7170     WRAP_LDFLAGS="${WRAP_LDFLAGS} $withval")
7172 dnl ========================================================
7173 dnl = Use JS Call tracing
7174 dnl ========================================================
7175 MOZ_ARG_ENABLE_BOOL(trace-jscalls,
7176 [  --enable-trace-jscalls  Enable JS call enter/exit callback (default=no)],
7177     MOZ_TRACE_JSCALLS=1,
7178     MOZ_TRACE_JSCALLS= )
7179 if test -n "$MOZ_TRACE_JSCALLS"; then
7180     AC_DEFINE(MOZ_TRACE_JSCALLS)
7183 dnl ========================================================
7184 dnl JS opt-mode assertions and minidump instrumentation
7185 dnl ========================================================
7186 MOZ_ARG_ENABLE_BOOL(js-diagnostics,
7187 [  --enable-js-diagnostics
7188                           Enable JS diagnostic assertions and breakpad data],
7189     JS_CRASH_DIAGNOSTICS=1,
7190     JS_CRASH_DIAGNOSTICS= )
7191 if test -n "$JS_CRASH_DIAGNOSTICS"; then
7192     AC_DEFINE(JS_CRASH_DIAGNOSTICS)
7195 dnl ========================================================
7196 dnl = Use incremental GC
7197 dnl ========================================================
7198 JSGC_INCREMENTAL=1
7199 MOZ_ARG_DISABLE_BOOL(gcincremental,
7200 [  --disable-gcincremental Disable incremental GC],
7201     JSGC_INCREMENTAL= )
7202 if test -n "$JSGC_INCREMENTAL"; then
7203     AC_DEFINE(JSGC_INCREMENTAL)
7206 dnl ========================================================
7207 dnl = Use exact stack rooting for GC
7208 dnl ========================================================
7209 MOZ_ARG_DISABLE_BOOL(exact-rooting,
7210 [  --disable-exact-rooting  Enable use of conservative stack scanning for GC],
7211     JSGC_USE_EXACT_ROOTING= ,
7212     JSGC_USE_EXACT_ROOTING=1 )
7213 if test -n "$JSGC_USE_EXACT_ROOTING"; then
7214     AC_DEFINE(JSGC_USE_EXACT_ROOTING)
7217 dnl ========================================================
7218 dnl = Use generational GC
7219 dnl ========================================================
7220 MOZ_ARG_ENABLE_BOOL(gcgenerational,
7221 [  --enable-gcgenerational Enable generational GC],
7222     JSGC_GENERATIONAL=1,
7223     JSGC_GENERATIONAL= )
7224 if test -n "$JSGC_GENERATIONAL"; then
7225     AC_DEFINE(JSGC_GENERATIONAL)
7228 dnl ========================================================
7229 dnl Zealous JavaScript GC
7230 dnl ========================================================
7231 MOZ_ARG_ENABLE_BOOL(gczeal,
7232 [  --enable-gczeal         Enable zealous JavaScript GCing],
7233     JS_GC_ZEAL=1,
7234     JS_GC_ZEAL= )
7235 if test -n "$JS_GC_ZEAL" -o -n "$MOZ_DEBUG"; then
7236     AC_DEFINE(JS_GC_ZEAL)
7239 dnl ========================================================
7240 dnl = Perform moving GC stack rooting analysis
7241 dnl ========================================================
7242 MOZ_ARG_ENABLE_BOOL(root-analysis,
7243 [  --enable-root-analysis  Enable moving GC stack root analysis],
7244     JSGC_ROOT_ANALYSIS=1,
7245     JSGC_ROOT_ANALYSIS= )
7246 if test -n "$JSGC_ROOT_ANALYSIS"; then
7247     AC_DEFINE(JSGC_ROOT_ANALYSIS)
7250 MOZ_CHECK_CCACHE
7252 dnl ========================================================
7253 dnl = Enable static checking using gcc-dehydra
7254 dnl ========================================================
7256 MOZ_ARG_WITH_STRING(static-checking,
7257 [  --with-static-checking=path/to/gcc_dehydra.so
7258                           Enable static checking of code using GCC-dehydra],
7259     DEHYDRA_PATH=$withval,
7260     DEHYDRA_PATH= )
7262 if test -n "$DEHYDRA_PATH"; then
7263     if test ! -f "$DEHYDRA_PATH"; then
7264         AC_MSG_ERROR([The dehydra plugin is not at the specified path.])
7265     fi
7266     AC_DEFINE(NS_STATIC_CHECKING)
7268 AC_SUBST(DEHYDRA_PATH)
7270 dnl ========================================================
7271 dnl = Enable using the clang plugin to build
7272 dnl ========================================================
7274 MOZ_ARG_ENABLE_BOOL(clang-plugin,
7275 [  --enable-clang-plugin   Enable building with the mozilla clang plugin ],
7276    ENABLE_CLANG_PLUGIN=1,
7277    ENABLE_CLANG_PLUGIN= )
7278 if test -n "$ENABLE_CLANG_PLUGIN"; then
7279     if test -z "$CLANG_CC"; then
7280         AC_MSG_ERROR([Can't use clang plugin without clang.])
7281     fi
7282     AC_DEFINE(MOZ_CLANG_PLUGIN)
7285 AC_SUBST(ENABLE_CLANG_PLUGIN)
7287 dnl ========================================================
7288 dnl = Enable stripping of libs & executables
7289 dnl ========================================================
7290 MOZ_ARG_ENABLE_BOOL(strip,
7291 [  --enable-strip          Enable stripping of libs & executables ],
7292     ENABLE_STRIP=1,
7293     ENABLE_STRIP= )
7295 dnl ========================================================
7296 dnl = Enable stripping of libs & executables when packaging
7297 dnl ========================================================
7298 MOZ_ARG_ENABLE_BOOL(install-strip,
7299 [  --enable-install-strip  Enable stripping of libs & executables when packaging ],
7300     PKG_SKIP_STRIP= ,
7301     PKG_SKIP_STRIP=1)
7303 dnl ========================================================
7304 dnl = --disable-elf-hack
7305 dnl ========================================================
7307 USE_ELF_HACK=1
7308 MOZ_ARG_DISABLE_BOOL(elf-hack,
7309 [  --disable-elf-hack      Disable elf hacks],
7310     [USE_ELF_HACK=],
7311     [USE_ELF_HACK=F # Force enable elf-hack])
7313 # Disable elf hack for profiling because the built in profiler
7314 # doesn't read the segments properly with elf hack. This is
7315 # temporary and should be fixed soon in the profiler.
7316 if test "$MOZ_PROFILING" = 1; then
7317   if test "$USE_ELF_HACK" = F; then
7318     AC_ERROR([--enable-elf-hack is not compatible with --enable-profiling])
7319   fi
7320   USE_ELF_HACK=
7323 # Only enable elfhack where supported
7324 if test "$USE_ELF_HACK" = 1; then
7325     case "${HOST_OS_ARCH},${OS_ARCH}" in
7326     Linux,Linux)
7327         case "${CPU_ARCH}" in
7328         arm | x86 | x86_64)
7329             USE_ELF_HACK=1
7330             ;;
7331         *)
7332             USE_ELF_HACK=
7333             ;;
7334         esac
7335         ;;
7336     *)
7337         USE_ELF_HACK=
7338         ;;
7339     esac
7342 if test -n "$COMPILE_ENVIRONMENT" -a -n "$USE_ELF_HACK"; then
7343     dnl PT_GNU_RELRO segment makes the dynamic linker set a read-only flag on
7344     dnl memory addresses it maps to. The result is that by the time elfhack
7345     dnl kicks in, it is not possible to apply relocations because of that,
7346     dnl thus elfhack effectively skips relocations inside the PT_GNU_RELRO
7347     dnl segment. It makes elfhack mostly useless, so considering the problems
7348     dnl we have we PT_GNU_RELRO (e.g. bug 664366), and until elfhack can deal
7349     dnl with PT_GNU_RELRO segments, it's just simpler to disable elfhack when
7350     dnl the linker creates PT_GNU_RELRO segments. However, when we do want
7351     dnl elfhack enabled, disable PT_GNU_RELRO instead.
7352     AC_CACHE_CHECK([whether linker creates PT_GNU_RELRO segments],
7353         LINK_WITH_PT_GNU_RELRO,
7354         [echo "int main() {return 0;}" > conftest.${ac_ext}
7355          if AC_TRY_COMMAND(${CC-cc} -o conftest${ac_exeext} $LDFLAGS conftest.${ac_ext} $LIBS 1>&2) &&
7356             test -s conftest${ac_exeext}; then
7357             if ${TOOLCHAIN_PREFIX}readelf -l conftest${ac_exeext} | grep GNU_RELRO > /dev/null; then
7358                 LINK_WITH_PT_GNU_RELRO=yes
7359             else
7360                 LINK_WITH_PT_GNU_RELRO=no
7361             fi
7362          else
7363              dnl We really don't expect to get here, but just in case
7364              AC_ERROR([couldn't compile a simple C file])
7365          fi
7366          rm -rf conftest*])
7367     if test "$LINK_WITH_PT_GNU_RELRO" = yes; then
7368         if test "$USE_ELF_HACK" = F; then
7369             AC_MSG_CHECKING([for -z norelro option to ld])
7370             _SAVE_LDFLAGS=$LDFLAGS
7371             LDFLAGS="$LDFLAGS -Wl,-z,norelro"
7372             AC_TRY_LINK(,,AC_MSG_RESULT([yes])
7373                         [NSPR_LDFLAGS="$NSPR_LDFLAGS -Wl,-z,norelro"],
7374                         AC_ERROR([--enable-elf-hack is not compatible with a linker creating a PT_GNU_RELRO segment and that doesn't support the "-z norelro" option.]))
7375             USE_ELF_HACK=1
7376         else
7377             AC_MSG_WARN([Disabling elfhack])
7378             USE_ELF_HACK=
7379         fi
7380     fi
7383 dnl ========================================================
7384 dnl = libstdc++ compatibility hacks
7385 dnl ========================================================
7387 STDCXX_COMPAT=
7388 MOZ_ARG_ENABLE_BOOL(stdcxx-compat,
7389 [  --enable-stdcxx-compat  Enable compatibility with older libstdc++],
7390     STDCXX_COMPAT=1)
7392 if test -n "$STDCXX_COMPAT"; then
7393    eval $(CXX="$CXX" HOST_CXX="$HOST_CXX" $PYTHON -m mozbuild.configure.libstdcxx)
7394    AC_SUBST(MOZ_LIBSTDCXX_TARGET_VERSION)
7395    AC_SUBST(MOZ_LIBSTDCXX_HOST_VERSION)
7398 dnl ========================================================
7399 dnl =
7400 dnl = Profiling and Instrumenting
7401 dnl =
7402 dnl ========================================================
7403 MOZ_ARG_HEADER(Profiling and Instrumenting)
7405 dnl ========================================================
7406 dnl = Enable runtime visual profiling logger
7407 dnl ========================================================
7408 MOZ_ARG_ENABLE_BOOL(visual-event-tracer,
7409 [  --enable-visual-event-tracer   Enable visual event tracer instrumentation],
7410     MOZ_VISUAL_EVENT_TRACER=1,
7411     MOZ_VISUAL_EVENT_TRACER=)
7412 if test -n "$MOZ_VISUAL_EVENT_TRACER"; then
7413     AC_DEFINE(MOZ_VISUAL_EVENT_TRACER)
7416 dnl ========================================================
7417 dnl = Enable TaskTracer
7418 dnl ========================================================
7419 MOZ_ARG_ENABLE_BOOL(tasktracer,
7420 [  --enable-tasktracer       Set compile flags necessary for using TaskTracer],
7421     MOZ_TASK_TRACER=1,
7422     MOZ_TASK_TRACER= )
7423 if test "$MOZ_WIDGET_TOOLKIT" = "gonk" -a -n "$MOZ_TASK_TRACER"; then
7424     AC_DEFINE(MOZ_TASK_TRACER)
7425     AC_SUBST(MOZ_TASK_TRACER)
7428 dnl ========================================================
7429 dnl Turn on reflow counting
7430 dnl ========================================================
7431 MOZ_ARG_ENABLE_BOOL(reflow-perf,
7432 [  --enable-reflow-perf    Enable reflow performance tracing],
7433     MOZ_REFLOW_PERF=1,
7434     MOZ_REFLOW_PERF= )
7435 if test -n "$MOZ_REFLOW_PERF"; then
7436     AC_DEFINE(MOZ_REFLOW_PERF)
7439 dnl ========================================================
7440 dnl = Enable Radio Interface for B2G (Gonk usually)
7441 dnl ========================================================
7442 MOZ_ARG_ENABLE_BOOL(b2g-ril,
7443 [  --enable-b2g-ril      Set compile flags necessary for testing B2G Radio Interface Layer via network sockets ],
7444     MOZ_B2G_RIL=1,
7445     MOZ_B2G_RIL=,
7446     MOZ_B2G_RIL=$_PLATFORM_HAVE_RIL )
7447 if test -n "$MOZ_B2G_RIL"; then
7448     if test -n "$_PLATFORM_HAVE_RIL"; then
7449         AC_DEFINE(MOZ_B2G_RIL)
7450     else
7451         AC_MSG_ERROR([b2g-ril cannot be enabled because target platform doesn't support it.])
7452     fi
7454 AC_SUBST(MOZ_B2G_RIL)
7456 dnl ========================================================
7457 dnl = Enable Radio FM for B2G (Gonk usually)
7458 dnl ========================================================
7459 if test -n "$MOZ_B2G_FM"; then
7460     AC_DEFINE(MOZ_B2G_FM)
7462 AC_SUBST(MOZ_B2G_FM)
7464 dnl ========================================================
7465 dnl = Enable Bluetooth Interface for B2G (Gonk usually)
7466 dnl ========================================================
7467 MOZ_ARG_ENABLE_BOOL(b2g-bt,
7468 [  --enable-b2g-bt      Set compile flags necessary for compiling Bluetooth API for B2G ],
7469     MOZ_B2G_BT=1,
7470     MOZ_B2G_BT= )
7471 if test -n "$MOZ_B2G_BT"; then
7472     AC_DEFINE(MOZ_B2G_BT)
7474 AC_SUBST(MOZ_B2G_BT)
7475 AC_SUBST(MOZ_B2G_BT_BLUEZ)
7476 AC_SUBST(MOZ_B2G_BT_BLUEDROID)
7478 dnl ========================================================
7479 dnl = Enable NFC Interface for B2G (Gonk usually)
7480 dnl ========================================================
7481 MOZ_ARG_ENABLE_BOOL(nfc,
7482 [  --enable-nfc         Set compile flags necessary for compiling NFC API ],
7483     MOZ_NFC=1,
7484     MOZ_NFC= )
7485 if test -n "$MOZ_NFC"; then
7486    AC_DEFINE(MOZ_NFC)
7488 AC_SUBST(MOZ_NFC)
7490 dnl ========================================================
7491 dnl = Enable Pico Speech Synthesis (Gonk usually)
7492 dnl ========================================================
7493 MOZ_ARG_ENABLE_BOOL(synth-pico,
7494 [  --enable-synth-pico  Set compile flags necessary for compiling Pico Web Speech API ],
7495     MOZ_SYNTH_PICO=1,
7496     MOZ_SYNTH_PICO= )
7497 if test -n "$MOZ_SYNTH_PICO"; then
7498     AC_DEFINE(MOZ_SYNTH_PICO)
7500 AC_SUBST(MOZ_SYNTH_PICO)
7502 dnl ========================================================
7503 dnl = Enable Support for Time Manager API
7504 dnl ========================================================
7505 if test -n "$MOZ_TIME_MANAGER"; then
7506     AC_DEFINE(MOZ_TIME_MANAGER)
7508 AC_SUBST(MOZ_TIME_MANAGER)
7510 dnl ========================================================
7511 dnl = Enable Camera Interface for B2G (Gonk usually)
7512 dnl ========================================================
7513 MOZ_ARG_ENABLE_BOOL(b2g-camera,
7514 [  --enable-b2g-camera      Set compile flags necessary for compiling camera API for B2G ],
7515     MOZ_B2G_CAMERA=1,
7516     MOZ_B2G_CAMERA= )
7517 if test -n "$MOZ_B2G_CAMERA"; then
7518    AC_DEFINE(MOZ_B2G_CAMERA)
7520 AC_SUBST(MOZ_B2G_CAMERA)
7522 dnl ========================================================
7523 dnl = Enable Support B2G-specific changes to the NSS
7524 dnl = certificate trust database.
7525 dnl ========================================================
7526 if test -n "$MOZ_B2G_CERTDATA"; then
7527     AC_DEFINE(MOZ_B2G_CERTDATA)
7529 AC_SUBST(MOZ_B2G_CERTDATA)
7531 dnl ========================================================
7532 dnl = Enable Support for Payment API
7533 dnl ========================================================
7534 if test -n "$MOZ_PAY"; then
7535     AC_DEFINE(MOZ_PAY)
7537 AC_SUBST(MOZ_PAY)
7539 dnl ========================================================
7540 dnl = Enable Browser Support for Activities
7541 dnl ========================================================
7542 if test -n "$MOZ_ACTIVITIES"; then
7543     AC_DEFINE(MOZ_ACTIVITIES)
7545 AC_SUBST(MOZ_ACTIVITIES)
7547 dnl ========================================================
7548 dnl = Enable Support for AudioChannelManager API
7549 dnl ========================================================
7550 if test -n "$MOZ_AUDIO_CHANNEL_MANAGER"; then
7551     AC_DEFINE(MOZ_AUDIO_CHANNEL_MANAGER)
7553 AC_SUBST(MOZ_AUDIO_CHANNEL_MANAGER)
7555 dnl ========================================================
7556 dnl = Enable Support for Firefox Accounts (services/fxaccounts)
7557 dnl ========================================================
7558 if test -n "$MOZ_SERVICES_FXACCOUNTS"; then
7559     AC_DEFINE(MOZ_SERVICES_FXACCOUNTS)
7561 AC_SUBST(MOZ_SERVICES_FXACCOUNTS)
7563 dnl ========================================================
7564 dnl = Support for demangling undefined symbols
7565 dnl ========================================================
7566 if test -z "$SKIP_LIBRARY_CHECKS"; then
7567     AC_LANG_SAVE
7568     AC_LANG_CPLUSPLUS
7569     AC_CHECK_FUNCS(__cxa_demangle, HAVE_DEMANGLE=1, HAVE_DEMANGLE=)
7570     AC_LANG_RESTORE
7573 # Demangle only for debug or trace-malloc or DMD builds
7574 MOZ_DEMANGLE_SYMBOLS=
7575 if test "$HAVE_DEMANGLE" && test "$MOZ_DEBUG" -o "$NS_TRACE_MALLOC" -o "$MOZ_DMD"; then
7576     MOZ_DEMANGLE_SYMBOLS=1
7577     AC_DEFINE(MOZ_DEMANGLE_SYMBOLS)
7579 AC_SUBST(MOZ_DEMANGLE_SYMBOLS)
7581 dnl ========================================================
7582 dnl = Support for gcc stack unwinding (from gcc 3.3)
7583 dnl ========================================================
7584 if test -z "$SKIP_LIBRARY_CHECKS"; then
7585     AC_LANG_SAVE
7586     AC_LANG_CPLUSPLUS
7587     MOZ_CHECK_HEADER(unwind.h, AC_CHECK_FUNCS(_Unwind_Backtrace))
7588     AC_LANG_RESTORE
7591 dnl ========================================================
7592 dnl JIT observers
7593 dnl ========================================================
7595 MOZ_ARG_WITH_STRING(jitreport-granularity,
7596 [  --jitreport-granularity=N
7597                            Default granularity at which to report JIT code
7598                            to external tools
7599                              0 - no info
7600                              1 - code ranges for whole functions only
7601                              2 - per-line information
7602                              3 - per-op information],
7603   JITREPORT_GRANULARITY=$withval,
7604   JITREPORT_GRANULARITY=3)
7606 AC_DEFINE_UNQUOTED(JS_DEFAULT_JITREPORT_GRANULARITY, $JITREPORT_GRANULARITY)
7608 dnl ========================================================
7609 dnl =
7610 dnl = Misc. Options
7611 dnl =
7612 dnl ========================================================
7613 MOZ_ARG_HEADER(Misc. Options)
7615 dnl ========================================================
7616 dnl update xterm title
7617 dnl ========================================================
7618 MOZ_ARG_ENABLE_BOOL(xterm-updates,
7619 [  --enable-xterm-updates  Update XTERM titles with current command.],
7620     MOZ_UPDATE_XTERM=1,
7621     MOZ_UPDATE_XTERM= )
7623 dnl =========================================================
7624 dnl = Chrome format
7625 dnl =========================================================
7626 MOZ_ARG_ENABLE_STRING([chrome-format],
7627 [  --enable-chrome-format=jar|flat|omni
7628                           Select FORMAT of chrome files during packaging],
7629     MOZ_CHROME_FILE_FORMAT=`echo $enableval | tr A-Z a-z`)
7631 if test -z "$MOZ_CHROME_FILE_FORMAT"; then
7632     MOZ_CHROME_FILE_FORMAT=jar
7635 if test "$MOZ_CHROME_FILE_FORMAT" = "symlink"; then
7636     AC_MSG_ERROR([--enable-chrome-format=symlink has been deprecated. It is now used by default in $DIST/bin on platforms that support it])
7639 if test "$MOZ_CHROME_FILE_FORMAT" != "jar" &&
7640     test "$MOZ_CHROME_FILE_FORMAT" != "flat" &&
7641     test "$MOZ_CHROME_FILE_FORMAT" != "omni"; then
7642     AC_MSG_ERROR([--enable-chrome-format must be set to either jar, flat, or omni])
7645 dnl =========================================================
7646 dnl Omnijar packaging (bug 552121)
7647 dnl =========================================================
7648 dnl Omnijar packaging is compatible with flat packaging.
7649 dnl In unpackaged builds, omnijar looks for files as if
7650 dnl things were flat packaged. After packaging, all files
7651 dnl are loaded from a single jar. MOZ_CHROME_FILE_FORMAT
7652 dnl is set to flat since putting files into jars is only
7653 dnl done during packaging with omnijar.
7654 if test "$MOZ_CHROME_FILE_FORMAT" = "omni"; then
7655     MOZ_OMNIJAR=1
7656     AC_DEFINE(MOZ_OMNIJAR)
7658 MOZ_PACKAGER_FORMAT="$MOZ_CHROME_FILE_FORMAT"
7659 if test "$OS_ARCH" = "WINNT" -o "$MOZ_WIDGET_TOOLKIT" = "android"; then
7660     MOZ_CHROME_FILE_FORMAT=flat
7661 else
7662     MOZ_CHROME_FILE_FORMAT=symlink
7665 if test "$MOZ_WIDGET_TOOLKIT" = "android"; then
7666     dnl Fennec's static resources live in the assets/ folder of the
7667     dnl APK.  Adding a path to the name here works because we only
7668     dnl have one omnijar file in the final package (which is not the
7669     dnl case on desktop), and necessitates some contortions during
7670     dnl packaging so that the resources in the omnijar are considered
7671     dnl as rooted at / and not as rooted at assets/ (which again is
7672     dnl not the case on desktop: there are omnijars rooted at webrtc/,
7673     dnl etc). packager.mk handles changing the rooting of the single
7674     dnl omnijar.
7675     OMNIJAR_NAME=assets/omni.ja
7676 else
7677     OMNIJAR_NAME=omni.ja
7680 AC_SUBST(OMNIJAR_NAME)
7681 AC_SUBST(MOZ_OMNIJAR)
7682 AC_SUBST(MOZ_PACKAGER_FORMAT)
7684 dnl ========================================================
7685 dnl = Define default location for MOZILLA_FIVE_HOME
7686 dnl ========================================================
7687 MOZ_ARG_WITH_STRING(default-mozilla-five-home,
7688 [  --with-default-mozilla-five-home
7689                           Set the default value for MOZILLA_FIVE_HOME],
7690 [ val=`echo $withval`
7691   AC_DEFINE_UNQUOTED(MOZ_DEFAULT_MOZILLA_FIVE_HOME,"$val") ])
7693 dnl ========================================================
7694 dnl = Location of the mozilla user directory (default is ~/.mozilla).],
7695 dnl ========================================================
7696 MOZ_ARG_WITH_STRING(user-appdir,
7697 [  --with-user-appdir=DIR  Set user-specific appdir (default=.mozilla)],
7698 [ val=`echo $withval`
7699 if echo "$val" | grep "\/" >/dev/null; then
7700     AC_MSG_ERROR("Homedir must be single relative path.")
7701 else
7702     MOZ_USER_DIR="$val"
7703 fi])
7705 AC_DEFINE_UNQUOTED(MOZ_USER_DIR,"$MOZ_USER_DIR")
7707 dnl ========================================================
7708 dnl = Doxygen configuration
7709 dnl ========================================================
7710 dnl Use commas to specify multiple dirs to this arg
7711 MOZ_DOC_INPUT_DIRS='./dist/include ./dist/idl'
7712 MOZ_ARG_WITH_STRING(doc-input-dirs,
7713 [  --with-doc-input-dirs=DIRS
7714                           Header/idl dirs to create docs from],
7715 [ MOZ_DOC_INPUT_DIRS=`echo "$withval" | sed "s/,/ /g"` ] )
7716 AC_SUBST(MOZ_DOC_INPUT_DIRS)
7718 dnl Use commas to specify multiple dirs to this arg
7719 MOZ_DOC_INCLUDE_DIRS='./dist/include ./dist/include/nspr'
7720 MOZ_ARG_WITH_STRING(doc-include-dirs,
7721 [  --with-doc-include-dirs=DIRS
7722                           Include dirs to preprocess doc headers],
7723 [ MOZ_DOC_INCLUDE_DIRS=`echo "$withval" | sed "s/,/ /g"` ] )
7724 AC_SUBST(MOZ_DOC_INCLUDE_DIRS)
7726 MOZ_DOC_OUTPUT_DIR='./dist/docs'
7727 MOZ_ARG_WITH_STRING(doc-output-dir,
7728 [  --with-doc-output-dir=DIR
7729                           Dir to generate docs into],
7730 [ MOZ_DOC_OUTPUT_DIR=$withval ] )
7731 AC_SUBST(MOZ_DOC_OUTPUT_DIR)
7733 if test -z "$SKIP_COMPILER_CHECKS"; then
7734 dnl ========================================================
7735 dnl =
7736 dnl = Compiler Options
7737 dnl =
7738 dnl ========================================================
7739 MOZ_ARG_HEADER(Compiler Options)
7741 dnl ========================================================
7742 dnl Check for gcc -pipe support
7743 dnl ========================================================
7744 AC_MSG_CHECKING([for -pipe support])
7745 if test -n "$GNU_CC" -a -n "$GNU_CXX"; then
7746     dnl Any gcc that supports firefox supports -pipe.
7747     CFLAGS="$CFLAGS -pipe"
7748     CXXFLAGS="$CXXFLAGS -pipe"
7749     AC_MSG_RESULT([yes])
7750 else
7751     AC_MSG_RESULT([no])
7754 dnl ========================================================
7755 dnl Profile guided optimization (gcc checks)
7756 dnl ========================================================
7757 dnl Test for profiling options
7758 dnl Under gcc 3.4+, use -fprofile-generate/-fprofile-use
7760 _SAVE_CFLAGS="$CFLAGS"
7761 CFLAGS="$CFLAGS -fprofile-generate -fprofile-correction"
7763 AC_MSG_CHECKING([whether C compiler supports -fprofile-generate])
7764 AC_TRY_COMPILE([], [return 0;],
7765                [ PROFILE_GEN_CFLAGS="-fprofile-generate"
7766                  result="yes" ], result="no")
7767 AC_MSG_RESULT([$result])
7769 if test $result = "yes"; then
7770   PROFILE_GEN_LDFLAGS="-fprofile-generate"
7771   PROFILE_USE_CFLAGS="-fprofile-use -fprofile-correction -Wcoverage-mismatch"
7772   PROFILE_USE_LDFLAGS="-fprofile-use"
7775 CFLAGS="$_SAVE_CFLAGS"
7777 if test -n "$INTEL_CC"; then
7778   PROFILE_GEN_CFLAGS="-prof-gen -prof-dir ."
7779   PROFILE_GEN_LDFLAGS=
7780   PROFILE_USE_CFLAGS="-prof-use -prof-dir ."
7781   PROFILE_USE_LDFLAGS=
7784 dnl Sun Studio on Solaris
7785 if test "$SOLARIS_SUNPRO_CC"; then
7786   PROFILE_GEN_CFLAGS="-xprofile=collect:$_objdir/$enable_application"
7787   PROFILE_GEN_LDFLAGS="-xprofile=collect:$_objdir/$enable_application"
7788   PROFILE_USE_CFLAGS="-xprofile=use:$_objdir/$enable_application"
7789   PROFILE_USE_LDFLAGS="-xprofile=use:$_objdir/$enable_application"
7792 AC_SUBST(PROFILE_GEN_CFLAGS)
7793 AC_SUBST(PROFILE_GEN_LDFLAGS)
7794 AC_SUBST(PROFILE_USE_CFLAGS)
7795 AC_SUBST(PROFILE_USE_LDFLAGS)
7797 AC_LANG_CPLUSPLUS
7799 dnl ========================================================
7800 dnl Autoconf test for gcc 2.7.2.x (and maybe others?) so that we don't
7801 dnl provide non-const forms of the operator== for comparing nsCOMPtrs to
7802 dnl raw pointers in nsCOMPtr.h.  (VC++ has the same bug.)
7803 dnl ========================================================
7804 _SAVE_CXXFLAGS=$CXXFLAGS
7805 CXXFLAGS="$CXXFLAGS ${_WARNINGS_CXXFLAGS}"
7806 AC_CACHE_CHECK(for correct overload resolution with const and templates,
7807     ac_nscap_nonconst_opeq_bug,
7808     [AC_TRY_COMPILE([
7809                       template <class T>
7810                       class Pointer
7811                         {
7812                         public:
7813                           T* myPtr;
7814                         };
7816                       template <class T, class U>
7817                       int operator==(const Pointer<T>& rhs, U* lhs)
7818                         {
7819                           return rhs.myPtr == lhs;
7820                         }
7822                       template <class T, class U>
7823                       int operator==(const Pointer<T>& rhs, const U* lhs)
7824                         {
7825                           return rhs.myPtr == lhs;
7826                         }
7827                     ],
7828                     [
7829                       Pointer<int> foo;
7830                       const int* bar;
7831                       return foo == bar;
7832                     ],
7833                     ac_nscap_nonconst_opeq_bug="no",
7834                     ac_nscap_nonconst_opeq_bug="yes")])
7835 CXXFLAGS="$_SAVE_CXXFLAGS"
7837 if test "$ac_nscap_nonconst_opeq_bug" = "yes" ; then
7838     AC_DEFINE(NSCAP_DONT_PROVIDE_NONCONST_OPEQ)
7840 fi # ! SKIP_COMPILER_CHECKS
7842 AC_DEFINE(CPP_THROW_NEW, [throw()])
7843 AC_LANG_C
7845 if test "$COMPILE_ENVIRONMENT"; then
7846 MOZ_EXPAND_LIBS
7847 fi # COMPILE_ENVIRONMENT
7849 dnl ========================================================
7850 dnl =
7851 dnl = Build depencency options
7852 dnl =
7853 dnl ========================================================
7854 MOZ_ARG_HEADER(Build dependencies)
7856 if test "$GNU_CC" -a "$GNU_CXX"; then
7857   _DEPEND_CFLAGS='-MD -MP -MF $(MDDEPDIR)/$(@F).pp'
7858 dnl Sun Studio on Solaris use -xM instead of -MD, see config/rules.mk
7859 elif test "$SOLARIS_SUNPRO_CC"; then
7860   _DEPEND_CFLAGS=
7861 else
7862   dnl Don't override this for MSVC
7863   if test -z "$_WIN32_MSVC"; then
7864     _USE_CPP_INCLUDE_FLAG=
7865     _DEFINES_CFLAGS='$(ACDEFINES) -D_MOZILLA_CONFIG_H_ -DMOZILLA_CLIENT'
7866     _DEFINES_CXXFLAGS='$(ACDEFINES) -D_MOZILLA_CONFIG_H_ -DMOZILLA_CLIENT'
7867   else
7868     echo '#include <stdio.h>' > dummy-hello.c
7869     changequote(,)
7870     dnl This output is localized, split at the first double space or colon and space.
7871     _CL_PREFIX_REGEX="^\([^:]*:.*[ :] \)\(.*stdio.h\)$"
7872     CL_INCLUDES_PREFIX=`${CC} -showIncludes -c -Fonul dummy-hello.c 2>&1 | sed -ne 's/'"$_CL_PREFIX_REGEX"'/\1/p'`
7873     _CL_STDIO_PATH=`${CC} -showIncludes -c -Fonul dummy-hello.c 2>&1 | sed -ne 's/'"$_CL_PREFIX_REGEX"'/\2/p'`
7874     changequote([,])
7875     if ! test -e "$_CL_STDIO_PATH"; then
7876         AC_MSG_ERROR([Unable to parse cl -showIncludes prefix. This compiler's locale has an unsupported formatting.])
7877     fi
7878     if test -z "$CL_INCLUDES_PREFIX"; then
7879         AC_MSG_ERROR([Cannot find cl -showIncludes prefix.])
7880     fi
7881     AC_SUBST(CL_INCLUDES_PREFIX)
7882     rm -f dummy-hello.c
7883   fi
7886 dnl Make sure that the build system can handle non-ASCII characters
7887 dnl in environment variables to prevent it from breking silently on
7888 dnl non-English systems.
7889 NONASCII=$'\241\241'
7890 AC_SUBST(NONASCII)
7892 dnl ========================================================
7893 dnl =
7894 dnl = Static Build Options
7895 dnl =
7896 dnl ========================================================
7897 MOZ_ARG_HEADER(Static build options)
7899 AC_SUBST(LIBXUL_LIBS)
7900 XPCOM_LIBS="$LIBXUL_LIBS"
7902 if test "$OS_ARCH" = "WINNT"; then
7903   GKMEDIAS_SHARED_LIBRARY=1
7904   AC_DEFINE(GKMEDIAS_SHARED_LIBRARY)
7906 AC_SUBST(GKMEDIAS_SHARED_LIBRARY)
7908 if test -z "$MOZ_NATIVE_ZLIB"; then
7909 if test -n "$JS_SHARED_LIBRARY" -o "$GKMEDIAS_SHARED_LIBRARY"; then
7910   ZLIB_IN_MOZGLUE=1
7911   AC_DEFINE(ZLIB_IN_MOZGLUE)
7915 AC_SUBST(ZLIB_IN_MOZGLUE)
7917 dnl ========================================================
7918 dnl =
7919 dnl = Standalone module options
7920 dnl =
7921 dnl ========================================================
7922 MOZ_ARG_HEADER(Standalone module options (Not for building Mozilla))
7924 dnl Check for GLib.
7925 dnl ========================================================
7927 if test -z "$SKIP_PATH_CHECKS"; then
7928 if test -z "${GLIB_CFLAGS}" -o -z "${GLIB_LIBS}" ; then
7929     if test "$MOZ_ENABLE_GTK" ; then
7930         PKG_CHECK_MODULES(GLIB, glib-2.0 >= 1.3.7 gobject-2.0)
7931     fi
7935 if test -z "${GLIB_GMODULE_LIBS}" \
7936    -a -n "${GLIB_CONFIG}"\
7937     -a "${GLIB_CONFIG}" != no\
7938 ; then
7939     GLIB_GMODULE_LIBS=`$GLIB_CONFIG gmodule --libs`
7942 AC_SUBST(GLIB_CFLAGS)
7943 AC_SUBST(GLIB_LIBS)
7944 AC_SUBST(GLIB_GMODULE_LIBS)
7946 dnl ========================================================
7947 dnl Graphics checks.
7948 dnl ========================================================
7950 if test "${OS_TARGET}" = "WINNT"; then
7951   if $PERL -e "exit($MOZ_WINSDK_MAXVER < 0x06020000)"; then
7952     MOZ_ENABLE_DIRECT2D1_1=1
7953     AC_SUBST(MOZ_ENABLE_DIRECT2D1_1)
7954   fi
7957 if test "${OS_TARGET}" = "WINNT" -o \
7958         "${OS_ARCH}" = "Darwin" -o \
7959         "${MOZ_WIDGET_TOOLKIT}" = "android" -o \
7960         "${MOZ_WIDGET_TOOLKIT}" = "gonk" -o \
7961         "${MOZ_WIDGET_TOOLKIT}" = "gtk2" -o \
7962         "${MOZ_WIDGET_TOOLKIT}" = "gtk3"; then
7963     case "${target_cpu}" in
7964     i*86*|x86_64|arm)
7965         MOZ_ENABLE_SKIA=1
7966         ;;
7967     *)
7968         MOZ_ENABLE_SKIA=
7969         ;;
7970     esac
7971 else
7972 MOZ_ENABLE_SKIA=
7975 MOZ_ARG_ENABLE_BOOL(skia,
7976 [  --enable-skia   Enable use of Skia],
7977 MOZ_ENABLE_SKIA=1,
7978 MOZ_ENABLE_SKIA=)
7980 if test "$USE_FC_FREETYPE"; then
7981     if test "$COMPILE_ENVIRONMENT"; then
7982         dnl ========================================================
7983         dnl = Check for freetype2 and its functionality
7984         dnl ========================================================
7985         PKG_CHECK_MODULES(FT2, freetype2 >= 6.1.0, _HAVE_FREETYPE2=1, _HAVE_FREETYPE2=)
7987         if test "$_HAVE_FREETYPE2"; then
7988             _SAVE_LIBS="$LIBS"
7989             _SAVE_CFLAGS="$CFLAGS"
7990             LIBS="$LIBS $FT2_LIBS"
7991             CFLAGS="$CFLAGS $FT2_CFLAGS"
7993             AC_CACHE_CHECK(for FT_Bitmap_Size.y_ppem,
7994                 ac_cv_member_FT_Bitmap_Size_y_ppem,
7995                 [AC_TRY_COMPILE([#include <ft2build.h>
7996                                  #include FT_FREETYPE_H],
7997                                 [FT_Bitmap_Size s;
7998                                  if (sizeof s.y_ppem) return 0;
7999                                  return 1],
8000                                 ac_cv_member_FT_Bitmap_Size_y_ppem=yes,
8001                                 ac_cv_member_FT_Bitmap_Size_y_ppem=no)])
8002             if test "$ac_cv_member_FT_Bitmap_Size_y_ppem" = yes; then
8003                 HAVE_FT_BITMAP_SIZE_Y_PPEM=1
8004             else
8005                 HAVE_FT_BITMAP_SIZE_Y_PPEM=0
8006             fi
8007             AC_DEFINE_UNQUOTED(HAVE_FT_BITMAP_SIZE_Y_PPEM,
8008                                $HAVE_FT_BITMAP_SIZE_Y_PPEM,
8009                                [FT_Bitmap_Size structure includes y_ppem field])
8011             AC_CHECK_FUNCS(FT_GlyphSlot_Embolden FT_Load_Sfnt_Table)
8013             LIBS="$_SAVE_LIBS"
8014             CFLAGS="$_SAVE_CFLAGS"
8015         fi
8017         _SAVE_CPPFLAGS="$CPPFLAGS"
8018         CPPFLAGS="$CPPFLAGS $FT2_CFLAGS $XCFLAGS"
8019         MOZ_CHECK_HEADERS([fontconfig/fcfreetype.h], ,
8020             [AC_MSG_ERROR(Can't find header fontconfig/fcfreetype.h.)], [#include <fontconfig/fontconfig.h>])
8021         CPPFLAGS="$_SAVE_CPPFLAGS"
8022     else
8023         AC_DEFINE(HAVE_FONTCONFIG_FCFREETYPE_H)
8024     fi
8026     PKG_CHECK_MODULES(_FONTCONFIG, fontconfig,
8027     [
8028         if test "$MOZ_PANGO"; then
8029             MOZ_PANGO_CFLAGS="$MOZ_PANGO_CFLAGS $_FONTCONFIG_CFLAGS"
8030             MOZ_PANGO_LIBS="$MOZ_PANGO_LIBS $_FONTCONFIG_LIBS"
8031         else
8032             FT2_CFLAGS="$FT2_CFLAGS $_FONTCONFIG_CFLAGS"
8033             FT2_LIBS="$FT2_LIBS $_FONTCONFIG_LIBS"
8034         fi
8035     ])
8038 dnl ========================================================
8039 dnl Check for pixman and cairo
8040 dnl ========================================================
8042 if test "$MOZ_WIDGET_TOOLKIT" = "gtk3" ; then
8043   # cairo-gtk3 can be build with system-cairo only
8044   MOZ_TREE_CAIRO=
8045 else
8046   MOZ_TREE_CAIRO=1
8049 MOZ_ARG_ENABLE_BOOL(system-cairo,
8050 [  --enable-system-cairo   Use system cairo (located with pkgconfig)],
8051 MOZ_TREE_CAIRO=,
8052 MOZ_TREE_CAIRO=1 )
8054 MOZ_TREE_PIXMAN=1
8055 MOZ_ARG_ENABLE_BOOL(system-pixman,
8056 [ --enable-system-pixman Use system pixman (located with pkgconfig)],
8057 MOZ_TREE_PIXMAN=,
8058 MOZ_TREE_PIXMAN=force,
8059 MOZ_TREE_PIXMAN=1 )
8061 # System cairo depends on system pixman
8062 if test "$MOZ_TREE_PIXMAN" = "force"; then
8063     if test -z "$MOZ_TREE_CAIRO"; then
8064         AC_MSG_ERROR([--disable-system-pixman is incompatible with --enable-system-cairo.])
8065     else
8066         MOZ_TREE_PIXMAN=1
8067     fi
8068 elif test -z "$MOZ_TREE_CAIRO"; then
8069     MOZ_TREE_PIXMAN=
8072 if test "$MOZ_TREE_PIXMAN"; then
8073     AC_DEFINE(MOZ_TREE_PIXMAN)
8074     MOZ_PIXMAN_CFLAGS=""
8075     MOZ_PIXMAN_LIBS='$(call EXPAND_LIBNAME_PATH,mozlibpixman,$(DEPTH)/gfx/cairo/libpixman/src)'
8076 else
8077     PKG_CHECK_MODULES(PIXMAN, pixman-1 >= 0.19.2)
8078     MOZ_PIXMAN_CFLAGS="$PIXMAN_CFLAGS"
8079     MOZ_PIXMAN_LIBS="$PIXMAN_LIBS"
8081 AC_SUBST(MOZ_PIXMAN_CFLAGS)
8082 AC_SUBST(MOZ_PIXMAN_LIBS)
8084 # Check for headers defining standard int types.
8085 if test -n "$COMPILE_ENVIRONMENT"; then
8086     MOZ_CHECK_HEADERS(stdint.h inttypes.h sys/int_types.h)
8089 if test "$MOZ_TREE_CAIRO"; then
8090     MOZ_CAIRO_CFLAGS='-I$(LIBXUL_DIST)/include/cairo'
8091     AC_DEFINE(MOZ_TREE_CAIRO)
8093     if test "$OS_ARCH" = "WINNT"; then
8094         # For now we assume that we will have a uint64_t available through
8095         # one of the above headers or mozstdint.h.
8096         AC_DEFINE(HAVE_UINT64_T)
8097     fi
8099     # Define macros for cairo-features.h
8100     TEE_SURFACE_FEATURE="#define CAIRO_HAS_TEE_SURFACE 1"
8101     if test "$MOZ_X11"; then
8102         XLIB_SURFACE_FEATURE="#define CAIRO_HAS_XLIB_SURFACE 1"
8103         XLIB_XRENDER_SURFACE_FEATURE="#define CAIRO_HAS_XLIB_XRENDER_SURFACE 1"
8104         PS_SURFACE_FEATURE="#define CAIRO_HAS_PS_SURFACE 1"
8105         FT_FONT_FEATURE="#define CAIRO_HAS_FT_FONT 1"
8106         MOZ_ENABLE_CAIRO_FT=1
8107         CAIRO_FT_CFLAGS="$FT2_CFLAGS"
8108     fi
8109     case "$MOZ_WIDGET_TOOLKIT" in
8110       qt)
8111         QT_SURFACE_FEATURE="#define CAIRO_HAS_QT_SURFACE 1"
8112         ;;
8113       cocoa | uikit)
8114         QUARTZ_SURFACE_FEATURE="#define CAIRO_HAS_QUARTZ_SURFACE 1"
8115         QUARTZ_IMAGE_SURFACE_FEATURE="#define CAIRO_HAS_QUARTZ_IMAGE_SURFACE 1"
8116         QUARTZ_FONT_FEATURE="#define CAIRO_HAS_QUARTZ_FONT 1"
8117         ;;
8118       windows)
8119         WIN32_SURFACE_FEATURE="#define CAIRO_HAS_WIN32_SURFACE 1"
8120         WIN32_FONT_FEATURE="#define CAIRO_HAS_WIN32_FONT 1"
8121         if test "$MOZ_WINSDK_TARGETVER" -ge "06010000"; then
8122             WIN32_DWRITE_FONT_FEATURE="#define CAIRO_HAS_DWRITE_FONT 1"
8123             WIN32_D2D_SURFACE_FEATURE="#define CAIRO_HAS_D2D_SURFACE 1"
8124             MOZ_ENABLE_D2D_SURFACE=1
8125             MOZ_ENABLE_DWRITE_FONT=1
8126         else
8127             WIN32_DWRITE_FONT_FEATURE=
8128             WIN32_D2D_SURFACE_FEATURE=
8129         fi
8131         MOZ_CHECK_HEADER(d3d9.h, MOZ_ENABLE_D3D9_LAYER=1)
8133         dnl D3D10 Layers depend on D2D Surfaces.
8134         if test -n "$WIN32_D2D_SURFACE_FEATURE"; then
8135           MOZ_CHECK_HEADER(d3d10.h, MOZ_ENABLE_D3D10_LAYER=1)
8136         fi
8137         ;;
8138       gtk3)
8139         AC_MSG_ERROR([cairo-gtk3 toolkit is incompatible with in-tree cairo. Please add --enable-system-cairo to your build config.])
8140         ;;
8141     esac
8142     if test "$USE_FC_FREETYPE"; then
8143         FC_FONT_FEATURE="#define CAIRO_HAS_FC_FONT 1"
8144     fi
8145     AC_SUBST(MOZ_ENABLE_CAIRO_FT)
8146     AC_SUBST(MOZ_ENABLE_DWRITE_FONT)
8147     AC_SUBST(MOZ_ENABLE_D2D_SURFACE)
8148     AC_SUBST(MOZ_ENABLE_D3D9_LAYER)
8149     AC_SUBST(MOZ_ENABLE_D3D10_LAYER)
8150     AC_SUBST(CAIRO_FT_CFLAGS)
8152     AC_SUBST(PS_SURFACE_FEATURE)
8153     AC_SUBST(PDF_SURFACE_FEATURE)
8154     AC_SUBST(SVG_SURFACE_FEATURE)
8155     AC_SUBST(XLIB_SURFACE_FEATURE)
8156     AC_SUBST(XLIB_XRENDER_SURFACE_FEATURE)
8157     AC_SUBST(QUARTZ_SURFACE_FEATURE)
8158     AC_SUBST(QUARTZ_IMAGE_SURFACE_FEATURE)
8159     AC_SUBST(WIN32_SURFACE_FEATURE)
8160     AC_SUBST(OS2_SURFACE_FEATURE)
8161     AC_SUBST(DIRECTFB_SURFACE_FEATURE)
8162     AC_SUBST(FT_FONT_FEATURE)
8163     AC_SUBST(FC_FONT_FEATURE)
8164     AC_SUBST(WIN32_FONT_FEATURE)
8165     AC_SUBST(WIN32_DWRITE_FONT_FEATURE)
8166     AC_SUBST(WIN32_D2D_SURFACE_FEATURE)
8167     AC_SUBST(QUARTZ_FONT_FEATURE)
8168     AC_SUBST(PNG_FUNCTIONS_FEATURE)
8169     AC_SUBST(QT_SURFACE_FEATURE)
8170     AC_SUBST(TEE_SURFACE_FEATURE)
8172     MOZ_CAIRO_OSLIBS='${CAIRO_FT_OSLIBS}'
8174     if test "$MOZ_X11"; then
8175         MOZ_CAIRO_OSLIBS="$MOZ_CAIRO_OSLIBS $XLDFLAGS -lXrender"
8176     fi
8178     CAIRO_FEATURES_H=gfx/cairo/cairo/src/cairo-features.h
8179 else
8180     PKG_CHECK_MODULES(CAIRO, cairo >= $CAIRO_VERSION)
8181     MOZ_CAIRO_CFLAGS="$CAIRO_CFLAGS"
8182     MOZ_CAIRO_LIBS="$CAIRO_LIBS"
8183     PKG_CHECK_MODULES(CAIRO_TEE, cairo-tee >= $CAIRO_VERSION)
8184     if test "$MOZ_X11"; then
8185         PKG_CHECK_MODULES(CAIRO_XRENDER, cairo-xlib-xrender >= $CAIRO_VERSION)
8186         MOZ_CAIRO_LIBS="$MOZ_CAIRO_LIBS $XLDFLAGS $CAIRO_XRENDER_LIBS"
8187         MOZ_CAIRO_OSLIBS="$MOZ_CAIRO_LIBS"
8188         MOZ_CAIRO_CFLAGS="$MOZ_CAIRO_CFLAGS $CAIRO_XRENDER_CFLAGS"
8189     fi
8192 AC_SUBST(MOZ_TREE_CAIRO)
8193 AC_SUBST(MOZ_CAIRO_CFLAGS)
8194 AC_SUBST(MOZ_CAIRO_LIBS)
8195 AC_SUBST(MOZ_CAIRO_OSLIBS)
8196 AC_SUBST(MOZ_TREE_PIXMAN)
8198 dnl ========================================================
8199 dnl Skia
8200 dnl ========================================================
8201 if test "$MOZ_ENABLE_SKIA"; then
8202   AC_DEFINE(MOZ_ENABLE_SKIA)
8203   AC_DEFINE(USE_SKIA)
8204   if test "${MOZ_WIDGET_TOOLKIT}" = "android" -o x"$MOZ_WIDGET_TOOLKIT" = x"gonk"; then
8205     AC_DEFINE(SK_BUILD_FOR_ANDROID_NDK)
8206   fi
8208   if test "${CPU_ARCH}" != "ppc" -a "${CPU_ARCH}" != "ppc64" -a "${CPU_ARCH}" != "sparc" ; then
8209     MOZ_ENABLE_SKIA_GPU=1
8210     AC_DEFINE(USE_SKIA_GPU)
8211     AC_SUBST(MOZ_ENABLE_SKIA_GPU)
8212   fi
8214 AC_SUBST(MOZ_ENABLE_SKIA)
8216 dnl ========================================================
8217 dnl disable xul
8218 dnl ========================================================
8219 MOZ_ARG_DISABLE_BOOL(xul,
8220 [  --disable-xul           Disable XUL],
8221     MOZ_XUL= )
8222 if test "$MOZ_XUL"; then
8223   AC_DEFINE(MOZ_XUL)
8224 else
8225   dnl remove extensions that require XUL
8226   MOZ_EXTENSIONS=`echo $MOZ_EXTENSIONS | sed -e 's/inspector//' -e 's/venkman//' -e 's/irc//' -e 's/tasks//'`
8229 AC_SUBST(MOZ_XUL)
8231 dnl ========================================================
8232 dnl disable profile locking
8233 dnl   do no use this in applications that can have more than
8234 dnl   one process accessing the profile directory.
8235 dnl ========================================================
8236 MOZ_ARG_DISABLE_BOOL(profilelocking,
8237 [  --disable-profilelocking
8238                           Disable profile locking],
8239     MOZ_PROFILELOCKING=,
8240     MOZ_PROFILELOCKING=1 )
8241 if test "$MOZ_PROFILELOCKING"; then
8242   AC_DEFINE(MOZ_PROFILELOCKING)
8245 dnl ========================================================
8246 dnl necko configuration options
8247 dnl ========================================================
8250 dnl option to disable various necko protocols
8252 MOZ_ARG_ENABLE_STRING(necko-protocols,
8253 [  --enable-necko-protocols[={http,ftp,default,all,none}]
8254                           Enable/disable specific protocol handlers],
8255 [ for option in `echo $enableval | sed 's/,/ /g'`; do
8256     if test "$option" = "yes" -o "$option" = "all"; then
8257         NECKO_PROTOCOLS="$NECKO_PROTOCOLS $NECKO_PROTOCOLS_DEFAULT"
8258     elif test "$option" = "no" -o "$option" = "none"; then
8259         NECKO_PROTOCOLS=""
8260     elif test "$option" = "default"; then
8261         NECKO_PROTOCOLS="$NECKO_PROTOCOLS $NECKO_PROTOCOLS_DEFAULT"
8262     elif test `echo "$option" | grep -c \^-` != 0; then
8263         option=`echo $option | sed 's/^-//'`
8264         NECKO_PROTOCOLS=`echo "$NECKO_PROTOCOLS" | sed "s/ ${option}//"`
8265     else
8266         NECKO_PROTOCOLS="$NECKO_PROTOCOLS $option"
8267     fi
8268 done],
8269     NECKO_PROTOCOLS="$NECKO_PROTOCOLS_DEFAULT")
8270 dnl Remove dupes
8271 NECKO_PROTOCOLS=`${PERL} ${srcdir}/build/unix/uniq.pl ${NECKO_PROTOCOLS}`
8272 AC_SUBST_SET(NECKO_PROTOCOLS)
8273 for p in $NECKO_PROTOCOLS; do
8274     AC_DEFINE_UNQUOTED(NECKO_PROTOCOL_$p)
8275     _NON_GLOBAL_ACDEFINES="$_NON_GLOBAL_ACDEFINES NECKO_PROTOCOL_$p"
8276 done
8279 dnl option to disable necko's wifi scanner
8282 case "$OS_TARGET" in
8283   Android)
8284     if test -n "$gonkdir"; then
8285       NECKO_WIFI=1
8286     fi
8287     ;;
8288   Darwin|FreeBSD|SunOS|WINNT)
8289     NECKO_WIFI=1
8290     ;;
8291   Linux)
8292     NECKO_WIFI=1
8293     NECKO_WIFI_DBUS=1
8294     ;;
8295 esac
8297 MOZ_ARG_DISABLE_BOOL(necko-wifi,
8298 [  --disable-necko-wifi    Disable necko wifi scanner],
8299     NECKO_WIFI=,
8300     NECKO_WIFI=1)
8302 if test "$NECKO_WIFI"; then
8303   if test -z "$MOZ_ENABLE_DBUS" -a -n "$NECKO_WIFI_DBUS"; then
8304     AC_MSG_ERROR([Necko WiFi scanning needs DBus on your platform, remove --disable-dbus or use --disable-necko-wifi])
8305   fi
8306   AC_DEFINE(NECKO_WIFI)
8307   _NON_GLOBAL_ACDEFINES="$_NON_GLOBAL_ACDEFINES NECKO_WIFI"
8309 AC_SUBST(NECKO_WIFI)
8310 AC_SUBST(NECKO_WIFI_DBUS)
8313 dnl option to disable cookies
8315 MOZ_ARG_DISABLE_BOOL(cookies,
8316 [  --disable-cookies       Disable cookie support],
8317     NECKO_COOKIES=,
8318     NECKO_COOKIES=1)
8319 AC_SUBST(NECKO_COOKIES)
8320 if test "$NECKO_COOKIES"; then
8321     AC_DEFINE(NECKO_COOKIES)
8322     _NON_GLOBAL_ACDEFINES="$_NON_GLOBAL_ACDEFINES NECKO_COOKIES"
8326 dnl Always build Marionette if not Android or B2G
8328 if test "$OS_TARGET" != Android -a x"$MOZ_WIDGET_TOOLKIT" != x"gonk"; then
8329     AC_DEFINE(ENABLE_MARIONETTE)
8331 AC_SUBST(ENABLE_MARIONETTE)
8332 if test "$ENABLE_MARIONETTE"; then
8333     AC_DEFINE(ENABLE_MARIONETTE)
8337 dnl Build jsctypes on the platforms we can, unless it's explicitly disabled.
8339 MOZ_ARG_DISABLE_BOOL(ctypes,
8340 [  --disable-ctypes        Disable js-ctypes],
8341     BUILD_CTYPES=,
8342     BUILD_CTYPES=1)
8343 AC_SUBST(BUILD_CTYPES)
8344 if test "$BUILD_CTYPES"; then
8345     AC_DEFINE(BUILD_CTYPES)
8348 dnl Build Places if required
8349 if test "$MOZ_PLACES"; then
8350   AC_DEFINE(MOZ_PLACES)
8353 dnl Build SocialAPI if required
8354 if test "$MOZ_SOCIAL"; then
8355   AC_DEFINE(MOZ_SOCIAL)
8358 dnl Build Common JS modules provided by services.
8359 AC_SUBST(MOZ_SERVICES_COMMON)
8360 if test -n "$MOZ_SERVICES_COMMON"; then
8361   AC_DEFINE(MOZ_SERVICES_COMMON)
8364 dnl Build Services crypto component (used by Sync)
8365 AC_SUBST(MOZ_SERVICES_CRYPTO)
8366 if test -n "$MOZ_SERVICES_CRYPTO"; then
8367   AC_DEFINE(MOZ_SERVICES_CRYPTO)
8370 dnl Build Firefox Health Reporter Service
8371 AC_SUBST(MOZ_SERVICES_HEALTHREPORT)
8372 if test -n "$MOZ_SERVICES_HEALTHREPORT"; then
8373   AC_DEFINE(MOZ_SERVICES_HEALTHREPORT)
8376 dnl Build Services metrics component
8377 AC_SUBST(MOZ_SERVICES_METRICS)
8378 if test -n "$MOZ_SERVICES_METRICS"; then
8379   AC_DEFINE(MOZ_SERVICES_METRICS)
8382 dnl Build Notifications if required
8383 AC_SUBST(MOZ_SERVICES_NOTIFICATIONS)
8384 if test -n "$MOZ_SERVICES_NOTIFICATIONS"; then
8385   AC_DEFINE(MOZ_SERVICES_NOTIFICATIONS)
8388 dnl Build Sync Services if required
8389 AC_SUBST(MOZ_SERVICES_SYNC)
8390 if test -n "$MOZ_SERVICES_SYNC"; then
8391   AC_DEFINE(MOZ_SERVICES_SYNC)
8394 dnl Build Captive Portal Detector if required
8395 AC_SUBST(MOZ_CAPTIVEDETECT)
8396 if test -n "$MOZ_CAPTIVEDETECT"; then
8397   AC_DEFINE(MOZ_CAPTIVEDETECT)
8400 dnl ========================================================
8401 if test "$MOZ_DEBUG" -o "$NS_TRACE_MALLOC" -o "$MOZ_DMD"; then
8402     MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS=
8405 if test "$MOZ_APP_COMPONENT_INCLUDE"; then
8406   AC_DEFINE_UNQUOTED(MOZ_APP_COMPONENT_INCLUDE, "$MOZ_APP_COMPONENT_INCLUDE")
8409 if test "$MOZ_APP_COMPONENT_MODULES"; then
8410   AC_DEFINE_UNQUOTED(MOZ_APP_COMPONENT_MODULES, $MOZ_APP_COMPONENT_MODULES)
8413 dnl ========================================================
8414 dnl =
8415 dnl = Maintainer debug option (no --enable equivalent)
8416 dnl =
8417 dnl ========================================================
8419 AC_SUBST(AR)
8420 AC_SUBST(AR_FLAGS)
8421 AC_SUBST(AR_LIST)
8422 AC_SUBST(AR_EXTRACT)
8423 AC_SUBST(AR_DELETE)
8424 AC_SUBST(AS)
8425 AC_SUBST(ASFLAGS)
8426 AC_SUBST(AS_DASH_C_FLAG)
8427 AC_SUBST(LD)
8428 AC_SUBST(RC)
8429 AC_SUBST(RCFLAGS)
8430 AC_SUBST(MC)
8431 AC_SUBST(WINDRES)
8432 AC_SUBST(IMPLIB)
8433 AC_SUBST(FILTER)
8434 AC_SUBST(BIN_FLAGS)
8435 AC_SUBST(MOZ_WIDGET_TOOLKIT)
8436 AC_SUBST(MOZ_UPDATE_XTERM)
8437 AC_SUBST(MOZ_AUTH_EXTENSION)
8438 AC_SUBST(MOZ_PERMISSIONS)
8439 AC_SUBST(MOZ_PREF_EXTENSIONS)
8440 AC_SUBST(MOZ_JS_LIBS)
8441 AC_SUBST(MOZ_DEBUG)
8442 AC_SUBST(MOZ_DEBUG_SYMBOLS)
8443 AC_SUBST(MOZ_DEBUG_ENABLE_DEFS)
8444 AC_SUBST(MOZ_DEBUG_DISABLE_DEFS)
8445 AC_SUBST(MOZ_DEBUG_LDFLAGS)
8446 AC_SUBST(WARNINGS_AS_ERRORS)
8447 AC_SUBST(MOZ_EXTENSIONS)
8448 AC_SUBST(MOZ_JSDEBUGGER)
8449 AC_SUBST(MOZ_ENABLE_PROFILER_SPS)
8450 AC_SUBST(MOZ_JPROF)
8451 AC_SUBST(MOZ_SHARK)
8452 AC_SUBST(MOZ_INSTRUMENTS)
8453 AC_SUBST(MOZ_CALLGRIND)
8454 AC_SUBST(MOZ_VTUNE)
8455 AC_SUBST(MOZ_PROFILING)
8456 AC_SUBST(LIBICONV)
8457 AC_SUBST(MOZ_PLACES)
8458 AC_SUBST(MOZ_SOCIAL)
8459 AC_SUBST(MOZ_TOOLKIT_SEARCH)
8460 AC_SUBST(MOZ_FEEDS)
8461 AC_SUBST(NS_PRINTING)
8462 AC_SUBST(MOZ_WEBGL)
8463 AC_SUBST(MOZ_HELP_VIEWER)
8464 AC_SUBST(TOOLCHAIN_PREFIX)
8466 AC_SUBST(JAVA)
8467 AC_SUBST(JAVAC)
8468 AC_SUBST(JAVAH)
8469 AC_SUBST(JAR)
8470 AC_SUBST(JARSIGNER)
8471 AC_SUBST(KEYTOOL)
8473 AC_SUBST(MOZ_PROFILELOCKING)
8475 AC_SUBST(ENABLE_TESTS)
8476 AC_SUBST(MOZ_UNIVERSALCHARDET)
8477 AC_SUBST(ACCESSIBILITY)
8478 AC_SUBST(MOZ_SPELLCHECK)
8479 AC_SUBST(MOZ_ANDROID_OMTC)
8480 AC_SUBST(MOZ_ANDROID_ANR_REPORTER)
8481 AC_SUBST(MOZ_CRASHREPORTER)
8482 AC_SUBST(MOZ_CRASHREPORTER_INJECTOR)
8483 AC_SUBST(MOZ_CRASHREPORTER_UPLOAD_FULL_SYMBOLS)
8484 AC_SUBST(MOZ_MAINTENANCE_SERVICE)
8485 AC_SUBST(MOZ_STUB_INSTALLER)
8486 AC_SUBST(MOZ_VERIFY_MAR_SIGNATURE)
8487 AC_SUBST(MOZ_ENABLE_SIGNMAR)
8488 AC_SUBST(MOZ_UPDATER)
8490 AC_SUBST(MOZ_ANGLE_RENDERER)
8491 AC_SUBST(MOZ_DIRECTX_SDK_CPU_SUFFIX)
8492 AC_SUBST(MOZ_DIRECTX_SDK_PATH)
8493 AC_SUBST(MOZ_D3DCOMPILER_DLL)
8494 AC_SUBST(MOZ_HAS_WINSDK_WITH_D3D)
8495 AC_SUBST(MOZ_D3DCOMPILER_DLL_PATH)
8496 AC_SUBST(MOZ_D3DCOMPILER_CAB)
8498 AC_SUBST(MOZ_METRO)
8500 AC_SUBST(MOZ_ANDROID_HISTORY)
8501 AC_SUBST(MOZ_WEBSMS_BACKEND)
8502 AC_SUBST(MOZ_ANDROID_BEAM)
8503 AC_SUBST(MOZ_ANDROID_SYNTHAPKS)
8504 AC_SUBST(MOZ_DISABLE_GECKOVIEW)
8505 AC_SUBST(ENABLE_STRIP)
8506 AC_SUBST(PKG_SKIP_STRIP)
8507 AC_SUBST(STRIP_FLAGS)
8508 AC_SUBST(USE_ELF_HACK)
8509 AC_SUBST(INCREMENTAL_LINKER)
8510 AC_SUBST(MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS)
8511 AC_SUBST(MOZ_COMPONENT_NSPR_LIBS)
8513 AC_SUBST(MOZ_FIX_LINK_PATHS)
8514 AC_SUBST(XPCOM_LIBS)
8515 AC_SUBST(XPCOM_FROZEN_LDOPTS)
8516 AC_SUBST(XPCOM_GLUE_LDOPTS)
8517 AC_SUBST(XPCOM_STANDALONE_GLUE_LDOPTS)
8518 AC_SUBST(XPCOM_STATICRUNTIME_GLUE_LDOPTS)
8519 AC_SUBST(XPCOM_STANDALONE_STATICRUNTIME_GLUE_LDOPTS)
8521 AC_SUBST(USE_DEPENDENT_LIBS)
8523 AC_SUBST(MOZ_BUILD_ROOT)
8525 AC_SUBST(MOZ_POST_DSO_LIB_COMMAND)
8526 AC_SUBST(MOZ_POST_PROGRAM_COMMAND)
8527 AC_SUBST(MOZ_LINKER_EXTRACT)
8529 AC_SUBST(MOZ_JSDOWNLOADS)
8530 if test -n "$MOZ_JSDOWNLOADS"; then
8531   AC_DEFINE(MOZ_JSDOWNLOADS)
8534 dnl ========================================================
8535 dnl = Mac bundle name prefix
8536 dnl ========================================================
8537 MOZ_ARG_WITH_STRING(macbundlename-prefix,
8538 [  --with-macbundlename-prefix=prefix
8539                           Prefix for MOZ_MACBUNDLE_NAME],
8540 [ MOZ_MACBUNDLE_NAME_PREFIX="$withval"])
8542 MOZ_MACBUNDLE_NAME=`echo $MOZ_APP_DISPLAYNAME | tr -d ' '`
8543 if test "$MOZ_MACBUNDLE_NAME_PREFIX"; then
8544   MOZ_MACBUNDLE_NAME="${MOZ_MACBUNDLE_NAME_PREFIX}${MOZ_MACBUNDLE_NAME}"
8547 if test "$MOZ_DEBUG"; then
8548   MOZ_MACBUNDLE_NAME=${MOZ_MACBUNDLE_NAME}Debug.app
8549 else
8550   MOZ_MACBUNDLE_NAME=${MOZ_MACBUNDLE_NAME}.app
8552 AC_SUBST(MOZ_MACBUNDLE_NAME)
8554 dnl Mac bundle identifier (based on MOZ_APP_DISPLAYNAME)
8555 MOZ_MACBUNDLE_ID=`echo $MOZ_APP_DISPLAYNAME | tr '[A-Z]' '[a-z]'`
8556 MOZ_MACBUNDLE_ID=${MOZ_DISTRIBUTION_ID}.${MOZ_MACBUNDLE_ID}
8557 if test "$MOZ_DEBUG"; then
8558   MOZ_MACBUNDLE_ID=${MOZ_MACBUNDLE_ID}debug
8561 AC_DEFINE_UNQUOTED(MOZ_MACBUNDLE_ID,$MOZ_MACBUNDLE_ID)
8562 AC_SUBST(MOZ_MACBUNDLE_ID)
8564 dnl ========================================================
8565 dnl = Child Process Name for IPC
8566 dnl ========================================================
8567 if test "$MOZ_WIDGET_TOOLKIT" != "android"; then
8568   MOZ_CHILD_PROCESS_NAME="plugin-container${BIN_SUFFIX}"
8569 else
8570   # We want to let Android unpack the file at install time, but it only does
8571   # so if the file is named libsomething.so. The lib/ path is also required
8572   # because the unpacked file will be under the lib/ subdirectory and will
8573   # need to be executed from that path.
8574   MOZ_CHILD_PROCESS_NAME="lib/libplugin-container.so"
8576 MOZ_CHILD_PROCESS_BUNDLE="plugin-container.app/Contents/MacOS/"
8578 AC_SUBST(MOZ_CHILD_PROCESS_NAME)
8579 AC_SUBST(MOZ_CHILD_PROCESS_BUNDLE)
8581 # The following variables are available to branding and application
8582 # configuration ($BRANDING/configure.sh and $APPLICATION/confvars.sh):
8583 # - MOZ_APP_VENDOR: Used for application.ini's "Vendor" field, which also
8584 # impacts profile location and user-visible fields.
8585 # - MOZ_APP_BASENAME: Typically stays consistent for multiple branded
8586 # versions of a given application (e.g. Aurora and Firefox both use
8587 # "Firefox"), but may vary for full rebrandings (e.g. Iceweasel). Used
8588 # for application.ini's "Name" field, which controls profile location in
8589 # the absence of a "Profile" field (see below), and various system
8590 # integration hooks (Unix remoting, Windows MessageWindow name, etc.)
8591 # - MOZ_APP_DISPLAYNAME: Used in user-visible fields (DLL properties,
8592 # Mac Bundle name, Updater, Installer), it is typically used for nightly
8593 # builds (e.g. Aurora for Firefox).
8594 # - MOZ_APP_VERSION: Defines the application version number.
8595 # - MOZ_APP_NAME: Used for e.g. the binary program file name. If not set,
8596 # defaults to a lowercase form of MOZ_APP_BASENAME.
8597 # - MOZ_APP_PROFILE: When set, used for application.ini's
8598 # "Profile" field, which controls profile location.
8599 # - MOZ_APP_ID: When set, used for application.ini's "ID" field, and
8600 # crash reporter server url.
8601 # - MOZ_PROFILE_MIGRATOR: When set, enables profile migrator.
8602 # - MOZ_EXTENSION_MANAGER: When set, enabled extension manager.
8604 if test -z "$MOZ_APP_NAME"; then
8605    MOZ_APP_NAME=`echo $MOZ_APP_BASENAME | tr A-Z a-z`
8608 # For extensions and langpacks, we require a max version that is compatible
8609 # across security releases. MOZ_APP_MAXVERSION is our method for doing that.
8610 # 24.0a1 and 24.0a2 aren't affected
8611 # 24.0 becomes 24.*
8612 # 24.1.1 becomes 24.*
8613 IS_ALPHA=`echo $MOZ_APP_VERSION | grep a`
8614 if test -z "$IS_ALPHA"; then
8615   changequote(,)
8616   MOZ_APP_MAXVERSION=`echo $MOZ_APP_VERSION | sed "s|\(^[0-9]*\).*|\1|"`.*
8617   changequote([,])
8618 else
8619   MOZ_APP_MAXVERSION=$MOZ_APP_VERSION
8622 MOZ_B2G_VERSION=${MOZ_B2G_VERSION:-"1.0.0"}
8623 AC_DEFINE_UNQUOTED(MOZ_B2G_VERSION,"$MOZ_B2G_VERSION")
8624 AC_DEFINE_UNQUOTED(MOZ_B2G_OS_NAME,"$MOZ_B2G_OS_NAME")
8626 AC_SUBST(MOZ_APP_NAME)
8627 AC_SUBST(MOZ_APP_DISPLAYNAME)
8628 AC_SUBST(MOZ_APP_BASENAME)
8629 AC_SUBST(MOZ_APP_VENDOR)
8630 AC_SUBST(MOZ_APP_PROFILE)
8631 AC_SUBST(MOZ_APP_ID)
8632 AC_SUBST(MAR_CHANNEL_ID)
8633 AC_SUBST(ACCEPTED_MAR_CHANNEL_IDS)
8634 AC_SUBST(MOZ_PROFILE_MIGRATOR)
8635 AC_SUBST(MOZ_EXTENSION_MANAGER)
8636 AC_DEFINE_UNQUOTED(MOZ_APP_UA_NAME, "$MOZ_APP_UA_NAME")
8637 AC_SUBST(MOZ_APP_UA_NAME)
8638 AC_DEFINE_UNQUOTED(MOZ_APP_UA_VERSION, "$MOZ_APP_VERSION")
8639 AC_SUBST(MOZ_APP_VERSION)
8640 AC_SUBST(MOZ_APP_MAXVERSION)
8641 AC_DEFINE_UNQUOTED(FIREFOX_VERSION,$FIREFOX_VERSION)
8642 AC_SUBST(FIREFOX_VERSION)
8643 AC_SUBST(MOZ_UA_OS_AGNOSTIC)
8644 if test -n "$MOZ_UA_OS_AGNOSTIC"; then
8645   AC_DEFINE(MOZ_UA_OS_AGNOSTIC)
8648 AC_SUBST(MOZ_APP_STATIC_INI)
8650 AC_SUBST(MOZ_PKG_SPECIAL)
8652 AC_SUBST(MOZILLA_OFFICIAL)
8654 AC_DEFINE_UNQUOTED(MOZ_TELEMETRY_DISPLAY_REV, 2)
8655 AC_SUBST(MOZ_TELEMETRY_DISPLAY_REV)
8657 if test "$MOZ_TELEMETRY_REPORTING"; then
8658     AC_DEFINE(MOZ_TELEMETRY_REPORTING)
8660     # Enable Telemetry by default for nightly and aurora channels
8661     if test -z "$RELEASE_BUILD"; then
8662       AC_DEFINE(MOZ_TELEMETRY_ON_BY_DEFAULT)
8663     fi
8666 dnl If we have any service that uploads data (and requires data submission
8667 dnl policy alert), set MOZ_DATA_REPORTING.
8668 dnl We need SUBST for build system and DEFINE for xul preprocessor.
8669 if test -n "$MOZ_TELEMETRY_REPORTING" || test -n "$MOZ_SERVICES_HEALTHREPORT" || test -n "$MOZ_CRASHREPORTER"; then
8670   MOZ_DATA_REPORTING=1
8671   AC_DEFINE(MOZ_DATA_REPORTING)
8672   AC_SUBST(MOZ_DATA_REPORTING)
8675 dnl win32 options
8676 AC_SUBST(MOZ_BROWSE_INFO)
8677 AC_SUBST(MOZ_TOOLS_DIR)
8678 AC_SUBST(WIN32_REDIST_DIR)
8679 AC_SUBST(MAKENSISU)
8681 dnl Echo the CFLAGS to remove extra whitespace.
8682 CFLAGS=`echo \
8683     $_WARNINGS_CFLAGS \
8684     $CFLAGS`
8686 CXXFLAGS=`echo \
8687     $_WARNINGS_CXXFLAGS \
8688     $CXXFLAGS`
8690 COMPILE_CFLAGS=`echo \
8691     $_DEFINES_CFLAGS \
8692     $_DEPEND_CFLAGS \
8693     $COMPILE_CFLAGS`
8695 COMPILE_CXXFLAGS=`echo \
8696     $_DEFINES_CXXFLAGS \
8697     $_DEPEND_CFLAGS \
8698     $COMPILE_CXXFLAGS`
8700 HOST_CFLAGS=`echo \
8701     $HOST_CFLAGS \
8702     $_DEPEND_CFLAGS`
8704 HOST_CXXFLAGS=`echo \
8705     $HOST_CXXFLAGS \
8706     $_DEPEND_CFLAGS`
8708 AC_SUBST(SYSTEM_LIBXUL)
8709 AC_SUBST(MOZ_NATIVE_JPEG)
8710 AC_SUBST(MOZ_NATIVE_PNG)
8711 AC_SUBST(MOZ_NATIVE_BZ2)
8713 AC_SUBST(MOZ_JPEG_CFLAGS)
8714 AC_SUBST(MOZ_JPEG_LIBS)
8715 AC_SUBST(MOZ_BZ2_CFLAGS)
8716 AC_SUBST(MOZ_BZ2_LIBS)
8717 AC_SUBST(MOZ_PNG_CFLAGS)
8718 AC_SUBST(MOZ_PNG_LIBS)
8720 if test "$MOZ_WIDGET_TOOLKIT" = gonk -a -n "$MOZ_NUWA_PROCESS"; then
8721     export MOZ_NUWA_PROCESS
8722     AC_DEFINE(MOZ_NUWA_PROCESS)
8724 AC_SUBST(MOZ_NUWA_PROCESS)
8726 AC_SUBST(NSPR_CFLAGS)
8727 AC_SUBST(NSPR_LIBS)
8728 AC_SUBST(MOZ_NATIVE_NSPR)
8730 AC_SUBST(NSS_CFLAGS)
8731 AC_SUBST(NSS_LIBS)
8732 AC_SUBST(MOZ_NATIVE_NSS)
8733 AC_SUBST(NSS_DISABLE_DBM)
8735 OS_CFLAGS="$CFLAGS"
8736 OS_CXXFLAGS="$CXXFLAGS"
8737 OS_CPPFLAGS="$CPPFLAGS"
8738 OS_COMPILE_CFLAGS="$COMPILE_CFLAGS"
8739 OS_COMPILE_CXXFLAGS="$COMPILE_CXXFLAGS"
8740 OS_LDFLAGS="$LDFLAGS"
8741 OS_LIBS="$LIBS"
8742 AC_SUBST(OS_CFLAGS)
8743 AC_SUBST(OS_CXXFLAGS)
8744 AC_SUBST(OS_CPPFLAGS)
8745 AC_SUBST(OS_COMPILE_CFLAGS)
8746 AC_SUBST(OS_COMPILE_CXXFLAGS)
8747 AC_SUBST(OS_LDFLAGS)
8748 AC_SUBST(OS_LIBS)
8749 AC_SUBST(CROSS_COMPILE)
8750 AC_SUBST(WCHAR_CFLAGS)
8752 AC_SUBST(HOST_CC)
8753 AC_SUBST(HOST_CXX)
8754 AC_SUBST(HOST_CFLAGS)
8755 AC_SUBST(HOST_CXXFLAGS)
8756 AC_SUBST(HOST_LDFLAGS)
8757 AC_SUBST(HOST_OPTIMIZE_FLAGS)
8758 AC_SUBST(HOST_AR)
8759 AC_SUBST(HOST_AR_FLAGS)
8760 AC_SUBST(HOST_LD)
8761 AC_SUBST(HOST_RANLIB)
8762 AC_SUBST(HOST_NSPR_MDCPUCFG)
8763 AC_SUBST(HOST_BIN_SUFFIX)
8764 AC_SUBST(HOST_OS_ARCH)
8766 AC_SUBST(TARGET_CPU)
8767 AC_SUBST(TARGET_VENDOR)
8768 AC_SUBST(TARGET_OS)
8769 AC_SUBST(TARGET_NSPR_MDCPUCFG)
8770 AC_SUBST(TARGET_MD_ARCH)
8771 AC_SUBST(TARGET_XPCOM_ABI)
8772 AC_SUBST(OS_TARGET)
8773 AC_SUBST(OS_ARCH)
8774 AC_SUBST(OS_RELEASE)
8775 AC_SUBST(OS_TEST)
8776 AC_SUBST(CPU_ARCH)
8777 AC_SUBST(INTEL_ARCHITECTURE)
8778 AC_SUBST(HAVE_TOOLCHAIN_SUPPORT_MSSSE3)
8779 AC_SUBST(HAVE_TOOLCHAIN_SUPPORT_MSSE4_1)
8781 AC_SUBST(MOZ_CHROME_FILE_FORMAT)
8783 AC_SUBST(WRAP_LDFLAGS)
8784 AC_SUBST(MKSHLIB)
8785 AC_SUBST(MKCSHLIB)
8786 AC_SUBST(MKSHLIB_FORCE_ALL)
8787 AC_SUBST(MKSHLIB_UNFORCE_ALL)
8788 AC_SUBST(DSO_CFLAGS)
8789 AC_SUBST(DSO_PIC_CFLAGS)
8790 AC_SUBST(DSO_LDOPTS)
8791 AC_SUBST(LIB_PREFIX)
8792 AC_SUBST(DLL_PREFIX)
8793 AC_SUBST(DLL_SUFFIX)
8794 AC_DEFINE_UNQUOTED(MOZ_DLL_SUFFIX, "$DLL_SUFFIX")
8795 AC_SUBST(LIB_SUFFIX)
8796 AC_SUBST(OBJ_SUFFIX)
8797 AC_SUBST(BIN_SUFFIX)
8798 AC_SUBST(ASM_SUFFIX)
8799 AC_SUBST(IMPORT_LIB_SUFFIX)
8800 AC_SUBST(USE_N32)
8801 AC_SUBST(CC_VERSION)
8802 AC_SUBST(CXX_VERSION)
8803 AC_SUBST(MSMANIFEST_TOOL)
8804 AC_SUBST(NS_ENABLE_TSF)
8805 AC_SUBST(MOZ_NSS_PATCH)
8806 AC_SUBST(MOZ_APP_COMPONENT_LIBS)
8807 AC_SUBST(MOZ_APP_EXTRA_LIBS)
8809 AC_SUBST(MOZ_WAVE)
8810 AC_SUBST(MOZ_VORBIS)
8811 AC_SUBST(MOZ_TREMOR)
8812 AC_SUBST(MOZ_OPUS)
8813 AC_SUBST(MOZ_WEBM)
8814 AC_SUBST(MOZ_WMF)
8815 AC_SUBST(MOZ_FFMPEG)
8816 AC_SUBST(MOZ_FMP4)
8817 AC_SUBST(MOZ_DIRECTSHOW)
8818 AC_SUBST(MOZ_MEDIA_PLUGINS)
8819 AC_SUBST(MOZ_APPLEMEDIA)
8820 AC_SUBST(MOZ_OMX_PLUGIN)
8821 AC_SUBST(MOZ_VPX_ERROR_CONCEALMENT)
8822 AC_SUBST(MOZ_VPX)
8823 AC_SUBST(VPX_AS)
8824 AC_SUBST(VPX_ASFLAGS)
8825 AC_SUBST(VPX_DASH_C_FLAG)
8826 AC_SUBST(VPX_AS_CONVERSION)
8827 AC_SUBST(VPX_ASM_SUFFIX)
8828 AC_SUBST(VPX_X86_ASM)
8829 AC_SUBST(VPX_ARM_ASM)
8830 AC_SUBST(VPX_NEED_OBJ_INT_EXTRACT)
8831 AC_SUBST(MOZ_INSTRUMENT_EVENT_LOOP)
8832 AC_SUBST(LIBJPEG_TURBO_AS)
8833 AC_SUBST(LIBJPEG_TURBO_ASFLAGS)
8834 AC_SUBST(LIBJPEG_TURBO_X86_ASM)
8835 AC_SUBST(LIBJPEG_TURBO_X64_ASM)
8836 AC_SUBST(LIBJPEG_TURBO_ARM_ASM)
8838 AC_SUBST(MOZ_PACKAGE_JSSHELL)
8839 AC_SUBST(MOZ_FOLD_LIBS)
8841 AC_SUBST(MOZ_ENABLE_SZIP)
8842 AC_SUBST(MOZ_SZIP_FLAGS)
8844 if test "$MOZ_DEBUG"; then
8845     MOZ_EM_DEBUG=1
8847 AC_SUBST(MOZ_EM_DEBUG)
8849 if test -n "$COMPILE_ENVIRONMENT"; then
8850 AC_CHECK_FUNCS(posix_fadvise posix_fallocate)
8852 dnl Check for missing components
8853 if test "$MOZ_X11"; then
8854     if test "$WITHOUT_X11"; then
8855         AC_MSG_ERROR([--without-x specified and MOZ_X11 still defined])
8856     fi
8857     dnl ====================================================
8858     dnl = Check if X headers exist
8859     dnl ====================================================
8860     _SAVE_CFLAGS=$CFLAGS
8861     CFLAGS="$CFLAGS $XCFLAGS"
8862     AC_TRY_COMPILE([
8863         #include <stdio.h>
8864         #include <stdlib.h>
8865         #include <X11/Xlib.h>
8866         #include <X11/Intrinsic.h>
8867         #include <X11/extensions/XShm.h>
8868     ],
8869     [
8870         Display *dpy = 0;
8871         if ((dpy = XOpenDisplay(NULL)) == NULL) {
8872             fprintf(stderr, ": can't open %s\n", XDisplayName(NULL));
8873             exit(1);
8874         }
8875     ], [],
8876     [ AC_MSG_ERROR([Can't find X headers (install libxt-dev (Debian/Ubuntu), libXt-devel (Fedora), or xorg-x11-libXt-devel (SuSE)).]) ])
8877     CFLAGS="$_SAVE_CFLAGS"
8879     if test -n "$MISSING_X"; then
8880         AC_MSG_ERROR([ Could not find the following X libraries: $MISSING_X ]);
8881     fi
8883 fi # MOZ_X11
8885 fi # COMPILE_ENVIRONMENT
8887 dnl Set various defines and substitutions
8888 dnl ========================================================
8890 if test "$OS_ARCH" != "WINNT"; then
8891   AC_DEFINE(XP_UNIX)
8894 if test "$MOZ_DEBUG"; then
8895     AC_DEFINE(MOZ_REFLOW_PERF)
8896     AC_DEFINE(MOZ_REFLOW_PERF_DSP)
8899 if test "$ACCESSIBILITY" -a "$MOZ_ENABLE_GTK" ; then
8900     AC_DEFINE(MOZ_ACCESSIBILITY_ATK)
8901     ATK_FULL_VERSION=`$PKG_CONFIG --modversion atk`
8902     ATK_MAJOR_VERSION=`echo ${ATK_FULL_VERSION} | $AWK -F\. '{ print $1 }'`
8903     ATK_MINOR_VERSION=`echo ${ATK_FULL_VERSION} | $AWK -F\. '{ print $2 }'`
8904     ATK_REV_VERSION=`echo ${ATK_FULL_VERSION} | $AWK -F\. '{ print $3 }'`
8905     AC_DEFINE_UNQUOTED(ATK_MAJOR_VERSION, $ATK_MAJOR_VERSION)
8906     AC_DEFINE_UNQUOTED(ATK_MINOR_VERSION, $ATK_MINOR_VERSION)
8907     AC_DEFINE_UNQUOTED(ATK_REV_VERSION, $ATK_REV_VERSION)
8910 if test "$MOZ_DEBUG"; then
8911     A11Y_LOG=1
8913 case "$MOZ_UPDATE_CHANNEL" in
8914 aurora|beta|release|esr)
8915     ;;
8917     A11Y_LOG=1
8918     ;;
8919 esac
8920 AC_SUBST(A11Y_LOG)
8921 if test -n "$A11Y_LOG"; then
8922     AC_DEFINE(A11Y_LOG)
8925 AC_SUBST(MOZILLA_VERSION)
8927 AC_SUBST(ac_configure_args)
8929 dnl Spit out some output
8930 dnl ========================================================
8932 dnl The following defines are used by xpcom
8933 _NON_GLOBAL_ACDEFINES="$_NON_GLOBAL_ACDEFINES
8934 CPP_THROW_NEW
8935 HAVE_CPP_AMBIGUITY_RESOLVING_USING
8936 HAVE_CPP_DYNAMIC_CAST_TO_VOID_PTR
8937 HAVE_CPP_PARTIAL_SPECIALIZATION
8938 HAVE_CPP_TROUBLE_COMPARING_TO_ZERO
8939 NEED_CPP_UNUSED_IMPLEMENTATIONS
8940 HAVE_GETPAGESIZE
8941 HAVE_ICONV
8942 HAVE_ICONV_WITH_CONST_INPUT
8943 HAVE_MBRTOWC
8944 HAVE_WCRTOMB
8945 HAVE_STATVFS64
8946 HAVE_STATVFS
8947 HAVE_STATFS64
8948 HAVE_STATFS
8949 HAVE_SYS_STATVFS_H
8950 HAVE_SYS_STATFS_H
8951 HAVE_SYS_VFS_H
8952 HAVE_SYS_MOUNT_H
8955 AC_SUBST(STLPORT_LIBS)
8957 dnl ========================================================
8958 dnl ICU Support
8959 dnl ========================================================
8961 if test "$MOZ_BUILD_APP" = "browser"; then
8962     _INTL_API=yes
8963 else
8964     # Internationalization isn't built or exposed by default in non-desktop
8965     # builds.  Bugs to enable:
8966     #
8967     #   Android:  bug 864843
8968     #   B2G:      bug 866301
8969     _INTL_API=no
8972 MOZ_CONFIG_ICU()
8974 if test -n "$MOZ_NATIVE_ICU"; then
8975     MOZ_JS_STATIC_LIBS="$MOZ_JS_STATIC_LIBS $MOZ_ICU_LIBS"
8978 if test -n "$JS_SHARED_LIBRARY"; then
8979   MOZ_JS_LIBS="$MOZ_JS_SHARED_LIBS"
8980 else
8981   MOZ_JS_LIBS="$MOZ_JS_STATIC_LIBS"
8982   AC_DEFINE(MOZ_STATIC_JS)
8984 AC_SUBST(JS_SHARED_LIBRARY)
8986 MOZ_CREATE_CONFIG_STATUS()
8988 # No need to run subconfigures when building with LIBXUL_SDK_DIR
8989 if test "$COMPILE_ENVIRONMENT" -a -z "$LIBXUL_SDK_DIR"; then
8990   MOZ_SUBCONFIGURE_ICU()
8991   MOZ_SUBCONFIGURE_FFI()
8994 # Hack around an Apple bug that affects the egrep that comes with OS X 10.7.
8995 # "env ARCHPREFERENCE=i386,x86_64 arch egrep" first tries to use the 32-bit
8996 # Intel part of the egrep fat binary, even on 64-bit systems, and falls back on
8997 # the 64-bit part if it's not a fat binary, as can happen with MacPorts. We
8998 # (apparently) only need this hack when egrep's "pattern" is particularly long
8999 # (as in the following code) and the first egrep on our $PATH is Apple's.  See
9000 # bug 655339.
9001 case "$host" in
9002 *-apple-darwin11*)
9003     FIXED_EGREP="env ARCHPREFERENCE=i386,x86_64 arch egrep"
9004     ;;
9006     FIXED_EGREP="egrep"
9007     ;;
9008 esac
9010 # Run jemalloc configure script
9012 if test -z "$MOZ_NATIVE_JEMALLOC" -a "$MOZ_MEMORY" && test -n "$MOZ_JEMALLOC3" -o -n "$MOZ_REPLACE_MALLOC"; then
9013   ac_configure_args="--build=$build --host=$target --enable-stats --with-jemalloc-prefix=je_"
9014   if test -n "$MOZ_REPLACE_MALLOC"; then
9015     # When using replace_malloc, we always want memalign and valloc exported from jemalloc.
9016     ac_configure_args="$ac_configure_args ac_cv_func_memalign=yes"
9017     ac_configure_args="$ac_configure_args ac_cv_func_valloc=yes"
9018   fi
9019   if test -n "$MOZ_JEMALLOC3"; then
9020     case "${OS_ARCH}" in
9021       WINNT|Darwin)
9022         # We want jemalloc functions to be kept hidden on both Mac and Windows
9023         # See memory/build/mozmemory_wrap.h for details.
9024         ac_configure_args="$ac_configure_args --without-export"
9025         ;;
9026     esac
9027   elif test "${OS_ARCH}" = Darwin; then
9028     # When building as a replace-malloc lib, disabling the zone allocator
9029     # forces to use pthread_atfork.
9030     ac_configure_args="$ac_configure_args --disable-zone-allocator"
9031   fi
9032   _MANGLE="malloc posix_memalign aligned_alloc calloc realloc free memalign valloc malloc_usable_size"
9033   JEMALLOC_WRAPPER=
9034   if test -z "$MOZ_REPLACE_MALLOC"; then
9035     case "$OS_ARCH" in
9036       Linux|DragonFly|FreeBSD|NetBSD|OpenBSD)
9037         MANGLE=$_MANGLE
9038         ;;
9039     esac
9040   elif test -z "$MOZ_JEMALLOC3"; then
9041     MANGLE=$_MANGLE
9042     JEMALLOC_WRAPPER=replace_
9043   fi
9044   if test -n "$MANGLE"; then
9045     MANGLED=
9046     if test -n "$_WRAP_MALLOC" -a -z "$JEMALLOC_WRAPPER"; then
9047       JEMALLOC_WRAPPER=__wrap_
9048     fi
9049     for mangle in ${MANGLE}; do
9050       if test -n "$MANGLED"; then
9051         MANGLED="$mangle:$JEMALLOC_WRAPPER$mangle,$MANGLED"
9052       else
9053         MANGLED="$mangle:$JEMALLOC_WRAPPER$mangle"
9054       fi
9055     done
9056     ac_configure_args="$ac_configure_args --with-mangling=$MANGLED"
9057   fi
9058   unset CONFIG_FILES
9059   if test -z "$MOZ_TLS"; then
9060     ac_configure_args="$ac_configure_args --disable-tls"
9061   fi
9062   EXTRA_CFLAGS="$CFLAGS"
9063   for var in AS CC CXX CPP LD AR RANLIB STRIP CPPFLAGS EXTRA_CFLAGS LDFLAGS; do
9064     ac_configure_args="$ac_configure_args $var='`eval echo \\${${var}}`'"
9065   done
9066   if test "$CROSS_COMPILE"; then
9067     ac_configure_args="$ac_configure_args je_cv_static_page_shift=12"
9068   fi
9069   _save_cache_file="$cache_file"
9070   cache_file=$_objdir/memory/jemalloc/src/config.cache
9072   if ! test -e memory/jemalloc; then
9073     mkdir -p memory/jemalloc
9074   fi
9076   AC_OUTPUT_SUBDIRS(memory/jemalloc/src)
9077   cache_file="$_save_cache_file"
9078   ac_configure_args="$_SUBDIR_CONFIG_ARGS"
9081 # Run freetype configure script
9083 if test "$MOZ_TREE_FREETYPE"; then
9084    export CFLAGS="$CFLAGS $MOZ_DEBUG_FLAGS -std=c99"
9085    export CPPFLAGS="$CPPFLAGS $MOZ_DEBUG_FLAGS"
9086    export CXXFLAGS="$CXXFLAGS $MOZ_DEBUG_FLAGS"
9087    export LDFLAGS="$LDFLAGS $MOZ_DEBUG_LDFLAGS"
9088    # Spaces in the *_CFLAGS and *_LIBS variables are intentionally placed
9089    # to force freetype to use our settings rather than autodetecting
9090    export LIBPNG_CFLAGS="$MOZ_PNG_CFLAGS "
9091    export LIBPNG_LIBS="$MOZ_PNG_LIBS "
9092    export ZLIB_CFLAGS="$MOZ_ZLIB_CFLAGS "
9093    export ZLIB_LIBS="$MOZ_ZLIB_LIBS "
9094    export CONFIG_FILES="unix-cc.mk:unix-cc.in unix-def.mk:unix-def.in freetype-config freetype2.pc:freetype2.in"
9095    ac_configure_args="$ac_configure_args --host=$target --disable-shared --with-pic=yes --with-zlib=yes --without-bzip2 --with-png=yes --without-harfbuzz"
9097    if ! test -e modules; then
9098      mkdir modules
9099    fi
9101    AC_OUTPUT_SUBDIRS(modules/freetype2)
9104 if test -z "$direct_nspr_config"; then
9105     dnl ========================================================
9106     dnl = Setup a nice relatively clean build environment for
9107     dnl = sub-configures.
9108     dnl ========================================================
9109     CC="$_SUBDIR_CC"
9110     CXX="$_SUBDIR_CXX"
9111     CFLAGS="$_SUBDIR_CFLAGS"
9112     CPPFLAGS="$_SUBDIR_CPPFLAGS"
9113     CXXFLAGS="$_SUBDIR_CXXFLAGS"
9114     LDFLAGS="$_SUBDIR_LDFLAGS"
9115     HOST_CC="$_SUBDIR_HOST_CC"
9116     HOST_CFLAGS="$_SUBDIR_HOST_CFLAGS"
9117     HOST_LDFLAGS="$_SUBDIR_HOST_LDFLAGS"
9118     RC=
9121 unset MAKEFILES
9122 unset CONFIG_FILES
9124 # Run all configure scripts specified by a subconfigure
9125 if test -n "$_subconfigure_subdir"; then
9126   _save_ac_configure_args="$ac_configure_args"
9127   ac_configure_args="$_subconfigure_config_args"
9128   AC_OUTPUT_SUBDIRS("$_subconfigure_subdir")
9129   ac_configure_args="$_save_ac_configure_args"
9132 # No need to run subconfigures when building with LIBXUL_SDK_DIR
9133 if test "$COMPILE_ENVIRONMENT" -a -z "$LIBXUL_SDK_DIR"; then
9135 export WRAP_LDFLAGS
9137 if test -n "$_WRAP_MALLOC"; then
9138     # Avoid doubling wrap malloc arguments
9139     _SUBDIR_CONFIG_ARGS="`echo $_SUBDIR_CONFIG_ARGS | sed -e 's/--enable-wrap-malloc *//'`"
9142 if test -z "$MOZ_NATIVE_NSPR"; then
9143     ac_configure_args="$_SUBDIR_CONFIG_ARGS --with-dist-prefix=$MOZ_BUILD_ROOT/dist --with-mozilla"
9144     if test -z "$MOZ_DEBUG"; then
9145         ac_configure_args="$ac_configure_args --disable-debug"
9146     else
9147         ac_configure_args="$ac_configure_args --enable-debug"
9148     fi
9149     if test "$MOZ_OPTIMIZE" = "1"; then
9150         ac_configure_args="$ac_configure_args --enable-optimize"
9151     elif test -z "$MOZ_OPTIMIZE"; then
9152         ac_configure_args="$ac_configure_args --disable-optimize"
9153     fi
9154     if test -n "$HAVE_64BIT_OS"; then
9155         ac_configure_args="$ac_configure_args --enable-64bit"
9156     fi
9157     if test -n "$USE_ARM_KUSER"; then
9158         ac_configure_args="$ac_configure_args --with-arm-kuser"
9159     fi
9160     # A configure script generated by autoconf 2.68 does not allow the cached
9161     # values of "precious" variables such as CFLAGS and LDFLAGS to differ from
9162     # the values passed to the configure script. Since we modify CFLAGS and
9163     # LDFLAGS before passing them to NSPR's configure script, we cannot share
9164     # config.cache with NSPR. As a result, we cannot pass AS, CC, CXX, etc. to
9165     # NSPR via a shared config.cache file and must pass them to NSPR on the
9166     # configure command line.
9167     for var in AS CC CXX CPP LD AR RANLIB STRIP; do
9168         ac_configure_args="$ac_configure_args $var='`eval echo \\${${var}}`'"
9169     done
9170     # A configure script generated by autoconf 2.68 warns if --host is
9171     # specified but --build isn't. So we always pass --build to NSPR's
9172     # configure script.
9173     ac_configure_args="$ac_configure_args --build=$build"
9174     ac_configure_args="$ac_configure_args $NSPR_CONFIGURE_ARGS"
9176     # Save these, so we can mess with them for the subconfigure ..
9177     _SAVE_CFLAGS="$CFLAGS"
9178     _SAVE_CPPFLAGS="$CPPFLAGS"
9179     _SAVE_LDFLAGS="$LDFLAGS"
9181     if test -n "$MOZ_LINKER" -a "$ac_cv_func_dladdr" = no ; then
9182       # dladdr is supported by the new linker, even when the system linker doesn't
9183       # support it. Trick nspr into using dladdr when it's not supported.
9184       export CPPFLAGS="-include $_topsrcdir/mozglue/linker/dladdr.h $CPPFLAGS"
9185     fi
9186     export LDFLAGS="$LDFLAGS $NSPR_LDFLAGS"
9187     export CFLAGS="$CFLAGS $MOZ_FRAMEPTR_FLAGS"
9189     # Use a separate cache file for NSPR since it uses autoconf 2.68.
9190     _save_cache_file="$cache_file"
9191     cache_file=$_objdir/nsprpub/config.cache
9193     AC_OUTPUT_SUBDIRS(nsprpub)
9195     # .. and restore them
9196     cache_file="$_save_cache_file"
9197     CFLAGS="$_SAVE_CFLAGS"
9198     CPPFLAGS="$_SAVE_CPPFLAGS"
9199     LDFLAGS="$_SAVE_LDFLAGS"
9201     ac_configure_args="$_SUBDIR_CONFIG_ARGS"
9204 dnl ========================================================
9205 dnl = Setup a nice relatively clean build environment for
9206 dnl = sub-configures.
9207 dnl ========================================================
9208 CC="$_SUBDIR_CC"
9209 CXX="$_SUBDIR_CXX"
9210 CFLAGS="$_SUBDIR_CFLAGS"
9211 CPPFLAGS="$_SUBDIR_CPPFLAGS"
9212 CXXFLAGS="$_SUBDIR_CXXFLAGS"
9213 LDFLAGS="$_SUBDIR_LDFLAGS"
9214 HOST_CC="$_SUBDIR_HOST_CC"
9215 HOST_CFLAGS="$_SUBDIR_HOST_CFLAGS"
9216 HOST_LDFLAGS="$_SUBDIR_HOST_LDFLAGS"
9219 if test -n "$ENABLE_CLANG_PLUGIN"; then
9220     ac_configure_args="$_SUBDIR_CONFIG_ARGS"
9221     AC_OUTPUT_SUBDIRS(build/clang-plugin)
9225 # Run the SpiderMonkey 'configure' script.
9226 dist=$MOZ_BUILD_ROOT/dist
9227 ac_configure_args="$_SUBDIR_CONFIG_ARGS"
9228 ac_configure_args="$ac_configure_args --enable-threadsafe"
9230 if test "$_INTL_API" = no; then
9231     ac_configure_args="$ac_configure_args --without-intl-api"
9234 if test "$BUILD_CTYPES"; then
9235     # Build js-ctypes on the platforms we can.
9236     ac_configure_args="$ac_configure_args --enable-ctypes"
9238 if test -z "$JS_SHARED_LIBRARY" ; then
9239     ac_configure_args="$ac_configure_args --disable-shared-js"
9240     if test -n "$MOZ_DISABLE_EXPORT_JS"; then
9241         ac_configure_args="$ac_configure_args --disable-export-js"
9242     fi
9244 if test -z "$JSGC_USE_EXACT_ROOTING" ; then
9245     ac_configure_args="$ac_configure_args --disable-exact-rooting"
9247 if test -z "$MOZ_NATIVE_NSPR"; then
9248     ac_configure_args="$ac_configure_args --with-nspr-cflags='$NSPR_CFLAGS'"
9249     ac_configure_args="$ac_configure_args --with-nspr-libs='$NSPR_LIBS'"
9251 ac_configure_args="$ac_configure_args --prefix=$dist"
9252 if test "$MOZ_MEMORY"; then
9253    ac_configure_args="$ac_configure_args --enable-jemalloc"
9255 if test -n "$MOZ_GLUE_LDFLAGS"; then
9256    export MOZ_GLUE_LDFLAGS
9258 if test -n "$MOZ_GLUE_PROGRAM_LDFLAGS"; then
9259    export MOZ_GLUE_PROGRAM_LDFLAGS
9261 if test -n "$ZLIB_IN_MOZGLUE"; then
9262    MOZ_ZLIB_LIBS=
9264 export MOZ_NATIVE_ZLIB
9265 export MOZ_ZLIB_CFLAGS
9266 export MOZ_ZLIB_LIBS
9267 export MOZ_APP_NAME
9268 export DONT_POPULATE_VIRTUALENV=1
9269 export PYTHON
9270 export MOZILLA_CENTRAL_PATH=$_topsrcdir
9271 export STLPORT_CPPFLAGS
9272 export STLPORT_LDFLAGS
9273 export STLPORT_LIBS
9274 export JS_STANDALONE=no
9275 export MOZ_LINKER
9276 export ZLIB_IN_MOZGLUE
9278 if ! test -e js; then
9279     mkdir js
9282 AC_OUTPUT_SUBDIRS(js/src)
9283 ac_configure_args="$_SUBDIR_CONFIG_ARGS"
9285 fi # COMPILE_ENVIRONMENT && !LIBXUL_SDK_DIR
9287 export WRITE_MOZINFO=1
9288 dnl we need to run config.status after js/src subconfigure because we're
9289 dnl traversing its moz.build and we need its config.status for that.
9290 dnl However, writing our own config.status needs to happen before
9291 dnl subconfigures because the setup surrounding subconfigures alters
9292 dnl many AC_SUBSTed variables.
9293 MOZ_RUN_CONFIG_STATUS()
9294 unset WRITE_MOZINFO