https://github.com/mozilla/gecko-dev
Raw File
Tip revision: 2b3c79da6ff5656cd4905dd7ae52801ca8a4cec0 authored by ffxbld on 23 December 2015, 22:04:20 UTC
Added FIREFOX_43_0_3_RELEASE FIREFOX_43_0_3_BUILD1 tag(s) for changeset f227eec41a24. DONTBUILD CLOSED TREE a=release
Tip revision: 2b3c79d
configure.in
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(js/src/jsapi.h)
AC_CONFIG_AUX_DIR(${srcdir}/build/autoconf)
AC_CANONICAL_SYSTEM
TARGET_CPU="${target_cpu}"
TARGET_VENDOR="${target_vendor}"
TARGET_OS="${target_os}"

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 ========================================================
NSPR_VERSION=4
NSPR_MINVER=4.9.2

dnl Set the minimum version of toolkit libs used by mozilla
dnl ========================================================
PERL_VERSION=5.006
WINDRES_VERSION=2.14.90
W32API_VERSION=3.14

MSMANIFEST_TOOL=

dnl Set various checks
dnl ========================================================
MISSING_X=
AC_PROG_AWK

dnl Initialize the Pthread test variables early so they can be
dnl  overridden by each platform.
dnl ========================================================
USE_PTHREADS=
_PTHREAD_LDFLAGS=""

dnl Do not allow objdir == srcdir builds
dnl ==============================================================
_topsrcdir=`cd $srcdir; pwd`
_objdir=`pwd`

if test "$_topsrcdir" = "$_objdir"
then
  echo "  ***"
  echo "  * Building directly in the main source directory is not allowed."
  echo "  *"
  echo "  * To build, you must run configure from a separate directory"
  echo "  * (referred to as an object directory)."
  echo "  ***"
  exit 1
fi

# Check for a couple representative files in the source tree
_conflict_files=
for file in $_topsrcdir/Makefile $_topsrcdir/config/autoconf.mk; do
  if test -f $file; then
    _conflict_files="$_conflict_files $file"
  fi
done
if test "$_conflict_files"; then
  echo "***"
  echo "*   Your source tree contains these files:"
  for file in $_conflict_files; do
    echo "*         $file"
  done
  cat 1>&2 <<-EOF
	*   This indicates that you previously built in the source tree.
	*   A source tree build can confuse the separate objdir build.
	*
	*   To clean up the source tree:
	*     1. cd $_topsrcdir
	*     2. gmake distclean
	***
	EOF
  exit 1
  break
fi
MOZ_BUILD_ROOT=`pwd -W 2>/dev/null || pwd`

dnl Choose where to put the 'dist' directory.
dnl ==============================================================

MOZ_ARG_WITH_STRING(dist-dir,
[  --with-dist-dir=DIR     Use DIR as 'dist' staging area.  DIR may be
                          relative to the top of SpiderMonkey build tree,
                          or absolute.],
    TOP_DIST=$withval,
    TOP_DIST=dist)
AC_SUBST(TOP_DIST)

MOZ_DEFAULT_COMPILER

COMPILE_ENVIRONMENT=1
MOZ_ARG_DISABLE_BOOL(compile-environment,
[  --disable-compile-environment
                          Disable compiler/library checks.],
    COMPILE_ENVIRONMENT= )
AC_SUBST(COMPILE_ENVIRONMENT)

dnl Check for Perl first -- needed for win32 SDK checks
MOZ_PATH_PROGS(PERL, $PERL perl5 perl )
if test -z "$PERL" -o "$PERL" = ":"; then
    AC_MSG_ERROR([perl not found in \$PATH])
fi

MOZ_ARG_ENABLE_BOOL(shared-js,
[  --disable-shared-js
                          Do not create a shared library.],
    DISABLE_SHARED_JS=0,
    DISABLE_SHARED_JS=1)

MOZ_ARG_DISABLE_BOOL(export-js,
[  --disable-export-js
                          Do not mark JS symbols as DLL exported/visible.],
    DISABLE_EXPORT_JS=1,
    DISABLE_EXPORT_JS=)

if test "$DISABLE_SHARED_JS" = "1" ; then
  if test "$DISABLE_EXPORT_JS" = "1"; then
    AC_DEFINE(STATIC_JS_API)
  else
    AC_DEFINE(STATIC_EXPORTABLE_JS_API)
  fi
else
  if test "$DISABLE_EXPORT_JS" = "1"; then
    AC_MSG_ERROR([Must export JS symbols when building a shared library.])
  fi
  JS_SHARED_LIBRARY=1
fi
AC_SUBST(JS_SHARED_LIBRARY)

if test "$JS_STANDALONE" = no; then
  autoconfmk=autoconf-js.mk
  JS_STANDALONE=
else
  JS_STANDALONE=1
  LIBXUL_DIST="$MOZ_BUILD_ROOT/dist"
  AC_DEFINE(JS_STANDALONE)
fi
AC_SUBST(JS_STANDALONE)
BUILDING_JS=1
AC_SUBST(autoconfmk)

MOZ_ARG_WITH_STRING(gonk,
[  --with-gonk=DIR
               location of gonk dir],
    gonkdir=$withval)

MOZ_ARG_WITH_STRING(gonk-toolchain-prefix,
[  --with-gonk-toolchain-prefix=DIR
                          prefix to gonk toolchain commands],
    gonk_toolchain_prefix=$withval)

if test -n "$gonkdir" ; then
    kernel_name=`uname -s | tr "[[:upper:]]" "[[:lower:]]"`
    dnl Default to ICS
    ANDROID_VERSION=15
    if test -n "${PLATFORM_SDK_VERSION}"; then
        ANDROID_VERSION="${PLATFORM_SDK_VERSION}"
    fi

    dnl set up compilers
    AS="$gonk_toolchain_prefix"as
    CC="$gonk_toolchain_prefix"gcc
    CXX="$gonk_toolchain_prefix"g++
    CPP="$gonk_toolchain_prefix"cpp
    LD="$gonk_toolchain_prefix"ld
    AR="$gonk_toolchain_prefix"ar
    RANLIB="$gonk_toolchain_prefix"ranlib
    STRIP="$gonk_toolchain_prefix"strip
    OBJCOPY="$gonk_toolchain_prefix"objcopy

    STLPORT_CPPFLAGS="-I$_topsrcdir/build/stlport/stlport -I$gonkdir/ndk/sources/cxx-stl/system/include"
    STLPORT_LIBS="-lstlport"

    CPPFLAGS="-DANDROID $TARGET_C_INCLUDES -I$gonkdir/frameworks/base/native/include -I$gonkdir/system/core/include -isystem $gonkdir/bionic $CPPFLAGS -I$gonkdir/external/valgrind/fxos-include"
    CFLAGS="-mandroid -fno-short-enums -fno-exceptions $CFLAGS"
    CXXFLAGS="-mandroid -fno-short-enums -fno-exceptions -Wno-psabi $CXXFLAGS $STLPORT_CPPFLAGS"
    LIBS="$LIBS $STLPORT_LIBS"

    dnl Add -llog by default, since we use it all over the place.
    LDFLAGS="-mandroid -L$gonkdir/out/target/product/$GONK_PRODUCT/obj/lib -Wl,-rpath-link=$gonkdir/out/target/product/$GONK_PRODUCT/obj/lib --sysroot=$gonkdir/out/target/product/$GONK_PRODUCT/obj/ -llog $LDFLAGS"

    dnl prevent cross compile section from using these flags as host flags
    if test -z "$HOST_CPPFLAGS" ; then
        HOST_CPPFLAGS=" "
    fi
    if test -z "$HOST_CFLAGS" ; then
        HOST_CFLAGS=" "
    fi
    if test -z "$HOST_CXXFLAGS" ; then
        HOST_CXXFLAGS=" "
    fi
    if test -z "$HOST_LDFLAGS" ; then
        HOST_LDFLAGS=" "
    fi

    AC_DEFINE(ANDROID)
    AC_DEFINE(GONK)
else
    MOZ_ANDROID_NDK
fi

case "$target" in
*-apple-darwin*)
    MOZ_IOS_SDK
    ;;
esac

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

# Note:
#   In Mozilla, we use the names $target, $host and $build incorrectly, but are
#   too far gone to back out now. See Bug 475488:
#     - When we say $target, we mean $host, that is, the system on which
#       Mozilla will be run.
#     - When we say $host, we mean $build, that is, the system on which Mozilla
#       is built.
#     - $target (in its correct usage) is for compilers who generate code for a
#       different platform than $host, so it would not be used by Mozilla.
if test "$target" != "$host"; then
    MOZ_CROSS_COMPILER
else
    AC_PROG_CC
    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, :)
    if test -z "$HOST_CC"; then
        HOST_CC='$(CC)'
    fi
    if test -z "$HOST_CFLAGS"; then
        HOST_CFLAGS='$(CFLAGS)'
    fi
    if test -z "$HOST_CXX"; then
        HOST_CXX='$(CXX)'
    fi
    if test -z "$HOST_CXXFLAGS"; then
        HOST_CXXFLAGS='$(CXXFLAGS)'
    fi
    if test -z "$HOST_LDFLAGS"; then
        HOST_LDFLAGS='$(LDFLAGS)'
    fi
    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

MOZ_TOOL_VARIABLES

MOZ_CHECK_COMPILER_WRAPPER

dnl Special win32 checks
dnl ========================================================

# Target the Windows 8.1 SDK by default
WINSDK_TARGETVER=603
WINVER=502

MOZ_ARG_WITH_STRING(windows-version,
[  --with-windows-version=WINSDK_TARGETVER
                          Windows SDK version to target. Win8.1 (603) is
                          currently the minimum supported version.],
  WINSDK_TARGETVER=$withval)

# Currently only version 603 is allowed
case "$WINSDK_TARGETVER" in
603)
    MOZ_WINSDK_TARGETVER=0${WINSDK_TARGETVER}0000
    ;;

*)
    AC_MSG_ERROR([Invalid value for --with-windows-version ($WINSDK_TARGETVER)]);
    ;;
esac

