diff options
Diffstat (limited to 'old-configure.in')
-rw-r--r-- | old-configure.in | 5981 |
1 files changed, 5981 insertions, 0 deletions
diff --git a/old-configure.in b/old-configure.in new file mode 100644 index 000000000..85a4157e3 --- /dev/null +++ b/old-configure.in @@ -0,0 +1,5981 @@ +dnl -*- Mode: Autoconf; tab-width: 4; indent-tabs-mode: nil; -*- +dnl vi: set tabstop=4 shiftwidth=4 expandtab syntax=m4: +dnl This Source Code Form is subject to the terms of the Mozilla Public +dnl License, v. 2.0. If a copy of the MPL was not distributed with this +dnl file, You can obtain one at http://mozilla.org/MPL/2.0/. + +dnl Process this file with autoconf to produce a configure script. +dnl ======================================================== +AC_PREREQ(2.13) +AC_INIT(config/config.mk) +AC_CONFIG_AUX_DIR(${srcdir}/build/autoconf) +AC_CANONICAL_SYSTEM + +dnl ======================================================== +dnl = +dnl = Don't change the following two lines. Doing so breaks: +dnl = +dnl = CFLAGS="-foo" ./configure +dnl = +dnl ======================================================== +CFLAGS="${CFLAGS=}" +CPPFLAGS="${CPPFLAGS=}" +CXXFLAGS="${CXXFLAGS=}" +LDFLAGS="${LDFLAGS=}" +HOST_CFLAGS="${HOST_CFLAGS=}" +HOST_CXXFLAGS="${HOST_CXXFLAGS=}" +HOST_LDFLAGS="${HOST_LDFLAGS=}" + +dnl ======================================================== +dnl = Preserve certain environment flags passed to configure +dnl = We want sub projects to receive the same flags +dnl = untainted by this configure script +dnl ======================================================== +_SUBDIR_CC="$CC" +_SUBDIR_CXX="$CXX" +_SUBDIR_CFLAGS="$CFLAGS" +_SUBDIR_CPPFLAGS="$CPPFLAGS" +_SUBDIR_CXXFLAGS="$CXXFLAGS" +_SUBDIR_LDFLAGS="$LDFLAGS" +_SUBDIR_HOST_CC="$HOST_CC" +_SUBDIR_HOST_CFLAGS="$HOST_CFLAGS" +_SUBDIR_HOST_CXXFLAGS="$HOST_CXXFLAGS" +_SUBDIR_HOST_LDFLAGS="$HOST_LDFLAGS" +_SUBDIR_CONFIG_ARGS="$ac_configure_args" + +dnl Set the version number of the libs included with mozilla +dnl ======================================================== +MOZJPEG=62 +MOZPNG=10625 +NSPR_VERSION=4 +NSPR_MINVER=4.13.1 +NSS_VERSION=3 + +dnl Set the minimum version of toolkit libs used by mozilla +dnl ======================================================== +GLIB_VERSION=2.22 +# 2_26 is the earliest version we can set GLIB_VERSION_MIN_REQUIRED. +# The macro won't be used when compiling with earlier versions anyway. +GLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_26 +GIO_VERSION=2.22 +CAIRO_VERSION=1.10 +GTK2_VERSION=2.18.0 +GTK3_VERSION=3.4.0 +GDK_VERSION_MAX_ALLOWED=GDK_VERSION_3_4 +WINDRES_VERSION=2.14.90 +W32API_VERSION=3.14 +GNOMEUI_VERSION=2.2.0 +GCONF_VERSION=1.2.1 +STARTUP_NOTIFICATION_VERSION=0.8 +DBUS_VERSION=0.60 +SQLITE_VERSION=3.17.0 + +dnl Set various checks +dnl ======================================================== +MISSING_X= + +dnl Initialize the Pthread test variables early so they can be +dnl overridden by each platform. +dnl ======================================================== +MOZ_USE_PTHREADS= +_PTHREAD_LDFLAGS="" + +dnl Do not allow objdir == srcdir builds. +dnl ============================================================== +_topsrcdir=`cd \`dirname $0\`; pwd -W 2>/dev/null || pwd -P` +_objdir=`pwd -P` + +MOZ_BUILD_ROOT=`pwd -W 2>/dev/null || pwd -P` +DIST="$MOZ_BUILD_ROOT/dist" + +MOZ_DEFAULT_COMPILER + +if test "$COMPILE_ENVIRONMENT"; then + MOZ_ANDROID_NDK +fi # COMPILE_ENVIRONMENT + +if test -n "$gonkdir"; then + dnl export for js/src/configure. We can't pass the option down normally, + dnl because it's a `--enable-project=b2g`-only option. + export gonkdir + kernel_name=`uname -s | tr "[[:upper:]]" "[[:lower:]]"` + android_source="$gonkdir" + ANDROID_SOURCE="$android_source" + + case "$android_version" in + 15) + CPPFLAGS="-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/dalvik/libnativehelper/include/nativehelper $CPPFLAGS" + MOZ_SECUREELEMENT=1 + ;; + 17|18) + CPPFLAGS="-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 $CPPFLAGS" + MOZ_SECUREELEMENT=1 + ;; + 19) + CPPFLAGS="-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 $CPPFLAGS" + MOZ_AUDIO_OFFLOAD=1 + MOZ_SECUREELEMENT=1 + AC_SUBST(MOZ_AUDIO_OFFLOAD) + AC_DEFINE(MOZ_AUDIO_OFFLOAD) + ;; + 21|22) + CPPFLAGS="-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 $CPPFLAGS" + MOZ_AUDIO_OFFLOAD=1 + AC_SUBST(MOZ_AUDIO_OFFLOAD) + AC_DEFINE(MOZ_AUDIO_OFFLOAD) + ;; + *) + AC_MSG_ERROR([Unsupported platform version: $android_version]) + ;; + esac + + CPPFLAGS="-I$gonkdir/system -I$gonkdir/system/core/include -I$gonkdir/hardware/libhardware/include -I$gonkdir/external/valgrind/fxos-include $CPPFLAGS" + LDFLAGS="-L$gonkdir/out/target/product/$GONK_PRODUCT/obj/lib -Wl,-rpath-link=$gonkdir/out/target/product/$GONK_PRODUCT/obj/lib $LDFLAGS" + + AC_DEFINE(ANDROID) + AC_DEFINE_UNQUOTED(ANDROID_VERSION, $android_version) + AC_DEFINE(HAVE_SYS_UIO_H) + AC_DEFINE(HAVE_PTHREADS) + + dnl ANDROID_VERSION is only required for the AC_SUBST below + ANDROID_VERSION=$android_version + AC_SUBST(ANDROID_VERSION) + + direct_nspr_config=1 + +else + case "$target" in + *-android*|*-linuxandroid*) + ZLIB_DIR=yes + AC_DEFINE(ANDROID) + ;; + *-linux*) + AC_PATH_PROG(OBJCOPY,objcopy) + ;; + esac +fi + +case "$target" in +*-apple-darwin*) + MOZ_IOS_SDK + ;; +esac + +AC_SUBST(ANDROID_SOURCE) +AC_SUBST(ANDROID_PACKAGE_NAME) +AC_SUBST(OBJCOPY) + +dnl ======================================================== +dnl Checks for compilers. +dnl ======================================================== + +dnl AR_FLAGS set here so HOST_AR_FLAGS can be set correctly (see bug 538269) +AR_FLAGS='crs $@' + +if test "$COMPILE_ENVIRONMENT"; then + +if test "$target" != "$host"; then + MOZ_CROSS_COMPILER +else + AC_PROG_CC + case "$target" in + *-mingw*) + # Work around the conftest.exe access problem on Windows + sleep 2 + esac + AC_PROG_CXX + AC_PROG_RANLIB + MOZ_PATH_PROGS(AS, $AS as, $CC) + AC_CHECK_PROGS(AR, ar, :) + AC_CHECK_PROGS(LD, ld, :) + AC_CHECK_PROGS(STRIP, strip, :) + AC_CHECK_PROGS(WINDRES, windres, :) + AC_CHECK_PROGS(OTOOL, otool, :) + if test -z "$HOST_RANLIB"; then + HOST_RANLIB="$RANLIB" + fi + if test -z "$HOST_AR"; then + HOST_AR="$AR" + fi + if test -z "$HOST_AR_FLAGS"; then + HOST_AR_FLAGS="$AR_FLAGS" + fi +fi + +if test -n "$MOZ_WINCONSOLE"; then + AC_DEFINE(MOZ_WINCONSOLE) +fi + +MOZ_TOOL_VARIABLES + +dnl ======================================================== +dnl Special win32 checks +dnl ======================================================== + +WINVER=502 + +case "$target" in +*-mingw*) + if test "$GCC" != "yes"; then + # Check to see if we are really running in a msvc environemnt + _WIN32_MSVC=1 + AC_CHECK_PROGS(MIDL, midl) + + # Make sure compilers are valid + CFLAGS="$CFLAGS -TC -nologo" + CXXFLAGS="$CXXFLAGS -TP -nologo" + AC_LANG_SAVE + AC_LANG_C + AC_TRY_COMPILE([#include <stdio.h>], + [ printf("Hello World\n"); ],, + AC_MSG_ERROR([\$(CC) test failed. You must have MS VC++ in your path to build.]) ) + + AC_LANG_CPLUSPLUS + AC_TRY_COMPILE([#include <new.h>], + [ unsigned *test = new unsigned(42); ],, + AC_MSG_ERROR([\$(CXX) test failed. You must have MS VC++ in your path to build.]) ) + AC_LANG_RESTORE + + changequote(,) + _MSVC_VER_FILTER='s|.*[^!-~]([0-9]+\.[0-9]+\.[0-9]+(\.[0-9]+)?).*|\1|p' + changequote([,]) + + _MSC_VER=`echo ${CC_VERSION} | cut -c 1-2,4-5` + + AC_DEFINE(_CRT_SECURE_NO_WARNINGS) + AC_DEFINE(_CRT_NONSTDC_NO_WARNINGS) + AC_DEFINE(_USE_MATH_DEFINES) # Otherwise MSVC's math.h doesn't #define M_PI. + + case "$CC_VERSION" in + 19*) + _CC_SUITE=14 + MSVS_VERSION=2015 + MSVC_C_RUNTIME_DLL=vcruntime140.dll + MSVC_CXX_RUNTIME_DLL=msvcp140.dll + + MOZ_CHECK_HEADER(dia2.h, MSVC_HAS_DIA_SDK=1) + if test -n "$MSVC_HAS_DIA_SDK"; then + AC_DEFINE(MSVC_HAS_DIA_SDK) + fi + + # C5026: move constructor was implicitly defined as deleted + CXXFLAGS="$CXXFLAGS -wd5026" + + # C5027: move assignment operator was implicitly defined as deleted + CXXFLAGS="$CXXFLAGS -wd5027" + + # -Zc:sizedDealloc- disables C++14 global sized deallocation (see bug 1160146) + CXXFLAGS="$CXXFLAGS -Zc:sizedDealloc-" + + # Disable C++11 thread-safe statics due to crashes on XP (bug 1204752) + # See https://connect.microsoft.com/VisualStudio/feedback/details/1789709/visual-c-2015-runtime-broken-on-windows-server-2003-c-11-magic-statics + CXXFLAGS="$CXXFLAGS -Zc:threadSafeInit-" + + # https://connect.microsoft.com/VisualStudio/feedback/details/888527/warnings-on-dbghelp-h + # for dbghelp.h, imagehlp.h, and shobj.h + # C4091: 'typedef ': ignored on left of '' when no variable is declared + CFLAGS="$CFLAGS -wd4091" + CXXFLAGS="$CXXFLAGS -wd4091" + + # This is intended as a temporary hack to support building with VS2015. + # 'noexcept' used with no exception handling mode specified; + # termination on exception is not guaranteed. Specify /EHsc + CXXFLAGS="$CXXFLAGS -wd4577" + + if test -n "$WIN_UCRT_REDIST_DIR"; then + if test ! -d "$WIN_UCRT_REDIST_DIR"; then + AC_MSG_ERROR([Invalid Windows UCRT Redist directory: ${WIN_UCRT_REDIST_DIR}]) + fi + WIN_UCRT_REDIST_DIR=`cd "$WIN_UCRT_REDIST_DIR" && pwd -W` + fi + ;; + esac + AC_SUBST(MSVS_VERSION) + AC_SUBST(MSVC_HAS_DIA_SDK) + AC_SUBST(MSVC_C_RUNTIME_DLL) + AC_SUBST(MSVC_CXX_RUNTIME_DLL) + + AC_DEFINE(HAVE_SEH_EXCEPTIONS) + + if test -n "$WIN32_REDIST_DIR"; then + if test ! -d "$WIN32_REDIST_DIR"; then + AC_MSG_ERROR([Invalid Win32 Redist directory: ${WIN32_REDIST_DIR}]) + fi + WIN32_REDIST_DIR=`cd "$WIN32_REDIST_DIR" && pwd -W` + fi + + # Check linker version + _LD_FULL_VERSION=`"${LD}" -v 2>&1 | sed -nre "$_MSVC_VER_FILTER"` + _LD_MAJOR_VERSION=`echo ${_LD_FULL_VERSION} | $AWK -F\. '{ print $1 }'` + if test "$_LD_MAJOR_VERSION" != "$_CC_SUITE"; then + AC_MSG_ERROR([The linker major version, $_LD_FULL_VERSION, does not match the compiler suite version, $_CC_SUITE.]) + fi + + INCREMENTAL_LINKER=1 + + # Set midl environment + case "$target" in + i*86-*) + MIDL_FLAGS="${MIDL_FLAGS} -env win32" + ;; + x86_64-*) + MIDL_FLAGS="${MIDL_FLAGS} -env x64" + ;; + esac + + unset _MSVC_VER_FILTER + + AC_CACHE_CHECK(for overridable _RAISE, + ac_cv_have__RAISE, + [ + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + _SAVE_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="${CXXFLAGS} -D_HAS_EXCEPTIONS=0" + AC_TRY_COMPILE([#include <xstddef> + #undef _RAISE + #define _RAISE(x) externallyDefinedFunction((x).what()) + #include <vector> + ], + [std::vector<int> v; return v.at(1);], + ac_cv_have__RAISE="no", + ac_cv_have__RAISE="yes") + CXXFLAGS="$_SAVE_CXXFLAGS" + AC_LANG_RESTORE + ]) + if test "$ac_cv_have__RAISE" = "yes"; then + WRAP_STL_INCLUDES=1 + MOZ_MSVC_STL_WRAP_RAISE=1 + AC_DEFINE(MOZ_MSVC_STL_WRAP_RAISE) + else + AC_MSG_ERROR([Gecko exception wrapping doesn't understand your your MSVC/SDK. Please file a bug describing this error and your build configuration.]) + fi + + if test "$WRAP_STL_INCLUDES" = "1"; then + STL_FLAGS="-I${DIST}/stl_wrappers" + fi + CFLAGS="$CFLAGS -D_HAS_EXCEPTIONS=0" + CXXFLAGS="$CXXFLAGS -D_HAS_EXCEPTIONS=0" + else + # Check w32api version + _W32API_MAJOR_VERSION=`echo $W32API_VERSION | $AWK -F\. '{ print $1 }'` + _W32API_MINOR_VERSION=`echo $W32API_VERSION | $AWK -F\. '{ print $2 }'` + AC_MSG_CHECKING([for w32api version >= $W32API_VERSION]) + AC_TRY_COMPILE([#include <w32api.h>], + #if (__W32API_MAJOR_VERSION < $_W32API_MAJOR_VERSION) || \ + (__W32API_MAJOR_VERSION == $_W32API_MAJOR_VERSION && \ + __W32API_MINOR_VERSION < $_W32API_MINOR_VERSION) + #error "test failed." + #endif + , [ res=yes ], [ res=no ]) + AC_MSG_RESULT([$res]) + if test "$res" != "yes"; then + AC_MSG_ERROR([w32api version $W32API_VERSION or higher required.]) + fi + # Check windres version + AC_MSG_CHECKING([for windres version >= $WINDRES_VERSION]) + _WINDRES_VERSION=`${WINDRES} --version 2>&1 | grep -i windres 2>/dev/null | $AWK '{ print $3 }'` + AC_MSG_RESULT([$_WINDRES_VERSION]) + _WINDRES_MAJOR_VERSION=`echo $_WINDRES_VERSION | $AWK -F\. '{ print $1 }'` + _WINDRES_MINOR_VERSION=`echo $_WINDRES_VERSION | $AWK -F\. '{ print $2 }'` + _WINDRES_RELEASE_VERSION=`echo $_WINDRES_VERSION | $AWK -F\. '{ print $3 }'` + WINDRES_MAJOR_VERSION=`echo $WINDRES_VERSION | $AWK -F\. '{ print $1 }'` + WINDRES_MINOR_VERSION=`echo $WINDRES_VERSION | $AWK -F\. '{ print $2 }'` + WINDRES_RELEASE_VERSION=`echo $WINDRES_VERSION | $AWK -F\. '{ print $3 }'` + if test "$_WINDRES_MAJOR_VERSION" -lt "$WINDRES_MAJOR_VERSION" -o \ + "$_WINDRES_MAJOR_VERSION" -eq "$WINDRES_MAJOR_VERSION" -a \ + "$_WINDRES_MINOR_VERSION" -lt "$WINDRES_MINOR_VERSION" -o \ + "$_WINDRES_MAJOR_VERSION" -eq "$WINDRES_MAJOR_VERSION" -a \ + "$_WINDRES_MINOR_VERSION" -eq "$WINDRES_MINOR_VERSION" -a \ + "$_WINDRES_RELEASE_VERSION" -lt "$WINDRES_RELEASE_VERSION" + then + AC_MSG_ERROR([windres version $WINDRES_VERSION or higher is required to build.]) + fi + + AC_CHECK_PROGS(MIDL, $target-widl widl) + if test -n "$MIDL"; then + case "$target" in + i*86-*) + MIDL_FLAGS="$MIDL_FLAGS --win32 -m32" + ;; + x86_64-*) + MIDL_FLAGS="$MIDL_FLAGS --win64 -m64" + ;; + esac + fi + + # strsafe.h on mingw uses macros for function deprecation that pollutes namespace + # causing problems with local implementations with the same name. + AC_DEFINE(STRSAFE_NO_DEPRECATE) + fi # !GNU_CC + + AC_DEFINE_UNQUOTED(WINVER,0x$WINVER) + AC_DEFINE_UNQUOTED(_WIN32_WINNT,0x$WINVER) + # Require OS features provided by IE 6.0 SP2 (XP SP2) + AC_DEFINE_UNQUOTED(_WIN32_IE,0x0603) + + ;; +esac + +if test -n "$_WIN32_MSVC"; then + SKIP_PATH_CHECKS=1 + SKIP_COMPILER_CHECKS=1 + SKIP_LIBRARY_CHECKS=1 + + # Since we're skipping compiler and library checks, hard-code + # some facts here. + AC_DEFINE(HAVE_IO_H) + AC_DEFINE(HAVE_ISATTY) +fi + +fi # COMPILE_ENVIRONMENT + +AC_SUBST(MIDL_FLAGS) +AC_SUBST(_MSC_VER) + +AC_SUBST(GNU_AS) +AC_SUBST(GNU_LD) +AC_SUBST(GNU_CC) +AC_SUBST(GNU_CXX) + +AC_SUBST(STL_FLAGS) +AC_SUBST(WRAP_STL_INCLUDES) +AC_SUBST(MOZ_MSVC_STL_WRAP_RAISE) + +dnl ======================================================== +dnl Checks for programs. +dnl ======================================================== +if test "$COMPILE_ENVIRONMENT"; then + +dnl ======================================================== +dnl = Mac OS X toolchain support +dnl ======================================================== + +dnl The universal machinery sets UNIVERSAL_BINARY to inform packager.mk +dnl that a universal binary is being produced. +AC_SUBST(UNIVERSAL_BINARY) + +MOZ_ARG_WITH_STRING(unify-dist, +[ --with-unify-dist=dir Location of the dist directory to unify with at packaging time (Mac OS X universal build only)], + UNIFY_DIST=$withval) +if test -n "$UNIVERSAL_BINARY"; then + if test -z "$UNIFY_DIST"; then + AC_MSG_ERROR([You need to provide the --with-unify-dist=dir argument when performing a universal build]) + fi + case "$UNIFY_DIST" in + /*) + ;; + *) + UNIFY_DIST="${MOZ_BUILD_ROOT}/${UNIFY_DIST}" + ;; + esac +fi +AC_SUBST(UNIFY_DIST) + +dnl ======================================================== +dnl = Mac OS X SDK support +dnl ======================================================== +MACOS_SDK_DIR= +MOZ_ARG_WITH_STRING(macos-sdk, +[ --with-macos-sdk=dir Location of platform SDK to use (Mac OS X only)], + MACOS_SDK_DIR=$withval) + +MACOS_PRIVATE_FRAMEWORKS_DIR_DEFAULTED= +MOZ_ARG_WITH_STRING(macos-private-frameworks, +[ --with-macos-private-frameworks=dir Location of private frameworks to use (Mac OS X only)], + MACOS_PRIVATE_FRAMEWORKS_DIR=$withval, + MACOS_PRIVATE_FRAMEWORKS_DIR=/System/Library/PrivateFrameworks + MACOS_PRIVATE_FRAMEWORKS_DEFAULTED=1) + +if test -z "${MACOS_PRIVATE_FRAMEWORKS_DEFAULTED}"; then + if test -z "$CROSS_COMPILE"; then + AC_MSG_WARN([You should only be using --with-macos-private-frameworks when cross-compiling.]) + fi + if test ! -d "$MACOS_PRIVATE_FRAMEWORKS_DIR"; then + AC_MSG_ERROR([PrivateFrameworks directory not found.]) + fi +fi + +dnl MACOS_SDK_DIR will be set to the SDK location whenever one is in use. +AC_SUBST(MACOS_SDK_DIR) +AC_SUBST(MACOS_PRIVATE_FRAMEWORKS_DIR) + +if test "$MACOS_SDK_DIR"; then + dnl Sync this section with the ones in NSPR and NSS. + dnl Changes to the cross environment here need to be accounted for in + dnl the libIDL checks (below) and xpidl build. + + if test ! -d "$MACOS_SDK_DIR"; then + AC_MSG_ERROR([SDK not found. When using --with-macos-sdk, you must +specify a valid SDK. SDKs are installed when the optional cross-development +tools are selected during the Xcode/Developer Tools installation.]) + fi + + CFLAGS="$CFLAGS -isysroot ${MACOS_SDK_DIR}" + CXXFLAGS="$CXXFLAGS -isysroot ${MACOS_SDK_DIR}" + + dnl CPP/CXXCPP needs to be set for MOZ_CHECK_HEADER. + CPP="$CPP -isysroot ${MACOS_SDK_DIR}" + CXXCPP="$CXXCPP -isysroot ${MACOS_SDK_DIR}" + + AC_LANG_SAVE + AC_MSG_CHECKING([for valid compiler/Mac OS X SDK combination]) + AC_LANG_CPLUSPLUS + AC_TRY_COMPILE([#include <new>],[], + result=yes, + result=no) + AC_LANG_RESTORE + AC_MSG_RESULT($result) + + if test "$result" = "no" ; then + AC_MSG_ERROR([The selected compiler and Mac OS X SDK are incompatible.]) + fi +fi + +AC_PATH_XTRA + +XCFLAGS="$X_CFLAGS" + +fi # COMPILE_ENVIRONMENT + +dnl ======================================================== +dnl set the defaults first +dnl ======================================================== +AS_BIN=$AS +AR_EXTRACT='$(AR) x' +AS='$(CC)' +AS_DASH_C_FLAG='-c' +DLL_PREFIX=lib +LIB_PREFIX=lib +DLL_SUFFIX=.so +OBJ_SUFFIX=o +LIB_SUFFIX=a +IMPORT_LIB_SUFFIX= +DIRENT_INO=d_ino +MOZ_USER_DIR=".mozilla" + +MOZ_FIX_LINK_PATHS="-Wl,-rpath-link,${DIST}/bin -Wl,-rpath-link,${prefix}/lib" + +MOZ_FS_LAYOUT=unix + +dnl Configure platform-specific CPU architecture compiler options. +dnl ============================================================== +if test "$COMPILE_ENVIRONMENT"; then + MOZ_ARCH_OPTS +else + if test "$OS_TARGET" = Android -a x"$MOZ_WIDGET_TOOLKIT" != x"gonk"; then + dnl Default Android builds to ARMv7. + MOZ_ARCH=armv7-a + fi +fi # COMPILE_ENVIRONMENT + +dnl ======================================================== +dnl Android libstdc++, placed here so it can use MOZ_ARCH +dnl computed above. +dnl ======================================================== + +MOZ_ANDROID_CPU_ARCH +if test "$COMPILE_ENVIRONMENT"; then + MOZ_ANDROID_STLPORT +fi # COMPILE_ENVIRONMENT + +dnl ======================================================== +dnl Suppress Clang Argument Warnings +dnl ======================================================== +if test -n "${CLANG_CC}${CLANG_CL}"; then + _WARNINGS_CFLAGS="-Qunused-arguments ${_WARNINGS_CFLAGS}" + CPPFLAGS="-Qunused-arguments ${CPPFLAGS}" +fi +if test -n "${CLANG_CXX}${CLANG_CL}"; then + _WARNINGS_CXXFLAGS="-Qunused-arguments ${_WARNINGS_CXXFLAGS}" +fi + +if test -n "$COMPILE_ENVIRONMENT"; then + MOZ_CONFIG_SANITIZE +fi + +dnl ======================================================== +dnl GNU specific defaults +dnl ======================================================== +if test "$GNU_CC"; then + MMX_FLAGS="-mmmx" + SSE_FLAGS="-msse" + SSE2_FLAGS="-msse2" + SSSE3_FLAGS="-mssse3" + # FIXME: Let us build with strict aliasing. bug 414641. + CFLAGS="$CFLAGS -fno-strict-aliasing" + MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -Wl,-h,$(DSO_SONAME) -o $@' + MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -Wl,-h,$(DSO_SONAME) -o $@' + WARNINGS_AS_ERRORS='-Werror' + DSO_CFLAGS='' + DSO_PIC_CFLAGS='-fPIC' + ASFLAGS="$ASFLAGS -fPIC" + AC_MSG_CHECKING([for --noexecstack option to as]) + _SAVE_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -Wa,--noexecstack" + AC_TRY_COMPILE(,,AC_MSG_RESULT([yes]) + [ASFLAGS="$ASFLAGS -Wa,--noexecstack"], + AC_MSG_RESULT([no])) + CFLAGS=$_SAVE_CFLAGS + AC_MSG_CHECKING([for -z noexecstack option to ld]) + _SAVE_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -Wl,-z,noexecstack" + AC_TRY_LINK(,,AC_MSG_RESULT([yes]), + AC_MSG_RESULT([no]) + LDFLAGS=$_SAVE_LDFLAGS) + + AC_MSG_CHECKING([for -z text option to ld]) + _SAVE_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -Wl,-z,text" + AC_TRY_LINK(,,AC_MSG_RESULT([yes]) + [NSPR_LDFLAGS="$NSPR_LDFLAGS -Wl,-z,text"], + AC_MSG_RESULT([no]) + LDFLAGS=$_SAVE_LDFLAGS) + + AC_MSG_CHECKING([for --build-id option to ld]) + _SAVE_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -Wl,--build-id" + AC_TRY_LINK(,,AC_MSG_RESULT([yes]) + [NSPR_LDFLAGS="$NSPR_LDFLAGS -Wl,--build-id"], + AC_MSG_RESULT([no]) + LDFLAGS=$_SAVE_LDFLAGS) + + AC_MSG_CHECKING([for --ignore-unresolved-symbol option to ld]) + HAVE_LINKER_SUPPORT_IGNORE_UNRESOLVED= + _SAVE_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -Wl,--ignore-unresolved-symbol,environ" + AC_TRY_LINK(,,AC_MSG_RESULT([yes]) + [HAVE_LINKER_SUPPORT_IGNORE_UNRESOLVED=1], + AC_MSG_RESULT([no])) + LDFLAGS=$_SAVE_LDFLAGS + + # Check for -mssse3 on $CC + AC_MSG_CHECKING([if toolchain supports -mssse3 option]) + HAVE_TOOLCHAIN_SUPPORT_MSSSE3= + _SAVE_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -mssse3" + AC_TRY_COMPILE([asm ("pmaddubsw %xmm2,%xmm3");],,AC_MSG_RESULT([yes]) + [HAVE_TOOLCHAIN_SUPPORT_MSSSE3=1], + AC_MSG_RESULT([no])) + CFLAGS=$_SAVE_CFLAGS + + # Check for -msse4.1 on $CC + AC_MSG_CHECKING([if toolchain supports -msse4.1 option]) + HAVE_TOOLCHAIN_SUPPORT_MSSE4_1= + _SAVE_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -msse4.1" + AC_TRY_COMPILE([asm ("pmulld %xmm6,%xmm0");],,AC_MSG_RESULT([yes]) + [HAVE_TOOLCHAIN_SUPPORT_MSSE4_1=1], + AC_MSG_RESULT([no])) + CFLAGS=$_SAVE_CFLAGS + + case "${CPU_ARCH}" in + x86 | x86_64) + AC_MSG_CHECKING(for x86 AVX2 asm support in compiler) + AC_TRY_COMPILE([], + [asm volatile ("vpermq \$0xd8,%ymm0,%ymm0 \n");], + result="yes", result="no") + AC_MSG_RESULT("$result") + if test "$result" = "yes"; then + HAVE_X86_AVX2=1 + fi + ;; + + ppc*) + AC_MSG_CHECKING([whether we can enable AltiVec support]) + HAVE_ALTIVEC= + _SAVE_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -maltivec" + AC_TRY_COMPILE(,,AC_MSG_RESULT([yes]) + [HAVE_ALTIVEC=1], + AC_MSG_RESULT([no])) + CFLAGS=$_SAVE_CFLAGS + ;; + esac + + DSO_LDOPTS='-shared' + if test "$GCC_USE_GNU_LD"; then + # Some tools like ASan use a runtime library that is only + # linked against executables, so we must allow undefined + # symbols for shared objects in some cases. + if test -z "$MOZ_NO_WLZDEFS"; then + # Don't allow undefined symbols in libraries + DSO_LDOPTS="$DSO_LDOPTS -Wl,-z,defs" + + # BSDs need `environ' exposed for posix_spawn (bug 753046) + case "$OS_TARGET" in + DragonFly|FreeBSD|NetBSD|OpenBSD) + if test -n "$HAVE_LINKER_SUPPORT_IGNORE_UNRESOLVED"; then + DSO_LDOPTS="$DSO_LDOPTS -Wl,--ignore-unresolved-symbol,environ" + else + DSO_LDOPTS="$DSO_LDOPTS -Wl,--warn-unresolved-symbols" + fi + ;; + esac + fi + fi + + _DEFINES_CFLAGS='-include $(topobjdir)/mozilla-config.h -DMOZILLA_CLIENT' + _USE_CPP_INCLUDE_FLAG=1 + + ASFLAGS="$ASFLAGS $_DEFINES_CFLAGS" + +else + MKSHLIB='$(LD) $(DSO_LDOPTS) -h $(DSO_SONAME) -o $@' + MKCSHLIB='$(LD) $(DSO_LDOPTS) -h $(DSO_SONAME) -o $@' + + DSO_LDOPTS='-shared' + if test "$GNU_LD"; then + # Don't allow undefined symbols in libraries + DSO_LDOPTS="$DSO_LDOPTS -z defs" + fi + + DSO_CFLAGS='' + DSO_PIC_CFLAGS='-KPIC' + _DEFINES_CFLAGS='$(ACDEFINES) -D_MOZILLA_CONFIG_H_ -DMOZILLA_CLIENT' +fi + +if test "$GNU_CXX"; then + # FIXME: Let us build with strict aliasing. bug 414641. + CXXFLAGS="$CXXFLAGS -fno-exceptions -fno-strict-aliasing" + + _DEFINES_CXXFLAGS='-DMOZILLA_CLIENT -include $(topobjdir)/mozilla-config.h' + _USE_CPP_INCLUDE_FLAG=1 + +else + _DEFINES_CXXFLAGS='-DMOZILLA_CLIENT -D_MOZILLA_CONFIG_H_ $(ACDEFINES)' +fi + +dnl ======================================================== +dnl = Use Valgrind +dnl ======================================================== +MOZ_ARG_ENABLE_BOOL(valgrind, +[ --enable-valgrind Enable Valgrind integration hooks (default=no)], + MOZ_VALGRIND=1, + MOZ_VALGRIND= ) +if test -n "$MOZ_VALGRIND"; then + MOZ_CHECK_HEADER([valgrind/valgrind.h], [], + AC_MSG_ERROR( + [--enable-valgrind specified but Valgrind is not installed])) + AC_DEFINE(MOZ_VALGRIND) +fi +AC_SUBST(MOZ_VALGRIND) + +# For profiling builds keep the symbol information +if test "$MOZ_PROFILING" -a -z "$STRIP_FLAGS"; then + case "$OS_TARGET" in + Linux|DragonFly|FreeBSD|NetBSD|OpenBSD) + STRIP_FLAGS="--strip-debug" + ;; + esac +fi + +dnl ======================================================== +dnl = Enable DMD +dnl ======================================================== + +if test "$MOZ_DMD"; then + if test "${CPU_ARCH}" = "arm"; then + CFLAGS="$CFLAGS -funwind-tables" + CXXFLAGS="$CXXFLAGS -funwind-tables" + fi +fi + +dnl ======================================================== +dnl System overrides of the defaults for host +dnl ======================================================== +case "$host" in +*mingw*) + if test -n "$_WIN32_MSVC"; then + HOST_AR=lib + HOST_AR_FLAGS='-NOLOGO -OUT:$@' + HOST_CFLAGS="$HOST_CFLAGS -TC -nologo" + HOST_RANLIB='echo ranlib' + else + HOST_CFLAGS="$HOST_CFLAGS -mwindows" + fi + HOST_CFLAGS="$HOST_CFLAGS -DXP_WIN32 -DXP_WIN -DWIN32 -D_WIN32 -D_CRT_SECURE_NO_WARNINGS" + HOST_OPTIMIZE_FLAGS="${HOST_OPTIMIZE_FLAGS=-O2}" + HOST_BIN_SUFFIX=.exe + + case "${host_cpu}" in + i*86) + if test -n "$_WIN32_MSVC"; then + HOST_LDFLAGS="$HOST_LDFLAGS -MACHINE:X86" + fi + ;; + x86_64) + if test -n "$_WIN32_MSVC"; then + HOST_LDFLAGS="$HOST_LDFLAGS -MACHINE:X64" + fi + HOST_CFLAGS="$HOST_CFLAGS -D_AMD64_" + ;; + esac + ;; + +*-darwin*) + HOST_CFLAGS="$HOST_CFLAGS -DXP_UNIX -DXP_MACOSX" + HOST_OPTIMIZE_FLAGS="${HOST_OPTIMIZE_FLAGS=-O3}" + ;; + +*-linux*|*-kfreebsd*-gnu|*-gnu*) + HOST_CFLAGS="$HOST_CFLAGS -DXP_UNIX" + HOST_OPTIMIZE_FLAGS="${HOST_OPTIMIZE_FLAGS=-O3}" + ;; + +*) + HOST_CFLAGS="$HOST_CFLAGS -DXP_UNIX" + HOST_OPTIMIZE_FLAGS="${HOST_OPTIMIZE_FLAGS=-O2}" + ;; +esac + +dnl ============================================================== +dnl Get mozilla version from central milestone file +dnl ============================================================== +MOZILLA_VERSION=`$PYTHON $srcdir/python/mozbuild/mozbuild/milestone.py --topsrcdir $srcdir` +MOZILLA_UAVERSION=`$PYTHON $srcdir/python/mozbuild/mozbuild/milestone.py --topsrcdir $srcdir --uaversion` +MOZILLA_SYMBOLVERSION=`$PYTHON $srcdir/python/mozbuild/mozbuild/milestone.py --topsrcdir $srcdir --symbolversion` +if test -z "$MOZILLA_VERSION"; then + AC_MSG_ERROR([failed to read version info from milestone file]) +fi + +dnl Get version of various core apps from the version files. +FIREFOX_VERSION=`cat $_topsrcdir/browser/config/version.txt` +FIREFOX_VERSION_DISPLAY=`cat $_topsrcdir/browser/config/version_display.txt` + +if test -z "$FIREFOX_VERSION"; then + AC_MSG_ERROR([FIREFOX_VERSION is unexpectedly blank.]) +fi + +if test -z "$FIREFOX_VERSION_DISPLAY"; then + AC_MSG_ERROR([FIREFOX_VERSION_DISPLAY is unexpectedly blank.]) +fi + +AC_DEFINE_UNQUOTED(MOZILLA_VERSION,"$MOZILLA_VERSION") +AC_DEFINE_UNQUOTED(MOZILLA_VERSION_U,$MOZILLA_VERSION) +AC_DEFINE_UNQUOTED(MOZILLA_UAVERSION,"$MOZILLA_UAVERSION") +AC_SUBST(MOZILLA_SYMBOLVERSION) + +MOZ_DOING_LTO(lto_is_enabled) + +dnl ======================================================== +dnl System overrides of the defaults for target +dnl ======================================================== + +case "$target" in +*-darwin*) + MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -o $@' + MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -o $@' + MOZ_OPTIMIZE_FLAGS="-O3" + CXXFLAGS="$CXXFLAGS -stdlib=libc++" + DLL_SUFFIX=".dylib" + DSO_LDOPTS='' + STRIP_FLAGS="$STRIP_FLAGS -x -S" + # Ensure that if we're targeting iOS an SDK was provided. + AC_CACHE_CHECK(for iOS target, + ac_cv_ios_target, + [AC_TRY_COMPILE([#include <TargetConditionals.h> +#if !(TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR) +#error not iOS +#endif], + [], + ac_cv_ios_target="yes", + ac_cv_ios_target="no")]) + if test "$ac_cv_ios_target" = "yes" -a -z $MOZ_IOS; then + AC_MSG_ERROR([targeting iOS but not using an iOS SDK?]) + fi + if test -n "$MOZ_IOS"; then + direct_nspr_config=1 + else + # The ExceptionHandling framework is needed for Objective-C exception + # logging code in nsObjCExceptions.h. Currently we only use that in debug + # builds. + MOZ_DEBUG_LDFLAGS="$MOZ_DEBUG_LDFLAGS -framework ExceptionHandling"; + fi + + if test "x$lto_is_enabled" = "xyes"; then + echo "Skipping -dead_strip because lto is enabled." + dnl DTrace and -dead_strip don't interact well. See bug 403132. + dnl =================================================================== + elif test "x$enable_dtrace" = "xyes"; then + echo "Skipping -dead_strip because DTrace is enabled. See bug 403132." + else + dnl check for the presence of the -dead_strip linker flag + AC_MSG_CHECKING([for -dead_strip option to ld]) + _SAVE_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -Wl,-dead_strip" + AC_TRY_LINK(,[return 0;],_HAVE_DEAD_STRIP=1,_HAVE_DEAD_STRIP=) + if test -n "$_HAVE_DEAD_STRIP" ; then + AC_MSG_RESULT([yes]) + MOZ_OPTIMIZE_LDFLAGS="-Wl,-dead_strip" + else + AC_MSG_RESULT([no]) + fi + + LDFLAGS=$_SAVE_LDFLAGS + fi + + dnl With newer linkers we need to pass -allow_heap_execute because of + dnl Microsoft Silverlight (5.1.10411.0 at least). + AC_MSG_CHECKING([for -allow_heap_execute option to ld]) + _SAVE_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -Wl,-allow_heap_execute" + AC_TRY_LINK(,[return 0;],_HAVE_ALLOW_HEAP_EXECUTE=1, + _HAVE_ALLOW_HEAP_EXECUTE=) + if test -n "$_HAVE_ALLOW_HEAP_EXECUTE" ; then + AC_MSG_RESULT([yes]) + MOZ_ALLOW_HEAP_EXECUTE_FLAGS="-Wl,-allow_heap_execute" + else + AC_MSG_RESULT([no]) + fi + LDFLAGS=$_SAVE_LDFLAGS + + MOZ_FIX_LINK_PATHS="-Wl,-executable_path,${DIST}/bin" + ;; + +*-android*|*-linuxandroid*) + AC_DEFINE(NO_PW_GECOS) + if test -n "$gonkdir"; then + _PLATFORM_HAVE_RIL=1 + MOZ_SYNTH_PICO=1 + else + if test "$COMPILE_ENVIRONMENT"; then + MOZ_LINKER=1 + fi + fi + + MOZ_GFX_OPTIMIZE_MOBILE=1 + MOZ_OPTIMIZE_FLAGS="-Os" + if test -z "$CLANG_CC"; then + MOZ_OPTIMIZE_FLAGS="-freorder-blocks -fno-reorder-functions $MOZ_OPTIMIZE_FLAGS" + fi + ;; + +*-*linux*) + if test "$GNU_CC" -o "$GNU_CXX"; then + MOZ_PGO_OPTIMIZE_FLAGS="-O3" + MOZ_OPTIMIZE_FLAGS="-Os" + if test -z "$CLANG_CC"; then + MOZ_OPTIMIZE_FLAGS="-freorder-blocks $MOZ_OPTIMIZE_FLAGS" + fi + fi + + case "${target_cpu}" in + alpha*) + CFLAGS="$CFLAGS -mieee" + CXXFLAGS="$CXXFLAGS -mieee" + ;; + esac + ;; +*-mingw*) + DSO_CFLAGS= + DSO_PIC_CFLAGS= + DLL_SUFFIX=.dll + RC=rc.exe + # certain versions of cygwin's makedepend barf on the + # #include <string> vs -I./dist/include/string issue so don't use it + if test -n "$GNU_CC" -o -n "$CLANG_CC"; then + CC="$CC -mwindows" + CXX="$CXX -mwindows" + CPP="$CPP -mwindows" + CFLAGS="$CFLAGS -mms-bitfields" + CXXFLAGS="$CXXFLAGS -mms-bitfields" + DSO_LDOPTS='-shared' + MKSHLIB='$(CXX) $(DSO_LDOPTS) -o $@' + MKCSHLIB='$(CC) $(DSO_LDOPTS) -o $@' + RC='$(WINDRES)' + # Use static libgcc and libstdc++ + LDFLAGS="$LDFLAGS -static" + NSPR_LDFLAGS="$NSPR_LDFLAGS -static-libgcc" + # Use temp file for windres (bug 213281) + RCFLAGS='-O coff --use-temp-file' + # mingw doesn't require kernel32, user32, and advapi32 explicitly + LIBS="$LIBS -luuid -lgdi32 -lwinmm -lwsock32 -luserenv -lsecur32" + MOZ_FIX_LINK_PATHS= + DLL_PREFIX= + IMPORT_LIB_SUFFIX=a + + WIN32_CONSOLE_EXE_LDFLAGS=-mconsole + WIN32_GUI_EXE_LDFLAGS=-mwindows + + # GCC/binutils can't link to a function if we try to include dllexport function + # in the same library as dllimport caller. To work around it, we build NSPR + # and NSS with -mnop-fun-dllimport flag. The drawback of this solution is that + # function thunks need to be generated for cross-DLL calls. + MOZ_FOLD_LIBS_FLAGS=-mnop-fun-dllimport + else + TARGET_COMPILER_ABI=msvc + HOST_LD='$(LD)' + if test "$AS_BIN"; then + AS="$(basename "$AS_BIN")" + fi + AR='lib' + AR_FLAGS='-NOLOGO -OUT:$@' + AR_EXTRACT= + RANLIB='echo not_ranlib' + STRIP='echo not_strip' + PKG_SKIP_STRIP=1 + OBJ_SUFFIX=obj + LIB_SUFFIX=lib + DLL_PREFIX= + LIB_PREFIX= + IMPORT_LIB_SUFFIX=lib + MKSHLIB='$(LD) -NOLOGO -DLL -OUT:$@ -PDB:$(LINK_PDBFILE) $(DSO_LDOPTS)' + MKCSHLIB='$(LD) -NOLOGO -DLL -OUT:$@ -PDB:$(LINK_PDBFILE) $(DSO_LDOPTS)' + dnl Set subsystem version 5 for Windows XP. + if test "$CPU_ARCH" = "x86"; then + WIN32_SUBSYSTEM_VERSION=5.01 + else + WIN32_SUBSYSTEM_VERSION=6.01 + fi + WIN32_CONSOLE_EXE_LDFLAGS=-SUBSYSTEM:CONSOLE,$WIN32_SUBSYSTEM_VERSION + WIN32_GUI_EXE_LDFLAGS=-SUBSYSTEM:WINDOWS,$WIN32_SUBSYSTEM_VERSION + DSO_LDOPTS=-SUBSYSTEM:WINDOWS,$WIN32_SUBSYSTEM_VERSION + _USE_CPP_INCLUDE_FLAG=1 + _DEFINES_CFLAGS='-FI $(topobjdir)/mozilla-config.h -DMOZILLA_CLIENT' + _DEFINES_CXXFLAGS='-FI $(topobjdir)/mozilla-config.h -DMOZILLA_CLIENT' + CFLAGS="$CFLAGS -W3 -Gy -Zc:inline" + CXXFLAGS="$CXXFLAGS -W3 -Gy -Zc:inline" + if test -z "$CLANG_CL"; then + CFLAGS="$CFLAGS -utf-8" + CXXFLAGS="$CXXFLAGS -utf-8" + fi + if test "$CPU_ARCH" = "x86"; then + dnl VS2012+ defaults to -arch:SSE2. We want to target nothing + dnl more recent, so set that explicitly here unless another + dnl target arch has already been set. + if test -z `echo $CFLAGS | grep -i [-/]arch:`; then + CFLAGS="$CFLAGS -arch:SSE2" + fi + if test -z `echo $CXXFLAGS | grep -i [-/]arch:`; then + CXXFLAGS="$CXXFLAGS -arch:SSE2" + fi + SSE_FLAGS="-arch:SSE" + SSE2_FLAGS="-arch:SSE2" + dnl MSVC allows the use of intrinsics without any flags + dnl and doesn't have a separate arch for SSSE3 + SSSE3_FLAGS="-arch:SSE2" + fi + dnl clang-cl requires appropriate flags to enable SSSE3 support + dnl on all architectures. + if test -n "$CLANG_CL"; then + SSSE3_FLAGS="-mssse3" + fi + dnl VS2013+ requires -FS when parallel building by make -jN. + dnl If nothing, compiler sometimes causes C1041 error. + CFLAGS="$CFLAGS -FS" + CXXFLAGS="$CXXFLAGS -FS" + dnl VS2013+ supports -Gw for better linker optimizations. + dnl http://blogs.msdn.com/b/vcblog/archive/2013/09/11/introducing-gw-compiler-switch.aspx + dnl Disabled on ASan because it causes false-positive ODR violations. + if test -z "$MOZ_ASAN"; then + CFLAGS="$CFLAGS -Gw" + CXXFLAGS="$CXXFLAGS -Gw" + fi + # khuey says we can safely ignore MSVC warning C4251 + # MSVC warning C4244 (implicit type conversion may lose data) warns + # and requires workarounds for perfectly valid code. Also, GCC/clang + # don't warn about it by default. So for consistency/sanity, we turn + # it off on MSVC, too. + # MSVC warning C4267 warns for narrowing type conversions from size_t + # to 32-bit integer types on 64-bit platforms. Since this is virtually + # the same thing as C4244, we disable C4267, too. + # MSVC warning C4345 warns of newly conformant behavior as of VS2003. + # MSVC warning C4351 warns of newly conformant behavior as of VS2005. + # MSVC warning C4800 warns when a value is implicitly cast to bool, + # because this also forces narrowing to a single byte, which can be a + # perf hit. But this matters so little in practice (and often we want + # that behavior) that it's better to turn it off. + # MSVC warning wd4595 warns non-member operator new or delete functions + # may not be declared inline, as of VS2015 Update 2. + CFLAGS="$CFLAGS -wd4244 -wd4267" + CXXFLAGS="$CXXFLAGS -wd4251 -wd4244 -wd4267 -wd4345 -wd4351 -wd4800 -wd4595" + if test -n "$CLANG_CL"; then + # XXX We should combine some of these with our generic GCC-style + # warning checks. + # + # Suppress the clang-cl warning for the inline 'new' and 'delete' in mozalloc + CXXFLAGS="$CXXFLAGS -Wno-inline-new-delete" + # We use offsetof on non-POD objects all the time. + # We also suppress this warning on other platforms. + CXXFLAGS="$CXXFLAGS -Wno-invalid-offsetof" + # MFBT thinks clang-cl supports constexpr, which it does, but + # not everything in Windows C++ headers supports constexpr + # as we might expect until MSVC 2015, so turn off this warning + # for now. + CXXFLAGS="$CXXFLAGS -Wno-invalid-constexpr" + # This warns for reasonable things like: + # enum { X = 0xffffffffU }; + # which is annoying for IDL headers. + CXXFLAGS="$CXXFLAGS -Wno-microsoft-enum-value" + # This warns for cases that would be reached by the Microsoft + # #include rules, but also currently warns on cases that would + # *also* be reached by standard C++ include rules. That + # behavior doesn't seem useful, so we turn it off. + CXXFLAGS="$CXXFLAGS -Wno-microsoft-include" + # We normally error out on unknown pragmas, but since clang-cl + # claims to be MSVC, it would be difficult to add + # #if defined(_MSC_VER) && !defined(__clang__) everywhere we + # use such pragmas, so just ignore them. + CFLAGS="$CFLAGS -Wno-unknown-pragmas" + CXXFLAGS="$CXXFLAGS -Wno-unknown-pragmas" + # We get errors about various #pragma intrinsic directives from + # clang-cl, and we don't need to hear about those. + CFLAGS="$CFLAGS -Wno-ignored-pragmas" + CXXFLAGS="$CXXFLAGS -Wno-ignored-pragmas" + # clang-cl's Intrin.h marks things like _ReadWriteBarrier + # as __attribute((__deprecated__)). This is nice to know, + # but since we don't get the equivalent warning from MSVC, + # let's just ignore it. + CFLAGS="$CFLAGS -Wno-deprecated-declarations" + CXXFLAGS="$CXXFLAGS -Wno-deprecated-declarations" + # We use a function like: + # __declspec(noreturn) __inline void f() {} + # which -Winvalid-noreturn complains about. Again, MSVC seems + # OK with it, so let's silence the warning. + CFLAGS="$CFLAGS -Wno-invalid-noreturn" + CXXFLAGS="$CXXFLAGS -Wno-invalid-noreturn" + # Missing |override| on virtual function declarations isn't + # something that MSVC currently warns about. + CXXFLAGS="$CXXFLAGS -Wno-inconsistent-missing-override" + # We use -DHAS_EXCEPTIONS=0, which removes the |throw()| + # declaration on |operator delete(void*)|. However, clang-cl + # must internally declare |operator delete(void*)| differently, + # which causes this warning for virtually every file in the + # tree. clang-cl doesn't support -fno-exceptions or equivalent, + # so there doesn't seem to be any way to convince clang-cl to + # declare |delete| differently. Therefore, suppress this + # warning. + CXXFLAGS="$CXXFLAGS -Wno-implicit-exception-spec-mismatch" + # At least one MSVC header and several headers in-tree have + # unused typedefs, so turn this on. + CXXFLAGS="$CXXFLAGS -Wno-unused-local-typedef" + # Several JS engine header files use __declspec(dllimport) on + # classes, and clang-cl helpfully warns about its non-support + # for such cases. We're not particularly worried about that, + # so ignore that warning. + CXXFLAGS="$CXXFLAGS -Wno-ignored-attributes" + fi + # make 'foo == bar;' error out + CFLAGS="$CFLAGS -we4553" + CXXFLAGS="$CXXFLAGS -we4553" + LIBS="$LIBS kernel32.lib user32.lib gdi32.lib winmm.lib wsock32.lib advapi32.lib secur32.lib" + MOZ_DEBUG_LDFLAGS='-DEBUG -DEBUGTYPE:CV' + WARNINGS_AS_ERRORS='-WX' + MOZ_OPTIMIZE_FLAGS='-O1 -Oi' + MOZ_FIX_LINK_PATHS= + LDFLAGS="$LDFLAGS -LARGEADDRESSAWARE -NXCOMPAT" + if test -z "$DEVELOPER_OPTIONS"; then + LDFLAGS="$LDFLAGS -RELEASE" + fi + dnl For profile-guided optimization + PROFILE_GEN_CFLAGS="-GL" + num_cores=$($PYTHON -c 'import multiprocessing; print(min(8,multiprocessing.cpu_count()))') + cgthreads="-CGTHREADS:${num_cores}" + PROFILE_GEN_LDFLAGS="-LTCG:PGINSTRUMENT -PogoSafeMode $cgthreads" + dnl XXX: PGO builds can fail with warnings treated as errors, + dnl specifically "no profile data available" appears to be + dnl treated as an error sometimes. This might be a consequence + dnl of using WARNINGS_AS_ERRORS in some modules, combined + dnl with the linker doing most of the work in the whole-program + dnl optimization/PGO case. I think it's probably a compiler bug, + dnl but we work around it here. + PROFILE_USE_CFLAGS="-GL -wd4624 -wd4952" + dnl XXX: should be -LTCG:PGOPTIMIZE, but that fails on libxul. + dnl Probably also a compiler bug, but what can you do? + PROFILE_USE_LDFLAGS="-LTCG:PGUPDATE $cgthreads" + LDFLAGS="$LDFLAGS -DYNAMICBASE" + RCFLAGS="-nologo" + if test "$CC_VERSION" = "18.00.31101"; then + dnl Use MaxILKSize as a workaround for LNK1248 in VS2013update4 + dnl See https://connect.microsoft.com/VisualStudio/feedback/details/1044914/fatal-error-lnk1248 + LDFLAGS="$LDFLAGS -MaxILKSize:0x7FF00000" + fi + dnl Minimum reqiurement of Gecko is VS2010 or later which supports + dnl both SSSE3 and SSE4.1. + HAVE_TOOLCHAIN_SUPPORT_MSSSE3=1 + HAVE_TOOLCHAIN_SUPPORT_MSSE4_1=1 + dnl allow AVX2 code from VS2012 + HAVE_X86_AVX2=1 + fi + AC_DEFINE(WIN32_LEAN_AND_MEAN) + dnl See http://support.microsoft.com/kb/143208 to use STL + AC_DEFINE(NOMINMAX) + BIN_SUFFIX='.exe' + MOZ_USER_DIR="Mozilla" + + case "$host_os" in + cygwin*|msvc*|mks*) + 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.]) + ;; + esac + + case "$target" in + i*86-*) + if test -n "$GNU_CC"; then + CFLAGS="$CFLAGS -mstackrealign -fno-keep-inline-dllexport" + CXXFLAGS="$CXXFLAGS -mstackrealign -fno-keep-inline-dllexport" + LDFLAGS="$LDFLAGS -Wl,--enable-stdcall-fixup -Wl,--large-address-aware" + else + DSO_LDOPTS="$DSO_LDOPTS -MACHINE:X86" + LDFLAGS="$LDFLAGS -SAFESEH" + fi + + AC_DEFINE(_X86_) + ;; + x86_64-*) + if test -n "$_WIN32_MSVC"; then + DSO_LDOPTS="$DSO_LDOPTS -MACHINE:X64" + fi + AC_DEFINE(_AMD64_) + ;; + *) + AC_DEFINE(_CPU_ARCH_NOT_DEFINED) + ;; + esac + ;; + +*-netbsd*) + DSO_CFLAGS='' + CFLAGS="$CFLAGS -Dunix" + CXXFLAGS="$CXXFLAGS -Dunix" + if $CC -E - -dM </dev/null | grep __ELF__ >/dev/null; then + DLL_SUFFIX=".so" + DSO_PIC_CFLAGS='-fPIC -DPIC' + DSO_LDOPTS='-shared' + BIN_FLAGS='-Wl,--export-dynamic' + else + DSO_PIC_CFLAGS='-fPIC -DPIC' + DLL_SUFFIX=".so.1.0" + DSO_LDOPTS='-shared' + fi + # This will fail on a.out systems prior to 1.5.1_ALPHA. + if test "$LIBRUNPATH"; then + DSO_LDOPTS="-Wl,-R$LIBRUNPATH $DSO_LDOPTS" + fi + MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -Wl,-soname,$(DSO_SONAME) -o $@' + MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -Wl,-soname,$(DSO_SONAME) -o $@' + ;; + +*-openbsd*) + if test "$SO_VERSION"; then + DLL_SUFFIX=".so.$SO_VERSION" + else + DLL_SUFFIX=".so.1.0" + fi + if test -z "$X11BASE"; then + X11BASE=/usr/X11R6 + fi + MOZ_FIX_LINK_PATHS="$MOZ_FIX_LINK_PATHS -Wl,-rpath-link,${X11BASE}/lib" + DSO_CFLAGS='' + DSO_PIC_CFLAGS='-fPIC' + DSO_LDOPTS='-shared -fPIC' + if test "$LIBRUNPATH"; then + DSO_LDOPTS="-R$LIBRUNPATH $DSO_LDOPTS" + fi + ;; + +esac + +AC_SUBST_LIST(MMX_FLAGS) +AC_SUBST_LIST(SSE_FLAGS) +AC_SUBST_LIST(SSE2_FLAGS) +AC_SUBST_LIST(SSSE3_FLAGS) + +AC_SUBST(MOZ_LINKER) +if test -n "$MOZ_LINKER"; then + AC_DEFINE(MOZ_LINKER) + MOZ_LINKER_EXTRACT=1 + AC_CHECK_PROGS(XZ, xz) +fi + +dnl Only one oddball right now (QNX), but this gives us flexibility +dnl if any other platforms need to override this in the future. +AC_DEFINE_UNQUOTED(D_INO,$DIRENT_INO) + +dnl ======================================================== +dnl = Flags to strip unused symbols from .so components and +dnl = to export jemalloc symbols when linking a program +dnl ======================================================== +case "$target" in + *-linux*|*-kfreebsd*-gnu|*-gnu*) + MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS='-Wl,--version-script -Wl,$(BUILD_TOOLS)/gnu-ld-scripts/components-version-script' + ;; + *-darwin*) + MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS='-Wl,-exported_symbols_list -Wl,$(BUILD_TOOLS)/gnu-ld-scripts/components-export-list' + ;; + *-mingw*) + if test -n "$GNU_CC"; then + MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS='-Wl,--version-script,$(BUILD_TOOLS)/gnu-ld-scripts/components-version-script' + fi + ;; +esac + +if test -z "$COMPILE_ENVIRONMENT"; then + SKIP_COMPILER_CHECKS=1 + SKIP_LIBRARY_CHECKS=1 + PKG_SKIP_STRIP=1 + MOZ_DEBUGGING_OPTS +else + MOZ_COMPILER_OPTS +fi # COMPILE_ENVIRONMENT + +if test -z "$SKIP_COMPILER_CHECKS"; then +dnl Checks for typedefs, structures, and compiler characteristics. +dnl ======================================================== +AC_C_CONST +AC_TYPE_MODE_T +AC_TYPE_OFF_T +AC_TYPE_PID_T +AC_TYPE_SIZE_T +AC_LANG_CPLUSPLUS +AC_LANG_C + +AC_LANG_CPLUSPLUS + +MOZ_CXX11 + +AC_LANG_C + +case "${OS_TARGET}" in +Darwin) + ;; +*) + STL_FLAGS="-I${DIST}/stl_wrappers" + WRAP_STL_INCLUDES=1 + ;; +esac + +dnl Checks for header files. +dnl ======================================================== +AC_HEADER_DIRENT +case "$target_os" in +bitrig*|dragonfly*|freebsd*|openbsd*) +# for stuff like -lXshm + CPPFLAGS="${CPPFLAGS} ${X_CFLAGS}" + ;; +esac + +dnl Check for sin_len and sin6_len - used by SCTP; only appears in Mac/*BSD generally +AC_CACHE_CHECK(for sockaddr_in.sin_len, + ac_cv_sockaddr_in_sin_len, + [AC_TRY_COMPILE([#ifdef HAVE_SYS_TYPES_H + #include <sys/types.h> + #endif + #include <netinet/in.h> + struct sockaddr_in x; + void *foo = (void*) &x.sin_len;], + [], + [ac_cv_sockaddr_in_sin_len=true], + [ac_cv_sockaddr_in_sin_len=false])]) +if test "$ac_cv_sockaddr_in_sin_len" = true ; then + AC_DEFINE(HAVE_SIN_LEN) +dnl HAVE_CONN_LEN must be the same as HAVE_SIN_LEN (and HAVE_SIN6_LEN too) + AC_DEFINE(HAVE_SCONN_LEN) +fi + +AC_CACHE_CHECK(for sockaddr_in6.sin6_len, + ac_cv_sockaddr_in6_sin6_len, + [AC_TRY_COMPILE([#ifdef HAVE_SYS_TYPES_H + #include <sys/types.h> + #endif + #include <netinet/in.h> + struct sockaddr_in6 x; + void *foo = (void*) &x.sin6_len;], + [], + [ac_cv_sockaddr_in6_sin6_len=true], + [ac_cv_sockaddr_in6_sin6_len=false])]) +if test "$ac_cv_sockaddr_in6_sin6_len" = true ; then + AC_DEFINE(HAVE_SIN6_LEN) +fi + +AC_CACHE_CHECK(for sockaddr.sa_len, + ac_cv_sockaddr_sa_len, + [AC_TRY_COMPILE([#ifdef HAVE_SYS_TYPES_H + #include <sys/types.h> + #endif + #include <sys/socket.h> + struct sockaddr x; + void *foo = (void*) &x.sa_len;], + [], + [ac_cv_sockaddr_sa_len=true], + [ac_cv_sockaddr_sa_len=false])]) +if test "$ac_cv_sockaddr_sa_len" = true ; then + AC_DEFINE(HAVE_SA_LEN) +fi + +MOZ_ARG_ENABLE_BOOL(dtrace, + [ --enable-dtrace build with dtrace support if available (default=no)], + [enable_dtrace="yes"],) +if test "x$enable_dtrace" = "xyes"; then + MOZ_CHECK_HEADER(sys/sdt.h, HAVE_DTRACE=1) + if test -n "$HAVE_DTRACE"; then + AC_DEFINE(INCLUDE_MOZILLA_DTRACE) + else + AC_MSG_ERROR([dtrace enabled but sys/sdt.h not found]); + fi +fi +AC_SUBST(HAVE_DTRACE) + +dnl Checks for libraries. +dnl ======================================================== +AC_CHECK_LIB(c_r, gethostbyname_r) + +dnl We don't want to link with libdl even if it's present on OS X, since +dnl it's not used and not part of the default installation. OS/2 has dlfcn +dnl in libc. +dnl We don't want to link against libm or libpthread on Darwin since +dnl they both are just symlinks to libSystem and explicitly linking +dnl against libSystem causes issues when debugging (see bug 299601). +case $target in +*-darwin*) + ;; +*) + AC_SEARCH_LIBS(dlopen, dl, + MOZ_CHECK_HEADER(dlfcn.h, + AC_DEFINE(HAVE_DLOPEN))) + ;; +esac + +_SAVE_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -D_GNU_SOURCE" +AC_CHECK_FUNCS(dladdr memmem) +CFLAGS="$_SAVE_CFLAGS" + +if test ! "$GNU_CXX"; then + AC_CHECK_LIB(C, demangle) +fi + +AC_CHECK_LIB(socket, socket) + +XLDFLAGS="$X_LIBS" +XLIBS="$X_EXTRA_LIBS" + +dnl ======================================================== +dnl Checks for X libraries. +dnl Ordering is important. +dnl Xt is dependent upon SM as of X11R6 +dnl ======================================================== +if test -n "$MOZ_X11"; then + AC_DEFINE_UNQUOTED(FUNCPROTO,15) + _SAVE_LDFLAGS="$LDFLAGS" + _SAVE_LIBS="$LIBS" + LDFLAGS="$XLDFLAGS $LDFLAGS" + AC_CHECK_LIB(X11, XDrawLines, [XLIBS="-lX11 $XLIBS"], + [MISSING_X="$MISSING_X -lX11"], $XLIBS) + AC_CHECK_LIB(Xext, XextAddDisplay, [XEXT_LIBS="-lXext"], + [MISSING_X="$MISSING_X -lXext"], $XLIBS) + + AC_CHECK_LIB(Xt, XtFree, [ XT_LIBS="-lXt"], [ + unset ac_cv_lib_Xt_XtFree + AC_CHECK_LIB(ICE, IceFlush, [XT_LIBS="-lICE $XT_LIBS"],, $XT_LIBS $XLIBS) + AC_CHECK_LIB(SM, SmcCloseConnection, [XT_LIBS="-lSM $XT_LIBS"],, $XT_LIBS $XLIBS) + AC_CHECK_LIB(Xt, XtFree, [ XT_LIBS="-lXt $XT_LIBS"], + [MISSING_X="$MISSING_X -lXt"], $X_PRE_LIBS $XT_LIBS $XLIBS) + ]) + + dnl ======================================================== + dnl = Check for xcb + dnl ======================================================== + AC_CHECK_LIB(xcb, xcb_connect, [XLIBS="-lxcb $XLIBS"], + [MISSING_X="$MISSING_X -lxcb"], $XLIBS) + AC_CHECK_LIB(xcb-shm, xcb_shm_query_version, [XLIBS="-lxcb-shm $XLIBS"], + [MISSING_X="$MISSING_X -lxcb-shm"], $XLIBS) + AC_CHECK_LIB(X11-xcb, XGetXCBConnection, [XLIBS="-lX11-xcb $XLIBS"], + [MISSING_X="$MISSING_X -lX11-xcb"], $XLIBS) + + dnl ======================================================== + dnl = Check for Xss + dnl ======================================================== + MOZ_CHECK_HEADER(X11/extensions/scrnsaver.h, + AC_CHECK_LIB(Xss, XScreenSaverQueryInfo, + [XSS_LIBS="-lXss $XEXT_LIBS $XLIBS" + AC_DEFINE(HAVE_LIBXSS)],, $XEXT_LIBS $XLIBS)) + + LDFLAGS="$_SAVE_LDFLAGS" + LIBS="$_SAVE_LIBS" +fi # $MOZ_X11 + +AC_SUBST_LIST(XCFLAGS) +AC_SUBST_LIST(XLDFLAGS) +AC_SUBST_LIST(XLIBS) +AC_SUBST_LIST(XEXT_LIBS) +AC_SUBST_LIST(XT_LIBS) +AC_SUBST_LIST(XSS_LIBS) + +dnl ======================================================== +dnl = pthread support +dnl = Start by checking whether the system support pthreads +dnl ======================================================== +case "$target_os" in +darwin*) + MOZ_USE_PTHREADS=1 + ;; +*) + AC_CHECK_LIB(pthreads, pthread_create, + MOZ_USE_PTHREADS=1 _PTHREAD_LDFLAGS="-lpthreads", + AC_CHECK_LIB(pthread, pthread_create, + MOZ_USE_PTHREADS=1 _PTHREAD_LDFLAGS="-lpthread", + AC_CHECK_LIB(c_r, pthread_create, + MOZ_USE_PTHREADS=1 _PTHREAD_LDFLAGS="-lc_r", + AC_CHECK_LIB(c, pthread_create, + MOZ_USE_PTHREADS=1 + ) + ) + ) + ) + ;; +esac + +dnl ======================================================== +dnl Check the command line for --with-pthreads +dnl ======================================================== +MOZ_ARG_WITH_BOOL(pthreads, +[ --with-pthreads Force use of system pthread library with NSPR ], +[ if test "$MOZ_USE_PTHREADS"x = x; then + AC_MSG_ERROR([ --with-pthreads specified for a system without pthread support ]); +fi], + MOZ_USE_PTHREADS= + _PTHREAD_LDFLAGS= +) + +dnl ======================================================== +dnl Do the platform specific pthread hackery +dnl ======================================================== +if test "$MOZ_USE_PTHREADS"x != x +then + dnl + dnl See if -pthread is supported. + dnl + rm -f conftest* + ac_cv_have_dash_pthread=no + AC_MSG_CHECKING(whether ${CC-cc} accepts -pthread) + echo 'int main() { return 0; }' | cat > conftest.c + ${CC-cc} -pthread -o conftest conftest.c > conftest.out 2>&1 + if test $? -eq 0; then + if test -z "`egrep -i '(unrecognize|unknown)' conftest.out | grep pthread`" -a -z "`egrep -i '(error|incorrect)' conftest.out`" ; then + ac_cv_have_dash_pthread=yes + case "$target_os" in + freebsd*) +# Freebsd doesn't use -pthread for compiles, it uses them for linking + ;; + *) + CFLAGS="$CFLAGS -pthread" + CXXFLAGS="$CXXFLAGS -pthread" + ;; + esac + fi + fi + rm -f conftest* + AC_MSG_RESULT($ac_cv_have_dash_pthread) + + dnl + dnl See if -pthreads is supported. + dnl + ac_cv_have_dash_pthreads=no + if test "$ac_cv_have_dash_pthread" = "no"; then + AC_MSG_CHECKING(whether ${CC-cc} accepts -pthreads) + echo 'int main() { return 0; }' | cat > conftest.c + ${CC-cc} -pthreads -o conftest conftest.c > conftest.out 2>&1 + if test $? -eq 0; then + if test -z "`egrep -i '(unrecognize|unknown)' conftest.out | grep pthreads`" -a -z "`egrep -i '(error|incorrect)' conftest.out`" ; then + ac_cv_have_dash_pthreads=yes + CFLAGS="$CFLAGS -pthreads" + CXXFLAGS="$CXXFLAGS -pthreads" + fi + fi + rm -f conftest* + AC_MSG_RESULT($ac_cv_have_dash_pthreads) + fi + + case "$target" in + *-*-freebsd*) + AC_DEFINE(_REENTRANT) + AC_DEFINE(_THREAD_SAFE) + dnl -pthread links in -lpthread, so don't specify it explicitly. + if test "$ac_cv_have_dash_pthread" = "yes"; then + _PTHREAD_LDFLAGS="-pthread" + fi + ;; + + *-*-openbsd*|*-*-bsdi*) + AC_DEFINE(_REENTRANT) + AC_DEFINE(_THREAD_SAFE) + dnl -pthread links in -lc_r, so don't specify it explicitly. + if test "$ac_cv_have_dash_pthread" = "yes"; then + _PTHREAD_LDFLAGS="-pthread" + fi + ;; + + *-*-linux*|*-*-kfreebsd*-gnu|*-*-gnu*) + AC_DEFINE(_REENTRANT) + ;; + + esac + LDFLAGS="${_PTHREAD_LDFLAGS} ${LDFLAGS}" + AC_SUBST(MOZ_USE_PTHREADS) + MOZ_CHECK_HEADERS(pthread.h) +fi + + +dnl Checks for library functions. +dnl ======================================================== +AC_PROG_GCC_TRADITIONAL +AC_FUNC_MEMCMP +AC_CHECK_FUNCS(stat64 lstat64 truncate64 statvfs64 statvfs statfs64 statfs getpagesize gmtime_r localtime_r arc4random arc4random_buf mallinfo gettid lchown setpriority strerror syscall) + +dnl check for clock_gettime(), the CLOCK_MONOTONIC clock +dnl avoid this on Darwin, since depending on your system config, we may think +dnl it exists but it really doesn't +case "$OS_TARGET" in +Darwin) + ;; +*) + AC_CACHE_CHECK(for clock_gettime(CLOCK_MONOTONIC), + ac_cv_clock_monotonic, + [for libs in "" -lrt; do + _SAVE_LIBS="$LIBS" + LIBS="$LIBS $libs" + AC_TRY_LINK([#include <time.h>], + [ struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); ], + ac_cv_clock_monotonic=$libs + LIBS="$_SAVE_LIBS" + break, + ac_cv_clock_monotonic=no) + LIBS="$_SAVE_LIBS" + done]) + if test "$ac_cv_clock_monotonic" != "no"; then + HAVE_CLOCK_MONOTONIC=1 + REALTIME_LIBS=$ac_cv_clock_monotonic + AC_DEFINE(HAVE_CLOCK_MONOTONIC) + AC_SUBST(HAVE_CLOCK_MONOTONIC) + AC_SUBST_LIST(REALTIME_LIBS) + fi + ;; +esac + +AC_CACHE_CHECK(for pthread_cond_timedwait_monotonic_np, + ac_cv_pthread_cond_timedwait_monotonic_np, + AC_TRY_LINK([#include <pthread.h>], + [pthread_cond_timedwait_monotonic_np(0, 0, 0);], + ac_cv_pthread_cond_timewait_monotonic_np=yes, + ac_cv_pthread_cond_timewait_monotonic_np=no)) +if test "$ac_cv_pthread_cond_timewait_monotonic_np" != "no"; then + AC_DEFINE(HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC) +fi + +dnl check for wcrtomb/mbrtowc +dnl ======================================================================= +if test -z "$MACOS_DEPLOYMENT_TARGET" || test "$MACOS_DEPLOYMENT_TARGET" -ge "100300"; then +AC_LANG_SAVE +AC_LANG_CPLUSPLUS +AC_CACHE_CHECK(for wcrtomb, + ac_cv_have_wcrtomb, + [AC_TRY_LINK([#include <wchar.h>], + [mbstate_t ps={0};wcrtomb(0,'f',&ps);], + ac_cv_have_wcrtomb="yes", + ac_cv_have_wcrtomb="no")]) +if test "$ac_cv_have_wcrtomb" = "yes"; then + AC_DEFINE(HAVE_WCRTOMB) +fi +AC_CACHE_CHECK(for mbrtowc, + ac_cv_have_mbrtowc, + [AC_TRY_LINK([#include <wchar.h>], + [mbstate_t ps={0};mbrtowc(0,0,0,&ps);], + ac_cv_have_mbrtowc="yes", + ac_cv_have_mbrtowc="no")]) +if test "$ac_cv_have_mbrtowc" = "yes"; then + AC_DEFINE(HAVE_MBRTOWC) +fi +AC_LANG_RESTORE +fi + +AC_CACHE_CHECK( + [for res_ninit()], + ac_cv_func_res_ninit, + [if test "$OS_TARGET" = NetBSD -o "$OS_TARGET" = OpenBSD; then + dnl no need for res_ninit() on NetBSD and OpenBSD + ac_cv_func_res_ninit=no + else + AC_TRY_LINK([ + #ifdef linux + #define _BSD_SOURCE 1 + #endif + #include <sys/types.h> + #include <netinet/in.h> + #include <arpa/nameser.h> + #include <resolv.h> + ], + [int foo = res_ninit(&_res);], + [ac_cv_func_res_ninit=yes], + [ac_cv_func_res_ninit=no]) + fi + ]) + +if test "$ac_cv_func_res_ninit" = "yes"; then + AC_DEFINE(HAVE_RES_NINIT) +dnl must add the link line we do something as foolish as this... dougt +dnl else +dnl AC_CHECK_LIB(bind, res_ninit, AC_DEFINE(HAVE_RES_NINIT), +dnl AC_CHECK_LIB(resolv, res_ninit, AC_DEFINE(HAVE_RES_NINIT))) +fi + +AC_LANG_CPLUSPLUS + +ICONV_LIBS= + +case $target_os in + darwin*|mingw*) + ;; + *) + +AC_CHECK_LIB(c, iconv, [ICONV_LIBS=], + AC_CHECK_LIB(iconv, iconv, [ICONV_LIBS="-liconv"], + AC_CHECK_LIB(iconv, libiconv, [ICONV_LIBS="-liconv"]))) +_SAVE_LIBS=$LIBS +LIBS="$LIBS $ICONV_LIBS" +AC_CACHE_CHECK( + [for iconv()], + ac_cv_func_iconv, + [AC_TRY_LINK([ + #include <stdlib.h> + #include <iconv.h> + ], + [ + iconv_t h = iconv_open("", ""); + iconv(h, NULL, NULL, NULL, NULL); + iconv_close(h); + ], + [ac_cv_func_iconv=yes], + [ac_cv_func_iconv=no] + )] + ) +if test "$ac_cv_func_iconv" = "yes"; then + AC_DEFINE(HAVE_ICONV) + LIBICONV="$ICONV_LIBS" + AC_CACHE_CHECK( + [for iconv() with const input], + ac_cv_func_const_iconv, + [AC_TRY_COMPILE([ + #include <stdlib.h> + #include <iconv.h> + ], + [ + const char *input = "testing"; + iconv_t h = iconv_open("", ""); + iconv(h, &input, NULL, NULL, NULL); + iconv_close(h); + ], + [ac_cv_func_const_iconv=yes], + [ac_cv_func_const_iconv=no] + )] + ) + if test "$ac_cv_func_const_iconv" = "yes"; then + AC_DEFINE(HAVE_ICONV_WITH_CONST_INPUT) + fi +fi +LIBS=$_SAVE_LIBS + + ;; +esac + +AC_SUBST_LIST(ICONV_LIBS) + +AM_LANGINFO_CODESET + +AC_LANG_C + +dnl ********************** +dnl *** va_copy checks *** +AC_CACHE_CHECK([for an implementation of va_copy()], + ac_cv_va_copy, + [AC_TRY_COMPILE([#include <stdarg.h> + #include <stdlib.h> + void f (int i, ...) { + va_list args1, args2; + va_start (args1, i); + va_copy (args2, args1); + if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42) + exit (1); + va_end (args1); va_end (args2); + }], + [f(0, 42); return 0], + [ac_cv_va_copy=yes], + [ac_cv_va_copy=no] + )] +) +AC_CACHE_CHECK([whether va_list can be copied by value], + ac_cv_va_val_copy, + [AC_TRY_COMPILE([#include <stdarg.h> + #include <stdlib.h> + void f (int i, ...) { + va_list args1, args2; + va_start (args1, i); + args2 = args1; + if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42) + exit (1); + va_end (args1); va_end (args2); + }], + [f(0, 42); return 0], + [ac_cv_va_val_copy=yes], + [ac_cv_va_val_copy=no], + )] +) +if test "x$ac_cv_va_copy" = "xyes"; then + AC_DEFINE(VA_COPY, va_copy) + AC_DEFINE(HAVE_VA_COPY) +fi + +if test "x$ac_cv_va_val_copy" = "xno"; then + AC_DEFINE(HAVE_VA_LIST_AS_ARRAY) +fi + +dnl =================================================================== +dnl ======================================================== +dnl Put your C++ language/feature checks below +dnl ======================================================== +AC_LANG_CPLUSPLUS + +ARM_ABI_PREFIX= +if test "$GNU_CC"; then + if test "$CPU_ARCH" = "arm" ; then + AC_CACHE_CHECK(for ARM EABI, + ac_cv_gcc_arm_eabi, + [AC_TRY_COMPILE([], + [ +#if defined(__ARM_EABI__) + return 0; +#else +#error Not ARM EABI. +#endif + ], + ac_cv_gcc_arm_eabi="yes", + ac_cv_gcc_arm_eabi="no")]) + if test "$ac_cv_gcc_arm_eabi" = "yes"; then + HAVE_ARM_EABI=1 + ARM_ABI_PREFIX=eabi- + else + ARM_ABI_PREFIX=oabi- + fi + fi + + TARGET_COMPILER_ABI="${TARGET_COMPILER_ABI-${ARM_ABI_PREFIX}gcc3}" +fi + +dnl Check to see if we can resolve ambiguity with |using|. +AC_CACHE_CHECK(whether the C++ \"using\" keyword resolves ambiguity, + ac_cv_cpp_ambiguity_resolving_using, + [AC_TRY_COMPILE(class X { + public: int go(const X&) {return 3;} + int jo(const X&) {return 3;} + }; + class Y : public X { + public: int go(int) {return 2;} + int jo(int) {return 2;} + using X::jo; + private: using X::go; + };, + X x; Y y; y.jo(x);, + ac_cv_cpp_ambiguity_resolving_using=yes, + ac_cv_cpp_ambiguity_resolving_using=no)]) +if test "$ac_cv_cpp_ambiguity_resolving_using" = yes ; then + AC_DEFINE(HAVE_CPP_AMBIGUITY_RESOLVING_USING) +fi + +dnl See if a dynamic_cast to void* gives the most derived object. +AC_CACHE_CHECK(for C++ dynamic_cast to void*, + ac_cv_cpp_dynamic_cast_void_ptr, + [AC_TRY_RUN([class X { int i; public: virtual ~X() { } }; + class Y { int j; public: virtual ~Y() { } }; + class Z : public X, public Y { int k; }; + + int main() { + Z mdo; + X *subx = (X*)&mdo; + Y *suby = (Y*)&mdo; + return !((((void*)&mdo != (void*)subx) && + ((void*)&mdo == dynamic_cast<void*>(subx))) || + (((void*)&mdo != (void*)suby) && + ((void*)&mdo == dynamic_cast<void*>(suby)))); + }], + ac_cv_cpp_dynamic_cast_void_ptr=yes, + ac_cv_cpp_dynamic_cast_void_ptr=no, + ac_cv_cpp_dynamic_cast_void_ptr=no)]) +if test "$ac_cv_cpp_dynamic_cast_void_ptr" = yes ; then + AC_DEFINE(HAVE_CPP_DYNAMIC_CAST_TO_VOID_PTR) +fi + + +# try harder, when checking for __thread support, see bug 521750 comment #33 and below +# We pass MOZ_OPTIMIZE_LDFLAGS to the linker because if dead_strip is +# enabled, the linker in xcode 4.1 will crash. Without this it would crash when +# linking XUL. +_SAVE_LDFLAGS=$LDFLAGS +LDFLAGS="$LDFLAGS $DSO_PIC_CFLAGS $DSO_LDOPTS $MOZ_OPTIMIZE_LDFLAGS" +AC_CACHE_CHECK(for __thread keyword for TLS variables, + ac_cv_thread_keyword, + [AC_TRY_LINK([__thread bool tlsIsMainThread = false;], + [return tlsIsMainThread;], + ac_cv_thread_keyword=yes, + ac_cv_thread_keyword=no)]) +LDFLAGS=$_SAVE_LDFLAGS +# The custom dynamic linker doesn't support TLS variables +MOZ_TLS= +if test "$ac_cv_thread_keyword" = yes -a "$MOZ_LINKER" != 1; then + # mips builds fail with TLS variables because of a binutils bug. + # See bug 528687 + # OpenBSD doesn't have TLS support, and the test succeeds with clang++ + case "${target}" in + mips*-*) + : + ;; + *-android*|*-linuxandroid*) + : + ;; + *-openbsd*) + : + ;; + *) + AC_DEFINE(HAVE_THREAD_TLS_KEYWORD) + MOZ_TLS=1 + ;; + esac +fi + +dnl Using the custom linker on ARMv6 requires 16k alignment of ELF segments. +if test -n "$MOZ_LINKER"; then + if test "$CPU_ARCH" = arm; then + dnl When building for < ARMv7, we need to ensure 16k alignment of ELF segments + if test -n "$ARM_ARCH" && test "$ARM_ARCH" -lt 7; then + LDFLAGS="$LDFLAGS -Wl,-z,max-page-size=0x4000 -Wl,-z,common-page-size=0x4000" + _SUBDIR_LDFLAGS="$_SUBDIR_LDFLAGS -Wl,-z,max-page-size=0x4000 -Wl,-z,common-page-size=0x4000" + fi + fi + +dnl gold emits wrong sysv-style elf hash tables when building both sysv and +dnl style tables. https://sourceware.org/bugzilla/show_bug.cgi?id=13597 +dnl Since the linker only understands the sysv ones, no need to build the +dnl gnu style tables anyways. + LDFLAGS="$LDFLAGS -Wl,--hash-style=sysv" +fi + +dnl The custom linker doesn't support text relocations, but NDK >= r6b +dnl creates some (http://code.google.com/p/android/issues/detail?id=23203) +dnl We however want to avoid these text relocations, and this can be done +dnl by making gcc not link crtbegin and crtend. In the broken NDKs, crtend +dnl doesn't contain anything at all, beside placeholders for some sections, +dnl and crtbegin only contains a finalizer function that calls +dnl __cxa_finalize. The custom linker actually takes care of calling +dnl __cxa_finalize when the library doesn't call it itself, which makes it +dnl safe not to link crtbegin. Besides, previous versions of the NDK didn't +dnl link crtbegin and crtend at all. +if test -n "$MOZ_LINKER" -a "$OS_TARGET" = "Android"; then + AC_CACHE_CHECK([whether the CRT objects have text relocations], + ac_cv_crt_has_text_relocations, + [echo 'int foo() { return 0; }' > conftest.cpp + if AC_TRY_COMMAND(${CXX-g++} -o conftest${DLL_SUFFIX} $CXXFLAGS $DSO_LDOPTS $LDFLAGS conftest.cpp $LIBS 1>&5) && + test -s conftest${DLL_SUFFIX}; then + if ${TOOLCHAIN_PREFIX}readelf -d conftest${DLL_SUFFIX} | grep TEXTREL > /dev/null; then + ac_cv_crt_has_text_relocations=yes + else + ac_cv_crt_has_text_relocations=no + fi + else + AC_ERROR([couldn't compile a simple C file]) + fi + rm -rf conftest*]) + if test "$ac_cv_crt_has_text_relocations" = yes; then + dnl While we want libraries to skip the CRT files, we don't want + dnl executables to be treated the same way. We thus set the flag + dnl in DSO_LDOPTS and not LDFLAGS. However, to pass it to nspr, + dnl we need to use LDFLAGS because nspr doesn't inherit DSO_LDOPTS. + dnl Using LDFLAGS in nspr is safe, since we only really build + dnl libraries there. + DSO_LDOPTS="$DSO_LDOPTS -nostartfiles" + NSPR_LDFLAGS="$NSPR_LDFLAGS -nostartfiles" + fi +fi + +dnl See if compiler supports some gcc-style attributes + +AC_CACHE_CHECK(for __attribute__((always_inline)), + ac_cv_attribute_always_inline, + [AC_TRY_COMPILE([inline void f(void) __attribute__((always_inline));], + [], + ac_cv_attribute_always_inline=yes, + ac_cv_attribute_always_inline=no)]) + +dnl End of C++ language/feature checks +AC_LANG_C + +dnl ======================================================== +dnl = Internationalization checks +dnl ======================================================== +dnl +dnl Internationalization and Locale support is different +dnl on various UNIX platforms. Checks for specific i18n +dnl features go here. + +dnl check for LC_MESSAGES +AC_CACHE_CHECK(for LC_MESSAGES, + ac_cv_i18n_lc_messages, + [AC_TRY_COMPILE([#include <locale.h>], + [int category = LC_MESSAGES;], + ac_cv_i18n_lc_messages=yes, + ac_cv_i18n_lc_messages=no)]) +if test "$ac_cv_i18n_lc_messages" = yes; then + AC_DEFINE(HAVE_I18N_LC_MESSAGES) +fi + +AC_HAVE_FUNCS(localeconv) + +fi # ! SKIP_COMPILER_CHECKS + +if test -n "${COMPILE_ENVIRONMENT}"; then + MOZ_CHECK_ALLOCATOR +fi + +TARGET_XPCOM_ABI= +if test -n "${CPU_ARCH}" -a -n "${TARGET_COMPILER_ABI}"; then + TARGET_XPCOM_ABI="${CPU_ARCH}-${TARGET_COMPILER_ABI}" + AC_DEFINE_UNQUOTED(TARGET_XPCOM_ABI, ["${TARGET_XPCOM_ABI}"]) +fi + +dnl We can't run TRY_COMPILE tests on Windows, so hard-code some +dnl features that Windows actually does support. + +if test -n "$SKIP_COMPILER_CHECKS"; then + dnl Windows has malloc.h + AC_DEFINE(MALLOC_H, [<malloc.h>]) + AC_DEFINE(HAVE_FORCEINLINE) + AC_DEFINE(HAVE_LOCALECONV) +fi # SKIP_COMPILER_CHECKS + +dnl Mozilla specific options +dnl ======================================================== +dnl The macros used for command line options +dnl are defined in build/autoconf/altoptions.m4. + +dnl ======================================================== +dnl = +dnl = Check for external package dependencies +dnl = +dnl ======================================================== +MOZ_ARG_HEADER(External Packages) + +case "$OS_TARGET" in +WINNT|Darwin|Android) + MOZ_FOLD_LIBS=1 + ;; +*) + MOZ_FOLD_LIBS= + ;; +esac + +MOZ_CONFIG_NSPR() + +dnl ======================================================== +dnl system libevent Support +dnl ======================================================== +MOZ_ARG_WITH_STRING(system-libevent, +[ --with-system-libevent[=PFX] + Use system libevent [installed at prefix PFX]], + LIBEVENT_DIR=$withval) + +_SAVE_CFLAGS=$CFLAGS +_SAVE_LDFLAGS=$LDFLAGS +_SAVE_LIBS=$LIBS +if test "$LIBEVENT_DIR" = yes; then + PKG_CHECK_MODULES(MOZ_LIBEVENT, libevent, + MOZ_SYSTEM_LIBEVENT=1, + LIBEVENT_DIR=/usr) +fi +if test -z "$LIBEVENT_DIR" -o "$LIBEVENT_DIR" = no; then + MOZ_SYSTEM_LIBEVENT= +elif test -z "$MOZ_SYSTEM_LIBEVENT"; then + CFLAGS="-I${LIBEVENT_DIR}/include $CFLAGS" + LDFLAGS="-L${LIBEVENT_DIR}/lib $LDFLAGS" + MOZ_CHECK_HEADER(event.h, + [if test ! -f "${LIBEVENT_DIR}/include/event.h"; then + AC_MSG_ERROR([event.h found, but is not in ${LIBEVENT_DIR}/include]) + fi], + AC_MSG_ERROR([--with-system-libevent requested but event.h not found])) + AC_CHECK_LIB(event, event_init, + [MOZ_SYSTEM_LIBEVENT=1 + MOZ_LIBEVENT_CFLAGS="-I${LIBEVENT_DIR}/include" + MOZ_LIBEVENT_LIBS="-L${LIBEVENT_DIR}/lib -levent"], + [MOZ_SYSTEM_LIBEVENT= MOZ_LIBEVENT_CFLAGS= MOZ_LIBEVENT_LIBS=]) +fi +CFLAGS=$_SAVE_CFLAGS +LDFLAGS=$_SAVE_LDFLAGS +LIBS=$_SAVE_LIBS + +AC_SUBST(MOZ_SYSTEM_LIBEVENT) + +dnl ======================================================== +dnl = If NSS was not detected in the system, +dnl = use the one in the source tree (mozilla/security/nss) +dnl ======================================================== + +MOZ_ARG_WITH_BOOL(system-nss, +[ --with-system-nss Use system installed NSS], + _USE_SYSTEM_NSS=1 ) + +if test -n "$_USE_SYSTEM_NSS"; then + AM_PATH_NSS(3.28.6, [MOZ_SYSTEM_NSS=1], [AC_MSG_ERROR([you don't have NSS installed or your version is too old])]) +fi + +if test -n "$MOZ_SYSTEM_NSS"; then + NSS_LIBS="$NSS_LIBS -lcrmf" +else + NSS_CFLAGS="-I${DIST}/include/nss" +fi + +if test -z "$SKIP_LIBRARY_CHECKS"; then +dnl system JPEG support +dnl ======================================================== +MOZ_ARG_WITH_STRING(system-jpeg, +[ --with-system-jpeg[=PFX] + Use system libjpeg [installed at prefix PFX]], + JPEG_DIR=$withval) + +_SAVE_CFLAGS=$CFLAGS +_SAVE_LDFLAGS=$LDFLAGS +_SAVE_LIBS=$LIBS +if test -n "${JPEG_DIR}" -a "${JPEG_DIR}" != "yes"; then + CFLAGS="-I${JPEG_DIR}/include $CFLAGS" + LDFLAGS="-L${JPEG_DIR}/lib $LDFLAGS" +fi +if test -z "$JPEG_DIR" -o "$JPEG_DIR" = no; then + MOZ_SYSTEM_JPEG= +else + AC_CHECK_LIB(jpeg, jpeg_destroy_compress, [MOZ_SYSTEM_JPEG=1 MOZ_JPEG_LIBS="-ljpeg"], MOZ_SYSTEM_JPEG=) +fi + +if test "$MOZ_SYSTEM_JPEG" = 1; then + AC_TRY_COMPILE([ #include <stdio.h> + #include <sys/types.h> + #include <jpeglib.h> ], + [ #if JPEG_LIB_VERSION < $MOZJPEG + #error "Insufficient JPEG library version ($MOZJPEG required)." + #endif + #ifndef JCS_EXTENSIONS + #error "libjpeg-turbo JCS_EXTENSIONS required" + #endif + ], + MOZ_SYSTEM_JPEG=1, + AC_MSG_ERROR([Insufficient JPEG library version for --with-system-jpeg])) +fi +CFLAGS=$_SAVE_CFLAGS +LDFLAGS=$_SAVE_LDFLAGS +LIBS=$_SAVE_LIBS + +if test -n "${JPEG_DIR}" -a -d "${JPEG_DIR}" -a "$MOZ_SYSTEM_JPEG" = 1; then + MOZ_JPEG_CFLAGS="-I${JPEG_DIR}/include" + MOZ_JPEG_LIBS="-L${JPEG_DIR}/lib ${MOZ_JPEG_LIBS}" +fi +fi # SKIP_LIBRARY_CHECKS + +dnl system ZLIB support +dnl ======================================================== +MOZ_ZLIB_CHECK([1.2.3]) + +if test "$MOZ_LINKER" = 1 -a "$MOZ_SYSTEM_ZLIB" != 1; then + AC_MSG_ERROR([Custom dynamic linker requires --with-system-zlib]) +fi + +if test -z "$SKIP_LIBRARY_CHECKS"; then +dnl system BZIP2 Support +dnl ======================================================== +MOZ_ARG_WITH_STRING(system-bz2, +[ --with-system-bz2[=PFX] + Use system libbz2 [installed at prefix PFX]], + BZ2_DIR=$withval) + +_SAVE_CFLAGS=$CFLAGS +_SAVE_LDFLAGS=$LDFLAGS +_SAVE_LIBS=$LIBS +if test -n "${BZ2_DIR}" -a "${BZ2_DIR}" != "yes"; then + CFLAGS="-I${BZ2_DIR}/include $CFLAGS" + LDFLAGS="-L${BZ2_DIR}/lib $LDFLAGS" +fi +if test -z "$BZ2_DIR" -o "$BZ2_DIR" = no; then + MOZ_SYSTEM_BZ2= +else + AC_CHECK_LIB(bz2, BZ2_bzread, [MOZ_SYSTEM_BZ2=1 MOZ_BZ2_LIBS="-lbz2"], + [MOZ_SYSTEM_BZ2= MOZ_BZ2_CFLAGS= MOZ_BZ2_LIBS=]) +fi +CFLAGS=$_SAVE_CFLAGS +LDFLAGS=$_SAVE_LDFLAGS +LIBS=$_SAVE_LIBS + +if test "${BZ2_DIR}" -a -d "${BZ2_DIR}" -a "$MOZ_SYSTEM_BZ2" = 1; then + MOZ_BZ2_CFLAGS="-I${BZ2_DIR}/include" + MOZ_BZ2_LIBS="-L${BZ2_DIR}/lib ${MOZ_BZ2_LIBS}" +fi + +dnl ======================================================== +dnl system PNG Support +dnl ======================================================== +MOZ_ARG_WITH_STRING(system-png, +[ --with-system-png[=PFX] + Use system libpng [installed at prefix PFX]], + PNG_DIR=$withval) + +_SAVE_CFLAGS=$CFLAGS +_SAVE_LDFLAGS=$LDFLAGS +_SAVE_LIBS=$LIBS +if test -n "${PNG_DIR}" -a "${PNG_DIR}" != "yes"; then + CFLAGS="-I${PNG_DIR}/include $CFLAGS" + LDFLAGS="-L${PNG_DIR}/lib $LDFLAGS" +fi +if test -z "$PNG_DIR" -o "$PNG_DIR" = no; then + MOZ_SYSTEM_PNG= +else + AC_CHECK_LIB(png, png_get_valid, [MOZ_SYSTEM_PNG=1 MOZ_PNG_LIBS="-lpng"], + AC_MSG_ERROR([--with-system-png requested but no working libpng found])) + AC_CHECK_LIB(png, png_get_acTL, , + AC_MSG_ERROR([--with-system-png won't work because the system's libpng doesn't have APNG support])) +fi +if test "$MOZ_SYSTEM_PNG" = 1; then + AC_TRY_COMPILE([ #include <stdio.h> + #include <sys/types.h> + #include <png.h> ], + [ #if PNG_LIBPNG_VER < $MOZPNG + #error "Insufficient libpng version ($MOZPNG required)." + #endif + #ifndef PNG_UINT_31_MAX + #error "Insufficient libpng version." + #endif ], + MOZ_SYSTEM_PNG=1, + AC_MSG_ERROR([--with-system-png requested but no working libpng found])) +fi +CFLAGS=$_SAVE_CFLAGS +LDFLAGS=$_SAVE_LDFLAGS +LIBS=$_SAVE_LIBS + +if test "${PNG_DIR}" -a -d "${PNG_DIR}" -a "$MOZ_SYSTEM_PNG" = 1; then + MOZ_PNG_CFLAGS="-I${PNG_DIR}/include" + MOZ_PNG_LIBS="-L${PNG_DIR}/lib ${MOZ_PNG_LIBS}" +fi + +fi # SKIP_LIBRARY_CHECKS + +dnl ======================================================== +dnl = +dnl = Application +dnl = +dnl ======================================================== + +MOZ_ARG_HEADER(Application) + +ENABLE_SYSTEM_EXTENSION_DIRS=1 +MOZ_BRANDING_DIRECTORY= +MOZ_OFFICIAL_BRANDING= +MOZ_FEEDS=1 +MOZ_AUTH_EXTENSION=1 +if test "$MOZ_IOS"; then + MOZ_AUTH_EXTENSION= +fi +MOZ_RAW= +MOZ_VORBIS= +MOZ_TREMOR= +MOZ_SAMPLE_TYPE_FLOAT32= +MOZ_SAMPLE_TYPE_S16= +MOZ_DIRECTSHOW= +MOZ_WEBRTC=1 +MOZ_PEERCONNECTION= +MOZ_SRTP= +MOZ_WEBRTC_SIGNALING= +MOZ_WEBRTC_ASSERT_ALWAYS=1 +MOZ_WEBRTC_HARDWARE_AEC_NS= +MOZ_SCTP= +MOZ_ANDROID_OMX= +MOZ_OMX_PLUGIN= +MOZ_VPX_ERROR_CONCEALMENT= +VPX_USE_YASM= +VPX_ASFLAGS= +VPX_AS_CONVERSION= +VPX_X86_ASM= +VPX_ARM_ASM= +LIBJPEG_TURBO_AS= +LIBJPEG_TURBO_ASFLAGS= +MOZ_PREF_EXTENSIONS=1 +MOZ_REFLOW_PERF= +MOZ_SPELLCHECK=1 +MOZ_TOOLKIT_SEARCH=1 +MOZ_UI_LOCALE=en-US +MOZ_UNIVERSALCHARDET=1 +MOZ_URL_CLASSIFIER= +MOZ_XUL=1 +MOZ_ZIPWRITER=1 +MOZ_NO_SMART_CARDS= +NECKO_COOKIES=1 +MOZ_USE_NATIVE_POPUP_WINDOWS= +MOZ_EXCLUDE_HYPHENATION_DICTIONARIES= +MOZ_INSTALL_TRACKING= +ACCESSIBILITY=1 +MOZ_TIME_MANAGER= +MOZ_AUDIO_CHANNEL_MANAGER= +MOZ_CONTENT_SANDBOX= +MOZ_GMP_SANDBOX= +MOZ_SANDBOX=1 +MOZ_BINARY_EXTENSIONS= +MOZ_DEVTOOLS=server + +case "$target_os" in + mingw*) + NS_ENABLE_TSF=1 + AC_DEFINE(NS_ENABLE_TSF) + ;; +esac + +case "${target}" in + *-android*|*-linuxandroid*) + MOZ_THEME_FASTSTRIPE=1 + MOZ_RAW=1 + ;; + +esac + +# Optional Firefox for Android partner distribution directory. +MOZ_ARG_WITH_STRING(android-distribution-directory, +[ --with-android-distribution-directory=dir + Optional Firefox for Android partner distribution directory.], + MOZ_ANDROID_DISTRIBUTION_DIRECTORY=$withval) + +if test -n "$MOZ_ANDROID_DISTRIBUTION_DIRECTORY"; then + # A distribution directory must have an assets/distribution directory. + # See https://wiki.mozilla.org/Mobile/Distribution_Files. + if test ! -d "$MOZ_ANDROID_DISTRIBUTION_DIRECTORY/assets/distribution" ; then + AC_MSG_ERROR([--with-android-distribution-directory does not contain assets/distribution; + (looked for ${MOZ_ANDROID_DISTRIBUTION_DIRECTORY}/assets/distribution).]) + fi +fi +AC_SUBST(MOZ_ANDROID_DISTRIBUTION_DIRECTORY) + +dnl ======================================================== +dnl = Trademarked Branding +dnl ======================================================== +MOZ_ARG_ENABLE_BOOL(official-branding, +[ --enable-official-branding + Enable Official mozilla.org Branding + Do not distribute builds with + --enable-official-branding unless you have + permission to use trademarks per + http://www.mozilla.org/foundation/trademarks/ .], + MOZ_OFFICIAL_BRANDING=1, + MOZ_OFFICIAL_BRANDING=) + +# Allow the application to influence configure with a confvars.sh script. +AC_MSG_CHECKING([if app-specific confvars.sh exists]) +if test -f "${srcdir}/${MOZ_BUILD_APP}/confvars.sh" ; then + AC_MSG_RESULT([${srcdir}/${MOZ_BUILD_APP}/confvars.sh]) + . "${srcdir}/${MOZ_BUILD_APP}/confvars.sh" +else + AC_MSG_RESULT([no]) +fi + +# Allow influencing configure with a defines.sh script. +. "${srcdir}/build/defines.sh" + +# If we're not building a release build, define EARLY_BETA_OR_EARLIER if it is +# set in defines.sh +if test "$BUILDING_RELEASE"; then + # Override value in defines.sh, if any + EARLY_BETA_OR_EARLIER= +elif test "$EARLY_BETA_OR_EARLIER"; then + AC_DEFINE(EARLY_BETA_OR_EARLIER) +fi +AC_SUBST(EARLY_BETA_OR_EARLIER) + +# Allow someone to change MOZ_APP_NAME and MOZ_APP_BASENAME in mozconfig +MOZ_ARG_WITH_STRING(app-name, +[--with-app-name=APPNAME sets MOZ_APP_NAME to APPNAME], +WITH_APP_NAME=$withval, +) + +if test -n "$WITH_APP_NAME" ; then + MOZ_APP_NAME="$WITH_APP_NAME" +fi + +MOZ_ARG_WITH_STRING(app-basename, +[--with-app-basename=BASENAME sets MOZ_APP_BASENAME to BASENAME], +WITH_APP_BASENAME=$withval, +) + +if test -n "$WITH_APP_BASENAME" ; then + MOZ_APP_BASENAME="$WITH_APP_BASENAME" +fi + +# Special cases where we need to AC_DEFINE something. Also a holdover for apps +# that haven't made a confvars.sh yet. Don't add new stuff here, use +# MOZ_BUILD_APP. +case "$MOZ_BUILD_APP" in +browser) + AC_DEFINE(MOZ_PHOENIX) + ;; + +xulrunner) + AC_DEFINE(MOZ_XULRUNNER) + ;; +esac + +if test -n "$MOZ_B2G"; then + AC_DEFINE(MOZ_B2G) +fi + +# Graphene is a desktop runtime for running applications with a HTML UI. +if test -n "$MOZ_GRAPHENE"; then + AC_DEFINE(MOZ_GRAPHENE) +fi + +if test -n "$MOZ_MULET"; then + AC_DEFINE(MOZ_MULET) +fi + +# Propagate feature switches for code written in rust from confvars.sh +if test -n "$MOZ_RUST"; then + if test -n "$MOZ_RUST_MP4PARSE"; then + AC_DEFINE(MOZ_RUST_MP4PARSE) + fi + if test -n "$MOZ_RUST_URLPARSE"; then + AC_DEFINE(MOZ_RUST_URLPARSE) + fi +fi + +AC_SUBST(MOZ_PHOENIX) +AC_SUBST(MOZ_XULRUNNER) +AC_SUBST(MOZ_B2G) +AC_SUBST(MOZ_MULET) +AC_SUBST(MOZ_B2G_VERSION) + +dnl ======================================================== +dnl Ensure Android SDK and build-tools versions depending on +dnl mobile target. +dnl ======================================================== + +if test -z "$gonkdir" ; then + case "$MOZ_BUILD_APP" in + mobile/android) + MOZ_ANDROID_SDK(23, 23.0.3 23.0.1) + ;; + esac +fi + +dnl ======================================================== +dnl = +dnl = Toolkit Options +dnl = +dnl ======================================================== +MOZ_ARG_HEADER(Toolkit Options) + +dnl ======================================================== +dnl = Enable the toolkit as needed = +dnl ======================================================== + +case "$MOZ_WIDGET_TOOLKIT" in + +cocoa) + LDFLAGS="$LDFLAGS -framework Cocoa -lobjc" + # Use -Wl as a trick to avoid -framework and framework names from + # being separated by AC_SUBST_LIST. + TK_LIBS='-Wl,-framework,CoreLocation -Wl,-framework,QuartzCore -Wl,-framework,Carbon -Wl,-framework,CoreAudio -Wl,-framework,AudioToolbox -Wl,-framework,AudioUnit -Wl,-framework,AddressBook -Wl,-framework,OpenGL -Wl,-framework,Security -Wl,-framework,ServiceManagement' + TK_CFLAGS="" + CFLAGS="$CFLAGS $TK_CFLAGS" + CXXFLAGS="$CXXFLAGS $TK_CFLAGS" + MOZ_USER_DIR="Mozilla" + MOZ_FS_LAYOUT=bundle + ;; + +uikit) + LDFLAGS="$LDFLAGS -framework UIKit -lobjc" + TK_CFLAGS="" + TK_LIBS='-Wl,-framework,Foundation -Wl,-framework,CoreFoundation -Wl,-framework,CoreGraphics -Wl,-framework,CoreText -Wl,-framework,AVFoundation -Wl,-framework,AudioToolbox -Wl,-framework,CoreMedia -Wl,-framework,CoreVideo -Wl,-framework,OpenGLES -Wl,-framework,QuartzCore' + CFLAGS="$CFLAGS $TK_CFLAGS" + CXXFLAGS="$CXXFLAGS $TK_CFLAGS" + MOZ_USER_DIR="Mozilla" + MOZ_FS_LAYOUT=bundle + ;; + +esac + +dnl there are a lot of tests on MOZ_ENABLE_GTK below, that are more convenient +dnl to keep that way than testing against MOZ_WIDGET_TOOLKIT +case "$MOZ_WIDGET_TOOLKIT" in +gtk*) + MOZ_ENABLE_GTK=1 + ;; +esac + +if test "$COMPILE_ENVIRONMENT"; then + if test "$MOZ_WIDGET_TOOLKIT" = gtk3; then + PKG_CHECK_MODULES(MOZ_GTK3, gtk+-3.0 >= $GTK3_VERSION gtk+-unix-print-3.0 glib-2.0 gobject-2.0 $GDK_PACKAGES) + MOZ_GTK3_CFLAGS="-I${_topsrcdir}/widget/gtk/compat-gtk3 $MOZ_GTK3_CFLAGS" + TK_CFLAGS=$MOZ_GTK3_CFLAGS + TK_LIBS=$MOZ_GTK3_LIBS + dnl GDK_VERSION_MIN_REQUIRED is not set here as GDK3 deprecated warnings + dnl are suppressed by widget/gtk/compat-gtk3/gdk/gdkversionmacros.h. + AC_DEFINE_UNQUOTED(GDK_VERSION_MAX_ALLOWED,$GDK_VERSION_MAX_ALLOWED) + GLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_32 + fi + if test "$MOZ_WIDGET_TOOLKIT" = gtk2; then + GLIB_VERSION_MAX_ALLOWED=$GLIB_VERSION_MIN_REQUIRED + fi + if test "$MOZ_ENABLE_GTK"; then + if test "$MOZ_X11"; then + GDK_PACKAGES=gdk-x11-2.0 + fi + AC_DEFINE_UNQUOTED(GLIB_VERSION_MIN_REQUIRED,$GLIB_VERSION_MIN_REQUIRED) + AC_DEFINE_UNQUOTED(GLIB_VERSION_MAX_ALLOWED,$GLIB_VERSION_MAX_ALLOWED) + + PKG_CHECK_MODULES(MOZ_GTK2, gtk+-2.0 >= $GTK2_VERSION gtk+-unix-print-2.0 glib-2.0 >= $GLIB_VERSION gobject-2.0 $GDK_PACKAGES) + MOZ_GTK2_CFLAGS="-I${_topsrcdir}/widget/gtk/compat $MOZ_GTK2_CFLAGS" + fi + if test "$MOZ_WIDGET_TOOLKIT" = gtk2; then + TK_CFLAGS=$MOZ_GTK2_CFLAGS + TK_LIBS=$MOZ_GTK2_LIBS + fi +fi # COMPILE_ENVIRONMENT + +AC_SUBST(MOZ_FS_LAYOUT) + +dnl ======================================================== +dnl = startup-notification support module +dnl ======================================================== + +if test "$MOZ_ENABLE_GTK" +then + MOZ_ENABLE_STARTUP_NOTIFICATION= + + MOZ_ARG_ENABLE_BOOL(startup-notification, + [ --enable-startup-notification + Enable startup-notification support (default: disabled) ], + MOZ_ENABLE_STARTUP_NOTIFICATION=force, + MOZ_ENABLE_STARTUP_NOTIFICATION=) + if test "$MOZ_ENABLE_STARTUP_NOTIFICATION" + then + PKG_CHECK_MODULES(MOZ_STARTUP_NOTIFICATION, + libstartup-notification-1.0 >= $STARTUP_NOTIFICATION_VERSION, + [MOZ_ENABLE_STARTUP_NOTIFICATION=1], [ + if test "$MOZ_ENABLE_STARTUP_NOTIFICATION" = "force" + then + AC_MSG_ERROR([* * * Could not find startup-notification >= $STARTUP_NOTIFICATION_VERSION]) + fi + MOZ_ENABLE_STARTUP_NOTIFICATION= + ]) + fi + + if test "$MOZ_ENABLE_STARTUP_NOTIFICATION"; then + AC_DEFINE(MOZ_ENABLE_STARTUP_NOTIFICATION) + fi + + TK_LIBS="$TK_LIBS $MOZ_STARTUP_NOTIFICATION_LIBS" +fi +AC_SUBST(MOZ_ENABLE_STARTUP_NOTIFICATION) + +AC_SUBST_LIST(TK_CFLAGS) +AC_SUBST_LIST(TK_LIBS) + +AC_SUBST(MOC) +AC_SUBST(RCC) + +dnl ======================================================== +dnl = +dnl = Components & Features +dnl = +dnl ======================================================== +MOZ_ARG_HEADER(Components and Features) + +dnl ======================================================== +dnl = Localization +dnl ======================================================== +MOZ_ARG_ENABLE_STRING(ui-locale, +[ --enable-ui-locale=ab-CD + Select the user interface locale (default: en-US)], + MOZ_UI_LOCALE=$enableval ) +AC_SUBST(MOZ_UI_LOCALE) + +AC_SUBST(MOZ_OFFICIAL_BRANDING) +if test -n "$MOZ_OFFICIAL_BRANDING"; then + if test -z "$MOZ_OFFICIAL_BRANDING_DIRECTORY"; then + AC_MSG_ERROR([You must specify MOZ_OFFICIAL_BRANDING_DIRECTORY to use --enable-official-branding.]) + else + MOZ_BRANDING_DIRECTORY=${MOZ_OFFICIAL_BRANDING_DIRECTORY} + AC_DEFINE(MOZ_OFFICIAL_BRANDING) + fi +fi + +MOZ_ARG_WITH_STRING(branding, +[ --with-branding=dir Use branding from the specified directory.], + MOZ_BRANDING_DIRECTORY=$withval) + +REAL_BRANDING_DIRECTORY="${MOZ_BRANDING_DIRECTORY}" +if test -z "$REAL_BRANDING_DIRECTORY"; then + REAL_BRANDING_DIRECTORY=${MOZ_BUILD_APP}/branding/nightly +fi + +if test -f "${_topsrcdir}/$REAL_BRANDING_DIRECTORY/configure.sh"; then + . "${_topsrcdir}/$REAL_BRANDING_DIRECTORY/configure.sh" +elif test -f "${EXTERNAL_SOURCE_DIR}/$REAL_BRANDING_DIRECTORY/configure.sh"; then + . "${EXTERNAL_SOURCE_DIR}/$REAL_BRANDING_DIRECTORY/configure.sh" +fi + +AC_SUBST(MOZ_BRANDING_DIRECTORY) + +dnl ======================================================== +dnl = Distribution ID +dnl ======================================================== +MOZ_ARG_WITH_STRING(distribution-id, +[ --with-distribution-id=ID + Set distribution-specific id (default=org.mozilla)], +[ val=`echo $withval` + MOZ_DISTRIBUTION_ID="$val"]) + +if test -z "$MOZ_DISTRIBUTION_ID"; then + MOZ_DISTRIBUTION_ID="org.mozilla" +fi + +AC_DEFINE_UNQUOTED(MOZ_DISTRIBUTION_ID,"$MOZ_DISTRIBUTION_ID") +AC_SUBST(MOZ_DISTRIBUTION_ID) + + +dnl ======================================================== +dnl Google Play Services, placed here so it can depend on +dnl values set by configure.sh above. +dnl ======================================================== + +MOZ_ANDROID_GOOGLE_PLAY_SERVICES +MOZ_ANDROID_GOOGLE_CLOUD_MESSAGING +MOZ_ANDROID_INSTALL_TRACKING + + +dnl ======================================================== +dnl = GIO and GConf support module +dnl ======================================================== + +if test "$MOZ_X11" +then + dnl build the GIO extension by default only when the + dnl GTK2 toolkit is in use. + if test "$MOZ_ENABLE_GTK" + then + MOZ_ENABLE_GIO=1 + MOZ_ENABLE_GCONF=1 + fi + + dnl ======================================================== + dnl = GIO support module + dnl ======================================================== + MOZ_ARG_DISABLE_BOOL(gio, + [ --disable-gio Disable GIO support], + MOZ_ENABLE_GIO=, + MOZ_ENABLE_GIO=force) + + if test "$MOZ_ENABLE_GIO" -a "$MOZ_ENABLE_GTK" + then + if test "$MOZ_WIDGET_TOOLKIT" = gtk2 + then + PKG_CHECK_MODULES(_GTKCHECK, gtk+-2.0 >= 2.14, , + [AC_MSG_ERROR([* * * Could not find gtk+-2.0 > 2.14. Required for build with gio.])]) + fi + PKG_CHECK_MODULES(MOZ_GIO, gio-2.0 >= $GIO_VERSION,[ + MOZ_GIO_LIBS=`echo $MOZ_GIO_LIBS | sed 's/-llinc\>//'` + MOZ_ENABLE_GIO=1 + AC_DEFINE(MOZ_ENABLE_GIO) + ],[ + if test "$MOZ_ENABLE_GIO" = "force" + then + AC_MSG_ERROR([* * * Could not find gio-2.0 >= $GIO_VERSION]) + fi + MOZ_ENABLE_GIO= + ]) + fi + + AC_SUBST(MOZ_ENABLE_GIO) + + dnl ======================================================== + dnl = GConf support module + dnl ======================================================== + MOZ_ARG_DISABLE_BOOL(gconf, + [ --disable-gconf Disable Gconf support ], + MOZ_ENABLE_GCONF=, + MOZ_ENABLE_GCONF=1) + + if test "$MOZ_ENABLE_GCONF" + then + PKG_CHECK_MODULES(MOZ_GCONF, gconf-2.0 >= $GCONF_VERSION gobject-2.0 ,[ + MOZ_GCONF_LIBS=`$PKG_CONFIG --libs gobject-2.0` + MOZ_ENABLE_GCONF=1 + ],[ + if test -n "$MOZ_ENABLE_GCONF"; + then + AC_MSG_ERROR([* * * Could not find gconf-2.0 ]) + else + AC_MSG_WARN([Many automated tests will fail with --disable-gconf. See bug 1167201.]) + fi + ]) + fi + + if test "$MOZ_ENABLE_GCONF"; then + AC_DEFINE(MOZ_ENABLE_GCONF) + fi + + AC_SUBST(MOZ_ENABLE_GCONF) +fi + +dnl ======================================================== +dnl = libproxy support +dnl ======================================================== + +if test "$MOZ_ENABLE_GTK" +then + MOZ_ENABLE_LIBPROXY= + + MOZ_ARG_ENABLE_BOOL(libproxy, + [ --enable-libproxy Enable libproxy support ], + MOZ_ENABLE_LIBPROXY=1, + MOZ_ENABLE_LIBPROXY=) + + if test "$MOZ_ENABLE_LIBPROXY" + then + PKG_CHECK_MODULES(MOZ_LIBPROXY, libproxy-1.0) + AC_DEFINE(MOZ_ENABLE_LIBPROXY) + fi +fi +AC_SUBST(MOZ_ENABLE_LIBPROXY) + +dnl ======================================================== +dnl = libgnomeui support module +dnl ======================================================== + +if test "$MOZ_ENABLE_GTK" +then + MOZ_ARG_ENABLE_BOOL(gnomeui, + [ --enable-gnomeui Enable libgnomeui instead of GIO & GTK for icon theme support ], + MOZ_ENABLE_GNOMEUI=force, + MOZ_ENABLE_GNOMEUI=) + + if test "$MOZ_ENABLE_GNOMEUI" + then + PKG_CHECK_MODULES(MOZ_GNOMEUI, libgnomeui-2.0 >= $GNOMEUI_VERSION, + [ + MOZ_ENABLE_GNOMEUI=1 + ],[ + if test "$MOZ_ENABLE_GNOMEUI" = "force" + then + AC_MSG_ERROR([* * * Could not find libgnomeui-2.0 >= $GNOMEUI_VERSION]) + fi + MOZ_ENABLE_GNOMEUI= + ]) + fi + + if test "$MOZ_ENABLE_GNOMEUI"; then + AC_DEFINE(MOZ_ENABLE_GNOMEUI) + fi +fi + +AC_SUBST(MOZ_ENABLE_GNOMEUI) + +dnl ======================================================== +dnl = dbus support +dnl ======================================================== + +if test "$MOZ_ENABLE_GTK" +then + MOZ_ENABLE_DBUS=1 + + MOZ_ARG_DISABLE_BOOL(dbus, + [ --disable-dbus Disable dbus support ], + MOZ_ENABLE_DBUS=, + MOZ_ENABLE_DBUS=1) + + if test "$MOZ_ENABLE_DBUS" + then + PKG_CHECK_MODULES(MOZ_DBUS, dbus-1 >= $DBUS_VERSION) + PKG_CHECK_MODULES(MOZ_DBUS_GLIB, dbus-glib-1 >= $DBUS_VERSION) + AC_DEFINE(MOZ_ENABLE_DBUS) + fi +fi +AC_SUBST(MOZ_ENABLE_DBUS) + +dnl ========================================================= +dnl = Whether to exclude hyphenations files in the build +dnl ========================================================= +if test -n "$MOZ_EXCLUDE_HYPHENATION_DICTIONARIES"; then + AC_DEFINE(MOZ_EXCLUDE_HYPHENATION_DICTIONARIES) +fi + +dnl ======================================================== +dnl = Include install tracking on Android +dnl ======================================================== +if test -n "$MOZ_INSTALL_TRACKING"; then + if test -z "$MOZ_ADJUST_SDK_KEY"; then + AC_MSG_ERROR([Must specify --with-adjust-sdk-keyfile when MOZ_INSTALL_TRACKING is defined!]) + fi +fi + +dnl ======================================================== +dnl accessibility support on by default on all platforms +dnl ======================================================== +MOZ_ARG_DISABLE_BOOL(accessibility, +[ --disable-accessibility Disable accessibility support], + ACCESSIBILITY=, + ACCESSIBILITY=1 ) +if test "$ACCESSIBILITY"; then + case "$target" in + *-mingw*) + if test -z "$MIDL"; then + if test "$GCC" != "yes"; then + AC_MSG_ERROR([MIDL could not be found. Building accessibility without MIDL is not supported.]) + else + 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.]) + fi + fi + esac + AC_DEFINE(ACCESSIBILITY) +fi + +dnl ======================================================== +dnl Accessibility is required for the linuxgl widget +dnl backend +dnl ======================================================== +if test "${MOZ_WIDGET_TOOLKIT}" = "linuxgl" -a "$ACCESSIBILITY" != "1"; then + AC_MSG_ERROR(["Accessibility is required for the linuxgl widget backend"]) +fi + +dnl Turn off webrtc for OS's we don't handle yet, but allow +dnl --enable-webrtc to override. Can disable for everything in +dnl the master list above. +if test -n "$MOZ_WEBRTC"; then + case "$target" in + *-linux*|*-mingw*|*-darwin*|*-android*|*-linuxandroid*|*-dragonfly*|*-freebsd*|*-netbsd*|*-openbsd*) + dnl Leave enabled + ;; + *) + dnl default to disabled for all others + MOZ_WEBRTC= + ;; + esac +fi + +AC_TRY_COMPILE([#include <linux/ethtool.h>], + [ struct ethtool_cmd cmd; cmd.speed_hi = 0; ], + MOZ_WEBRTC_HAVE_ETHTOOL_SPEED_HI=1) + +AC_SUBST(MOZ_WEBRTC_HAVE_ETHTOOL_SPEED_HI) + +# target_arch is from {ia32|x64|arm|ppc} +case "$CPU_ARCH" in +x86_64 | arm | aarch64 | x86 | ppc* | ia64) + : + ;; +*) +# unsupported arch for webrtc + MOZ_WEBRTC= + ;; + +esac + +dnl ======================================================== +dnl = Disable WebRTC code +dnl ======================================================== +MOZ_ARG_DISABLE_BOOL(webrtc, +[ --disable-webrtc Disable support for WebRTC], + MOZ_WEBRTC=, + MOZ_WEBRTC=1) + +if test -n "$MOZ_WEBRTC"; then + AC_DEFINE(MOZ_WEBRTC) + dnl MOZ_WEBRTC_ASSERT_ALWAYS turns on a number of safety asserts in + dnl opt/production builds (via MOZ_CRASH()) + AC_DEFINE(MOZ_WEBRTC_ASSERT_ALWAYS) + MOZ_RAW=1 + MOZ_VPX_ERROR_CONCEALMENT=1 + +dnl enable once Signaling lands + MOZ_WEBRTC_SIGNALING=1 + AC_DEFINE(MOZ_WEBRTC_SIGNALING) +dnl enable once PeerConnection lands + MOZ_PEERCONNECTION=1 + AC_DEFINE(MOZ_PEERCONNECTION) + MOZ_SCTP=1 + MOZ_SRTP=1 + AC_DEFINE(MOZ_SCTP) + AC_DEFINE(MOZ_SRTP) + if test -n "$MOZ_X11"; then + MOZ_WEBRTC_X11_LIBS="-lXext -lXdamage -lXfixes -lXcomposite" + fi +else + MOZ_SYNTH_PICO= +fi + +dnl ======================================================== +dnl = Force hardware AEC, disable webrtc.org AEC +dnl ======================================================== +MOZ_ARG_ENABLE_BOOL(hardware-aec-ns, +[ --enable-hardware-aec-ns Enable support for hardware AEC and noise suppression], + MOZ_WEBRTC_HARDWARE_AEC_NS=1, + MOZ_WEBRTC_HARDWARE_AEC_NS=) + +if test -n "$MOZ_WEBRTC_HARDWARE_AEC_NS"; then + AC_DEFINE(MOZ_WEBRTC_HARDWARE_AEC_NS) +fi + +AC_SUBST(MOZ_WEBRTC) +AC_SUBST(MOZ_WEBRTC_SIGNALING) +AC_SUBST(MOZ_PEERCONNECTION) +AC_SUBST(MOZ_WEBRTC_ASSERT_ALWAYS) +AC_SUBST(MOZ_WEBRTC_HARDWARE_AEC_NS) +AC_SUBST(MOZ_SCTP) +AC_SUBST(MOZ_SRTP) +AC_SUBST_LIST(MOZ_WEBRTC_X11_LIBS) + +dnl Use integers over floats for audio on B2G and Android +dnl (regarless of the CPU architecture, because audio +dnl backends for those platforms don't support floats. We also +dnl use integers on ARM with other OS, because it's more efficient. +if test "$OS_TARGET" = "Android" -o "$CPU_ARCH" = "arm"; then + MOZ_SAMPLE_TYPE_S16=1 + AC_DEFINE(MOZ_SAMPLE_TYPE_S16) + AC_SUBST(MOZ_SAMPLE_TYPE_S16) +else + MOZ_SAMPLE_TYPE_FLOAT32=1 + AC_DEFINE(MOZ_SAMPLE_TYPE_FLOAT32) + AC_SUBST(MOZ_SAMPLE_TYPE_FLOAT32) +fi + +dnl ======================================================== +dnl = Enable Raw Codecs +dnl ======================================================== +MOZ_ARG_ENABLE_BOOL(raw, +[ --enable-raw Enable support for RAW media], + MOZ_RAW=1, + MOZ_RAW=) + +if test -n "$MOZ_RAW"; then + AC_DEFINE(MOZ_RAW) +fi + +AC_SUBST(MOZ_RAW) + +dnl ======================================================== +dnl = Apple platform decoder support +dnl ======================================================== +if test "$COMPILE_ENVIRONMENT"; then +if test -n "$MOZ_APPLEMEDIA"; then + # hack in frameworks for fmp4 - see bug 1029974 + # We load VideoToolbox and CoreMedia dynamically, so they don't appear here. + LDFLAGS="$LDFLAGS -framework AudioToolbox" + dnl Verify CoreMedia is available. + AC_CHECK_HEADER([CoreMedia/CoreMedia.h], [], + [AC_MSG_ERROR([MacOS X 10.7 SDK or later is required])]) +fi +fi # COMPILE_ENVIRONMENT + +dnl ======================================================== +dnl = DirectShow support +dnl ======================================================== +if test "$OS_ARCH" = "WINNT"; then + dnl Enable DirectShow support by default. + MOZ_DIRECTSHOW=1 +fi + +MOZ_ARG_DISABLE_BOOL(directshow, +[ --disable-directshow Disable support for DirectShow], + MOZ_DIRECTSHOW=, + MOZ_DIRECTSHOW=1) + +if test -n "$MOZ_DIRECTSHOW"; then + AC_DEFINE(MOZ_DIRECTSHOW) +fi; + +dnl ======================================================== +dnl = Built-in fragmented MP4 support. +dnl ======================================================== + +if test x"$MOZ_WIDGET_TOOLKIT" = x"gonk" -a -n "$MOZ_FMP4" -a -n "$android_version"; then + # we now know for sure that $android_version is not an empty string! + if test "$android_version" -ge "18"; then + MOZ_GONK_MEDIACODEC=1 + AC_SUBST(MOZ_GONK_MEDIACODEC) + fi +fi + + +dnl ======================================================== +dnl = Enable media plugin support +dnl ======================================================== +if test "$OS_TARGET" = Android -a x"$MOZ_WIDGET_TOOLKIT" != x"gonk"; then + dnl Enable support on android by default + MOZ_ANDROID_OMX=1 +fi + +MOZ_ARG_ENABLE_BOOL(android-omx, +[ --enable-android-omx Enable support for Android OMX media backend], + MOZ_ANDROID_OMX=1, + MOZ_ANDROID_OMX=) + +if test -n "$MOZ_ANDROID_OMX"; then + AC_DEFINE(MOZ_ANDROID_OMX) +fi + +dnl ======================================================== +dnl = Enable building OMX media plugin (B2G or Android) +dnl ======================================================== +if test "$OS_TARGET" = Android -a x"$MOZ_WIDGET_TOOLKIT" != x"gonk"; then + dnl Enable support on android by default + MOZ_OMX_PLUGIN=1 +fi + +MOZ_ARG_ENABLE_BOOL(omx-plugin, +[ --enable-omx-plugin Enable building OMX plugin (B2G)], + MOZ_OMX_PLUGIN=1, + MOZ_OMX_PLUGIN=) + +if test -n "$MOZ_OMX_PLUGIN"; then + if test "$OS_TARGET" = "Android"; then + dnl Only allow building OMX plugin on Gonk (B2G) or Android + AC_DEFINE(MOZ_OMX_PLUGIN) + else + dnl fail if we're not building on Gonk or Android + AC_MSG_ERROR([OMX media plugin can only be built on B2G or Android]) + fi +fi + +dnl system libvpx Support +dnl ======================================================== +MOZ_ARG_WITH_BOOL(system-libvpx, +[ --with-system-libvpx Use system libvpx (located with pkgconfig)], + MOZ_SYSTEM_LIBVPX=1) + +MOZ_LIBVPX_CFLAGS= +MOZ_LIBVPX_LIBS= + +if test -n "$MOZ_VPX_ERROR_CONCEALMENT" ; then + AC_DEFINE(MOZ_VPX_ERROR_CONCEALMENT) +fi + +_SAVE_CFLAGS=$CFLAGS +_SAVE_LIBS=$LIBS +if test -n "$MOZ_SYSTEM_LIBVPX"; then + dnl ============================ + dnl === libvpx Version check === + dnl ============================ + dnl Check to see if we have a system libvpx package. + PKG_CHECK_MODULES(MOZ_LIBVPX, vpx >= 1.5.0) + + CFLAGS="$CFLAGS $MOZ_LIBVPX_CFLAGS" + LIBS="$LIBS $MOZ_LIBVPX_LIBS" + + MOZ_CHECK_HEADER([vpx/vpx_decoder.h], [], + [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.])]) + + AC_CHECK_LIB(vpx, vpx_codec_dec_init_ver, [], + [AC_MSG_ERROR([--with-system-libvpx requested but symbol vpx_codec_dec_init_ver not found])]) + + MOZ_CHECK_HEADER([vpx_mem/vpx_mem.h], + [AC_CHECK_FUNC(vpx_mem_set_functions)]) + if test "$ac_cv_header_vpx_mem_vpx_mem_h" = no -o \ + "$ac_cv_func_vpx_mem_set_functions" = no; then + AC_DEFINE(MOZ_VPX_NO_MEM_REPORTING) + fi +fi +CFLAGS=$_SAVE_CFLAGS +LIBS=$_SAVE_LIBS + +AC_SUBST(MOZ_SYSTEM_LIBVPX) +AC_SUBST_LIST(MOZ_LIBVPX_CFLAGS) +AC_SUBST_LIST(MOZ_LIBVPX_LIBS) + +if test "$MOZ_SAMPLE_TYPE_FLOAT32"; then + MOZ_VORBIS=1 +else + MOZ_TREMOR=1 +fi + +if test -z "$MOZ_SYSTEM_LIBVPX"; then + + dnl Detect if we can use an assembler to compile optimized assembly for libvpx. + dnl We currently require yasm on all x86 platforms and require yasm 1.1.0 on Win32. + dnl We currently require gcc on all arm platforms. + + dnl See if we have assembly on this platform. + case "$OS_ARCH:$CPU_ARCH" in + Darwin:x86) + VPX_USE_YASM=1 + VPX_X86_ASM=1 + ;; + Darwin:x86_64) + VPX_USE_YASM=1 + VPX_X86_ASM=1 + ;; + WINNT:x86_64) + VPX_USE_YASM=1 + VPX_X86_ASM=1 + ;; + WINNT:x86) + dnl Check for yasm 1.1 or greater. + if test -n "$COMPILE_ENVIRONMENT" -a -z "$YASM"; then + 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.]) + elif test -n "$COMPILE_ENVIRONMENT" -a "$_YASM_MAJOR_VERSION" -lt "1" -o \( "$_YASM_MAJOR_VERSION" -eq "1" -a "$_YASM_MINOR_VERSION" -lt "1" \) ; then + 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.]) + else + VPX_USE_YASM=1 + VPX_X86_ASM=1 + dnl The encoder needs obj_int_extract to get asm offsets. + fi # COMPILE_ENVIRONMENT and others + ;; + *:arm*) + if test -n "$GNU_AS" ; then + dnl These flags are a lie; they're just used to enable the requisite + dnl opcodes; actual arch detection is done at runtime. + VPX_ASFLAGS="-march=armv7-a -mfpu=neon" + VPX_AS_CONVERSION='$(PERL) $(topsrcdir)/media/libvpx/build/make/ads2gas.pl' + VPX_ARM_ASM=1 + dnl Building with -mfpu=neon requires either the "softfp" or the + dnl "hardfp" ABI. Depending on the compiler's default target, and the + dnl CFLAGS, the default ABI might be neither, in which case it is the + dnl "softfloat" ABI. + dnl The "softfloat" ABI is binary-compatible with the "softfp" ABI, so + dnl we can safely mix code built with both ABIs. So, if we detect + dnl that compiling uses the "softfloat" ABI, force the use of the + dnl "softfp" ABI instead. + dnl Confusingly, the __SOFTFP__ preprocessor variable indicates the + dnl "softfloat" ABI, not the "softfp" ABI. + dnl Note: VPX_ASFLAGS is also used in CFLAGS. + AC_TRY_COMPILE([], + [#ifndef __SOFTFP__ + #error "compiler target supports -mfpu=neon, so we don't have to add extra flags" + #endif], + VPX_ASFLAGS="$VPX_ASFLAGS -mfloat-abi=softfp" + ) + fi + ;; + *:x86) + if $CC -E -dM -</dev/null | grep -q __ELF__; then + VPX_USE_YASM=1 + VPX_X86_ASM=1 + fi + ;; + *:x86_64) + if $CC -E -dM -</dev/null | grep -q __ELF__; then + VPX_USE_YASM=1 + VPX_X86_ASM=1 + fi + ;; + esac + + if test -n "$COMPILE_ENVIRONMENT" -a -n "$VPX_USE_YASM" -a -z "$YASM"; then + 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.]) + fi # COMPILE_ENVIRONMENT and others + + if test -n "$VPX_USE_YASM" && test "$OS_ARCH:$CPU_ARCH" != "WINNT:x86_64"; then + VPX_ASFLAGS="-DPIC" + fi + + if test -n "$VPX_X86_ASM"; then + AC_DEFINE(VPX_X86_ASM) + elif test -n "$VPX_ARM_ASM"; then + AC_DEFINE(VPX_ARM_ASM) + else + AC_MSG_WARN([No assembler or assembly support for libvpx. Using unoptimized C routines.]) + fi + + dnl native libvpx no longer has vpx_mem_set_functions + AC_DEFINE(MOZ_VPX_NO_MEM_REPORTING) +fi + +dnl ======================================================== +dnl = Handle dependent MEDIA defines +dnl ======================================================== + +if test -n "$MOZ_VORBIS" -a -n "$MOZ_TREMOR"; then + 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/]) +fi + +if test -n "$MOZ_VORBIS"; then + AC_DEFINE(MOZ_VORBIS) +fi + +if test -n "$MOZ_TREMOR"; then + AC_DEFINE(MOZ_TREMOR) +fi + +MOZ_WEBM_ENCODER=1 +AC_DEFINE(MOZ_WEBM_ENCODER) +AC_SUBST(MOZ_WEBM_ENCODER) + +dnl ================================== +dnl = Check alsa availability on Linux +dnl ================================== + +MOZ_ARG_ENABLE_BOOL(alsa, +[ --enable-alsa Enable Alsa support], + MOZ_ALSA=1, + MOZ_ALSA=) + +if test -n "$MOZ_ALSA"; then + PKG_CHECK_MODULES(MOZ_ALSA, alsa, , + [echo "$MOZ_ALSA_PKG_ERRORS" + AC_MSG_ERROR([Need alsa for audio output on Linux. (On Ubuntu, you might try installing the package libasound2-dev.)])]) +fi + +AC_SUBST(MOZ_ALSA) + +dnl ======================================================== +dnl = Disable PulseAudio +dnl ======================================================== + +dnl If using Desktop Linux, ensure that the PA library is available +case "$OS_TARGET" in +WINNT|Darwin|Android|OpenBSD) + ;; +*) + MOZ_PULSEAUDIO=1 + ;; +esac + +MOZ_ARG_DISABLE_BOOL(pulseaudio, +[ --disable-pulseaudio Disable PulseAudio support], + MOZ_PULSEAUDIO=, + MOZ_PULSEAUDIO=1) + +if test -n "$MOZ_PULSEAUDIO"; then + AC_DEFINE(MOZ_PULSEAUDIO) + if test -z "$gonkdir"; then + PKG_CHECK_MODULES(MOZ_PULSEAUDIO, libpulse, , + [echo "$MOZ_PULSEAUDIO_PKG_ERRORS" + AC_MSG_ERROR([pulseaudio audio backend requires libpulse development package])]) + else + MOZ_PULSEAUDIO_CFLAGS="-I$gonkdir/external/pulseaudio/pulseaudio/src" + fi +fi + +AC_SUBST(MOZ_PULSEAUDIO) + +dnl ======================================================== +dnl NegotiateAuth +dnl ======================================================== + +MOZ_ARG_DISABLE_BOOL(negotiateauth, +[ --disable-negotiateauth Disable GSS-API negotiation ], + MOZ_AUTH_EXTENSION=, + MOZ_AUTH_EXTENSION=1 ) + +if test -n "$MOZ_IOS" -a -n "$MOZ_AUTH_EXTENSION"; then + AC_MSG_ERROR([negotiateauth is not supported on iOS.]) +fi + +dnl ======================================================== +dnl Pref extensions (autoconfig) +dnl ======================================================== +MOZ_ARG_DISABLE_BOOL(pref-extensions, +[ --disable-pref-extensions + Disable pref extensions such as autoconfig], + MOZ_PREF_EXTENSIONS=, + MOZ_PREF_EXTENSIONS=1 ) + +dnl ======================================================== +dnl Searching of system directories for extensions. +dnl Note: this switch is meant to be used for test builds +dnl whose behavior should not depend on what happens to be +dnl installed on the local machine. +dnl ======================================================== +MOZ_ARG_DISABLE_BOOL(system-extension-dirs, +[ --disable-system-extension-dirs + Disable searching system- and account-global + directories for extensions of any kind; use + only profile-specific extension directories], + ENABLE_SYSTEM_EXTENSION_DIRS=, + ENABLE_SYSTEM_EXTENSION_DIRS=1 ) +if test "$ENABLE_SYSTEM_EXTENSION_DIRS"; then + AC_DEFINE(ENABLE_SYSTEM_EXTENSION_DIRS) +fi + +dnl ======================================================== +dnl = Universalchardet +dnl ======================================================== +MOZ_ARG_DISABLE_BOOL(universalchardet, +[ --disable-universalchardet + Disable universal encoding detection], + MOZ_UNIVERSALCHARDET=, + MOZ_UNIVERSALCHARDET=1 ) + +dnl ======================================================== +dnl = ANGLE OpenGL->D3D translator for WebGL +dnl = * only applies to win32 +dnl ======================================================== + +MOZ_ANGLE_RENDERER= +MOZ_D3D_CPU_SUFFIX= +MOZ_HAS_WINSDK_WITH_D3D= +MOZ_D3DCOMPILER_VISTA_DLL= +MOZ_D3DCOMPILER_VISTA_DLL_PATH= +MOZ_DIRECTX_SDK_PATH= +MOZ_D3DCOMPILER_XP_DLL= +MOZ_D3DCOMPILER_XP_CAB= + +if test "$COMPILE_ENVIRONMENT" ; then +case "$target_os" in +*mingw*) + MOZ_ANGLE_RENDERER=1 + ;; +esac + +# The DirectX SDK libraries are split into x86 and x64 sub-directories +case "${target_cpu}" in +i*86) + MOZ_D3D_CPU_SUFFIX=x86 + ;; +x86_64) + MOZ_D3D_CPU_SUFFIX=x64 + ;; +esac + +MOZ_ARG_ENABLE_BOOL(require-all-d3dc-versions, +[ --enable-require-all-d3dc-versions Require all versions of the D3D compiler needed for supported Windows systems.], + MOZ_REQUIRE_ALL_D3DCS=1, + MOZ_REQUIRE_ALL_D3DCS=) + +# This is potentially set in external mozconfig files; if it's set, +# then the build exposes the "webgl" context name, which is reserved +# for conformant implementations. +if test -n "$MOZ_WEBGL_CONFORMANT"; then + AC_DEFINE(MOZ_WEBGL_CONFORMANT) +fi + +dnl ======================================================== +dnl D3D compiler DLL +dnl ======================================================== +MOZ_FOUND_D3D_COMPILERS= + +if test -n "$MOZ_ANGLE_RENDERER"; then + if test -z "$MOZ_D3D_CPU_SUFFIX"; then + AC_MSG_ERROR([Couldn't determine MOZ_D3D_CPU_SUFFIX.]) + fi + + ###################################### + # Find _46+ for use by Vista+. + + # Find a D3D compiler DLL in a Windows SDK. + MOZ_D3DCOMPILER_VISTA_DLL= + case "$MOZ_WINSDK_MAXVER" in + 0x0603*|0x0A00*) + MOZ_D3DCOMPILER_VISTA_DLL=d3dcompiler_47.dll + AC_MSG_RESULT([Found D3D compiler in Windows SDK.]) + ;; + esac + + if test -n "$MOZ_D3DCOMPILER_VISTA_DLL"; then + # We have a name, now track down the path. + if test -n "$WINDOWSSDKDIR"; then + MOZ_D3DCOMPILER_VISTA_DLL_PATH="$WINDOWSSDKDIR/Redist/D3D/$MOZ_D3D_CPU_SUFFIX/$MOZ_D3DCOMPILER_VISTA_DLL" + if test -f "$MOZ_D3DCOMPILER_VISTA_DLL_PATH"; then + AC_MSG_RESULT([Found MOZ_D3DCOMPILER_VISTA_DLL_PATH: $MOZ_D3DCOMPILER_VISTA_DLL_PATH]) + MOZ_HAS_WINSDK_WITH_D3D=1 + else + AC_MSG_RESULT([MOZ_D3DCOMPILER_VISTA_DLL_PATH doesn't exist: $MOZ_D3DCOMPILER_VISTA_DLL_PATH]) + AC_MSG_ERROR([Windows SDK at "$WINDOWSSDKDIR" appears broken. Try updating to MozillaBuild 1.9 final or higher.]) + MOZ_D3DCOMPILER_VISTA_DLL_PATH= + fi + else + AC_MSG_RESULT([Windows SDK not found.]) + fi + else + AC_MSG_ERROR([Couldn't find Windows SDK 8.1 or higher needed for ANGLE.]) + fi + + if test -z "$MOZ_D3DCOMPILER_VISTA_DLL_PATH"; then + MOZ_D3DCOMPILER_VISTA_DLL= + fi + + # On mingw, check if headers are provided by toolchain. + if test -n "$GNU_CC"; then + MOZ_CHECK_HEADER(d3d10.h, MOZ_HAS_WINSDK_WITH_D3D=1) + fi + + ###################################### + # Find _43 for use by XP. + + if test "$HAVE_64BIT_BUILD"; then + AC_MSG_RESULT([We are building a 64-bit binary, skip checking d3dcompiler_43.]) + else + # Get the SDK path from the registry. + # First try to get the June 2010 SDK + MOZ_DIRECTX_SDK_REG_KEY=`reg query 'HKLM\Software\Microsoft\DirectX' //s | grep 'Microsoft DirectX SDK (June 2010)' | head -n 1` + if test -z "$MOZ_DIRECTX_SDK_REG_KEY" ; then + # Otherwise just take whatever comes first + MOZ_DIRECTX_SDK_REG_KEY=`reg query 'HKLM\Software\Microsoft\DirectX' //s | grep 'Microsoft DirectX SDK' | head -n 1` + fi + 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'` + + if test -n "$MOZ_DIRECTX_SDK_PATH" && + test -f "$MOZ_DIRECTX_SDK_PATH"/lib/$MOZ_D3D_CPU_SUFFIX/dxguid.lib ; then + AC_MSG_RESULT([Found DirectX SDK via registry, using $MOZ_DIRECTX_SDK_PATH]) + else + AC_MSG_RESULT([DirectX SDK not found.]) + MOZ_DIRECTX_SDK_PATH= + fi + + # Check that our DirectX SDK is acceptable. + if test -n "$MOZ_DIRECTX_SDK_PATH"; then + if test -n "`echo $MOZ_DIRECTX_SDK_REG_KEY | grep 'February 2010'`" ; then + AC_MSG_RESULT([Found the February 2010 DirectX SDK, which is unacceptable to ANGLE.]) + MOZ_DIRECTX_SDK_PATH= + fi + fi + + if test -n "$MOZ_DIRECTX_SDK_PATH"; then + # Find a D3D compiler DLL in the DirectX SDK, if we didn't find one already. + # Get the SDK numeric version (e.g. 43) by looking at the dependencies of d3dx9.lib + MOZ_D3DX9_VERSION=`dumpbin //headers "$MOZ_DIRECTX_SDK_PATH"/lib/$MOZ_D3D_CPU_SUFFIX/d3dx9.lib | egrep d3dx9_[[0-9]][[0-9]]\.dll | head -n1 | sed 's/.*\([[0-9]][[0-9]]\).*/\\1/g'` + + if test -n "$MOZ_D3DX9_VERSION" ; then + MOZ_D3DCOMPILER_XP_CAB=`find "$MOZ_DIRECTX_SDK_PATH"/Redist -name *D3DCompiler_${MOZ_D3DX9_VERSION}_${MOZ_D3D_CPU_SUFFIX}.cab | head -n1` + + if test -n "$MOZ_D3DCOMPILER_XP_CAB"; then + MOZ_D3DCOMPILER_XP_DLL=D3DCompiler_$MOZ_D3DX9_VERSION.dll + else + AC_MSG_RESULT([Couldn't find a CAB containing the D3D compiler DLL.]) + AC_MSG_ERROR([DirectX SDK at "$MOZ_DIRECTX_SDK_PATH" appears broken.]) + MOZ_DIRECTX_SDK_PATH= + fi + else + AC_MSG_RESULT([Couldn't determine the D3DX9 version for the DirectX SDK.]) + MOZ_DIRECTX_SDK_PATH= + fi + else + AC_MSG_RESULT([Couldn't find an acceptable DirectX SDK for ANGLE, needed for d3dcompiler_43.]) + fi + fi + + ###################################### + # Check that we found what we needed. + MOZ_FOUND_A_D3D_COMPILER= + MOZ_FOUND_BOTH_D3D_COMPILERS=1 + + if test -n "$MOZ_D3DCOMPILER_VISTA_DLL"; then + MOZ_FOUND_A_D3D_COMPILER=1 + AC_MSG_RESULT([Found d3dcompiler DLL for Vista+: $MOZ_D3DCOMPILER_VISTA_DLL]) + else + MOZ_FOUND_BOTH_D3D_COMPILERS= + fi + + if test -n "$MOZ_D3DCOMPILER_XP_DLL"; then + MOZ_FOUND_A_D3D_COMPILER=1 + AC_MSG_RESULT([Found d3dcompiler DLL for XP: $MOZ_D3DCOMPILER_XP_DLL]) + else + MOZ_FOUND_BOTH_D3D_COMPILERS= + fi + + if test -z "$CROSS_COMPILE"; then + if test -z "MOZ_FOUND_A_D3D_COMPILER"; then + AC_MSG_ERROR([Couldn't find an acceptable D3D compiler DLL.]) + fi + + if test -n "$MOZ_REQUIRE_ALL_D3DCS" -a -z "$MOZ_FOUND_BOTH_D3D_COMPILERS"; then + AC_MSG_ERROR([Both D3D compilers _43 and _46+ are required by --enable-require-d3d-compilers.]) + AC_MSG_ERROR([ Install Windows SDK 8.0+, as well as DirectX SDK (June 2010 version or newer), or reconfigure without this flag.]) + fi + fi +fi # MOZ_ANGLE_RENDERER + +fi # COMPILE_ENVIRONMENT + + +dnl ======================================================== +dnl Gamepad support +dnl ======================================================== +MOZ_GAMEPAD=1 +MOZ_GAMEPAD_BACKEND=stub + +MOZ_ARG_DISABLE_BOOL(gamepad, +[ --disable-gamepad Disable gamepad support], + MOZ_GAMEPAD=, + MOZ_GAMEPAD=1) + +if test "$MOZ_GAMEPAD"; then + case "$OS_TARGET" in + Darwin) + if test -z "$MOZ_IOS"; then + MOZ_GAMEPAD_BACKEND=cocoa + fi + ;; + WINNT) + MOZ_GAMEPAD_BACKEND=windows + ;; + Linux) + MOZ_CHECK_HEADER([linux/joystick.h]) + if test "$ac_cv_header_linux_joystick_h" != "yes"; then + 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.]) + fi + MOZ_GAMEPAD_BACKEND=linux + ;; + Android) + MOZ_GAMEPAD_BACKEND=android + ;; + *) + ;; + esac + + AC_DEFINE(MOZ_GAMEPAD) +fi +AC_SUBST(MOZ_GAMEPAD) +AC_SUBST(MOZ_GAMEPAD_BACKEND) + +dnl ======================================================== +dnl = Breakpad crash reporting (on by default on supported platforms) +dnl ======================================================== + +case $target in +i?86-*-mingw*|x86_64-*-mingw*) + MOZ_CRASHREPORTER=1 + ;; +i?86-apple-darwin*|x86_64-apple-darwin*) + if test -z "$MOZ_IOS"; then + MOZ_CRASHREPORTER=1 + fi + ;; +i?86-*-linux*|x86_64-*-linux*|arm-*-linux*) + if test "$MOZ_ENABLE_GTK"; then + MOZ_CRASHREPORTER=1 + fi + ;; +*-android*|*-linuxandroid*) + MOZ_CRASHREPORTER=1 + ;; +esac + +MOZ_ARG_DISABLE_BOOL(crashreporter, +[ --disable-crashreporter Disable breakpad crash reporting], + [MOZ_CRASHREPORTER=], + [MOZ_CRASHREPORTER=F # Force enable breakpad]) + +if test "$OS_ARCH" != "$HOST_OS_ARCH" -a "$OS_ARCH" != "WINNT" -a "$OS_ARCH" != "Darwin"; then + if test "$MOZ_CRASHREPORTER" = F; then + AC_MSG_ERROR([Cannot --enable-crashreporter, as breakpad tools do not support compiling on $HOST_OS_ARCH while targeting $OS_ARCH.]) + fi + MOZ_CRASHREPORTER= +fi + +if test -n "$MOZ_CRASHREPORTER"; then + AC_DEFINE(MOZ_CRASHREPORTER) + + if test "$OS_TARGET" = "Linux" && \ + test -z "$SKIP_LIBRARY_CHECKS"; then + PKG_CHECK_MODULES(MOZ_GTHREAD, gthread-2.0) + fi + + if test "$OS_ARCH" = "WINNT"; then + if test -z "$HAVE_64BIT_BUILD" -a -n "$COMPILE_ENVIRONMENT"; then + MOZ_CRASHREPORTER_INJECTOR=1 + AC_DEFINE(MOZ_CRASHREPORTER_INJECTOR) + fi + fi +fi + +MOZ_ARG_WITH_STRING(crashreporter-enable-percent, +[ --with-crashreporter-enable-percent=NN + Enable sending crash reports by default on NN% of users. (default=100)], +[ val=`echo $withval | sed 's/[^0-9]//g'` + MOZ_CRASHREPORTER_ENABLE_PERCENT="$val"]) + +if test -z "$MOZ_CRASHREPORTER_ENABLE_PERCENT"; then + MOZ_CRASHREPORTER_ENABLE_PERCENT=100 +fi +AC_DEFINE_UNQUOTED(MOZ_CRASHREPORTER_ENABLE_PERCENT, $MOZ_CRASHREPORTER_ENABLE_PERCENT) + +dnl ======================================================== +dnl = libjpeg-turbo configuration +dnl ======================================================== +MOZ_LIBJPEG_TURBO= +LIBJPEG_TURBO_USE_YASM= +if test -z "$MOZ_SYSTEM_JPEG"; then + MOZ_LIBJPEG_TURBO=1 +fi + +MOZ_ARG_DISABLE_BOOL(libjpeg_turbo, +[ --disable-libjpeg-turbo Disable optimized jpeg decoding routines], + MOZ_LIBJPEG_TURBO=, + MOZ_LIBJPEG_TURBO=1) + +if test "$MOZ_SYSTEM_JPEG" = 1 -a "$MOZ_LIBJPEG_TURBO" = 1; then + AC_MSG_ERROR([cannot use --with-system-jpeg with --enable-libjpeg-turbo.]) +fi + +dnl Detect if we can use yasm to compile libjpeg-turbo's optimized assembly +dnl files. + +if test -n "$MOZ_LIBJPEG_TURBO" -a -n "$COMPILE_ENVIRONMENT"; then + + dnl Do we support libjpeg-turbo on this platform? + case "$OS_ARCH:$CPU_ARCH" in + Darwin:x86) + LIBJPEG_TURBO_ASFLAGS="-DPIC -DMACHO" + ;; + Darwin:x86_64) + LIBJPEG_TURBO_ASFLAGS="-D__x86_64__ -DPIC -DMACHO" + ;; + Darwin:arm*) + ;; + WINNT:x86) + LIBJPEG_TURBO_ASFLAGS="-DPIC -DWIN32" + ;; + WINNT:x86_64) + LIBJPEG_TURBO_ASFLAGS="-D__x86_64__ -DPIC -DWIN64 -DMSVC" + ;; + *:arm) + LIBJPEG_TURBO_ASFLAGS="-march=armv7-a -mfpu=neon" + ;; + *:aarch64) + LIBJPEG_TURBO_ASFLAGS="-march=armv8-a" + ;; + *:mips32) + LIBJPEG_TURBO_ASFLAGS="-mdspr2" + ;; + *:x86) + if $CC -E -dM -</dev/null | grep -q __ELF__; then + LIBJPEG_TURBO_ASFLAGS="-DPIC -DELF" + fi + ;; + *:x86_64) + if $CC -E -dM -</dev/null | grep -q __ELF__; then + LIBJPEG_TURBO_ASFLAGS="-D__x86_64__ -DPIC -DELF" + fi + ;; + esac +fi + +if test -n "$LIBJPEG_TURBO_ASFLAGS"; then + case "$CPU_ARCH" in +dnl If we're on an x86 or x64 system which supports libjpeg-turbo's asm routines +dnl and --disable-libjpeg-turbo wasn't passed, check for Yasm, and error out if +dnl it doesn't exist or we have too old of a version. + x86_64|x86) + LIBJPEG_TURBO_USE_YASM=1 + + if test -z "$YASM" ; then + 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.]) + fi + + dnl Check that we have the right yasm version. We require 1.0.1 or newer + dnl on Linux and 1.1 or newer everywhere else. + if test "$OS_ARCH" = "Linux" ; then + 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 + 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.]) + fi + else + if test "$_YASM_MAJOR_VERSION" -lt "1" -o \( "$_YASM_MAJOR_VERSION" -eq "1" -a "$_YASM_MINOR_VERSION" -lt "1" \) ; then + 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.]) + fi + fi + ;; + esac +fi + +dnl ======================================================== +dnl = libav-fft configuration +dnl ======================================================== + +MOZ_LIBAV_FFT= + +dnl Turn on libav-fft for 32-bit windows, and all 64-bit supported platforms. +dnl 32-bit linux/os x have text relocation issues. + +case "$OS_ARCH:$CPU_ARCH" in + WINNT:x86) + MOZ_LIBAV_FFT=1 + ;; + *:x86_64) + MOZ_LIBAV_FFT=1 + ;; +esac + +dnl Detect if we can use yasm to compile libav's assembly + +if test -n "$MOZ_LIBAV_FFT" -a -n "$COMPILE_ENVIRONMENT"; then + AC_DEFINE(MOZ_LIBAV_FFT) + dnl Do we support libav-fft on this platform? + case "$OS_ARCH:$CPU_ARCH" in + Darwin:x86_64) + LIBAV_FFT_ASFLAGS="-D__x86_64__ -DPIC -DMACHO" + ;; + WINNT:x86) + LIBAV_FFT_ASFLAGS="-DPIC -DWIN32" + ;; + WINNT:x86_64) + LIBAV_FFT_ASFLAGS="-D__x86_64__ -DPIC -DWIN64 -DMSVC" + ;; + *:x86_64) + if $CC -E -dM -</dev/null | grep -q __ELF__; then + LIBAV_FFT_ASFLAGS="-D__x86_64__ -DPIC -DELF" + fi + ;; + *) + AC_MSG_ERROR([libav's FFT routines are only available for 32-bit windows or 64-bit x86 based platforms.]) + ;; + esac +fi + +if test -n "$LIBAV_FFT_ASFLAGS"; then + dnl If we're on an x86 or x64 system which supports libav-fft's asm routines + dnl check for Yasm, and error out if it doesn't exist or we have too old of a + dnl version. + if test -z "$YASM" ; then + AC_MSG_ERROR([Yasm is required to build with libav's optimized FFT routines, but you do not appear to have Yasm installed. See https://developer.mozilla.org/en/YASM for more details.]) + fi + dnl Check that we have the right yasm version. We require 1.0.1 or newer + dnl on Linux and 1.1 or newer everywhere else. + if test "$OS_ARCH" = "Linux" ; then + 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 + AC_MSG_ERROR([Yasm 1.0.1 or greater is required to build with libav's optimized FFT routines, but you do not appear to have Yasm installed. See https://developer.mozilla.org/en/YASM for more details.]) + fi + else + if test "$_YASM_MAJOR_VERSION" -lt "1" -o \( "$_YASM_MAJOR_VERSION" -eq "1" -a "$_YASM_MINOR_VERSION" -lt "1" \) ; then + AC_MSG_ERROR([Yasm 1.1 or greater is required to build with libav's optimized FFT routines, but you do not appear to have Yasm installed. See https://developer.mozilla.org/en/YASM for more details.]) + fi + fi +elif test -n "$MOZ_LIBAV_FFT" -a "${CPU_ARCH}" != "arm"; then + dnl Warn if we're not building either libav or opendl-max optimized routines. + AC_MSG_WARN([No assembler or assembly support for libav-fft. Using unoptimized C routines.]) +fi + +dnl ======================================================== +dnl = FFmpeg's ffvpx configuration +dnl ======================================================== + +MOZ_FFVPX= +case "$CPU_ARCH" in + x86) + MOZ_FFVPX=1 + ;; + x86_64) + MOZ_FFVPX=1 + ;; +esac + +dnl Use same conditional as MOZ_LIBAV_FFT to enable FFmpeg's ffvpx assembly decoder. +if test -n "$MOZ_LIBAV_FFT"; then + FFVPX_ASFLAGS=$LIBAV_FFT_ASFLAGS +fi +if test -n "$MOZ_FFVPX"; then + AC_DEFINE(MOZ_FFVPX) +fi + +dnl ======================================================== +dnl = Enable compilation of specific extension modules +dnl ======================================================== + +MOZ_ARG_ENABLE_STRING(extensions, +[ --enable-extensions Enable extensions], +[ for option in `echo $enableval | sed 's/,/ /g'`; do + if test "$option" = "yes" -o "$option" = "all"; then + AC_MSG_ERROR([--enable-extensions=$option is no longer supported.]) + elif test "$option" = "no" -o "$option" = "none"; then + MOZ_EXTENSIONS="" + elif test "$option" = "default"; then + MOZ_EXTENSIONS="$MOZ_EXTENSIONS $MOZ_EXTENSIONS_DEFAULT" + elif test `echo "$option" | grep -c \^-` != 0; then + option=`echo $option | sed 's/^-//'` + MOZ_EXTENSIONS=`echo "$MOZ_EXTENSIONS" | sed "s/ ${option}//"` + else + MOZ_EXTENSIONS="$MOZ_EXTENSIONS $option" + fi +done], + MOZ_EXTENSIONS="$MOZ_EXTENSIONS_DEFAULT") + +if test -z "$MOZ_ENABLE_GIO" -a `echo "$MOZ_EXTENSIONS" | grep -c gio` -ne 0; then + # Suppress warning on non-X11 platforms + if test -n "$MOZ_X11"; then + AC_MSG_WARN([Removing gio from MOZ_EXTENSIONS due to --disable-gio.]) + fi + MOZ_EXTENSIONS=`echo $MOZ_EXTENSIONS | sed -e 's|gio||'` +fi + +if test `echo "$MOZ_EXTENSIONS" | grep -c gio` -ne 0; then + MOZ_GIO_COMPONENT=1 + MOZ_EXTENSIONS=`echo $MOZ_EXTENSIONS | sed -e 's|gio||'` +fi +AC_SUBST(MOZ_GIO_COMPONENT) + +dnl Ensure every extension exists, to avoid mostly-inscrutable error messages +dnl when trying to build a nonexistent extension. +for extension in $MOZ_EXTENSIONS; do + if test ! -d "${srcdir}/extensions/${extension}"; then + AC_MSG_ERROR([Unrecognized extension provided to --enable-extensions: ${extension}.]) + fi +done + +if test -n "$MOZ_USE_NATIVE_POPUP_WINDOWS"; then + AC_DEFINE(MOZ_USE_NATIVE_POPUP_WINDOWS) +fi + +if test -n "$MOZ_TREE_FREETYPE"; then + MOZ_ENABLE_CAIRO_FT=1 + FT_FONT_FEATURE="#define CAIRO_HAS_FT_FONT 1" + CAIRO_FT_CFLAGS="-I$_topsrcdir/modules/freetype2/include" + AC_SUBST_LIST(CAIRO_FT_CFLAGS) +fi + +AC_CHECK_PROGS(WGET, wget, "") +AC_SUBST(WGET) + +dnl ======================================================== +dnl Maintenance Service +dnl ======================================================== + +MOZ_ARG_ENABLE_BOOL(maintenance-service, +[ --enable-maintenance-service Enable building of maintenanceservice], + MOZ_MAINTENANCE_SERVICE=1, + MOZ_MAINTENANCE_SERVICE= ) + +if test -n "$MOZ_MAINTENANCE_SERVICE"; then + if test "$OS_ARCH" = "WINNT"; then + AC_DEFINE(MOZ_MAINTENANCE_SERVICE) + else + AC_MSG_ERROR([Can only build with --enable-maintenance-service with a Windows target]) + fi +fi + +dnl ======================================================== +dnl Bundled fonts on desktop platforms +dnl ======================================================== + +MOZ_ARG_ENABLE_BOOL(bundled-fonts, +[ --enable-bundled-fonts Enable support for bundled fonts on desktop platforms], + MOZ_BUNDLED_FONTS=1, + MOZ_BUNDLED_FONTS=) + +if test -n "$MOZ_BUNDLED_FONTS"; then + AC_DEFINE(MOZ_BUNDLED_FONTS) +fi + +dnl ======================================================== +dnl Verify MAR signatures +dnl ======================================================== + +MOZ_ARG_ENABLE_BOOL(verify-mar, +[ --enable-verify-mar Enable verifying MAR signatures], + MOZ_VERIFY_MAR_SIGNATURE=1, + MOZ_VERIFY_MAR_SIGNATURE= ) + +if test -n "$MOZ_VERIFY_MAR_SIGNATURE"; then + AC_DEFINE(MOZ_VERIFY_MAR_SIGNATURE) +fi + +dnl ======================================================== +dnl Enable building the signmar program. +dnl This option is much different than the --enable-verify-mar option. +dnl --enable-verify-mar is for enabling the verification check on MAR +dnl files in the updater. The --enable-signmar option is for building +dnl the signmar program. +dnl ======================================================== + +MOZ_ARG_ENABLE_BOOL(signmar, +[ --enable-signmar Enable building the signmar program], + MOZ_ENABLE_SIGNMAR=1, + MOZ_ENABLE_SIGNMAR= ) + +if test -n "$MOZ_ENABLE_SIGNMAR"; then + if test -z "$COMPILE_ENVIRONMENT" ; then + AC_MSG_WARN([Cannot --enable-signmar with --disable-compile-environment]) + MOZ_ENABLE_SIGNMAR= + else + AC_DEFINE(MOZ_ENABLE_SIGNMAR) + fi +fi + +dnl ======================================================== +dnl Updater +dnl ======================================================== + +if test "$MOZ_IOS"; then + MOZ_UPDATER= +fi + +MOZ_ARG_DISABLE_BOOL(updater, +[ --disable-updater Disable building of updater], + MOZ_UPDATER=, + MOZ_UPDATER=1 ) + +if test -n "$MOZ_UPDATER"; then + AC_DEFINE(MOZ_UPDATER) +fi + +dnl ======================================================== +dnl parental controls (for Windows Vista) +dnl ======================================================== +MOZ_ARG_DISABLE_BOOL(parental-controls, +[ --disable-parental-controls + Do not build parental controls], + MOZ_DISABLE_PARENTAL_CONTROLS=1, + MOZ_DISABLE_PARENTAL_CONTROLS=) +if test -n "$MOZ_DISABLE_PARENTAL_CONTROLS"; then + AC_DEFINE(MOZ_DISABLE_PARENTAL_CONTROLS) +fi + +AC_SUBST(MOZ_DISABLE_PARENTAL_CONTROLS) + +dnl ======================================================== +dnl = Disable smartcard support +dnl ======================================================== +if test -n "$MOZ_NO_SMART_CARDS"; then + AC_DEFINE(MOZ_NO_SMART_CARDS) +fi +AC_SUBST(MOZ_NO_SMART_CARDS) + +dnl ======================================================== +dnl = Sandboxing support +dnl ======================================================== +if test -n "$MOZ_TSAN" -o -n "$MOZ_ASAN"; then + # Bug 1182565: TSan conflicts with sandboxing on Linux. + # Bug 1287971: LSan also conflicts with sandboxing on Linux. + case $OS_TARGET in + Linux|Android) + MOZ_SANDBOX= + ;; + esac +fi + +MOZ_ARG_DISABLE_BOOL(sandbox, +[ --disable-sandbox Disable sandboxing support], + MOZ_SANDBOX=, + MOZ_SANDBOX=1) + +dnl ======================================================== +dnl = Content process sandboxing +dnl ======================================================== +if test -n "$gonkdir"; then + MOZ_CONTENT_SANDBOX=$MOZ_SANDBOX +fi + +case "$OS_TARGET:$NIGHTLY_BUILD" in +WINNT:*) + MOZ_CONTENT_SANDBOX=$MOZ_SANDBOX + ;; +Darwin:*) + MOZ_CONTENT_SANDBOX=$MOZ_SANDBOX + ;; +Linux:1) + case $CPU_ARCH in + x86_64|x86) + MOZ_CONTENT_SANDBOX=$MOZ_SANDBOX + ;; + esac + ;; +esac + +MOZ_ARG_ENABLE_BOOL(content-sandbox, +[ --enable-content-sandbox Enable sandboxing support for content-processes + --disable-content-sandbox Disable sandboxing support for content-processes], + MOZ_CONTENT_SANDBOX=1, + MOZ_CONTENT_SANDBOX=) + +if test -n "$MOZ_CONTENT_SANDBOX" -a -z "$MOZ_SANDBOX"; then + AC_MSG_ERROR([--enable-content-sandbox and --disable-sandbox are conflicting options]) +fi + +if test -n "$MOZ_CONTENT_SANDBOX"; then + AC_DEFINE(MOZ_CONTENT_SANDBOX) +fi + +AC_SUBST(MOZ_CONTENT_SANDBOX) + +dnl ======================================================== +dnl = Gecko Media Plugin sandboxing +dnl ======================================================== +case $OS_TARGET in +WINNT) + MOZ_GMP_SANDBOX=$MOZ_SANDBOX + ;; +Linux) + case $CPU_ARCH in + x86_64|x86) + MOZ_GMP_SANDBOX=$MOZ_SANDBOX + ;; + esac + ;; +Darwin) + MOZ_GMP_SANDBOX=$MOZ_SANDBOX + ;; +esac + +if test -n "$MOZ_GMP_SANDBOX"; then + AC_DEFINE(MOZ_GMP_SANDBOX) +fi + +AC_SUBST(MOZ_GMP_SANDBOX) + +if test -z "$MOZ_CONTENT_SANDBOX" -a -z "$MOZ_GMP_SANDBOX"; then + MOZ_SANDBOX= +fi + +if test -n "$MOZ_SANDBOX"; then + AC_DEFINE(MOZ_SANDBOX) +fi + +AC_SUBST(MOZ_SANDBOX) + + +dnl ======================================================== +dnl = +dnl = Module specific options +dnl = +dnl ======================================================== +MOZ_ARG_HEADER(Individual module options) + +dnl ======================================================== +dnl = Disable feed handling components +dnl ======================================================== +MOZ_ARG_DISABLE_BOOL(feeds, +[ --disable-feeds Disable feed handling and processing components], + MOZ_FEEDS=, + MOZ_FEEDS=1 ) +if test -n "$MOZ_FEEDS"; then + AC_DEFINE(MOZ_FEEDS) +else + if test "$MOZ_BUILD_APP" = "browser"; then + AC_MSG_ERROR([Cannot build Firefox with --disable-feeds.]) + fi +fi + +dnl ======================================================== +dnl Check for sqlite +dnl ======================================================== + +MOZ_SYSTEM_SQLITE= +MOZ_ARG_ENABLE_BOOL(system-sqlite, +[ --enable-system-sqlite Use system sqlite (located with pkgconfig)], +MOZ_SYSTEM_SQLITE=1, +MOZ_SYSTEM_SQLITE= ) + +if test -n "$MOZ_SYSTEM_SQLITE" +then + dnl ============================ + dnl === SQLite Version check === + dnl ============================ + dnl Check to see if the system SQLite package is new enough. + PKG_CHECK_MODULES(SQLITE, sqlite3 >= $SQLITE_VERSION) + + dnl ================================== + dnl === SQLITE_SECURE_DELETE check === + dnl ================================== + dnl Check to see if the system SQLite package is compiled with + dnl SQLITE_SECURE_DELETE enabled. + AC_MSG_CHECKING(for SQLITE_SECURE_DELETE support in system SQLite) + _SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $SQLITE_CFLAGS" + _SAVE_LIBS="$LIBS" + LIBS="$LIBS $SQLITE_LIBS" + AC_CACHE_VAL(ac_cv_sqlite_secure_delete,[ + AC_TRY_RUN([ + #include "sqlite3.h" + + int main(int argc, char **argv){ + return !sqlite3_compileoption_used("SQLITE_SECURE_DELETE"); + }], + ac_cv_sqlite_secure_delete=yes, + ac_cv_sqlite_secure_delete=no, + ac_cv_sqlite_secure_delete=no + ) + ]) + AC_MSG_RESULT($ac_cv_sqlite_secure_delete) + CFLAGS="$_SAVE_CFLAGS" + LIBS="$_SAVE_LIBS" + if test "x$ac_cv_sqlite_secure_delete" = "xno"; then + AC_MSG_ERROR([System SQLite library is not compiled with SQLITE_SECURE_DELETE.]) + fi + + dnl =============================== + dnl === SQLITE_THREADSAFE check === + dnl =============================== + dnl Check to see if the system SQLite package is compiled with + dnl SQLITE_THREADSAFE enabled. + AC_MSG_CHECKING(for SQLITE_THREADSAFE support in system SQLite) + _SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $SQLITE_CFLAGS" + _SAVE_LIBS="$LIBS" + LIBS="$LIBS $SQLITE_LIBS" + AC_CACHE_VAL(ac_cv_sqlite_threadsafe,[ + AC_TRY_RUN([ + #include "sqlite3.h" + + int main(int argc, char **argv){ + return !sqlite3_compileoption_used("SQLITE_THREADSAFE=1"); + }], + ac_cv_sqlite_threadsafe=yes, + ac_cv_sqlite_threadsafe=no, + ac_cv_sqlite_threadsafe=no + ) + ]) + AC_MSG_RESULT($ac_cv_sqlite_threadsafe) + CFLAGS="$_SAVE_CFLAGS" + LIBS="$_SAVE_LIBS" + if test "x$ac_cv_sqlite_threadsafe" = "xno"; then + AC_MSG_ERROR([System SQLite library is not compiled with SQLITE_THREADSAFE.]) + fi + + dnl ================================ + dnl === SQLITE_ENABLE_FTS3 check === + dnl ================================ + dnl check to see if the system SQLite package is compiled with + dnl SQLITE_ENABLE_FTS3 enabled. + AC_MSG_CHECKING(for SQLITE_ENABLE_FTS3 support in system SQLite) + _SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $SQLITE_CFLAGS" + _SAVE_LIBS="$LIBS" + LIBS="$LIBS $SQLITE_LIBS" + AC_CACHE_VAL(ac_cv_sqlite_enable_fts3,[ + AC_TRY_RUN([ + #include "sqlite3.h" + + int main(int argc, char **argv){ + return !sqlite3_compileoption_used("SQLITE_ENABLE_FTS3"); + }], + ac_cv_sqlite_enable_fts3=yes, + ac_cv_sqlite_enable_fts3=no, + ac_cv_sqlite_enable_fts3=no + ) + ]) + AC_MSG_RESULT($ac_cv_sqlite_enable_fts3) + CFLAGS="$_SAVE_CFLAGS" + LIBS="$_SAVE_LIBS" + if test "x$ac_cv_sqlite_enable_fts3" = "xno"; then + AC_MSG_ERROR([System SQLite library is not compiled with SQLITE_ENABLE_FTS3.]) + fi + + dnl ========================================= + dnl === SQLITE_ENABLE_UNLOCK_NOTIFY check === + dnl ========================================= + dnl check to see if the system SQLite package is compiled with + dnl SQLITE_ENABLE_UNLOCK_NOTIFY enabled. + AC_MSG_CHECKING(for SQLITE_ENABLE_UNLOCK_NOTIFY support in system SQLite) + _SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $SQLITE_CFLAGS" + _SAVE_LIBS="$LIBS" + LIBS="$LIBS $SQLITE_LIBS" + AC_CACHE_VAL(ac_cv_sqlite_enable_unlock_notify,[ + AC_TRY_RUN([ + #include "sqlite3.h" + + int main(int argc, char **argv){ + return !sqlite3_compileoption_used("SQLITE_ENABLE_UNLOCK_NOTIFY"); + }], + ac_cv_sqlite_enable_unlock_notify=yes, + ac_cv_sqlite_enable_unlock_notify=no, + ac_cv_sqlite_enable_unlock_notify=no + ) + ]) + AC_MSG_RESULT($ac_cv_sqlite_enable_unlock_notify) + CFLAGS="$_SAVE_CFLAGS" + LIBS="$_SAVE_LIBS" + if test "x$ac_cv_sqlite_enable_unlock_notify" = "xno"; then + AC_MSG_ERROR([System SQLite library is not compiled with SQLITE_ENABLE_UNLOCK_NOTIFY.]) + fi + + dnl ========================================= + dnl === SQLITE_ENABLE_DBSTAT_VTAB check === + dnl ========================================= + dnl check to see if the system SQLite package is compiled with + dnl SQLITE_ENABLE_DBSTAT_VTAB. + AC_MSG_CHECKING(for SQLITE_ENABLE_DBSTAT_VTAB support in system SQLite) + _SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $SQLITE_CFLAGS" + _SAVE_LIBS="$LIBS" + LIBS="$LIBS $SQLITE_LIBS" + AC_CACHE_VAL(ac_cv_sqlite_dbstat_vtab,[ + AC_TRY_RUN([ + #include "sqlite3.h" + + int main(int argc, char **argv){ + return !sqlite3_compileoption_used("SQLITE_ENABLE_DBSTAT_VTAB"); + }], + ac_cv_sqlite_dbstat_vtab=yes, + ac_cv_sqlite_dbstat_vtab=no, + ac_cv_sqlite_dbstat_vtab=no + ) + ]) + AC_MSG_RESULT($ac_cv_sqlite_dbstat_vtab) + CFLAGS="$_SAVE_CFLAGS" + LIBS="$_SAVE_LIBS" + if test "x$ac_cv_sqlite_dbstat_vtab" = "xno"; then + AC_MSG_ERROR([System SQLite library is not compiled with SQLITE_ENABLE_DBSTAT_VTAB.]) + fi +fi + +if test -n "$MOZ_SYSTEM_SQLITE"; then + AC_DEFINE(MOZ_SYSTEM_SQLITE) +fi +AC_SUBST(MOZ_SYSTEM_SQLITE) + +dnl ======================================================== +dnl = Enable url-classifier +dnl ======================================================== +MOZ_ARG_ENABLE_BOOL(url-classifier, +[ --enable-url-classifier Enable url classifier module], + MOZ_URL_CLASSIFIER=1, + MOZ_URL_CLASSIFIER= ) +if test -n "$MOZ_URL_CLASSIFIER"; then + AC_DEFINE(MOZ_URL_CLASSIFIER) +fi +AC_SUBST(MOZ_URL_CLASSIFIER) + +dnl ======================================================== +dnl = Disable zipwriter +dnl ======================================================== +MOZ_ARG_DISABLE_BOOL(zipwriter, +[ --disable-zipwriter Disable zipwriter component], + MOZ_ZIPWRITER=, + MOZ_ZIPWRITER=1 ) +AC_SUBST(MOZ_ZIPWRITER) + +dnl ======================================================== +dnl = faststripe theme +dnl ======================================================== +MOZ_ARG_ENABLE_BOOL(faststripe, +[ --enable-faststripe Use faststripe theme], + MOZ_THEME_FASTSTRIPE=1, + MOZ_THEME_FASTSTRIPE= ) +AC_SUBST(MOZ_THEME_FASTSTRIPE) + +dnl ======================================================== +dnl = +dnl = Feature options that require extra sources to be pulled +dnl = +dnl ======================================================== +dnl MOZ_ARG_HEADER(Features that require extra sources) + +dnl ======================================================== +dnl = +dnl = Runtime debugging and Optimization Options +dnl = +dnl ======================================================== +MOZ_ARG_HEADER(Runtime debugging and Optimizations) + +dnl ======================================================== +dnl enable mobile optimizations +dnl ======================================================== +MOZ_ARG_ENABLE_BOOL(mobile-optimize, +[ --enable-mobile-optimize + Enable mobile optimizations], + MOZ_GFX_OPTIMIZE_MOBILE=1) + +AC_SUBST(MOZ_GFX_OPTIMIZE_MOBILE) + +if test "$MOZ_GFX_OPTIMIZE_MOBILE"; then + # We ignore paint will resample on mobile for performance. + # We may want to revisit this later. + MOZ_IGNORE_PAINT_WILL_RESAMPLE=1 + + AC_DEFINE(MOZ_GFX_OPTIMIZE_MOBILE) + AC_DEFINE(MOZ_IGNORE_PAINT_WILL_RESAMPLE) +fi + +dnl ======================================================== +dnl = Enable code optimization. ON by default. +dnl ======================================================== +if test -z "$MOZ_OPTIMIZE_FLAGS"; then + MOZ_OPTIMIZE_FLAGS="-O" +fi + +MOZ_ARG_ENABLE_STRING(optimize, +[ --disable-optimize Disable compiler optimization + --enable-optimize=[OPT] Specify compiler optimization flags [OPT=-O]], +[ if test "$enableval" != "no"; then + MOZ_OPTIMIZE=1 + if test -n "$enableval" -a "$enableval" != "yes"; then + MOZ_OPTIMIZE_FLAGS=`echo "$enableval" | sed -e 's|\\\ | |g'` + MOZ_OPTIMIZE=2 + fi +else + MOZ_OPTIMIZE= +fi ], MOZ_OPTIMIZE=1) + +MOZ_SET_FRAMEPTR_FLAGS + +if test "$COMPILE_ENVIRONMENT"; then +if test -n "$MOZ_OPTIMIZE"; then + AC_MSG_CHECKING([for valid C compiler optimization flags]) + _SAVE_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS $MOZ_OPTIMIZE_FLAGS" + AC_TRY_COMPILE([#include <stdio.h>], + [printf("Hello World\n");], + _results=yes, + _results=no) + AC_MSG_RESULT([$_results]) + if test "$_results" = "no"; then + AC_MSG_ERROR([These compiler flags for C are invalid: $MOZ_OPTIMIZE_FLAGS]) + fi + CFLAGS=$_SAVE_CFLAGS +fi +fi # COMPILE_ENVIRONMENT + +AC_SUBST(MOZ_OPTIMIZE) +AC_SUBST(MOZ_FRAMEPTR_FLAGS) +AC_SUBST(MOZ_OPTIMIZE_FLAGS) +AC_SUBST(MOZ_OPTIMIZE_LDFLAGS) +AC_SUBST_LIST(MOZ_ALLOW_HEAP_EXECUTE_FLAGS) +AC_SUBST(MOZ_PGO_OPTIMIZE_FLAGS) + +dnl ======================================================== +dnl = Disable treating compiler warnings as errors +dnl ======================================================== +if test -z "$MOZ_ENABLE_WARNINGS_AS_ERRORS"; then + WARNINGS_AS_ERRORS='' +fi + +dnl ======================================================== +dnl = Enable runtime logging +dnl ======================================================== +AC_DEFINE(MOZ_LOGGING) +AC_DEFINE(FORCE_PR_LOG) + +dnl ======================================================== +dnl = This will enable logging of addref, release, ctor, dtor. +dnl ======================================================== +_ENABLE_LOGREFCNT=42 +MOZ_ARG_ENABLE_BOOL(logrefcnt, +[ --enable-logrefcnt Enable logging of refcounts (default=debug) ], + _ENABLE_LOGREFCNT=1, + _ENABLE_LOGREFCNT= ) +if test "$_ENABLE_LOGREFCNT" = "1"; then + AC_DEFINE(FORCE_BUILD_REFCNT_LOGGING) +elif test -z "$_ENABLE_LOGREFCNT"; then + AC_DEFINE(NO_BUILD_REFCNT_LOGGING) +fi + +dnl ======================================================== +dnl moz_dump_painting +dnl ======================================================== +MOZ_ARG_ENABLE_BOOL(dump-painting, +[ --enable-dump-painting Enable paint debugging.], + MOZ_DUMP_PAINTING=1, + MOZ_DUMP_PAINTING= ) +if test -n "$MOZ_DUMP_PAINTING"; then + AC_DEFINE(MOZ_DUMP_PAINTING) + AC_DEFINE(MOZ_LAYERS_HAVE_LOG) +fi +if test -n "$MOZ_DEBUG"; then + AC_DEFINE(MOZ_DUMP_PAINTING) +fi + +case "${OS_TARGET}" in +Android|WINNT|Darwin) + MOZ_GLUE_IN_PROGRAM= + ;; +*) + dnl On !Android !Windows !OSX, we only want to link executables against mozglue + MOZ_GLUE_IN_PROGRAM=1 + AC_DEFINE(MOZ_GLUE_IN_PROGRAM) + ;; +esac + +if test -n "$MOZ_REPLACE_MALLOC"; then + MOZ_SYSTEM_JEMALLOC= + + dnl Replace-malloc Mac linkage quirks + if test -n "$MACOSX_DEPLOYMENT_TARGET"; then + AC_CACHE_CHECK([how to do weak dynamic linking], + ac_cv_weak_dynamic_linking, + [echo 'extern void foo() __attribute__((weak_import));int bar() { if (foo) foo(); return 0; }' > conftest.c + if AC_TRY_COMMAND([${CC-cc} -o conftest${DLL_SUFFIX} $CFLAGS -dynamiclib $LDFLAGS -Wl,-U,_foo conftest.c $LIBS 1>&5]) && + test -s conftest${DLL_SUFFIX}; then + dnl There are several ways the linker can put link edit rules in a binary: + dnl - classic info only (for OSX < 10.6) + dnl - dyld info only + dnl - both + if "$OTOOL" -l conftest${DLL_SUFFIX} 2> /dev/null | grep "LC_DYLD_INFO_ONLY" > /dev/null; then + _CLASSIC_INFO= + else + _CLASSIC_INFO=1 + fi + if "$OTOOL" -l conftest${DLL_SUFFIX} 2> /dev/null | grep "LC_DYLD_INFO" > /dev/null; then + _DYLD_INFO=1 + else + _DYLD_INFO= + fi + dnl With classic info, we need to build with -flat_namespace. + dnl With dyld info, Xcode 4.5 does the right thing without additional flags, + dnl but Xcode < 4.5 requires a dummy library and -flat_namespace because it + dnl forgets to set the weak flag in the dyld info. + dnl See http://glandium.org/blog/?p=2764 for more details. + dnl + dnl Values for ac_cv_weak_dynamic_linking, and subsequently + dnl MOZ_REPLACE_MALLOC_LINKAGE are thus: + dnl - "flat namespace" when -flat_namespace alone is needed + dnl - "dummy library" when a dummy library and -flat_namespace are needed + dnl - "compiler support" when nothing is needed + if test -n "$_DYLD_INFO" && dyldinfo -bind conftest${DLL_SUFFIX} 2> /dev/null | grep "_foo (weak import)" > /dev/null; then + if test -n "$_CLASSIC_INFO"; then + ac_cv_weak_dynamic_linking="flat namespace" + else + ac_cv_weak_dynamic_linking="compiler support" + fi + else + if test -n "$_DYLD_INFO"; then + ac_cv_weak_dynamic_linking="dummy library" + else + ac_cv_weak_dynamic_linking="flat namespace" + fi + fi + else + AC_ERROR([couldn't compile a simple C file]) + fi + rm -rf conftest*]) + MOZ_REPLACE_MALLOC_LINKAGE="$ac_cv_weak_dynamic_linking" + fi +fi +AC_SUBST(MOZ_REPLACE_MALLOC_LINKAGE) + +dnl ======================================================== +dnl = Jemalloc build setup +dnl ======================================================== +if test -z "$MOZ_MEMORY"; then + case "${target}" in + *-mingw*) + if test -z "$WIN32_REDIST_DIR" -a -z "$MOZ_DEBUG"; then + 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.]) + fi + ;; + esac +else + if test -n "$MOZ_JEMALLOC4" -a -z "$MOZ_REPLACE_MALLOC"; then + MOZ_SYSTEM_JEMALLOC=1 + AC_CHECK_FUNCS(mallctl nallocx,, + [MOZ_SYSTEM_JEMALLOC= + break]) + if test -n "$MOZ_SYSTEM_JEMALLOC"; then + AC_DEFINE(MOZ_SYSTEM_JEMALLOC) + fi + fi + if test "x$MOZ_DEBUG" = "x1"; then + AC_DEFINE(MOZ_MEMORY_DEBUG) + fi + dnl The generic feature tests that determine how to compute ncpus are long and + dnl complicated. Therefore, simply define special cpp variables for the + dnl platforms we have special knowledge of. + case "${target}" in + *-mingw*) + export MOZ_NO_DEBUG_RTL=1 + ;; + esac +fi # MOZ_MEMORY +AC_SUBST(MOZ_SYSTEM_JEMALLOC) +AC_SUBST(MOZ_GLUE_IN_PROGRAM) + +# Allow the application to provide a subconfigure script. +# This should be after 'export MOZ_NO_DEBUG_RTL=1' since +# ldap/c-sdk/configure refers to the enviroment value. +if test -f "${srcdir}/${MOZ_BUILD_APP}/configure.in" ; then + do_output_subdirs() { + if test -n "$_subconfigure_subdirs"; then + AC_MSG_ERROR([Cannot specify more than one sub-sub-configure]) + fi + _subconfigure_subdir="$1" + _subconfigure_config_args="$ac_configure_args" + } + tmpscript=`$PYTHON -c 'import os, tempfile; print tempfile.mktemp(prefix="subscript.").replace(os.sep, "/")'` || exit 1 + m4 "${srcdir}/build/autoconf/subconfigure.m4" \ + "${srcdir}/build/autoconf/altoptions.m4" \ + "${srcdir}/${MOZ_BUILD_APP}/configure.in" > $tmpscript + . $tmpscript + rm -f $tmpscript +fi + +AC_SUBST_LIST(MOZ_GLUE_WRAP_LDFLAGS) +export MOZ_GLUE_WRAP_LDFLAGS + +dnl ======================================================== +dnl = Enable using the clang plugin to build +dnl ======================================================== + +MOZ_CONFIG_CLANG_PLUGIN + +dnl ======================================================== +dnl = Enable stripping of libs & executables +dnl ======================================================== +MOZ_ARG_ENABLE_BOOL(strip, +[ --enable-strip Enable stripping of libs & executables ], + ENABLE_STRIP=1, + ENABLE_STRIP= ) + +dnl ======================================================== +dnl = Enable stripping of libs & executables when packaging +dnl ======================================================== +MOZ_ARG_ENABLE_BOOL(install-strip, +[ --enable-install-strip Enable stripping of libs & executables when packaging ], + PKG_SKIP_STRIP= , + PKG_SKIP_STRIP=1) + +dnl ======================================================== +dnl = --disable-elf-hack +dnl ======================================================== + +USE_ELF_HACK=1 +MOZ_ARG_DISABLE_BOOL(elf-hack, +[ --disable-elf-hack Disable elf hacks], + [USE_ELF_HACK=], + [USE_ELF_HACK=1]) + +# Only enable elfhack where supported +if test "$USE_ELF_HACK" = 1; then + case "${HOST_OS_ARCH},${OS_ARCH}" in + Linux,Linux) + case "${CPU_ARCH}" in + arm | x86 | x86_64) + USE_ELF_HACK=1 + ;; + *) + USE_ELF_HACK= + ;; + esac + ;; + *) + USE_ELF_HACK= + ;; + esac +fi + +if test -n "$COMPILE_ENVIRONMENT" -a -n "$USE_ELF_HACK"; then + dnl PT_GNU_RELRO segment makes the dynamic linker set a read-only flag on + dnl memory addresses it maps to. The result is that by the time elfhack + dnl kicks in, it is not possible to apply relocations because of that, + dnl thus elfhack effectively skips relocations inside the PT_GNU_RELRO + dnl segment. It makes elfhack mostly useless, so considering the problems + dnl we have we PT_GNU_RELRO (e.g. bug 664366), and until elfhack can deal + dnl with PT_GNU_RELRO segments, it's just simpler to disable elfhack when + dnl the linker creates PT_GNU_RELRO segments. However, when we do want + dnl elfhack enabled, disable PT_GNU_RELRO instead. + AC_CACHE_CHECK([whether linker creates PT_GNU_RELRO segments], + LINK_WITH_PT_GNU_RELRO, + [echo "int main() {return 0;}" > conftest.${ac_ext} + if AC_TRY_COMMAND(${CC-cc} -o conftest${ac_exeext} $LDFLAGS conftest.${ac_ext} $LIBS 1>&2) && + test -s conftest${ac_exeext}; then + if ${TOOLCHAIN_PREFIX}readelf -l conftest${ac_exeext} | grep GNU_RELRO > /dev/null; then + LINK_WITH_PT_GNU_RELRO=yes + else + LINK_WITH_PT_GNU_RELRO=no + fi + else + dnl We really don't expect to get here, but just in case + AC_ERROR([couldn't compile a simple C file]) + fi + rm -rf conftest*]) + if test "$LINK_WITH_PT_GNU_RELRO" = yes; then + if test "$USE_ELF_HACK" = F; then + AC_MSG_CHECKING([for -z norelro option to ld]) + _SAVE_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -Wl,-z,norelro" + AC_TRY_LINK(,,AC_MSG_RESULT([yes]) + [NSPR_LDFLAGS="$NSPR_LDFLAGS -Wl,-z,norelro"], + 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.])) + USE_ELF_HACK=1 + else + AC_MSG_WARN([Disabling elfhack]) + USE_ELF_HACK= + fi + fi +fi # COMPILE_ENVIRONMENT and others. + +dnl ======================================================== +dnl = libstdc++ compatibility hacks +dnl ======================================================== + +STDCXX_COMPAT= +MOZ_ARG_ENABLE_BOOL(stdcxx-compat, +[ --enable-stdcxx-compat Enable compatibility with older libstdc++], + STDCXX_COMPAT=1) + +if test -n "$STDCXX_COMPAT"; then + eval $(CXX="$CXX" HOST_CXX="$HOST_CXX" $PYTHON -m mozbuild.configure.libstdcxx) + AC_SUBST(MOZ_LIBSTDCXX_TARGET_VERSION) + AC_SUBST(MOZ_LIBSTDCXX_HOST_VERSION) + CXXFLAGS="$CXXFLAGS -D_GLIBCXX_USE_CXX11_ABI=0" + HOST_CXXFLAGS="$HOST_CXXFLAGS -D_GLIBCXX_USE_CXX11_ABI=0" +fi + +dnl ======================================================== +dnl = frontend JS debug mode +dnl ======================================================== + +MOZ_ARG_ENABLE_BOOL(debug-js-modules, +[ --enable-debug-js-modules Enable debug mode for frontend JS libraries], + DEBUG_JS_MODULES=1, + DEBUG_JS_MODULES=) + +AC_SUBST(DEBUG_JS_MODULES) + +dnl ======================================================== +dnl = +dnl = Profiling and Instrumenting +dnl = +dnl ======================================================== +MOZ_ARG_HEADER(Profiling and Instrumenting) + +dnl ======================================================== +dnl = Enable TaskTracer +dnl ======================================================== +MOZ_ARG_ENABLE_BOOL(tasktracer, +[ --enable-tasktracer Set compile flags necessary for using TaskTracer], + MOZ_TASK_TRACER=1, + MOZ_TASK_TRACER= ) +if test -n "$MOZ_TASK_TRACER"; then + AC_DEFINE(MOZ_TASK_TRACER) + AC_SUBST(MOZ_TASK_TRACER) +fi + +dnl ======================================================== +dnl Turn on reflow counting +dnl ======================================================== +MOZ_ARG_ENABLE_BOOL(reflow-perf, +[ --enable-reflow-perf Enable reflow performance tracing], + MOZ_REFLOW_PERF=1, + MOZ_REFLOW_PERF= ) +if test -n "$MOZ_REFLOW_PERF"; then + AC_DEFINE(MOZ_REFLOW_PERF) +fi + +dnl ======================================================== +dnl = Horizon build options - set default preferences for +dnl the horizon project. Horizon is a browser built on +dnl top of the graphene runtime. +dnl ======================================================== +if test -n "$MOZ_HORIZON"; then + AC_DEFINE(MOZ_HORIZON) +fi +AC_SUBST(MOZ_HORIZON) + +dnl ======================================================== +dnl = Offer a way to disable the startup cache +dnl ======================================================== + +MOZ_ARG_DISABLE_BOOL(startupcache, +[ --disable-startupcache Disable startup cache ], + MOZ_DISABLE_STARTUPCACHE=1, + MOZ_DISABLE_STARTUPCACHE=) + +dnl bug 988880: disable startup cache on b2g +if test -n "$MOZ_B2G"; then + MOZ_DISABLE_STARTUPCACHE=1 +fi +if test -n "$MOZ_DISABLE_STARTUPCACHE"; then + AC_DEFINE(MOZ_DISABLE_STARTUPCACHE) +fi +AC_SUBST(MOZ_DISABLE_STARTUPCACHE) + +dnl ========================================= +dnl = Enable packaging Gaia with B2G desktop +dnl ========================================= +if test x"$MOZ_WIDGET_TOOLKIT" != x"gonk"; then + if test -n "$GAIADIR" -a ! -d "$GAIADIR" ; then + AC_MSG_ERROR([GAIADIR '$GAIADIR' isn't a valid directory]) + fi + + AC_SUBST(GAIADIR) + if test -n "$GAIADIR" ; then + AC_DEFINE(PACKAGE_GAIA) + fi + + if test -n "$FXOS_SIMULATOR" -a -z "$GAIADIR" ; then + AC_MSG_ERROR([FXOS_SIMULATOR=1 requires GAIADIR to be defined]) + fi + + if test -n "$FXOS_SIMULATOR" ; then + AC_DEFINE(FXOS_SIMULATOR) + AC_SUBST(FXOS_SIMULATOR) + fi +fi + +dnl ======================================================== +dnl = Enable Pico Speech Synthesis (Gonk usually) +dnl ======================================================== +MOZ_ARG_ENABLE_BOOL(synth-pico, +[ --enable-synth-pico Set compile flags necessary for compiling Pico Web Speech API ], + MOZ_SYNTH_PICO=1, + MOZ_SYNTH_PICO= ) +if test -n "$MOZ_SYNTH_PICO"; then + AC_DEFINE(MOZ_SYNTH_PICO) +fi +AC_SUBST(MOZ_SYNTH_PICO) + +dnl ======================================================== +dnl = Enable Support for Time Manager API +dnl ======================================================== +if test -n "$MOZ_TIME_MANAGER"; then + AC_DEFINE(MOZ_TIME_MANAGER) +fi +AC_SUBST(MOZ_TIME_MANAGER) + +dnl ======================================================== +dnl = Enable Support for AudioChannelManager API +dnl ======================================================== +if test -n "$MOZ_AUDIO_CHANNEL_MANAGER"; then + AC_DEFINE(MOZ_AUDIO_CHANNEL_MANAGER) +fi +AC_SUBST(MOZ_AUDIO_CHANNEL_MANAGER) + +dnl ======================================================== +dnl = Enable Support for Secure Element API +dnl ======================================================== + MOZ_SECUREELEMENT=1, +if test -n "$MOZ_SECUREELEMENT"; then + AC_DEFINE(MOZ_SECUREELEMENT) +fi + AC_SUBST(MOZ_SECUREELEMENT) + +dnl ======================================================== +dnl = Support for demangling undefined symbols +dnl ======================================================== +if test -z "$SKIP_LIBRARY_CHECKS"; then + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + AC_CHECK_FUNCS(__cxa_demangle, HAVE_DEMANGLE=1, HAVE_DEMANGLE=) + AC_LANG_RESTORE +fi + +# Demangle only for debug or DMD builds +MOZ_DEMANGLE_SYMBOLS= +if test "$HAVE_DEMANGLE" && test "$MOZ_DEBUG" -o "$MOZ_DMD"; then + MOZ_DEMANGLE_SYMBOLS=1 + AC_DEFINE(MOZ_DEMANGLE_SYMBOLS) +fi +AC_SUBST(MOZ_DEMANGLE_SYMBOLS) + +dnl ======================================================== +dnl = Support for gcc stack unwinding (from gcc 3.3) +dnl ======================================================== +if test -z "$SKIP_LIBRARY_CHECKS"; then + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + MOZ_CHECK_HEADER(unwind.h, AC_CHECK_FUNCS(_Unwind_Backtrace)) + AC_LANG_RESTORE +fi + +dnl ======================================================== +dnl JIT observers +dnl ======================================================== + +MOZ_ARG_WITH_STRING(jitreport-granularity, +[ --jitreport-granularity=N + Default granularity at which to report JIT code + to external tools + 0 - no info + 1 - code ranges for whole functions only + 2 - per-line information + 3 - per-op information], + JITREPORT_GRANULARITY=$withval, + JITREPORT_GRANULARITY=3) + +AC_DEFINE_UNQUOTED(JS_DEFAULT_JITREPORT_GRANULARITY, $JITREPORT_GRANULARITY) + +dnl ======================================================== +dnl = Disable Mozilla's versions of RIL and Geolocation +dnl ======================================================== +MOZ_ARG_DISABLE_BOOL(mozril-geoloc, +[ --disable-mozril-geoloc Disable Mozilla's RIL and geolocation], + DISABLE_MOZ_RIL_GEOLOC=1, + DISABLE_MOZ_RIL_GEOLOC= ) +if test -n "$DISABLE_MOZ_RIL_GEOLOC"; then + AC_DEFINE(DISABLE_MOZ_RIL_GEOLOC) +fi +AC_SUBST(DISABLE_MOZ_RIL_GEOLOC) + +dnl ======================================================== +dnl = +dnl = Misc. Options +dnl = +dnl ======================================================== +MOZ_ARG_HEADER(Misc. Options) + +dnl ======================================================== +dnl = Define default location for MOZILLA_FIVE_HOME +dnl ======================================================== +MOZ_ARG_WITH_STRING(default-mozilla-five-home, +[ --with-default-mozilla-five-home + Set the default value for MOZILLA_FIVE_HOME], +[ val=`echo $withval` + AC_DEFINE_UNQUOTED(MOZ_DEFAULT_MOZILLA_FIVE_HOME,"$val") ]) + +dnl ======================================================== +dnl = Location of the mozilla user directory (default is ~/.mozilla).], +dnl ======================================================== +MOZ_ARG_WITH_STRING(user-appdir, +[ --with-user-appdir=DIR Set user-specific appdir (default=.mozilla)], +[ val=`echo $withval` +if echo "$val" | grep "\/" >/dev/null; then + AC_MSG_ERROR("Homedir must be single relative path.") +else + MOZ_USER_DIR="$val" +fi]) + +AC_DEFINE_UNQUOTED(MOZ_USER_DIR,"$MOZ_USER_DIR") + +dnl ======================================================== +dnl = Doxygen configuration +dnl ======================================================== +dnl Use commas to specify multiple dirs to this arg +MOZ_DOC_INPUT_DIRS='./dist/include ./dist/idl' +MOZ_ARG_WITH_STRING(doc-input-dirs, +[ --with-doc-input-dirs=DIRS + Header/idl dirs to create docs from], +[ MOZ_DOC_INPUT_DIRS=`echo "$withval" | sed "s/,/ /g"` ] ) +AC_SUBST(MOZ_DOC_INPUT_DIRS) + +dnl Use commas to specify multiple dirs to this arg +MOZ_DOC_INCLUDE_DIRS='./dist/include ./dist/include/nspr' +MOZ_ARG_WITH_STRING(doc-include-dirs, +[ --with-doc-include-dirs=DIRS + Include dirs to preprocess doc headers], +[ MOZ_DOC_INCLUDE_DIRS=`echo "$withval" | sed "s/,/ /g"` ] ) +AC_SUBST(MOZ_DOC_INCLUDE_DIRS) + +MOZ_DOC_OUTPUT_DIR='./dist/docs' +MOZ_ARG_WITH_STRING(doc-output-dir, +[ --with-doc-output-dir=DIR + Dir to generate docs into], +[ MOZ_DOC_OUTPUT_DIR=$withval ] ) +AC_SUBST(MOZ_DOC_OUTPUT_DIR) + +if test -z "$SKIP_COMPILER_CHECKS"; then +dnl ======================================================== +dnl = +dnl = Compiler Options +dnl = +dnl ======================================================== +MOZ_ARG_HEADER(Compiler Options) + +dnl ======================================================== +dnl Check for gcc -pipe support +dnl ======================================================== +AC_MSG_CHECKING([for -pipe support]) +if test -n "$GNU_CC" -a -n "$GNU_CXX"; then + dnl Any gcc that supports firefox supports -pipe. + CFLAGS="$CFLAGS -pipe" + CXXFLAGS="$CXXFLAGS -pipe" + AC_MSG_RESULT([yes]) +else + AC_MSG_RESULT([no]) +fi + +dnl ======================================================== +dnl Profile guided optimization (gcc checks) +dnl ======================================================== +dnl Test for profiling options +dnl Under gcc 3.4+, use -fprofile-generate/-fprofile-use + +_SAVE_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -fprofile-generate -fprofile-correction" + +AC_MSG_CHECKING([whether C compiler supports -fprofile-generate]) +AC_TRY_COMPILE([], [return 0;], + [ PROFILE_GEN_CFLAGS="-fprofile-generate" + result="yes" ], result="no") +AC_MSG_RESULT([$result]) + +if test $result = "yes"; then + PROFILE_GEN_LDFLAGS="-fprofile-generate" + PROFILE_USE_CFLAGS="-fprofile-use -fprofile-correction -Wcoverage-mismatch" + PROFILE_USE_LDFLAGS="-fprofile-use" +fi + +CFLAGS="$_SAVE_CFLAGS" + +AC_SUBST(PROFILE_GEN_CFLAGS) +AC_SUBST(PROFILE_GEN_LDFLAGS) +AC_SUBST(PROFILE_USE_CFLAGS) +AC_SUBST(PROFILE_USE_LDFLAGS) + +fi # ! SKIP_COMPILER_CHECKS + +AC_DEFINE(CPP_THROW_NEW, [throw()]) +AC_LANG_C + +if test "$COMPILE_ENVIRONMENT"; then +MOZ_EXPAND_LIBS +fi # COMPILE_ENVIRONMENT + +dnl ======================================================== +dnl = +dnl = Build depencency options +dnl = +dnl ======================================================== +MOZ_ARG_HEADER(Build dependencies) + +if test "$GNU_CC" -a "$GNU_CXX"; then + _DEPEND_CFLAGS='-MD -MP -MF $(MDDEPDIR)/$(@F).pp' +else + dnl Don't override this for MSVC + if test -z "$_WIN32_MSVC"; then + _USE_CPP_INCLUDE_FLAG= + _DEFINES_CFLAGS='$(ACDEFINES) -D_MOZILLA_CONFIG_H_ -DMOZILLA_CLIENT' + _DEFINES_CXXFLAGS='$(ACDEFINES) -D_MOZILLA_CONFIG_H_ -DMOZILLA_CLIENT' + else + echo '#include <stdio.h>' > dummy-hello.c + changequote(,) + dnl This output is localized, split at the first double space or colon and space. + _CL_PREFIX_REGEX="^\([^:]*:.*[ :] \)\(.*\\\stdio.h\)$" + CL_INCLUDES_PREFIX=`${CC} -showIncludes -c -Fonul dummy-hello.c 2>&1 | sed -ne 's/'"$_CL_PREFIX_REGEX"'/\1/p'` + _CL_STDIO_PATH=`${CC} -showIncludes -c -Fonul dummy-hello.c 2>&1 | sed -ne 's/'"$_CL_PREFIX_REGEX"'/\2/p'` + changequote([,]) + if ! test -e "$_CL_STDIO_PATH"; then + AC_MSG_ERROR([Unable to parse cl -showIncludes prefix. This compiler's locale has an unsupported formatting.]) + fi + if test -z "$CL_INCLUDES_PREFIX"; then + AC_MSG_ERROR([Cannot find cl -showIncludes prefix.]) + fi + AC_SUBST(CL_INCLUDES_PREFIX) + rm -f dummy-hello.c + + dnl Make sure that the build system can handle non-ASCII characters + dnl in environment variables to prevent it from breaking silently on + dnl non-English systems. + NONASCII=$'\241\241' + AC_SUBST(NONASCII) + fi +fi + +dnl ======================================================== +dnl = +dnl = Static Build Options +dnl = +dnl ======================================================== +MOZ_ARG_HEADER(Static build options) + +if test -z "$MOZ_SYSTEM_ZLIB"; then +if test -n "$JS_SHARED_LIBRARY"; then + ZLIB_IN_MOZGLUE=1 + AC_DEFINE(ZLIB_IN_MOZGLUE) +fi +fi + +AC_SUBST(ZLIB_IN_MOZGLUE) + +dnl ======================================================== +dnl = +dnl = Standalone module options +dnl = +dnl ======================================================== +MOZ_ARG_HEADER(Standalone module options (Not for building Mozilla)) + +dnl Check for GLib. +dnl ======================================================== + +if test -z "$SKIP_PATH_CHECKS"; then +if test -z "${GLIB_CFLAGS}" -o -z "${GLIB_LIBS}" ; then + if test "$MOZ_ENABLE_GTK" ; then + PKG_CHECK_MODULES(GLIB, glib-2.0 >= 1.3.7 gobject-2.0) + fi +fi +fi + +if test -z "${GLIB_GMODULE_LIBS}" \ + -a -n "${GLIB_CONFIG}"\ + -a "${GLIB_CONFIG}" != no\ +; then + GLIB_GMODULE_LIBS=`$GLIB_CONFIG gmodule --libs` +fi + +AC_SUBST_LIST(GLIB_GMODULE_LIBS) + +if test "$USE_FC_FREETYPE"; then + if test "$COMPILE_ENVIRONMENT"; then + dnl ======================================================== + dnl = Check for freetype2 functionality + dnl ======================================================== + if test "$_HAVE_FREETYPE2" -a -z "$MOZ_TREE_FREETYPE"; then + _SAVE_LIBS="$LIBS" + _SAVE_CFLAGS="$CFLAGS" + LIBS="$LIBS $FT2_LIBS" + CFLAGS="$CFLAGS $FT2_CFLAGS" + + AC_CACHE_CHECK(for FT_Bitmap_Size.y_ppem, + ac_cv_member_FT_Bitmap_Size_y_ppem, + [AC_TRY_COMPILE([#include <ft2build.h> + #include FT_FREETYPE_H], + [FT_Bitmap_Size s; + if (sizeof s.y_ppem) return 0; + return 1], + ac_cv_member_FT_Bitmap_Size_y_ppem=yes, + ac_cv_member_FT_Bitmap_Size_y_ppem=no)]) + if test "$ac_cv_member_FT_Bitmap_Size_y_ppem" = yes; then + HAVE_FT_BITMAP_SIZE_Y_PPEM=1 + else + HAVE_FT_BITMAP_SIZE_Y_PPEM=0 + fi + AC_DEFINE_UNQUOTED(HAVE_FT_BITMAP_SIZE_Y_PPEM, + $HAVE_FT_BITMAP_SIZE_Y_PPEM, + [FT_Bitmap_Size structure includes y_ppem field]) + + AC_CHECK_FUNCS(FT_GlyphSlot_Embolden FT_Load_Sfnt_Table) + + LIBS="$_SAVE_LIBS" + CFLAGS="$_SAVE_CFLAGS" + fi + + _SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $FT2_CFLAGS $XCFLAGS" + MOZ_CHECK_HEADERS([fontconfig/fcfreetype.h], , + [AC_MSG_ERROR(Can't find header fontconfig/fcfreetype.h.)], [#include <fontconfig/fontconfig.h>]) + CPPFLAGS="$_SAVE_CPPFLAGS" + fi +fi + +dnl ======================================================== +dnl Check for pixman and cairo +dnl ======================================================== + +MOZ_TREE_CAIRO=1 +MOZ_ARG_ENABLE_BOOL(system-cairo, +[ --enable-system-cairo Use system cairo (located with pkgconfig)], +MOZ_TREE_CAIRO=, +MOZ_TREE_CAIRO=1 ) + +MOZ_TREE_PIXMAN=1 +MOZ_ARG_ENABLE_BOOL(system-pixman, +[ --enable-system-pixman Use system pixman (located with pkgconfig)], +MOZ_TREE_PIXMAN=, +MOZ_TREE_PIXMAN=force, +MOZ_TREE_PIXMAN=1 ) + +# System cairo depends on system pixman +if test "$MOZ_TREE_PIXMAN" = "force"; then + if test -z "$MOZ_TREE_CAIRO"; then + AC_MSG_ERROR([--disable-system-pixman is incompatible with --enable-system-cairo.]) + else + MOZ_TREE_PIXMAN=1 + fi +elif test -z "$MOZ_TREE_CAIRO"; then + MOZ_TREE_PIXMAN= +fi + +if test "$MOZ_TREE_PIXMAN"; then + AC_DEFINE(MOZ_TREE_PIXMAN) +else + PKG_CHECK_MODULES(MOZ_PIXMAN, pixman-1 >= 0.19.2) +fi + +if test "$MOZ_TREE_CAIRO"; then + MOZ_CAIRO_CFLAGS="-I${DIST}/include/cairo" + AC_DEFINE(MOZ_TREE_CAIRO) + + if test "$OS_ARCH" = "WINNT"; then + # For now we assume that we will have a uint64_t available through + # one of the above headers or mozstdint.h. + AC_DEFINE(HAVE_UINT64_T) + fi + + # Define macros for cairo-features.h + TEE_SURFACE_FEATURE="#define CAIRO_HAS_TEE_SURFACE 1" + if test "$MOZ_X11"; then + XLIB_SURFACE_FEATURE="#define CAIRO_HAS_XLIB_SURFACE 1" + XLIB_XRENDER_SURFACE_FEATURE="#define CAIRO_HAS_XLIB_XRENDER_SURFACE 1" + PS_SURFACE_FEATURE="#define CAIRO_HAS_PS_SURFACE 1" + fi + if test "$_HAVE_FREETYPE2"; then + FT_FONT_FEATURE="#define CAIRO_HAS_FT_FONT 1" + MOZ_ENABLE_CAIRO_FT=1 + CAIRO_FT_CFLAGS="$FT2_CFLAGS" + fi + + case "$MOZ_WIDGET_TOOLKIT" in + cocoa | uikit) + QUARTZ_SURFACE_FEATURE="#define CAIRO_HAS_QUARTZ_SURFACE 1" + QUARTZ_IMAGE_SURFACE_FEATURE="#define CAIRO_HAS_QUARTZ_IMAGE_SURFACE 1" + QUARTZ_FONT_FEATURE="#define CAIRO_HAS_QUARTZ_FONT 1" + ;; + windows) + WIN32_D2D_SURFACE_FEATURE="#define CAIRO_HAS_D2D_SURFACE 1" + WIN32_DWRITE_FONT_FEATURE="#define CAIRO_HAS_DWRITE_FONT 1" + WIN32_FONT_FEATURE="#define CAIRO_HAS_WIN32_FONT 1" + WIN32_SURFACE_FEATURE="#define CAIRO_HAS_WIN32_SURFACE 1" + MOZ_ENABLE_D2D_SURFACE=1 + MOZ_ENABLE_DWRITE_FONT=1 + + if test "$COMPILE_ENVIRONMENT"; then + + MOZ_CHECK_HEADER(d3d9.h, MOZ_ENABLE_D3D9_LAYER=1) + + dnl D3D10 Layers depend on D2D Surfaces. + if test -n "$WIN32_D2D_SURFACE_FEATURE"; then + MOZ_CHECK_HEADER(d3d10.h, MOZ_ENABLE_D3D10_LAYER=1) + fi + fi + ;; + esac + if test "$USE_FC_FREETYPE"; then + FC_FONT_FEATURE="#define CAIRO_HAS_FC_FONT 1" + fi + AC_SUBST(MOZ_ENABLE_CAIRO_FT) + AC_SUBST(MOZ_ENABLE_DWRITE_FONT) + AC_SUBST(MOZ_ENABLE_D2D_SURFACE) + AC_SUBST(MOZ_ENABLE_D3D9_LAYER) + AC_SUBST(MOZ_ENABLE_D3D10_LAYER) + + AC_SUBST(PS_SURFACE_FEATURE) + AC_SUBST(SVG_SURFACE_FEATURE) + AC_SUBST(XLIB_SURFACE_FEATURE) + AC_SUBST(XLIB_XRENDER_SURFACE_FEATURE) + AC_SUBST(QUARTZ_SURFACE_FEATURE) + AC_SUBST(QUARTZ_IMAGE_SURFACE_FEATURE) + AC_SUBST(WIN32_SURFACE_FEATURE) + AC_SUBST(OS2_SURFACE_FEATURE) + AC_SUBST(DIRECTFB_SURFACE_FEATURE) + AC_SUBST(FT_FONT_FEATURE) + AC_SUBST(FC_FONT_FEATURE) + AC_SUBST(WIN32_FONT_FEATURE) + AC_SUBST(WIN32_DWRITE_FONT_FEATURE) + AC_SUBST(WIN32_D2D_SURFACE_FEATURE) + AC_SUBST(QUARTZ_FONT_FEATURE) + AC_SUBST(PNG_FUNCTIONS_FEATURE) + AC_SUBST(QT_SURFACE_FEATURE) + AC_SUBST(TEE_SURFACE_FEATURE) + + if test "$MOZ_X11"; then + MOZ_CAIRO_OSLIBS="$MOZ_CAIRO_OSLIBS $XLDFLAGS -lXrender" + fi + + CAIRO_FEATURES_H=gfx/cairo/cairo/src/cairo-features.h +else + PKG_CHECK_MODULES(CAIRO, cairo >= $CAIRO_VERSION) + MOZ_CAIRO_CFLAGS="$CAIRO_CFLAGS" + MOZ_CAIRO_LIBS="$CAIRO_LIBS" + PKG_CHECK_MODULES(CAIRO_TEE, cairo-tee >= $CAIRO_VERSION) + if test "$MOZ_X11"; then + PKG_CHECK_MODULES(CAIRO_XRENDER, cairo-xlib-xrender >= $CAIRO_VERSION) + MOZ_CAIRO_LIBS="$MOZ_CAIRO_LIBS $XLDFLAGS $CAIRO_XRENDER_LIBS" + MOZ_CAIRO_OSLIBS="$MOZ_CAIRO_LIBS" + MOZ_CAIRO_CFLAGS="$MOZ_CAIRO_CFLAGS $CAIRO_XRENDER_CFLAGS" + fi +fi + +case "$MOZ_WIDGET_TOOLKIT" in +android|gonk) + TK_CFLAGS="$MOZ_CAIRO_CFLAGS $MOZ_PIXMAN_CFLAGS" + TK_LIBS="$MOZ_CAIRO_LIBS $MOZ_PIXMAN_LIBS" + ;; +esac + +AC_SUBST(MOZ_TREE_CAIRO) +AC_SUBST_LIST(MOZ_CAIRO_CFLAGS) +AC_SUBST_LIST(MOZ_CAIRO_LIBS) +AC_SUBST_LIST(MOZ_CAIRO_OSLIBS) +AC_SUBST(MOZ_TREE_PIXMAN) + +dnl ======================================================== +dnl disable xul +dnl ======================================================== +MOZ_ARG_DISABLE_BOOL(xul, +[ --disable-xul Disable XUL], + MOZ_XUL= ) +if test "$MOZ_XUL"; then + AC_DEFINE(MOZ_XUL) +else + dnl remove extensions that require XUL + MOZ_EXTENSIONS=`echo $MOZ_EXTENSIONS | sed -e 's/inspector//' -e 's/irc//' -e 's/tasks//'` +fi + +AC_SUBST(MOZ_XUL) + +dnl ======================================================== +dnl necko configuration options +dnl ======================================================== + +dnl +dnl option to disable necko's wifi scanner +dnl + +case "$OS_TARGET" in + Android) + if test -n "$gonkdir"; then + NECKO_WIFI=1 + fi + ;; + Darwin) + if test -z "$MOZ_IOS"; then + NECKO_WIFI=1 + fi + ;; + DragonFly|FreeBSD|WINNT) + NECKO_WIFI=1 + ;; + Linux) + NECKO_WIFI=1 + NECKO_WIFI_DBUS=1 + ;; +esac + +MOZ_ARG_DISABLE_BOOL(necko-wifi, +[ --disable-necko-wifi Disable necko wifi scanner], + NECKO_WIFI=, + NECKO_WIFI=1) + +if test "$NECKO_WIFI"; then + if test -z "$MOZ_ENABLE_DBUS" -a -n "$NECKO_WIFI_DBUS"; then + AC_MSG_ERROR([Necko WiFi scanning needs DBus on your platform, remove --disable-dbus or use --disable-necko-wifi]) + fi + AC_DEFINE(NECKO_WIFI) + _NON_GLOBAL_ACDEFINES="$_NON_GLOBAL_ACDEFINES NECKO_WIFI" +fi +AC_SUBST(NECKO_WIFI) +AC_SUBST(NECKO_WIFI_DBUS) + +dnl +dnl option to disable cookies +dnl +MOZ_ARG_DISABLE_BOOL(cookies, +[ --disable-cookies Disable cookie support], + NECKO_COOKIES=, + NECKO_COOKIES=1) +AC_SUBST(NECKO_COOKIES) +if test "$NECKO_COOKIES"; then + AC_DEFINE(NECKO_COOKIES) + _NON_GLOBAL_ACDEFINES="$_NON_GLOBAL_ACDEFINES NECKO_COOKIES" +fi + +dnl +dnl Always build Marionette if not Android or B2G +dnl +if test "$OS_TARGET" != Android -a x"$MOZ_WIDGET_TOOLKIT" != x"gonk"; then + AC_DEFINE(ENABLE_MARIONETTE) +fi +AC_SUBST(ENABLE_MARIONETTE) +if test "$ENABLE_MARIONETTE"; then + AC_DEFINE(ENABLE_MARIONETTE) +fi + +dnl ======================================================== +if test "$MOZ_DEBUG" -o "$MOZ_DMD"; then + MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS= +fi + +dnl ======================================================== +dnl = +dnl = Maintainer debug option (no --enable equivalent) +dnl = +dnl ======================================================== + +AC_SUBST(AR) +AC_SUBST(AR_FLAGS) +AC_SUBST(AR_EXTRACT) +AC_SUBST(AS) +AC_SUBST(ASFLAGS) +AC_SUBST(AS_DASH_C_FLAG) +AC_SUBST(LD) +AC_SUBST(RC) +AC_SUBST(RCFLAGS) +AC_SUBST(WINDRES) +AC_SUBST(IMPLIB) +AC_SUBST(FILTER) +AC_SUBST(BIN_FLAGS) +AC_SUBST(MOZ_AUTH_EXTENSION) +AC_SUBST(MOZ_PREF_EXTENSIONS) +AC_SUBST(MOZ_DEBUG) +AC_SUBST(MOZ_DEBUG_LDFLAGS) +AC_SUBST(WARNINGS_AS_ERRORS) +AC_SUBST_SET(MOZ_EXTENSIONS) +AC_SUBST(LIBICONV) +AC_SUBST(MOZ_TOOLKIT_SEARCH) +AC_SUBST(MOZ_FEEDS) + +AC_SUBST(MOZ_UNIVERSALCHARDET) +AC_SUBST(ACCESSIBILITY) +AC_SUBST(MOZ_SPELLCHECK) +AC_SUBST(MOZ_ANDROID_ANR_REPORTER) +AC_SUBST(MOZ_CRASHREPORTER) +AC_SUBST(MOZ_CRASHREPORTER_INJECTOR) +AC_SUBST(MOZ_MAINTENANCE_SERVICE) +AC_SUBST(MOZ_STUB_INSTALLER) +AC_SUBST(MOZ_VERIFY_MAR_SIGNATURE) +AC_SUBST(MOZ_ENABLE_SIGNMAR) +AC_SUBST(MOZ_UPDATER) + +AC_SUBST(MOZ_ANGLE_RENDERER) +AC_SUBST(MOZ_D3D_CPU_SUFFIX) +AC_SUBST(MOZ_HAS_WINSDK_WITH_D3D) +AC_SUBST(MOZ_D3DCOMPILER_VISTA_DLL) +AC_SUBST(MOZ_D3DCOMPILER_VISTA_DLL_PATH) +AC_SUBST(MOZ_DIRECTX_SDK_PATH) +AC_SUBST(MOZ_D3DCOMPILER_XP_DLL) +AC_SUBST(MOZ_D3DCOMPILER_XP_CAB) + +AC_SUBST(MOZ_ANDROID_APPLICATION_CLASS) +AC_SUBST(MOZ_ANDROID_BROWSER_INTENT_CLASS) +AC_SUBST(MOZ_ANDROID_SEARCH_INTENT_CLASS) +AC_SUBST(MOZ_EXCLUDE_HYPHENATION_DICTIONARIES) +AC_SUBST(MOZ_INSTALL_TRACKING) +AC_SUBST(ENABLE_STRIP) +AC_SUBST(PKG_SKIP_STRIP) +AC_SUBST(STRIP_FLAGS) +AC_SUBST(USE_ELF_HACK) +AC_SUBST(INCREMENTAL_LINKER) +AC_SUBST(MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS) + +AC_SUBST(MOZ_FIX_LINK_PATHS) + +AC_SUBST(MOZ_POST_PROGRAM_COMMAND) +AC_SUBST(MOZ_LINKER_EXTRACT) + +if test -n "$MOZ_BINARY_EXTENSIONS"; then + AC_DEFINE(MOZ_BINARY_EXTENSIONS) +fi + +AC_SUBST(MOZ_ADDON_SIGNING) +if test "$MOZ_ADDON_SIGNING" = 1; then + AC_DEFINE(MOZ_ADDON_SIGNING) +fi +AC_SUBST(MOZ_REQUIRE_SIGNING) +if test "$MOZ_REQUIRE_SIGNING" = 1; then + AC_DEFINE(MOZ_REQUIRE_SIGNING) +fi + +AC_SUBST(MOZ_JSDOWNLOADS) +if test -n "$MOZ_JSDOWNLOADS"; then + AC_DEFINE(MOZ_JSDOWNLOADS) +fi + +dnl ======================================================== +dnl = Mac bundle name prefix +dnl ======================================================== +MOZ_ARG_WITH_STRING(macbundlename-prefix, +[ --with-macbundlename-prefix=prefix + Prefix for MOZ_MACBUNDLE_NAME], +[ MOZ_MACBUNDLE_NAME_PREFIX="$withval"]) + +MOZ_MACBUNDLE_NAME=`echo $MOZ_APP_DISPLAYNAME | tr -d ' '` +if test "$MOZ_MACBUNDLE_NAME_PREFIX"; then + MOZ_MACBUNDLE_NAME="${MOZ_MACBUNDLE_NAME_PREFIX}${MOZ_MACBUNDLE_NAME}" +fi + +if test "$MOZ_DEBUG"; then + MOZ_MACBUNDLE_NAME=${MOZ_MACBUNDLE_NAME}Debug.app +else + MOZ_MACBUNDLE_NAME=${MOZ_MACBUNDLE_NAME}.app +fi +AC_SUBST(MOZ_MACBUNDLE_NAME) + +dnl Mac bundle identifier (based on MOZ_APP_DISPLAYNAME) +MOZ_MACBUNDLE_ID=`echo $MOZ_APP_DISPLAYNAME | tr '[A-Z]' '[a-z]'` +MOZ_MACBUNDLE_ID=${MOZ_DISTRIBUTION_ID}.${MOZ_MACBUNDLE_ID} +if test "$MOZ_DEBUG"; then + MOZ_MACBUNDLE_ID=${MOZ_MACBUNDLE_ID}debug +fi + +AC_DEFINE_UNQUOTED(MOZ_MACBUNDLE_ID,$MOZ_MACBUNDLE_ID) +AC_SUBST(MOZ_MACBUNDLE_ID) + +dnl ======================================================== +dnl = Child Process Name for IPC +dnl ======================================================== +if test "$MOZ_WIDGET_TOOLKIT" != "android"; then + MOZ_CHILD_PROCESS_NAME="plugin-container${BIN_SUFFIX}" +else + # We want to let Android unpack the file at install time, but it only does + # so if the file is named libsomething.so. The lib/ path is also required + # because the unpacked file will be under the lib/ subdirectory and will + # need to be executed from that path. + MOZ_CHILD_PROCESS_NAME="libplugin-container.so" + MOZ_CHILD_PROCESS_NAME_PIE="libplugin-container-pie.so" + AC_SUBST(MOZ_CHILD_PROCESS_NAME_PIE) +fi +MOZ_CHILD_PROCESS_BUNDLE="plugin-container.app/Contents/MacOS/" + +AC_SUBST(MOZ_CHILD_PROCESS_NAME) +AC_SUBST(MOZ_CHILD_PROCESS_BUNDLE) + +# The following variables are available to branding and application +# configuration ($BRANDING/configure.sh and $APPLICATION/confvars.sh): +# - MOZ_APP_VENDOR: Used for application.ini's "Vendor" field, which also +# impacts profile location and user-visible fields. +# - MOZ_APP_BASENAME: Typically stays consistent for multiple branded +# versions of a given application (e.g. Aurora and Firefox both use +# "Firefox"), but may vary for full rebrandings (e.g. Iceweasel). Used +# for application.ini's "Name" field, which controls profile location in +# the absence of a "Profile" field (see below), and various system +# integration hooks (Unix remoting, Windows MessageWindow name, etc.) +# - MOZ_APP_DISPLAYNAME: Used in user-visible fields (DLL properties, +# Mac Bundle name, Updater, Installer), it is typically used for nightly +# builds (e.g. Aurora for Firefox). +# - MOZ_APP_VERSION: Defines the application version number. +# - MOZ_APP_VERSION_DISPLAY: Defines the application version number. Used +# in the "About" window. If not set, defaults to MOZ_APP_VERSION. +# - MOZ_APP_NAME: Used for e.g. the binary program file name. If not set, +# defaults to a lowercase form of MOZ_APP_BASENAME. +# - MOZ_APP_REMOTINGNAME: Used for the internal program name, which affects +# profile name and remoting. If not set, defaults to MOZ_APP_NAME. +# - MOZ_APP_PROFILE: When set, used for application.ini's +# "Profile" field, which controls profile location. +# - MOZ_APP_ID: When set, used for application.ini's "ID" field, and +# crash reporter server url. +# - MOZ_APP_ANDROID_VERSION_CODE: On Android, "android:versionCode" for +# the main application is set to the value of this variable. If not +# set, it falls back to a Mozilla-specific value derived from the +# build ID. +# - MOZ_ANDROID_SHARED_ID: On Android, "android:sharedUserId" for all Android +# packages produced. +# - MOZ_ANDROID_GCM_SENDERID: On Android, the Android GCM Sender ID used. GCM +# sender IDs are not sensitive: see, http://stackoverflow.com/a/18216063. +# - MOZ_PROFILE_MIGRATOR: When set, enables profile migrator. + +if test -z "$MOZ_APP_NAME"; then + MOZ_APP_NAME=`echo $MOZ_APP_BASENAME | tr A-Z a-z` +fi + +if test -z "$MOZ_APP_REMOTINGNAME"; then + MOZ_APP_REMOTINGNAME=$MOZ_APP_NAME +fi + +if test -z "$MOZ_APP_VERSION_DISPLAY"; then + MOZ_APP_VERSION_DISPLAY=$MOZ_APP_VERSION +fi + +if test -z "$ANDROID_PACKAGE_NAME" ; then + ANDROID_PACKAGE_NAME="org.mozilla.$MOZ_APP_NAME" +fi + +# Mozilla released Firefox for Android {Release,Beta} and {Aurora,Nightly} to +# the public with specific common shared IDs and we need to keep them +# consistent forever. The specific common values are set by per-channel +# branding; all other channels use a generic sharedID, set below. +if test -z "$MOZ_ANDROID_SHARED_ID" ; then + MOZ_ANDROID_SHARED_ID="${ANDROID_PACKAGE_NAME}.sharedID" +fi + +# For extensions and langpacks, we require a max version that is compatible +# across security releases. MOZ_APP_MAXVERSION is our method for doing that. +# 24.0a1 and 24.0a2 aren't affected +# 24.0 becomes 24.* +# 24.1.1 becomes 24.* +IS_ALPHA=`echo $MOZ_APP_VERSION | grep a` +if test -z "$IS_ALPHA"; then + changequote(,) + if test "$(basename $MOZ_BUILD_APP)" = "suite"; then + MOZ_APP_MAXVERSION=`echo $MOZ_APP_VERSION | sed "s|\(^[0-9]*\.[0-9]*\).*|\1|"`.* + else + MOZ_APP_MAXVERSION=`echo $MOZ_APP_VERSION | sed "s|\(^[0-9]*\).*|\1|"`.* + fi + changequote([,]) +else + MOZ_APP_MAXVERSION=$MOZ_APP_VERSION +fi + +MOZ_B2G_VERSION=${MOZ_B2G_VERSION:-"1.0.0"} +AC_DEFINE_UNQUOTED(MOZ_B2G_VERSION,"$MOZ_B2G_VERSION") +AC_DEFINE_UNQUOTED(MOZ_B2G_OS_NAME,"$MOZ_B2G_OS_NAME") + +AC_SUBST(MOZ_APP_NAME) +AC_SUBST(MOZ_APP_REMOTINGNAME) +AC_SUBST(MOZ_APP_DISPLAYNAME) +AC_SUBST(MOZ_APP_BASENAME) +AC_SUBST(MOZ_APP_VENDOR) +AC_SUBST(MOZ_APP_PROFILE) +AC_SUBST(MOZ_APP_ID) +AC_SUBST(MOZ_APP_ANDROID_VERSION_CODE) +AC_SUBST(MOZ_ANDROID_SHARED_ID) +AC_SUBST(MOZ_ANDROID_GCM_SENDERID) +AC_SUBST(MAR_CHANNEL_ID) +AC_SUBST(ACCEPTED_MAR_CHANNEL_IDS) +AC_SUBST(MOZ_PROFILE_MIGRATOR) +AC_DEFINE_UNQUOTED(MOZ_APP_UA_NAME, "$MOZ_APP_UA_NAME") +AC_SUBST(MOZ_APP_UA_NAME) +AC_DEFINE_UNQUOTED(MOZ_APP_UA_VERSION, "$MOZ_APP_VERSION") +AC_SUBST(MOZ_APP_VERSION) +AC_SUBST(MOZ_APP_VERSION_DISPLAY) +AC_SUBST(MOZ_APP_MAXVERSION) +AC_DEFINE_UNQUOTED(FIREFOX_VERSION,$FIREFOX_VERSION) +AC_SUBST(FIREFOX_VERSION) +AC_SUBST(MOZ_UA_OS_AGNOSTIC) +if test -n "$MOZ_UA_OS_AGNOSTIC"; then + AC_DEFINE(MOZ_UA_OS_AGNOSTIC) +fi + +AC_SUBST(MOZ_APP_STATIC_INI) + +AC_SUBST(MOZ_PKG_SPECIAL) +AC_SUBST(MOZ_SIMPLE_PACKAGE_NAME) + +AC_SUBST(MOZILLA_OFFICIAL) +if test "$MOZILLA_OFFICIAL"; then + AC_DEFINE(MOZILLA_OFFICIAL) + # Build revisions should always be present in official builds + MOZ_INCLUDE_SOURCE_INFO=1 +fi + +# External builds (specifically Ubuntu) may drop the hg repo information, so we allow to +# explicitly set the repository and changeset information in. +AC_SUBST(MOZ_SOURCE_REPO) +AC_SUBST(MOZ_SOURCE_CHANGESET) +AC_SUBST(MOZ_INCLUDE_SOURCE_INFO) + +if test "$MOZ_TELEMETRY_REPORTING"; then + AC_DEFINE(MOZ_TELEMETRY_REPORTING) + + # Enable Telemetry by default for nightly and aurora channels + if test -z "$RELEASE_OR_BETA"; then + AC_DEFINE(MOZ_TELEMETRY_ON_BY_DEFAULT) + fi +fi + +dnl If we have any service that uploads data (and requires data submission +dnl policy alert), set MOZ_DATA_REPORTING. +dnl We need SUBST for build system and DEFINE for xul preprocessor. +if test -n "$MOZ_TELEMETRY_REPORTING" || test -n "$MOZ_SERVICES_HEALTHREPORT" || test -n "$MOZ_CRASHREPORTER"; then + MOZ_DATA_REPORTING=1 + AC_DEFINE(MOZ_DATA_REPORTING) + AC_SUBST(MOZ_DATA_REPORTING) +fi + +dnl win32 options +AC_SUBST(WIN32_REDIST_DIR) +AC_SUBST(WIN_UCRT_REDIST_DIR) + +dnl ======================================================== +dnl ICU Support +dnl ======================================================== + +# Internationalization is not built or exposed on Fennec. +# See Bug 1215256 + +if test "$MOZ_BUILD_APP" = "mobile/android"; then + _INTL_API=no +else + _INTL_API=yes +fi + +if test "$MOZ_WIDGET_TOOLKIT" = "cocoa"; then + USE_ICU=1 +fi + +MOZ_CONFIG_ICU() + +dnl Echo the CFLAGS to remove extra whitespace. +CFLAGS=`echo \ + $_WARNINGS_CFLAGS \ + $CFLAGS` + +CXXFLAGS=`echo \ + $_WARNINGS_CXXFLAGS \ + $CXXFLAGS` + +COMPILE_CFLAGS=`echo \ + $_DEFINES_CFLAGS \ + $COMPILE_CFLAGS` + +COMPILE_CXXFLAGS=`echo \ + $_DEFINES_CXXFLAGS \ + $COMPILE_CXXFLAGS` + +HOST_CFLAGS=`echo \ + $HOST_CFLAGS` + +HOST_CXXFLAGS=`echo \ + $HOST_CXXFLAGS` + +AC_SUBST(_DEPEND_CFLAGS) +AC_SUBST(MOZ_SYSTEM_JPEG) +AC_SUBST(MOZ_SYSTEM_PNG) +AC_SUBST(MOZ_SYSTEM_BZ2) + +AC_SUBST_LIST(MOZ_JPEG_CFLAGS) +AC_SUBST_LIST(MOZ_JPEG_LIBS) +AC_SUBST_LIST(MOZ_BZ2_CFLAGS) +AC_SUBST_LIST(MOZ_BZ2_LIBS) +AC_SUBST_LIST(MOZ_PNG_CFLAGS) +AC_SUBST_LIST(MOZ_PNG_LIBS) + +AC_SUBST(MOZ_SYSTEM_NSPR) + +AC_SUBST(MOZ_SYSTEM_NSS) + +HOST_CMFLAGS=-fobjc-exceptions +HOST_CMMFLAGS=-fobjc-exceptions +OS_COMPILE_CMFLAGS=-fobjc-exceptions +OS_COMPILE_CMMFLAGS=-fobjc-exceptions +if test "$MOZ_WIDGET_TOOLKIT" = uikit; then + OS_COMPILE_CMFLAGS="$OS_COMPILE_CMFLAGS -fobjc-abi-version=2 -fobjc-legacy-dispatch" + OS_COMPILE_CMMFLAGS="$OS_COMPILE_CMMFLAGS -fobjc-abi-version=2 -fobjc-legacy-dispatch" +fi +AC_SUBST(HOST_CMFLAGS) +AC_SUBST(HOST_CMMFLAGS) +AC_SUBST(OS_COMPILE_CMFLAGS) +AC_SUBST(OS_COMPILE_CMMFLAGS) + +OS_CFLAGS="$CFLAGS" +OS_CXXFLAGS="$CXXFLAGS" +OS_CPPFLAGS="$CPPFLAGS" +OS_COMPILE_CFLAGS="$COMPILE_CFLAGS" +OS_COMPILE_CXXFLAGS="$COMPILE_CXXFLAGS" +OS_LDFLAGS="$LDFLAGS" +OS_LIBS="$LIBS" +AC_SUBST(OS_CFLAGS) +AC_SUBST(OS_CXXFLAGS) +AC_SUBST(OS_CPPFLAGS) +AC_SUBST(OS_COMPILE_CFLAGS) +AC_SUBST(OS_COMPILE_CXXFLAGS) +AC_SUBST(OS_LDFLAGS) +AC_SUBST(OS_LIBS) + +AC_SUBST(HOST_CC) +AC_SUBST(HOST_CXX) +AC_SUBST(HOST_CFLAGS) +AC_SUBST(HOST_CPPFLAGS) +AC_SUBST(HOST_CXXFLAGS) +AC_SUBST(HOST_LDFLAGS) +AC_SUBST(HOST_OPTIMIZE_FLAGS) +AC_SUBST(HOST_AR) +AC_SUBST(HOST_AR_FLAGS) +AC_SUBST(HOST_LD) +AC_SUBST(HOST_RANLIB) +AC_SUBST(HOST_BIN_SUFFIX) + +AC_SUBST(TARGET_XPCOM_ABI) +AC_SUBST(HAVE_TOOLCHAIN_SUPPORT_MSSSE3) +AC_SUBST(HAVE_TOOLCHAIN_SUPPORT_MSSE4_1) +AC_SUBST(HAVE_X86_AVX2) +AC_SUBST(HAVE_ALTIVEC) +AC_SUBST(GCC_USE_GNU_LD) + +AC_SUBST(WRAP_LDFLAGS) +AC_SUBST(MKSHLIB) +AC_SUBST(MKCSHLIB) +AC_SUBST(DSO_CFLAGS) +AC_SUBST(DSO_PIC_CFLAGS) +AC_SUBST(DSO_LDOPTS) +AC_SUBST(LIB_PREFIX) +AC_SUBST(DLL_PREFIX) +AC_SUBST(DLL_SUFFIX) +AC_DEFINE_UNQUOTED(MOZ_DLL_SUFFIX, "$DLL_SUFFIX") +AC_SUBST(LIB_SUFFIX) +AC_SUBST(OBJ_SUFFIX) +AC_SUBST(BIN_SUFFIX) +AC_SUBST(IMPORT_LIB_SUFFIX) +AC_SUBST(USE_N32) +AC_SUBST(CC_VERSION) +AC_SUBST(NS_ENABLE_TSF) +AC_SUBST(WIN32_CONSOLE_EXE_LDFLAGS) +AC_SUBST(WIN32_GUI_EXE_LDFLAGS) + +AC_SUBST(MOZ_VORBIS) +AC_SUBST(MOZ_TREMOR) +AC_SUBST(MOZ_FFVPX) +AC_SUBST_LIST(FFVPX_ASFLAGS) +AC_SUBST(MOZ_DIRECTSHOW) +AC_SUBST(MOZ_ANDROID_OMX) +AC_SUBST(MOZ_OMX_PLUGIN) +AC_SUBST(MOZ_VPX_ERROR_CONCEALMENT) +AC_SUBST(VPX_USE_YASM) +AC_SUBST_LIST(VPX_ASFLAGS) +AC_SUBST(VPX_AS_CONVERSION) +AC_SUBST(VPX_X86_ASM) +AC_SUBST(VPX_ARM_ASM) +AC_SUBST(MOZ_CODE_COVERAGE) +AC_SUBST(LIBJPEG_TURBO_USE_YASM) +AC_SUBST_LIST(LIBJPEG_TURBO_ASFLAGS) +AC_SUBST(MOZ_LIBAV_FFT) +AC_SUBST_LIST(LIBAV_FFT_ASFLAGS) +AC_SUBST(MOZ_DEVTOOLS) + +AC_SUBST(MOZ_PACKAGE_JSSHELL) +AC_SUBST(MOZ_FOLD_LIBS) +AC_SUBST(MOZ_FOLD_LIBS_FLAGS) +AC_SUBST(SOCORRO_SYMBOL_UPLOAD_TOKEN_FILE) + +AC_SUBST(DMG_TOOL) + +dnl Host JavaScript runtime, if any, to use during cross compiles. +AC_SUBST(JS_BINARY) + +AC_SUBST(NSS_EXTRA_SYMBOLS_FILE) + +if test -n "$COMPILE_ENVIRONMENT"; then +AC_CHECK_FUNCS(posix_fadvise posix_fallocate) + +dnl Check for missing components +if test "$MOZ_X11"; then + dnl ==================================================== + dnl = Check if X headers exist + dnl ==================================================== + _SAVE_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS $XCFLAGS" + AC_TRY_COMPILE([ + #include <stdio.h> + #include <stdlib.h> + #include <X11/Xlib.h> + #include <X11/Intrinsic.h> + #include <X11/extensions/XShm.h> + ], + [ + Display *dpy = 0; + if ((dpy = XOpenDisplay(NULL)) == NULL) { + fprintf(stderr, ": can't open %s\n", XDisplayName(NULL)); + exit(1); + } + ], [], + [ AC_MSG_ERROR([Can't find X headers (install libxt-dev (Debian/Ubuntu), libXt-devel (Fedora), or xorg-x11-libXt-devel (SuSE)).]) ]) + CFLAGS="$_SAVE_CFLAGS" + + if test -n "$MISSING_X"; then + AC_MSG_ERROR([ Could not find the following X libraries: $MISSING_X ]); + fi + +fi # MOZ_X11 + +fi # COMPILE_ENVIRONMENT + +dnl Set various defines and substitutions +dnl ======================================================== + +if test "$MOZ_DEBUG"; then + AC_DEFINE(MOZ_REFLOW_PERF) + AC_DEFINE(MOZ_REFLOW_PERF_DSP) +fi + +if test "$ACCESSIBILITY" -a "$MOZ_ENABLE_GTK" ; then + AC_DEFINE(MOZ_ACCESSIBILITY_ATK) + ATK_FULL_VERSION=`$PKG_CONFIG --modversion atk` + ATK_MAJOR_VERSION=`echo ${ATK_FULL_VERSION} | $AWK -F\. '{ print $1 }'` + ATK_MINOR_VERSION=`echo ${ATK_FULL_VERSION} | $AWK -F\. '{ print $2 }'` + ATK_REV_VERSION=`echo ${ATK_FULL_VERSION} | $AWK -F\. '{ print $3 }'` + AC_DEFINE_UNQUOTED(ATK_MAJOR_VERSION, $ATK_MAJOR_VERSION) + AC_DEFINE_UNQUOTED(ATK_MINOR_VERSION, $ATK_MINOR_VERSION) + AC_DEFINE_UNQUOTED(ATK_REV_VERSION, $ATK_REV_VERSION) +fi + +if test -n "$MOZ_DEV_EDITION"; then + AC_DEFINE(MOZ_DEV_EDITION) +fi + +if test "$MOZ_DEBUG"; then + A11Y_LOG=1 +fi +case "$MOZ_UPDATE_CHANNEL" in +aurora|beta|release|esr) + ;; +*) + A11Y_LOG=1 + ;; +esac +AC_SUBST(A11Y_LOG) +if test -n "$A11Y_LOG"; then + AC_DEFINE(A11Y_LOG) +fi + +AC_SUBST(MOZILLA_VERSION) + +dnl Spit out some output +dnl ======================================================== + +dnl The following defines are used by xpcom +_NON_GLOBAL_ACDEFINES="$_NON_GLOBAL_ACDEFINES +CPP_THROW_NEW +HAVE_CPP_AMBIGUITY_RESOLVING_USING +HAVE_CPP_DYNAMIC_CAST_TO_VOID_PTR +HAVE_CPP_PARTIAL_SPECIALIZATION +HAVE_GETPAGESIZE +HAVE_ICONV +HAVE_ICONV_WITH_CONST_INPUT +HAVE_MBRTOWC +HAVE_WCRTOMB +HAVE_STATVFS64 +HAVE_STATVFS +HAVE_STATFS64 +HAVE_STATFS +HAVE_SYS_STATVFS_H +HAVE_SYS_STATFS_H +HAVE_SYS_VFS_H +HAVE_SYS_MOUNT_H +" + +dnl ======================================================== +dnl Determine options to use for running the preprocessor. +dnl ======================================================== + +if test -z "$GNU_CC" -a "$OS_ARCH" = "WINNT"; then + PREPROCESS_OPTION="-P -Fi" +else + PREPROCESS_OPTION="-E -o " +fi + +AC_SUBST(PREPROCESS_OPTION) + +dnl ======================================================== +dnl mask as shorthand property +dnl ======================================================== + +# The control structure code will be removed as soon as the feature is stable +# Refer to bug 1281101 for more details. + +# Enable mask-as-shorthand property by default for nightly and aurora channels +if test -z "$RELEASE_OR_BETA"; then + dnl mask as shorthand property enabled + MOZ_ENABLE_MASK_AS_SHORTHAND=1 + AC_DEFINE(MOZ_ENABLE_MASK_AS_SHORTHAND) +fi + +AC_SUBST(MOZ_ENABLE_MASK_AS_SHORTHAND) + +# Avoid using obsolete NSPR features +AC_DEFINE(NO_NSPR_10_SUPPORT) + +# Don't build NSS libpkix +NSS_DISABLE_LIBPKIX=1 +AC_SUBST(NSS_DISABLE_LIBPKIX) + +MOZ_CREATE_CONFIG_STATUS() + +if test "$COMPILE_ENVIRONMENT"; then + MOZ_SUBCONFIGURE_JEMALLOC() +fi + +# Run freetype configure script + +if test "$MOZ_TREE_FREETYPE"; then + export CFLAGS="$CFLAGS $MOZ_DEBUG_FLAGS -std=c99" + export CPPFLAGS="$CPPFLAGS $MOZ_DEBUG_FLAGS" + export CXXFLAGS="$CXXFLAGS $MOZ_DEBUG_FLAGS" + export LDFLAGS="$LDFLAGS $MOZ_DEBUG_LDFLAGS" + # Spaces in the *_CFLAGS and *_LIBS variables are intentionally placed + # to force freetype to use our settings rather than autodetecting + if test -n "$MOZ_SYSTEM_PNG"; then + export LIBPNG_CFLAGS="$MOZ_PNG_CFLAGS " + else + export LIBPNG_CFLAGS="-I$_objdir/dist/include" + fi + export LIBPNG_LIBS="$MOZ_PNG_LIBS " + export ZLIB_CFLAGS="$MOZ_ZLIB_CFLAGS " + export ZLIB_LIBS="$MOZ_ZLIB_LIBS " + export CONFIG_FILES="unix-cc.mk:unix-cc.in unix-def.mk:unix-def.in freetype-config freetype2.pc:freetype2.in" + ac_configure_args="$ac_configure_args --host=$target --disable-shared --with-pic=yes --with-zlib=yes --without-bzip2 --with-png=yes --without-harfbuzz" + + if ! test -e modules; then + mkdir modules + fi + # Only export CC, CXX and RANLIB for the subconfigure, and avoid spilling + # that further down the road. + (export CC CXX RANLIB; + AC_OUTPUT_SUBDIRS(modules/freetype2) + ) || exit 1 +fi + +if test -z "$direct_nspr_config"; then + dnl ======================================================== + dnl = Setup a nice relatively clean build environment for + dnl = sub-configures. + dnl ======================================================== + CC="$_SUBDIR_CC" + CXX="$_SUBDIR_CXX" + CFLAGS="$_SUBDIR_CFLAGS" + CPPFLAGS="$_SUBDIR_CPPFLAGS" + CXXFLAGS="$_SUBDIR_CXXFLAGS" + LDFLAGS="$_SUBDIR_LDFLAGS" + HOST_CC="$_SUBDIR_HOST_CC" + HOST_CFLAGS="$_SUBDIR_HOST_CFLAGS" + HOST_CXXFLAGS="$_SUBDIR_HOST_CXXFLAGS" + HOST_LDFLAGS="$_SUBDIR_HOST_LDFLAGS" + RC= +fi + +unset MAKEFILES +unset CONFIG_FILES + +# Run all configure scripts specified by a subconfigure +if test -n "$_subconfigure_subdir"; then + _save_srcdir="$srcdir" + srcdir="$srcdir/.." + _save_ac_configure_args="$ac_configure_args" + ac_configure_args="$_subconfigure_config_args" + AC_OUTPUT_SUBDIRS_NOW("$_subconfigure_subdir",$cache_file) + ac_configure_args="$_save_ac_configure_args" + srcdir="$_save_srcdir" +fi + +if test "$COMPILE_ENVIRONMENT"; then + +export WRAP_LDFLAGS + +dnl ======================================================== +dnl = Setup a nice relatively clean build environment for +dnl = sub-configures. +dnl ======================================================== +CC="$_SUBDIR_CC" +CXX="$_SUBDIR_CXX" +CFLAGS="$_SUBDIR_CFLAGS" +CPPFLAGS="$_SUBDIR_CPPFLAGS" +CXXFLAGS="$_SUBDIR_CXXFLAGS" +LDFLAGS="$_SUBDIR_LDFLAGS" +HOST_CC="$_SUBDIR_HOST_CC" +HOST_CFLAGS="$_SUBDIR_HOST_CFLAGS" +HOST_CXXFLAGS="$_SUBDIR_HOST_CXXFLAGS" +HOST_LDFLAGS="$_SUBDIR_HOST_LDFLAGS" +RC= + +# Run the SpiderMonkey 'configure' script. +dist=$MOZ_BUILD_ROOT/dist +ac_configure_args="$_SUBDIR_CONFIG_ARGS" + +# --with-system-nspr will have been converted into the relevant $NSPR_CFLAGS +# and $NSPR_LIBS. +ac_configure_args="`echo $ac_configure_args | sed -e 's/--with-system-nspr\S* *//'`" + +if test "$_INTL_API" = no; then + ac_configure_args="$ac_configure_args --without-intl-api" +fi + +if test -n "$NSPR_CFLAGS" -o -n "$NSPR_LIBS"; then + ac_configure_args="$ac_configure_args --with-nspr-cflags='$NSPR_CFLAGS'" + ac_configure_args="$ac_configure_args --with-nspr-libs='$NSPR_LIBS'" +fi +ac_configure_args="$ac_configure_args --prefix=$dist" +if test -n "$ZLIB_IN_MOZGLUE"; then + MOZ_ZLIB_LIBS= +fi +export MOZ_SYSTEM_ZLIB +export MOZ_ZLIB_CFLAGS +export MOZ_ZLIB_LIBS +export MOZ_APP_NAME +export MOZ_APP_REMOTINGNAME +export RUSTC +export MOZILLA_CENTRAL_PATH=$_topsrcdir +export STLPORT_CPPFLAGS +export STLPORT_LIBS +unset MOZ_BUILD_APP +export DIST +export MOZ_LINKER +export ZLIB_IN_MOZGLUE +export AR +export RANLIB +export CPP +export CC +export CXX +export LD +export ARFLAGS +export CPPFLAGS +export CFLAGS +export CXXFLAGS +export LDFLAGS +export HOST_CC +export HOST_CXX +export HOST_CFLAGS +export HOST_CPPFLAGS +export HOST_CXXFLAGS +export HOST_LDFLAGS + +if ! test -e js; then + mkdir js +fi + +ac_configure_args="$ac_configure_args JS_STANDALONE=" +AC_OUTPUT_SUBDIRS(js/src,$cache_file) +ac_configure_args="$_SUBDIR_CONFIG_ARGS" + +fi # COMPILE_ENVIRONMENT + +dnl we need to run config.status after js/src subconfigure because we're +dnl traversing its moz.build and we need its config.status for that. +dnl However, writing our own config.status needs to happen before +dnl subconfigures because the setup surrounding subconfigures alters +dnl many AC_SUBSTed variables. +MOZ_RUN_ALL_SUBCONFIGURES() + +rm -fr confdefs* $ac_clean_files |