case "$target" in
*-mingw*)
    if test "$GCC" != "yes"; then
        # Check to see if we are really running in a msvc environemnt
        _WIN32_MSVC=1

        # Make sure compilers are valid
        CFLAGS="$CFLAGS -TC -nologo"
        CXXFLAGS="$CXXFLAGS -TP -nologo"
        # 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.
        # _CRT_SECURE_NO_WARNINGS disables warnings about using MSVC-specific
        # secure CRT functions.
        CXXFLAGS="$CXXFLAGS -wd4345 -wd4351 -wd4800 -D_CRT_SECURE_NO_WARNINGS"
        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([,])

        # Determine compiler version
        _CC_MAJOR_VERSION=`echo ${CC_VERSION} | cut -c 1-2`
        _CC_MINOR_VERSION=`echo ${CC_VERSION} | cut -c 3-4`
        _MSC_VER=${CC_VERSION}

        _CXX_MAJOR_VERSION=`echo ${CXX_VERSION} | cut -c 1-2`

        if test "$_CC_MAJOR_VERSION" != "$_CXX_MAJOR_VERSION"; then
            AC_MSG_ERROR([The major versions of \$CC and \$CXX do not match.])
        fi

        AC_DEFINE(_CRT_SECURE_NO_WARNINGS)
        AC_DEFINE(_CRT_NONSTDC_NO_WARNINGS)

        if test "$_CC_MAJOR_VERSION" = "18"; then
            _CC_SUITE=12
            MSVC_C_RUNTIME_DLL=msvcr120.dll
            MSVC_CXX_RUNTIME_DLL=msvcp120.dll
        elif test "$_CC_MAJOR_VERSION" = "19"; then
            _CC_SUITE=14
            MSVC_C_RUNTIME_DLL=vcruntime140.dll
            MSVC_CXX_RUNTIME_DLL=msvcp140.dll
            MSVC_APPCRT_DLL=appcrt140.dll
            MSVC_DESKTOPCRT_DLL=desktopcrt140.dll

            # -Wv:18 disables all warnings introduced after VS2013
            # See http://blogs.msdn.com/b/vcblog/archive/2014/11/12/improvements-to-warnings-in-the-c-compiler.aspx
            CFLAGS="$CFLAGS -Wv:18"
            CXXFLAGS="$CXXFLAGS -Wv:18"

            # -Zc:sizedDealloc- disables C++14 global sized deallocation (see bug 1160146)
            CXXFLAGS="$CXXFLAGS -Zc:sizedDealloc-"
        else
            AC_MSG_ERROR([This version ($CC_VERSION) of the MSVC compiler is unsupported. See https://developer.mozilla.org/en/Windows_Build_Prerequisites.])
        fi
        AC_SUBST(MSVC_C_RUNTIME_DLL)
        AC_SUBST(MSVC_CXX_RUNTIME_DLL)
        AC_SUBST(MSVC_APPCRT_DLL)
        AC_SUBST(MSVC_DESKTOPCRT_DLL)

        dnl Ensure that mt.exe is 'Microsoft (R) Manifest Tool',
        dnl not something else like "magnetic tape manipulation utility".
        MSMT_TOOL=`${MT-mt} 2>&1|grep 'Microsoft (R) Manifest Tool'`
        if test -z "$MSMT_TOOL"; then
          AC_MSG_ERROR([Microsoft (R) Manifest Tool must be in your \$PATH.])
        fi

        changequote(,)
        _MSMT_VER_FILTER='s|.*[^!-~]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*|\1|p'
        changequote([,])
        MSMANIFEST_TOOL_VERSION=`echo ${MSMT_TOOL}|sed -ne "$_MSMT_VER_FILTER"`
        if test -z "$MSMANIFEST_TOOL_VERSION"; then
          AC_MSG_WARN([Unknown version of the Microsoft (R) Manifest Tool.])
        fi

        MSMANIFEST_TOOL=1
        unset MSMT_TOOL

        # 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

        unset _MSVC_VER_FILTER

        CFLAGS="$CFLAGS -D_HAS_EXCEPTIONS=0"
        CXXFLAGS="$CXXFLAGS -D_HAS_EXCEPTIONS=0"

        MOZ_FIND_WINSDK_VERSION
    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

        MOZ_WINSDK_MAXVER=0x06030000
    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)

    # If the maximum version supported by this SDK is lower than the target
    # version, error out
    AC_MSG_CHECKING([for Windows SDK being recent enough])
    if $PERL -e "exit(0x$MOZ_WINSDK_TARGETVER > $MOZ_WINSDK_MAXVER)"; then
        AC_MSG_RESULT("yes")
    else
        AC_MSG_RESULT("no")
        AC_MSG_ERROR([You are targeting Windows version 0x$MOZ_WINSDK_TARGETVER, but your SDK only supports up to version $MOZ_WINSDK_MAXVER. Install and use an updated SDK, or target a lower version using --with-windows-version. Alternatively, try running the Windows SDK Configuration Tool and selecting a newer SDK. See https://developer.mozilla.org/En/Windows_SDK_versions for more details on fixing this.])
    fi

    AC_DEFINE_UNQUOTED(MOZ_WINSDK_TARGETVER,0x$MOZ_WINSDK_TARGETVER)
    ;;
esac

AC_PROG_CPP
AC_PROG_CXXCPP

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.

    # Common to all MSVC environments:

    AC_DEFINE(HAVE_LOCALECONV)
    AC_DEFINE(HAVE_HYPOT)
    AC_CHECK_FUNCS([_getc_nolock])
fi

fi # COMPILE_ENVIRONMENT

# Check to see if we are running in a broken QEMU scratchbox.
# We know that anything below 1.0.16 is broken.
AC_CHECK_PROGS(SBCONF, sb-conf ve, "")
if test -n "$SBCONF"; then
    _sb_version=`$SBCONF ve`
    _sb_version_major=`echo $_sb_version | cut -f1 -d.`
    _sb_version_minor=`echo $_sb_version | cut -f2 -d.`
    _sb_version_point=`echo $_sb_version | cut -f3 -d.`
    if test $_sb_version_major -eq 1 -a $_sb_version_minor -eq 0 -a $_sb_version_point -le 16; then
        QEMU_CANT_RUN_JS_SHELL=1
    fi
fi
AC_SUBST(QEMU_CANT_RUN_JS_SHELL)

AC_SUBST(_MSC_VER)

AC_SUBST(GNU_AS)
AC_SUBST(GNU_LD)
AC_SUBST(GNU_CC)
AC_SUBST(GNU_CXX)
AC_SUBST(INTEL_CC)
AC_SUBST(INTEL_CXX)

dnl ========================================================
dnl Checks for programs.
dnl ========================================================
AC_PROG_INSTALL
AC_PROG_LN_S

AC_MSG_CHECKING([for tar archiver])
AC_CHECK_PROGS(TAR, gnutar gtar tar, "")
if test -z "$TAR"; then
    AC_MSG_WARN([no tar archiver found in \$PATH])
fi
AC_MSG_RESULT([$TAR])
AC_SUBST(TAR)

AC_MSG_CHECKING([for minimum required perl version >= $PERL_VERSION])
_perl_version=`PERL_VERSION=$PERL_VERSION $PERL -e 'print "$]"; if ($] >= $ENV{PERL_VERSION}) { exit(0); } else { exit(1); }' 2>&5`
_perl_res=$?
AC_MSG_RESULT([$_perl_version])

if test "$_perl_res" != 0; then
    AC_MSG_ERROR([Perl $PERL_VERSION or higher is required.])
fi

AC_MSG_CHECKING([for full perl installation])
_perl_archlib=`$PERL -e 'use Config; if ( -d $Config{archlib} ) { exit(0); } else { exit(1); }' 2>&5`
_perl_res=$?
if test "$_perl_res" != 0; then
    AC_MSG_RESULT([no])
    AC_MSG_ERROR([Cannot find Config.pm or \$Config{archlib}.  A full perl installation is required.])
else
    AC_MSG_RESULT([yes])
fi

MOZ_PYTHON

if test -z "$COMPILE_ENVIRONMENT"; then
    NSINSTALL_BIN='$(PYTHON) $(topsrcdir)/config/nsinstall.py'
fi
AC_SUBST(NSINSTALL_BIN)

MOZ_PATH_PROG(DOXYGEN, doxygen, :)
MOZ_PATH_PROG(AUTOCONF, autoconf, :)
MOZ_PATH_PROG(XARGS, xargs)
if test -z "$XARGS" -o "$XARGS" = ":"; then
    AC_MSG_ERROR([xargs not found in \$PATH .])
fi

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 and MOZ_CAN_RUN_PROGRAMS
dnl when we can run target binaries.
AC_SUBST(UNIVERSAL_BINARY)
AC_SUBST(MOZ_CAN_RUN_PROGRAMS)

dnl ========================================================
dnl Check for MacOS deployment target version
dnl ========================================================

MOZ_ARG_ENABLE_STRING(macos-target,
                      [  --enable-macos-target=VER (default=10.6)
                          Set the minimum MacOS version needed at runtime],
                      [_MACOSX_DEPLOYMENT_TARGET=$enableval])

if test "$target_cpu" != "arm"; then
case "$target" in
*-darwin*)
    if test -n "$_MACOSX_DEPLOYMENT_TARGET" ; then
        dnl Use the specified value
        export MACOSX_DEPLOYMENT_TARGET=$_MACOSX_DEPLOYMENT_TARGET
    else
        dnl No value specified on the command line or in the environment,
        dnl use architecture minimum.
        export MACOSX_DEPLOYMENT_TARGET=10.6
    fi
    ;;
esac
fi

AC_SUBST(MACOSX_DEPLOYMENT_TARGET)

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)

dnl MACOS_SDK_DIR will be set to the SDK location whenever one is in use.
AC_SUBST(MACOS_SDK_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>
                 int main() { return 0; }],
   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

fi # COMPILE_ENVIRONMENT

if test -n "$MAKE"; then
  if test `echo $MAKE | grep -c make.py` != 1; then
     NOT_PYMAKE=$MAKE
  fi
fi

case "$host_os" in
mingw*)
    MOZ_PATH_PROGS(GMAKE, $GMAKE $NOT_PYMAKE make gmake, :)
    ;;
*)
    MOZ_PATH_PROGS(GMAKE, $GMAKE $NOT_PYMAKE gmake make, :)
    ;;
esac
if test "$GMAKE" = ":"; then
   AC_MSG_ERROR([GNU make not found])
fi

# MAKE will be set by client.mk, but still need this for standalone js builds
if test -z "$MAKE"; then
  MAKE=$GMAKE
fi

if test "$COMPILE_ENVIRONMENT"; then

AC_PATH_XTRA

XCFLAGS="$X_CFLAGS"

fi # COMPILE_ENVIRONMENT

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`

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)

# Separate version into components for use in shared object naming etc
changequote(,)
MOZJS_MAJOR_VERSION=`echo $MOZILLA_VERSION | sed "s|\(^[0-9]*\)\.[0-9]*.*|\1|"`
MOZJS_MINOR_VERSION=`echo $MOZILLA_VERSION | sed "s|^[0-9]*\.\([0-9]*\).*|\1|"`
MOZJS_PATCH_VERSION=`echo $MOZILLA_VERSION | sed "s|^[0-9]*\.[0-9]*[^0-9]*||"`
IS_ALPHA=`echo $MOZILLA_VERSION | grep '[ab]'`

dnl XXX in a temporary bid to avoid developer anger at renaming files
dnl XXX before "js" symlinks exist, don't change names.
dnl
dnl if test -n "$JS_STANDALONE"; then
dnl JS_SHELL_NAME=js$MOZJS_MAJOR_VERSION
dnl JS_CONFIG_NAME=js$MOZJS_MAJOR_VERSION-config
dnl else
JS_SHELL_NAME=js
JS_CONFIG_NAME=js-config
dnl fi

changequote([,])
if test -n "$IS_ALPHA"; then
  changequote(,)
  MOZJS_ALPHA=`echo $MOZILLA_VERSION | sed "s|^[0-9]*\.[0-9\.]*\([^0-9]\).*|\1|"`
  changequote([,])
fi
AC_DEFINE_UNQUOTED(MOZJS_MAJOR_VERSION,$MOZJS_MAJOR_VERSION)
AC_DEFINE_UNQUOTED(MOZJS_MINOR_VERSION,$MOZJS_MINOR_VERSION)
AC_SUBST(JS_SHELL_NAME)
AC_SUBST(JS_CONFIG_NAME)
AC_SUBST(MOZJS_MAJOR_VERSION)
AC_SUBST(MOZJS_MINOR_VERSION)
AC_SUBST(MOZJS_PATCH_VERSION)
AC_SUBST(MOZJS_ALPHA)


dnl ========================================================
dnl set the defaults first
dnl ========================================================
AS_BIN=$AS
AR_LIST='$(AR) t'
AR_EXTRACT='$(AR) x'
AR_DELETE='$(AR) d'
AS='$(CC)'
AS_DASH_C_FLAG='-c'
DLL_PREFIX=lib
LIB_PREFIX=lib
DLL_SUFFIX=.so
OBJ_SUFFIX=o
LIB_SUFFIX=a
ASM_SUFFIX=s
IMPORT_LIB_SUFFIX=
TARGET_MD_ARCH=unix
DIRENT_INO=d_ino
MOZ_USER_DIR=".mozilla"

MOZ_FIX_LINK_PATHS='-Wl,-rpath-link,$(LIBXUL_DIST)/bin -Wl,-rpath-link,$(prefix)/lib'

USE_DEPENDENT_LIBS=1

_PLATFORM_DEFAULT_TOOLKIT=cairo-gtk2

if test -n "$CROSS_COMPILE"; then
    OS_TARGET="${target_os}"
    OS_ARCH=`echo $target_os | sed -e 's|/|_|g'`
    OS_RELEASE=
    case "${target_os}" in
        linux*)       OS_ARCH=Linux OS_TARGET=Linux ;;
        kfreebsd*-gnu) OS_ARCH=GNU_kFreeBSD OS_TARGET=GNU/kFreeBSD ;;
        gnu*)         OS_ARCH=GNU ;;
        solaris*)     OS_ARCH=SunOS OS_RELEASE=5 ;;
        mingw*)       OS_ARCH=WINNT OS_TARGET=WINNT ;;
        darwin*)      OS_ARCH=Darwin OS_TARGET=Darwin ;;
        dragonfly*)   OS_ARCH=DragonFly OS_TARGET=DragonFly ;;
        freebsd*)     OS_ARCH=FreeBSD OS_TARGET=FreeBSD ;;
        netbsd*)      OS_ARCH=NetBSD OS_TARGET=NetBSD ;;
        openbsd*)     OS_ARCH=OpenBSD OS_TARGET=OpenBSD ;;
    esac
    case "${target}" in
        *-android*|*-linuxandroid*) OS_ARCH=Linux OS_TARGET=Android ;;
    esac
else
    OS_TARGET=`uname -s`
    OS_ARCH=`uname -s | sed -e 's|/|_|g'`
    OS_RELEASE=`uname -r`
fi

# Before this used `uname -m` when not cross compiling
# but that breaks when you have a 64 bit kernel with a 32 bit userland.
OS_TEST="${target_cpu}"

HOST_OS_ARCH=`echo $host_os | sed -e 's|/|_|g'`

#######################################################################
# Master "Core Components" macros for getting the OS target           #
#######################################################################

#
# If OS_TARGET is not specified, it defaults to $(OS_ARCH), i.e., no
# cross-compilation.
#

#
# Define and override various archtecture-specific variables, including
# HOST_OS_ARCH
# OS_ARCH
# OS_TEST
# OS_TARGET
# OS_RELEASE
# OS_MINOR_RELEASE
#

case "$HOST_OS_ARCH" in
mingw*)
    HOST_OS_ARCH=WINNT
    ;;
darwin*)
    HOST_OS_ARCH=Darwin
    ;;
linux*)
    HOST_OS_ARCH=Linux
    ;;
kfreebsd*-gnu)
    HOST_OS_ARCH=GNU_kFreeBSD
    ;;
gnu*)
    HOST_OS_ARCH=GNU
    ;;
dragonfly*)
    HOST_OS_ARCH=DragonFly
    ;;
freebsd*)
    HOST_OS_ARCH=FreeBSD
    ;;
netbsd*)
    HOST_OS_ARCH=NetBSD
    ;;
openbsd*)
    HOST_OS_ARCH=OpenBSD
    ;;
solaris*)
    HOST_OS_ARCH=SunOS
    SOLARIS_SUNPRO_CC=
    SOLARIS_SUNPRO_CXX=
    if test -z "$GNU_CC"; then
        if test "`$CC -V 2>&1 | egrep -c 'Sun.*C '`" != "0"; then
            SOLARIS_SUNPRO_CC=1
       fi
    fi

    if test -z "$GNU_CXX"; then
       if test "`$CXX -V 2>&1 | egrep -c 'Sun.*C\+\+ '`" != "0"; then
           SOLARIS_SUNPRO_CXX=1
       fi
    fi
    AC_SUBST(SOLARIS_SUNPRO_CC)
    AC_SUBST(SOLARIS_SUNPRO_CXX)
    ;;
esac

case "$OS_ARCH" in
WINNT)
    if test -z "$CROSS_COMPILE" ; then
        OS_TEST=`uname -p`
    fi
    ;;
Windows_NT)
#
# If uname -s returns "Windows_NT", we assume that we are using
# the uname.exe in MKS toolkit.
#
# The -r option of MKS uname only returns the major version number.
# So we need to use its -v option to get the minor version number.
# Moreover, it doesn't have the -p option, so we need to use uname -m.
#
    OS_ARCH=WINNT
    OS_TARGET=WINNT
    OS_MINOR_RELEASE=`uname -v`
    if test "$OS_MINOR_RELEASE" = "00"; then
        OS_MINOR_RELEASE=0
    fi
    OS_RELEASE="${OS_RELEASE}.${OS_MINOR_RELEASE}"
    ;;
MINGW*_NT*)
#
# If uname -s returns MINGW32_NT-5.1, we assume that we are using
# the uname.exe in the MSYS tools.
#
    OS_RELEASE=`expr $OS_ARCH : '.*NT-\(.*\)'`
    OS_ARCH=WINNT
    OS_TARGET=WINNT
    ;;
AIX)
    OS_RELEASE=`uname -v`.`uname -r`
    OS_TEST=${target_cpu}
    if test -z "$GNU_CC"; then
        if test "`$CC -qversion 2>&1 | egrep -c 'IBM XL'`" != "0"; then
            AIX_IBM_XLC=1
        fi
    fi
    ;;
Darwin)
    case "${target_cpu}" in
    powerpc*)
        OS_TEST=ppc
        ;;
    i*86*)
        OS_TEST=i386
        ;;
    x86_64)
        OS_TEST=x86_64
        ;;
    *)
        if test -z "$CROSS_COMPILE" ; then
            OS_TEST=`uname -p`
        fi
        ;;
    esac
    ;;
esac

# Only set CPU_ARCH if we recognize the value of OS_TEST

case "$OS_TEST" in
*86 | i86pc)
    CPU_ARCH=x86
    ;;

powerpc64 | ppc64 | powerpc64le | ppc64le)
    CPU_ARCH=ppc64
    ;;

powerpc | ppc | rs6000)
    CPU_ARCH=ppc
    ;;

Alpha | alpha | ALPHA)
    CPU_ARCH=Alpha
    ;;

s390)
    CPU_ARCH=s390
    ;;

s390x)
    CPU_ARCH=s390x
    ;;

hppa* | parisc)
    CPU_ARCH=hppa
    ;;

sun4u | sparc*)
    CPU_ARCH=sparc
    ;;

x86_64 | ia64)
    CPU_ARCH="$OS_TEST"
    ;;

arm*)
    CPU_ARCH=arm
    ;;

mips|mipsel)
    CPU_ARCH="mips32"
    ;;

aarch64*)
    CPU_ARCH=aarch64
    ;;

esac

if test -z "$OS_TARGET"; then
    OS_TARGET=$OS_ARCH
fi
OS_CONFIG="${OS_TARGET}${OS_RELEASE}"

dnl Set INTEL_ARCHITECTURE if we're compiling for x86-32 or x86-64.
dnl ===============================================================
INTEL_ARCHITECTURE=
case "$OS_TEST" in
    x86_64|i?86)
      INTEL_ARCHITECTURE=1
esac

dnl Configure platform-specific CPU architecture compiler options.
dnl ==============================================================
MOZ_ARCH_OPTS

dnl =================================================================
dnl Set up and test static assertion macros used to avoid AC_TRY_RUN,
dnl which is bad when cross compiling.
dnl =================================================================
if test "$COMPILE_ENVIRONMENT"; then
configure_static_assert_macros='
#define CONFIGURE_STATIC_ASSERT(condition) CONFIGURE_STATIC_ASSERT_IMPL(condition, __LINE__)
#define CONFIGURE_STATIC_ASSERT_IMPL(condition, line) CONFIGURE_STATIC_ASSERT_IMPL2(condition, line)
#define CONFIGURE_STATIC_ASSERT_IMPL2(condition, line) typedef int static_assert_line_##line[(condition) ? 1 : -1]
'

dnl test that the macros actually work:
AC_MSG_CHECKING(that static assertion macros used in autoconf tests work)
AC_CACHE_VAL(ac_cv_static_assertion_macros_work,
 [AC_LANG_SAVE
  AC_LANG_C
  ac_cv_static_assertion_macros_work="yes"
  AC_TRY_COMPILE([$configure_static_assert_macros],
                 [CONFIGURE_STATIC_ASSERT(1)],
                 ,
                 ac_cv_static_assertion_macros_work="no")
  AC_TRY_COMPILE([$configure_static_assert_macros],
                 [CONFIGURE_STATIC_ASSERT(0)],
                 ac_cv_static_assertion_macros_work="no",
                 )
  AC_LANG_CPLUSPLUS
  AC_TRY_COMPILE([$configure_static_assert_macros],
                 [CONFIGURE_STATIC_ASSERT(1)],
                 ,
                 ac_cv_static_assertion_macros_work="no")
  AC_TRY_COMPILE([$configure_static_assert_macros],
                 [CONFIGURE_STATIC_ASSERT(0)],
                 ac_cv_static_assertion_macros_work="no",
                 )
  AC_LANG_RESTORE
 ])
AC_MSG_RESULT("$ac_cv_static_assertion_macros_work")
if test "$ac_cv_static_assertion_macros_work" = "no"; then
    AC_MSG_ERROR([Compiler cannot compile macros used in autoconf tests.])
fi
fi # COMPILE_ENVIRONMENT

dnl ========================================================
dnl Android libstdc++, placed here so it can use MOZ_ARCH
dnl computed above.
dnl ========================================================

MOZ_ANDROID_STLPORT

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

dnl ========================================================
dnl = Use Address Sanitizer
dnl ========================================================
MOZ_ARG_ENABLE_BOOL(address-sanitizer,
[  --enable-address-sanitizer       Enable Address Sanitizer (default=no)],
    MOZ_ASAN=1,
    MOZ_ASAN= )
if test -n "$MOZ_ASAN"; then
    MOZ_LLVM_HACKS=1
    AC_DEFINE(MOZ_ASAN)
    MOZ_PATH_PROG(LLVM_SYMBOLIZER, llvm-symbolizer)
fi
AC_SUBST(MOZ_ASAN)

dnl ========================================================
dnl = Use Memory Sanitizer
dnl ========================================================
MOZ_ARG_ENABLE_BOOL(memory-sanitizer,
[  --enable-memory-sanitizer       Enable Memory Sanitizer (default=no)],
    MOZ_MSAN=1,
    MOZ_MSAN= )
if test -n "$MOZ_MSAN"; then
    MOZ_LLVM_HACKS=1
    AC_DEFINE(MOZ_MSAN)
    MOZ_PATH_PROG(LLVM_SYMBOLIZER, llvm-symbolizer)
fi
AC_SUBST(MOZ_MSAN)

dnl ========================================================
dnl = Use Thread Sanitizer
dnl ========================================================
MOZ_ARG_ENABLE_BOOL(thread-sanitizer,
[  --enable-thread-sanitizer       Enable Thread Sanitizer (default=no)],
   MOZ_TSAN=1,
   MOZ_TSAN= )
if test -n "$MOZ_TSAN"; then
    MOZ_LLVM_HACKS=1
    AC_DEFINE(MOZ_TSAN)
    MOZ_PATH_PROG(LLVM_SYMBOLIZER, llvm-symbolizer)
fi
AC_SUBST(MOZ_TSAN)

# The LLVM symbolizer is used by all sanitizers
AC_SUBST(LLVM_SYMBOLIZER)

dnl ========================================================
dnl = Enable hacks required for LLVM instrumentations
dnl ========================================================
MOZ_ARG_ENABLE_BOOL(llvm-hacks,
[  --enable-llvm-hacks       Enable workarounds required for several LLVM instrumentations (default=no)],
    MOZ_LLVM_HACKS=1,
    MOZ_LLVM_HACKS= )
if test -n "$MOZ_LLVM_HACKS"; then
    MOZ_NO_WLZDEFS=1
fi

dnl ========================================================
dnl = Enable treating compiler warnings as errors
dnl ========================================================
MOZ_ARG_ENABLE_BOOL(warnings-as-errors,
[  --enable-warnings-as-errors
                          Enable treating warnings as errors],
    MOZ_ENABLE_WARNINGS_AS_ERRORS=1,
    MOZ_ENABLE_WARNINGS_AS_ERRORS=)

dnl ========================================================
dnl GNU specific defaults
dnl ========================================================
if test "$GNU_CC"; then
    # Per bug 719659 comment 2, some of the headers on ancient build machines
    # may require gnu89 inline semantics.  But otherwise, we use C99.
    # But on OS X we just use C99 plus GNU extensions, in order to fix
    # bug 917526.
    CFLAGS="$CFLAGS -std=gnu99"
    if test "${OS_ARCH}" != Darwin; then
        CFLAGS="$CFLAGS -fgnu89-inline"
    fi
    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 $@'
    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"
        fi
    fi
    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)

    # Turn on gcc/clang warnings:
    # https://gcc.gnu.org/onlinedocs/gcc-4.4.0/gcc/Warning-Options.html
    #
    # -Wall - turn on a lot of warnings
    # -Waddress - catches suspicious uses of memory addresses
    # -Wchar-subscripts - catches array index using signed char
    # -Wcomment - catches nested comments
    # -Wempty-body - catches bugs, e.g. "if (c); foo();", few false positives
    # -Wendif-labels - catches `#else FOO` and `#endif FOO` not in comment
    # -Wenum-compare - catches comparison of different enum types
    # -Wignored-qualifiers - catches returns types with qualifiers like const
    # -Wimplicit-function-declaration - catches missing C function prototypes
    # -Wint-to-pointer-cast - catches cast to pointer from integer of different size
    # -Wmissing-braces - catches aggregate initializers missing nested braces
    # -Wmultichar - catches multicharacter integer constants like 'THIS'
    # -Wnon-literal-null-conversion - catches expressions used as a null pointer constant
    # -Wnonnull - catches NULL used with functions arguments marked as non-null
    # -Wparentheses - catches `if (a=b)` and operator precedence bugs
    # -Wpointer-arith - catches pointer arithmetic using NULL or sizeof(void)
    # -Wpointer-sign - catches mixing pointers to signed and unsigned types
    # -Wpointer-to-int-cast - catches casts from pointer to different sized int
    # -Wreturn-type - catches missing returns, zero false positives
    # -Wsequence-point - catches undefined order behavior like `a = a++`
    # -Wsign-compare - catches comparison of signed and unsigned types
    # -Wswitch - catches switches without all enum cases or default case
    # -Wtrigraphs - catches unlikely use of trigraphs
    # -Wtype-limits - catches overflow bugs, few false positives
    # -Wunknown-pragmas - catches unexpected #pragma directives
    # -Wwrite-strings - catches non-const char* pointers to string literals
    #
    _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Wall"
    _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Wsign-compare"
    _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Wtype-limits"

    # Treat some warnings as errors if --enable-warnings-as-errors:
    if test "$MOZ_ENABLE_WARNINGS_AS_ERRORS"; then
        _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Werror=address"
        _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Werror=char-subscripts"
        _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Werror=comment"
        _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Werror=empty-body"
        _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Werror=endif-labels"
        _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Werror=enum-compare"
        _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Werror=ignored-qualifiers"
        _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Werror=implicit-function-declaration"
        _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Werror=int-to-pointer-cast"
        _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Werror=missing-braces"
        _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Werror=multichar"
        _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Werror=nonnull"
        _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Werror=parentheses"
        _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Werror=pointer-arith"
        _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Werror=pointer-sign"
        _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Werror=pointer-to-int-cast"
        _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Werror=return-type"
        _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Werror=sequence-point"
        _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Werror=switch"
        _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Werror=trigraphs"
        _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Werror=uninitialized"
        _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Werror=unknown-pragmas"
        _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Werror=write-strings"

        MOZ_C_SUPPORTS_WARNING(-Werror=, non-literal-null-conversion, ac_c_has_werror_non_literal_null_conversion)
        MOZ_C_SUPPORTS_WARNING(-Werror=, sometimes-uninitialized, ac_c_has_sometimes_uninitialized)
    fi

    # Turn off the following warnings that -Wall turns on:
    # -Wno-unused - lots of violations in third-party code
    # -Wno-inline-new-delete - we inline 'new' and 'delete' in mozalloc
    # -Wno-unused-local-typedef - catches unused typedefs, which are commonly used in assertion macros
    #
    _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Wno-unused"

    MOZ_CXX_SUPPORTS_WARNING(-Wno-, inline-new-delete, ac_cxx_has_wno_inline_new_delete)
    MOZ_CXX_SUPPORTS_WARNING(-Wno-, unused-local-typedef, ac_cxx_has_wno_unused_local_typedef)

    if test -z "$INTEL_CC" -a -z "$CLANG_CC"; then
       # Don't use -Wcast-align with ICC or clang
       case "$CPU_ARCH" in
           # And don't use it on hppa, ia64, sparc, arm, since it's noisy there
           hppa | ia64 | sparc | arm)
           ;;
           *)
        _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Wcast-align"
           ;;
       esac
    fi

    _DEFINES_CFLAGS='-include $(DEPTH)/js/src/js-confdefs.h -DMOZILLA_CLIENT'
    _USE_CPP_INCLUDE_FLAG=1

elif test "$SOLARIS_SUNPRO_CC"; then
    DSO_CFLAGS=''
    if test "$CPU_ARCH" = "sparc"; then
        # for Sun Studio on Solaris/SPARC
        DSO_PIC_CFLAGS='-xcode=pic32'
    else
        DSO_PIC_CFLAGS='-KPIC'
    fi
    _DEFINES_CFLAGS='$(ACDEFINES) -D_JS_CONFDEFS_H_ -DMOZILLA_CLIENT'
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_JS_CONFDEFS_H_ -DMOZILLA_CLIENT'
fi

if test "$GNU_CXX"; then
    # Turn on gcc/clang warnings:
    # https://gcc.gnu.org/onlinedocs/gcc-4.4.0/gcc/Warning-Options.html
    #
    # -Wall - turn on a lot of warnings
    # -Wchar-subscripts - catches array index using signed char
    # -Wcomment - catches nested comments
    # -Wconversion-null - catches conversions between NULL and non-pointer types
    # -Wempty-body - catches bugs, e.g. "if (c); foo();", few false positives
    # -Wendif-labels - catches `#else FOO` and `#endif FOO` not in comment
    # -Wignored-qualifiers - catches returns types with qualifiers like const
    # -Wint-to-pointer-cast - catches cast to pointer from integer of different size
    # -Wmissing-braces - catches aggregate initializers missing nested braces
    # -Wnon-literal-null-conversion - catches expressions used as a null pointer constant
    # -Woverloaded-virtual - function declaration hides virtual function from base class
    # -Wparentheses - catches `if (a=b)` and operator precedence bugs
    # -Wpointer-arith - catches pointer arithmetic using NULL or sizeof(void)
    # -Wpointer-to-int-cast - catches casts from pointer to different sized int
    # -Wrange-loop-analysis - catches copies during range-based for loops.
    # -Wreorder - catches ctor initializer list not matching class definition order
    # -Wreturn-type - catches missing returns, zero false positives
    # -Wsequence-point - catches undefined order behavior like `a = a++`
    # -Wsign-compare - catches comparison of signed and unsigned types
    # -Wswitch - catches switches without all enum cases or default case
    # -Wtrigraphs - catches unlikely use of trigraphs
    # -Wtype-limits - catches overflow bugs, few false positives
    # -Wunknown-pragmas - catches unexpected #pragma directives
    # -Wunused-label - catches unused goto labels
    # -Wunused-value - catches unused expression results
    # -Wwrite-strings - catches non-const char* pointers to string literals
    #
    _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Wall"
    _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Wsign-compare"
    _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Wtype-limits"

    # Treat some warnings as errors if --enable-warnings-as-errors:
    if test "$MOZ_ENABLE_WARNINGS_AS_ERRORS"; then
        _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Werror=char-subscripts"
        _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Werror=comment"
        _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Werror=endif-labels"
        _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Werror=ignored-qualifiers"
        _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Werror=int-to-pointer-cast"
        _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Werror=missing-braces"
        _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Werror=overloaded-virtual"
        _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Werror=parentheses"
        _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Werror=pointer-arith"
        _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Werror=reorder"
        _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Werror=return-type"
        _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Werror=sequence-point"
        _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Werror=switch"
        _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Werror=trigraphs"
        _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Werror=uninitialized"
        _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Werror=unknown-pragmas"
        _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Werror=unused-label"
        _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Werror=unused-value"
        _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Werror=write-strings"

        MOZ_CXX_SUPPORTS_WARNING(-Werror=, conversion-null, ac_cxx_has_werror_conversion_null)
        MOZ_CXX_SUPPORTS_WARNING(-Werror=, non-literal-null-conversion, ac_cxx_has_werror_non_literal_null_conversion)
        MOZ_CXX_SUPPORTS_WARNING(-Werror=, range-loop-analysis, ac_cxx_has_range_loop_analysis)
        MOZ_CXX_SUPPORTS_WARNING(-Werror=, sometimes-uninitialized, ac_cxx_has_sometimes_uninitialized)
    fi

    # Turn off the following warnings that -Wall turns on:
    # -Wno-invalid-offsetof - we use offsetof on non-POD types frequently
    # -Wno-unused-local-typedef - catches unused typedefs, which are commonly used in assertion macros
    #
    _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Wno-invalid-offsetof"

    MOZ_CXX_SUPPORTS_WARNING(-Wno-, unused-local-typedef, ac_cxx_has_wno_unused_local_typedef)

    if test -z "$INTEL_CXX" -a -z "$CLANG_CXX"; then
       # Don't use -Wcast-align with ICC or clang
       case "$CPU_ARCH" in
           # And don't use it on hppa, ia64, sparc, arm, since it's noisy there
           hppa | ia64 | sparc | arm)
           ;;
           *)
        _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Wcast-align"
           ;;
       esac
    fi

    _DEFINES_CXXFLAGS='-DMOZILLA_CLIENT -include $(DEPTH)/js/src/js-confdefs.h'
    _USE_CPP_INCLUDE_FLAG=1

    # Recent clang and gcc support C++11 deleted functions without warnings if
    # compiling with -std=c++0x or -std=gnu++0x (or c++11 or gnu++11 in very new
    # versions).  We can't use -std=c++0x yet, so gcc's support must remain
    # unused.  But clang's warning can be disabled, so when compiling with clang
    # we use it to opt out of the warning, enabling (macro-encapsulated) use of
    # deleted function syntax.
    if test "$CLANG_CXX"; then
        _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Wno-c++0x-extensions"
        MOZ_CXX_SUPPORTS_WARNING(-Wno-, extended-offsetof, ac_cxx_has_wno_extended_offsetof)
    fi

else
    _DEFINES_CXXFLAGS='-DMOZILLA_CLIENT -D_JS_CONFDEFS_H_ $(ACDEFINES)'
fi

dnl ========================================================
dnl Checking for 64-bit OS
dnl ========================================================
if test "$COMPILE_ENVIRONMENT"; then
AC_LANG_SAVE
AC_LANG_C
AC_MSG_CHECKING(for 64-bit OS)
AC_TRY_COMPILE([$configure_static_assert_macros],
               [CONFIGURE_STATIC_ASSERT(sizeof(void*) == 8)],
               result="yes", result="no")
AC_MSG_RESULT("$result")
if test "$result" = "yes"; then
    AC_DEFINE(HAVE_64BIT_BUILD)
    HAVE_64BIT_BUILD=1
fi
AC_SUBST(HAVE_64BIT_BUILD)
AC_LANG_RESTORE
fi # COMPILE_ENVIRONMENT

dnl ========================================================
dnl = Use profiling compile flags
dnl ========================================================
MOZ_ARG_ENABLE_BOOL(profiling,
[  --enable-profiling      Set compile flags necessary for using sampling profilers (e.g. shark, perf)],
    MOZ_PROFILING=1,
    MOZ_PROFILING= )

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 -DNO_X11 -D_CRT_SECURE_NO_WARNINGS"
    HOST_OPTIMIZE_FLAGS="${HOST_OPTIMIZE_FLAGS=-O2}"
    HOST_BIN_SUFFIX=.exe
    case "$host" in
    *mingw*)
        PERL="/bin/sh ${_topsrcdir}/build/msys-perl-wrapper"
        ;;
    esac

    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 -DNO_X11"
    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

MOZ_DOING_LTO(lto_is_enabled)

dnl ========================================================
dnl System overrides of the defaults for target
dnl ========================================================

case "$target" in
*-aix*)
    AC_DEFINE(AIX)
    if test ! "$GNU_CC"; then
        if test ! "$HAVE_64BIT_BUILD"; then
            # Compiling with Visual Age C++ object model compat is the
            # default. To compile with object model ibm, add
            # AIX_OBJMODEL=ibm to .mozconfig.
            if test "$AIX_OBJMODEL" = "ibm"; then
                CXXFLAGS="$CXXFLAGS -qobjmodel=ibm"
            else
                AIX_OBJMODEL=compat
            fi
        else
            AIX_OBJMODEL=compat
        fi
        AC_SUBST(AIX_OBJMODEL)
        DSO_LDOPTS='-qmkshrobj=1'
        DSO_CFLAGS='-qflag=w:w'
        DSO_PIC_CFLAGS=
        LDFLAGS="$LDFLAGS -Wl,-brtl -blibpath:/usr/lib:/lib"
        MOZ_FIX_LINK_PATHS=
        MKSHLIB='$(CXX) $(DSO_LDOPTS) -o $@'
        MKCSHLIB='$(CC) $(DSO_LDOPTS) -o $@'
        if test "$COMPILE_ENVIRONMENT"; then
            AC_LANG_SAVE
            AC_LANG_CPLUSPLUS
            AC_MSG_CHECKING([for IBM XLC/C++ compiler version >= 9.0.0.7])
            AC_TRY_COMPILE([],
                [#if (__IBMCPP__ < 900)
                 #error "Bad compiler"
                 #endif],
                _BAD_COMPILER=,_BAD_COMPILER=1)
            if test -n "$_BAD_COMPILER"; then
                AC_MSG_RESULT([no])
                AC_MSG_ERROR([IBM XLC/C++ 9.0.0.7 or higher is required to build.])
            else
                AC_MSG_RESULT([yes])
            fi
            AC_LANG_RESTORE
            TARGET_COMPILER_ABI="ibmc"
            CC_VERSION=`lslpp -Lcq vac.C 2>/dev/null | awk -F: '{ print $3 }'`
            CXX_VERSION=`lslpp -Lcq vacpp.cmp.core 2>/dev/null | awk -F: '{ print $3 }'`
        fi
    fi
    case "${target_os}" in
    aix4.1*)
        DLL_SUFFIX='_shr.a'
        ;;
    esac
    if test "$COMPILE_ENVIRONMENT"; then
        MOZ_CHECK_HEADERS(sys/inttypes.h)
    fi
    AC_DEFINE(NSCAP_DISABLE_DEBUG_PTR_TYPES)
    ;;

*-darwin*)
    AC_DEFINE(XP_DARWIN)
    MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -o $@'
    MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -o $@'
    MOZ_OPTIMIZE_FLAGS="-O3 -fno-stack-protector"
    CFLAGS="$CFLAGS -fno-common"
    CXXFLAGS="$CXXFLAGS -fno-common"
    DLL_SUFFIX=".dylib"
    DSO_LDOPTS=''
    STRIP="$STRIP -x -S"
    _PLATFORM_DEFAULT_TOOLKIT='cairo-cocoa'
    TARGET_NSPR_MDCPUCFG='\"md/_darwin.cfg\"'
    LDFLAGS="$LDFLAGS -lobjc"
    # The ExceptionHandling framework is needed for Objective-C exception
    # logging code in nsObjCExceptions.h. Currently we only use that in debug
    # builds.
    _SAVE_LDFLAGS=$LDFLAGS
     AC_MSG_CHECKING([for -framework ExceptionHandling])
    LDFLAGS="$LDFLAGS -framework ExceptionHandling"
    AC_TRY_LINK(,[return 0;],
                ac_cv_have_framework_exceptionhandling="yes",
                ac_cv_have_framework_exceptionhandling="no")
    AC_MSG_RESULT([$ac_cv_have_framework_exceptionhandling])
    if test  "$ac_cv_have_framework_exceptionhandling" = "yes"; then
      MOZ_DEBUG_LDFLAGS="$MOZ_DEBUG_LDFLAGS -framework ExceptionHandling";
    fi
    LDFLAGS=$_SAVE_LDFLAGS

    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
    MOZ_FIX_LINK_PATHS='-Wl,-executable_path,$(LIBXUL_DIST)/bin'
    ;;

ia64*-hpux*)
    DLL_SUFFIX=".so"
    if test ! "$GNU_CC"; then
       DSO_LDOPTS='-b'
       DSO_CFLAGS=""
       DSO_PIC_CFLAGS=
       MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_LDOPTS) -o $@'
       MKCSHLIB='$(CC) $(CFLAGS) $(DSO_LDOPTS) -o $@'
       CXXFLAGS="$CXXFLAGS -Wc,-ansi_for_scope,on"
    else
       DSO_LDOPTS='-b -E'
       MKSHLIB='$(LD) $(DSO_LDOPTS) -o $@'
       MKCSHLIB='$(LD) $(DSO_LDOPTS) -o $@'
    fi
    MOZ_FIX_LINK_PATHS=
    AC_DEFINE(NSCAP_DISABLE_DEBUG_PTR_TYPES)
    AC_DEFINE(_LARGEFILE64_SOURCE)
    ;;

*-hpux*)
    DLL_SUFFIX=".sl"
    if test ! "$GNU_CC"; then
    	DSO_LDOPTS='-b -Wl,+s'
    	DSO_CFLAGS=""
    	DSO_PIC_CFLAGS="+Z"
    	MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_LDOPTS) -L$(LIBXUL_DIST)/bin -o $@'
    	MKCSHLIB='$(LD) -b +s -L$(LIBXUL_DIST)/bin -o $@'
        CXXFLAGS="$CXXFLAGS -Wc,-ansi_for_scope,on"
    else
        DSO_LDOPTS='-b -E +s'
        MKSHLIB='$(LD) $(DSO_LDOPTS) -L$(LIBXUL_DIST)/bin -L$(LIBXUL_DIST)/lib -o $@'
        MKCSHLIB='$(LD) $(DSO_LDOPTS) -L$(LIBXUL_DIST)/bin -L$(LIBXUL_DIST)/lib -o $@'
    fi
    MOZ_POST_PROGRAM_COMMAND='chatr +s enable'
    AC_DEFINE(NSCAP_DISABLE_DEBUG_PTR_TYPES)
    ;;

*-android*|*-linuxandroid*)
    AC_DEFINE(NO_PW_GECOS)
    no_x=yes
    _PLATFORM_DEFAULT_TOOLKIT=cairo-android
    TARGET_NSPR_MDCPUCFG='\"md/_linux.cfg\"'

    MOZ_GFX_OPTIMIZE_MOBILE=1
    MOZ_OPTIMIZE_FLAGS="-O3 -fno-reorder-functions"
    if test -z "$CLANG_CC"; then
       MOZ_OPTIMIZE_FLAGS="-freorder-blocks $MOZ_OPTIMIZE_FLAGS"
    fi
    # The Maemo builders don't know about this flag
    MOZ_ARM_VFP_FLAGS="-mfpu=vfp"
    ;;

*-*linux*)
    # Note: both GNU_CC and INTEL_CC are set when using Intel's C compiler.
    # Similarly for GNU_CXX and INTEL_CXX.
    if test "$INTEL_CC" -o "$INTEL_CXX"; then
        # -Os has been broken on Intel's C/C++ compilers for quite a
        # while; Intel recommends against using it.
        MOZ_OPTIMIZE_FLAGS="-O2"
    elif test "$GNU_CC" -o "$GNU_CXX"; then
        MOZ_PGO_OPTIMIZE_FLAGS="-O3"
        MOZ_OPTIMIZE_FLAGS="-O3"
        if test -z "$CLANG_CC"; then
           MOZ_OPTIMIZE_FLAGS="-freorder-blocks $MOZ_OPTIMIZE_FLAGS"
        fi
    fi

    TARGET_NSPR_MDCPUCFG='\"md/_linux.cfg\"'

    case "${target_cpu}" in
    alpha*)
    	CFLAGS="$CFLAGS -mieee"
    	CXXFLAGS="$CXXFLAGS -mieee"
    ;;
    esac

    if test -z "$MC"; then
        MC=mc.exe
    fi
    ;;

*-mingw*)
    DSO_CFLAGS=
    DSO_PIC_CFLAGS=
    DLL_SUFFIX=.dll
    RC=rc.exe
    MC=mc.exe
    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"
        # Use temp file for windres (bug 213281)
        RCFLAGS='-O coff --use-temp-file'
        # mingw doesn't require kernel32, user32, and advapi32 explicitly
        LIBS="$LIBS -lgdi32 -lwinmm -lwsock32 -lpsapi"
        MOZ_FIX_LINK_PATHS=
        DLL_PREFIX=
        IMPORT_LIB_SUFFIX=a

        WIN32_CONSOLE_EXE_LDFLAGS=-mconsole
        WIN32_GUI_EXE_LDFLAGS=-mwindows

        # We use mix of both POSIX and Win32 printf format across the tree, so format
        # warnings are useless on mingw.
        MOZ_C_SUPPORTS_WARNING(-Wno-, format, ac_c_has_wno_format)
        MOZ_CXX_SUPPORTS_WARNING(-Wno-, format, ac_cxx_has_wno_format)
    else
        TARGET_COMPILER_ABI=msvc
        HOST_CC='$(CC)'
        HOST_CXX='$(CXX)'
        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
        XARGS=xargs
        DOXYGEN=:
        ASM_SUFFIX=asm
        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 $(DEPTH)/js/src/js-confdefs.h -DMOZILLA_CLIENT'
        _DEFINES_CXXFLAGS='-FI $(DEPTH)/js/src/js-confdefs.h -DMOZILLA_CLIENT'
        CFLAGS="$CFLAGS -W3 -Gy"
        CXXFLAGS="$CXXFLAGS -W3 -Gy"
        if test "$CPU_ARCH" = "x86" -a -z "$CLANG_CL"; then
            dnl VS2012+ defaults to -arch:SSE2.
            dnl Clang-cl gets confused by -arch:IA32, so don't add it.
            dnl (See https://llvm.org/bugs/show_bug.cgi?id=24335)
            CFLAGS="$CFLAGS -arch:IA32"
            CXXFLAGS="$CXXFLAGS -arch:IA32"
        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"
        # 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.
        CFLAGS="$CFLAGS -wd4244 -wd4267"
        CXXFLAGS="$CXXFLAGS -wd4244 -wd4267 -wd4251"
        if test -n "$CLANG_CL"; then
            # Suppress the clang-cl warning for the inline 'new' and 'delete' in mozalloc
            CXXFLAGS="$CXXFLAGS -Wno-inline-new-delete"
        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 psapi.lib"
        MOZ_DEBUG_LDFLAGS='-DEBUG -DEBUGTYPE:CV'
        WARNINGS_AS_ERRORS='-WX'
        MOZ_OPTIMIZE_FLAGS="-O2"
        MOZ_FIX_LINK_PATHS=
        # Disable these flags on clang-cl since it doesn't ignore unknown arguments by default, and
        # autoconf insists on passing $LDFLAGS to the compiler.
        if test -z "$CLANG_CL"; then
            LDFLAGS="$LDFLAGS -LARGEADDRESSAWARE -NXCOMPAT"
            if test -z "$DEVELOPER_OPTIONS"; then
                LDFLAGS="$LDFLAGS -RELEASE"
            fi
        fi
        dnl For profile-guided optimization
        PROFILE_GEN_CFLAGS="-GL"
        PROFILE_GEN_LDFLAGS="-LTCG:PGINSTRUMENT"
        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"
        LDFLAGS="$LDFLAGS -DYNAMICBASE"
        RCFLAGS="-nologo"
    fi
    AC_DEFINE(HAVE_SNPRINTF)
    AC_DEFINE(HAVE__MSIZE)
    AC_DEFINE(_WINDOWS)
    AC_DEFINE(WIN32)
    AC_DEFINE(XP_WIN)
    AC_DEFINE(XP_WIN32)
    AC_DEFINE(HW_THREADS)
    AC_DEFINE(STDC_HEADERS)
    AC_DEFINE(WIN32_LEAN_AND_MEAN)
    TARGET_MD_ARCH=win32
    _PLATFORM_DEFAULT_TOOLKIT='cairo-windows'
    BIN_SUFFIX='.exe'
    MOZ_USER_DIR="Mozilla"

    dnl Hardcode to win95 for now - cls
    TARGET_NSPR_MDCPUCFG='\"md/_win95.cfg\"'

    dnl set NO_X11 defines here as the general check is skipped on win32
    no_x=yes
    AC_DEFINE(NO_X11)

    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 "$HAVE_64BIT_BUILD"; then
            AC_MSG_ERROR([You are targeting i386 but using the 64-bit compiler.])
        fi

        if test -n "$GNU_CC"; then
            CFLAGS="$CFLAGS -mstackrealign -fno-keep-inline-dllexport"
            CXXFLAGS="$CXXFLAGS -mstackrealign -fno-keep-inline-dllexport"
            LDFLAGS="$LDFLAGS -Wl,--large-address-aware"
        else
            DSO_LDOPTS="$DSO_LDOPTS -MACHINE:X86"
            # Disable this flag on clang-cl since it doesn't ignore unknown arguments by default, and
            # autoconf insists on passing $LDFLAGS to the compiler.
            if test -z "$CLANG_CL"; then
                LDFLAGS="$LDFLAGS -SAFESEH"
            fi
        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*)
    DLL_SUFFIX=".so.1.0"
    DSO_CFLAGS=''
    DSO_PIC_CFLAGS='-fPIC'
    DSO_LDOPTS='-shared -fPIC'
    if test "$LIBRUNPATH"; then
	DSO_LDOPTS="-R$LIBRUNPATH $DSO_LDOPTS"
    fi
    ;;

*-solaris*)
    AC_DEFINE(SOLARIS)
    TARGET_NSPR_MDCPUCFG='\"md/_solaris.cfg\"'
    if test -z "$CROSS_COMPILE" && pkginfo -q SUNWpr && pkginfo -q SUNWprd; then
       NO_NSPR_CONFIG_SYSTEM_LDFLAGS="-L/usr/lib/mps -R/usr/lib/mps -lnspr4"
       NO_NSPR_CONFIG_SYSTEM_CFLAGS="-I/usr/include/mps"
       NO_NSPR_CONFIG_SYSTEM_VERSION=["`pkgparam SUNWpr SUNW_PRODVERS | sed -e 's/^[1-9][0-9]*\.[0-9][0-9]*$/&.0/'`"]
    fi
    MOZ_FIX_LINK_PATHS=
    # $ORIGIN/.. is for shared libraries under components/ to locate shared
    # libraries one level up (e.g. libnspr4.so)
    if test "$SOLARIS_SUNPRO_CC"; then
       LDFLAGS="$LDFLAGS -z ignore -R '\$\$ORIGIN:\$\$ORIGIN/..' -z lazyload -z combreloc -z muldefs"
       LIBS="-lCrun -lCstd -lc $LIBS"
       AC_DEFINE(NSCAP_DISABLE_DEBUG_PTR_TYPES)
       CFLAGS="$CFLAGS -xlibmieee -xstrconst -xbuiltin=%all -D__FUNCTION__=__func__"
       CXXFLAGS="$CXXFLAGS -xlibmieee -xbuiltin=%all -features=tmplife,tmplrefstatic,extensions,no%except -norunpath -D__FUNCTION__=__func__ -template=no%extdef"
       LDFLAGS="-xildoff $LDFLAGS"
       if test -z "$CROSS_COMPILE" -a -f /usr/lib/ld/map.noexstk; then
           _SAVE_LDFLAGS=$LDFLAGS
           LDFLAGS="-M /usr/lib/ld/map.noexstk $LDFLAGS"
           AC_TRY_LINK([#include <stdio.h>],
                       [printf("Hello World\n");],
                       ,
                       [LDFLAGS=$_SAVE_LDFLAGS])
       fi
       MOZ_OPTIMIZE_FLAGS="-xO4"
       MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_PIC_FLAGS) $(DSO_LDOPTS) -h $(DSO_SONAME) -o $@'
       MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_FLAGS) $(DSO_LDOPTS) -h $(DSO_SONAME) -o $@'
       DSO_LDOPTS='-G'
       AR_LIST="$AR t"
       AR_EXTRACT="$AR x"
       AR_DELETE="$AR d"
       AR='$(CXX) -xar'
       AR_FLAGS='-o $@'
       AS='/usr/ccs/bin/as'
       ASFLAGS="$ASFLAGS -K PIC -L -P -D_ASM -D__STDC__=0"
       AS_DASH_C_FLAG=''
       TARGET_COMPILER_ABI="sunc"
       CC_VERSION=`$CC -V 2>&1 | grep '^cc:' 2>/dev/null | $AWK -F\: '{ print $2 }'`
       CXX_VERSION=`$CXX -V 2>&1 | grep '^CC:' 2>/dev/null | $AWK -F\: '{ print $2 }'`
       AC_MSG_CHECKING([for Sun C++ compiler version >= 5.9])
       AC_LANG_SAVE
       AC_LANG_CPLUSPLUS
       AC_TRY_COMPILE([],
           [#if (__SUNPRO_CC < 0x590)
           #error "Denied"
           #endif],
           _BAD_COMPILER=,_BAD_COMPILER=1)
       if test -n "$_BAD_COMPILER"; then
           _res="no"
           AC_MSG_ERROR([Sun C++ 5.9 (Sun Studio 12) or higher is required to build. Your compiler version is $CXX_VERSION .])
       else
           _res="yes"
       fi
       AC_TRY_COMPILE([],
           [#if (__SUNPRO_CC >= 0x5100)
           #error "Sun C++ 5.10 or above"
           #endif],
           _ABOVE_SS12U1=,_ABOVE_SS12U1=1)
       if test "$_ABOVE_SS12U1"; then
           # disable xannotate
           CXXFLAGS="$CXXFLAGS -xannotate=no"
       fi
       AC_MSG_RESULT([$_res])
       AC_LANG_RESTORE
    else
       LDFLAGS="$LDFLAGS -Wl,-z,ignore -Wl,-R,'\$\$ORIGIN:\$\$ORIGIN/..' -Wl,-z,lazyload -Wl,-z,combreloc -Wl,-z,muldefs"
       LIBS="-lc $LIBS"
       ASFLAGS="$ASFLAGS -fPIC"
       DSO_LDOPTS='-shared'
       WARNINGS_AS_ERRORS='-Werror'
       _WARNINGS_CFLAGS=''
       _WARNINGS_CXXFLAGS=''
       if test "$OS_RELEASE" = "5.3"; then
           AC_DEFINE(MUST_UNDEF_HAVE_BOOLEAN_AFTER_INCLUDES)
       fi
    fi
    if test "$OS_RELEASE" = "5.5.1"; then
        AC_DEFINE(NEED_USLEEP_PROTOTYPE)
    fi
    ;;

*-sunos*)
    DSO_LDOPTS='-Bdynamic'
    MKSHLIB='-$(LD) $(DSO_LDOPTS) -o $@'
    MKCSHLIB='-$(LD) $(DSO_LDOPTS) -o $@'
    AC_DEFINE(SUNOS4)
    AC_DEFINE(SPRINTF_RETURNS_STRING)
    case "$(target_os)" in
    sunos4.1*)
        DLL_SUFFIX='.so.1.0'
        ;;
    esac
    ;;

esac

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
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'
        ;;
    *-solaris*)
        if test -z "$GNU_CC"; then
         MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS='-M $(BUILD_TOOLS)/gnu-ld-scripts/components-mapfile'
        else
         if test -z "$GCC_USE_GNU_LD"; then
          MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS='-Wl,-M -Wl,$(BUILD_TOOLS)/gnu-ld-scripts/components-mapfile'
         else
          MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS='-Wl,--version-script -Wl,$(BUILD_TOOLS)/gnu-ld-scripts/components-version-script'
         fi
        fi
        ;;
    *-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
fi

dnl Configure JIT support

case "$target" in
i?86-*)
    ENABLE_ION=1
    AC_DEFINE(JS_CPU_X86)
    ;;
x86_64*-*)
    ENABLE_ION=1
    AC_DEFINE(JS_CPU_X64)
    ;;
arm*-*)
    ENABLE_ION=1
    AC_DEFINE(JS_CPU_ARM)
    ;;
sparc-*)
dnl ENABLE_ION=0
    AC_DEFINE(JS_CPU_SPARC)
    ;;
mips*-*)
    ENABLE_ION=1
    AC_DEFINE(JS_CPU_MIPS)
    ;;
esac

case "$target" in
mips*-*)
     AC_DEFINE(JS_NUNBOX32)
     ;;
*)
    if test "$HAVE_64BIT_BUILD" ; then
        AC_DEFINE(JS_PUNBOX64)
    else
        AC_DEFINE(JS_NUNBOX32)
    fi
    ;;
esac

MOZ_ARG_DISABLE_BOOL(ion,
[  --disable-ion      Disable use of the IonMonkey JIT],
  ENABLE_ION= )

AC_SUBST(ENABLE_METHODJIT_SPEW)

AC_SUBST(ENABLE_ION)

if test -n "$COMPILE_ENVIRONMENT"; then
    MOZ_COMPILER_OPTS
fi

if test -z "$SKIP_COMPILER_CHECKS"; then
dnl Checks for typedefs, structures, and compiler characteristics.
dnl ========================================================
AC_HEADER_STDC
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_MSG_CHECKING(for ssize_t)
AC_CACHE_VAL(ac_cv_type_ssize_t,
 [AC_TRY_COMPILE([#include <stdio.h>
                  #include <sys/types.h>],
                 [ssize_t foo = 0;],
                 [ac_cv_type_ssize_t=true],
                 [ac_cv_type_ssize_t=false])])
if test "$ac_cv_type_ssize_t" = true ; then
  AC_DEFINE(HAVE_SSIZE_T)
  AC_MSG_RESULT(yes)
else
  AC_MSG_RESULT(no)
fi

MOZ_CHECK_HEADERS(endian.h)
if test "$ac_cv_header_endian_h" = yes; then
    AC_DEFINE(JS_HAVE_ENDIAN_H)
fi

MOZ_CHECK_HEADERS([machine/endian.h],[],[],[#include <sys/types.h>])
if test "$ac_cv_header_machine_endian_h" = yes; then
    AC_DEFINE(JS_HAVE_MACHINE_ENDIAN_H)
fi

MOZ_CHECK_HEADERS(sys/isa_defs.h)
if test "$ac_cv_header_sys_isa_defs_h" = yes; then
    AC_DEFINE(JS_HAVE_SYS_ISA_DEFS_H)
fi

AC_LANG_CPLUSPLUS

MOZ_CXX11

dnl Check for .hidden assembler directive and visibility attribute.
dnl Borrowed from glibc configure.in
dnl ===============================================================
if test "$GNU_CC" -a "$OS_TARGET" != WINNT; then
  AC_DEFINE(HAVE_VISIBILITY_HIDDEN_ATTRIBUTE)
  AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE)
  case "$OS_TARGET" in
  Darwin)
    VISIBILITY_FLAGS='-fvisibility=hidden -fvisibility-inlines-hidden'
    ;;
  *)
    case $GCC_VERSION in
    4.6*)
      VISIBILITY_FLAGS='-I$(DIST)/system_wrappers -include $(topsrcdir)/config/gcc_hidden_dso_handle.h'
      ;;
    *)
      VISIBILITY_FLAGS='-I$(DIST)/system_wrappers -include $(topsrcdir)/config/gcc_hidden.h'
      ;;
    esac
    WRAP_SYSTEM_INCLUDES=1
    ;;
  esac
fi         # GNU_CC

# visibility hidden flag for Sun Studio on Solaris
if test "$SOLARIS_SUNPRO_CC"; then
VISIBILITY_FLAGS='-xldscope=hidden'
fi         # Sun Studio on Solaris

case "${OS_TARGET}" in
WINNT|Darwin|Android)
  ;;
*)
  STL_FLAGS='-I$(DIST)/stl_wrappers'
  WRAP_STL_INCLUDES=1
  ;;
esac

AC_SUBST(WRAP_SYSTEM_INCLUDES)
AC_SUBST(VISIBILITY_FLAGS)

dnl Checks for header files.
dnl ========================================================
AC_HEADER_DIRENT
case "$target_os" in
freebsd*)
# for stuff like -lXshm
    CPPFLAGS="${CPPFLAGS} ${X_CFLAGS}"
    ;;
esac
MOZ_CHECK_COMMON_HEADERS

dnl These are all the places some variant of statfs can be hiding.
MOZ_CHECK_HEADERS(sys/statvfs.h sys/statfs.h sys/vfs.h sys/mount.h)

dnl Quota support
MOZ_CHECK_HEADERS(sys/quota.h)
MOZ_CHECK_HEADERS(linux/quota.h)

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)

case $target in
*-aix4.3*|*-aix5*)
	;;
*)
    MOZ_CHECK_HEADERS(sys/cdefs.h)
	;;
esac

MOZ_LINUX_PERF_EVENT

dnl Checks for libraries.
dnl ========================================================
case $target in
*-hpux11.*)
	;;
*)
	AC_CHECK_LIB(c_r, gethostbyname_r)
	;;
esac

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

if test ! "$GNU_CXX"; then

    case $target in
    *-aix*)
	AC_CHECK_LIB(C_r, demangle)
	;;
     *)
	AC_CHECK_LIB(C, demangle)
	;;
     esac
fi

AC_CHECK_LIB(socket, socket)

dnl ========================================================
dnl = pthread support
dnl = Start by checking whether the system support pthreads
dnl ========================================================
case "$target_os" in
darwin*)
    USE_PTHREADS=1
    ;;
*)
    AC_CHECK_LIB(pthreads, pthread_create,
        USE_PTHREADS=1 _PTHREAD_LDFLAGS="-lpthreads",
        AC_CHECK_LIB(pthread, pthread_create,
            USE_PTHREADS=1 _PTHREAD_LDFLAGS="-lpthread",
            AC_CHECK_LIB(c_r, pthread_create,
                USE_PTHREADS=1 _PTHREAD_LDFLAGS="-lc_r",
                AC_CHECK_LIB(c, pthread_create,
                    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 "$USE_PTHREADS"x = x; then
    AC_MSG_ERROR([ --with-pthreads specified for a system without pthread support ]);
fi],
    USE_PTHREADS=
    _PTHREAD_LDFLAGS=
)

dnl ========================================================
dnl Do the platform specific pthread hackery
dnl ========================================================
if test "$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)
			;;

	    *-aix4.3*|*-aix5*)
			AC_DEFINE(_REENTRANT)
			;;

	    *-hpux11.*)
			AC_DEFINE(_REENTRANT)
			;;

	    *-*-solaris*)
			AC_DEFINE(_REENTRANT)
			if test "$SOLARIS_SUNPRO_CC"; then
				CFLAGS="$CFLAGS -mt"
				CXXFLAGS="$CXXFLAGS -mt"
			fi
			;;
	esac
    LDFLAGS="${_PTHREAD_LDFLAGS} ${LDFLAGS}"
fi


dnl Checks for library functions.
dnl ========================================================
AC_PROG_GCC_TRADITIONAL
AC_FUNC_MEMCMP
AC_CHECK_FUNCS([getc_unlocked _getc_nolock gmtime_r localtime_r])

dnl check for clock_gettime(), the CLOCK_MONOTONIC clock
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

dnl Checks for math functions.
dnl ========================================================
AC_CHECK_LIB(m, sin)
AC_CHECK_LIB(m, __sincos, AC_DEFINE(HAVE_SINCOS))
AC_CHECK_FUNCS([log2 log1p expm1 sqrt1pm1 acosh asinh atanh cbrt])


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

AM_LANGINFO_CODESET

AC_LANG_C

dnl **********************
dnl *** va_copy checks ***
dnl **********************
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
if test "$ac_cv_thread_keyword" = yes; then
  # mips builds fail with TLS variables because of a binutils bug.
  # See bug 528687
  case "${target}" in
    mips*-*)
      :
      ;;
    *-android*|*-linuxandroid*)
      :
      ;;
    *)
      AC_DEFINE(HAVE_THREAD_TLS_KEYWORD)
      ;;
  esac
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

TARGET_XPCOM_ABI=
if test -n "${CPU_ARCH}" -a -n "${TARGET_COMPILER_ABI}"; then
    TARGET_XPCOM_ABI="${CPU_ARCH}-${TARGET_COMPILER_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 = Mozilla update channel, used for disabling features
dnl = not wanted for release.
dnl ========================================================

# app update channel is 'default' when not supplied.
MOZ_ARG_ENABLE_STRING([update-channel],
[  --enable-update-channel=CHANNEL
                          Select application update channel (default=default)],
    MOZ_UPDATE_CHANNEL=`echo $enableval | tr A-Z a-z`)

if test -z "$MOZ_UPDATE_CHANNEL"; then
    MOZ_UPDATE_CHANNEL=default
fi
AC_DEFINE_UNQUOTED(MOZ_UPDATE_CHANNEL, $MOZ_UPDATE_CHANNEL)
AC_SUBST(MOZ_UPDATE_CHANNEL)


dnl set GRE_MILESTONE
dnl ========================================================
GRE_MILESTONE=`tail -n 1 "$_topsrcdir"/config/milestone.txt 2>/dev/null || tail -1 "$_topsrcdir"/config/milestone.txt`
AC_SUBST(GRE_MILESTONE)

dnl set RELEASE_BUILD and NIGHTLY_BUILD variables depending on the cycle we're in
dnl The logic works like this:
dnl - if we have "a1" in GRE_MILESTONE, we're building Nightly (define NIGHTLY_BUILD)
dnl - otherwise, if we have "a" in GRE_MILESTONE, we're building Nightly or Aurora
dnl - otherwise, we're building Release/Beta (define RELEASE_BUILD)
case "$GRE_MILESTONE" in
  *a1*)
      NIGHTLY_BUILD=1
      AC_DEFINE(NIGHTLY_BUILD)
      ;;
  *a*)
      ;;
  *)
      RELEASE_BUILD=1
      AC_DEFINE(RELEASE_BUILD)
      ;;
esac
AC_SUBST(NIGHTLY_BUILD)
AC_SUBST(RELEASE_BUILD)

dnl ========================================================
dnl =
dnl = Check for external package dependencies
dnl =
dnl ========================================================
MOZ_ARG_HEADER(External Packages)

MOZ_CONFIG_NSPR(js)

dnl ========================================================
dnl system zlib Support
dnl ========================================================
dnl Standalone js defaults to system zlib
if test -n "$JS_STANDALONE"; then
    ZLIB_DIR=yes
fi

MOZ_ZLIB_CHECK([1.2.3])

if test -n "$ZLIB_IN_MOZGLUE"; then
    AC_DEFINE(ZLIB_IN_MOZGLUE)
fi
AC_SUBST(ZLIB_IN_MOZGLUE)

dnl ========================================================
dnl system libffi Support
dnl ========================================================
MOZ_CONFIG_FFI()

dnl ========================================================
dnl =
dnl = Application
dnl =
dnl ========================================================

MOZ_ARG_HEADER(Application)

ENABLE_TESTS=1

USE_ARM_KUSER=

case "${target}" in
    arm*-android*|arm*-linuxandroid*)
        USE_ARM_KUSER=1
        ;;
esac

dnl ========================================================
dnl Use ARM userspace kernel helpers; tell NSPR to enable
dnl their usage and use them in spidermonkey.
dnl ========================================================
MOZ_ARG_WITH_BOOL(arm-kuser,
[  --with-arm-kuser         Use kuser helpers (Linux/ARM only -- requires kernel 2.6.13 or later)],
    USE_ARM_KUSER=1,)
if test -n "$USE_ARM_KUSER"; then
   AC_DEFINE(USE_ARM_KUSER)
fi

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)

dnl ========================================================
dnl build the tests by default
dnl ========================================================
MOZ_ARG_DISABLE_BOOL(tests,
[  --disable-tests         Do not build test libraries & programs],
    ENABLE_TESTS=,
    ENABLE_TESTS=1 )

dnl ========================================================
dnl =
dnl = Module specific options
dnl =
dnl ========================================================
MOZ_ARG_HEADER(Individual module options)

dnl ========================================================
dnl =
dnl = Debugging Options
dnl =
dnl ========================================================
MOZ_ARG_HEADER(Debugging and Optimizations)

if test "$ENABLE_METHODJIT_SPEW"; then
    AC_DEFINE(JS_METHODJIT_SPEW)
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 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 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(MOZ_PGO_OPTIMIZE_FLAGS)

dnl ========================================================
dnl = Disable trace logging
dnl ========================================================
ENABLE_TRACE_LOGGING=1
MOZ_ARG_DISABLE_BOOL(trace-logging,
[  --disable-trace-logging   Disable trace logging],
    ENABLE_TRACE_LOGGING= )

AC_SUBST(ENABLE_TRACE_LOGGING)

if test -n "$ENABLE_TRACE_LOGGING"; then
    AC_DEFINE(JS_TRACE_LOGGING)
fi

dnl ========================================================
dnl = Disable treating compiler warnings as errors
dnl ========================================================
if test -z "$MOZ_ENABLE_WARNINGS_AS_ERRORS"; then
   WARNINGS_AS_ERRORS=''
elif test "$GNU_CC"; then
    # Prevent the following GCC warnings from being treated as errors:
    # -Wmaybe-uninitialized - too many false positives
    # -Wdeprecated-declarations - we don't want our builds held hostage when a
    #   platform-specific API becomes deprecated.
    # -Wfree-nonheap-object - false positives during PGO
    # -Warray-bounds - false positives depending on optimization
    MOZ_C_SUPPORTS_WARNING(-W, no-error=maybe-uninitialized, ac_c_has_noerror_maybe_uninitialized)
    MOZ_CXX_SUPPORTS_WARNING(-W, no-error=maybe-uninitialized, ac_cxx_has_noerror_maybe_uninitialized)
    MOZ_C_SUPPORTS_WARNING(-W, no-error=deprecated-declarations, ac_c_has_noerror_deprecated_declarations)
    MOZ_CXX_SUPPORTS_WARNING(-W, no-error=deprecated-declarations, ac_cxx_has_noerror_deprecated_declarations)
    MOZ_C_SUPPORTS_WARNING(-W, no-error=array-bounds, ac_c_has_noerror_array_bounds)
    MOZ_CXX_SUPPORTS_WARNING(-W, no-error=array-bounds, ac_cxx_has_noerror_array_bounds)

    if test -n "$MOZ_PGO"; then
        MOZ_C_SUPPORTS_WARNING(-W, no-error=coverage-mismatch, ac_c_has_noerror_coverage_mismatch)
        MOZ_CXX_SUPPORTS_WARNING(-W, no-error=coverage-mismatch, ac_cxx_has_noerror_coverage_mismatch)
        MOZ_C_SUPPORTS_WARNING(-W, no-error=free-nonheap-object, ac_c_has_noerror_free_nonheap_object)
        MOZ_CXX_SUPPORTS_WARNING(-W, no-error=free-nonheap-object, ac_cxx_has_noerror_free_nonheap_object)
    fi
fi

dnl ========================================================
dnl = Enable DMD
dnl ========================================================

MOZ_ARG_ENABLE_BOOL(dmd,
[  --enable-dmd            Enable DMD; also enables jemalloc and replace-malloc],
    MOZ_DMD=1,
    MOZ_DMD= )

if test "$MOZ_DMD"; then
    AC_DEFINE(MOZ_DMD)

    if test "${CPU_ARCH}" = "arm"; then
        CFLAGS="$CFLAGS -funwind-tables"
        CXXFLAGS="$CXXFLAGS -funwind-tables"
    fi
fi

dnl ========================================================
dnl = Enable jemalloc
dnl ========================================================

LOCAL_MOZ_MEMORY=1
MOZ_ARG_DISABLE_BOOL(jemalloc,
[  --disable-jemalloc       Don't replace memory allocator with jemalloc],
    LOCAL_MOZ_MEMORY=)

dnl Consult the command-line arguments in stand alone-builds only. In
dnl non-stand-alone builds, we always use the value of MOZ_MEMORY inherited from
dnl the top-level configure script.
if test "$JS_STANDALONE"; then
    MOZ_MEMORY=$LOCAL_MOZ_MEMORY
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 "$MOZ_MEMORY"; then
  AC_DEFINE(MOZ_MEMORY)
  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
  *-darwin*)
    AC_DEFINE(MOZ_MEMORY_DARWIN)
    ;;
  *-*freebsd*)
    AC_DEFINE(MOZ_MEMORY_BSD)
    ;;
  *-android*|*-linuxandroid*)
    AC_DEFINE(MOZ_MEMORY_LINUX)
    AC_DEFINE(MOZ_MEMORY_ANDROID)
    ;;
  *-*linux*)
    AC_DEFINE(MOZ_MEMORY_LINUX)
    ;;
  *-netbsd*)
    AC_DEFINE(MOZ_MEMORY_BSD)
    ;;
  *-solaris*)
    AC_DEFINE(MOZ_MEMORY_SOLARIS)
    ;;
  *-mingw*)
    AC_DEFINE(MOZ_MEMORY_WINDOWS)
    ;;
  *)
    AC_MSG_ERROR([--enable-jemalloc not supported on ${target}])
    ;;
  esac
fi
AC_SUBST(MOZ_MEMORY)
AC_SUBST(MOZ_JEMALLOC4)
if test -n "$MOZ_JEMALLOC4"; then
  AC_DEFINE(MOZ_JEMALLOC4)
fi
AC_SUBST(MOZ_CRT)
AC_SUBST(MOZ_GLUE_IN_PROGRAM)
AC_SUBST_LIST(MOZ_GLUE_WRAP_LDFLAGS)

dnl ========================================================
dnl = Use malloc wrapper lib
dnl ========================================================
MOZ_ARG_ENABLE_BOOL(wrap-malloc,
[  --enable-wrap-malloc    Wrap malloc calls (gnu linker only)],
    _WRAP_MALLOC=1,
    _WRAP_MALLOC= )

if test -n "$_WRAP_MALLOC"; then
    if test "$GNU_CC"; then
        WRAP_LDFLAGS="${WRAP_LDFLAGS} -Wl,--wrap=malloc,--wrap=calloc,--wrap=valloc,--wrap=free,--wrap=realloc,--wrap=memalign"
        WRAP_LDFLAGS="${WRAP_LDFLAGS} -Wl,--wrap=__builtin_new,--wrap=__builtin_vec_new,--wrap=__builtin_delete,--wrap=__builtin_vec_delete"
        WRAP_LDFLAGS="${WRAP_LDFLAGS} -Wl,--wrap=strdup,--wrap=strndup"
        WRAP_LDFLAGS="${WRAP_LDFLAGS} -Wl,--wrap=posix_memalign,--wrap=malloc_usable_size"
        dnl Wrap operator new and operator delete on Android.
        if test "$OS_TARGET" = "Android"; then
            WRAP_LDFLAGS="${WRAP_LDFLAGS} -Wl,--wrap=_Znwj,--wrap=_Znaj,--wrap=_ZdlPv,--wrap=_ZdaPv"
        fi
    else
        AC_MSG_ERROR([--enable-wrap-malloc is not supported for non-GNU toolchains])
    fi
fi

dnl ========================================================
dnl = Location of malloc wrapper lib
dnl ========================================================
MOZ_ARG_WITH_STRING(wrap-malloc,
[  --with-wrap-malloc=DIR  Location of malloc wrapper library],
    WRAP_LDFLAGS="${WRAP_LDFLAGS} $withval")

dnl ========================================================
dnl = Use a smaller chunk size for GC chunks
dnl ========================================================
dnl Use large (1MB) chunks by default.  For B2G this option is used to give
dnl smaller (currently 256K) chunks.
MOZ_ARG_ENABLE_BOOL(small-chunk-size,
[  --enable-small-chunk-size  Allocate memory for JS GC things in smaller chunks],
    JS_GC_SMALL_CHUNK_SIZE=1,
    JS_GC_SMALL_CHUNK_SIZE= )
if test -n "$JS_GC_SMALL_CHUNK_SIZE"; then
    AC_DEFINE(JS_GC_SMALL_CHUNK_SIZE)
fi

dnl ========================================================
dnl = Use GC tracing
dnl ========================================================
MOZ_ARG_ENABLE_BOOL(gc-trace,
[  --enable-gc-trace  Enable tracing of allocation and finalization],
    JS_GC_TRACE=1,
    JS_GC_TRACE= )
if test -n "$JS_GC_TRACE"; then
    AC_DEFINE(JS_GC_TRACE)
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)
    MOZ_VALGRIND=1
fi
AC_SUBST(MOZ_VALGRIND)

dnl ========================================================
dnl = Use a JIT code simulator for a foreign architecture.
dnl ========================================================
MOZ_ARG_ENABLE_STRING(simulator,
[  --enable-simulator=ARCH
                          Enable a JIT code simulator for the specified arch.
                          (arm, arm64, mips32).],
    JS_SIMULATOR="$enableval")

if test -n "$JS_SIMULATOR"; then
    case "$JS_SIMULATOR" in
        arm|arm64|mips32) ;;
        no)
            JS_SIMULATOR=
            ;;
        *) AC_MSG_ERROR([Invalid simulator. Valid simulators are: arm, arm64, mips32.]) ;;
    esac
fi

if test -z "$ENABLE_ION"; then
    AC_DEFINE(JS_CODEGEN_NONE)
    JS_CODEGEN_NONE=1
elif test "$JS_SIMULATOR" = arm; then
    if test "$CPU_ARCH" != "x86"; then
        AC_MSG_ERROR([The ARM simulator only works on x86.])
    fi
    AC_DEFINE(JS_SIMULATOR)
    AC_DEFINE(JS_SIMULATOR_ARM)
    AC_DEFINE(JS_DISASM_ARM)
    AC_DEFINE(JS_CODEGEN_ARM)
    JS_SIMULATOR_ARM=1
    JS_DISASM_ARM=1
    JS_CODEGEN_ARM=1
elif test "$JS_SIMULATOR" = arm64; then
    if test "$CPU_ARCH" != "x86_64"; then
        AC_MSG_ERROR([The ARM64 simulator only works on x86_64.])
    fi
    AC_DEFINE(JS_SIMULATOR)
    AC_DEFINE(JS_SIMULATOR_ARM64)
    AC_DEFINE(JS_CODEGEN_ARM64)
    JS_SIMULATOR_ARM64=1
    JS_CODEGEN_ARM64=1
elif test "$JS_SIMULATOR" = mips32; then
    if test "$CPU_ARCH" != "x86"; then
        AC_MSG_ERROR([The MIPS32 simulator only works on x86.])
    fi
    AC_DEFINE(JS_SIMULATOR)
    AC_DEFINE(JS_SIMULATOR_MIPS32)
    AC_DEFINE(JS_CODEGEN_MIPS32)
    JS_SIMULATOR_MIPS32=1
    JS_CODEGEN_MIPS32=1
elif test "$CPU_ARCH" = "x86"; then
    AC_DEFINE(JS_CODEGEN_X86)
    JS_CODEGEN_X86=1
elif test "$CPU_ARCH" = "x86_64"; then
    AC_DEFINE(JS_CODEGEN_X64)
    JS_CODEGEN_X64=1

    dnl Signal-handler OOM checking requires large mprotected guard regions, so
    dnl currently it is only implemented on x64.
    AC_DEFINE(ASMJS_MAY_USE_SIGNAL_HANDLERS_FOR_OOB)
    ASMJS_MAY_USE_SIGNAL_HANDLERS_FOR_OOB=1
elif test "$CPU_ARCH" = "arm"; then
    AC_DEFINE(JS_CODEGEN_ARM)
    JS_CODEGEN_ARM=1
    if test -n "$MOZ_DEBUG"; then
        AC_DEFINE(JS_DISASM_ARM)
        JS_DISASM_ARM=1
    fi
elif test "$CPU_ARCH" = "mips32"; then
    AC_DEFINE(JS_CODEGEN_MIPS32)
    JS_CODEGEN_MIPS32=1
fi

AC_SUBST(JS_SIMULATOR)
AC_SUBST(JS_SIMULATOR_ARM)
AC_SUBST(JS_SIMULATOR_ARM64)
AC_SUBST(JS_SIMULATOR_MIPS32)
AC_SUBST(JS_CODEGEN_ARM)
AC_SUBST(JS_CODEGEN_ARM64)
AC_SUBST(JS_CODEGEN_MIPS32)
AC_SUBST(JS_CODEGEN_X86)
AC_SUBST(JS_CODEGEN_X64)
AC_SUBST(JS_CODEGEN_NONE)
AC_SUBST(JS_DISASM_ARM)
AC_SUBST(ASMJS_MAY_USE_SIGNAL_HANDLERS_FOR_OOB)

dnl ========================================================
dnl jprof
dnl ========================================================
MOZ_ARG_ENABLE_BOOL(jprof,
[  --enable-jprof          Enable jprof profiling tool (needs mozilla/tools/jprof). Implies --enable-profiling.],
    MOZ_JPROF=1,
    MOZ_JPROF= )
if test -n "$MOZ_JPROF"; then
    MOZ_PROFILING=1
    AC_DEFINE(MOZ_JPROF)
fi

dnl ========================================================
dnl instruments
dnl ========================================================
MOZ_ARG_ENABLE_BOOL(instruments,
[  --enable-instruments    Enable instruments remote profiling. Implies --enable-profiling.],
    MOZ_INSTRUMENTS=1,
    MOZ_INSTRUMENTS= )
if test -n "$MOZ_INSTRUMENTS"; then
    MOZ_PROFILING=1
    AC_DEFINE(MOZ_INSTRUMENTS)
    LIBS="$LIBS -framework CoreFoundation"
fi

dnl ========================================================
dnl callgrind
dnl ========================================================
MOZ_ARG_ENABLE_BOOL(callgrind,
[  --enable-callgrind      Enable callgrind profiling. Implies --enable-profiling.],
    MOZ_CALLGRIND=1,
    MOZ_CALLGRIND= )
if test -n "$MOZ_CALLGRIND"; then
    MOZ_PROFILING=1
    AC_DEFINE(MOZ_CALLGRIND)
fi

dnl ========================================================
dnl vtune
dnl ========================================================
MOZ_ARG_ENABLE_BOOL(vtune,
[  --enable-vtune          Enable vtune profiling. Implies --enable-profiling.],
    MOZ_VTUNE=1,
    MOZ_VTUNE= )

dnl ========================================================
dnl Debug (see Bug 939505)
dnl ========================================================
if test -n "$MOZ_DEBUG"; then
    AC_DEFINE(JS_DEBUG)
fi

dnl ========================================================
dnl Profiling
dnl ========================================================
if test -n "$MOZ_PROFILING"; then
    AC_DEFINE(MOZ_PROFILING)

    case "$OS_TARGET" in
        Linux) MOZ_VTUNE=1 ;;
        WINNT) MOZ_VTUNE=1 ;;
    esac
fi

if test -n "$MOZ_VTUNE"; then
    AC_DEFINE(MOZ_VTUNE)
fi

dnl ========================================================
dnl Zealous JavaScript GC
dnl ========================================================
MOZ_ARG_ENABLE_BOOL(gczeal,
[  --enable-gczeal         Enable zealous GCing],
    JS_GC_ZEAL=1,
    JS_GC_ZEAL= )
if test -n "$JS_GC_ZEAL" -o -n "$MOZ_DEBUG"; then
    AC_DEFINE(JS_GC_ZEAL)
fi

dnl ========================================================
dnl = Enable perf logging for ion.
dnl = Perf logging is OFF by default
dnl ========================================================
MOZ_ARG_ENABLE_BOOL(perf,
[  --enable-perf           Enable Linux perf integration],
  JS_ION_PERF=1,
  JS_ION_PERF= )
if test -n "$JS_ION_PERF"; then
    AC_DEFINE(JS_ION_PERF)
fi

dnl ========================================================
dnl Enable changes that make the shell more deterministic
dnl ========================================================
MOZ_ARG_ENABLE_BOOL(more-deterministic,
[  --enable-more-deterministic
                          Enable changes that make the shell more deterministic],
    JS_MORE_DETERMINISTIC=1,
    JS_MORE_DETERMINISTIC= )
if test -n "$JS_MORE_DETERMINISTIC"; then
    AC_DEFINE(JS_MORE_DETERMINISTIC)
fi

dnl ========================================================
dnl Enable breakpoint for artificial OOMs
dnl ========================================================
MOZ_ARG_ENABLE_BOOL(oom-breakpoint,
[  --enable-oom-breakpoint
                          Enable a breakpoint function for artificial OOMs],
    JS_OOM_BREAKPOINT=1,
    JS_OOM_BREAKPOINT= )
if test -n "$JS_OOM_BREAKPOINT"; then
    AC_DEFINE(JS_OOM_BREAKPOINT)
fi

dnl ========================================================
dnl = Enable static checking using gcc-dehydra
dnl ========================================================

MOZ_ARG_WITH_STRING(static-checking,
[  --with-static-checking=path/to/gcc_dehydra.so
                          Enable static checking of code using GCC-dehydra],
    DEHYDRA_PATH=$withval,
    DEHYDRA_PATH= )

if test -n "$DEHYDRA_PATH"; then
    if test ! -f "$DEHYDRA_PATH"; then
        AC_MSG_ERROR([The dehydra plugin is not at the specified path.])
    fi
    AC_DEFINE(NS_STATIC_CHECKING)
fi
AC_SUBST(DEHYDRA_PATH)

dnl ========================================================
dnl = Enable using the clang plugin to build
dnl ========================================================

MOZ_CONFIG_CLANG_PLUGIN

dnl ========================================================
dnl = Enable static checking using sixgill
dnl ========================================================

MOZ_ARG_WITH_STRING(sixgill,
[  --with-sixgill=path/to/sixgill
                          Enable static checking of code using sixgill],
    SIXGILL_PATH=$withval,
    SIXGILL_PATH= )

if test -n "$SIXGILL_PATH"; then
    if test ! -x "$SIXGILL_PATH/bin/xdbfind" || test ! -f "$SIXGILL_PATH/gcc/xgill.so" || test ! -x "$SIXGILL_PATH/scripts/wrap_gcc/g++"; then
        AC_MSG_ERROR([The sixgill plugin and binaries are not at the specified path.])
    fi
fi
AC_SUBST(SIXGILL_PATH)

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 =
dnl = Profiling and Instrumenting
dnl =
dnl ========================================================
MOZ_ARG_HEADER(Profiling and Instrumenting)

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 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 =
dnl = Misc. Options
dnl =
dnl ========================================================
MOZ_ARG_HEADER(Misc. Options)

dnl ========================================================
dnl update xterm title
dnl ========================================================
MOZ_ARG_ENABLE_BOOL(xterm-updates,
[  --enable-xterm-updates  Update XTERM titles with current command.],
    MOZ_UPDATE_XTERM=1,
    MOZ_UPDATE_XTERM= )

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"

if test -n "$INTEL_CC"; then
  PROFILE_GEN_CFLAGS="-prof-gen -prof-dir ."
  PROFILE_GEN_LDFLAGS=
  PROFILE_USE_CFLAGS="-prof-use -prof-dir ."
  PROFILE_USE_LDFLAGS=
fi

dnl Sun Studio on Solaris
if test "$SOLARIS_SUNPRO_CC"; then
  PROFILE_GEN_CFLAGS="-xprofile=collect:$_objdir/$enable_application"
  PROFILE_GEN_LDFLAGS="-xprofile=collect:$_objdir/$enable_application"
  PROFILE_USE_CFLAGS="-xprofile=use:$_objdir/$enable_application"
  PROFILE_USE_LDFLAGS="-xprofile=use:$_objdir/$enable_application"
fi

AC_SUBST(PROFILE_GEN_CFLAGS)
AC_SUBST(PROFILE_GEN_LDFLAGS)
AC_SUBST(PROFILE_USE_CFLAGS)
AC_SUBST(PROFILE_USE_LDFLAGS)

AC_LANG_CPLUSPLUS

dnl ========================================================
dnl Check for tm_zone, tm_gmtoff in struct tm
dnl ========================================================
AC_CACHE_CHECK(for tm_zone tm_gmtoff in struct tm,
    ac_cv_struct_tm_zone_tm_gmtoff,
    [AC_TRY_COMPILE([#include <time.h>],
                    [struct tm tm; tm.tm_zone = 0; tm.tm_gmtoff = 1;],
                    [ac_cv_struct_tm_zone_tm_gmtoff="yes"],
                    [ac_cv_struct_tm_zone_tm_gmtoff="no"])])
if test "$ac_cv_struct_tm_zone_tm_gmtoff" = "yes" ; then
    AC_DEFINE(HAVE_TM_ZONE_TM_GMTOFF)
fi
fi # ! SKIP_COMPILER_CHECKS

AC_DEFINE(CPP_THROW_NEW, [throw()])
AC_LANG_C

MOZ_EXPAND_LIBS

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'
dnl Sun Studio on Solaris use -xM instead of -MD, see config/rules.mk
elif test "$SOLARIS_SUNPRO_CC"; then
  _DEPEND_CFLAGS=
else
  dnl Don't override this for MSVC
  if test -z "$_WIN32_MSVC"; then
    _USE_CPP_INCLUDE_FLAG=
    _DEFINES_CFLAGS='$(ACDEFINES) -D_JS_CONFDEFS_H_ -DMOZILLA_CLIENT'
    _DEFINES_CXXFLAGS='$(ACDEFINES) -D_JS_CONFDEFS_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 = Disable -fstrict-aliasing with GCC 4.4 and earlier.
dnl = See bugs 821502 and 832623.
dnl ========================================================
if test -n "$GNU_CC" -a -z "$CLANG_CC"; then
    dnl GCC 3.x isn't supported, so we don't need to check for that.
    if test "$GCC_MAJOR_VERSION" -eq "4" -a "$GCC_MINOR_VERSION" -lt "5" ; then
        CFLAGS="$CFLAGS -fno-strict-aliasing"
        CXXFLAGS="$CXXFLAGS -fno-strict-aliasing"
    fi
fi

dnl ========================================================
dnl = Link js shell to system readline
dnl ========================================================
MOZ_ARG_ENABLE_BOOL(readline,
[  --enable-readline       Link js shell to system readline library],
    JS_WANT_READLINE=1,
    JS_WANT_READLINE= )

JS_BUNDLED_EDITLINE=
EDITLINE_LIBS=
JS_DISABLE_SHELL=

case "$target" in
*-mingw*)
    NO_EDITLINE=1
    ;;
*)
    ;;
esac

if test -z "$SKIP_LIBRARY_CHECKS" -a -z "$NO_EDITLINE"; then
  if test -n "$JS_WANT_READLINE"; then
    AC_CHECK_LIB(readline, readline,
                 EDITLINE_LIBS="-lreadline",
                 AC_MSG_ERROR([No system readline library found.]))
  else
    dnl By default, we use editline
    JS_BUNDLED_EDITLINE=1
  fi

  dnl Either way, we want to build with line editing support.
  AC_DEFINE(EDITLINE)
fi
AC_SUBST(JS_BUNDLED_EDITLINE)
AC_SUBST(JS_DISABLE_SHELL)
AC_SUBST_LIST(EDITLINE_LIBS)

dnl ========================================================
dnl =
dnl = Standalone module options
dnl =
dnl ========================================================
MOZ_ARG_HEADER(Standalone module options (Not for building Mozilla))

dnl ========================================================
dnl = Build jsctypes if it's enabled
dnl ========================================================
MOZ_ARG_ENABLE_BOOL(ctypes,
[  --enable-ctypes         Enable js-ctypes (default=no)],
    BUILD_CTYPES=1,
    BUILD_CTYPES= )
JS_HAS_CTYPES=$BUILD_CTYPES
AC_SUBST(JS_HAS_CTYPES)
AC_SUBST(BUILD_CTYPES)
if test "$JS_HAS_CTYPES"; then
  dnl Error out if we're on MSVC and MASM is unavailable.
  if test -n "$_MSC_VER" -a \( "$AS" != "ml.exe" -a "$AS" != "ml64.exe" \); then
    AC_MSG_ERROR([\"$AS\" is not a suitable assembler to build js-ctypes. If you are building with MS Visual Studio 8 Express, you may download the MASM 8.0 package, upgrade to Visual Studio 9 Express, or install the Vista SDK. Or do not use --enable-ctypes.])
  fi
  AC_DEFINE(JS_HAS_CTYPES)
fi

if test "$MOZ_DEBUG" -o "$MOZ_DMD"; then
    MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS=
fi

dnl ========================================================
dnl =
dnl = Options for generating the shell as a script
dnl =
dnl ========================================================

MOZ_ARG_WITH_STRING(qemu-exe,
[  --with-qemu-exe=path   Use path as an arm emulator on host platforms],
    QEMU_EXE=$withval)
AC_SUBST(QEMU_EXE)
MOZ_ARG_WITH_STRING(cross-lib,
[  --with-cross-lib=dir   Use dir as the location for arm libraries],
    CROSS_LIB=$withval,
    CROSS_LIB=/usr/$target)
AC_SUBST(CROSS_LIB)
dnl ========================================================
dnl =
dnl = Maintainer debug option (no --enable equivalent)
dnl =
dnl ========================================================

AC_SUBST(AR)
AC_SUBST(AR_FLAGS)
AC_SUBST(AR_LIST)
AC_SUBST(AR_EXTRACT)
AC_SUBST(AR_DELETE)
AC_SUBST(AS)
AC_SUBST(ASFLAGS)
AC_SUBST(AS_DASH_C_FLAG)
AC_SUBST(LD)
AC_SUBST(RC)
AC_SUBST(RCFLAGS)
AC_SUBST(MC)
AC_SUBST(WINDRES)
AC_SUBST(IMPLIB)
AC_SUBST(FILTER)
AC_SUBST(BIN_FLAGS)
AC_SUBST(MOZ_DEBUG)
AC_SUBST(MOZ_DEBUG_SYMBOLS)
AC_SUBST(MOZ_DEBUG_ENABLE_DEFS)
AC_SUBST(MOZ_DEBUG_DISABLE_DEFS)
AC_SUBST(MOZ_DEBUG_LDFLAGS)
AC_SUBST(WARNINGS_AS_ERRORS)
AC_SUBST(MOZ_JPROF)
AC_SUBST(MOZ_INSTRUMENTS)
AC_SUBST(MOZ_CALLGRIND)
AC_SUBST(MOZ_VTUNE)
AC_SUBST(MOZ_PROFILING)
AC_SUBST(LIBICONV)

AC_SUBST(ENABLE_TESTS)

AC_SUBST(ENABLE_STRIP)
AC_SUBST(PKG_SKIP_STRIP)
AC_SUBST(INCREMENTAL_LINKER)
AC_SUBST(MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS)

AC_SUBST(MOZ_FIX_LINK_PATHS)

AC_SUBST(USE_DEPENDENT_LIBS)

AC_SUBST(MOZ_BUILD_ROOT)

AC_SUBST(MOZ_POST_DSO_LIB_COMMAND)
AC_SUBST(MOZ_POST_PROGRAM_COMMAND)

AC_SUBST(MOZ_APP_NAME)
AC_SUBST(MOZ_APP_DISPLAYNAME)
AC_SUBST(MOZ_APP_VERSION)

AC_SUBST(MOZ_PKG_SPECIAL)

AC_SUBST(MOZILLA_OFFICIAL)

dnl win32 options
AC_SUBST(MOZ_BROWSE_INFO)

dnl Echo the CFLAGS to remove extra whitespace.
CFLAGS=`echo \
	$_WARNINGS_CFLAGS \
	$CFLAGS`

CXXFLAGS=`echo \
	$_WARNINGS_CXXFLAGS \
	$CXXFLAGS`

COMPILE_CFLAGS=`echo \
    $_DEFINES_CFLAGS \
	$_DEPEND_CFLAGS \
    $COMPILE_CFLAGS`

COMPILE_CXXFLAGS=`echo \
    $_DEFINES_CXXFLAGS \
	$_DEPEND_CFLAGS \
    $COMPILE_CXXFLAGS`

HOST_CFLAGS=`echo \
    $HOST_CFLAGS \
    $_DEPEND_CFLAGS`

HOST_CXXFLAGS=`echo \
    $HOST_CXXFLAGS \
    $_DEPEND_CFLAGS`

AC_SUBST(NSPR_CFLAGS)
AC_SUBST_LIST(NSPR_LIBS)
AC_SUBST(MOZ_NATIVE_NSPR)

if test -n "$MOZ_NUWA_PROCESS"; then
    AC_DEFINE(MOZ_NUWA_PROCESS)
fi

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(CROSS_COMPILE)

AC_SUBST(HOST_CC)
AC_SUBST(HOST_CXX)
AC_SUBST(HOST_CFLAGS)
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(HOST_OS_ARCH)

AC_SUBST(TARGET_CPU)
AC_SUBST(TARGET_VENDOR)
AC_SUBST(TARGET_OS)
AC_SUBST(TARGET_NSPR_MDCPUCFG)
AC_SUBST(TARGET_MD_ARCH)
AC_SUBST(TARGET_XPCOM_ABI)
AC_SUBST(OS_TARGET)
AC_SUBST(OS_ARCH)
AC_SUBST(OS_RELEASE)
AC_SUBST(OS_TEST)
AC_SUBST(CPU_ARCH)
AC_SUBST(INTEL_ARCHITECTURE)

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(ASM_SUFFIX)
AC_SUBST(IMPORT_LIB_SUFFIX)
AC_SUBST(USE_N32)
AC_SUBST(CC_VERSION)
AC_SUBST(CXX_VERSION)
AC_SUBST(MSMANIFEST_TOOL)
AC_SUBST(MOZ_LINKER)
AC_SUBST(WIN32_CONSOLE_EXE_LDFLAGS)
AC_SUBST(WIN32_GUI_EXE_LDFLAGS)

AC_CHECK_FUNCS(posix_fadvise posix_fallocate)

dnl Set various defines and substitutions
dnl ========================================================

if test "$OS_ARCH" = "Darwin"; then
  AC_DEFINE(XP_MACOSX)
  AC_DEFINE(XP_UNIX)
elif test "$OS_ARCH" != "WINNT"; then
  AC_DEFINE(XP_UNIX)
fi

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


dnl ========================================================
dnl ECMAScript Internationalization API Support (uses ICU)
dnl ========================================================

dnl top-level configure may override this with --without-intl-api
_INTL_API=yes

MOZ_CONFIG_ICU()

MOZ_SUBCONFIGURE_ICU()

dnl ========================================================
dnl JavaScript shell
dnl ========================================================

MOZ_CHECK_ALLOCATOR

AC_CHECK_FUNCS(setlocale localeconv)

AC_SUBST(MOZILLA_VERSION)

AC_SUBST(ac_configure_args)

AC_SUBST(TOOLCHAIN_PREFIX)

if test -n "$JS_STANDALONE"; then
MOZ_APP_NAME="mozjs"
MOZ_APP_VERSION="$MOZILLA_SYMBOLVERSION"
JS_LIBRARY_NAME="mozjs-$MOZILLA_SYMBOLVERSION"
else
JS_LIBRARY_NAME="mozjs"
fi
JS_CONFIG_LIBS="$NSPR_LIBS $LIBS"
if test -n "$GNU_CC"; then
JS_CONFIG_MOZ_JS_LIBS='-L${libdir} -l${JS_LIBRARY_NAME}'
else
JS_CONFIG_MOZ_JS_LIBS='${libdir}/${JS_LIBRARY_NAME}.lib'
fi
AC_SUBST(JS_LIBRARY_NAME)
AC_SUBST(JS_CONFIG_MOZ_JS_LIBS)
AC_SUBST(JS_CONFIG_LIBS)

if test -n "$MOZ_BUILD_NSPR"; then
    MOZ_SUBCONFIGURE_NSPR()
fi
MOZ_SUBCONFIGURE_FFI()
MOZ_SUBCONFIGURE_JEMALLOC()

dnl Spit out some output
dnl ========================================================
MOZ_CREATE_CONFIG_STATUS()

if test "$JS_STANDALONE"; then
  MOZ_RUN_CONFIG_STATUS()
fi
back to top