diff --git a/mozilla/browser/installer/unix/packages-static b/mozilla/browser/installer/unix/packages-static
index 65add5a..906b35f 100644
--- a/mozilla/browser/installer/unix/packages-static
+++ b/mozilla/browser/installer/unix/packages-static
@@ -211,6 +211,7 @@ bin/components/nsExtensionManager.js
 bin/components/nsUpdateService.js
 bin/components/extensions.xpt
 bin/components/update.xpt
+bin/components/libsystem-pref-gconf.so
 bin/components/nsBookmarkTransactionManager.js
 bin/components/nsSessionStartup.js
 bin/components/nsSessionStore.js
diff --git a/mozilla/browser/installer/unix/packages-static.orig b/mozilla/browser/installer/unix/packages-static.orig
new file mode 100644
index 0000000..65add5a
--- /dev/null
+++ b/mozilla/browser/installer/unix/packages-static.orig
@@ -0,0 +1,363 @@
+; Package file for Linux static Firefox build. 
+;
+; File format:
+;
+; [] designates a toplevel component. Example: [xpcom]
+; - in front of a file specifies it to be removed from the destination
+; * wildcard support to recursively copy the entire directory
+; ; file comment
+;
+
+#filter substitution
+
+bin/.autoreg
+
+[@AB_CD@]
+bin/chrome/@AB_CD@.jar
+bin/chrome/@AB_CD@.manifest
+bin/defaults/pref/firefox-l10n.js
+bin/defaults/existing-profile-defaults.js
+; If you add a new directory you must explicitly call addDirectory in ab-CD.jst
+bin/browserconfig.properties
+bin/old-homepage-default.properties
+bin/searchplugins/*
+bin/defaults/profile/bookmarks.html
+bin/defaults/profile/localstore.rdf
+bin/defaults/profile/prefs.js
+bin/defaults/profile/search.rdf
+bin/defaults/profile/mimeTypes.rdf
+bin/defaults/profile/chrome/*
+bin/updater.ini
+bin/dictionaries/*
+
+[xpcom]
+bin/libmozjs.so
+bin/libplc4.so
+bin/libplds4.so
+bin/libxpcom.so
+bin/libxpcom_core.so
+bin/libxpistub.so
+bin/libnspr4.so
+bin/components/libxpinstall.so
+bin/components/libjar50.so
+bin/libxpcom_compat.so
+
+[browser]
+; [Base Browser Files]
+bin/firefox-bin
+bin/firefox
+bin/mozilla-xremote-client
+bin/run-mozilla.sh
+bin/plugins/libnullplugin.so
+bin/res/cmessage.txt
+bin/xpicleanup
+
+; [Components]
+bin/components/accessibility.xpt
+bin/components/accessibility-atk.xpt
+bin/components/appshell.xpt
+bin/components/appstartup.xpt
+bin/components/autocomplete.xpt
+bin/components/autoconfig.xpt
+bin/components/bookmarks.xpt
+bin/components/browsercompsbase.xpt
+bin/components/browsersearch.xpt
+bin/components/browser-feeds.xpt
+bin/components/caps.xpt
+bin/components/chardet.xpt
+bin/components/chrome.xpt
+bin/components/commandhandler.xpt
+bin/components/commandlines.xpt
+bin/components/composer.xpt
+bin/components/content_base.xpt
+bin/components/content_htmldoc.xpt
+bin/components/content_html.xpt
+bin/components/content_xmldoc.xpt
+bin/components/content_xslt.xpt
+bin/components/content_xtf.xpt
+bin/components/cookie.xpt
+bin/components/directory.xpt
+bin/components/docshell.xpt
+bin/components/dom.xpt
+bin/components/dom_base.xpt
+bin/components/dom_canvas.xpt
+bin/components/dom_core.xpt
+bin/components/dom_css.xpt
+bin/components/dom_events.xpt
+bin/components/dom_html.xpt
+bin/components/dom_range.xpt
+bin/components/dom_sidebar.xpt
+bin/components/dom_storage.xpt
+bin/components/dom_stylesheets.xpt
+bin/components/dom_traversal.xpt
+bin/components/dom_views.xpt
+bin/components/dom_xbl.xpt
+bin/components/dom_xpath.xpt
+bin/components/dom_xul.xpt
+bin/components/dom_loadsave.xpt
+bin/components/downloads.xpt
+bin/components/editor.xpt
+bin/components/embed_base.xpt
+bin/components/exthandler.xpt
+bin/components/fastfind.xpt
+bin/components/feeds.xpt
+bin/components/filepicker.xpt
+bin/components/find.xpt
+bin/components/gfx.xpt
+bin/components/helperAppDlg.xpt
+bin/components/history.xpt
+bin/components/htmlparser.xpt
+bin/components/imglib2.xpt
+; bin/components/imgicon.xpt
+bin/components/intl.xpt
+bin/components/jar.xpt
+bin/components/jsconsole.xpt
+bin/components/libjsd.so
+bin/components/jsdservice.xpt
+bin/components/layout_base.xpt
+bin/components/layout_printing.xpt
+bin/components/layout_xul_tree.xpt
+bin/components/layout_xul.xpt
+bin/components/inspector.xpt
+bin/components/locale.xpt
+bin/components/lwbrk.xpt
+bin/components/microsummaries.xpt
+bin/components/migration.xpt
+bin/components/mimetype.xpt
+bin/components/mozbrwsr.xpt
+bin/components/mozfind.xpt
+bin/components/necko_about.xpt
+bin/components/necko_cache.xpt
+bin/components/necko_cookie.xpt
+bin/components/necko_data.xpt
+bin/components/necko_dns.xpt
+bin/components/necko_file.xpt
+bin/components/necko_ftp.xpt
+bin/components/necko_http.xpt
+bin/components/necko_jar.xpt
+bin/components/necko_res.xpt
+bin/components/necko_socket.xpt
+bin/components/necko_strconv.xpt
+bin/components/necko_viewsource.xpt
+bin/components/necko.xpt
+bin/components/oji.xpt
+bin/components/passwordmgr.xpt
+bin/components/places.xpt
+bin/components/plugin.xpt
+bin/components/prefetch.xpt
+bin/components/pref.xpt
+bin/components/progressDlg.xpt
+bin/components/proxyObjInst.xpt
+bin/components/toolkitremote.xpt
+bin/components/rdf.xpt
+bin/components/satchel.xpt
+bin/components/saxparser.xpt
+bin/components/search.xpt
+bin/components/shistory.xpt
+bin/components/storage.xpt
+bin/components/profile.xpt
+bin/components/toolkitprofile.xpt
+bin/components/txtsvc.xpt
+bin/components/txmgr.xpt
+bin/components/uconv.xpt
+bin/components/unicharutil.xpt
+bin/components/uriloader.xpt
+bin/components/webBrowser_core.xpt
+bin/components/webbrowserpersist.xpt
+bin/components/webshell_idls.xpt
+bin/components/websrvcs.xpt
+bin/components/widget.xpt
+bin/components/windowds.xpt
+bin/components/windowwatcher.xpt
+bin/components/xml-rpc.xpt
+bin/components/xpcom_base.xpt
+bin/components/xpcom_components.xpt
+bin/components/xpcom_ds.xpt
+bin/components/xpcom_io.xpt
+bin/components/xpcom_obsolete.xpt
+bin/components/xpcom_threads.xpt
+bin/components/xpcom_xpti.xpt
+bin/components/xpconnect.xpt
+bin/components/xpinstall.xpt
+bin/components/xremoteservice.xpt
+bin/components/xulapp.xpt
+bin/components/xuldoc.xpt
+bin/components/xultmpl.xpt
+bin/components/shellservice.xpt
+; JavaScript components
+bin/components/FeedProcessor.js
+bin/components/FeedConverter.js
+bin/components/FeedWriter.js
+bin/components/WebContentConverter.js
+bin/components/nsBrowserContentHandler.js
+bin/components/nsBrowserGlue.js
+bin/components/nsSetDefaultBrowser.js
+bin/components/nsMicrosummaryService.js
+bin/components/nsSearchService.js
+bin/components/nsSearchSuggestions.js
+bin/components/jsconsole-clhandler.js
+bin/components/nsCloseAllWindows.js
+bin/components/nsDictionary.js
+bin/components/nsFilePicker.js
+bin/components/nsHelperAppDlg.js
+bin/components/nsInterfaceInfoToIDL.js
+; bin/components/nsProgressDialog.js   not needed for firefox
+bin/components/nsProxyAutoConfig.js
+; bin/components/nsResetPref.js    not needed for firefox
+bin/components/nsSidebar.js
+; bin/components/nsUpdateNotifier.js not needed for firefox
+bin/components/nsXmlRpcClient.js
+bin/components/nsExtensionManager.js
+bin/components/nsUpdateService.js
+bin/components/extensions.xpt
+bin/components/update.xpt
+bin/components/nsBookmarkTransactionManager.js
+bin/components/nsSessionStartup.js
+bin/components/nsSessionStore.js
+bin/components/sessionstore.xpt
+bin/components/nsURLFormatter.js
+bin/components/urlformatter.xpt
+bin/components/nsDefaultCLH.js
+
+; Safe Browsing
+bin/components/nsSafebrowsingApplication.js
+bin/components/safebrowsing.xpt
+bin/components/nsUrlClassifierListManager.js
+bin/components/nsUrlClassifierLib.js
+bin/components/nsUrlClassifierTable.js
+bin/components/url-classifier.xpt
+
+; Kerberos NegotiateAuth
+bin/components/libauth.so
+
+; GNOME hooks
+bin/components/libmozgnome.so
+bin/components/mozgnome.xpt
+
+; [Browser Chrome Files]
+bin/chrome/browser.jar
+bin/chrome/browser.manifest
+bin/chrome/classic.jar
+bin/chrome/classic.manifest
+bin/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/install.rdf
+bin/chrome/comm.jar
+bin/chrome/comm.manifest
+bin/chrome/toolkit.jar
+bin/chrome/toolkit.manifest
+bin/chrome/icons/default/default.xpm
+bin/chrome/reporter.manifest
+bin/chrome/reporter.jar
+bin/defaults/pref/reporter.js
+
+; shell icons
+bin/icons/*.xpm
+bin/icons/*.png
+
+; [Default Preferences]
+; All the pref files must be part of base to prevent migration bugs
+bin/defaults/pref/firefox.js
+bin/defaults/pref/firefox-branding.js
+bin/defaults/pref/channel-prefs.js
+bin/greprefs/all.js
+bin/greprefs/security-prefs.js
+bin/greprefs/xpinstall.js
+bin/defaults/autoconfig/platform.js
+bin/defaults/autoconfig/prefcalls.js
+
+; [Layout Engine Resources]
+; Style Sheets, Graphics and other Resources used by the layout engine. 
+bin/res/hiddenWindow.html
+bin/res/ua.css
+bin/res/html.css
+bin/res/quirk.css
+bin/res/forms.css
+bin/res/platform-forms.css
+bin/res/EditorOverride.css
+bin/res/table-add-column-after-active.gif
+bin/res/table-add-column-after-hover.gif
+bin/res/table-add-column-after.gif
+bin/res/table-add-column-before-active.gif
+bin/res/table-add-column-before-hover.gif
+bin/res/table-add-column-before.gif
+bin/res/table-add-row-after-active.gif
+bin/res/table-add-row-after-hover.gif
+bin/res/table-add-row-after.gif
+bin/res/table-add-row-before-active.gif
+bin/res/table-add-row-before-hover.gif
+bin/res/table-add-row-before.gif
+bin/res/table-remove-column-active.gif
+bin/res/table-remove-column-hover.gif
+bin/res/table-remove-column.gif
+bin/res/table-remove-row-active.gif
+bin/res/table-remove-row-hover.gif
+bin/res/table-remove-row.gif
+bin/res/arrowd.gif
+bin/res/grabber.gif
+bin/res/viewsource.css
+bin/res/mathml.css
+bin/res/arrow.gif
+bin/res/loading-image.gif
+bin/res/broken-image.gif
+bin/res/fonts/*
+bin/res/dtd/*
+bin/res/html/*
+bin/res/unixcharset.properties
+bin/res/charsetalias.properties
+bin/res/charsetData.properties
+bin/res/langGroups.properties
+bin/res/language.properties
+bin/res/entityTables/*
+
+; svg
+bin/res/svg.css
+bin/components/dom_svg.xpt
+
+; spellchecker (may not be present)
+bin/components/libmyspell.so
+bin/components/spellchecker.xpt
+bin/components/libspellchecker.so
+
+; [Personal Security Manager]
+;
+bin/libnssckbi.so
+bin/components/pipboot.xpt
+bin/components/pipnss.xpt
+bin/components/pippki.xpt
+bin/libnss3.so
+bin/libsmime3.so
+bin/libsoftokn3.chk
+bin/libsoftokn3.so
+bin/libfreebl3.chk
+bin/libfreebl3.so
+bin/libssl3.so
+bin/chrome/pipnss.jar
+bin/chrome/pippki.jar
+bin/chrome/pippki.manifest
+
+; [Updater]
+;
+bin/updater
+
+; [Extensions]
+;
+bin/components/libnkgnomevfs.so
+bin/components/libauth.so
+
+; [Additional Developer Tools]
+[adt]
+bin/extensions/inspector@mozilla.org/install.rdf
+bin/extensions/inspector@mozilla.org/components/inspector-cmdline.js
+bin/extensions/inspector@mozilla.org/chrome.manifest
+bin/extensions/inspector@mozilla.org/chrome/inspector.jar
+bin/extensions/inspector@mozilla.org/defaults/preferences/inspector.js
+
+; [Additional Browsing Enhancements]
+[abe]
+
+[talkback]
+bin/README.txt,bin/readme.txt
+bin/extensions/talkback@mozilla.org/install.rdf
+bin/extensions/talkback@mozilla.org/chrome.manifest
+bin/extensions/talkback@mozilla.org/components/libqfaservices.so
+bin/extensions/talkback@mozilla.org/components/qfaservices.xpt
+bin/extensions/talkback@mozilla.org/components/talkback/*
diff --git a/mozilla/config/autoconf.mk.in b/mozilla/config/autoconf.mk.in
index becb493..9d6f480 100644
--- a/mozilla/config/autoconf.mk.in
+++ b/mozilla/config/autoconf.mk.in
@@ -226,6 +226,7 @@ MOZ_GNOMEUI_LIBS = @MOZ_GNOMEUI_LIBS@
 MOZ_GNOMEVFS_CFLAGS = @MOZ_GNOMEVFS_CFLAGS@
 MOZ_GNOMEVFS_LIBS = @MOZ_GNOMEVFS_LIBS@
 
+MOZ_ENABLE_GCONF = @MOZ_ENABLE_GCONF@
 MOZ_GCONF_CFLAGS = @MOZ_GCONF_CFLAGS@
 MOZ_GCONF_LIBS = @MOZ_GCONF_LIBS@
 
diff --git a/mozilla/configure.in b/mozilla/configure.in
index 023d919..3cf3106 100644
--- a/mozilla/configure.in
+++ b/mozilla/configure.in
@@ -4774,6 +4774,7 @@ then
         ])
     fi
 
+    AC_SUBST(MOZ_ENABLE_GCONF)
     AC_SUBST(MOZ_GCONF_CFLAGS)
     AC_SUBST(MOZ_GCONF_LIBS)
 
diff --git a/mozilla/configure.in.orig b/mozilla/configure.in.orig
new file mode 100644
index 0000000..023d919
--- /dev/null
+++ b/mozilla/configure.in.orig
@@ -0,0 +1,7647 @@
+dnl -*- Mode: Autoconf; tab-width: 4; indent-tabs-mode: nil; -*-
+dnl vi: set tabstop=4 shiftwidth=4 expandtab:
+dnl ***** BEGIN LICENSE BLOCK *****
+dnl Version: MPL 1.1/GPL 2.0/LGPL 2.1
+dnl
+dnl The contents of this file are subject to the Mozilla Public License Version
+dnl 1.1 (the "License"); you may not use this file except in compliance with
+dnl the License. You may obtain a copy of the License at
+dnl http://www.mozilla.org/MPL/
+dnl
+dnl Software distributed under the License is distributed on an "AS IS" basis,
+dnl WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+dnl for the specific language governing rights and limitations under the
+dnl License.
+dnl
+dnl The Original Code is this file as it was released upon August 6, 1998.
+dnl
+dnl The Initial Developer of the Original Code is
+dnl Christopher Seawood.
+dnl Portions created by the Initial Developer are Copyright (C) 1998-2001
+dnl the Initial Developer. All Rights Reserved.
+dnl
+dnl Contributor(s):
+dnl   Jamie Zawinski <jwz@jwz.org>
+dnl   gettimeofday args check
+dnl   Christopher Blizzard <blizzard@appliedtheory.com>
+dnl   gnomefe update & enable-pthreads
+dnl   Ramiro Estrugo <ramiro@netscape.com>
+dnl   X11 makedepend support
+dnl   Insure support.
+dnl   Henry Sobotka <sobotka@axess.com>
+dnl   OS/2 support
+dnl   Dan Mosedale <dmose@mozilla.org>
+dnl   LDAP support
+dnl   Seth Spitzer <sspitzer@netscape.com>
+dnl   xpctools support
+dnl   Benjamin Smedberg <benjamin@smedbergs.us>
+dnl   Howard Chu <hyc@symas.com>
+dnl   MSYS support
+dnl   Mark Mentovai <mark@moxienet.com>:
+dnl   Mac OS X 10.4 support
+dnl   Giorgio Maone <g.maone@informaction.com>
+dnl   MSVC l10n compatible version check
+dnl
+dnl Alternatively, the contents of this file may be used under the terms of
+dnl either the GNU General Public License Version 2 or later (the "GPL"), or
+dnl the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+dnl in which case the provisions of the GPL or the LGPL are applicable instead
+dnl of those above. If you wish to allow use of your version of this file only
+dnl under the terms of either the GPL or the LGPL, and not to allow others to
+dnl use your version of this file under the terms of the MPL, indicate your
+dnl decision by deleting the provisions above and replace them with the notice
+dnl and other provisions required by the GPL or the LGPL. If you do not delete
+dnl the provisions above, a recipient may use your version of this file under
+dnl the terms of any one of the MPL, the GPL or the LGPL.
+dnl
+dnl ***** END LICENSE BLOCK *****
+
+dnl Process this file with autoconf to produce a configure script.
+dnl ========================================================
+
+AC_PREREQ(2.13)
+AC_INIT(config/config.mk)
+AC_CONFIG_AUX_DIR(${srcdir}/build/autoconf)
+AC_CANONICAL_SYSTEM
+TARGET_CPU="${target_cpu}"
+TARGET_VENDOR="${target_vendor}"
+TARGET_OS="${target_os}"
+
+dnl ========================================================
+dnl =
+dnl = Dont change the following two lines.  Doing so breaks:
+dnl =
+dnl = CFLAGS="-foo" ./configure
+dnl =
+dnl ========================================================
+CFLAGS="${CFLAGS=}"
+CPPFLAGS="${CPPFLAGS=}"
+CXXFLAGS="${CXXFLAGS=}"
+LDFLAGS="${LDFLAGS=}"
+HOST_CFLAGS="${HOST_CFLAGS=}"
+HOST_CXXFLAGS="${HOST_CXXFLAGS=}"
+HOST_LDFLAGS="${HOST_LDFLAGS=}"
+
+dnl ========================================================
+dnl = Preserve certain environment flags passed to configure
+dnl = We want sub projects to receive the same flags
+dnl = untainted by this configure script
+dnl ========================================================
+_SUBDIR_CC="$CC"
+_SUBDIR_CXX="$CXX"
+_SUBDIR_CFLAGS="$CFLAGS"
+_SUBDIR_CPPFLAGS="$CPPFLAGS"
+_SUBDIR_CXXFLAGS="$CXXFLAGS"
+_SUBDIR_LDFLAGS="$LDFLAGS"
+_SUBDIR_HOST_CC="$HOST_CC"
+_SUBDIR_HOST_CFLAGS="$HOST_CFLAGS"
+_SUBDIR_HOST_CXXFLAGS="$HOST_CXXFLAGS"
+_SUBDIR_HOST_LDFLAGS="$HOST_LDFLAGS"
+_SUBDIR_CONFIG_ARGS="$ac_configure_args"
+
+dnl Set the version number of the libs included with mozilla
+dnl ========================================================
+MOZJPEG=62
+MOZPNG=10217
+MOZZLIB=1.2.3
+NSPR_VERSION=4
+NSS_VERSION=3
+
+dnl Set the minimum version of toolkit libs used by mozilla
+dnl ========================================================
+GLIB_VERSION=1.2.0
+GTK_VERSION=1.2.0
+LIBIDL_VERSION=0.6.3
+PERL_VERSION=5.004
+QT_VERSION=3.2.0
+QT_VERSION_NUM=320
+LIBART_VERSION=2.3.4
+CAIRO_VERSION=0.3.0
+GTK2_VERSION=1.3.7
+MAKE_VERSION=3.78
+WINDRES_VERSION=2.14.90
+W32API_VERSION=2.4
+GNOMEVFS_VERSION=2.0
+GNOMEUI_VERSION=2.2.0
+GCONF_VERSION=1.2.1
+LIBGNOME_VERSION=2.0
+
+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 a separate objdir build if a srcdir build exists.
+dnl ==============================================================
+_topsrcdir=`cd \`dirname $0\`; pwd`
+_objdir=`pwd`
+if test "$_topsrcdir" != "$_objdir"
+then
+  # 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
+fi
+MOZ_BUILD_ROOT=`pwd`
+
+dnl Default to MSVC for win32
+dnl ==============================================================
+if test -z "$CROSS_COMPILE"; then
+case "$target" in
+*-cygwin*|*-mingw*|*-msvc*|*-mks*)
+    MAKE_VERSION=3.79
+    if test -z "$CC"; then CC=cl; fi
+    if test -z "$CXX"; then CXX=cl; fi
+    if test -z "$CPP"; then CPP=cl; fi
+    if test -z "$LD"; then LD=link; fi
+    if test -z "$AS"; then AS=ml; fi
+    if test -z "$MIDL"; then MIDL=midl; fi
+    ;;
+esac
+fi
+
+COMPILE_ENVIRONMENT=1
+MOZ_ARG_ENABLE_BOOL(compile-environment,
+[  --disable-compile-environment
+                           Disable compiler/library checks.],
+    COMPILE_ENVIRONMENT=1,
+    COMPILE_ENVIRONMENT= )
+
+AC_PATH_PROGS(NSINSTALL_BIN, nsinstall )
+if test -z "$COMPILE_ENVIRONMENT"; then
+if test -z "$NSINSTALL_BIN" || test "$NSINSTALL_BIN" = ":"; then
+   AC_PATH_PROGS(PYTHON, $PYTHON python)
+   if test -z "$PYTHON"; then
+       AC_MSG_ERROR([python was not found in \$PATH])
+   fi
+   echo PYTHON="$PYTHON"
+   NSINSTALL_BIN="$PYTHON \$(topsrcdir)/config/nsinstall.py"
+fi
+fi
+AC_SUBST(NSINSTALL_BIN)
+
+dnl ========================================================
+dnl Checks for compilers.
+dnl ========================================================
+dnl Set CROSS_COMPILE in the environment when running configure
+dnl to use the cross-compile setup for now
+dnl ========================================================
+
+if test "$COMPILE_ENVIRONMENT"; then
+
+dnl Do some special WinCE toolchain stuff
+case "$target" in
+*wince)
+    echo -----------------------------------------------------------------------------
+    echo Building Windows CE Shunt Library and Tool Chain
+    echo -----------------------------------------------------------------------------
+    
+    echo -n "#define TOPSRCDIR \"" > $srcdir/build/wince/tools/topsrcdir.h
+    `$srcdir/build/cygwin-wrapper echo -n $_topsrcdir >> $srcdir/build/wince/tools/topsrcdir.h`
+    echo -n \" >> $srcdir/build/wince/tools/topsrcdir.h
+
+    make -C  $srcdir/build/wince/tools
+    echo -----------------------------------------------------------------------------
+    ;;
+esac
+
+if test -n "$CROSS_COMPILE" && test "$target" != "$host"; then
+    echo "cross compiling from $host to $target"
+    cross_compiling=yes
+
+    _SAVE_CC="$CC"
+    _SAVE_CFLAGS="$CFLAGS"
+    _SAVE_LDFLAGS="$LDFLAGS"
+
+    AC_MSG_CHECKING([for host c compiler])
+    AC_CHECK_PROGS(HOST_CC, $HOST_CC gcc cc /usr/ucb/cc cl icc, "")
+    if test -z "$HOST_CC"; then
+        AC_MSG_ERROR([no acceptable c compiler found in \$PATH])
+    fi
+    AC_MSG_RESULT([$HOST_CC])
+    AC_MSG_CHECKING([for host c++ compiler])
+    AC_CHECK_PROGS(HOST_CXX, $HOST_CXX $CCC c++ g++ gcc CC cxx cc++ cl icc, "")
+    if test -z "$HOST_CXX"; then
+        AC_MSG_ERROR([no acceptable c++ compiler found in \$PATH])
+    fi
+    AC_MSG_RESULT([$HOST_CXX])
+
+    if test -z "$HOST_CFLAGS"; then
+        HOST_CFLAGS="$CFLAGS"
+    fi
+    if test -z "$HOST_CXXFLAGS"; then
+        HOST_CXXFLAGS="$CXXFLAGS"
+    fi
+    if test -z "$HOST_LDFLAGS"; then
+        HOST_LDFLAGS="$LDFLAGS"
+    fi
+    AC_CHECK_PROGS(HOST_RANLIB, $HOST_RANLIB ranlib, ranlib, :)
+    AC_CHECK_PROGS(HOST_AR, $HOST_AR ar, ar, :)
+    CC="$HOST_CC"
+    CFLAGS="$HOST_CFLAGS"
+    LDFLAGS="$HOST_LDFLAGS"
+
+    AC_MSG_CHECKING([whether the host c compiler ($HOST_CC $HOST_CFLAGS $HOST_LDFLAGS) works])
+    AC_TRY_COMPILE([], [return(0);], 
+	[ac_cv_prog_hostcc_works=1 AC_MSG_RESULT([yes])],
+	AC_MSG_ERROR([installation or configuration problem: host compiler $HOST_CC cannot create executables.]) )
+
+    CC="$HOST_CXX"
+    CFLAGS="$HOST_CXXFLAGS"
+
+    AC_MSG_CHECKING([whether the host c++ compiler ($HOST_CXX $HOST_CXXFLAGS $HOST_LDFLAGS) works])
+    AC_TRY_COMPILE([], [return(0);], 
+	[ac_cv_prog_hostcxx_works=1 AC_MSG_RESULT([yes])],
+	AC_MSG_ERROR([installation or configuration problem: host compiler $HOST_CXX cannot create executables.]) )
+    
+    CC=$_SAVE_CC
+    CFLAGS=$_SAVE_CFLAGS
+    LDFLAGS=$_SAVE_LDFLAGS
+
+    case "$build:$target" in
+      powerpc-apple-darwin8*:i?86-apple-darwin*)
+        dnl The Darwin cross compiler doesn't necessarily point itself at a
+        dnl root that has libraries for the proper architecture, it defaults
+        dnl to the system root.  The libraries in the system root on current
+        dnl versions of PPC OS X 10.4 aren't fat, so these target compiler
+        dnl checks will fail.  Fake a working SDK in that case.
+        _SAVE_CFLAGS=$CFLAGS
+        _SAVE_CXXFLAGS=$CXXLAGS
+        CFLAGS="-isysroot /Developer/SDKs/MacOSX10.4u.sdk $CFLAGS"
+        CXXFLAGS="-isysroot /Developer/SDKs/MacOSX10.4u.sdk $CXXFLAGS"
+        ;;
+    esac
+
+    AC_CHECK_PROGS(CC, $CC "${target_alias}-gcc" "${target}-gcc", :)
+    unset ac_cv_prog_CC
+    AC_PROG_CC
+    AC_CHECK_PROGS(CXX, $CXX "${target_alias}-g++" "${target}-g++", :)
+    unset ac_cv_prog_CXX
+    AC_PROG_CXX
+
+    case "$build:$target" in
+      powerpc-apple-darwin8*:i?86-apple-darwin*)
+        dnl Revert the changes made above.  From this point on, the target
+        dnl compiler will never be used without applying the SDK to CFLAGS
+        dnl (see --with-macos-sdk below).
+        CFLAGS=$_SAVE_CFLAGS
+        CXXFLAGS=$_SAVE_CXXFLAGS
+        ;;
+    esac
+
+    AC_CHECK_PROGS(RANLIB, $RANLIB "${target_alias}-ranlib" "${target}-ranlib", :)
+    AC_CHECK_PROGS(AR, $AR "${target_alias}-ar" "${target}-ar", :)
+    AC_PATH_PROGS(AS, $AS "${target_alias}-as" "${target}-as", :)
+    AC_CHECK_PROGS(LD, $LD "${target_alias}-ld" "${target}-ld", :)
+    AC_CHECK_PROGS(STRIP, $STRIP "${target_alias}-strip" "${target}-strip", :)
+    AC_CHECK_PROGS(WINDRES, $WINDRES "${target_alias}-windres" "${target}-windres", :)
+    AC_DEFINE(CROSS_COMPILE)
+else
+    AC_PROG_CC
+    AC_PROG_CXX
+    AC_PROG_RANLIB
+    AC_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
+fi
+
+GNU_AS=
+GNU_LD=
+GNU_CC=
+GNU_CXX=
+CC_VERSION='N/A'
+CXX_VERSION='N/A'
+if test "$GCC" = "yes"; then
+    GNU_CC=1
+    CC_VERSION=`$CC -v 2>&1 | grep 'gcc version'`
+fi
+if test "$GXX" = "yes"; then
+    GNU_CXX=1
+    CXX_VERSION=`$CXX -v 2>&1 | grep 'gcc version'`
+fi
+if test "`echo | $AS -v 2>&1 | grep -c GNU`" != "0"; then
+    GNU_AS=1
+fi
+if test "`echo | $LD -v 2>&1 | grep -c GNU`" != "0"; then
+    GNU_LD=1
+fi
+if test "$GNU_CC"; then
+    if `$CC -print-prog-name=ld` -v 2>&1 | grep -c GNU >/dev/null; then
+        GCC_USE_GNU_LD=1
+    fi
+fi
+
+dnl Special win32 checks
+dnl ========================================================
+case "$target" in
+*-cygwin*|*-mingw*|*-msvc*|*-mks*|*-wince)
+    if test "$GCC" != "yes"; then
+        # Check to see if we are really running in a msvc environemnt
+        _WIN32_MSVC=1
+        AC_CHECK_PROGS(MIDL, midl)
+
+        # Make sure compilers are valid
+        CFLAGS="$CFLAGS -TC -nologo"
+        CXXFLAGS="$CXXFLAGS -TP -nologo"
+        AC_LANG_SAVE
+        AC_LANG_C
+        AC_TRY_COMPILE([#include <stdio.h>],
+            [ printf("Hello World\n"); ],,
+            AC_MSG_ERROR([\$(CC) test failed.  You must have MS VC++ in your path to build.]) )
+
+        AC_LANG_CPLUSPLUS
+        AC_TRY_COMPILE([#include <new.h>],
+            [ unsigned *test = new unsigned(42); ],,
+            AC_MSG_ERROR([\$(CXX) test failed.  You must have MS VC++ in your path to build.]) )
+        AC_LANG_RESTORE
+        
+        _MSVC_VER_FILTER='s|.* \([[0-9]][[0-9]]*\.[[0-9]][[0-9]]*\.[[0-9]][[0-9]]*\).*|\1|p'
+        
+        # Determine compiler version
+        CC_VERSION=`"${CC}" -v 2>&1 | sed -ne "$_MSVC_VER_FILTER"`
+        _CC_MAJOR_VERSION=`echo ${CC_VERSION} | $AWK -F\. '{ print $1 }'`
+        _CC_MINOR_VERSION=`echo ${CC_VERSION} | $AWK -F\. '{ print $2 }'`
+        _MSC_VER=${_CC_MAJOR_VERSION}${_CC_MINOR_VERSION}
+
+        CXX_VERSION=`"${CXX}" -v 2>&1 | sed -ne "$_MSVC_VER_FILTER"`
+        _CXX_MAJOR_VERSION=`echo ${CXX_VERSION} | $AWK -F\. '{ print $1 }'`
+
+        if test "$_CC_MAJOR_VERSION" != "$_CXX_MAJOR_VERSION"; then
+            AC_MSG_ERROR([The major versions of \$CC and \$CXX do not match.])
+        fi
+        if test "$_CC_MAJOR_VERSION" = "12"; then
+            _CC_SUITE=6
+        elif test "$_CC_MAJOR_VERSION" = "13"; then
+            _CC_SUITE=7
+        elif test "$_CC_MAJOR_VERSION" = "14"; then
+            _CC_SUITE=8
+        else
+            AC_MSG_ERROR([This version of the MSVC compiler, $CC_VERSION , is unsupported.])
+        fi
+
+        # Check linker version
+        _LD_FULL_VERSION=`"${LD}" -v 2>&1 | sed -ne "$_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
+
+        # Check midl version
+        _MIDL_FULL_VERSION=`"${MIDL}" -v 2>&1 | sed -ne "$_MSVC_VER_FILTER"`
+        _MIDL_MAJOR_VERSION=`echo ${_MIDL_FULL_VERSION} | $AWK -F\. '{ print $1 }'`
+        _MIDL_MINOR_VERSION=`echo ${_MIDL_FULL_VERSION} | $AWK -F\. '{ print $2 }'`
+        _MIDL_REV_VERSION=`echo ${_MIDL_FULL_VERSION} | $AWK -F\. '{ print $3 }'`
+         # Add flags if necessary
+         AC_MSG_CHECKING([for midl flags])
+         if test \( "$_MIDL_MAJOR_VERSION" -gt "6" \) -o \( "$_MIDL_MAJOR_VERSION" = "6" -a "$_MIDL_MINOR_VERSION" -gt "0" \) -o \( "$_MIDL_MAJOR_VERSION" = "6" -a "$_MIDL_MINOR_VERSION" = "00" -a "$_MIDL_REV_VERSION" -gt "359" \); then
+             # Starting with MIDL version 6.0.359, the MIDL compiler
+             # generates /Oicf /robust stubs by default, which is not
+             # compatible with versions of Windows older than Win2k.
+             # This switches us back to the old behaviour. When we drop
+             # support for Windows older than Win2k, we should remove
+             # this.
+             MIDL_FLAGS="${MIDL_FLAGS} -no_robust"
+             AC_MSG_RESULT([need -no_robust])
+         else
+             MIDL_FLAGS="${MIDL_FLAGS}"
+             AC_MSG_RESULT([none needed])
+        fi
+        
+        unset _MSVC_VER_FILTER
+        
+    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
+    fi # !GNU_CC
+    ;;
+esac
+
+if test -n "$_WIN32_MSVC"; then
+    SKIP_PATH_CHECKS=1
+    SKIP_COMPILER_CHECKS=1
+    SKIP_LIBRARY_CHECKS=1
+    AC_CHECK_HEADERS(mmintrin.h)
+fi
+
+dnl Test breaks icc on OS/2 && MSVC
+if test "$CC" != "icc" -a -z "$_WIN32_MSVC"; then
+    AC_PROG_CC_C_O
+    if grep "NO_MINUS_C_MINUS_O 1" ./confdefs.h >/dev/null; then
+        USING_HCC=1
+        _OLDCC=$CC
+        _OLDCXX=$CXX
+        CC="${srcdir}/build/hcc '$CC'"
+        CXX="${srcdir}/build/hcpp '$CXX'"
+    fi
+fi
+
+AC_PROG_CPP
+AC_PROG_CXXCPP
+
+fi # COMPILE_ENVIRONMENT
+
+AC_SUBST(MIDL_FLAGS)
+AC_SUBST(_MSC_VER)
+
+AC_SUBST(GNU_AS)
+AC_SUBST(GNU_LD)
+AC_SUBST(GNU_CC)
+AC_SUBST(GNU_CXX)
+
+dnl ========================================================
+dnl Checks for programs.
+dnl ========================================================
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AC_PATH_PROGS(PERL, $PERL perl5 perl )
+if test -z "$PERL" || test "$PERL" = ":"; then
+    AC_MSG_ERROR([perl not found in \$PATH])
+fi
+
+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
+
+AC_PATH_PROG(DOXYGEN, doxygen, :)
+AC_PATH_PROG(WHOAMI, whoami, :)
+AC_PATH_PROG(AUTOCONF, autoconf, :)
+AC_PATH_PROG(UNZIP, unzip, :)
+AC_PATH_PROGS(ZIP, zip)
+if test -z "$ZIP" || test "$ZIP" = ":"; then
+    AC_MSG_ERROR([zip not found in \$PATH])
+fi
+AC_PATH_PROG(SYSTEM_MAKEDEPEND, makedepend)
+AC_PATH_PROG(XARGS, xargs)
+if test -z "$XARGS" || test "$XARGS" = ":"; then
+    AC_MSG_ERROR([xargs not found in \$PATH .])
+fi
+
+if test "$COMPILE_ENVIRONMENT"; then
+
+dnl ========================================================
+dnl = Mac OS X toolchain support
+dnl ========================================================
+
+case "$target_os" in
+darwin*)
+    dnl Current known valid versions for GCC_VERSION are 2.95.2 3.1 3.3 4.0.
+    dnl 4.0 identifies itself as 4.0.x, so strip the decidecimal for
+    dnl the environment and includedir purposes (when using an SDK, below),
+    dnl but remember the full version number for the libdir (SDK).
+    changequote(,)
+    GCC_VERSION_FULL=`echo $CXX_VERSION | $PERL -pe 's/^.*gcc version ([^ ]*).*/$1/'`
+    GCC_VERSION=`echo $GCC_VERSION_FULL | $PERL -pe '(split(/\./))[0]>=4&&s/(^\d*\.\d*).*/$1/;'`
+    changequote([,])
+    if test "$GCC_VERSION_FULL" = "4.0.0" ; then
+        dnl Bug 280479, but this keeps popping up in bug 292530 too because
+        dnl 4.0.0/4061 is the default compiler in Tiger.
+        changequote(,)
+        GCC_BUILD=`echo $CXX_VERSION | $PERL -pe 's/^.*build ([^ )]*).*/$1/'`
+        changequote([,])
+        if test "$GCC_BUILD" = "4061" ; then
+            AC_MSG_ERROR([You are attempting to use Apple gcc 4.0 build 4061.
+This compiler was supplied with Xcode 2.0, and contains bugs that prevent it
+from building Mozilla.
+Either upgrade to Xcode 2.1 or later, or switch the system's default compiler
+to gcc 3.3 by running \"sudo gcc_select 3.3\".])
+        fi
+    fi
+
+    dnl xcodebuild needs GCC_VERSION defined in the environment, since it
+    dnl doesn't respect the CC/CXX setting.  With GCC_VERSION set, it will use
+    dnl /usr/bin/g(cc|++)-$GCC_VERSION.
+    AC_PATH_PROGS(PBBUILD, pbbuild xcodebuild pbxbuild)
+
+    case "$PBBUILD" in
+      *xcodebuild*)
+        changequote(,)
+        XCODEBUILD_VERSION=`$PBBUILD -version 2>/dev/null | xargs | sed -e 's/.*DevToolsCore-\([0-9]*\).*/\1/'`
+        changequote([,])
+        if test -n "$XCODEBUILD_VERSION" && test "$XCODEBUILD_VERSION" -ge 620 ; then
+          HAS_XCODE_2_1=1;
+        fi
+      ;;
+    esac
+
+    dnl sdp was formerly in /Developer/Tools.  As of Mac OS X 10.4 (Darwin 8),
+    dnl it has moved into /usr/bin.
+    AC_PATH_PROG(SDP, sdp, :, [$PATH:/usr/bin:/Developer/Tools])
+    ;;
+esac
+
+AC_SUBST(GCC_VERSION)
+AC_SUBST(XCODEBUILD_VERSION)
+AC_SUBST(HAS_XCODE_2_1)
+
+dnl The universal machinery sets UNIVERSAL_BINARY to inform packager.mk
+dnl that a universal binary is being produced.
+AC_SUBST(UNIVERSAL_BINARY)
+
+dnl ========================================================
+dnl Check for MacOS deployment target version
+dnl ========================================================
+
+MOZ_ARG_ENABLE_STRING(macos-target,
+                      [  --enable-macos-target=VER (default=10.2/ppc, 10.4/x86)
+                          Set the minimum MacOS version needed at runtime],
+                      [_MACOSX_DEPLOYMENT_TARGET=$enableval])
+
+case "$target" in
+*-darwin*)
+    if test -n "$_MACOSX_DEPLOYMENT_TARGET" ; then
+        dnl Use the specified value
+        export MACOSX_DEPLOYMENT_TARGET=$_MACOSX_DEPLOYMENT_TARGET
+    elif test -z "$MACOSX_DEPLOYMENT_TARGET" ; then
+        dnl No value specified on the command line or in the environment,
+        dnl use the lesser of the application's minimum or the architecture's
+        dnl minimum.
+        case "${target_cpu}" in
+            powerpc*)
+                dnl Architecture minimum 10.1
+                export MACOSX_DEPLOYMENT_TARGET=10.2
+                ;;
+            i*86*)
+                dnl Architecture minimum 10.4
+                export MACOSX_DEPLOYMENT_TARGET=10.4
+                ;;
+        esac
+    fi
+    ;;
+esac
+
+AC_SUBST(MACOSX_DEPLOYMENT_TARGET)
+
+dnl ========================================================
+dnl = Mac OS X SDK support
+dnl ========================================================
+MACOS_SDK_DIR=
+NEXT_ROOT=
+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.
+dnl NEXT_ROOT will be set and exported only if it's needed.
+AC_SUBST(MACOS_SDK_DIR)
+AC_SUBST(NEXT_ROOT)
+
+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
+
+  GCC_VERSION_MAJOR=`echo $GCC_VERSION_FULL | $PERL -pe 's/(^\d*).*/$1/;'`
+  if test "$GCC_VERSION_MAJOR" -lt "4" ; then
+    SDK_C_INCLUDE="-isystem ${MACOS_SDK_DIR}/usr/include/gcc/darwin/${GCC_VERSION} -isystem ${MACOS_SDK_DIR}/usr/include -F${MACOS_SDK_DIR}/System/Library/Frameworks"
+    if test -d "${MACOS_SDK_DIR}/Library/Frameworks" ; then
+      SDK_C_INCLUDE="$SDK_C_INCLUDE -F${MACOS_SDK_DIR}/Library/Frameworks"
+    fi
+    SDK_CXX_INCLUDE="-I${MACOS_SDK_DIR}/usr/include/gcc/darwin/${GCC_VERSION}/c++ -I${MACOS_SDK_DIR}/usr/include/gcc/darwin/${GCC_VERSION}/c++/ppc-darwin -I${MACOS_SDK_DIR}/usr/include/gcc/darwin/${GCC_VERSION}/c++/backward"
+
+    CFLAGS="$CFLAGS -nostdinc ${SDK_C_INCLUDE}"
+    CXXFLAGS="$CXXFLAGS -nostdinc -nostdinc++ ${SDK_CXX_INCLUDE} ${SDK_C_INCLUDE}"
+
+    dnl CPP/CXXCPP needs to be set for AC_CHECK_HEADER.
+    CPP="$CPP -nostdinc ${SDK_C_INCLUDE}"
+    CXXCPP="$CXXCPP -nostdinc -nostdinc++ ${SDK_CXX_INCLUDE} ${SDK_C_INCLUDE}"
+
+    changequote(,)
+    HOST_DARWIN_MAJOR=`echo "$build_os" | sed -E -e 's/^darwin([0-9]+).*$/\1/'`
+    changequote([,])
+    if test "$HOST_DARWIN_MAJOR" -lt 9 ; then
+      dnl The build host is running Tiger (10.4) or earlier.  ld support for
+      dnl -syslibroot is compiler-agnostic, but only available on Tiger and
+      dnl later.  On Tiger and earlier build hosts, just rely on NEXT_ROOT,
+      dnl because it's not been shown to cause any problems.
+
+      LIBS="-L${MACOS_SDK_DIR}/usr/lib/gcc/darwin -L${MACOS_SDK_DIR}/usr/lib/gcc/darwin/${GCC_VERSION_FULL} -L${MACOS_SDK_DIR}/usr/lib $LIBS"
+    else
+      dnl The build host is running Leopard (10.5) or later.  With NEXT_ROOT
+      dnl set, the linker will still not apply it when resolving dependencies.
+      dnl This causes problems on Leopard, where an SDK depends on frameworks
+      dnl which were present in earlier OS releases (and the associated SDK)
+      dnl but not in Leopard.  -syslibroot does not have this problem, but it
+      dnl results in harmless warnings when NEXT_ROOT is set.  NEXT_ROOT needs
+      dnl to remain set even on Leopard because the compiler uses it too.
+      LIBS="-Wl,-syslibroot,${MACOS_SDK_DIR} $LIBS"
+    fi
+    export NEXT_ROOT=$MACOS_SDK_DIR
+
+    if test -n "$CROSS_COMPILE" ; then
+      dnl NEXT_ROOT will be in the environment, but it shouldn't be set for
+      dnl the build host.  HOST_CXX is presently unused.
+      HOST_CC="NEXT_ROOT= $HOST_CC"
+      HOST_CXX="NEXT_ROOT= $HOST_CXX"
+    fi
+  else
+    dnl gcc >= 4.0 uses different paths than above, but knows how to find
+    dnl them itself.
+    CFLAGS="$CFLAGS -isysroot ${MACOS_SDK_DIR}"
+    CXXFLAGS="$CXXFLAGS -isysroot ${MACOS_SDK_DIR}"
+
+    dnl CPP/CXXCPP needs to be set for AC_CHECK_HEADER.
+    CPP="$CPP -isysroot ${MACOS_SDK_DIR}"
+    CXXCPP="$CXXCPP -isysroot ${MACOS_SDK_DIR}"
+
+    if test "$GCC_VERSION_FULL" = "4.0.0" ; then
+      dnl If gcc >= 4.0, we're guaranteed to be on Tiger, which has an ld
+      dnl that supports -syslibroot.  Don't set NEXT_ROOT because it will
+      dnl be ignored and cause warnings when -syslibroot is specified.
+      dnl gcc 4.0.1 will pass -syslibroot to ld automatically based on
+      dnl the -isysroot it receives, so this is only needed with 4.0.0.
+      LDFLAGS="$LDFLAGS -Wl,-syslibroot,${MACOS_SDK_DIR}"
+    fi
+  fi
+
+  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
+
+dnl Be sure the make we use is GNU make.
+dnl on win32, gmake.exe is the generally the wrong version
+case "$host_os" in
+cygwin*|mingw*|mks*|msvc*)
+    AC_PATH_PROGS(MAKE, $MAKE make gmake, :)
+    ;;
+*)
+    AC_PATH_PROGS(MAKE, $MAKE gmake make, :)
+    ;;
+esac
+_make_try=`$MAKE --version 2>/dev/null | grep GNU`
+if test ! "$_make_try"
+then
+	echo
+	echo "*** $MAKE is not GNU Make.  You will not be able to build Mozilla without GNU Make."
+	echo
+	exit 1
+fi
+dnl Now exit if version if < MAKE_VERSION
+rm -f dummy.mk
+echo 'all: ; @echo $(MAKE_VERSION)' > dummy.mk
+_make_vers=`$MAKE --no-print-directory -f dummy.mk all 2>/dev/null`
+rm -f dummy.mk
+_MAKE_MAJOR_VERSION=`echo $_make_vers | $AWK -F\. '{ print $1 }'`
+_MAKE_MINOR_VERSION=`echo $_make_vers | $AWK -F\. '{ print $2 }'`
+MAKE_MAJOR_VERSION=`echo $MAKE_VERSION | $AWK -F\. '{ print $1 }'`
+MAKE_MINOR_VERSION=`echo $MAKE_VERSION | $AWK -F\. '{ print $2 }'`
+if test "$_MAKE_MAJOR_VERSION" -lt "$MAKE_MAJOR_VERSION" || \
+   test "$_MAKE_MAJOR_VERSION" = "$MAKE_MAJOR_VERSION" -a \
+        "$_MAKE_MINOR_VERSION" -lt "$MAKE_MINOR_VERSION"; then
+   AC_MSG_ERROR([GNU Make $MAKE_VERSION or higher is required to build Mozilla.])
+fi
+AC_SUBST(MAKE)
+
+if test "$COMPILE_ENVIRONMENT"; then
+
+AC_PATH_XTRA
+
+dnl Check in X11 include directory too.
+if test "$no_x" != "yes"; then
+    CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+fi
+
+XCFLAGS="$X_CFLAGS"
+
+fi # COMPILE_ENVIRONMENT
+
+dnl ========================================================
+dnl set the defaults first
+dnl ========================================================
+AS_BIN=$AS
+AR_FLAGS='cr $@'
+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
+CYGWIN_WRAPPER=
+WIN_TOP_SRC=
+MOZ_USER_DIR=".mozilla"
+HOST_AR='$(AR)'
+HOST_AR_FLAGS='$(AR_FLAGS)'
+
+MOZ_JPEG_CFLAGS=
+MOZ_JPEG_LIBS='-L$(DIST)/lib -lmozjpeg'
+MOZ_ZLIB_CFLAGS=
+MOZ_ZLIB_LIBS='-L$(DIST)/lib -lmozz'
+MOZ_PNG_CFLAGS=
+MOZ_PNG_LIBS='-L$(DIST)/lib -lmozpng'
+
+MOZ_JS_LIBS='-L$(DIST)/bin -lmozjs'
+DYNAMIC_XPCOM_LIBS='-L$(DIST)/bin -lxpcom -lxpcom_core'
+MOZ_FIX_LINK_PATHS='-Wl,-rpath-link,$(DIST)/bin'
+XPCOM_FROZEN_LDOPTS='-L$(DIST)/bin $(MOZ_FIX_LINK_PATHS) -lxpcom'
+LIBXUL_LIBS='$(XPCOM_FROZEN_LDOPTS) -lxul'
+XPCOM_GLUE_LDOPTS='$(DIST)/lib/$(LIB_PREFIX)xpcomglue_s.$(LIB_SUFFIX) $(XPCOM_FROZEN_LDOPTS)'
+XPCOM_STANDALONE_GLUE_LDOPTS='$(DIST)/lib/$(LIB_PREFIX)xpcomglue.$(LIB_SUFFIX)'
+
+MOZ_COMPONENT_NSPR_LIBS='-L$(DIST)/bin $(NSPR_LIBS)'
+MOZ_XPCOM_OBSOLETE_LIBS='-L$(DIST)/lib -lxpcom_compat'
+
+USE_DEPENDENT_LIBS=1
+
+_PLATFORM_DEFAULT_TOOLKIT=gtk2
+MOZ_GFX_TOOLKIT='$(MOZ_WIDGET_TOOLKIT)'
+MOZ_WIDGET_TOOLKIT_LDFLAGS='-lwidget_$(MOZ_WIDGET_TOOLKIT)'
+MOZ_GFX_TOOLKIT_LDFLAGS='-lgfx_$(MOZ_GFX_TOOLKIT) $(MOZ_XLIBRGB_LDFLAGS)'
+WIDGET_DLL='\"libwidget_$(MOZ_WIDGET_TOOLKIT)$(DLL_SUFFIX)\"'
+GFXWIN_DLL='\"libgfx_$(MOZ_GFX_TOOLKIT)$(DLL_SUFFIX)\"'
+
+MOZ_ENABLE_POSTSCRIPT=1 
+
+if test -n "$CROSS_COMPILE"; then
+    OS_TARGET="${target_os}"
+    OS_ARCH=`echo $target_os | sed -e 's|/|_|g'`
+    OS_RELEASE=
+    OS_TEST="${target_cpu}"
+    case "${target_os}" in
+        linux*)       OS_ARCH=Linux ;;
+        solaris*)     OS_ARCH=SunOS OS_RELEASE=5 ;;
+        mingw*)       OS_ARCH=WINNT ;;
+        wince*)       OS_ARCH=WINCE ;;
+        darwin*)      OS_ARCH=Darwin OS_TARGET=Darwin ;;
+    esac
+else
+    OS_TARGET=`uname -s`
+    OS_ARCH=`uname -s | sed -e 's|/|_|g'`
+    OS_RELEASE=`uname -r`
+    OS_TEST=`uname -m`
+fi
+_COMPILER_PREFIX=
+
+HOST_OS_ARCH=`echo $host_os | sed -e 's|/|_|g'`
+
+#######################################################################
+# Master "Core Components" macros for getting the OS target           #
+#######################################################################
+
+#
+# Note: OS_TARGET should be specified on the command line for gmake.
+# When OS_TARGET=WIN95 is specified, then a Windows 95 target is built.
+# The difference between the Win95 target and the WinNT target is that
+# the WinNT target uses Windows NT specific features not available
+# in Windows 95. The Win95 target will run on Windows NT, but (supposedly)
+# at lesser performance (the Win95 target uses threads; the WinNT target
+# uses fibers).
+#
+# When OS_TARGET=WIN16 is specified, then a Windows 3.11 (16bit) target
+# is built. See: win16_3.11.mk for lots more about the Win16 target.
+#
+# If OS_TARGET is not specified, it defaults to $(OS_ARCH), i.e., no
+# cross-compilation.
+#
+
+#
+# The following hack allows one to build on a WIN95 machine (as if
+# s/he were cross-compiling on a WINNT host for a WIN95 target).
+# It also accomodates for MKS's uname.exe.  If you never intend
+# to do development on a WIN95 machine, you don't need this hack.
+#
+case "$OS_ARCH" in
+WIN95)
+    OS_ARCH=WINNT
+    OS_TARGET=WIN95
+    ;;
+Windows_95)
+    OS_ARCH=Windows_NT
+    OS_TARGET=WIN95
+    ;;
+Windows_98)
+    OS_ARCH=Windows_NT
+    OS_TARGET=WIN95
+    ;;
+CYGWIN_9*|CYGWIN_ME*)
+    OS_ARCH='CYGWIN_NT-4.0'
+    OS_TARGET=WIN95
+    ;;
+esac
+
+#
+# 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
+cygwin*|mingw*|mks*|msvc*)
+    HOST_OS_ARCH=WINNT
+    ;;
+linux*)
+    HOST_OS_ARCH=Linux
+    ;;
+solaris*)
+    HOST_OS_ARCH=SunOS
+    ;;
+BSD_386)
+    HOST_OS_ARCH=BSD
+    ;;
+dgux)
+    HOST_OS_ARCH=DGUX
+    ;;
+IRIX64)
+    HOST_OS_ARCH=IRIX
+    ;;
+UNIX_SV)
+    if "`cat /etc/bcheckrc | grep -c NCR 2>/dev/null`" != "0"; then
+        HOST_OS_ARCH=NCR
+    else
+        HOST_OS_ARCH=UNIXWARE
+    fi
+    ;;
+ncr)
+    HOST_OS_ARCH=NCR
+    ;;
+UNIX_SYSTEM_V)
+    HOST_OS_ARCH=NEC
+    ;;
+OSF1)
+    ;;
+*OpenVMS*)
+    HOST_OS_ARCH=OpenVMS
+    ;;
+OS_2)
+    HOST_OS_ARCH=OS2
+    ;;
+QNX)
+    ;;
+SCO_SV)
+    HOST_OS_ARCH=SCOOS
+    ;;
+SINIX-N | SINIX-Y | SINIX-Z |ReliantUNIX-M)
+    HOST_OS_ARCH=SINIX
+    ;;
+UnixWare)
+    HOST_OS_ARCH=UNIXWARE
+    ;;
+esac
+
+case "$OS_ARCH" in
+WINNT)
+    OS_TEST=`uname -p`
+    ;;
+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}"
+    ;;
+CYGWIN32_NT|CYGWIN_NT*|MINGW*_NT*)
+#
+# If uname -s returns "CYGWIN_NT-4.0", we assume that we are using
+# the uname.exe in the Cygwin tools.
+# Prior to the Beta 20 release, Cygwin was called GNU-Win32.
+# If uname -s returns "CYGWIN32/NT", we assume that we are using
+# the uname.exe in the GNU-Win32 tools.
+# 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}
+    ;;
+BSD_386)
+    OS_ARCH=BSD
+    ;;
+dgux)
+    OS_ARCH=DGUX
+    ;;
+IRIX64)
+    OS_ARCH=IRIX
+    ;;
+UNIX_SV)
+    if "`cat /etc/bcheckrc | grep -c NCR 2>/dev/null`" != "0"; then
+        OS_ARCH=NCR
+    else
+        OS_ARCH=UNIXWARE
+        OS_RELEASE=`uname -v`
+    fi
+    ;;
+ncr)
+    OS_ARCH=NCR
+    ;;
+UNIX_SYSTEM_V)
+    OS_ARCH=NEC
+    ;;
+OSF1)
+    case `uname -v` in
+    148)
+        OS_RELEASE=V3.2C
+        ;;
+    564)
+        OS_RELEASE=V4.0B
+        ;;
+    878)
+        OS_RELEASE=V4.0D
+        ;;
+    esac
+    ;;
+*OpenVMS*)
+    OS_ARCH=OpenVMS
+    OS_RELEASE=`uname -v`
+    OS_TEST=`uname -p`
+    ;;
+OS_2)
+    OS_ARCH=OS2
+    OS_TARGET=OS2
+    OS_RELEASE=`uname -v`
+    ;;
+QNX)
+    if test "$OS_TARGET" != "NTO"; then
+        OS_RELEASE=`uname -v | sed 's/^\([0-9]\)\([0-9]*\)$/\1.\2/'`
+    fi
+    OS_TEST=x86
+    ;;
+SCO_SV)
+    OS_ARCH=SCOOS
+    OS_RELEASE=5.0
+    ;;
+SINIX-N | SINIX-Y | SINIX-Z |ReliantUNIX-M)
+    OS_ARCH=SINIX
+    OS_TEST=`uname -p`
+    ;;
+UnixWare)
+    OS_ARCH=UNIXWARE
+    OS_RELEASE=`uname -v`
+    ;;
+WINCE)
+    OS_ARCH=WINCE
+    OS_TARGET=WINCE
+    ;;
+Darwin)
+    case "${target_cpu}" in
+    powerpc*)
+        OS_TEST=ppc
+        ;;
+    i*86*)
+        OS_TEST=i386
+        ;;
+    *)
+        if test -z "$CROSS_COMPILE" ; then
+            OS_TEST=`uname -p`
+        fi
+        ;;
+    esac
+    ;;
+esac
+
+if test "$OS_ARCH" = "NCR"; then
+    OS_RELEASE=`awk '{print $3}' /etc/.relid | sed 's/^\([0-9]\)\(.\)\(..\)\(.*\)$/\2.\3/'`
+fi
+
+# Only set CPU_ARCH if we recognize the value of OS_TEST
+
+case "$OS_TEST" in
+*86 | i86pc)
+    CPU_ARCH=x86
+    ;;
+
+powerpc* | ppc | rs6000)
+    CPU_ARCH=ppc
+    ;;
+
+Alpha | alpha | ALPHA)
+    CPU_ARCH=Alpha
+    ;;
+
+sun4u)
+    CPU_ARCH=sparc
+    ;;
+
+x86_64 | sparc | ppc | ia64)
+    CPU_ARCH="$OS_TEST"
+    ;;
+esac
+
+if test -z "$OS_TARGET"; then
+    OS_TARGET=$OS_ARCH
+fi
+if test "$OS_TARGET" = "WIN95"; then
+    OS_RELEASE="4.0"
+fi
+if test "$OS_TARGET" = "WIN16"; then
+    OS_RELEASE=
+fi
+OS_CONFIG="${OS_TARGET}${OS_RELEASE}"
+
+dnl ========================================================
+dnl GNU specific defaults
+dnl ========================================================
+if test "$GNU_CC"; then
+    MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -Wl,-h,$@ -o $@'
+    MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -Wl,-h,$@ -o $@'
+    DSO_LDOPTS='-shared'
+    if test "$GCC_USE_GNU_LD"; then
+        # Don't allow undefined symbols in libraries
+        DSO_LDOPTS="$DSO_LDOPTS -Wl,-z,defs"
+    fi
+    DSO_CFLAGS=''
+    DSO_PIC_CFLAGS='-fPIC'
+    _MOZ_RTTI_FLAGS_ON=${_COMPILER_PREFIX}-frtti
+    _MOZ_RTTI_FLAGS_OFF=${_COMPILER_PREFIX}-fno-rtti
+    _MOZ_EXCEPTIONS_FLAGS_ON='-fhandle-exceptions'
+    _MOZ_EXCEPTIONS_FLAGS_OFF='-fno-handle-exceptions'
+
+    # Turn on GNU specific features
+    # -Wall - turn on all warnings
+    # -pedantic - make compiler warn about non-ANSI stuff, and
+    #             be a little bit stricter
+    # Warnings slamm took out for now (these were giving more noise than help):
+    # -Wbad-function-cast - warns when casting a function to a new return type
+    # -Wconversion - complained when char's or short's were used a function args
+    # -Wshadow - removed because it generates more noise than help --pete
+    _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Wall -W -Wno-unused -Wpointer-arith -Wcast-align"
+
+    dnl Turn pedantic on but disable the warnings for long long
+    _PEDANTIC=1
+    _IGNORE_LONG_LONG_WARNINGS=1
+
+    _DEFINES_CFLAGS='-include $(DEPTH)/mozilla-config.h -DMOZILLA_CLIENT'
+    _USE_CPP_INCLUDE_FLAG=1
+else
+    MKSHLIB='$(LD) $(DSO_LDOPTS) -h $@ -o $@'
+    MKCSHLIB='$(LD) $(DSO_LDOPTS) -h $@ -o $@'
+
+    DSO_LDOPTS='-shared'
+    if test "$GNU_LD"; then
+        # Don't allow undefined symbols in libraries
+        DSO_LDOPTS="$DSO_LDOPTS -z defs"
+    fi
+
+    DSO_CFLAGS=''
+    DSO_PIC_CFLAGS='-KPIC'
+    _DEFINES_CFLAGS='$(ACDEFINES) -D_MOZILLA_CONFIG_H_ -DMOZILLA_CLIENT'
+fi
+
+if test "$GNU_CXX"; then
+    # Turn on GNU specific features
+    _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Wall -Wconversion -Wpointer-arith -Wcast-align -Woverloaded-virtual -Wsynth -Wno-ctor-dtor-privacy -Wno-non-virtual-dtor"
+
+    _DEFINES_CXXFLAGS='-DMOZILLA_CLIENT -include $(DEPTH)/mozilla-config.h'
+    _USE_CPP_INCLUDE_FLAG=1
+else
+    _DEFINES_CXXFLAGS='-DMOZILLA_CLIENT -D_MOZILLA_CONFIG_H_ $(ACDEFINES)'
+fi
+
+dnl gcc can come with its own linker so it is better to use the pass-thru calls
+dnl MKSHLIB_FORCE_ALL is used to force the linker to include all object
+dnl files present in an archive. MKSHLIB_UNFORCE_ALL reverts the linker to
+dnl normal behavior.
+dnl ========================================================
+MKSHLIB_FORCE_ALL=
+MKSHLIB_UNFORCE_ALL=
+
+if test "$COMPILE_ENVIRONMENT"; then
+if test "$GNU_CC"; then
+  AC_MSG_CHECKING(whether ld has archive extraction flags)
+  AC_CACHE_VAL(ac_cv_mkshlib_force_and_unforce,
+   [_SAVE_LDFLAGS=$LDFLAGS; _SAVE_LIBS=$LIBS
+    ac_cv_mkshlib_force_and_unforce="no"
+    exec 3<&0 <<LOOP_INPUT
+	force="-Wl,--whole-archive";   unforce="-Wl,--no-whole-archive"
+	force="-Wl,-z -Wl,allextract"; unforce="-Wl,-z -Wl,defaultextract"
+	force="-Wl,-all";              unforce="-Wl,-none"
+LOOP_INPUT
+    while read line
+    do
+      eval $line
+      LDFLAGS=$force
+      LIBS=$unforce
+      AC_TRY_LINK(,, ac_cv_mkshlib_force_and_unforce=$line; break)
+    done
+    exec 0<&3 3<&-
+    LDFLAGS=$_SAVE_LDFLAGS; LIBS=$_SAVE_LIBS
+   ])
+  if test "$ac_cv_mkshlib_force_and_unforce" = "no"; then
+    AC_MSG_RESULT(no)
+  else
+    AC_MSG_RESULT(yes)
+    eval $ac_cv_mkshlib_force_and_unforce
+    MKSHLIB_FORCE_ALL=$force
+    MKSHLIB_UNFORCE_ALL=$unforce
+  fi
+fi # GNU_CC
+fi # COMPILE_ENVIRONMENT
+
+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 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(long) == 8)],
+               result="yes", result="no")
+AC_MSG_RESULT("$result")
+if test "$result" = "yes"; then
+    AC_DEFINE(HAVE_64BIT_OS)
+    HAVE_64BIT_OS=1
+fi
+AC_SUBST(HAVE_64BIT_OS)
+
+if test "$HAVE_64BIT_OS"; then
+       case "$target_os" in
+       solaris*) TARGET_NSPR_MDCPUCFG='\"md/_solaris64.cfg\"' ;;
+       esac
+fi
+AC_LANG_RESTORE
+fi # COMPILE_ENVIRONMENT
+
+dnl ========================================================
+dnl System overrides of the defaults for host
+dnl ========================================================
+case "$host" in
+*-beos*)
+    HOST_CFLAGS="$HOST_CFLAGS -DXP_BEOS -DBeOS -DBEOS -D_POSIX_SOURCE -DNO_X11"
+    HOST_NSPR_MDCPUCFG='\"md/_beos.cfg\"'
+    HOST_OPTIMIZE_FLAGS="${HOST_OPTIMIZE_FLAGS=-O3}"
+    ;;
+
+*cygwin*|*mingw*|*mks*|*msvc*|*wince)
+    if test -n "$_WIN32_MSVC"; then
+        HOST_AR=lib
+        HOST_AR_FLAGS='-NOLOGO -OUT:"$@"'
+        HOST_CFLAGS="$HOST_CFLAGS -TC -nologo -Fd\$(HOST_PDBFILE)"
+        HOST_RANLIB='echo ranlib'
+    else
+        HOST_CFLAGS="$HOST_CFLAGS -mno-cygwin"
+    fi
+    HOST_CFLAGS="$HOST_CFLAGS -DXP_WIN32 -DXP_WIN -DWIN32 -D_WIN32 -DNO_X11"
+    HOST_NSPR_MDCPUCFG='\"md/_winnt.cfg\"'
+    HOST_OPTIMIZE_FLAGS="${HOST_OPTIMIZE_FLAGS=-O2}"
+    HOST_BIN_SUFFIX=.exe
+    case "$host" in
+    *mingw*)
+    dnl MinGW/MSYS does not need CYGWIN_WRAPPER
+        ;;
+    *)
+        CYGWIN_WRAPPER="${srcdir}/build/cygwin-wrapper"
+        if test "`echo ${srcdir} | grep -c ^/ 2>/dev/null`" = 0; then
+            _pwd=`pwd`
+            CYGWIN_WRAPPER="${_pwd}/${srcdir}/build/cygwin-wrapper"
+        fi
+        if test "`${PERL} -v | grep -c cygwin  2>/dev/null`" = 0; then
+            AS_PERL=1
+            PERL="${CYGWIN_WRAPPER} $PERL"
+        fi
+        ;;
+    esac
+    ;;
+
+*-darwin*)
+    HOST_CFLAGS="$HOST_CFLAGS -DXP_UNIX -DXP_MACOSX -DNO_X11"
+    HOST_NSPR_MDCPUCFG='\"md/_darwin.cfg\"'
+    HOST_OPTIMIZE_FLAGS="${HOST_OPTIMIZE_FLAGS=-O3}"
+    MOZ_FIX_LINK_PATHS='-Wl,-executable_path,$(DIST)/bin'
+    LIBXUL_LIBS='$(XPCOM_FROZEN_LDOPTS) $(DIST)/bin/XUL -lobjc'
+    ;;
+
+*-linux*)
+    HOST_CFLAGS="$HOST_CFLAGS -DXP_UNIX"
+    HOST_NSPR_MDCPUCFG='\"md/_linux.cfg\"'
+    HOST_OPTIMIZE_FLAGS="${HOST_OPTIMIZE_FLAGS=-O3}"
+    ;;
+
+*os2*)
+    HOST_CFLAGS="$HOST_CFLAGS -DXP_OS2 -DNO_X11 -Zomf"
+    HOST_NSPR_MDCPUCFG='\"md/_os2.cfg\"'
+    HOST_OPTIMIZE_FLAGS="${HOST_OPTIMIZE_FLAGS=-O2}"
+    HOST_BIN_SUFFIX=.exe
+    MOZ_FIX_LINK_PATHS=
+    ;;
+
+*-osf*)
+    HOST_CFLAGS="$HOST_CFLAGS -DXP_UNIX"
+    HOST_NSPR_MDCPUCFG='\"md/_osf1.cfg\"'
+    HOST_OPTIMIZE_FLAGS="${HOST_OPTIMIZE_FLAGS=-O2}"
+    ;;
+
+*)
+    HOST_CFLAGS="$HOST_CFLAGS -DXP_UNIX"
+    HOST_OPTIMIZE_FLAGS="${HOST_OPTIMIZE_FLAGS=-O2}"
+    ;;
+esac
+
+dnl Get mozilla version from central milestone file
+MOZILLA_VERSION=`$PERL $srcdir/config/milestone.pl -topsrcdir $srcdir`
+
+dnl Get version of various core apps from the version files.
+FIREFOX_VERSION=`cat $topsrcdir/browser/config/version.txt`
+THUNDERBIRD_VERSION=`cat $topsrcdir/mail/config/version.txt`
+SUNBIRD_VERSION=`cat $topsrcdir/calendar/sunbird/config/version.txt`
+SEAMONKEY_VERSION=`cat $topsrcdir/xpfe/bootstrap/version.txt`
+
+AC_DEFINE_UNQUOTED(MOZILLA_VERSION,"$MOZILLA_VERSION")
+AC_DEFINE_UNQUOTED(MOZILLA_VERSION_U,$MOZILLA_VERSION)
+
+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_OS"; 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"
+        AC_MSG_WARN([Clearing MOZ_FIX_LINK_PATHS till we can fix bug 332075.])
+        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 VisualAge C++ compiler version >= 5.0.2.0])
+            AC_TRY_COMPILE([],
+                [#if (__IBMCPP__ < 502)
+                 #error "Bad compiler"
+                 #endif],
+                _BAD_COMPILER=,_BAD_COMPILER=1)
+            if test -n "$_BAD_COMPILER"; then
+                AC_MSG_RESULT([no])    
+                AC_MSG_ERROR([VisualAge C++ version 5.0.2.0 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
+        AC_CHECK_HEADERS(sys/inttypes.h)
+    fi
+    AC_DEFINE(NSCAP_DISABLE_DEBUG_PTR_TYPES)
+    ;;
+
+*-beos*)
+    no_x=yes
+    MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_LDOPTS) -Wl,-h,$@ -o $@'
+    _PLATFORM_DEFAULT_TOOLKIT="beos"
+    DSO_LDOPTS='-nostart'
+    TK_LIBS='-lbe -lroot'
+    LIBS="$LIBS -lbe"
+    if test "$COMPILE_ENVIRONMENT"; then
+        AC_CHECK_LIB(bind,main,LIBS="$LIBS -lbind")
+        AC_CHECK_LIB(zeta,main,LIBS="$LIBS -lzeta")
+    fi
+    _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Wno-multichar"
+    _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Wno-multichar"
+    _MOZ_USE_RTTI=1
+    USE_DEPENDENT_LIBS=
+    MOZ_USER_DIR="Mozilla"
+    ;;
+
+*-bsdi*)
+    dnl -pedantic doesn't play well with BSDI's _very_ modified gcc (shlicc2)
+    _PEDANTIC=
+    _IGNORE_LONG_LONG_WARNINGS=
+    case $OS_RELEASE in
+	4.*|5.*)
+            STRIP="$STRIP -d"
+            ;;
+	*)
+	    DSO_CFLAGS=''
+	    DSO_LDOPTS='-r'
+	    _WARNINGS_CFLAGS="-Wall"
+	    _WARNINGS_CXXFLAGS="-Wall"
+	    # The test above doesn't work properly, at least on 3.1.
+	    MKSHLIB_FORCE_ALL=''
+	    MKSHLIB_UNFORCE_ALL=''
+	;;
+    esac
+    ;;
+
+*-darwin*) 
+    AC_DEFINE(STDC_HEADERS)
+    MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -o $@'
+    MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -o $@'
+
+    _PEDANTIC=
+    CFLAGS="$CFLAGS -fpascal-strings -no-cpp-precomp -fno-common"
+    CXXFLAGS="$CXXFLAGS -fpascal-strings -no-cpp-precomp -fno-common"
+    DLL_SUFFIX=".dylib"
+    DSO_LDOPTS=''
+    STRIP="$STRIP -x -S"
+    _PLATFORM_DEFAULT_TOOLKIT='mac'
+    MOZ_ENABLE_POSTSCRIPT=
+    TARGET_NSPR_MDCPUCFG='\"md/_darwin.cfg\"'
+    # set MACOSX to generate lib/mac/MoreFiles/Makefile
+    MACOSX=1
+
+    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
+    ;;
+
+*-freebsd*)
+    if test `test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` != "elf"; then
+	DLL_SUFFIX=".so.1.0"
+	DSO_LDOPTS="-shared"
+    fi
+    if test ! "$GNU_CC"; then
+	DSO_LDOPTS="-Bshareable $DSO_LDOPTS"
+    fi
+# Can't have force w/o an unforce.
+#    # Hack for FreeBSD 2.2
+#    if test -z "$MKSHLIB_FORCE_ALL"; then
+#	MKSHLIB_FORCE_ALL='-Wl,-Bforcearchive'
+#	MKSHLIB_UNFORCE_ALL=''
+#    fi
+    ;; 
+
+*-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$(DIST)/bin -o $@'
+    	MKCSHLIB='$(LD) -b +s -L$(DIST)/bin -o $@'
+        CXXFLAGS="$CXXFLAGS -Wc,-ansi_for_scope,on"
+    else
+        DSO_LDOPTS='-b -E +s'
+        MKSHLIB='$(LD) $(DSO_LDOPTS) -L$(DIST)/bin -L$(DIST)/lib -o $@'
+        MKCSHLIB='$(LD) $(DSO_LDOPTS) -L$(DIST)/bin -L$(DIST)/lib -o $@'
+    fi
+    MOZ_POST_PROGRAM_COMMAND='chatr +s enable'
+    AC_DEFINE(NSCAP_DISABLE_DEBUG_PTR_TYPES)
+    ;;
+
+*-irix5*)
+    AC_DEFINE(IRIX)
+    DSO_LDOPTS='-elf -shared'
+
+    if test "$GNU_CC"; then
+       MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -o $@'
+       MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -o $@'
+       MKSHLIB_FORCE_ALL='-Wl,-all'
+       MKSHLIB_UNFORCE_ALL='-Wl,-none'
+       CXXFLAGS="$CXXFLAGS -D_LANGUAGE_C_PLUS_PLUS"
+    else
+       MKSHLIB='$(LD) $(DSO_LDOPTS) -o $@'
+       MKCSHLIB='$(LD) $(DSO_LDOPTS) -o $@'
+       MKSHLIB_FORCE_ALL='-all'
+       MKSHLIB_UNFORCE_ALL='-none'
+    fi
+    ;;
+
+*-irix6*)
+    AC_DEFINE(IRIX)
+    dnl the irix specific xptcinvoke code is written against the n32 ABI so we *must* 
+    dnl compile and link using -n32
+    USE_N32=1
+    TARGET_COMPILER_ABI=n32
+    DSO_LDOPTS='-elf -shared'
+    MKSHLIB='$(CCC) $(CXXFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -o $@'
+    MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -o $@'
+    _MOZ_EXCEPTIONS_FLAGS_OFF="-LANG:exceptions=OFF"
+    _MOZ_EXCEPTIONS_FLAGS_ON="-LANG:exceptions=ON"
+    if test "$GNU_CC"; then
+       MKSHLIB_FORCE_ALL='-Wl,-all'
+       MKSHLIB_UNFORCE_ALL='-Wl,-none'
+       _WARNINGS_CFLAGS="-Wall"
+       _WARNINGS_CXXFLAGS="-Wall"
+       CXXFLAGS="$CXXFLAGS -D_LANGUAGE_C_PLUS_PLUS"
+    else
+       MKSHLIB_FORCE_ALL='-all'
+       MKSHLIB_UNFORCE_ALL='-none'
+	   AR_LIST="$AR t"
+	   AR_EXTRACT="$AR x"
+	   AR_DELETE="$AR d"
+	   AR='$(CXX) -ar'
+	   AR_FLAGS='-o $@'
+       CFLAGS="$CFLAGS -woff 3262 -G 4"
+       CXXFLAGS="$CXXFLAGS -woff 3262 -G 4"
+       if test -n "$USE_N32"; then
+	   ASFLAGS="$ASFLAGS -n32"
+	   CFLAGS="$CFLAGS -n32"
+	   CXXFLAGS="$CXXFLAGS -n32"
+	   LDFLAGS="$LDFLAGS -n32"
+       fi
+       AC_DEFINE(NSCAP_DISABLE_DEBUG_PTR_TYPES)
+    fi
+    if test -z "$GNU_CXX"; then
+      MIPSPRO_CXX=1
+    fi
+    ;;
+
+*-*linux*)
+    TARGET_NSPR_MDCPUCFG='\"md/_linux.cfg\"'
+    MOZ_DEBUG_FLAGS="-g -fno-inline"  # most people on linux use gcc/gdb,
+                                      # and that combo is not yet good at
+                                      # debugging inlined functions (even
+                                      # when using DWARF2 as the debugging
+                                      # format)    
+
+    case "${target_cpu}" in
+    alpha*)
+    	CFLAGS="$CFLAGS -mieee"
+    	CXXFLAGS="$CXXFLAGS -mieee"
+    ;;
+    i*86)
+    	USE_ELF_DYNSTR_GC=1
+        MOZ_ENABLE_OLD_ABI_COMPAT_WRAPPERS=1
+    ;;
+    mips*)
+        CFLAGS="$CFLAGS -Wa,-xgot"
+        CXXFLAGS="$CXXFLAGS -Wa,-xgot"
+    ;;
+    esac
+    ;;
+
+*-wince*)
+
+    MOZ_TOOLS_DIR=`echo $MOZ_TOOLS`
+    AR_LIST="$AR -list"
+    AR_EXTRACT="$AR -extract"
+    AR_DELETE="$AR d"
+    AR_FLAGS='-OUT:"$@"'
+
+    DSO_CFLAGS=
+    DSO_PIC_CFLAGS=
+    DLL_SUFFIX=.dll
+    BIN_SUFFIX='.exe'
+    RC=rc.exe
+    # certain versions of cygwin's makedepend barf on the 
+    # #include <string> vs -I./dist/include/string issue so don't use it
+    SYSTEM_MAKEDEPEND=
+
+    HOST_CC=cl
+    HOST_CXX=cl
+    HOST_LD=link
+    HOST_AR='lib -OUT:$@'
+    HOST_RANLIB='echo ranlib'
+    HOST_CFLAGS="$HOST_CFLAGS -D_X86_"
+        
+	MOZ_OPTIMIZE_FLAGS='-O1'
+    AR_FLAGS='-NOLOGO -OUT:"$@"'
+    ASM_SUFFIX=asm
+    CFLAGS="$CFLAGS -W3 -Gy -Fd\$(PDBFILE)"
+    CXXFLAGS="$CXXFLAGS -W3 -Gy -Fd\$(PDBFILE)"
+    DLL_PREFIX=
+    DOXYGEN=:
+    DSO_LDOPTS=-SUBSYSTEM:WINDOWSCE
+    DYNAMIC_XPCOM_LIBS='$(DIST)/lib/xpcom.lib $(DIST)/lib/xpcom_core.lib'
+    GARBAGE=
+    IMPORT_LIB_SUFFIX=lib
+    LIBS="$LIBS"
+    LIBXUL_LIBS='$(DIST)/lib/xpcom.lib $(DIST)/lib/xul.lib'
+    LIB_PREFIX=
+    LIB_SUFFIX=lib 
+    MKCSHLIB='$(LD) -NOLOGO -DLL -OUT:$@ $(DSO_LDOPTS)'
+    MKSHLIB='$(LD) -NOLOGO -DLL -OUT:$@ $(DSO_LDOPTS)'
+    MKSHLIB_FORCE_ALL=
+    MKSHLIB_UNFORCE_ALL=
+    MOZ_COMPONENT_NSPR_LIBS='$(NSPR_LIBS)'
+    MOZ_COMPONENT_NSPR_LIBS='$(NSPR_LIBS)'
+    MOZ_DEBUG_FLAGS='-Zi'
+    MOZ_DEBUG_LDFLAGS='-DEBUG -DEBUGTYPE:CV'
+    MOZ_FIX_LINK_PATHS=
+    MOZ_JPEG_LIBS='$(DIST)/lib/mozjpeg.lib'
+    MOZ_JS_LIBS='$(DIST)/lib/js$(MOZ_BITS)$(VERSION_NUMBER).lib'
+    MOZ_OPTIMIZE_FLAGS='-O1'
+    MOZ_PNG_LIBS='$(DIST)/lib/mozpng.lib'
+    MOZ_XPCOM_OBSOLETE_LIBS='$(DIST)/lib/xpcom_compat.lib'
+    MOZ_ZLIB_LIBS='$(DIST)/lib/mozz.lib'
+    OBJ_SUFFIX=obj
+    RANLIB='echo not_ranlib'
+    STRIP='echo not_strip'
+    TARGET_NSPR_MDCPUCFG='\"md/_wince.cfg\"'
+    UNZIP=unzip
+    XARGS=xargs
+    XPCOM_FROZEN_LDOPTS='$(DIST)/lib/xpcom.lib'
+    ZIP=zip
+    LIBIDL_CFLAGS="-I$MOZ_TOOLS_DIR/include ${GLIB_CFLAGS}"
+    LIBIDL_LIBS="$MOZ_TOOLS_DIR/lib/libidl-0.6_s.lib $MOZ_TOOLS_DIR/lib/glib-1.2_s.lib"
+    STATIC_LIBIDL=1
+
+    AC_DEFINE(HAVE_SNPRINTF)
+    AC_DEFINE(_WINDOWS)
+    AC_DEFINE(_WIN32)
+    AC_DEFINE(WIN32)
+    AC_DEFINE(XP_WIN)
+    AC_DEFINE(XP_WIN32)
+    AC_DEFINE(HW_THREADS)
+    AC_DEFINE_UNQUOTED(WINVER,0x400)
+    AC_DEFINE(STDC_HEADERS)
+    AC_DEFINE(NEW_H, <new>)
+    AC_DEFINE(WIN32_LEAN_AND_MEAN)
+
+    TARGET_MD_ARCH=win32
+    _PLATFORM_DEFAULT_TOOLKIT='windows'
+    BIN_SUFFIX='.exe'
+    USE_SHORT_LIBNAME=1
+    MOZ_ENABLE_COREXFONTS=
+    MOZ_ENABLE_POSTSCRIPT=
+    MOZ_USER_DIR="Mozilla"
+;;
+
+
+*-mingw*|*-cygwin*|*-msvc*|*-mks*)
+    DSO_CFLAGS=
+    DSO_PIC_CFLAGS=
+    DLL_SUFFIX=.dll
+    RC=rc.exe
+    # certain versions of cygwin's makedepend barf on the 
+    # #include <string> vs -I./dist/include/string issue so don't use it
+    SYSTEM_MAKEDEPEND=
+    if test -n "$GNU_CC"; then
+        CC="$CC -mno-cygwin"
+        CXX="$CXX -mno-cygwin"
+        CPP="$CPP -mno-cygwin"
+        CFLAGS="$CFLAGS -mms-bitfields"
+        CXXFLAGS="$CXXFLAGS -mms-bitfields"
+        DSO_LDOPTS='-shared'
+        MKSHLIB='$(CXX) $(DSO_LDOPTS) -o $@'
+        MKCSHLIB='$(CC) $(DSO_LDOPTS) -o $@'
+        RC='$(WINDRES)'
+        # Use temp file for windres (bug 213281)
+        RCFLAGS='-O coff --use-temp-file'
+        MOZ_JPEG_LIBS='-L$(DIST)/lib -ljpeg$(MOZ_BITS)$(VERSION_NUMBER)'
+        MOZ_ZLIB_LIBS='-L$(DIST)/lib -lmozz'
+        MOZ_PNG_LIBS='-L$(DIST)/lib -lpng'
+        MOZ_JS_LIBS='-L$(DIST)/lib -ljs$(MOZ_BITS)$(VERSION_NUMBER)'
+        MOZ_FIX_LINK_PATHS=
+        DYNAMIC_XPCOM_LIBS='-L$(DIST)/lib -lxpcom -lxpcom_core'
+        XPCOM_FROZEN_LDOPTS='-L$(DIST)/lib -lxpcom'
+        DLL_PREFIX=
+        IMPORT_LIB_SUFFIX=dll.a
+    else
+        TARGET_COMPILER_ABI=msvc
+        HOST_CC='$(CC)'
+        HOST_CXX='$(CXX)'
+        HOST_LD='$(LD)'
+        AR='lib -NOLOGO -OUT:"$@"'
+        AR_FLAGS=
+        RANLIB='echo not_ranlib'
+        STRIP='echo not_strip'
+        XARGS=xargs
+        ZIP=zip
+        UNZIP=unzip
+        DOXYGEN=:
+        GARBAGE='$(OBJDIR)/vc20.pdb $(OBJDIR)/vc40.pdb'
+        OBJ_SUFFIX=obj
+        LIB_SUFFIX=lib
+        DLL_PREFIX=
+        LIB_PREFIX=
+        IMPORT_LIB_SUFFIX=lib
+        MKSHLIB='$(LD) -NOLOGO -DLL -OUT:$@ -PDB:$(PDBFILE) $(DSO_LDOPTS)'
+        MKCSHLIB='$(LD) -NOLOGO -DLL -OUT:$@ -PDB:$(PDBFILE) $(DSO_LDOPTS)'
+        MKSHLIB_FORCE_ALL=
+        MKSHLIB_UNFORCE_ALL=
+        DSO_LDOPTS=-SUBSYSTEM:WINDOWS
+        CFLAGS="$CFLAGS -W3 -Gy -Fd\$(PDBFILE)"
+        CXXFLAGS="$CXXFLAGS -W3 -Gy -Fd\$(PDBFILE)"
+        LIBS="$LIBS kernel32.lib user32.lib gdi32.lib winmm.lib wsock32.lib advapi32.lib"
+        MOZ_DEBUG_FLAGS='-Zi'
+        MOZ_DEBUG_LDFLAGS='-DEBUG -DEBUGTYPE:CV'
+    	MOZ_OPTIMIZE_FLAGS='-O1'
+        MOZ_JPEG_LIBS='$(DIST)/lib/jpeg$(MOZ_BITS)$(VERSION_NUMBER).lib'
+        MOZ_ZLIB_LIBS='$(DIST)/lib/mozz.lib'
+        MOZ_PNG_LIBS='$(DIST)/lib/png.lib'
+        MOZ_JS_LIBS='$(DIST)/lib/js$(MOZ_BITS)$(VERSION_NUMBER).lib'
+        MOZ_FIX_LINK_PATHS=
+        DYNAMIC_XPCOM_LIBS='$(DIST)/lib/xpcom.lib $(DIST)/lib/xpcom_core.lib'
+        XPCOM_FROZEN_LDOPTS='$(DIST)/lib/xpcom.lib'
+        LIBXUL_LIBS='$(DIST)/lib/xpcom.lib $(DIST)/lib/xul.lib'
+        MOZ_COMPONENT_NSPR_LIBS='$(NSPR_LIBS)'
+        MOZ_XPCOM_OBSOLETE_LIBS='$(DIST)/lib/xpcom_compat.lib'
+    fi
+    AC_DEFINE(HAVE_SNPRINTF)
+    AC_DEFINE(_WINDOWS)
+    AC_DEFINE(_WIN32)
+    AC_DEFINE(WIN32)
+    AC_DEFINE(XP_WIN)
+    AC_DEFINE(XP_WIN32)
+    AC_DEFINE(HW_THREADS)
+    AC_DEFINE_UNQUOTED(WINVER,0x400)
+    AC_DEFINE_UNQUOTED(_WIN32_WINNT,0x400)
+    AC_DEFINE(STDC_HEADERS)
+    AC_DEFINE(NEW_H, <new>)
+    AC_DEFINE(WIN32_LEAN_AND_MEAN)
+    TARGET_MD_ARCH=win32
+    _PLATFORM_DEFAULT_TOOLKIT='windows'
+    BIN_SUFFIX='.exe'
+    USE_SHORT_LIBNAME=1
+    MOZ_ENABLE_POSTSCRIPT=
+    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)
+
+    dnl MinGW/MSYS doesn't provide or need cygpath
+    case "$host" in
+    *-mingw*)
+	CYGPATH_W=echo
+	CYGPATH_S=cat
+	MOZ_BUILD_ROOT=`cd $MOZ_BUILD_ROOT && pwd -W`
+	;;
+    *-cygwin*|*-msvc*|*-mks*)
+	CYGPATH_W="cygpath -a -w"
+	CYGPATH_S="sed -e s|\\\\|/|g"
+	MOZ_BUILD_ROOT=`$CYGPATH_W $MOZ_BUILD_ROOT | $CYGPATH_S`
+	;;
+    esac
+    case "$host" in
+    *-mingw*|*-cygwin*|*-msvc*|*-mks*)
+
+    if test -z "$MOZ_TOOLS"; then
+        AC_MSG_ERROR([MOZ_TOOLS is not set])
+    fi
+
+    MOZ_TOOLS_DIR=`cd $MOZ_TOOLS && pwd`
+    if test "$?" != "0" || test -z "$MOZ_TOOLS_DIR"; then
+        AC_MSG_ERROR([cd \$MOZ_TOOLS failed. MOZ_TOOLS ==? $MOZ_TOOLS])
+    fi
+    if test `echo ${PATH}: | grep -ic "$MOZ_TOOLS_DIR/bin:"` = 0; then
+        AC_MSG_ERROR([\$MOZ_TOOLS\\bin must be in your path.])
+    fi
+    MOZ_TOOLS_DIR=`$CYGPATH_W $MOZ_TOOLS_DIR | $CYGPATH_S`
+
+    if test -n "$GLIB_PREFIX"; then
+        _GLIB_PREFIX_DIR=`cd $GLIB_PREFIX && pwd`
+        if test "$?" = "0"; then
+            if test `echo ${PATH}: | grep -ic "$_GLIB_PREFIX_DIR/bin:"` = 0; then
+                AC_MSG_ERROR([GLIB_PREFIX must be in your \$PATH.])
+            fi
+            _GLIB_PREFIX_DIR=`$CYGPATH_W $_GLIB_PREFIX_DIR | $CYGPATH_S`
+        else
+            AC_MSG_ERROR([GLIB_PREFIX is set but "${GLIB_PREFIX}" is not a directory.])
+        fi
+    else
+        _GLIB_PREFIX_DIR=$MOZ_TOOLS_DIR
+    fi
+    if test ! -f "${_GLIB_PREFIX_DIR}/include/glib.h"; then
+        AC_MSG_ERROR([Cannot find $_GLIB_PREFIX_DIR/include/glib.h .])
+    fi
+    GLIB_CFLAGS="-I${_GLIB_PREFIX_DIR}/include"
+    if test -f "${_GLIB_PREFIX_DIR}/lib/glib-1.2_s.lib"; then
+        GLIB_LIBS="${_GLIB_PREFIX_DIR}/lib/glib-1.2_s.lib"
+    elif test -f "${_GLIB_PREFIX_DIR}/lib/glib-1.2.lib"; then
+        GLIB_LIBS="${_GLIB_PREFIX_DIR}/lib/glib-1.2.lib"
+    else
+        AC_MSG_ERROR([Cannot find $_GLIB_PREFIX_DIR/lib/glib-1.2.lib or $_GLIB_PREFIX_DIR/lib/glib-1.2_s.lib])
+    fi
+
+    if test -n "$LIBIDL_PREFIX"; then
+        _LIBIDL_PREFIX_DIR=`cd $LIBIDL_PREFIX && pwd`
+        if test "$?" = "0"; then
+            if test `echo ${PATH}: | grep -ic "$_LIBIDL_PREFIX_DIR/bin:"` = 0; then
+                AC_MSG_ERROR([LIBIDL_PREFIX must be in your \$PATH.])
+            fi
+            _LIBIDL_PREFIX_DIR=`$CYGPATH_W $_LIBIDL_PREFIX_DIR | $CYGPATH_S`
+        else
+            AC_MSG_ERROR([LIBIDL_PREFIX is set but "${LIBIDL_PREFIX}" is not a directory.])
+        fi
+    else
+        _LIBIDL_PREFIX_DIR=$MOZ_TOOLS_DIR
+    fi        
+    if test ! -f "${_LIBIDL_PREFIX_DIR}/include/libIDL/IDL.h"; then
+        AC_MSG_ERROR([Cannot find $_LIBIDL_PREFIX_DIR/include/libIDL/IDL.h .])
+    fi
+    LIBIDL_CFLAGS="-I${_LIBIDL_PREFIX_DIR}/include ${GLIB_CFLAGS}"
+    if test -f "${_LIBIDL_PREFIX_DIR}/lib/libidl-0.6_s.lib"; then
+        LIBIDL_LIBS="${_LIBIDL_PREFIX_DIR}/lib/libidl-0.6_s.lib"
+        STATIC_LIBIDL=1
+    elif test -f "${_LIBIDL_PREFIX_DIR}/lib/libidl-0.6.lib"; then
+        LIBIDL_LIBS="${_LIBIDL_PREFIX_DIR}/lib/libidl-0.6.lib"
+    else
+        AC_MSG_ERROR([Cannot find $_LIBIDL_PREFIX_DIR/lib/libidl-0.6.lib or $_LIBIDL_PREFIX_DIR/lib/libidl-0.6_s.lib])
+    fi
+    LIBIDL_LIBS="${LIBIDL_LIBS} ${GLIB_LIBS}"
+    ;;
+
+    *) # else cross-compiling
+        if test -n "$GLIB_PREFIX"; then
+            GLIB_CFLAGS="-I${GLIB_PREFIX}/include"
+            if test -f "${GLIB_PREFIX}/lib/glib-1.2_s.lib"; then
+                GLIB_LIBS="${GLIB_PREFIX}/lib/glib-1.2_s.lib"
+            elif test -f "${GLIB_PREFIX}/lib/glib-1.2.lib"; then
+                GLIB_LIBS="${GLIB_PREFIX}/lib/glib-1.2.lib"
+            else
+                AC_MSG_ERROR([Cannot find $GLIB_PREFIX/lib/glib-1.2.lib or $GLIB_PREFIX/lib/glib-1.2_s.lib])
+            fi
+        fi
+        if test -n "$LIBIDL_PREFIX"; then
+            LIBIDL_CFLAGS="-I${LIBIDL_PREFIX}/include ${GLIB_CFLAGS}"
+            if test -f "${LIBIDL_PREFIX}/lib/libIDL-0.6_s.lib"; then
+                LIBIDL_LIBS="${LIBIDL_PREFIX}/lib/libIDL-0.6_s.lib"
+                STATIC_LIBIDL=1
+            elif test -f "${LIBIDL_PREFIX}/lib/libIDL-0.6.lib"; then
+                LIBIDL_LIBS="${LIBIDL_PREFIX}/lib/libIDL-0.6.lib"
+            else
+                AC_MSG_ERROR([Cannot find $LIBIDL_PREFIX/lib/libIDL-0.6.lib or $LIBIDL_PREFIX/lib/libIDL-0.6_s.lib])
+            fi
+        fi
+        LIBIDL_LIBS="${LIBIDL_LIBS} ${GLIB_LIBS}"
+        ;;
+    esac 
+
+    case "$target" in
+    i*86-*)
+    	AC_DEFINE(_X86_)
+	;;
+    alpha-*)
+    	AC_DEFINE(_ALPHA_)
+	;;
+    mips-*)
+    	AC_DEFINE(_MIPS_)
+	;;
+    *)
+    	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.
+    MKSHLIB_FORCE_ALL='-Wl,--whole-archive'
+    MKSHLIB_UNFORCE_ALL='-Wl,--no-whole-archive'
+    if test "$LIBRUNPATH"; then
+	DSO_LDOPTS="-Wl,-R$LIBRUNPATH $DSO_LDOPTS"
+    fi
+    MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -Wl,-soname,lib$(LIBRARY_NAME)$(DLL_SUFFIX) -o $@'
+    MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -Wl,-soname,lib$(LIBRARY_NAME)$(DLL_SUFFIX) -o $@'
+    ;;
+
+*-nto*) 
+	AC_DEFINE(NTO)	
+	AC_DEFINE(_QNX_SOURCE)
+	AC_DEFINE(_i386)
+	OS_TARGET=NTO
+	MOZ_OPTIMIZE_FLAGS="-O"
+	MOZ_DEBUG_FLAGS="-gdwarf-2"
+	USE_PTHREADS=1
+	_PEDANTIC=
+	LIBS="$LIBS -lsocket -lstdc++"
+	_DEFINES_CFLAGS='-Wp,-include -Wp,$(DEPTH)/mozilla-config.h -DMOZILLA_CLIENT -D_POSIX_C_SOURCE=199506'
+	_DEFINES_CXXFLAGS='-DMOZILLA_CLIENT -Wp,-include -Wp,$(DEPTH)/mozilla-config.h -D_POSIX_C_SOURCE=199506'
+	if test "$with_x" != "yes"
+	then
+		_PLATFORM_DEFAULT_TOOLKIT="photon"
+	    TK_CFLAGS='-I/usr/include/photon'
+		TK_LIBS='-lph'
+	fi
+	case "${target_cpu}" in
+	ppc*)
+	AC_DEFINE(HAVE_VA_LIST_AS_ARRAY)	
+	;;
+	esac
+	case "${host_cpu}" in
+	i*86)
+	USE_ELF_DYNSTR_GC=1
+	;;
+	esac
+	;;
+
+*-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
+    ;;
+
+*-openvms*) 
+    AC_DEFINE(NO_PW_GECOS)
+    AC_DEFINE(NO_UDSOCK)
+    AC_DEFINE(POLL_WITH_XCONNECTIONNUMBER)
+    USE_PTHREADS=1
+    MKSHLIB_FORCE_ALL='-all'
+    MKSHLIB_UNFORCE_ALL='-none'
+    AS='as'
+    AS_DASH_C_FLAG='-Wc/names=as_is'
+    AR_FLAGS='c $@'
+    DSO_LDOPTS='-shared -auto_symvec'
+    DSO_PIC_CFLAGS=
+    MOZ_DEBUG_LDFLAGS='-g'
+    COMPAQ_CXX=1
+    CC_VERSION=`$CC -V 2>&1 | awk '/ C / { print $3 }'`
+    CXX_VERSION=`$CXX -V 2>&1 | awk '/ C\+\+ / { print $3 }'`
+    ;;
+
+
+*-os2*)
+    MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -o $@'
+    MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -o $@'
+    AC_DEFINE(XP_OS2)
+    USE_SHORT_LIBNAME=1
+    DLL_PREFIX=
+    LIB_PREFIX=
+    LIB_SUFFIX=lib
+    BIN_SUFFIX=".exe"
+    DLL_SUFFIX=".dll"
+    IMPORT_LIB_SUFFIX=lib
+    DSO_PIC_CFLAGS=
+    TARGET_MD_ARCH=os2
+    _PLATFORM_DEFAULT_TOOLKIT=os2
+    WIDGET_DLL='\"wdgt$(MOZ_WIDGET_TOOLKIT)$(DLL_SUFFIX)\"'
+    GFXWIN_DLL='\"gfx_$(MOZ_GFX_TOOLKIT)$(DLL_SUFFIX)\"'
+    MOZ_ENABLE_POSTSCRIPT=
+    RC=rc.exe
+    RCFLAGS='-n'
+    MOZ_USER_DIR="Mozilla"
+
+    if test "$MOZTOOLS"; then
+        MOZ_TOOLS_DIR=`echo $MOZTOOLS | sed -e 's|\\\\|/|g'`
+    else
+        AC_MSG_ERROR([MOZTOOLS is not set])
+    fi
+
+    # EMX/GCC build
+    if test -n "$GNU_CC"; then
+        AC_DEFINE(OS2)
+        AC_DEFINE(XP_OS2_EMX)
+        AC_DEFINE(OS2EMX_PLAIN_CHAR)
+        AC_DEFINE(TCPV40HDRS)
+        AR=emxomfar
+        AR_FLAGS='r $@'
+        CFLAGS="$CFLAGS -Zomf"
+        CXXFLAGS="$CXXFLAGS -Zomf"
+        DSO_LDOPTS='-Zdll'
+        BIN_FLAGS='-Zlinker /ST:0x100000'
+        IMPLIB='emximp -o'
+        FILTER='emxexp -o'
+        LDFLAGS='-Zmap'
+        MOZ_DEBUG_FLAGS="-g -fno-inline"
+        MOZ_OPTIMIZE_FLAGS="-O2 -s"
+        MOZ_OPTIMIZE_LDFLAGS="-Zlinker /EXEPACK:2 -Zlinker /PACKCODE -Zlinker /PACKDATA"
+        MOZ_WIDGET_TOOLKIT_LDFLAGS='-lwdgt$(MOZ_WIDGET_TOOLKIT)'
+        MOZ_GFX_TOOLKIT_LDFLAGS='-lgfx_$(MOZ_GFX_TOOLKIT)'
+        MOZ_XPCOM_OBSOLETE_LIBS='-L$(DIST)/lib $(DIST)/lib/xpcomct.lib'
+        DYNAMIC_XPCOM_LIBS='-L$(DIST)/lib $(DIST)/lib/xpcom.lib $(DIST)/lib/xpcomcor.lib'
+        LIBXUL_LIBS='-L$(DIST)/lib $(DIST)/lib/xpcom.lib $(DIST)/lib/xul.lib'
+
+        # GCC for OS/2 currently predefines these, but we don't want them
+        _DEFINES_CFLAGS="$_DEFINES_CFLAGS -Uunix -U__unix -U__unix__"
+        _DEFINES_CXXFLAGS="$_DEFINES_CXXFLAGS -Uunix -U__unix -U__unix__"
+
+    # Visual Age C++ build
+    elif test "$VACPP" = "yes"; then
+        MOZ_BUILD_ROOT=`pwd -D`
+        OBJ_SUFFIX=obj
+        AR=-ilib
+        AR_FLAGS='/NOL /NOI /O:$(subst /,\\,$@)'
+        AR_LIST='/L'
+        AR_EXTRACT='-*'
+        AR_DELETE='-'
+        AS=alp
+        ASFLAGS='-Mb'
+        AS_DASH_C_FLAG=''
+        ASM_SUFFIX=asm
+        LD='-ilink'
+        CFLAGS="/Q /qlibansi /Gm+ /Su4 /Mp /Tl9"
+        CXXFLAGS="/Q /qlibansi /Gm+ /Su4 /Mp /Tl9 /Gx+"
+        MOZ_DEBUG_FLAGS="/Ti+"
+        MOZ_OPTIMIZE_FLAGS="/O+ /Gl+ /G5 /qarch=pentium"
+        LDFLAGS="/NOL /M"
+        MOZ_DEBUG_LDFLAGS="/DE"
+        MOZ_OPTIMIZE_LDFLAGS="/OPTFUNC /EXEPACK:2 /PACKCODE /PACKDATA"
+        DSO_LDOPTS=''
+        DSO_PIC_CFLAGS=
+        IMPLIB='implib /NOL /NOI'
+        FILTER='cppfilt -q -B -P'
+        AC_DEFINE(NO_ANSI_KEYWORDS)
+        AC_DEFINE(OS2,4)
+        AC_DEFINE(_X86_)
+        AC_DEFINE(XP_OS2_VACPP)
+        AC_DEFINE(TCPV40HDRS)
+        AC_DEFINE(NSCAP_DISABLE_DEBUG_PTR_TYPES)
+        AC_DEFINE(STDC_HEADERS)
+        MOZ_COMPONENT_NSPR_LIBS='$(NSPR_LIBS)'
+        MKSHLIB='$(LD) $(DSO_LDOPTS)'
+        MKCSHLIB='$(LD) $(DSO_LDOPTS)'
+        MOZ_JS_LIBS='$(DIST)/lib/mozjs.lib'
+        MOZ_XPCOM_OBSOLETE_LIBS='$(DIST)/lib/xpcomct.lib'
+        DYNAMIC_XPCOM_LIBS='$(DIST)/lib/xpcom.lib $(DIST)/lib/xpcomcor.lib'
+        LIBXUL_LIBS='$(DIST)/lib/xpcom.lib $(DIST)/lib/xul.lib'
+        MOZ_JPEG_LIBS='$(DIST)/lib/mozjpeg.$(LIB_SUFFIX)'
+        MOZ_ZLIB_LIBS='$(DIST)/lib/mozz.$(LIB_SUFFIX)'
+        MOZ_PNG_LIBS='$(DIST)/lib/mozpng.$(LIB_SUFFIX)'
+        MOZ_WIDGET_TOOLKIT_LDFLAGS='$(DIST)/lib/wdgt$(MOZ_WIDGET_TOOLKIT)'
+        MOZ_GFX_TOOLKIT_LDFLAGS='$(DIST)/lib/gfx_$(MOZ_GFX_TOOLKIT)'
+    fi
+    ;;
+
+alpha*-*-osf*)
+    if test "$GNU_CC"; then
+      MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -Wl,-soname,$@ -o $@'
+      MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -Wl,-soname,$@ -o $@'
+
+    else
+	MOZ_DEBUG_FLAGS='-g'
+	ASFLAGS='-I$(topsrcdir)/xpcom/reflect/xptcall/public -g'
+	CFLAGS="$CFLAGS -ieee"
+	CXXFLAGS="$CXXFLAGS "'-noexceptions -ieee  -ptr $(DIST)/cxx_repository'
+	DSO_LDOPTS='-shared -msym -expect_unresolved \* -update_registry $(DIST)/so_locations'
+	DSO_CFLAGS=
+	DSO_PIC_CFLAGS=
+	MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -soname $@ -o $@'
+	MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -soname $@ -o $@'
+	MKSHLIB_FORCE_ALL='-all'
+	MKSHLIB_UNFORCE_ALL='-none'
+	dnl Might fix the libxpcom.so breakage on this platform as well....
+	AC_DEFINE(NSCAP_DISABLE_TEST_DONTQUERY_CASES)
+	AC_DEFINE(NSCAP_DISABLE_DEBUG_PTR_TYPES)
+    fi
+    if test -z "$GNU_CXX"; then
+      COMPAQ_CXX=1
+    fi
+    AC_DEFINE(NEED_USLEEP_PROTOTYPE)
+    ;;
+
+*-qnx*) 
+    DIRENT_INO=d_stat.st_ino
+    dnl Solves the problems the QNX compiler has with nsCOMPtr.h.
+    AC_DEFINE(NSCAP_DISABLE_TEST_DONTQUERY_CASES)
+    AC_DEFINE(NSCAP_DISABLE_DEBUG_PTR_TYPES)
+    dnl Explicit set STDC_HEADERS to workaround QNX 6.0's failing of std test
+    AC_DEFINE(STDC_HEADERS)
+    if test "$no_x" = "yes"; then
+	    _PLATFORM_DEFAULT_TOOLKIT='photon'
+	    TK_CFLAGS='-I/usr/nto/include/photon'
+	    TK_LIBS='-lphoton -lphrender'
+    fi
+    ;;
+
+*-sco*) 
+    AC_DEFINE(NSCAP_DISABLE_TEST_DONTQUERY_CASES)
+    AC_DEFINE(NSCAP_DISABLE_DEBUG_PTR_TYPES)
+    CXXFLAGS="$CXXFLAGS -I/usr/include/CC"
+    if test ! "$GNU_CC"; then
+       DSO_LDOPTS='-G'
+    fi
+    ;;
+
+dnl the qsort routine under solaris is faulty
+*-solaris*) 
+    AC_DEFINE(SOLARIS)
+    TARGET_NSPR_MDCPUCFG='\"md/_solaris32.cfg\"'
+    SYSTEM_MAKEDEPEND=
+    if test -z "$GNU_CC"; then
+       NS_USE_NATIVE=1
+       MOZ_FIX_LINK_PATHS='-R $(LIBXUL_DIST)/bin'
+       AC_DEFINE(NSCAP_DISABLE_DEBUG_PTR_TYPES)
+       CFLAGS="$CFLAGS -xstrconst -xbuiltin=%all"
+       CXXFLAGS="$CXXFLAGS -xbuiltin=%all -features=tmplife"
+       LDFLAGS="-xildoff -zlazyload -zcombreloc $LDFLAGS"
+       if test -z "$CROSS_COMPILE" && test -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 $@ -o $@'
+       MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_FLAGS) -G -Wl,-z -Wl,muldefs -h $@ -o $@'
+       MKSHLIB_FORCE_ALL='-Qoption ld -z,allextract'
+       MKSHLIB_UNFORCE_ALL=''
+       DSO_LDOPTS='-G -Qoption ld -z,muldefs'
+       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 Forte compiler version >= WS6U2])
+       AC_LANG_SAVE
+       AC_LANG_CPLUSPLUS
+       AC_TRY_COMPILE([],
+           [#if (__SUNPRO_CC < 0x530)
+           #error "Denied"
+           #endif],
+           _BAD_COMPILER=,_BAD_COMPILER=1)
+        if test -n "$_BAD_COMPILER"; then
+            _res="no"
+            AC_MSG_ERROR([Forte version WS6U2 or higher is required to build. Your compiler version is $CC_VERSION .])
+        else
+            _res="yes"
+        fi
+        AC_MSG_RESULT([$_res])
+        AC_LANG_RESTORE
+    else
+       ASFLAGS="$ASFLAGS -fPIC"
+       DSO_LDOPTS='-G'
+       _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
+    ;;
+
+*-sysv4.2uw7*) 
+	NSPR_LIBS="-lnspr$NSPR_VERSION -lplc$NSPR_VERSION -lplds$NSPR_VERSION -L/usr/ccs/lib -lcrt"
+    ;;
+
+*-os2*)
+    HOST_NSPR_MDCPUCFG='\"md/_os2.cfg\"'
+    ;;
+
+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 Any platform that doesn't have MKSHLIB_FORCE_ALL defined
+dnl by now will not have any way to link most binaries (tests
+dnl as well as viewer, apprunner, etc.), because some symbols
+dnl will be left out of the "composite" .so's by ld as unneeded.
+dnl So, by defining NO_LD_ARCHIVE_FLAGS for these platforms,
+dnl they can link in the static libs that provide the missing
+dnl symbols.
+dnl ========================================================
+NO_LD_ARCHIVE_FLAGS=
+if test -z "$MKSHLIB_FORCE_ALL" || test -z "$MKSHLIB_UNFORCE_ALL"; then
+    NO_LD_ARCHIVE_FLAGS=1
+fi
+case "$target" in
+*-os2*)
+    NO_LD_ARCHIVE_FLAGS=
+    ;;
+*-aix4.3*|*-aix5*)
+    NO_LD_ARCHIVE_FLAGS=
+    ;;
+*-openvms*)
+    NO_LD_ARCHIVE_FLAGS=
+    ;;
+*-msvc*|*-mks*|*-mingw*|*-cygwin*|*-wince)
+    if test -z "$GNU_CC"; then
+        NO_LD_ARCHIVE_FLAGS=
+    fi
+    ;;
+esac
+AC_SUBST(NO_LD_ARCHIVE_FLAGS)
+
+dnl
+dnl Indicate that platform requires special thread safe 
+dnl locking when starting up the OJI JVM 
+dnl (see mozilla/modules/oji/src/nsJVMManager.cpp)
+dnl ========================================================
+case "$target" in
+    *-hpux*)      
+        AC_DEFINE(MOZ_OJI_REQUIRE_THREAD_SAFE_ON_STARTUP)
+        ;;
+esac
+
+dnl ========================================================
+dnl = Flags to strip unused symbols from .so components
+dnl ========================================================
+case "$target" in
+    *-linux*)
+        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
+        ;;
+    *-nto*) 
+        MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS='-Wl,--version-script,$(BUILD_TOOLS)/gnu-ld-scripts/components-version-script'
+        ;;
+    *-darwin*)
+        MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS='-Wl,-exported_symbols_list -Wl,$(BUILD_TOOLS)/gnu-ld-scripts/components-export-list'
+        ;;
+    *-cygwin*|*-mingw*|*-mks*|*-msvc|*-wince)
+        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
+fi
+
+if test -z "$SKIP_COMPILER_CHECKS"; then
+dnl Checks for typedefs, structures, and compiler characteristics.
+dnl ========================================================
+AC_LANG_C
+AC_HEADER_STDC
+AC_C_CONST
+AC_TYPE_MODE_T
+AC_TYPE_OFF_T
+AC_TYPE_PID_T
+AC_TYPE_SIZE_T
+AC_STRUCT_ST_BLKSIZE
+AC_MSG_CHECKING(for siginfo_t)
+AC_CACHE_VAL(ac_cv_siginfo_t,
+ [AC_TRY_COMPILE([#define _POSIX_C_SOURCE 199506L
+                  #include <signal.h>],
+                 [siginfo_t* info;],
+                 [ac_cv_siginfo_t=true],
+                 [ac_cv_siginfo_t=false])])
+if test "$ac_cv_siginfo_t" = true ; then
+  AC_DEFINE(HAVE_SIGINFO_T)
+  AC_MSG_RESULT(yes)
+else
+  AC_MSG_RESULT(no)
+fi
+
+dnl Visual Age for os/2 also defines size_t and off_t in certain 
+dnl  header files.  These defines make Visual Age use the mozilla
+dnl  defines types.
+if test "$VACPP" = "yes"; then
+   AC_DEFINE(__size_t)
+   AC_DEFINE(__off_t)
+fi
+
+dnl Check for int16_t, int32_t, int64_t, int64, uint, uint_t, and uint16_t.
+dnl ========================================================
+AC_MSG_CHECKING(for int16_t)
+AC_CACHE_VAL(ac_cv_int16_t,
+ [AC_TRY_COMPILE([#include <stdio.h>
+                  #include <sys/types.h>],
+                 [int16_t foo = 0;],
+                 [ac_cv_int16_t=true],
+                 [ac_cv_int16_t=false])])
+if test "$ac_cv_int16_t" = true ; then
+  AC_DEFINE(HAVE_INT16_T)
+  AC_MSG_RESULT(yes)
+else
+  AC_MSG_RESULT(no)
+fi
+AC_MSG_CHECKING(for int32_t)
+AC_CACHE_VAL(ac_cv_int32_t,
+ [AC_TRY_COMPILE([#include <stdio.h>
+                  #include <sys/types.h>],
+                 [int32_t foo = 0;],
+                 [ac_cv_int32_t=true],
+                 [ac_cv_int32_t=false])])
+if test "$ac_cv_int32_t" = true ; then
+  AC_DEFINE(HAVE_INT32_T)
+  AC_MSG_RESULT(yes)
+else
+  AC_MSG_RESULT(no)
+fi
+AC_MSG_CHECKING(for int64_t)
+AC_CACHE_VAL(ac_cv_int64_t,
+ [AC_TRY_COMPILE([#include <stdio.h>
+                  #include <sys/types.h>],
+                 [int64_t foo = 0;],
+                 [ac_cv_int64_t=true],
+                 [ac_cv_int64_t=false])])
+if test "$ac_cv_int64_t" = true ; then
+  AC_DEFINE(HAVE_INT64_T)
+  AC_MSG_RESULT(yes)
+else
+  AC_MSG_RESULT(no)
+fi
+AC_MSG_CHECKING(for int64)
+AC_CACHE_VAL(ac_cv_int64,
+ [AC_TRY_COMPILE([#include <stdio.h>
+                  #include <sys/types.h>],
+                 [int64 foo = 0;],
+                 [ac_cv_int64=true],
+                 [ac_cv_int64=false])])
+if test "$ac_cv_int64" = true ; then
+  AC_DEFINE(HAVE_INT64)
+  AC_MSG_RESULT(yes)
+else
+  AC_MSG_RESULT(no)
+fi
+AC_MSG_CHECKING(for uint)
+AC_CACHE_VAL(ac_cv_uint,
+ [AC_TRY_COMPILE([#include <stdio.h>
+                  #include <sys/types.h>],
+                 [uint foo = 0;],
+                 [ac_cv_uint=true],
+                 [ac_cv_uint=false])])
+if test "$ac_cv_uint" = true ; then
+  AC_DEFINE(HAVE_UINT)
+  AC_MSG_RESULT(yes)
+else
+  AC_MSG_RESULT(no)
+fi
+AC_MSG_CHECKING(for uint_t)
+AC_CACHE_VAL(ac_cv_uint_t,
+ [AC_TRY_COMPILE([#include <stdio.h>
+                  #include <sys/types.h>],
+                 [uint_t foo = 0;],
+                 [ac_cv_uint_t=true],
+                 [ac_cv_uint_t=false])])
+if test "$ac_cv_uint_t" = true ; then
+  AC_DEFINE(HAVE_UINT_T)
+  AC_MSG_RESULT(yes)
+else
+  AC_MSG_RESULT(no)
+fi
+AC_MSG_CHECKING(for uint16_t)
+AC_CACHE_VAL(ac_cv_uint16_t,
+ [AC_TRY_COMPILE([#include <stdio.h>
+                  #include <sys/types.h>],
+                 [uint16_t foo = 0;],
+                 [ac_cv_uint16_t=true],
+                 [ac_cv_uint16_t=false])])
+if test "$ac_cv_uint16_t" = true ; then
+  AC_DEFINE(HAVE_UINT16_T)
+  AC_MSG_RESULT(yes)
+else
+  AC_MSG_RESULT(no)
+fi
+
+dnl On the gcc trunk (as of 2001-02-09) _GNU_SOURCE, and thus __USE_GNU,
+dnl are defined when compiling C++ but not C.  Since the result of this
+dnl test is used only in C++, do it in C++.
+AC_LANG_CPLUSPLUS
+
+AC_MSG_CHECKING(for uname.domainname)
+AC_CACHE_VAL(ac_cv_have_uname_domainname_field,
+    [AC_TRY_COMPILE([#include <sys/utsname.h>],
+        [ struct utsname *res; char *domain; 
+            (void)uname(res);  if (res != 0) { domain = res->domainname; } ],
+        [ac_cv_have_uname_domainname_field=true],
+        [ac_cv_have_uname_domainname_field=false])])
+
+if test "$ac_cv_have_uname_domainname_field" = "true"; then
+    AC_DEFINE(HAVE_UNAME_DOMAINNAME_FIELD)
+    AC_MSG_RESULT(yes)
+else
+    AC_MSG_RESULT(no)
+fi
+
+AC_MSG_CHECKING(for uname.__domainname)
+AC_CACHE_VAL(ac_cv_have_uname_us_domainname_field,
+    [AC_TRY_COMPILE([#include <sys/utsname.h>],
+        [ struct utsname *res; char *domain; 
+            (void)uname(res);  if (res != 0) { domain = res->__domainname; } ],
+        [ac_cv_have_uname_us_domainname_field=true],
+        [ac_cv_have_uname_us_domainname_field=false])])
+
+if test "$ac_cv_have_uname_us_domainname_field" = "true"; then
+    AC_DEFINE(HAVE_UNAME_US_DOMAINNAME_FIELD)
+    AC_MSG_RESULT(yes)
+else
+    AC_MSG_RESULT(no)
+fi
+
+AC_LANG_C
+
+dnl Check for usable wchar_t (2 bytes, unsigned)
+dnl (we really don't need the unsignedness check anymore)
+dnl ========================================================
+
+AC_CACHE_CHECK(for usable wchar_t (2 bytes, unsigned),
+    ac_cv_have_usable_wchar_v2,
+    [AC_TRY_COMPILE([#include <stddef.h>
+                     $configure_static_assert_macros],
+                    [CONFIGURE_STATIC_ASSERT(sizeof(wchar_t) == 2);
+                     CONFIGURE_STATIC_ASSERT((wchar_t)-1 > (wchar_t) 0)],
+                    ac_cv_have_usable_wchar_v2="yes",
+                    ac_cv_have_usable_wchar_v2="no")])
+if test "$ac_cv_have_usable_wchar_v2" = "yes"; then
+    AC_DEFINE(HAVE_CPP_2BYTE_WCHAR_T)
+    HAVE_CPP_2BYTE_WCHAR_T=1
+else
+dnl This is really gcc-only
+dnl Do this test using CXX only since some versions of gcc
+dnl 2.95-2.97 have a signed wchar_t in c++ only and some versions
+dnl only have short-wchar support for c++.
+dnl Note that we assume that mac & win32 have short wchar (see nscore.h)
+
+    AC_LANG_SAVE
+    AC_LANG_CPLUSPLUS
+    _SAVE_CXXFLAGS=$CXXFLAGS
+    CXXFLAGS="$CXXFLAGS -fshort-wchar"
+
+    AC_CACHE_CHECK(for compiler -fshort-wchar option, 
+        ac_cv_have_usable_wchar_option_v2,
+        [AC_TRY_COMPILE([#include <stddef.h>
+                         $configure_static_assert_macros],
+                        [CONFIGURE_STATIC_ASSERT(sizeof(wchar_t) == 2);
+                         CONFIGURE_STATIC_ASSERT((wchar_t)-1 > (wchar_t) 0)],
+                        ac_cv_have_usable_wchar_option_v2="yes",
+                        ac_cv_have_usable_wchar_option_v2="no")])
+
+    if test "$ac_cv_have_usable_wchar_option_v2" = "yes"; then
+        AC_DEFINE(HAVE_CPP_2BYTE_WCHAR_T)
+        HAVE_CPP_2BYTE_WCHAR_T=1
+    else    
+        CXXFLAGS=$_SAVE_CXXFLAGS
+    fi
+    AC_LANG_RESTORE
+fi
+
+dnl Check for .hidden assembler directive and visibility attribute.
+dnl Borrowed from glibc configure.in
+dnl ===============================================================
+if test "$GNU_CC"; then
+  AC_CACHE_CHECK(for visibility(hidden) attribute,
+                 ac_cv_visibility_hidden,
+                 [cat > conftest.c <<EOF
+                  int foo __attribute__ ((visibility ("hidden"))) = 1;
+EOF
+                  ac_cv_visibility_hidden=no
+                  if ${CC-cc} -Werror -S conftest.c -o conftest.s >/dev/null 2>&1; then
+                    if egrep '\.(hidden|private_extern).*foo' conftest.s >/dev/null; then
+                      ac_cv_visibility_hidden=yes
+                    fi
+                  fi
+                  rm -f conftest.[cs]
+                 ])
+  if test "$ac_cv_visibility_hidden" = "yes"; then
+    AC_DEFINE(HAVE_VISIBILITY_HIDDEN_ATTRIBUTE)
+
+    AC_CACHE_CHECK(for visibility(default) attribute,
+                   ac_cv_visibility_default,
+                   [cat > conftest.c <<EOF
+                    int foo __attribute__ ((visibility ("default"))) = 1;
+EOF
+                    ac_cv_visibility_default=no
+                    if ${CC-cc} -fvisibility=hidden -Werror -S conftest.c -o conftest.s >/dev/null 2>&1; then
+                      if ! egrep '\.(hidden|private_extern).*foo' conftest.s >/dev/null; then
+                        ac_cv_visibility_default=yes
+                      fi
+                    fi
+                    rm -f conftest.[cs]
+                   ])
+    if test "$ac_cv_visibility_default" = "yes"; then
+      AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE)
+
+      AC_CACHE_CHECK(for visibility pragma support,
+                     ac_cv_visibility_pragma,
+                     [cat > conftest.c <<EOF
+#pragma GCC visibility push(hidden)
+                      int foo_hidden = 1;
+#pragma GCC visibility push(default)
+                      int foo_default = 1;
+EOF
+                      ac_cv_visibility_pragma=no
+                      if ${CC-cc} -Werror -S conftest.c -o conftest.s >/dev/null 2>&1; then
+                        if egrep '\.(hidden|extern_private).*foo_hidden' conftest.s >/dev/null; then
+                          if ! egrep '\.(hidden|extern_private).*foo_default' conftest.s > /dev/null; then
+                            ac_cv_visibility_pragma=yes
+                          fi
+                        fi
+                      fi
+                      rm -f conftest.[cs]
+                    ])
+      if test "$ac_cv_visibility_pragma" = "yes"; then
+        AC_CACHE_CHECK(For gcc visibility bug with class-level attributes (GCC bug 26905),
+                       ac_cv_have_visibility_class_bug,
+                       [cat > conftest.c <<EOF
+#pragma GCC visibility push(hidden)
+struct __attribute__ ((visibility ("default"))) TestStruct {
+  static void Init();
+};
+__attribute__ ((visibility ("default"))) void TestFunc() {
+  TestStruct::Init();
+}
+EOF
+                       ac_cv_have_visibility_class_bug=no
+                       if ! ${CXX-g++} ${CXXFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -S -o conftest.S conftest.c > /dev/null 2>&1 ; then
+                         ac_cv_have_visibility_class_bug=yes
+                       else
+                         if test `grep -c "@PLT" conftest.S` = 0; then
+                           ac_cv_have_visibility_class_bug=yes
+                         fi
+                       fi
+                       rm -rf conftest.{c,S}
+                       ])
+
+        AC_CACHE_CHECK(For x86_64 gcc visibility bug with builtins (GCC bug 20297),
+                       ac_cv_have_visibility_builtin_bug,
+                       [cat > conftest.c <<EOF
+#pragma GCC visibility push(hidden)
+#pragma GCC visibility push(default)
+#include <string.h>
+#pragma GCC visibility pop
+
+__attribute__ ((visibility ("default"))) void Func() {
+  char c[[100]];
+  memset(c, 0, sizeof(c));
+}
+EOF
+                       ac_cv_have_visibility_builtin_bug=no
+                       if ! ${CC-cc} ${CFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -O2 -S -o conftest.S conftest.c > /dev/null 2>&1 ; then
+                         ac_cv_have_visibility_builtin_bug=yes
+                       else
+                         if test `grep -c "@PLT" conftest.S` = 0; then
+                           ac_cv_visibility_builtin_bug=yes
+                         fi
+                       fi
+                       rm -f conftest.{c,S}
+                       ])
+        if test "$ac_cv_have_visibility_builtin_bug" = "no" -a \
+                "$ac_cv_have_visibility_class_bug" = "no"; then
+          VISIBILITY_FLAGS='-I$(DIST)/include/system_wrappers -include $(topsrcdir)/config/gcc_hidden.h'
+          WRAP_SYSTEM_INCLUDES=1
+        else
+          VISIBILITY_FLAGS='-fvisibility=hidden'
+        fi # have visibility pragma bug
+      fi   # have visibility pragma
+    fi     # have visibility(default) attribute
+  fi       # have visibility(hidden) attribute
+fi         # GNU_CC
+
+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
+AC_CHECK_HEADERS(sys/byteorder.h compat.h getopt.h)
+AC_CHECK_HEADERS(sys/bitypes.h memory.h unistd.h)
+AC_CHECK_HEADERS(gnu/libc-version.h nl_types.h)
+AC_CHECK_HEADERS(malloc.h)
+AC_CHECK_HEADERS(X11/XKBlib.h)
+
+dnl These are all the places some variant of statfs can be hiding.
+AC_CHECK_HEADERS(sys/statvfs.h sys/statfs.h sys/vfs.h sys/mount.h)
+
+dnl Try for MMX support
+dnl NB - later gcc versions require -mmmx for this header to be successfully
+dnl included (or another option which implies it, such as -march=pentium-mmx)
+AC_CHECK_HEADERS(mmintrin.h)
+
+dnl Check whether the compiler supports the new-style C++ standard
+dnl library headers (i.e. <new>) or needs the old "new.h"
+AC_LANG_CPLUSPLUS
+NEW_H=new.h
+AC_CHECK_HEADER(new, [NEW_H=new])
+AC_DEFINE_UNQUOTED(NEW_H, <$NEW_H>)
+AC_LANG_C
+
+case $target in
+*-aix4.3*|*-aix5*)
+	;;
+*)
+	AC_CHECK_HEADERS(sys/cdefs.h)
+	;;
+esac
+
+dnl Checks for libraries.
+dnl ========================================================
+case $target in
+*-hpux11.*)
+	;;
+*)
+	AC_CHECK_LIB(c_r, gethostbyname_r)
+	;;
+esac
+AC_CHECK_LIB(m, atan)
+
+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.
+
+case $target in
+*-darwin*)
+	;;
+*)
+	AC_CHECK_LIB(dl, dlopen,
+        AC_CHECK_HEADER(dlfcn.h, 
+            LIBS="-ldl $LIBS"
+            AC_DEFINE(HAVE_LIBDL)))
+	;;
+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)
+
+XLDFLAGS="$X_LIBS"
+XLIBS="$X_EXTRA_LIBS"
+
+dnl ========================================================
+dnl Checks for X libraries.
+dnl Ordering is important.
+dnl Xt is dependent upon SM as of X11R6
+dnl ========================================================
+if test "$no_x" = "yes"; then
+    AC_DEFINE(NO_X11)
+else
+    AC_DEFINE_UNQUOTED(FUNCPROTO,15)
+	XLIBS="-lX11 $XLIBS"
+	_SAVE_LDFLAGS="$LDFLAGS"
+	LDFLAGS="$XLDFLAGS $LDFLAGS"
+	AC_CHECK_LIB(X11, XDrawLines, [X11_LIBS="-lX11"],
+		[MISSING_X="$MISSING_X -lX11"], $XLIBS)
+	AC_CHECK_LIB(Xext, XextAddDisplay, [XEXT_LIBS="-lXext"],
+		[MISSING_X="$MISSING_X -lXext"], $XLIBS)
+   
+     
+	AC_CHECK_LIB(Xt, XtFree, [ XT_LIBS="-lXt"], [
+        unset ac_cv_lib_Xt_XtFree
+	    AC_CHECK_LIB(ICE, IceFlush, [XT_LIBS="-lICE $XT_LIBS"],, $XT_LIBS $XLIBS)
+	    AC_CHECK_LIB(SM, SmcCloseConnection, [XT_LIBS="-lSM $XT_LIBS"],, $XT_LIBS $XLIBS) 
+        AC_CHECK_LIB(Xt, XtFree, [ XT_LIBS="-lXt $XT_LIBS"],
+		    [MISSING_X="$MISSING_X -lXt"], $X_PRE_LIBS $XT_LIBS $XLIBS)
+        ])
+
+    # AIX needs the motif library linked before libXt to prevent
+    # crashes in plugins linked against Motif - Bug #98892
+    case "${target_os}" in
+    aix*)
+        XT_LIBS="-lXm $XT_LIBS"
+        ;;
+    esac
+
+    dnl ========================================================
+    dnl = Check for Xinerama
+    dnl ========================================================
+    AC_CHECK_LIB(Xinerama, XineramaIsActive, [MOZ_XINERAMA_LIBS="-lXinerama"],,
+        $XLIBS $XEXT_LIBS)
+    AC_CHECK_HEADER(X11/extensions/Xinerama.h)
+
+    dnl ========================================================
+    dnl = Check for XShm
+    dnl ========================================================
+    AC_CHECK_LIB(Xext, XShmCreateImage, _HAVE_XSHM_XEXT=1,,
+        $XLIBS $XEXT_LIBS)
+    AC_CHECK_HEADER(X11/extensions/XShm.h)
+    if test -n "$ac_cv_header_X11_extensions_XShm_h" &&
+        test -n "$_HAVE_XSHM_XEXT"; then
+        AC_DEFINE(HAVE_XSHM)
+    fi
+
+    dnl ========================================================
+    dnl = Check for XIE
+    dnl ========================================================
+    AC_CHECK_LIB(XIE, XieFloGeometry, [MOZ_XIE_LIBS="-lXIE"],,
+        $XLIBS $XEXT_LIBS)
+    AC_CHECK_HEADER(X11/extensions/XIElib.h)
+
+    if test "$MOZ_XIE_LIBS"; then
+	dnl ====================================================
+	dnl = If XIE is present and is desired, turn it on
+	dnl ====================================================
+	case $target in
+	    *-hpux*)
+		;;
+	    *)
+		HAVE_XIE=1
+		;;
+	esac
+    fi
+
+	LDFLAGS="$_SAVE_LDFLAGS"
+
+    AC_CHECK_FT2(6.1.0, [_HAVE_FREETYPE2=1], [_HAVE_FREETYPE2=])
+
+fi # $no_x
+
+AC_SUBST(XCFLAGS)
+AC_SUBST(XLDFLAGS)
+AC_SUBST(XLIBS)
+AC_SUBST(XT_LIBS)
+
+dnl ========================================================
+dnl = pthread support
+dnl = Start by checking whether the system support pthreads
+dnl ========================================================
+MOZ_CHECK_PTHREADS(pthreads,
+    USE_PTHREADS=1 _PTHREAD_LDFLAGS="-lpthreads",
+    MOZ_CHECK_PTHREADS(pthread,
+        USE_PTHREADS=1 _PTHREAD_LDFLAGS="-lpthread",
+        MOZ_CHECK_PTHREADS(c_r,
+            USE_PTHREADS=1 _PTHREAD_LDFLAGS="-lc_r",
+            MOZ_CHECK_PTHREADS(c,
+                USE_PTHREADS=1
+            )
+        )
+    )
+)
+
+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`" && test -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`" && test -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 -lc_r, so don't specify it explicitly.
+			if test "$ac_cv_have_dash_pthread" = "yes"; then
+				_PTHREAD_LDFLAGS="-pthread"
+			else
+				_PTHREAD_LDFLAGS="-lc_r"
+			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"
+                LDFLAGS="${_PTHREAD_LDFLAGS} ${LDFLAGS}"
+			fi
+			;;
+
+	    *-*-linux*) 
+			AC_DEFINE(_REENTRANT) 
+			;;
+
+	    *-*-nto*) 
+			AC_DEFINE(_REENTRANT) 
+			;;
+
+	    *-aix4.3*|*-aix5*)
+			AC_DEFINE(_REENTRANT) 
+			;;
+
+	    *-hpux11.*)
+			AC_DEFINE(_REENTRANT) 
+			;;
+
+	    alpha*-*-osf*)
+			AC_DEFINE(_REENTRANT)
+			;;
+
+	    *-*-solaris*) 
+    			AC_DEFINE(_REENTRANT) 
+			if test ! "$GNU_CC"; then
+				CFLAGS="$CFLAGS -mt" 
+				CXXFLAGS="$CXXFLAGS -mt" 
+			fi
+			;;
+	esac
+fi
+
+dnl ========================================================
+dnl See if mmap sees writes
+dnl For cross compiling, just define it as no, which is a safe default
+dnl ========================================================
+AC_MSG_CHECKING(whether mmap() sees write()s)
+
+changequote(,)
+mmap_test_prog='
+    #include <stdlib.h>
+    #include <unistd.h>
+    #include <sys/mman.h>
+    #include <sys/types.h>
+    #include <sys/stat.h>
+    #include <fcntl.h>
+
+    char fname[] = "conftest.file";
+    char zbuff[1024]; /* Fractional page is probably worst case */
+
+    int main() {
+	char *map;
+	int fd;
+	int i;
+	unlink(fname);
+	fd = open(fname, O_RDWR | O_CREAT, 0660);
+	if(fd<0) return 1;
+	unlink(fname);
+	write(fd, zbuff, sizeof(zbuff));
+	lseek(fd, 0, SEEK_SET);
+	map = (char*)mmap(0, sizeof(zbuff), PROT_READ, MAP_SHARED, fd, 0);
+	if(map==(char*)-1) return 2;
+	for(i=0; fname[i]; i++) {
+	    int rc = write(fd, &fname[i], 1);
+	    if(map[i]!=fname[i]) return 4;
+	}
+	return 0;
+    }
+'
+changequote([,])
+
+AC_TRY_RUN($mmap_test_prog , result="yes", result="no", result="yes")
+
+AC_MSG_RESULT("$result")
+
+if test "$result" = "no"; then
+    AC_DEFINE(MMAP_MISSES_WRITES)
+fi
+
+
+dnl Checks for library functions.
+dnl ========================================================
+AC_PROG_GCC_TRADITIONAL
+AC_FUNC_MEMCMP
+AC_CHECK_FUNCS(random strerror lchown fchmod snprintf statvfs memmove rint stat64 lstat64)
+AC_CHECK_FUNCS(flockfile getpagesize)
+
+dnl localtime_r and strtok_r are only present on MacOS version 10.2 and higher
+if test -z "$MACOS_DEPLOYMENT_TARGET" || test "$MACOS_DEPLOYMENT_TARGET" -ge "100200"; then
+  AC_CHECK_FUNCS(localtime_r strtok_r)
+fi
+
+dnl check for wcrtomb/mbrtowc
+dnl =======================================================================
+if test -z "$MACOS_DEPLOYMENT_TARGET" || test "$MACOS_DEPLOYMENT_TARGET" -ge "100300"; then
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+AC_CACHE_CHECK(for wcrtomb,
+    ac_cv_have_wcrtomb,
+    [AC_TRY_LINK([#include <wchar.h>],
+                 [mbstate_t ps={0};wcrtomb(0,'f',&ps);],
+                 ac_cv_have_wcrtomb="yes",
+                 ac_cv_have_wcrtomb="no")])
+if test "$ac_cv_have_wcrtomb" = "yes"; then
+    AC_DEFINE(HAVE_WCRTOMB)
+fi
+AC_CACHE_CHECK(for mbrtowc,
+    ac_cv_have_mbrtowc,
+    [AC_TRY_LINK([#include <wchar.h>],
+                 [mbstate_t ps={0};mbrtowc(0,0,0,&ps);],
+                 ac_cv_have_mbrtowc="yes",
+                 ac_cv_have_mbrtowc="no")])
+if test "$ac_cv_have_mbrtowc" = "yes"; then
+    AC_DEFINE(HAVE_MBRTOWC)
+fi
+AC_LANG_RESTORE
+fi
+
+AC_CACHE_CHECK(
+    [for res_ninit()],
+    ac_cv_func_res_ninit,
+    [AC_TRY_LINK([
+        #ifdef linux
+        #define _BSD_SOURCE 1
+        #endif
+        #include <resolv.h>
+        ],
+        [int foo = res_ninit(&_res);],
+        [ac_cv_func_res_ninit=yes],
+        [ac_cv_func_res_ninit=no])
+    ])
+
+if test "$ac_cv_func_res_ninit" = "yes"; then
+    AC_DEFINE(HAVE_RES_NINIT)
+dnl must add the link line we do something as foolish as this... dougt
+dnl else
+dnl    AC_CHECK_LIB(bind, res_ninit, AC_DEFINE(HAVE_RES_NINIT),
+dnl        AC_CHECK_LIB(resolv, res_ninit, AC_DEFINE(HAVE_RES_NINIT)))
+fi
+
+AC_LANG_CPLUSPLUS
+AC_CACHE_CHECK(
+    [for gnu_get_libc_version()],
+    ac_cv_func_gnu_get_libc_version,
+    [AC_TRY_LINK([
+        #ifdef HAVE_GNU_LIBC_VERSION_H
+        #include <gnu/libc-version.h>
+        #endif
+        ],
+        [const char *glibc_version = gnu_get_libc_version();],
+        [ac_cv_func_gnu_get_libc_version=yes],
+        [ac_cv_func_gnu_get_libc_version=no] 
+        )]
+    )
+
+if test "$ac_cv_func_gnu_get_libc_version" = "yes"; then
+    AC_DEFINE(HAVE_GNU_GET_LIBC_VERSION)
+fi
+
+case $target_os in
+    os2*|msvc*|mks*|cygwin*|mingw*|darwin*|wince*)
+        ;;
+    *)
+    
+AC_CHECK_LIB(c, iconv, [_ICONV_LIBS="$_ICONV_LIBS"],
+    AC_CHECK_LIB(iconv, iconv, [_ICONV_LIBS="$_ICONV_LIBS -liconv"],
+        AC_CHECK_LIB(iconv, libiconv, [_ICONV_LIBS="$_ICONV_LIBS -liconv"])))
+_SAVE_LIBS=$LIBS
+LIBS="$LIBS $_ICONV_LIBS"
+AC_CACHE_CHECK(
+    [for iconv()],
+    ac_cv_func_iconv,
+    [AC_TRY_LINK([
+        #include <stdlib.h>
+        #include <iconv.h>
+        ],
+        [
+            iconv_t h = iconv_open("", "");
+            iconv(h, NULL, NULL, NULL, NULL);
+            iconv_close(h);
+        ],
+        [ac_cv_func_iconv=yes],
+        [ac_cv_func_iconv=no] 
+        )]
+    )
+if test "$ac_cv_func_iconv" = "yes"; then
+    AC_DEFINE(HAVE_ICONV)
+    DYNAMIC_XPCOM_LIBS="$DYNAMIC_XPCOM_LIBS $_ICONV_LIBS"
+    LIBXUL_LIBS="$LIBXUL_LIBS $_ICONV_LIBS"
+    LIBICONV="$_ICONV_LIBS"
+    AC_CACHE_CHECK(
+        [for iconv() with const input],
+        ac_cv_func_const_iconv,
+        [AC_TRY_COMPILE([
+            #include <stdlib.h>
+            #include <iconv.h>
+            ],
+            [
+                const char *input = "testing";
+                iconv_t h = iconv_open("", "");
+                iconv(h, &input, NULL, NULL, NULL);
+                iconv_close(h);
+            ],
+            [ac_cv_func_const_iconv=yes],
+            [ac_cv_func_const_iconv=no] 
+            )]
+        )
+    if test "$ac_cv_func_const_iconv" = "yes"; then
+        AC_DEFINE(HAVE_ICONV_WITH_CONST_INPUT)
+    fi
+fi
+LIBS=$_SAVE_LIBS
+
+    ;;
+esac
+
+AM_LANGINFO_CODESET
+
+AC_LANG_C
+
+dnl **********************
+dnl *** va_copy checks ***
+dnl **********************
+dnl we currently check for all three va_copy possibilities, so we get
+dnl all results in config.log for bug reports.
+AC_MSG_CHECKING(for an implementation of va_copy())
+AC_CACHE_VAL(ac_cv_va_copy,[
+    AC_TRY_RUN([
+        #include <stdarg.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);
+        }
+        int main() { f (0, 42); return 0; }],
+        ac_cv_va_copy=yes,
+        ac_cv_va_copy=no,
+        ac_cv_va_copy=no
+    )
+])
+AC_MSG_RESULT($ac_cv_va_copy)
+AC_MSG_CHECKING(for an implementation of __va_copy())
+AC_CACHE_VAL(ac_cv___va_copy,[
+    AC_TRY_RUN([
+        #include <stdarg.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);
+        }
+        int main() { f (0, 42); return 0; }],
+        ac_cv___va_copy=yes,
+        ac_cv___va_copy=no,
+        ac_cv___va_copy=no
+    )
+])
+AC_MSG_RESULT($ac_cv___va_copy)
+AC_MSG_CHECKING(whether va_lists can be copied by value)
+AC_CACHE_VAL(ac_cv_va_val_copy,[
+    AC_TRY_RUN([
+        #include <stdarg.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);
+        }
+        int main() { f (0, 42); return 0; }],
+        ac_cv_va_val_copy=yes,
+        ac_cv_va_val_copy=no,
+        ac_cv_va_val_copy=yes
+    )
+])
+if test "x$ac_cv_va_copy" = "xyes"; then
+    AC_DEFINE(VA_COPY, va_copy)
+    AC_DEFINE(HAVE_VA_COPY)
+elif 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
+AC_MSG_RESULT($ac_cv_va_val_copy)
+
+dnl Check for dll-challenged libc's.
+dnl This check is apparently only needed for Linux.
+case "$target" in
+	*-linux*)
+	    dnl ===================================================================
+	    _curdir=`pwd`
+	    export _curdir
+	    rm -rf conftest* _conftest
+	    mkdir _conftest
+	    cat >> conftest.C <<\EOF
+#include <stdio.h>
+#include <link.h>
+#include <dlfcn.h>
+#ifdef _dl_loaded
+void __dump_link_map(void) {
+  struct link_map *map = _dl_loaded;
+  while (NULL != map) {printf("0x%08x %s\n", map->l_addr, map->l_name); map = map->l_next;}
+}
+int main() {
+  dlopen("./conftest1.so",RTLD_LAZY);
+  dlopen("./../_conftest/conftest1.so",RTLD_LAZY);
+  dlopen("CURDIR/_conftest/conftest1.so",RTLD_LAZY);
+  dlopen("CURDIR/_conftest/../_conftest/conftest1.so",RTLD_LAZY);
+  __dump_link_map();
+}
+#else
+/* _dl_loaded isn't defined, so this should be either a libc5 (glibc1) system, or a glibc2 system that doesn't have the multiple load bug (i.e., RH6.0).*/
+int main() { printf("./conftest1.so\n"); }
+#endif
+EOF
+
+	    $PERL -p -i -e "s/CURDIR/\$ENV{_curdir}/g;" conftest.C
+
+	    cat >> conftest1.C <<\EOF
+#include <stdio.h>
+void foo(void) {printf("foo in dll called\n");}
+EOF
+	    ${CXX-g++} -fPIC -c -g conftest1.C
+	    ${CXX-g++} -shared -Wl,-h -Wl,conftest1.so -o conftest1.so conftest1.o
+	    ${CXX-g++} -g conftest.C -o conftest -ldl
+	    cp -f conftest1.so conftest _conftest
+	    cd _conftest
+	    if test `./conftest | grep conftest1.so | wc -l` -gt 1
+	    then
+		echo
+		echo "*** Your libc has a bug that can result in loading the same dynamic"
+		echo "*** library multiple times.  This bug is known to be fixed in glibc-2.0.7-32"
+		echo "*** or later.  However, if you choose not to upgrade, the only effect"
+		echo "*** will be excessive memory usage at runtime."
+		echo
+	    fi
+	    cd ${_curdir}
+	    rm -rf conftest* _conftest
+	    dnl ===================================================================
+	    ;;
+esac
+
+dnl ===================================================================
+dnl ========================================================
+dnl By default, turn rtti and exceptions off on g++/egcs
+dnl ========================================================
+if test "$GNU_CXX"; then
+
+  AC_MSG_CHECKING(for C++ exceptions flag)
+
+  dnl They changed -f[no-]handle-exceptions to -f[no-]exceptions in g++ 2.8
+  AC_CACHE_VAL(ac_cv_cxx_exceptions_flags,
+  [echo "int main() { return 0; }" | cat > conftest.C
+
+  ${CXX-g++} ${CXXFLAGS} -c -fno-handle-exceptions conftest.C > conftest.out 2>&1
+
+  if egrep "warning.*renamed" conftest.out >/dev/null; then
+    ac_cv_cxx_exceptions_flags=${_COMPILER_PREFIX}-fno-exceptions
+  else
+    ac_cv_cxx_exceptions_flags=${_COMPILER_PREFIX}-fno-handle-exceptions
+  fi
+
+  rm -f conftest*])
+
+  AC_MSG_RESULT($ac_cv_cxx_exceptions_flags)
+  _MOZ_EXCEPTIONS_FLAGS_OFF=$ac_cv_cxx_exceptions_flags
+  _MOZ_EXCEPTIONS_FLAGS_ON=`echo $ac_cv_cxx_exceptions_flags | sed 's|no-||'`
+fi
+
+dnl ========================================================
+dnl Put your C++ language/feature checks below
+dnl ========================================================
+AC_LANG_CPLUSPLUS
+
+HAVE_GCC3_ABI=
+if test "$GNU_CC"; then
+  AC_CACHE_CHECK(for gcc 3.0 ABI,
+      ac_cv_gcc_three_abi,
+      [AC_TRY_COMPILE([],
+                      [
+#if defined(__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100 /* G++ V3 ABI */
+  return 0;
+#else
+#error Not gcc3.
+#endif
+                      ],
+                      ac_cv_gcc_three_abi="yes",
+                      ac_cv_gcc_three_abi="no")])
+  if test "$ac_cv_gcc_three_abi" = "yes"; then
+      TARGET_COMPILER_ABI="${TARGET_COMPILER_ABI-gcc3}"
+      HAVE_GCC3_ABI=1
+  else
+      TARGET_COMPILER_ABI="${TARGET_COMPILER_ABI-gcc2}"
+  fi
+fi
+AC_SUBST(HAVE_GCC3_ABI)
+
+
+AC_CACHE_CHECK(for C++ \"explicit\" keyword,
+               ac_cv_cpp_explicit,
+               [AC_TRY_COMPILE(class X {
+                               public: explicit X(int i) : i_(i) {}
+                               private: int i_;
+                               };,
+                               X x(3);,
+                               ac_cv_cpp_explicit=yes,
+                               ac_cv_cpp_explicit=no)])
+if test "$ac_cv_cpp_explicit" = yes ; then
+   AC_DEFINE(HAVE_CPP_EXPLICIT)
+fi
+
+AC_CACHE_CHECK(for C++ \"typename\" keyword,
+               ac_cv_cpp_typename,
+               [AC_TRY_COMPILE(class param {
+                               public:
+                                   typedef unsigned long num_type;
+                               };
+
+                               template <class T> class tplt {
+                               public:
+                                   typedef typename T::num_type t_num_type;
+                                   t_num_type foo(typename T::num_type num) {
+                                       return num;
+                                   }
+                               };,
+                               tplt<param> A;
+                               A.foo(0);,
+                               ac_cv_cpp_typename=yes,
+                               ac_cv_cpp_typename=no)])
+if test "$ac_cv_cpp_typename" = yes ; then
+   AC_DEFINE(HAVE_CPP_TYPENAME)
+fi
+
+dnl Check for support of modern template specialization syntax
+dnl Test code and requirement from scc@netscape.com.
+dnl Autoconf cut-and-paste job by waterson@netscape.com
+AC_CACHE_CHECK(for modern C++ template specialization syntax support,
+               ac_cv_cpp_modern_specialize_template_syntax,
+               [AC_TRY_COMPILE(template <class T> struct X { int a; };
+                               class Y {};
+                               template <> struct X<Y> { double a; };,
+                               X<int> int_x;
+                               X<Y> y_x;,
+                               ac_cv_cpp_modern_specialize_template_syntax=yes,
+                               ac_cv_cpp_modern_specialize_template_syntax=no)])
+if test "$ac_cv_cpp_modern_specialize_template_syntax" = yes ; then
+  AC_DEFINE(HAVE_CPP_MODERN_SPECIALIZE_TEMPLATE_SYNTAX)
+fi
+
+
+dnl Some compilers support only full specialization, and some don't.
+AC_CACHE_CHECK(whether partial template specialization works,
+               ac_cv_cpp_partial_specialization,
+               [AC_TRY_COMPILE(template <class T> class Foo {};
+                               template <class T> class Foo<T*> {};,
+                               return 0;,
+                               ac_cv_cpp_partial_specialization=yes,
+                               ac_cv_cpp_partial_specialization=no)])
+if test "$ac_cv_cpp_partial_specialization" = yes ; then
+  AC_DEFINE(HAVE_CPP_PARTIAL_SPECIALIZATION)
+fi
+
+dnl Some compilers have limited support for operators with templates;
+dnl specifically, it is necessary to define derived operators when a base
+dnl class's operator declaration should suffice.
+AC_CACHE_CHECK(whether operators must be re-defined for templates derived from templates,
+               ac_cv_need_derived_template_operators,
+               [AC_TRY_COMPILE([template <class T> class Base { };
+                                template <class T>
+                                Base<T> operator+(const Base<T>& lhs, const Base<T>& rhs) { return lhs; }
+                                template <class T> class Derived : public Base<T> { };],
+                               [Derived<char> a, b;
+                                Base<char> c = a + b;
+                                return 0;],
+                               ac_cv_need_derived_template_operators=no,
+                               ac_cv_need_derived_template_operators=yes)])
+if test "$ac_cv_need_derived_template_operators" = yes ; then
+  AC_DEFINE(NEED_CPP_DERIVED_TEMPLATE_OPERATORS)
+fi
+
+
+dnl Some compilers have trouble detecting that a template class
+dnl that derives from another template is actually an instance
+dnl of the base class. This test checks for that.
+AC_CACHE_CHECK(whether we need to cast a derived template to pass as its base class,
+               ac_cv_need_cpp_template_cast_to_base,
+               [AC_TRY_COMPILE([template <class T> class Base { };
+                                template <class T> class Derived : public Base<T> { };
+                                template <class T> int foo(const Base<T>&) { return 0; }],
+                               [Derived<char> bar; return foo(bar);],
+                               ac_cv_need_cpp_template_cast_to_base=no,
+                               ac_cv_need_cpp_template_cast_to_base=yes)])
+if test "$ac_cv_need_cpp_template_cast_to_base" = yes ; then
+  AC_DEFINE(NEED_CPP_TEMPLATE_CAST_TO_BASE)
+fi
+
+dnl Some compilers have trouble resolving the ambiguity between two
+dnl functions whose arguments differ only by cv-qualifications.
+AC_CACHE_CHECK(whether the compiler can resolve const ambiguities for templates,
+               ac_cv_can_resolve_const_ambiguity,
+               [AC_TRY_COMPILE([
+                                template <class T> class ptrClass {
+                                  public: T* ptr;
+                                };
+
+                                template <class T> T* a(ptrClass<T> *arg) {
+                                  return arg->ptr;
+                                }
+
+                                template <class T>
+                                const T* a(const ptrClass<T> *arg) {
+                                  return arg->ptr;
+                                }
+                               ],
+                               [ ptrClass<int> i;
+                                 a(&i); ],
+                               ac_cv_can_resolve_const_ambiguity=yes,
+                               ac_cv_can_resolve_const_ambiguity=no)])
+if test "$ac_cv_can_resolve_const_ambiguity" = no ; then
+  AC_DEFINE(CANT_RESOLVE_CPP_CONST_AMBIGUITY)
+fi
+
+dnl
+dnl We dont do exceptions on unix.  The only reason this used to be here
+dnl is that mozilla/xpcom/tests/TestCOMPtr.cpp has a test which uses 
+dnl exceptions.  But, we turn exceptions off by default and this test breaks.
+dnl So im commenting this out until someone writes some artificial 
+dnl intelligence to detect not only if the compiler has exceptions, but if 
+dnl they are enabled as well.
+dnl 
+dnl AC_CACHE_CHECK(for C++ \"exceptions\",
+dnl                ac_cv_cpp_exceptions,
+dnl                [AC_TRY_COMPILE(class X { public: X() {} };
+dnl                                static void F() { throw X(); },
+dnl                                try { F(); } catch(X & e) { },
+dnl                                ac_cv_cpp_exceptions=yes,
+dnl                                ac_cv_cpp_exceptions=no)])
+dnl if test $ac_cv_cpp_exceptions = yes ; then
+dnl    AC_DEFINE(HAVE_CPP_EXCEPTIONS)
+dnl fi
+
+dnl Some compilers have marginal |using| support; for example, gcc-2.7.2.3
+dnl supports it well enough to allow us to use it to change access, but not
+dnl to resolve ambiguity. The next two tests determine how well the |using|
+dnl keyword is supported.
+dnl
+dnl Check to see if we can change access with |using|.  Test both a
+dnl legal and an illegal example.
+AC_CACHE_CHECK(whether the C++ \"using\" keyword can change access,
+               ac_cv_cpp_access_changing_using2,
+               [AC_TRY_COMPILE(
+                   class A { protected: int foo() { return 0; } };
+                   class B : public A { public: using A::foo; };,
+                   B b; return b.foo();,
+                   [AC_TRY_COMPILE(
+                       class A { public: int foo() { return 1; } };
+                       class B : public A { private: using A::foo; };,
+                       B b; return b.foo();,
+                       ac_cv_cpp_access_changing_using2=no,
+                       ac_cv_cpp_access_changing_using2=yes)],
+                   ac_cv_cpp_access_changing_using2=no)])
+if test "$ac_cv_cpp_access_changing_using2" = yes ; then
+   AC_DEFINE(HAVE_CPP_ACCESS_CHANGING_USING)
+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 Check to see if the |std| namespace is supported. If so, we'll want
+dnl to qualify any standard library calls with "std::" to ensure that
+dnl those functions can be resolved.
+AC_CACHE_CHECK(for \"std::\" namespace,
+               ac_cv_cpp_namespace_std,
+               [AC_TRY_COMPILE([#include <algorithm>],
+                               [return std::min(0, 1);],
+                               ac_cv_cpp_namespace_std=yes,
+                               ac_cv_cpp_namespace_std=no)])
+if test "$ac_cv_cpp_namespace_std" = yes ; then
+   AC_DEFINE(HAVE_CPP_NAMESPACE_STD)
+fi
+
+dnl Older compilers are overly ambitious with respect to using the standard
+dnl template library's |operator!=()| when |operator==()| is defined. In
+dnl which case, defining |operator!=()| in addition to |operator==()| causes
+dnl ambiguity at compile-time. This test checks for that case.
+AC_CACHE_CHECK(whether standard template operator!=() is ambiguous,
+               ac_cv_cpp_unambiguous_std_notequal,
+               [AC_TRY_COMPILE([#include <algorithm>
+                                struct T1 {};
+                                int operator==(const T1&, const T1&) { return 0; }
+                                int operator!=(const T1&, const T1&) { return 0; }],
+                               [T1 a,b; return a != b;],
+                               ac_cv_cpp_unambiguous_std_notequal=unambiguous,
+                               ac_cv_cpp_unambiguous_std_notequal=ambiguous)])
+if test "$ac_cv_cpp_unambiguous_std_notequal" = unambiguous ; then
+  AC_DEFINE(HAVE_CPP_UNAMBIGUOUS_STD_NOTEQUAL)
+fi
+
+
+AC_CACHE_CHECK(for C++ reinterpret_cast,
+               ac_cv_cpp_reinterpret_cast,
+               [AC_TRY_COMPILE(struct X { int i; };
+                               struct Y { int i; };,
+                               X x; X*const z = &x;Y*y = reinterpret_cast<Y*>(z);,
+                               ac_cv_cpp_reinterpret_cast=yes,
+                               ac_cv_cpp_reinterpret_cast=no)])
+if test "$ac_cv_cpp_reinterpret_cast" = yes ; then
+   AC_DEFINE(HAVE_CPP_NEW_CASTS)
+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
+
+
+dnl note that this one is reversed - if the test fails, then
+dnl we require implementations of unused virtual methods. Which
+dnl really blows because it means we'll have useless vtable
+dnl bloat.
+AC_CACHE_CHECK(whether C++ requires implementation of unused virtual methods,
+               ac_cv_cpp_unused_required,
+               [AC_TRY_LINK(class X {private: virtual void never_called();};,
+                               X x;,
+                               ac_cv_cpp_unused_required=no,
+                               ac_cv_cpp_unused_required=yes)])
+if test "$ac_cv_cpp_unused_required" = yes ; then
+   AC_DEFINE(NEED_CPP_UNUSED_IMPLEMENTATIONS)
+fi
+
+
+dnl Some compilers have trouble comparing a constant reference to a templatized
+dnl class to zero, and require an explicit operator==() to be defined that takes
+dnl an int. This test separates the strong from the weak.
+
+AC_CACHE_CHECK(for trouble comparing to zero near std::operator!=(),
+               ac_cv_trouble_comparing_to_zero,
+               [AC_TRY_COMPILE([#include <algorithm>
+                                template <class T> class Foo {};
+                                class T2;
+                                template <class T> int operator==(const T2*, const T&) { return 0; }
+                                template <class T> int operator!=(const T2*, const T&) { return 0; }],
+                               [Foo<int> f; return (0 != f);],
+                               ac_cv_trouble_comparing_to_zero=no,
+                               ac_cv_trouble_comparing_to_zero=yes)])
+if test "$ac_cv_trouble_comparing_to_zero" = yes ; then
+  AC_DEFINE(HAVE_CPP_TROUBLE_COMPARING_TO_ZERO)
+fi
+
+
+
+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 	
+
+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 Mozilla specific options
+dnl ========================================================
+dnl The macros used for command line options
+dnl are defined in build/autoconf/altoptions.m4.
+
+
+dnl ========================================================
+dnl =
+dnl = Check for external package dependencies
+dnl =
+dnl ========================================================
+MOZ_ARG_HEADER(External Packages)
+
+dnl ========================================================
+dnl = If NSPR was not detected in the system, 
+dnl = use the one in the source tree (mozilla/nsprpub)
+dnl ========================================================
+MOZ_ARG_WITH_BOOL(system-nspr,
+[  --with-system-nspr      Use system installed NSPR],
+    _USE_SYSTEM_NSPR=1 )
+
+if test -n "$_USE_SYSTEM_NSPR"; then
+    AM_PATH_NSPR(4.0.0, [MOZ_NATIVE_NSPR=1], [MOZ_NATIVE_NSPR=])
+fi
+
+if test -z "$MOZ_NATIVE_NSPR"; then
+    NSPR_CFLAGS='`$(DEPTH)/nsprpub/config/nspr-config --prefix=$(DIST) --includedir=$(DIST)/include/nspr --cflags`'
+    # explicitly set libs for Visual Age C++ for OS/2
+    if test "$OS_ARCH" = "OS2" -a "$VACPP" = "yes"; then
+        NSPR_LIBS='$(DIST)/lib/nspr'$NSPR_VERSION'.lib $(DIST)/lib/plc'$NSPR_VERSION'.lib $(DIST)/lib/plds'$NSPR_VERSION'.lib '$_PTHREAD_LDFLAGS''
+    elif test "$OS_ARCH" = "WINCE"; then
+        NSPR_CFLAGS='-I$(DIST)/include/nspr'
+        NSPR_LIBS='$(DIST)/lib/nspr'$NSPR_VERSION'.lib $(DIST)/lib/plc'$NSPR_VERSION'.lib $(DIST)/lib/plds'$NSPR_VERSION'.lib '
+    elif test "$OS_ARCH" = "WINNT"; then
+        NSPR_CFLAGS='-I$(DIST)/include/nspr'
+        if test -n "$GNU_CC"; then
+            NSPR_LIBS="-L\$(DIST)/lib -lnspr$NSPR_VERSION -lplc$NSPR_VERSION -lplds$NSPR_VERSION"
+        else
+            NSPR_LIBS='$(DIST)/lib/nspr'$NSPR_VERSION'.lib $(DIST)/lib/plc'$NSPR_VERSION'.lib $(DIST)/lib/plds'$NSPR_VERSION'.lib '
+        fi
+    else
+        NSPR_LIBS='`$(DEPTH)/nsprpub/config/nspr-config --prefix=$(DIST) --libdir=$(DIST)/lib --libs`'
+    fi
+fi
+
+dnl ========================================================
+dnl = If NSS was not detected in the system, 
+dnl = use the one in the source tree (mozilla/security/nss)
+dnl ========================================================
+
+MOZ_ARG_WITH_BOOL(system-nss,
+[  --with-system-nss      Use system installed NSS],
+    _USE_SYSTEM_NSS=1 )
+
+if test -n "$_USE_SYSTEM_NSS"; then
+    AM_PATH_NSS(3.0.0, [MOZ_NATIVE_NSS=1], [MOZ_NATIVE_NSS=])
+fi
+
+if test -n "$MOZ_NATIVE_NSS"; then
+   NSS_LIBS="$NSS_LIBS -lcrmf"
+else
+   NSS_CFLAGS='-I$(DIST)/public/nss'
+   NSS_DEP_LIBS='\\\
+        $(DIST)/lib/$(LIB_PREFIX)crmf.$(LIB_SUFFIX) \\\
+        $(DIST)/lib/$(DLL_PREFIX)smime'$NSS_VERSION'$(DLL_SUFFIX) \\\
+        $(DIST)/lib/$(DLL_PREFIX)ssl'$NSS_VERSION'$(DLL_SUFFIX) \\\
+        $(DIST)/lib/$(DLL_PREFIX)nss'$NSS_VERSION'$(DLL_SUFFIX) \\\
+        $(DIST)/lib/$(DLL_PREFIX)softokn'$NSS_VERSION'$(DLL_SUFFIX)'
+
+   if test -z "$GNU_CC" && test "$OS_ARCH" = "WINNT" -o "$OS_ARCH" = "WINCE" -o "$OS_ARCH" = "OS2"; then
+       NSS_LIBS='\\\
+        $(DIST)/lib/$(LIB_PREFIX)crmf.$(LIB_SUFFIX) \\\
+        $(DIST)/lib/$(LIB_PREFIX)smime'$NSS_VERSION'.$(IMPORT_LIB_SUFFIX) \\\
+        $(DIST)/lib/$(LIB_PREFIX)ssl'$NSS_VERSION'.$(IMPORT_LIB_SUFFIX) \\\
+        $(DIST)/lib/$(LIB_PREFIX)nss'$NSS_VERSION'.$(IMPORT_LIB_SUFFIX) \\\
+        $(DIST)/lib/$(LIB_PREFIX)softokn'$NSS_VERSION'.$(IMPORT_LIB_SUFFIX)'
+   else
+       NSS_LIBS='-L$(LIBS_DIR)'" -lcrmf -lsmime$NSS_VERSION -lssl$NSS_VERSION -lnss$NSS_VERSION -lsoftokn$NSS_VERSION"
+   fi
+fi
+
+if test -z "$SKIP_LIBRARY_CHECKS"; then
+dnl system JPEG support
+dnl ========================================================
+MOZ_ARG_WITH_STRING(system-jpeg,
+[  --with-system-jpeg[=PFX]
+                          Use system libjpeg [installed at prefix PFX]],
+    JPEG_DIR=$withval)
+
+_SAVE_CFLAGS=$CFLAGS
+_SAVE_LDFLAGS=$LDFLAGS
+_SAVE_LIBS=$LIBS
+if test -n "${JPEG_DIR}" -a "${JPEG_DIR}" != "yes"; then
+    CFLAGS="-I${JPEG_DIR}/include $CFLAGS"
+    LDFLAGS="-L${JPEG_DIR}/lib $LDFLAGS"
+fi
+if test -z "$JPEG_DIR" -o "$JPEG_DIR" = no; then
+    SYSTEM_JPEG=
+else
+    AC_CHECK_LIB(jpeg, jpeg_destroy_compress, [SYSTEM_JPEG=1 JPEG_LIBS="-ljpeg $JPEG_LIBS"], SYSTEM_JPEG=, $JPEG_LIBS)
+fi
+
+if test "$SYSTEM_JPEG" = 1; then
+    LIBS="$JPEG_LIBS $LIBS"
+    AC_TRY_RUN( 
+	#include <stdio.h>
+	#include <sys/types.h>
+	#include <jpeglib.h>
+	int main () {
+	    #if JPEG_LIB_VERSION >= $MOZJPEG
+		exit(0);
+	    #else
+		exit(1);
+	    #endif
+	}
+	, SYSTEM_JPEG=1, [SYSTEM_JPEG= JPEG_CFLAGS= JPEG_LIBS=], SYSTEM_JPEG= ) 
+    rm -f core
+fi 
+CFLAGS=$_SAVE_CFLAGS
+LDFLAGS=$_SAVE_LDFLAGS
+LIBS=$_SAVE_LIBS
+
+if test -n "${JPEG_DIR}" -a -d "${JPEG_DIR}" -a "$SYSTEM_JPEG" = 1; then
+    JPEG_CFLAGS="-I${JPEG_DIR}/include"
+    JPEG_LIBS="-L${JPEG_DIR}/lib ${JPEG_LIBS}"
+fi
+
+dnl system ZLIB support
+dnl ========================================================
+MOZ_ARG_WITH_STRING(system-zlib,
+[  --with-system-zlib[=PFX]
+                          Use system libz [installed at prefix PFX]],
+    ZLIB_DIR=$withval)
+
+_SAVE_CFLAGS=$CFLAGS
+_SAVE_LDFLAGS=$LDFLAGS
+_SAVE_LIBS=$LIBS
+if test -n "${ZLIB_DIR}" -a "${ZLIB_DIR}" != "yes"; then
+    CFLAGS="-I${ZLIB_DIR}/include $CFLAGS"
+    LDFLAGS="-L${ZLIB_DIR}/lib $LDFLAGS"
+fi
+if test -z "$ZLIB_DIR" -o "$ZLIB_DIR" = no; then
+    SYSTEM_ZLIB=
+else
+    AC_CHECK_LIB(z, gzread, [SYSTEM_ZLIB=1 ZLIB_LIBS="-lz $ZLIB_LIBS"], 
+	[SYSTEM_ZLIB= ZLIB_CFLAGS= ZLIB_LIBS=], $ZLIB_LIBS)
+fi
+if test "$SYSTEM_ZLIB" = 1; then
+    LIBS="$ZLIB_LIBS $LIBS"
+    AC_TRY_RUN([
+    #include <stdio.h>
+    #include <string.h>
+    #include <zlib.h>
+    int parse_version(const char *str, int *ver) {
+      return (sscanf(str, "%d.%d.%d", ver, ver+1, ver+2)==3?0:1);
+    }
+    int main() {
+      int sys[3], req[3];
+      if (parse_version(zlib_version, sys) || parse_version("$MOZZLIB", req))
+        exit(1);
+      if ((sys[0] == req[0]) &&
+          ((sys[1] > req[1]) || ((sys[1] == req[1]) && (sys[2] >= req[2]))))
+        exit(0);
+      else
+        exit(1);
+    }
+    ], SYSTEM_ZLIB=1, [SYSTEM_ZLIB= ZLIB_CFLAGS= ZLIB_LIBS=], SYSTEM_ZLIB= ) 
+    rm -f core
+fi
+CFLAGS=$_SAVE_CFLAGS
+LDFLAGS=$_SAVE_LDFLAGS
+LIBS=$_SAVE_LIBS
+
+if test "${ZLIB_DIR}" -a -d "${ZLIB_DIR}" -a "$SYSTEM_ZLIB" = 1; then
+    ZLIB_CFLAGS="-I${ZLIB_DIR}/include"
+    ZLIB_LIBS="-L${ZLIB_DIR}/lib ${ZLIB_LIBS}"
+fi
+
+dnl system PNG Support
+dnl ========================================================
+MOZ_ARG_WITH_STRING(system-png, 
+[  --with-system-png[=PFX]
+                          Use system libpng [installed at prefix PFX]],
+    PNG_DIR=$withval)
+
+_SAVE_CFLAGS=$CFLAGS
+_SAVE_LDFLAGS=$LDFLAGS
+_SAVE_LIBS=$LIBS
+CFLAGS="$ZLIB_CFLAGS $CFLAGS"
+LDFLAGS="$ZLIB_LIBS -lz $LDFLAGS"
+if test -n "${PNG_DIR}" -a "${PNG_DIR}" != "yes"; then
+    CFLAGS="-I${PNG_DIR}/include $CFLAGS"
+    LDFLAGS="-L${PNG_DIR}/lib $LDFLAGS"
+fi
+if test -z "$PNG_DIR" -o "$PNG_DIR" = no; then
+    SYSTEM_PNG=
+else
+    AC_CHECK_LIB(png, png_get_valid, [SYSTEM_PNG=1 PNG_LIBS="-lpng $PNG_LIBS"],
+                 SYSTEM_PNG=, $PNG_LIBS)
+fi
+if test "$SYSTEM_PNG" = 1; then
+    LIBS="$PNG_LIBS $LIBS"
+    AC_TRY_RUN(
+	#include <stdio.h>
+	#include <sys/types.h>
+	#include <png.h>
+	int main () {
+	    #if PNG_LIBPNG_VER >= $MOZPNG
+		exit(0);
+	    #else
+		exit(1);
+	    #endif
+	}
+	, SYSTEM_PNG=1, [SYSTEM_PNG= PNG_CFLAGS= PNG_LIBS=], SYSTEM_PNG= ) 
+    rm -f core
+fi
+CFLAGS=$_SAVE_CFLAGS
+LDFLAGS=$_SAVE_LDFLAGS
+LIBS=$_SAVE_LIBS
+
+if test "${PNG_DIR}" -a -d "${PNG_DIR}" -a "$SYSTEM_PNG" = 1; then
+    PNG_CFLAGS="-I${PNG_DIR}/include"
+    PNG_LIBS="-L${PNG_DIR}/lib ${PNG_LIBS}"
+fi
+
+fi # SKIP_LIBRARY_CHECKS
+
+dnl ========================================================
+dnl Java SDK support
+dnl ========================================================
+JAVA_INCLUDE_PATH=
+MOZ_ARG_WITH_STRING(java-include-path,
+[  --with-java-include-path=dir   Location of Java SDK headers],
+    JAVA_INCLUDE_PATH=$withval)
+
+JAVA_BIN_PATH=
+MOZ_ARG_WITH_STRING(java-bin-path,
+[  --with-java-bin-path=dir   Location of Java binaries (java, javac, jar)],
+    JAVA_BIN_PATH=$withval)
+
+dnl ========================================================
+dnl = 
+dnl = Toolkit Options
+dnl = 
+dnl ========================================================
+MOZ_ARG_HEADER(Toolkit Options)
+
+    dnl ========================================================
+    dnl = Select the default toolkit
+    dnl ========================================================
+	MOZ_ARG_ENABLE_STRING(default-toolkit,
+	[  --enable-default-toolkit=TK
+                          Select default toolkit
+                          Platform specific defaults:
+                            BeOS - beos
+                            Mac OS X - mac (carbon)
+                            Neutrino/QNX - photon
+                            OS/2 - os2
+                            Win32 - windows
+                            * - gtk],
+    [ _DEFAULT_TOOLKIT=$enableval ],
+    [ _DEFAULT_TOOLKIT=$_PLATFORM_DEFAULT_TOOLKIT])
+
+    if test "$_DEFAULT_TOOLKIT" = "gtk" \
+        -o "$_DEFAULT_TOOLKIT" = "qt" \
+        -o "$_DEFAULT_TOOLKIT" = "gtk2" \
+        -o "$_DEFAULT_TOOLKIT" = "xlib" \
+        -o "$_DEFAULT_TOOLKIT" = "os2" \
+        -o "$_DEFAULT_TOOLKIT" = "beos" \
+        -o "$_DEFAULT_TOOLKIT" = "photon" \
+        -o "$_DEFAULT_TOOLKIT" = "mac" \
+        -o "$_DEFAULT_TOOLKIT" = "windows" \
+        -o "$_DEFAULT_TOOLKIT" = "cocoa" \
+        -o "$_DEFAULT_TOOLKIT" = "cairo-gtk2" \
+        -o "$_DEFAULT_TOOLKIT" = "cairo-xlib"
+    then
+        dnl nglayout only supports building with one toolkit,
+        dnl so ignore everything after the first comma (",").
+        MOZ_WIDGET_TOOLKIT=`echo "$_DEFAULT_TOOLKIT" | sed -e "s/,.*$//"`
+    else
+        if test "$no_x" != "yes"; then
+            AC_MSG_ERROR([Toolkit must be xlib, gtk, gtk2 or qt.])
+        else
+            AC_MSG_ERROR([Toolkit must be $_PLATFORM_DEFAULT_TOOLKIT.])
+        fi
+    fi
+
+AC_DEFINE_UNQUOTED(MOZ_DEFAULT_TOOLKIT,"$MOZ_WIDGET_TOOLKIT")
+
+dnl ========================================================
+dnl = Enable the toolkit as needed                         =
+dnl ========================================================
+
+case "$MOZ_WIDGET_TOOLKIT" in
+gtk)
+	MOZ_ENABLE_GTK=1
+    MOZ_ENABLE_XREMOTE=1
+    if test "$_HAVE_FREETYPE2"; then
+        MOZ_ENABLE_FREETYPE2=1
+    fi
+    MOZ_ENABLE_XPRINT=1
+    TK_CFLAGS='$(MOZ_GTK_CFLAGS)'
+    TK_LIBS='$(MOZ_GTK_LDFLAGS)'
+	AC_DEFINE(MOZ_WIDGET_GTK)
+    ;;
+
+gtk2)
+    MOZ_ENABLE_GTK2=1
+    MOZ_ENABLE_XREMOTE=1
+    MOZ_ENABLE_COREXFONTS=${MOZ_ENABLE_COREXFONTS-}
+    TK_CFLAGS='$(MOZ_GTK2_CFLAGS)'
+    TK_LIBS='$(MOZ_GTK2_LIBS)'
+    AC_DEFINE(MOZ_WIDGET_GTK2)
+    ;;
+
+xlib)
+	MOZ_ENABLE_XLIB=1
+    if test "$_HAVE_FREETYPE2"; then
+        MOZ_ENABLE_FREETYPE2=1
+    fi
+    MOZ_ENABLE_XPRINT=1
+	TK_CFLAGS='$(MOZ_XLIB_CFLAGS)'
+	TK_LIBS='$(MOZ_XLIB_LDFLAGS)'
+	AC_DEFINE(MOZ_WIDGET_XLIB)
+    ;;
+
+qt)
+    MOZ_ENABLE_QT=1
+    if test "$_HAVE_FREETYPE2"; then
+        MOZ_ENABLE_FREETYPE2=1
+    fi
+    MOZ_ENABLE_XPRINT=1
+    TK_CFLAGS='$(MOZ_QT_CFLAGS)'
+    TK_LIBS='$(MOZ_QT_LDFLAGS)'
+    AC_DEFINE(MOZ_WIDGET_QT)
+    ;;
+
+photon)
+	MOZ_ENABLE_PHOTON=1
+	AC_DEFINE(MOZ_WIDGET_PHOTON)
+    ;;
+mac|cocoa)
+    TK_LIBS='-framework Carbon'
+    TK_CFLAGS="-I${MACOS_SDK_DIR}/Developer/Headers/FlatCarbon"
+    CFLAGS="$CFLAGS $TK_CFLAGS"
+    CXXFLAGS="$CXXFLAGS $TK_CFLAGS"
+    MOZ_USER_DIR="Mozilla"
+    AC_DEFINE(XP_MACOSX)
+    AC_DEFINE(TARGET_CARBON)
+    AC_DEFINE(TARGET_API_MAC_CARBON)
+    if test "$MOZ_WIDGET_TOOLKIT" = "cocoa"; then
+        MOZ_ENABLE_COCOA=1
+        AC_DEFINE(MOZ_WIDGET_COCOA)
+    fi
+    ;;
+
+cairo-gtk2)
+    MOZ_WIDGET_TOOLKIT=gtk2
+    MOZ_GFX_TOOLKIT=cairo
+    MOZ_ENABLE_CAIRO_GFX=1
+    MOZ_ENABLE_GTK2=1
+    MOZ_ENABLE_XREMOTE=1
+    TK_CFLAGS='$(MOZ_GTK2_CFLAGS) $(MOZ_CAIRO_CFLAGS)'
+    TK_LIBS='$(MOZ_GTK2_LIBS) $(MOZ_CAIRO_LIBS)'
+    AC_DEFINE(MOZ_WIDGET_GTK2)
+    ;;
+cairo-xlib)
+    MOZ_WIDGET_TOOLKIT=xlib
+    MOZ_GFX_TOOLKIT=cairo
+    MOZ_ENABLE_CAIRO_GFX=1
+	MOZ_ENABLE_XLIB=1
+	TK_CFLAGS='$(MOZ_XLIB_CFLAGS) $(MOZ_CAIRO_FLAGS)'
+	TK_LIBS='$(MOZ_XLIB_LDFLAGS) $(MOZ_CAIRO_LIBS)'
+	AC_DEFINE(MOZ_WIDGET_XLIB)
+    ;;
+esac
+
+if test "$MOZ_ENABLE_XREMOTE"; then
+    AC_DEFINE(MOZ_ENABLE_XREMOTE)
+fi
+
+if test "$COMPILE_ENVIRONMENT"; then
+if test "$MOZ_ENABLE_GTK"
+then
+    AM_PATH_GTK($GTK_VERSION,,
+      AC_MSG_ERROR(Test for GTK failed.))
+
+    MOZ_GTK_LDFLAGS=$GTK_LIBS
+    MOZ_GTK_CFLAGS=$GTK_CFLAGS
+fi
+
+if test "$MOZ_ENABLE_GTK2"
+then
+    PKG_CHECK_MODULES(MOZ_GTK2, gtk+-2.0 >= 1.3.7)
+fi
+
+if test "$MOZ_ENABLE_XLIB"
+then
+    MOZ_XLIB_CFLAGS="$X_CFLAGS"
+    MOZ_XLIB_LDFLAGS="$XLDFLAGS"
+    MOZ_XLIB_LDFLAGS="$MOZ_XLIB_LDFLAGS $XEXT_LIBS $X11_LIBS"
+fi
+
+if test "$MOZ_ENABLE_QT"
+then
+    MOZ_ARG_WITH_STRING(qtdir,
+    [  --with-qtdir=\$dir       Specify Qt directory ],
+    [ QTDIR=$withval])
+
+    if test -z "$QTDIR"; then
+      QTDIR="/usr"
+    fi
+    QTINCDIR="/include/qt"
+    if test ! -d "$QTDIR$QTINCDIR"; then
+       QTINCDIR="/include/X11/qt"
+    fi
+    if test ! -d "$QTDIR$QTINCDIR"; then
+       QTINCDIR="/include"
+    fi
+
+    if test -x "$QTDIR/bin/moc"; then
+      HOST_MOC="$QTDIR/bin/moc"
+    else
+      AC_CHECK_PROGS(HOST_MOC, moc, "")
+    fi
+    if test -z "$HOST_MOC"; then
+      AC_MSG_ERROR([no acceptable moc preprocessor found])
+    fi
+    MOC=$HOST_MOC
+
+    QT_CFLAGS="-I${QTDIR}${QTINCDIR} -DQT_GENUINE_STR -DQT_NO_STL"
+    if test -z "$MOZ_DEBUG"; then
+      QT_CFLAGS="$QT_CFLAGS -DQT_NO_DEBUG -DNO_DEBUG"
+    fi
+    _SAVE_LDFLAGS=$LDFLAGS
+    QT_LDFLAGS=-L${QTDIR}/lib
+    LDFLAGS="$LDFLAGS $QT_LDFLAGS"
+    AC_LANG_SAVE
+    AC_LANG_CPLUSPLUS
+    AC_CHECK_LIB(qt, main, QT_LIB=-lqt,
+        AC_CHECK_LIB(qt-mt, main, QT_LIB=-lqt-mt,
+            AC_MSG_ERROR([Cannot find QT libraries.])))
+    LDFLAGS=$_SAVE_LDFLAGS
+    QT_LIBS="-L/usr/X11R6/lib $QT_LDFLAGS $QT_LIB -lXext -lX11"
+
+    MOZ_QT_LDFLAGS=$QT_LIBS
+    MOZ_QT_CFLAGS=$QT_CFLAGS
+
+    _SAVE_CXXFLAGS=$CXXFLAGS
+    _SAVE_LIBS=$LIBS
+
+    CXXFLAGS="$CXXFLAGS $QT_CFLAGS"
+    LIBS="$LIBS $QT_LIBS"
+    
+    AC_MSG_CHECKING(Qt - version >= $QT_VERSION)
+    AC_TRY_COMPILE([#include <qglobal.h>],
+    [
+        #if (QT_VERSION < $QT_VERSION_NUM)
+            #error  "QT_VERSION too old"
+        #endif
+    ],result="yes",result="no")
+
+    AC_MSG_RESULT("$result")
+    if test "$result" = "no"; then
+        AC_MSG_ERROR([Qt Mozilla requires at least version $QT_VERSION of Qt])
+    fi
+    CXXFLAGS=$_SAVE_CXXFLAGS
+    LIBS=$_SAVE_LIBS
+
+    AC_LANG_RESTORE
+fi
+fi # COMPILE_ENVIRONMENT
+
+AC_SUBST(MOZ_DEFAULT_TOOLKIT)
+
+AC_SUBST(GTK_CONFIG)
+AC_SUBST(TK_CFLAGS)
+AC_SUBST(TK_LIBS)
+
+AC_SUBST(MOZ_ENABLE_GTK)
+AC_SUBST(MOZ_ENABLE_XLIB)
+AC_SUBST(MOZ_ENABLE_GTK2)
+AC_SUBST(MOZ_ENABLE_QT)
+AC_SUBST(MOZ_ENABLE_PHOTON)
+AC_SUBST(MOZ_ENABLE_COCOA)
+AC_SUBST(MOZ_ENABLE_CAIRO_GFX)
+AC_SUBST(MOZ_ENABLE_XREMOTE)
+AC_SUBST(MOZ_GTK_CFLAGS)
+AC_SUBST(MOZ_GTK_LDFLAGS)
+AC_SUBST(MOZ_GTK2_CFLAGS)
+AC_SUBST(MOZ_GTK2_LIBS)
+AC_SUBST(MOZ_XLIB_CFLAGS)
+AC_SUBST(MOZ_XLIB_LDFLAGS)
+AC_SUBST(MOZ_QT_CFLAGS)
+AC_SUBST(MOZ_QT_LDFLAGS)
+
+AC_SUBST(MOC)
+
+if test "$MOZ_ENABLE_GTK" \
+|| test "$MOZ_ENABLE_QT" \
+|| test "$MOZ_ENABLE_XLIB" \
+|| test "$MOZ_ENABLE_GTK2"
+then
+    AC_DEFINE(MOZ_X11)
+    MOZ_X11=1
+fi
+AC_SUBST(MOZ_X11)
+
+dnl ========================================================
+dnl =
+dnl = Application
+dnl =
+dnl ========================================================
+
+MOZ_ARG_HEADER(Application)
+
+ACCESSIBILITY=1
+BUILD_MODULES=all
+BUILD_SHARED_LIBS=1
+BUILD_STATIC_LIBS=
+ENABLE_TESTS=1
+MOZ_ACTIVEX_SCRIPTING_SUPPORT=
+MOZ_BRANDING_DIRECTORY=
+MOZ_CALENDAR=
+MOZ_DBGRINFO_MODULES=
+MOZ_ENABLE_CANVAS=1
+MOZ_ENABLE_LIBXUL=
+MOZ_EXTENSIONS_ALL=" cookie wallet content-packs xml-rpc xmlextras help p3p pref transformiix venkman inspector irc universalchardet typeaheadfind webservices spellcheck gnomevfs auth sroaming xmlterm datetime finger cview layout-debug tasks sql xforms permissions schema-validation reporter"
+MOZ_FEEDS=1
+MOZ_IMG_DECODERS_DEFAULT="png gif jpeg bmp xbm"
+MOZ_IMG_ENCODERS_DEFAULT="png jpeg"
+MOZ_IPCD=
+MOZ_JAVAXPCOM=
+MOZ_JSDEBUGGER=1
+MOZ_JSLOADER=1
+MOZ_LIBART_CFLAGS=
+MOZ_LIBART_LIBS=
+MOZ_MAIL_NEWS=
+MOZ_MATHML=1
+MOZ_MORK=1
+MOZ_MORKREADER=
+MOZ_NO_ACTIVEX_SUPPORT=1
+MOZ_NO_INSPECTOR_APIS=
+MOZ_NO_XPCOM_OBSOLETE=
+MOZ_NO_FAST_LOAD=
+MOZ_OJI=1
+MOZ_PLACES=
+MOZ_PLAINTEXT_EDITOR_ONLY=
+MOZ_PLUGINS=1
+MOZ_PROFILELOCKING=1
+MOZ_PROFILESHARING=1
+MOZ_PSM=1
+MOZ_PYTHON=
+MOZ_PYTHON_DEBUG_SUFFIX=
+MOZ_PYTHON_DLL_SUFFIX=
+MOZ_PYTHON_INCLUDES=
+MOZ_PYTHON_LIBS=
+MOZ_PYTHON_PREFIX=
+MOZ_PYTHON_VER=
+MOZ_PYTHON_VER_DOTTED=
+MOZ_REFLOW_PERF=
+MOZ_REORDER=
+MOZ_SAFE_BROWSING=
+MOZ_SINGLE_PROFILE=
+MOZ_STATIC_COMPONENT_LIBS=
+MOZ_STATIC_MAIL_BUILD=
+MOZ_STORAGE=1
+MOZ_TIMELINE=
+MOZ_UI_LOCALE=en-US
+MOZ_USE_NATIVE_UCONV=
+MOZ_V1_STRING_ABI=1
+MOZ_VIEW_SOURCE=1
+MOZ_XPFE_COMPONENTS=1
+MOZ_XPINSTALL=1
+MOZ_XTF=1
+MOZ_XUL=1
+NS_PRINTING=1
+NECKO_PROTOCOLS_DEFAULT="about data file ftp gopher http res viewsource"
+NECKO_COOKIES=1
+NECKO_DISK_CACHE=1
+NECKO_SMALL_BUFFERS=
+SUNCTL=
+JS_STATIC_BUILD=
+
+dnl canvas and cairo won't build with gtk1, so disable it
+dnl ========================================================
+if test "$MOZ_ENABLE_GTK"; then
+    MOZ_ENABLE_CANVAS=
+fi
+
+case "$target_os" in
+    msvc*|mks*|cygwin*|mingw*)
+        if test -z "$GNU_CC"; then 
+            MOZ_NO_ACTIVEX_SUPPORT=
+            MOZ_ACTIVEX_SCRIPTING_SUPPORT=1
+        fi
+        ;;
+esac
+ 
+MOZ_ARG_ENABLE_STRING(application,
+[  --enable-application=APP
+                          Options include:
+                            suite
+                            browser (Firefox)
+                            mail (Thunderbird)
+                            minimo
+                            composer
+                            calendar (Sunbird)
+                            xulrunner
+                            macbrowser (Camino)
+                            standalone (use this for standalone
+                              xpcom/xpconnect or to manually drive a build)],
+[ MOZ_BUILD_APP=$enableval ] )
+
+case "$MOZ_BUILD_APP" in
+suite)
+  MOZ_APP_NAME=seamonkey
+  MOZ_APP_DISPLAYNAME=SeaMonkey
+  MOZ_MAIL_NEWS=1
+  MOZ_LDAP_XPCOM=1
+  MOZ_COMPOSER=1
+  MOZ_SUITE=1
+  MOZ_PROFILESHARING=
+  MOZ_APP_VERSION=$SEAMONKEY_VERSION
+  MOZ_EXTENSIONS_DEFAULT=" cookie wallet content-packs xml-rpc xmlextras help p3p pref transformiix venkman inspector irc universalchardet typeaheadfind webservices spellcheck gnomevfs auth sroaming permissions reporter"
+  AC_DEFINE(MOZ_SUITE)
+  ;;
+
+browser)
+  MOZ_APP_NAME=firefox
+  MOZ_APP_DISPLAYNAME=BonEcho
+  MOZ_XUL_APP=1
+  MOZ_PHOENIX=1
+  MOZ_SAFE_BROWSING=1
+  MOZ_APP_VERSION=$FIREFOX_VERSION
+  MOZ_EXTENSIONS_DEFAULT=" cookie xml-rpc xmlextras pref transformiix universalchardet webservices inspector gnomevfs auth permissions reporter spellcheck"
+  AC_DEFINE(MOZ_PHOENIX)
+  ;;
+
+minimo)
+  MOZ_APP_NAME=minimo
+  MOZ_APP_DISPLAYNAME=minimo
+  ACCESSIBILITY=
+  AC_DEFINE(MINIMO)
+  ENABLE_TESTS=
+  MINIMO=1
+  MOZ_ACTIVEX_SCRIPTING_SUPPORT=
+  MOZ_APP_VERSION=`cat $topsrcdir/minimo/config/version.txt`
+  MOZ_COMPOSER=
+  MOZ_ENABLE_CANVAS=
+  MOZ_ENABLE_POSTSCRIPT=
+  MOZ_EXTENSIONS_DEFAULT=" cookie xmlextras transformiix spatialnavigation permissions"
+  MOZ_IMG_DECODERS_DEFAULT="png gif jpeg bmp"
+  MOZ_IMG_ENCODERS_DEFAULT=
+  MOZ_IMG_ENCODERS=
+  MOZ_INSTALLER=
+  MOZ_JSDEBUGGER=
+  MOZ_LDAP_XPCOM=
+  MOZ_MAIL_NEWS=
+  MOZ_MATHML=
+  MOZ_AUTH_EXTENSION=
+  MOZ_NO_ACTIVEX_SUPPORT=1
+  MOZ_NO_XPCOM_OBSOLETE=1
+  MOZ_NO_FAST_LOAD=1
+  MOZ_NO_INSPECTOR_APIS=1
+  MOZ_OJI=
+  MOZ_PLAINTEXT_EDITOR_ONLY=1
+  MOZ_PREF_EXTENSIONS=
+  MOZ_PROFILELOCKING=
+  MOZ_PROFILESHARING=
+  MOZ_STORAGE=
+  MOZ_SINGLE_PROFILE=1
+  MOZ_UNIVERSALCHARDET=
+  MOZ_UPDATER=
+  MOZ_URL_CLASSIFIER=
+  MOZ_USE_NATIVE_UCONV=1
+  MOZ_V1_STRING_ABI=
+  MOZ_VIEW_SOURCE=
+  MOZ_XPFE_COMPONENTS=
+  MOZ_XPINSTALL=
+  MOZ_XTF=
+  MOZ_XUL_APP=1
+  NECKO_PROTOCOLS_DEFAULT="about data http file res"
+  NECKO_SMALL_BUFFERS=1
+  NS_DISABLE_LOGGING=1
+  NS_PRINTING=
+  MOZ_WEBSERVICES=
+  JS_STATIC_BUILD=1
+  ;;
+
+mail)
+  MOZ_APP_NAME=thunderbird
+  MOZ_APP_DISPLAYNAME=Thunderbird
+  MOZ_XUL_APP=1
+  MOZ_THUNDERBIRD=1
+  MOZ_MATHML=
+  MOZ_NO_ACTIVEX_SUPPORT=1
+  MOZ_ACTIVEX_SCRIPTING_SUPPORT=
+  ENABLE_TESTS=
+  MOZ_OJI=
+  MOZ_PLUGINS=
+  NECKO_DISK_CACHE=
+  NECKO_PROTOCOLS="http,file,jar,viewsource,res,data"
+  MOZ_ENABLE_CANVAS=
+  MOZ_IMG_DECODERS_DEFAULT=`echo "$MOZ_IMG_DECODERS_DEFAULT" | sed "s/ xbm//"`
+  MOZ_MAIL_NEWS=1
+  MOZ_LDAP_XPCOM=1
+  MOZ_STATIC_MAIL_BUILD=1
+  MOZ_COMPOSER=1
+  MOZ_SAFE_BROWSING=1
+  MOZ_APP_VERSION=$THUNDERBIRD_VERSION
+  MOZ_EXTENSIONS_DEFAULT=" wallet spellcheck xmlextras transformiix pref webservices universalchardet auth"
+  AC_DEFINE(MOZ_THUNDERBIRD)
+  ;;
+
+composer)
+  MOZ_APP_NAME=nvu
+  MOZ_APP_DISPLAYNAME=NVU
+  MOZ_XUL_APP=1
+  MOZ_STANDALONE_COMPOSER=1
+  MOZ_COMPOSER=1
+  MOZ_APP_VERSION=0.17+
+  AC_DEFINE(MOZ_STANDALONE_COMPOSER)
+  ;;
+
+calendar)
+  MOZ_APP_NAME=sunbird
+  MOZ_APP_DISPLAYNAME=Calendar
+  MOZ_XUL_APP=1
+  MOZ_SUNBIRD=1
+  MOZ_CALENDAR=1
+  MOZ_APP_VERSION=$SUNBIRD_VERSION
+  MOZ_PLAINTEXT_EDITOR_ONLY=1
+  NECKO_PROTOCOLS_DEFAULT="about http ftp file res viewsource"
+  MOZ_NO_ACTIVEX_SUPPORT=1
+  MOZ_ACTIVEX_SCRIPTING_SUPPORT=
+  MOZ_INSTALLER=
+  MOZ_MATHML=
+  NECKO_DISK_CACHE=
+  MOZ_OJI=
+  MOZ_PLUGINS=
+  NECKO_COOKIES=
+  MOZ_EXTENSIONS_DEFAULT=" xmlextras transformiix"
+  AC_DEFINE(MOZ_SUNBIRD)
+  ;;
+
+xulrunner)
+  MOZ_APP_NAME=xulrunner
+  MOZ_APP_DISPLAYNAME=XULRunner
+  MOZ_XUL_APP=1
+  MOZ_XULRUNNER=1
+  MOZ_ENABLE_LIBXUL=1
+  MOZ_APP_VERSION=$MOZILLA_VERSION
+  MOZ_JAVAXPCOM=1
+  MOZ_EXTENSIONS_DEFAULT=" xml-rpc xmlextras pref transformiix universalchardet webservices gnomevfs auth"
+  AC_DEFINE(MOZ_XULRUNNER)
+  ;;
+
+macbrowser) 
+  MOZ_APP_NAME=mozilla
+  MOZ_APP_DISPLAYNAME=Mozilla
+  MOZ_APP_VERSION=$MOZILLA_VERSION
+  MOZ_STORAGE=1
+  MOZ_EXTENSIONS_DEFAULT=" cookie xmlextras universalchardet typeaheadfind transformiix permissions spellcheck auth"
+  AC_DEFINE(MOZ_MACBROWSER)
+  ;;
+
+standalone) 
+  MOZ_APP_NAME=mozilla
+  MOZ_APP_DISPLAYNAME=Mozilla
+  MOZ_APP_VERSION=$MOZILLA_VERSION
+  ;;
+
+*)
+  AC_MSG_ERROR([--enable-application=APP is required])
+  ;;
+
+esac
+
+AC_SUBST(MOZ_BUILD_APP)
+AC_SUBST(MOZ_XUL_APP)
+AC_SUBST(MOZ_SUITE)
+AC_SUBST(MOZ_PHOENIX)
+AC_SUBST(MOZ_THUNDERBIRD)
+AC_SUBST(MOZ_STANDALONE_COMPOSER)
+AC_SUBST(MOZ_SUNBIRD)
+AC_SUBST(MOZ_XULRUNNER)
+
+AC_DEFINE_UNQUOTED(MOZ_BUILD_APP,$MOZ_BUILD_APP)
+
+if test "$MOZ_XUL_APP"; then
+  MOZ_SINGLE_PROFILE=1
+  MOZ_PROFILESHARING=
+  AC_DEFINE(MOZ_XUL_APP)
+fi
+
+dnl check whether to enable canvas
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(canvas,
+[  --enable-canvas          Enable html:canvas feature],
+    MOZ_ENABLE_CANVAS=1,
+    MOZ_ENABLE_CANVAS= )
+if test "$MOZ_ENABLE_CANVAS"; then
+    AC_DEFINE(MOZ_ENABLE_CANVAS)
+fi
+AC_SUBST(MOZ_ENABLE_CANVAS)
+
+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 = Calendar client
+dnl =========================================================
+MOZ_ARG_ENABLE_BOOL(calendar,,
+    MOZ_OLD_CALENDAR=1,
+    MOZ_OLD_CALENDAR= )
+
+if test "$MOZ_OLD_CALENDAR"; then
+    AC_MSG_WARN([Building with the calendar extension is no longer supported.])
+    if test "$MOZ_THUNDERBIRD"; then
+        AC_MSG_WARN([Since you're trying to build mail, you could try adding])
+        AC_MSG_WARN(['--enable-extensions=default,lightning' to your mozconfig])
+        AC_MSG_WARN([and building WITH A FRESH TREE.])
+    fi
+    AC_MSG_WARN([For more information, please visit:])
+    AC_MSG_ERROR([http://www.mozilla.org/projects/calendar/])
+fi
+
+AC_SUBST(MOZ_CALENDAR)
+
+dnl =========================================================
+dnl = Mail & News
+dnl =========================================================
+MOZ_ARG_DISABLE_BOOL(mailnews,
+[  --disable-mailnews      Disable building of mail & news components],
+    MOZ_MAIL_NEWS=,
+    MOZ_MAIL_NEWS=1 )
+AC_SUBST(MOZ_MAIL_NEWS)
+
+dnl ========================================================
+dnl static mail build off by default 
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(static-mail,
+[  --enable-static-mail Enable static mail build support],
+    MOZ_STATIC_MAIL_BUILD=1,
+    MOZ_STATIC_MAIL_BUILD= )
+
+if test "$MOZ_STATIC_MAIL_BUILD"; then
+    AC_DEFINE(MOZ_STATIC_MAIL_BUILD)
+fi
+
+AC_SUBST(MOZ_STATIC_MAIL_BUILD)
+
+dnl =========================================================
+dnl = LDAP
+dnl =========================================================
+MOZ_ARG_DISABLE_BOOL(ldap,
+[  --disable-ldap          Disable LDAP support],
+    MOZ_LDAP_XPCOM=,
+    MOZ_LDAP_XPCOM=1)
+
+dnl ========================================================
+dnl = Trademarked Branding 
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(official-branding,
+[  --enable-official-branding Enable Official mozilla.org Branding
+                          Do not distribute builds with
+                          --enable-official-branding unless you have
+                          permission to use trademarks per
+                          http://www.mozilla.org/foundation/trademarks/ .],
+[case "$MOZ_BUILD_APP" in
+browser)
+    MOZ_BRANDING_DIRECTORY=other-licenses/branding/firefox
+    MOZ_APP_DISPLAYNAME=Firefox
+    ;;
+
+calendar)
+    MOZ_BRANDING_DIRECTORY=other-licenses/branding/sunbird
+    MOZ_APP_DISPLAYNAME=Sunbird
+    ;;
+
+mail)
+    MOZ_BRANDING_DIRECTORY=other-licenses/branding/thunderbird
+    ;;
+
+*)]
+    AC_MSG_ERROR([Official branding is only available for Firefox Sunbird and Thunderbird.])
+esac
+)
+
+MOZ_ARG_WITH_STRING(branding,
+[  --with-branding=dir    Use branding from the specified directory.],
+    MOZ_BRANDING_DIRECTORY=$withval)
+
+AC_SUBST(MOZ_BRANDING_DIRECTORY)
+
+dnl ========================================================
+dnl = Distribution ID
+dnl ========================================================
+MOZ_ARG_WITH_STRING(distribution-id,
+[  --with-distribution-id=ID  Set distribution-specific id (default=org.mozilla)],
+[ val=`echo $withval`
+    MOZ_DISTRIBUTION_ID="$val"])
+
+if test -z "$MOZ_DISTRIBUTION_ID"; then
+   MOZ_DISTRIBUTION_ID="org.mozilla"
+fi
+
+AC_DEFINE_UNQUOTED(MOZ_DISTRIBUTION_ID,"$MOZ_DISTRIBUTION_ID")
+AC_SUBST(MOZ_DISTRIBUTION_ID)
+
+dnl ========================================================
+dnl = FreeType2
+dnl = Enable freetype by default if building against X11 
+dnl = and freetype is available
+dnl ========================================================
+MOZ_ARG_DISABLE_BOOL(freetype2,
+[  --disable-freetype2     Disable FreeType2 support ],
+    MOZ_ENABLE_FREETYPE2=,
+    MOZ_ENABLE_FREETYPE2=1)
+
+if test "$MOZ_ENABLE_FREETYPE2" && test -z "$MOZ_X11" -o -z "$_HAVE_FREETYPE2"; then
+    AC_MSG_ERROR([Cannot enable FreeType2 support for non-X11 toolkits or if FreeType2 is not detected.])
+fi
+
+if test "$MOZ_ENABLE_FREETYPE2"; then
+    AC_DEFINE(MOZ_ENABLE_FREETYPE2)
+    _NON_GLOBAL_ACDEFINES="$_NON_GLOBAL_ACDEFINES MOZ_ENABLE_FREETYPE2"
+fi
+AC_SUBST(MOZ_ENABLE_FREETYPE2)
+
+dnl ========================================================
+dnl = Xft
+dnl ========================================================
+if test "$MOZ_ENABLE_GTK2"; then
+    MOZ_ENABLE_XFT=1
+fi
+
+MOZ_ARG_DISABLE_BOOL(xft,
+[  --disable-xft           Disable Xft support ],
+    MOZ_ENABLE_XFT=,
+    MOZ_ENABLE_XFT=1)
+
+if test "$MOZ_ENABLE_XFT" && test -z "$MOZ_ENABLE_GTK2"; then
+    AC_MSG_ERROR([Cannot enable XFT support for non-GTK2 toolkits.])
+fi
+
+if test "$MOZ_ENABLE_XFT" && test "$MOZ_ENABLE_FREETYPE2"; then
+    AC_MSG_ERROR([Cannot enable XFT and FREETYPE2 at the same time.])
+fi
+
+if test "$MOZ_ENABLE_XFT"
+then
+    AC_DEFINE(MOZ_ENABLE_XFT)
+    PKG_CHECK_MODULES(MOZ_XFT, xft)
+    PKG_CHECK_MODULES(_PANGOCHK, pango >= 1.1.0)
+fi
+
+AC_SUBST(MOZ_ENABLE_XFT)
+AC_SUBST(MOZ_XFT_CFLAGS)
+AC_SUBST(MOZ_XFT_LIBS)
+
+dnl ========================================================
+dnl = pango font rendering
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(pango,
+[  --enable-pango          Enable Pango font rendering support],
+    MOZ_ENABLE_PANGO=1,
+    MOZ_ENABLE_PANGO=)
+
+if test "$MOZ_ENABLE_PANGO"
+then
+    AC_DEFINE(MOZ_ENABLE_PANGO)
+    PKG_CHECK_MODULES(MOZ_PANGO, pango >= 1.6.0 pangoft2 >= 1.6.0)
+
+    AC_SUBST(MOZ_ENABLE_PANGO)
+    AC_SUBST(MOZ_PANGO_CFLAGS)
+    AC_SUBST(MOZ_PANGO_LIBS)
+fi
+
+dnl ========================================================
+dnl = x11 core font support (default and ability to enable depend on toolkit)
+dnl ========================================================
+if test "$MOZ_X11"
+then
+    MOZ_ENABLE_COREXFONTS=${MOZ_ENABLE_COREXFONTS-1}
+else
+    MOZ_ENABLE_COREXFONTS=
+fi
+if test "$MOZ_ENABLE_COREXFONTS"
+then
+    AC_DEFINE(MOZ_ENABLE_COREXFONTS)
+fi
+
+AC_SUBST(MOZ_ENABLE_COREXFONTS)
+
+dnl ========================================================
+dnl = PostScript print module
+dnl ========================================================
+MOZ_ARG_DISABLE_BOOL(postscript,
+[  --disable-postscript    Disable PostScript printing support ],
+    MOZ_ENABLE_POSTSCRIPT=,
+    MOZ_ENABLE_POSTSCRIPT=1 )
+
+dnl ========================================================
+dnl = Xprint print module
+dnl ========================================================
+if test "$MOZ_X11"
+then
+    _SAVE_LDFLAGS="$LDFLAGS"
+    LDFLAGS="$XLDFLAGS $LDFLAGS"
+    AC_CHECK_LIB(Xp, XpGetPrinterList, [XPRINT_LIBS="-lXp"],
+        MOZ_ENABLE_XPRINT=, $XEXT_LIBS $XLIBS)
+    LDFLAGS="$_SAVE_LDFLAGS"
+
+    MOZ_XPRINT_CFLAGS="$X_CFLAGS"
+    MOZ_XPRINT_LDFLAGS="$XLDFLAGS $XPRINT_LIBS"
+    MOZ_XPRINT_LDFLAGS="$MOZ_XPRINT_LDFLAGS $XEXT_LIBS $X11_LIBS"
+
+    MOZ_ARG_DISABLE_BOOL(xprint,
+    [  --disable-xprint        Disable Xprint printing support ],
+        MOZ_ENABLE_XPRINT=,
+        MOZ_ENABLE_XPRINT=1 )
+fi
+
+dnl ========================================================
+dnl = GnomeVFS support module
+dnl ========================================================
+
+if test "$MOZ_X11"
+then
+    dnl build the gnomevfs extension by default only when the
+    dnl GTK2 toolkit is in use.
+    if test "$MOZ_ENABLE_GTK2"
+    then
+        MOZ_ENABLE_GNOMEVFS=1
+        MOZ_ENABLE_GCONF=1
+        MOZ_ENABLE_LIBGNOME=1
+    fi
+
+    MOZ_ARG_DISABLE_BOOL(gnomevfs,
+    [  --disable-gnomevfs      Disable GnomeVFS support ],
+        MOZ_ENABLE_GNOMEVFS=,
+        MOZ_ENABLE_GNOMEVFS=force)
+
+    if test "$MOZ_ENABLE_GNOMEVFS"
+    then
+        PKG_CHECK_MODULES(MOZ_GNOMEVFS, gnome-vfs-2.0 >= $GNOMEVFS_VERSION gnome-vfs-module-2.0 >= $GNOMEVFS_VERSION,[
+            MOZ_GNOMEVFS_LIBS=`echo $MOZ_GNOMEVFS_LIBS | sed 's/-llinc\>//'`
+            MOZ_ENABLE_GNOMEVFS=1
+        ],[
+            if test "$MOZ_ENABLE_GNOMEVFS" = "force"
+            then
+                AC_MSG_ERROR([* * * Could not find gnome-vfs-module-2.0 >= $GNOMEVFS_VERSION])
+            fi
+            MOZ_ENABLE_GNOMEVFS=
+        ])
+    fi
+
+    AC_SUBST(MOZ_GNOMEVFS_CFLAGS)
+    AC_SUBST(MOZ_GNOMEVFS_LIBS)
+
+    if test "$MOZ_ENABLE_GCONF"
+    then
+        PKG_CHECK_MODULES(MOZ_GCONF, gconf-2.0 >= $GCONF_VERSION,[
+            MOZ_GCONF_LIBS=`echo $MOZ_GCONF_LIBS | sed 's/-llinc\>//'`
+            MOZ_ENABLE_GCONF=1
+        ],[
+            MOZ_ENABLE_GCONF=
+        ])
+    fi
+
+    AC_SUBST(MOZ_GCONF_CFLAGS)
+    AC_SUBST(MOZ_GCONF_LIBS)
+
+    if test "$MOZ_ENABLE_LIBGNOME"
+    then
+        PKG_CHECK_MODULES(MOZ_LIBGNOME, libgnome-2.0 >= $LIBGNOME_VERSION,[
+            MOZ_LIBGNOME_LIBS=`echo $MOZ_LIBGNOME_LIBS | sed 's/-llinc\>//'`
+            MOZ_ENABLE_LIBGNOME=1
+        ],[
+            MOZ_ENABLE_LIBGNOME=
+        ])
+    fi
+
+    AC_SUBST(MOZ_LIBGNOME_CFLAGS)
+    AC_SUBST(MOZ_LIBGNOME_LIBS)
+
+    # The GNOME component is built if gtk2, gconf, gnome-vfs, and libgnome
+    # are all available.
+
+    if test "$MOZ_ENABLE_GTK2" -a "$MOZ_ENABLE_GCONF" -a \
+            "$MOZ_ENABLE_GNOMEVFS" -a "$MOZ_ENABLE_LIBGNOME"; then
+      MOZ_ENABLE_GNOME_COMPONENT=1
+    else
+      MOZ_ENABLE_GNOME_COMPONENT=
+    fi
+
+    AC_SUBST(MOZ_ENABLE_GNOME_COMPONENT)
+fi
+
+dnl ========================================================
+dnl = libgnomeui support module
+dnl ========================================================
+
+if test "$MOZ_ENABLE_GTK2"
+then
+    MOZ_ENABLE_GNOMEUI=1
+
+    MOZ_ARG_DISABLE_BOOL(gnomeui,
+    [  --disable-gnomeui       Disable libgnomeui support (default: auto, optional at runtime) ],
+        MOZ_ENABLE_GNOMEUI=,
+        MOZ_ENABLE_GNOMEUI=force)
+
+    if test "$MOZ_ENABLE_GNOMEUI"
+    then
+        PKG_CHECK_MODULES(MOZ_GNOMEUI, libgnomeui-2.0 >= $GNOMEUI_VERSION,
+        [
+            MOZ_GNOMEUI_LIBS=`echo $MOZ_GNOMEUI_LIBS | sed 's/-llinc\>//'`
+            MOZ_ENABLE_GNOMEUI=1
+        ],[
+            if test "$MOZ_ENABLE_GNOMEUI" = "force"
+            then
+                AC_MSG_ERROR([* * * Could not find libgnomeui-2.0 >= $GNOMEUI_VERSION])
+            fi
+            MOZ_ENABLE_GNOMEUI=
+        ])
+    fi
+
+    if test "$MOZ_ENABLE_GNOMEUI"; then
+        AC_DEFINE(MOZ_ENABLE_GNOMEUI)
+    fi
+fi
+AC_SUBST(MOZ_ENABLE_GNOMEUI)
+AC_SUBST(MOZ_GNOMEUI_CFLAGS)
+AC_SUBST(MOZ_GNOMEUI_LIBS)
+
+dnl ========================================================
+dnl = Setting MOZ_EXTRA_X11CONVERTERS turns on additional 
+dnl = converters in intl/uconv that are used only by X11 gfx 
+dnl = implementations. By default, it's undefined so that 
+dnl = those converters are not built on other platforms/toolkits. 
+dnl = (see bug 180851)
+dnl ========================================================
+
+if (test "$MOZ_ENABLE_GTK"  || test "$MOZ_ENABLE_GTK2") \
+&& test "$MOZ_ENABLE_COREXFONTS" \
+|| test "$MOZ_ENABLE_XLIB" \
+|| test "$MOZ_ENABLE_XPRINT" 
+then
+    AC_DEFINE(MOZ_EXTRA_X11CONVERTERS)
+    MOZ_EXTRA_X11CONVERTERS=1
+fi
+AC_SUBST(MOZ_EXTRA_X11CONVERTERS)
+
+dnl ========================================================
+dnl = Build Personal Security Manager
+dnl ========================================================
+MOZ_ARG_DISABLE_BOOL(crypto,
+[  --disable-crypto        Disable crypto support (Personal Security Manager)],
+    MOZ_PSM=,
+    MOZ_PSM=1 )
+
+if test "$COMPILE_ENVIRONMENT"; then
+    case $target in
+    *-cygwin*|*-mingw*|*-msvc*|*-mks*|*-wince)
+        if test -n "$MOZ_PSM" -a ! -e "$AS_BIN"; then
+            AC_MSG_ERROR([Building crypto support requires a valid version of the standalone assembler (ml.exe for MSVC).])
+        fi
+        ;;
+    esac
+fi
+
+dnl ========================================================
+dnl = JS Debugger XPCOM component (js/jsd)
+dnl ========================================================
+MOZ_ARG_DISABLE_BOOL(jsd,
+[  --disable-jsd           Disable JavaScript debug library],
+    MOZ_JSDEBUGGER=,
+    MOZ_JSDEBUGGER=1)
+
+
+dnl ========================================================
+dnl = Disable plugin support
+dnl ========================================================
+MOZ_ARG_DISABLE_BOOL(plugins,
+[  --disable-plugins       Disable plugins support],
+    MOZ_PLUGINS=,
+    MOZ_PLUGINS=1)
+
+dnl ========================================================
+dnl = Open JVM Interface (OJI) support
+dnl ========================================================
+MOZ_ARG_DISABLE_BOOL(oji,
+[  --disable-oji           Disable Open JVM Integration support],
+    MOZ_OJI=,
+    MOZ_OJI=1)
+if test -n "$MOZ_OJI"; then
+    AC_DEFINE(OJI)
+fi
+
+dnl ========================================================
+dnl = This turns on xinerama support.  We just can't use the
+dnl = autodetection of the libraries since on Red Hat 7 linking with
+dnl = Xinerama crashes the dynamic loader.  Make people turn it on
+dnl = explicitly.  The autodetection is done above in the Xlib
+dnl = detection routines.
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(xinerama,
+[  --enable-xinerama       Enable Xinerama support
+                           ( not safe for Red Hat 7.0 ) ],
+    _ENABLE_XINERAMA=1,
+    _ENABLE_XINERAMA= )
+
+if test -n "$_ENABLE_XINERAMA" -a -n "$MOZ_XINERAMA_LIBS" -a \
+    -n "$ac_cv_header_X11_extensions_Xinerama_h"; then
+    MOZ_ENABLE_XINERAMA=1
+    AC_DEFINE(MOZ_ENABLE_XINERAMA)
+fi
+
+dnl bi-directional support always on
+IBMBIDI=1
+AC_DEFINE(IBMBIDI)
+
+dnl ========================================================
+dnl complex text support off by default
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(ctl,
+[  --enable-ctl            Enable Thai Complex Script support],
+    SUNCTL=1,
+    SUNCTL= )
+
+dnl ========================================================
+dnl view source support on by default
+dnl ========================================================
+MOZ_ARG_DISABLE_BOOL(view-source,
+[  --disable-view-source     Disable view source support],
+    MOZ_VIEW_SOURCE=,
+    MOZ_VIEW_SOURCE=1 )
+if test "$MOZ_VIEW_SOURCE"; then
+    AC_DEFINE(MOZ_VIEW_SOURCE)
+fi
+
+
+dnl ========================================================
+dnl accessibility support on by default
+dnl ========================================================
+MOZ_ARG_DISABLE_BOOL(accessibility,
+[  --disable-accessibility Disable accessibility support],
+    ACCESSIBILITY=,
+    ACCESSIBILITY=1 )
+if test "$ACCESSIBILITY"; then
+    AC_DEFINE(ACCESSIBILITY)
+fi
+
+dnl ========================================================
+dnl xpfe/components on by default
+dnl ========================================================
+MOZ_ARG_DISABLE_BOOL(xpfe-components,
+[  --disable-xpfe-components
+                          Disable xpfe components],
+    MOZ_XPFE_COMPONENTS=,
+    MOZ_XPFE_COMPONENTS=1 )
+
+dnl ========================================================
+dnl xpinstall support on by default
+dnl ========================================================
+MOZ_ARG_DISABLE_BOOL(xpinstall,
+[  --disable-xpinstall     Disable xpinstall support],
+    MOZ_XPINSTALL=,
+    MOZ_XPINSTALL=1 )
+if test "$MOZ_XPINSTALL"; then
+    AC_DEFINE(MOZ_XPINSTALL)
+fi
+
+dnl ========================================================
+dnl Single profile support off by default
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(single-profile,
+[  --enable-single-profile Enable single profile support ],
+    MOZ_SINGLE_PROFILE=1,
+    MOZ_SINGLE_PROFILE= )
+
+dnl ========================================================
+dnl xpcom js loader support on by default
+dnl ========================================================
+MOZ_ARG_DISABLE_BOOL(jsloader,
+[  --disable-jsloader      Disable xpcom js loader support],
+    MOZ_JSLOADER=,
+    MOZ_JSLOADER=1 )
+if test "$MOZ_JSLOADER"; then
+    AC_DEFINE(MOZ_JSLOADER)
+fi
+
+dnl ========================================================
+dnl Disable printing
+dnl ========================================================
+MOZ_ARG_DISABLE_BOOL(printing,
+[  --disable-printing  Disable printing support],
+    NS_PRINTING=,
+    NS_PRINTING=1 )
+
+if test "$NS_PRINTING"; then
+    AC_DEFINE(NS_PRINTING)
+    AC_DEFINE(NS_PRINT_PREVIEW)
+fi
+
+dnl ========================================================
+dnl use native unicode converters
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(native-uconv,
+[  --enable-native-uconv   Enable iconv support],
+    MOZ_USE_NATIVE_UCONV=1,
+    MOZ_USE_NATIVE_UCONV= )
+
+if test "$MOZ_USE_NATIVE_UCONV"; then
+    AC_DEFINE(MOZ_USE_NATIVE_UCONV)
+fi
+if test "$OS_ARCH" != "WINCE" -a "$OS_ARCH" != "WINNT" -a "$MOZ_USE_NATIVE_UCONV" -a "$ac_cv_func_iconv" != "yes"; then
+    AC_MSG_ERROR([iconv() not found.  Cannot enable native uconv support.])
+fi
+
+dnl ========================================================
+dnl Libeditor can be build as plaintext-only,
+dnl or as a full html and text editing component.
+dnl We build both by default.
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(plaintext-editor-only,
+[  --enable-plaintext-editor-only
+                          Allow only plaintext editing],
+    MOZ_PLAINTEXT_EDITOR_ONLY=1,
+    MOZ_PLAINTEXT_EDITOR_ONLY= )
+dnl Note the #define is MOZILLA, not MOZ, for compat with the Mac build.
+AC_SUBST(MOZ_PLAINTEXT_EDITOR_ONLY)
+
+dnl ========================================================
+dnl Composer is on by default.
+dnl ========================================================
+MOZ_ARG_DISABLE_BOOL(composer,
+[  --disable-composer      Disable building of Composer],
+    MOZ_COMPOSER=,
+    MOZ_COMPOSER=1 )
+AC_SUBST(MOZ_COMPOSER)
+
+dnl ========================================================
+dnl = Disable Fast Load
+dnl ========================================================
+MOZ_ARG_DISABLE_BOOL(xpcom-fastload,
+[  --disable-xpcom-fastload           Disable XPCOM fastload support],
+    MOZ_NO_FAST_LOAD=1,
+    MOZ_NO_FAST_LOAD=)
+
+AC_SUBST(MOZ_NO_FAST_LOAD)
+
+if test -n "$MOZ_NO_FAST_LOAD"; then
+   AC_DEFINE(MOZ_NO_FAST_LOAD)
+fi
+
+dnl ========================================================
+dnl = Drop XPCOM Obsolete library
+dnl ========================================================
+MOZ_ARG_DISABLE_BOOL(xpcom-obsolete,
+[  --disable-xpcom-obsolete           Disable XPCOM Obsolete Library],
+    MOZ_NO_XPCOM_OBSOLETE=1,
+    MOZ_NO_XPCOM_OBSOLETE=)
+
+if test -n "$MOZ_NO_XPCOM_OBSOLETE"; then
+if test -n "$MOZ_XPINSTALL"; then
+    AC_MSG_ERROR([Building without xpcom-obsolete isn't support when building xpinstal.])
+fi
+if test -z "$MOZ_SINGLE_PROFILE"; then
+    AC_MSG_ERROR([Building without xpcom-obsolete isn't support when building full profile support.])
+fi
+    AC_DEFINE(MOZ_NO_XPCOM_OBSOLETE)
+fi
+
+dnl ========================================================
+dnl XTF
+dnl ========================================================
+MOZ_ARG_DISABLE_BOOL(xtf,
+[  --disable-xtf           Disable XTF (pluggable xml tags) support],
+    MOZ_XTF=,
+    MOZ_XTF=1 )
+if test "$MOZ_XTF"; then
+  AC_DEFINE(MOZ_XTF)
+fi
+
+dnl ========================================================
+dnl XTF
+dnl ========================================================
+MOZ_ARG_DISABLE_BOOL(inspector-apis,
+[  --diable-inspector-apis Disable the DOM inspection APIS ],
+    MOZ_NO_INSPECTOR_APIS=1,
+    MOZ_NO_INSPECTOR_APIS= )
+
+dnl ========================================================
+dnl JavaXPCOM
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(javaxpcom,
+[  --enable-javaxpcom
+                          Enable Java-XPCOM bridge],
+    MOZ_JAVAXPCOM=1,
+    MOZ_JAVAXPCOM= )
+
+if test -n "${MOZ_JAVAXPCOM}"; then
+  case "$host_os" in
+    cygwin*|msvc*|mks*)
+      if test -n "$JAVA_HOME"; then
+        JAVA_HOME=`cygpath -u \`cygpath -m -s "$JAVA_HOME"\``
+      fi
+      ;;
+    *mingw*)
+      if test -n "$JAVA_HOME"; then
+        JAVA_HOME=`cd "$JAVA_HOME" && pwd`
+      fi
+      ;;
+  esac
+
+  if test -n "${JAVA_INCLUDE_PATH}"; then
+    dnl Make sure jni.h exists in the given include path.
+    if test ! -f "$JAVA_INCLUDE_PATH/jni.h"; then
+      AC_MSG_ERROR([jni.h was not found in given include path $JAVA_INCLUDE_PATH.])
+    fi
+  else
+    case "$target_os" in
+      darwin*)
+        dnl Default to java system location
+        JAVA_INCLUDE_PATH=/System/Library/Frameworks/JavaVM.framework/Headers
+        ;;
+      *)
+        dnl Try $JAVA_HOME
+        JAVA_INCLUDE_PATH="$JAVA_HOME/include"
+        ;;
+    esac
+    if test ! -f "$JAVA_INCLUDE_PATH/jni.h"; then
+      AC_MSG_ERROR([The header jni.h was not found.  Set \$JAVA_HOME or use --with-java-include-path={java-include-dir}.])
+    fi
+  fi
+
+  if test -n "${JAVA_BIN_PATH}"; then
+    dnl Look for javac and jar in the specified path.
+    JAVA_PATH="$JAVA_BIN_PATH"
+  else
+    dnl No path specified, so look for javac and jar in $JAVA_HOME & $PATH.
+    JAVA_PATH="$JAVA_HOME/bin:$PATH"
+  fi
+
+  AC_PATH_PROG(JAVAC, javac, :, [$JAVA_PATH])
+  AC_PATH_PROG(JAR, jar, :, [$JAVA_PATH])
+  if test -z "$JAVAC" || test "$JAVAC" = ":" || test -z "$JAR" || test "$JAR" = ":"; then
+    AC_MSG_ERROR([The programs javac and jar were not found.  Set \$JAVA_HOME or use --with-java-bin-path={java-bin-dir}.])
+  fi
+fi
+
+
+dnl ========================================================
+dnl = Enable compilation of specific extension modules
+dnl ========================================================
+
+MOZ_ARG_ENABLE_STRING(extensions,
+[  --enable-extensions     Enable extensions],
+[ for option in `echo $enableval | sed 's/,/ /g'`; do
+    if test "$option" = "yes" || test "$option" = "all"; then
+        MOZ_EXTENSIONS="$MOZ_EXTENSIONS $MOZ_EXTENSIONS_ALL"
+    elif test "$option" = "no" || test "$option" = "none"; then
+        MOZ_EXTENSIONS=""
+    elif test "$option" = "default"; then
+        MOZ_EXTENSIONS="$MOZ_EXTENSIONS $MOZ_EXTENSIONS_DEFAULT"
+    elif test `echo "$option" | grep -c \^-` != 0; then
+        option=`echo $option | sed 's/^-//'`
+        MOZ_EXTENSIONS=`echo "$MOZ_EXTENSIONS" | sed "s/ ${option}//"`
+    else
+        MOZ_EXTENSIONS="$MOZ_EXTENSIONS $option"
+    fi
+done],
+    MOZ_EXTENSIONS="$MOZ_EXTENSIONS_DEFAULT")
+
+if test -z "$MOZ_ENABLE_GTK" && test `echo "$MOZ_EXTENSIONS" | grep -c xmlterm` -ne 0; then
+    AC_MSG_WARN([Cannot build xmlterm without gtk toolkit. Removing xmlterm from MOZ_EXTENSIONS.])
+    MOZ_EXTENSIONS=`echo $MOZ_EXTENSIONS | sed -e 's|xmlterm||'`
+fi
+
+if test -z "$MOZ_ENABLE_GNOMEVFS" && test `echo "$MOZ_EXTENSIONS" | grep -c gnomevfs` -ne 0; then
+    # Suppress warning on non-X11 platforms
+    if test -n "$MOZ_X11"; then
+        AC_MSG_WARN([Cannot build gnomevfs without required libraries. Removing gnomevfs from MOZ_EXTENSIONS.])
+    fi
+    MOZ_EXTENSIONS=`echo $MOZ_EXTENSIONS | sed -e 's|gnomevfs||'`
+fi
+
+if test -z "$MOZ_JSDEBUGGER" && test `echo "$MOZ_EXTENSIONS" | grep -c venkman` -ne 0; then
+    AC_MSG_WARN([Cannot build venkman without JavaScript debug library. Removing venkman from MOZ_EXTENSIONS.])
+    MOZ_EXTENSIONS=`echo $MOZ_EXTENSIONS | sed -e 's|venkman||'`
+fi
+
+dnl This might be temporary: build tridentprofile only on Windows
+if test `echo "$MOZ_EXTENSIONS" | grep -c tridentprofile` -ne 0 && test "$OS_ARCH" != "WINNT"; then
+    AC_MSG_WARN([tridentprofile extension works only on Windows at this time. Removing tridentprofile from MOZ_EXTENSIONS.])
+    MOZ_EXTENSIONS=`echo $MOZ_EXTENSIONS | sed -e 's|tridentprofile||'`
+fi
+
+dnl cookie must be built before tridentprofile. put it at list's end.
+if test `echo "$MOZ_EXTENSIONS" | grep -c tridentprofile` -ne 0; then
+  MOZ_EXTENSIONS=`echo $MOZ_EXTENSIONS | sed -e 's|tridentprofile||'`
+  if test `echo "$MOZ_EXTENSIONS" | grep -c cookie` -eq 0; then
+    AC_MSG_WARN([tridentprofile extension requires cookie. Removing tridentprofile.])
+  else
+    MOZ_EXTENSIONS="$MOZ_EXTENSIONS tridentprofile"
+  fi
+fi
+
+dnl xforms requires xtf and webservices and schema-validation
+if test -z "$MOZ_XTF" && test `echo "$MOZ_EXTENSIONS" | grep -c xforms` -ne 0; then
+    AC_MSG_WARN([Cannot build XForms without XTF support.  Removing XForms from MOZ_EXTENSIONS.])
+    MOZ_EXTENSIONS=`echo $MOZ_EXTENSIONS | sed -e 's|xforms||g'`
+fi
+if test `echo "$MOZ_EXTENSIONS" | grep -c xforms` -ne 0 && test `echo "$MOZ_EXTENSIONS" | grep -c webservices` -eq 0; then
+    AC_MSG_WARN([Cannot build XForms without webservices.  Removing XForms from MOZ_EXTENSIONS.])
+    MOZ_EXTENSIONS=`echo $MOZ_EXTENSIONS | sed -e 's|xforms||g'`
+fi
+
+if test `echo "$MOZ_EXTENSIONS" | grep -c xforms` -ne 0 && test `echo "$MOZ_EXTENSIONS" | grep -c schema-validation` -eq 0; then
+    AC_MSG_WARN([Cannot build XForms without schema validation.  Removing XForms from MOZ_EXTENSIONS.])
+    MOZ_EXTENSIONS=`echo $MOZ_EXTENSIONS | sed -e 's|xforms||g'`
+fi
+
+if test `echo "$MOZ_EXTENSIONS" | grep -c java` -ne 0; then
+    AC_MSG_WARN([java is no longer an extension, use --enable-javaxpcom to enable.])
+    MOZ_EXTENSIONS=`echo $MOZ_EXTENSIONS | sed -e 's|java||g'`
+fi
+
+dnl Remove dupes
+MOZ_EXTENSIONS=`${PERL} ${srcdir}/build/unix/uniq.pl ${MOZ_EXTENSIONS}`
+
+dnl ========================================================
+dnl Image decoders
+dnl ========================================================
+case "$target_os" in
+cygwin*|mingw*|msvc*|mks*|os2*|wince*|beos*)
+    MOZ_IMG_DECODERS_DEFAULT="$MOZ_IMG_DECODERS_DEFAULT icon"
+    ;;
+darwin*)
+    if test "$MOZ_WIDGET_TOOLKIT" = "mac" -o "$MOZ_WIDGET_TOOLKIT" = "cocoa";
+    then
+        MOZ_IMG_DECODERS_DEFAULT="$MOZ_IMG_DECODERS_DEFAULT icon"
+    fi
+    ;;
+*)
+    if test "$MOZ_ENABLE_GNOMEUI"; then
+        MOZ_IMG_DECODERS_DEFAULT="$MOZ_IMG_DECODERS_DEFAULT icon"
+    fi
+    ;;
+esac
+
+MOZ_ARG_ENABLE_STRING(image-decoders,
+[  --enable-image-decoders[={mod1,mod2,default,all,none}]
+                          Enable specific image decoders],
+[ for option in `echo $enableval | sed 's/,/ /g'`; do
+    if test "$option" = "yes" || test "$option" = "all"; then
+        MOZ_IMG_DECODERS="$MOZ_IMG_DECODERS $MOZ_IMG_DECODERS_DEFAULT"
+    elif test "$option" = "no" || test "$option" = "none"; then
+        MOZ_IMG_DECODERS=""
+    elif test "$option" = "default"; then
+        MOZ_IMG_DECODERS="$MOZ_IMG_DECODERS $MOZ_IMG_DECODERS_DEFAULT"
+    elif test `echo "$option" | grep -c \^-` != 0; then
+        option=`echo $option | sed 's/^-//'`
+        MOZ_IMG_DECODERS=`echo "$MOZ_IMG_DECODERS" | sed "s/ ${option}//"`
+    else
+        MOZ_IMG_DECODERS="$MOZ_IMG_DECODERS $option"
+    fi
+done],
+    MOZ_IMG_DECODERS="$MOZ_IMG_DECODERS_DEFAULT")
+
+dnl Dupes are removed in the encoder section because it will also add decoders
+
+dnl ========================================================
+dnl Image encoders
+dnl ========================================================
+MOZ_ARG_ENABLE_STRING(image-encoders,
+[  --enable-image-encoders[={mod1,mod2,default,all,none}]
+                          Enable specific image encoders],
+[ for option in `echo $enableval | sed 's/,/ /g'`; do
+    if test "$option" = "yes" || test "$option" = "all"; then
+        addencoder="$MOZ_IMG_ENCODERS_DEFAULT"
+    elif test "$option" = "no" || test "$option" = "none"; then
+        MOZ_IMG_ENCODERS=""
+        addencoder=""
+    elif test "$option" = "default"; then
+        addencoder="$MOZ_IMG_ENCODERS_DEFAULT"
+    elif test `echo "$option" | grep -c \^-` != 0; then
+        option=`echo $option | sed 's/^-//'`
+        addencoder=`echo "$MOZ_IMG_ENCODERS" | sed "s/ ${option}//"`
+    else
+        addencoder="$option"
+    fi
+    MOZ_IMG_ENCODERS="$MOZ_IMG_ENCODERS $addencoder"
+done],
+    MOZ_IMG_ENCODERS="$MOZ_IMG_ENCODERS_DEFAULT")
+
+dnl Remove dupes
+MOZ_IMG_DECODERS=`${PERL} ${srcdir}/build/unix/uniq.pl ${MOZ_IMG_DECODERS}`
+MOZ_IMG_ENCODERS=`${PERL} ${srcdir}/build/unix/uniq.pl ${MOZ_IMG_ENCODERS}`
+
+dnl ========================================================
+dnl experimental ldap features
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(ldap-experimental,
+[  --enable-ldap-experimental
+                          Enable LDAP experimental features],
+    MOZ_LDAP_XPCOM_EXPERIMENTAL=1,
+    MOZ_LDAP_XPCOM_EXPERIMENTAL=)
+
+dnl ========================================================
+dnl MathML on by default
+dnl ========================================================
+MOZ_ARG_DISABLE_BOOL(mathml,
+[  --disable-mathml        Disable MathML support],
+    MOZ_MATHML=,
+    MOZ_MATHML=1 )
+if test "$MOZ_MATHML"; then
+  AC_DEFINE(MOZ_MATHML)
+fi
+
+dnl ========================================================
+dnl SVG
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(svg,
+[  --enable-svg            Enable SVG support],
+    MOZ_SVG=1,
+    MOZ_SVG= )
+if test -n "$MOZ_SVG"; then
+  AC_DEFINE(MOZ_SVG)
+
+  SVG_DEFAULT_RENDERER=cairo
+
+  MOZ_ARG_ENABLE_STRING(svg-renderer,
+  [  --enable-svg-renderer={gdiplus,libart,cairo}],
+  [ SVG_RENDERER=$enableval ],
+  [ SVG_RENDERER=$SVG_DEFAULT_RENDERER])
+
+  case "$SVG_RENDERER" in
+  gdiplus)
+    MOZ_SVG_RENDERER_GDIPLUS=1
+    dnl XXX This is the test we'd like to perform but it isn't working
+    dnl under Windows for some reason:
+    dnl   AC_CHECK_HEADER(Gdiplus.h,,
+    dnl                   AC_MSG_ERROR([Gdiplus.h not found!]))
+    dnl So do this instead:
+    AC_MSG_CHECKING(for Gdiplus.h)
+    AC_LANG_SAVE
+    AC_LANG_CPLUSPLUS
+    AC_TRY_COMPILE([#include <windows.h>
+                    #include <unknwn.h>
+                    #include <Gdiplus.h>],,AC_MSG_RESULT(yes),
+                   AC_MSG_ERROR([Building the SVG GDI+ renderer requires an appropriate Microsoft SDK.]))
+    AC_LANG_RESTORE
+    AC_DEFINE(MOZ_SVG_RENDERER_GDIPLUS)
+    ;;
+
+  libart)
+    MOZ_SVG_RENDERER_LIBART=1
+    AC_DEFINE(MOZ_SVG_RENDERER_LIBART)
+    ;;
+
+  cairo)
+    MOZ_SVG_RENDERER_CAIRO=1
+    AC_DEFINE(MOZ_SVG_RENDERER_CAIRO)
+    ;;
+
+  *)
+    AC_MSG_ERROR([unknown svg renderer $SVG_RENDERER])
+    ;;
+  esac
+fi
+
+dnl COMMENTED OUT because foreignobject support should
+dnl not be tweakable by distributors!
+dnl ========================================================
+dnl SVG <foreignObject>
+dnl ========================================================
+dnl MOZ_ARG_ENABLE_BOOL(svg-foreignobject,
+dnl [  --enable-svg-foreignobject
+dnl                          Enable SVG <foreignObject> support],
+dnl    MOZ_SVG_FOREIGNOBJECT=1,
+dnl    MOZ_SVG_FOREIGNOBJECT= )
+dnl if test -n "$MOZ_SVG_FOREIGNOBJECT"; then
+dnl   AC_DEFINE(MOZ_SVG_FOREIGNOBJECT)
+dnl fi
+
+dnl ========================================================
+dnl Transformiix
+dnl ========================================================
+
+dnl To build transformiix standalone, set TX_EXE while configuring
+if test "$TX_EXE"; then
+  AC_DEFINE(TX_EXE)
+fi
+
+dnl ========================================================
+dnl Installer
+dnl ========================================================
+case "$target_os" in
+    aix*|solaris*|linux*|msvc*|mks*|cygwin*|mingw*|os2*|wince*)
+        MOZ_INSTALLER=1
+        ;;
+esac
+
+MOZ_ARG_DISABLE_BOOL(installer,
+[  --disable-installer     Disable building of installer],
+    MOZ_INSTALLER=,
+    MOZ_INSTALLER=1 )
+if test -n "$MOZ_INSTALLER" -a -n "$MOZ_XUL_APP" -a "$OS_ARCH" = "WINNT"; then
+    # Disable installer for Windows builds that use the new toolkit if NSIS
+    # isn't in the path.
+    AC_PATH_PROGS(MAKENSIS, makensis)
+    if test -z "$MAKENSIS" || test "$MAKENSIS" = ":"; then
+        AC_MSG_ERROR([To build the installer makensis is required in your path. To build without the installer reconfigure using --disable-installer.])
+    fi
+    # The Windows build for NSIS requires the iconv command line utility to
+    # convert the charset of the locale files.
+    AC_PATH_PROGS(HOST_ICONV, $HOST_ICONV "iconv", "")
+    if test -z "$HOST_ICONV"; then
+        AC_MSG_ERROR([To build the installer iconv is required in your path. To build without the installer reconfigure using --disable-installer.])
+    fi
+fi
+
+# Automatically disable installer if xpinstall isn't built
+if test -z "$MOZ_XPINSTALL"; then
+    MOZ_INSTALLER=
+fi
+AC_SUBST(MOZ_INSTALLER)
+
+dnl ========================================================
+dnl Updater
+dnl ========================================================
+if test "$MOZ_XUL_APP"; then
+    MOZ_UPDATER=1
+fi
+
+MOZ_ARG_DISABLE_BOOL(updater,
+[  --disable-updater       Disable building of updater],
+    MOZ_UPDATER=,
+    MOZ_UPDATER=1 )
+# The Windows build requires the iconv command line utility
+# in order to build the updater.
+case "$target_os" in
+    msvc*|mks*|cygwin*|mingw*|wince*)
+        if test -n "$MOZ_UPDATER"; then
+            AC_MSG_CHECKING([for iconv])
+            AC_CHECK_PROGS(HOST_ICONV, $HOST_ICONV "iconv", "")
+            if test -z "$HOST_ICONV"; then
+                AC_MSG_ERROR([iconv not found in \$PATH])
+            fi
+        fi
+        ;;
+esac
+AC_SUBST(MOZ_UPDATER)
+
+# 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)
+
+# tools/update-packaging is not checked out by default.
+MOZ_ARG_ENABLE_BOOL(update-packaging,
+[  --enable-update-packaging
+                           Enable tools/update-packaging],
+    MOZ_UPDATE_PACKAGING=1,
+    MOZ_UPDATE_PACKAGING= )
+AC_SUBST(MOZ_UPDATE_PACKAGING)
+
+dnl ========================================================
+dnl ActiveX
+dnl ========================================================
+MOZ_ARG_DISABLE_BOOL(activex,
+[  --disable-activex       Disable building of ActiveX control (win32 only)],
+    MOZ_NO_ACTIVEX_SUPPORT=1,
+    MOZ_NO_ACTIVEX_SUPPORT= )
+AC_SUBST(MOZ_NO_ACTIVEX_SUPPORT)
+
+MOZ_ARG_DISABLE_BOOL(activex-scripting,
+[  --disable-activex-scripting
+                          Disable building of ActiveX scripting support (win32)],
+    MOZ_ACTIVEX_SCRIPTING_SUPPORT=,
+    MOZ_ACTIVEX_SCRIPTING_SUPPORT=1)
+AC_SUBST(MOZ_ACTIVEX_SCRIPTING_SUPPORT)
+
+if test -n "$MOZ_NO_ACTIVEX_SUPPORT" -a -n "$MOZ_ACTIVEX_SCRIPTING_SUPPORT";
+then
+    AC_MSG_ERROR([Cannot enable ActiveX scripting support when ActiveX support is disabled.])
+fi
+
+dnl ========================================================
+dnl leaky
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(leaky,
+[  --enable-leaky          Build leaky memory tool],
+    MOZ_LEAKY=1,
+    MOZ_LEAKY=)
+
+
+dnl ========================================================
+dnl xpctools
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(xpctools,
+[  --enable-xpctools       Build JS profiling tool],
+    MOZ_XPCTOOLS=1,
+    MOZ_XPCTOOLS= )
+
+
+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 = Enable Lea malloc in xpcom. OFF by default.
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(xpcom-lea,
+[  --enable-xpcom-lea      Use Lea malloc in xpcom ],
+    XPCOM_USE_LEA=1,
+    XPCOM_USE_LEA= )
+if test -n "$XPCOM_USE_LEA"; then
+    AC_DEFINE(XPCOM_USE_LEA)
+fi
+
+dnl ========================================================
+dnl = Enable places (new history/bookmarks)
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(places,
+[  --enable-places        Enable 'places' bookmark/history implementation],
+    MOZ_PLACES=1,
+    MOZ_PLACES= )
+if test -n "$MOZ_PLACES"; then
+    AC_DEFINE(MOZ_PLACES)
+    MOZ_MORK=
+    MOZ_MORKREADER=1
+fi
+
+dnl ========================================================
+dnl = Disable feeds (new feed handling/processing) - Firefox
+dnl ========================================================
+MOZ_ARG_DISABLE_BOOL(feeds,
+[  --disable-feeds        Disable in-page feed handling and processing],
+    MOZ_FEEDS=,
+    MOZ_FEEDS=1 )
+if test -n "$MOZ_FEEDS"; then
+    AC_DEFINE(MOZ_FEEDS)
+fi
+
+dnl ========================================================
+dnl = Enable mozStorage
+dnl = XXX need to implement --with-system-sqlite3 (see bug 263381)
+dnl ========================================================
+dnl Implicitly enabled by default if building calendar or places
+MOZ_ARG_ENABLE_BOOL(storage,
+[  --enable-storage        Enable mozStorage module and related components],
+    MOZ_STORAGE=1,
+    MOZ_STORAGE= )
+if test -n "$MOZ_STORAGE"; then
+    AC_DEFINE(MOZ_STORAGE)
+fi
+
+dnl ========================================================
+dnl = Enable safe browsing (anti-phishing)
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(safe-browsing,
+[  --enable-safe-browsing        Enable safe browsing (anti-phishing) implementation],
+    MOZ_SAFE_BROWSING=1,
+    MOZ_SAFE_BROWSING= )
+if test -n "$MOZ_SAFE_BROWSING"; then
+    AC_DEFINE(MOZ_SAFE_BROWSING)
+fi
+AC_SUBST(MOZ_SAFE_BROWSING)
+
+dnl ========================================================
+dnl = Enable url-classifier
+dnl ========================================================
+dnl Implicitly enabled by default if building with safe-browsing
+if test -n "$MOZ_SAFE_BROWSING"; then
+    MOZ_URL_CLASSIFIER=1
+fi
+MOZ_ARG_ENABLE_BOOL(url-classifier,
+[  --enable-url-classifier        Enable url classifier module],
+    MOZ_URL_CLASSIFIER=1,
+    MOZ_URL_CLASSIFIER= )
+if test -n "$MOZ_URL_CLASSIFIER"; then
+    AC_DEFINE(MOZ_URL_CLASSIFIER)
+fi
+AC_SUBST(MOZ_URL_CLASSIFIER)
+
+dnl ========================================================
+dnl = Enable Ultrasparc specific optimizations for JS
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(js-ultrasparc,
+[  --enable-js-ultrasparc  Use UltraSPARC optimizations in JS],
+    JS_ULTRASPARC_OPTS=1,
+    JS_ULTRASPARC_OPTS= )
+
+dnl only enable option for ultrasparcs
+if test `echo "$target_os" | grep -c \^solaris 2>/dev/null` = 0 -o \
+    "$OS_TEST" != "sun4u"; then
+    JS_ULTRASPARC_OPTS=
+fi
+AC_SUBST(JS_ULTRASPARC_OPTS)
+
+dnl ========================================================
+dnl =
+dnl = Feature options that require extra sources to be pulled
+dnl =
+dnl ========================================================
+dnl MOZ_ARG_HEADER(Features that require extra sources)
+
+dnl ========================================================
+dnl =
+dnl = Debugging Options
+dnl = 
+dnl ========================================================
+MOZ_ARG_HEADER(Debugging and Optimizations)
+
+dnl ========================================================
+dnl = Disable building with debug info.
+dnl = Debugging is OFF by default
+dnl ========================================================
+if test -z "$MOZ_DEBUG_FLAGS"
+then
+    case "$target" in
+    *-irix*)
+        if test "$GNU_CC"; then
+            GCC_VERSION=`$CC -v 2>&1 | awk '/version/ { print $3 }'`
+            case "$GCC_VERSION" in
+            2.95.*)
+                MOZ_DEBUG_FLAGS=""
+                ;;
+            *)
+                MOZ_DEBUG_FLAGS="-g"
+                ;;
+            esac
+        else
+            MOZ_DEBUG_FLAGS="-g"
+        fi
+        ;;
+    *)
+    	MOZ_DEBUG_FLAGS="-g"
+        ;;
+    esac
+fi
+
+MOZ_ARG_ENABLE_STRING(debug,
+[  --enable-debug[=DBG]    Enable building with developer debug info
+                          (Using compiler flags DBG)],
+[ if test "$enableval" != "no"; then
+    MOZ_DEBUG=1
+    if test -n "$enableval" && test "$enableval" != "yes"; then
+        MOZ_DEBUG_FLAGS=`echo $enableval | sed -e 's|\\\ | |g'`
+    fi
+  else
+    MOZ_DEBUG=
+  fi ],
+  MOZ_DEBUG=)
+
+MOZ_DEBUG_ENABLE_DEFS="-DDEBUG -D_DEBUG"
+ case "${target_os}" in
+    beos*)
+        MOZ_DEBUG_ENABLE_DEFS="$MOZ_DEBUG_ENABLE_DEFS -DDEBUG_${USER}"
+        ;;
+    msvc*|mks*|cygwin*|mingw*|os2*|wince*)
+        MOZ_DEBUG_ENABLE_DEFS="$MOZ_DEBUG_ENABLE_DEFS -DDEBUG_`echo ${USERNAME} | sed -e 's| |_|g'`"
+        ;;
+    *) 
+        MOZ_DEBUG_ENABLE_DEFS="$MOZ_DEBUG_ENABLE_DEFS -DDEBUG_`$WHOAMI`"
+        ;;
+  esac
+MOZ_DEBUG_ENABLE_DEFS="$MOZ_DEBUG_ENABLE_DEFS -DTRACING"
+
+MOZ_DEBUG_DISABLE_DEFS="-DNDEBUG -DTRIMMED"
+
+if test -n "$MOZ_DEBUG"; then
+    AC_MSG_CHECKING([for valid debug flags])
+    _SAVE_CFLAGS=$CFLAGS
+    CFLAGS="$CFLAGS $MOZ_DEBUG_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_DEBUG_FLAGS])
+    fi
+    CFLAGS=$_SAVE_CFLAGS
+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" && test "$enableval" != "yes"; then
+        MOZ_OPTIMIZE_FLAGS=`echo "$enableval" | sed -e 's|\\\ | |g'`
+        MOZ_OPTIMIZE=2
+    fi
+else
+    MOZ_OPTIMIZE=
+fi ], MOZ_OPTIMIZE=1)
+
+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_OPTIMIZE_FLAGS)
+AC_SUBST(MOZ_OPTIMIZE_LDFLAGS)
+
+dnl ========================================================
+dnl = Enable/disable debug for specific modules only
+dnl =   module names beginning with ^ will be disabled 
+dnl ========================================================
+MOZ_ARG_ENABLE_STRING(debug-modules,
+[  --enable-debug-modules  Enable/disable debug info for specific modules],
+[ MOZ_DEBUG_MODULES=`echo $enableval| sed 's/,/ /g'` ] )
+
+dnl ========================================================
+dnl = Enable/disable generation of debugger info for specific modules only
+dnl =    the special module name ALL_MODULES can be used to denote all modules
+dnl =    module names beginning with ^ will be disabled
+dnl ========================================================
+MOZ_ARG_ENABLE_STRING(debugger-info-modules,
+[  --enable-debugger-info-modules
+                          Enable/disable debugger info for specific modules],
+[ for i in `echo $enableval | sed 's/,/ /g'`; do
+      dnl note that the list of module names is reversed as it is copied
+      dnl this is important, as it will allow config.mk to interpret stuff like
+      dnl "^ALL_MODULES xpcom" properly
+      if test "$i" = "no"; then
+        i="^ALL_MODULES"
+      fi
+      if test "$i" = "yes"; then
+        i="ALL_MODULES"
+      fi
+      MOZ_DBGRINFO_MODULES="$i $MOZ_DBGRINFO_MODULES";
+    done ])
+
+dnl ========================================================
+dnl Enable garbage collector
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(boehm,
+[  --enable-boehm          Enable the Boehm Garbage Collector],
+    GC_LEAK_DETECTOR=1,
+    GC_LEAK_DETECTOR= )
+if test -n "$GC_LEAK_DETECTOR"; then
+    AC_DEFINE(GC_LEAK_DETECTOR)
+fi
+
+dnl ========================================================
+dnl Disable runtime logging checks
+dnl ========================================================
+MOZ_ARG_DISABLE_BOOL(logging,
+[  --disable-logging       Disable logging facilities],
+    NS_DISABLE_LOGGING=1,
+    NS_DISABLE_LOGGING= )
+if test "$NS_DISABLE_LOGGING"; then
+    AC_DEFINE(NS_DISABLE_LOGGING)
+else
+    AC_DEFINE(MOZ_LOGGING)
+fi
+
+dnl ========================================================
+dnl Crash on assert
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(crash-on-assert,
+[  --enable-crash-on-assert
+                          Make NS_ASSERTION crash on Unix],
+    _CRASH_ON_ASSERT=1,
+    _CRASH_ON_ASSERT= )
+if test "$_CRASH_ON_ASSERT"; then
+    AC_DEFINE(UNIX_CRASH_ON_ASSERT)
+fi
+
+dnl ========================================================
+dnl = Enable function reordering. Off by default
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(reorder,
+[  --enable-reorder        Enable function reordering (requires GNU ld) ],
+    _ENABLE_REORDER=1,
+    _ENABLE_REORDER= )
+if test -n "$_ENABLE_REORDER"; then
+    if test -z "$GNU_LD"; then
+        AC_MSG_WARN([Reordering only works with GNU ld. Not reordering.])
+    else
+        MOZ_REORDER=1
+    fi
+fi
+
+dnl ========================================================
+dnl = dnl This will enable logging of addref, release, ctor, dtor.
+dnl ========================================================
+_ENABLE_LOGREFCNT=42
+MOZ_ARG_ENABLE_BOOL(logrefcnt,
+[  --enable-logrefcnt      Enable logging of refcounts (default=debug) ],
+    _ENABLE_LOGREFCNT=1,
+    _ENABLE_LOGREFCNT= )
+if test "$_ENABLE_LOGREFCNT" = "1"; then
+    AC_DEFINE(FORCE_BUILD_REFCNT_LOGGING)
+elif test -z "$_ENABLE_LOGREFCNT"; then
+    AC_DEFINE(NO_BUILD_REFCNT_LOGGING)
+fi
+
+dnl ========================================================
+dnl = detect webshell leaks
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(detect-webshell-leaks,
+[  --enable-detect-webshell-leaks
+                          Enable detection of webshell leaks 
+                          (default=debug)],
+    _DETECT_WEBSHELL_LEAKS=1,
+    _DETECT_WEBSHELL_LEAKS=,
+    [ if test "$MOZ_DEBUG"; then
+        _DETECT_WEBSHELL_LEAKS=1 
+    fi])
+
+if test "$_DETECT_WEBSHELL_LEAKS"; then
+  AC_DEFINE(DETECT_WEBSHELL_LEAKS) 
+  AC_SUBST(DETECT_WEBSHELL_LEAKS)
+fi
+
+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_MALLOC_CFLAGS="${LDFLAGS} -Wl,--wrap -Wl,malloc -Wl,--wrap -Wl,free -Wl,--wrap -Wl,realloc -Wl,--wrap -Wl,__builtin_new -Wl,--wrap -Wl,__builtin_vec_new -Wl,--wrap -Wl,__builtin_delete -Wl,--wrap -Wl,__builtin_vec_delete -Wl,--wrap -Wl,PR_Free -Wl,--wrap -Wl,PR_Malloc -Wl,--wrap -Wl,PR_Calloc -Wl,--wrap -Wl,PR_Realloc"
+    MKSHLIB='$(CXX) $(DSO_LDOPTS) $(WRAP_MALLOC_CFLAGS) -o $@'
+    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_MALLOC_LIB=$withval)
+
+dnl ========================================================
+dnl = Use Electric Fence
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(efence,
+[  --enable-efence         Link with Electric Fence],
+    _ENABLE_EFENCE=1,
+    _ENABLE_EFENCE= )
+if test -n "$_ENABLE_EFENCE"; then
+    AC_CHECK_LIB(efence,malloc)
+fi
+
+dnl ========================================================
+dnl jprof
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(jprof,
+[  --enable-jprof          Enable jprof profiling tool (needs mozilla/tools/jprof)],
+    MOZ_JPROF=1,
+    MOZ_JPROF= )
+if test -n "$MOZ_JPROF"; then
+    AC_DEFINE(MOZ_JPROF)
+fi
+
+
+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-elf-dynstr-gc
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(elf-dynstr-gc,
+[  --enable-elf-dynstr-gc  Enable elf dynstr garbage collector (opt builds only)],
+    USE_ELF_DYNSTR_GC=1,
+    USE_ELF_DYNSTR_GC= )
+
+dnl ========================================================
+dnl = --enable-old-abi-compat-wrappers
+dnl ========================================================
+dnl on x86 linux, the current builds of some popular plugins (notably
+dnl flashplayer and real) expect a few builtin symbols from libgcc
+dnl which were available in some older versions of gcc.  However,
+dnl they're _NOT_ available in newer versions of gcc (eg 3.1), so if
+dnl we want those plugin to work with a gcc-3.1 built binary, we need
+dnl to provide these symbols.  MOZ_ENABLE_OLD_ABI_COMPAT_WRAPPERS defaults
+dnl to true on x86 linux, and false everywhere else.
+dnl
+
+MOZ_ARG_ENABLE_BOOL(old-abi-compat-wrappers,
+[  --enable-old-abi-compat-wrappers
+                          Support old GCC ABI symbols to ease the pain 
+                          of the linux compiler change],
+    MOZ_ENABLE_OLD_ABI_COMPAT_WRAPPERS=1,
+    MOZ_ENABLE_OLD_ABI_COMPAT_WRAPPERS= )
+if test "$COMPILE_ENVIRONMENT"; then
+if test "$MOZ_ENABLE_OLD_ABI_COMPAT_WRAPPERS"; then
+    AC_LANG_SAVE
+    AC_LANG_CPLUSPLUS
+    AC_CHECK_FUNCS(__builtin_vec_new __builtin_vec_delete __builtin_new __builtin_delete __pure_virtual)
+    AC_LANG_RESTORE
+    AC_DEFINE(MOZ_ENABLE_OLD_ABI_COMPAT_WRAPPERS)
+fi
+fi # COMPILE_ENVIRONMENT
+
+dnl ========================================================
+dnl = --enable-prebinding
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(prebinding,
+[  --enable-prebinding     Enable prebinding (Mac OS X only)],
+    USE_PREBINDING=1,
+    USE_PREBINDING= )
+
+dnl ========================================================
+dnl = 
+dnl = Profiling and Instrumenting
+dnl = 
+dnl ========================================================
+MOZ_ARG_HEADER(Profiling and Instrumenting)
+
+dnl ========================================================
+dnl = Enable timeline service, which provides lightweight
+dnl = instrumentation of mozilla for performance measurement.
+dnl = Timeline is off by default.
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(timeline,
+[  --enable-timeline       Enable timeline services ],
+    MOZ_TIMELINE=1,
+    MOZ_TIMELINE= )
+if test -n "$MOZ_TIMELINE"; then
+    AC_DEFINE(MOZ_TIMELINE)
+fi
+
+dnl ========================================================
+dnl Turn on reflow counting
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(reflow-perf,
+[  --enable-reflow-perf    Enable reflow performance tracing],
+    MOZ_REFLOW_PERF=1,
+    MOZ_REFLOW_PERF= )
+if test -n "$MOZ_REFLOW_PREF"; then
+    AC_DEFINE(MOZ_REFLOW_PREF)
+fi
+AC_SUBST(MOZ_REFLOW_PERF)
+
+dnl ========================================================
+dnl Enable performance metrics.
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(perf-metrics,
+[  --enable-perf-metrics   Enable performance metrics],
+    MOZ_PERF_METRICS=1,
+    MOZ_PERF_METRICS= )
+if test -n "$MOZ_PERF_METRICS"; then
+    AC_DEFINE(MOZ_PERF_METRICS)
+fi
+
+dnl ========================================================
+dnl Enable code size metrics.
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(codesighs,
+[  --enable-codesighs      Enable code size analysis tools],
+    _ENABLE_CODESIGHS=1,
+    _ENABLE_CODESIGHS= )
+if test -n "$_ENABLE_CODESIGHS"; then
+    if test -d $srcdir/tools/codesighs; then 
+        MOZ_MAPINFO=1
+    else
+        AC_MSG_ERROR([Codesighs directory $srcdir/tools/codesighs required.])
+    fi
+fi
+
+dnl ========================================================
+dnl = Enable trace malloc
+dnl ========================================================
+NS_TRACE_MALLOC=${MOZ_TRACE_MALLOC}
+MOZ_ARG_ENABLE_BOOL(trace-malloc,
+[  --enable-trace-malloc   Enable malloc tracing],
+    NS_TRACE_MALLOC=1,
+    NS_TRACE_MALLOC= )
+if test "$NS_TRACE_MALLOC"; then
+  # Please, Mr. Linker Man, don't take away our symbol names
+  MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS=
+  USE_ELF_DYNSTR_GC=
+  AC_DEFINE(NS_TRACE_MALLOC)
+fi
+AC_SUBST(NS_TRACE_MALLOC)
+
+dnl ========================================================
+dnl = Add support for Eazel profiler
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(eazel-profiler-support,
+[  --enable-eazel-profiler-support
+                          Enable Corel/Eazel profiler support],
+    ENABLE_EAZEL_PROFILER=1,
+    ENABLE_EAZEL_PROFILER= )
+if test -n "$ENABLE_EAZEL_PROFILER"; then
+    AC_DEFINE(ENABLE_EAZEL_PROFILER)
+    USE_ELF_DYNSTR_GC=
+    MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS=
+    EAZEL_PROFILER_CFLAGS="-g -O -gdwarf-2 -finstrument-functions -D__NO_STRING_INLINES  -D__NO_MATH_INLINES"
+    EAZEL_PROFILER_LIBS="-lprofiler -lpthread"
+fi
+
+MOZ_ARG_ENABLE_STRING(profile-modules,
+[  --enable-profile-modules
+                          Enable/disable profiling for specific modules],
+[ MOZ_PROFILE_MODULES=`echo $enableval| sed 's/,/ /g'` ] )
+
+MOZ_ARG_ENABLE_BOOL(insure,
+[  --enable-insure         Enable insure++ instrumentation (linux only)],
+    _ENABLE_INSURE=1,
+    _ENABLE_INSURE= )
+if test -n "$_ENABLE_INSURE"; then
+    MOZ_INSURE="insure"
+    MOZ_INSURIFYING=1
+    MOZ_INSURE_DIRS="."
+    MOZ_INSURE_EXCLUDE_DIRS="config"
+fi
+
+MOZ_ARG_WITH_STRING(insure-dirs,
+[  --with-insure-dirs=DIRS
+                          Dirs to instrument with insure ],
+    MOZ_INSURE_DIRS=$withval )
+
+MOZ_ARG_WITH_STRING(insure-exclude-dirs,
+[  --with-insure-exclude-dirs=DIRS
+                          Dirs to not instrument with insure ],
+    MOZ_INSURE_EXCLUDE_DIRS="config $withval" )
+
+dnl ========================================================
+dnl = Support for Quantify (Windows)
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(quantify,
+[  --enable-quantify      Enable Quantify support (Windows only) ],
+    MOZ_QUANTIFY=1,
+    MOZ_QUANTIFY= )
+
+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 trace-malloc builds
+MOZ_DEMANGLE_SYMBOLS=
+if test "$HAVE_DEMANGLE" -a "$HAVE_GCC3_ABI" && test "$MOZ_DEBUG" -o "$NS_TRACE_MALLOC"; then
+    MOZ_DEMANGLE_SYMBOLS=1
+    AC_DEFINE(MOZ_DEMANGLE_SYMBOLS)
+fi
+AC_SUBST(MOZ_DEMANGLE_SYMBOLS)
+
+
+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= )
+
+dnl =========================================================
+dnl = Chrome format
+dnl =========================================================
+MOZ_ARG_ENABLE_STRING([chrome-format],
+[  --enable-chrome-format=jar|flat|both|symlink
+                          Select FORMAT of chrome files (default=jar)],
+    MOZ_CHROME_FILE_FORMAT=`echo $enableval | tr A-Z a-z`)
+
+if test -z "$MOZ_CHROME_FILE_FORMAT"; then
+    MOZ_CHROME_FILE_FORMAT=jar
+fi
+
+if test "$MOZ_CHROME_FILE_FORMAT" != "jar" && 
+    test "$MOZ_CHROME_FILE_FORMAT" != "flat" &&
+    test "$MOZ_CHROME_FILE_FORMAT" != "symlink" &&
+    test "$MOZ_CHROME_FILE_FORMAT" != "both"; then
+    AC_MSG_ERROR([--enable-chrome-format must be set to either jar, flat, both, or symlink])
+fi
+
+dnl ========================================================
+dnl = Define default location for MOZILLA_FIVE_HOME
+dnl ========================================================
+MOZ_ARG_WITH_STRING(default-mozilla-five-home,
+[  --with-default-mozilla-five-home
+                          Set the default value for MOZILLA_FIVE_HOME],
+[ val=`echo $withval`
+  AC_DEFINE_UNQUOTED(MOZ_DEFAULT_MOZILLA_FIVE_HOME,"$val") ])
+
+dnl ========================================================
+dnl = Location of the mozilla user directory (default is ~/.mozilla).],
+dnl ========================================================
+MOZ_ARG_WITH_STRING(user-appdir,
+[  --with-user-appdir=DIR  Set user-specific appdir (default=.mozilla)],
+[ val=`echo $withval`
+if echo "$val" | grep "\/" >/dev/null; then
+    AC_MSG_ERROR("Homedir must be single relative path.")
+else 
+    MOZ_USER_DIR="$val"
+fi])
+
+AC_DEFINE_UNQUOTED(MOZ_USER_DIR,"$MOZ_USER_DIR")
+
+dnl ========================================================
+dnl = Doxygen configuration
+dnl ========================================================
+dnl Use commas to specify multiple dirs to this arg
+MOZ_DOC_INPUT_DIRS='./dist/include ./dist/idl'
+MOZ_ARG_WITH_STRING(doc-input-dirs,
+[  --with-doc-input-dirs=DIRS
+                          Header/idl dirs to create docs from],
+[ MOZ_DOC_INPUT_DIRS=`echo "$withval" | sed "s/,/ /g"` ] )
+AC_SUBST(MOZ_DOC_INPUT_DIRS)
+
+dnl Use commas to specify multiple dirs to this arg
+MOZ_DOC_INCLUDE_DIRS='./dist/include ./dist/include/nspr'
+MOZ_ARG_WITH_STRING(doc-include-dirs,
+[  --with-doc-include-dirs=DIRS  
+                          Include dirs to preprocess doc headers],
+[ MOZ_DOC_INCLUDE_DIRS=`echo "$withval" | sed "s/,/ /g"` ] )
+AC_SUBST(MOZ_DOC_INCLUDE_DIRS)
+
+MOZ_DOC_OUTPUT_DIR='./dist/docs'
+MOZ_ARG_WITH_STRING(doc-output-dir,
+[  --with-doc-output-dir=DIR
+                          Dir to generate docs into],
+[ MOZ_DOC_OUTPUT_DIR=$withval ] )
+AC_SUBST(MOZ_DOC_OUTPUT_DIR)
+
+if test -z "$SKIP_COMPILER_CHECKS"; then
+dnl ========================================================
+dnl =
+dnl = Compiler Options
+dnl = 
+dnl ========================================================
+MOZ_ARG_HEADER(Compiler Options)
+
+dnl ========================================================
+dnl Check for gcc -pipe support
+dnl ========================================================
+AC_MSG_CHECKING([for gcc -pipe support])
+if test -n "$GNU_CC" && test -n "$GNU_CXX" && test -n "$GNU_AS"; then
+    echo '#include <stdio.h>' > dummy-hello.c
+    echo 'int main() { printf("Hello World\n"); exit(0); }' >> dummy-hello.c
+    ${CC} -S dummy-hello.c -o dummy-hello.s 2>&5
+    cat dummy-hello.s | ${AS_BIN} -o dummy-hello.S - 2>&5
+    if test $? = 0; then
+        _res_as_stdin="yes"
+    else
+        _res_as_stdin="no"
+    fi
+    if test "$_res_as_stdin" = "yes"; then
+        _SAVE_CFLAGS=$CFLAGS
+        CFLAGS="$CFLAGS -pipe"
+        AC_TRY_COMPILE( [ #include <stdio.h> ],
+            [printf("Hello World\n");],
+            [_res_gcc_pipe="yes"],
+            [_res_gcc_pipe="no"] )
+        CFLAGS=$_SAVE_CFLAGS
+    fi
+    if test "$_res_as_stdin" = "yes" && test "$_res_gcc_pipe" = "yes"; then
+        _res="yes";
+        CFLAGS="$CFLAGS -pipe"
+        CXXFLAGS="$CXXFLAGS -pipe"
+    else
+        _res="no"
+    fi
+    rm -f dummy-hello.c dummy-hello.s dummy-hello.S dummy-hello a.out
+    AC_MSG_RESULT([$_res])
+else
+    AC_MSG_RESULT([no])
+fi
+
+dnl pass -Wno-long-long to the compiler
+MOZ_ARG_ENABLE_BOOL(long-long-warning,
+[  --enable-long-long-warning 
+                          Warn about use of non-ANSI long long type],
+    _IGNORE_LONG_LONG_WARNINGS=,
+    _IGNORE_LONG_LONG_WARNINGS=1)
+
+if test "$_IGNORE_LONG_LONG_WARNINGS"; then
+     _SAVE_CFLAGS="$CFLAGS"
+     CFLAGS="$CFLAGS ${_COMPILER_PREFIX}-Wno-long-long"
+     AC_MSG_CHECKING([whether compiler supports -Wno-long-long])
+     AC_TRY_COMPILE([], [return(0);], 
+	[ _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} ${_COMPILER_PREFIX}-Wno-long-long"
+	  _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} ${_COMPILER_PREFIX}-Wno-long-long"
+	  result="yes" ], result="no")
+     AC_MSG_RESULT([$result])
+     CFLAGS="$_SAVE_CFLAGS"
+fi
+
+dnl Test for profiling options
+dnl Under gcc 3.3, use -fprofile-arcs/-fbranch-probabilities
+dnl Under gcc 3.4+, use -fprofile-generate/-fprofile-use
+
+_SAVE_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS -fprofile-generate"
+
+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_USE_CFLAGS="-fprofile-use"
+else
+  CFLAGS="$_SAVE_CFLAGS -fprofile-arcs"
+  AC_MSG_CHECKING([whether C compiler supports -fprofile-arcs])
+  AC_TRY_COMPILE([], [return 0;],
+                 [ PROFILE_GEN_CFLAGS="-fprofile-arcs"
+                   result="yes" ], result="no")
+  AC_MSG_RESULT([$result])
+  if test $result = "yes"; then
+    PROFILE_USE_CFLAGS="-fbranch-probabilities"
+  fi
+fi
+
+CFLAGS="$_SAVE_CFLAGS"
+
+AC_SUBST(PROFILE_GEN_CFLAGS)
+AC_SUBST(PROFILE_USE_CFLAGS)
+
+AC_LANG_CPLUSPLUS
+
+dnl ========================================================
+dnl Test for -pedantic bustage
+dnl ========================================================
+MOZ_ARG_DISABLE_BOOL(pedantic,
+[  --disable-pedantic      Issue all warnings demanded by strict ANSI C ],
+_PEDANTIC= )
+if test "$_PEDANTIC"; then
+    _SAVE_CXXFLAGS=$CXXFLAGS
+    CXXFLAGS="$CXXFLAGS ${_WARNINGS_CXXFLAGS} ${_COMPILER_PREFIX}-pedantic"
+    AC_MSG_CHECKING([whether C++ compiler has -pedantic long long bug])
+    AC_TRY_COMPILE([$configure_static_assert_macros],
+                   [CONFIGURE_STATIC_ASSERT(sizeof(long long) == 8)],
+                   result="no", result="yes" )
+    AC_MSG_RESULT([$result])
+    CXXFLAGS="$_SAVE_CXXFLAGS"
+
+    case "$result" in
+    no)
+        _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} ${_COMPILER_PREFIX}-pedantic"
+        _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} ${_COMPILER_PREFIX}-pedantic"
+        ;;
+    yes)
+        AC_MSG_ERROR([Your compiler appears to have a known bug where long long is miscompiled when using -pedantic.  Reconfigure using --disable-pedantic. ])
+        ;;
+    esac
+fi
+
+dnl ========================================================
+dnl Test for correct temporary object destruction order
+dnl ========================================================
+dnl We want to make sure the compiler follows the C++ spec here as 
+dnl xpcom and the string classes depend on it (bug 235381).
+AC_MSG_CHECKING([for correct temporary object destruction order])
+AC_TRY_RUN([ class A {
+             public:  A(int& x) : mValue(x) {}
+                      ~A() { mValue--; }
+                      operator char**() { return 0; }
+             private:  int& mValue;
+             };
+             void func(char **arg) {}
+             int m=2;
+             void test() {
+                  func(A(m));
+                  if (m==1) m = 0;
+             }
+             int main() {
+                 test();
+                 return(m);
+             }
+             ],
+     result="yes", result="no", result="maybe")
+AC_MSG_RESULT([$result])
+
+if test "$result" = "no"; then
+    AC_MSG_ERROR([Your compiler does not follow the C++ specification for temporary object destruction order.])
+fi
+
+dnl ========================================================
+dnl Autoconf test for gcc 2.7.2.x (and maybe others?) so that we don't
+dnl provide non-const forms of the operator== for comparing nsCOMPtrs to
+dnl raw pointers in nsCOMPtr.h.  (VC++ has the same bug.)
+dnl ========================================================
+_SAVE_CXXFLAGS=$CXXFLAGS
+CXXFLAGS="$CXXFLAGS ${_WARNINGS_CXXFLAGS}"
+AC_CACHE_CHECK(for correct overload resolution with const and templates,
+    ac_nscap_nonconst_opeq_bug,
+    [AC_TRY_COMPILE([
+                      template <class T>
+                      class Pointer
+                        {
+                        public:
+                          T* myPtr;
+                        };
+                      
+                      template <class T, class U>
+                      int operator==(const Pointer<T>& rhs, U* lhs)
+                        {
+                          return rhs.myPtr == lhs;
+                        }
+                      
+                      template <class T, class U>
+                      int operator==(const Pointer<T>& rhs, const U* lhs)
+                        {
+                          return rhs.myPtr == lhs;
+                        }
+                    ],
+                    [
+                      Pointer<int> foo;
+                      const int* bar;
+                      return foo == bar;
+                    ],
+                    ac_nscap_nonconst_opeq_bug="no",
+                    ac_nscap_nonconst_opeq_bug="yes")])
+CXXFLAGS="$_SAVE_CXXFLAGS"
+
+if test "$ac_nscap_nonconst_opeq_bug" = "yes" ; then
+    AC_DEFINE(NSCAP_DONT_PROVIDE_NONCONST_OPEQ)
+fi
+fi # SKIP_COMPILER_CHECKS
+
+dnl ========================================================
+dnl C++ rtti
+dnl Should be smarter and check that the compiler does indeed have rtti
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(cpp-rtti,
+[  --enable-cpp-rtti       Enable C++ RTTI ],
+[ _MOZ_USE_RTTI=1 ],
+[ _MOZ_USE_RTTI= ])
+
+if test "$_MOZ_USE_RTTI"; then
+   _MOZ_RTTI_FLAGS=$_MOZ_RTTI_FLAGS_ON
+else
+   _MOZ_RTTI_FLAGS=$_MOZ_RTTI_FLAGS_OFF
+fi
+
+dnl ========================================================
+dnl C++ exceptions (g++/egcs only - for now)
+dnl Should be smarter and check that the compiler does indeed have exceptions
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(cpp-exceptions,
+[  --enable-cpp-exceptions Enable C++ exceptions ],
+[ _MOZ_CPP_EXCEPTIONS=1 ],
+[ _MOZ_CPP_EXCEPTIONS= ])
+
+if test "$_MOZ_CPP_EXCEPTIONS"; then
+    _MOZ_EXCEPTIONS_FLAGS=$_MOZ_EXCEPTIONS_FLAGS_ON
+else
+    _MOZ_EXCEPTIONS_FLAGS=$_MOZ_EXCEPTIONS_FLAGS_OFF
+fi
+
+# Irix & OSF native compilers do not like exception declarations 
+# when exceptions are disabled
+if test -n "$MIPSPRO_CXX" -o -n "$COMPAQ_CXX" -o -n "$VACPP"; then
+    AC_DEFINE(CPP_THROW_NEW, [])
+else
+    AC_DEFINE(CPP_THROW_NEW, [throw()])
+fi
+AC_LANG_C
+
+dnl ========================================================
+dnl =
+dnl = Build depencency options
+dnl =
+dnl ========================================================
+MOZ_ARG_HEADER(Build dependencies)
+
+dnl ========================================================
+dnl = Do not auto generate dependency info
+dnl ========================================================
+MOZ_AUTO_DEPS=1
+MOZ_ARG_DISABLE_BOOL(auto-deps,
+[  --disable-auto-deps     Do not automatically generate dependency info],
+    MOZ_AUTO_DEPS=,
+    MOZ_AUTO_DEPS=1)
+
+if test -n "$MOZ_AUTO_DEPS"; then
+dnl ========================================================
+dnl = Use mkdepend instead of $CC -MD for dependency generation
+dnl ========================================================
+_cpp_md_flag=
+MOZ_ARG_DISABLE_BOOL(md,
+[  --disable-md            Do not use compiler-based dependencies ],
+  [_cpp_md_flag=],
+  [_cpp_md_flag=1],
+  [dnl Default is to turn on -MD if using GNU-compatible compilers
+   if test "$GNU_CC" -a "$GNU_CXX" -a "$OS_ARCH" != "WINNT" -a "$OS_ARCH" != "WINCE"; then
+     _cpp_md_flag=1
+   fi])
+if test "$_cpp_md_flag"; then
+  COMPILER_DEPEND=1
+  if test "$OS_ARCH" = "OpenVMS"; then
+    _DEPEND_CFLAGS='$(subst =, ,$(filter-out %/.pp,-MM=-MD=-MF=$(MDDEPDIR)/$(*F).pp))'
+  else
+    _DEPEND_CFLAGS='$(filter-out %/.pp,-Wp,-MD,$(MDDEPDIR)/$(*F).pp)'
+  fi
+else
+  COMPILER_DEPEND=
+  _USE_CPP_INCLUDE_FLAG=
+  _DEFINES_CFLAGS='$(ACDEFINES) -D_MOZILLA_CONFIG_H_ -DMOZILLA_CLIENT'
+  _DEFINES_CXXFLAGS='$(ACDEFINES) -D_MOZILLA_CONFIG_H_ -DMOZILLA_CLIENT'
+fi
+fi # MOZ_AUTO_DEPS
+MDDEPDIR='.deps'
+AC_SUBST(MOZ_AUTO_DEPS)
+AC_SUBST(COMPILER_DEPEND)
+AC_SUBST(MDDEPDIR)
+
+
+dnl ========================================================
+dnl =
+dnl = Static Build Options
+dnl =
+dnl ========================================================
+MOZ_ARG_HEADER(Static build options)
+MOZ_ARG_DISABLE_BOOL(shared,
+[  --disable-shared        Disable building of internal shared libs],
+    BUILD_SHARED_LIBS=)
+
+MOZ_ARG_ENABLE_BOOL(static,
+[  --enable-static         Enable building of internal static libs],
+    BUILD_STATIC_LIBS=1
+    MOZ_STATIC_COMPONENT_LIBS=1)
+
+if (test -z "$BUILD_SHARED_LIBS" && test -z "$BUILD_STATIC_LIBS") ||
+    (test -n "$BUILD_SHARED_LIBS" && test -n "$BUILD_STATIC_LIBS") ; then
+    AC_MSG_ERROR([Only one of --enable-shared or --enable-static must be specified.])
+fi
+
+MOZ_ARG_ENABLE_BOOL(libxul,
+[  --enable-libxul         Enable building of libxul],
+    MOZ_ENABLE_LIBXUL=1,
+    MOZ_ENABLE_LIBXUL=)
+
+if test -n "$MOZ_ENABLE_LIBXUL" -a -n "$BUILD_STATIC_LIBS"; then
+	AC_MSG_ERROR([--enable-libxul is not compatible with --enable-static])
+fi
+
+if test -n "$MOZ_ENABLE_LIBXUL" -a -z "$MOZ_XUL_APP"; then
+	AC_MSG_ERROR([--enable-libxul is only compatible with toolkit XUL applications.])
+fi
+
+if test -n "$MOZ_ENABLE_LIBXUL"; then
+    XPCOM_LIBS="$LIBXUL_LIBS"
+    AC_DEFINE(MOZ_ENABLE_LIBXUL)
+else
+    XPCOM_LIBS="$DYNAMIC_XPCOM_LIBS"
+fi
+
+dnl ========================================================
+dnl = Force JS to be a static lib
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(js-static-build,
+[  --enable-js-static-build  Force js to be a static lib],
+    JS_STATIC_BUILD=1,
+    JS_STATIC_BUILD= )
+
+AC_SUBST(JS_STATIC_BUILD)
+        
+if test -n "$JS_STATIC_BUILD"; then
+    AC_DEFINE(EXPORT_JS_API)
+
+if test -z "$BUILD_STATIC_LIBS"; then
+    AC_MSG_ERROR([--enable-js-static-build is only compatible with --enable-static])
+fi
+
+fi
+
+dnl ========================================================
+dnl =
+dnl = Standalone module options
+dnl = 
+dnl ========================================================
+MOZ_ARG_HEADER(Standalone module options (Not for building Mozilla))
+
+dnl ========================================================
+dnl = Only selectively build modules
+dnl ========================================================
+MOZ_ARG_ENABLE_STRING(standalone-modules,
+[  --enable-standalone-modules=mod1[,mod2]
+                          Enable standalone build of specific modules],
+[ BUILD_MODULES=`echo $enableval | sed 's/,/ /g'` ] )
+
+dnl Disable ldap if LDAP is not building all of Mozilla
+dnl and ldap isn't in the standalone list
+if test "$BUILD_MODULES" != "all" &&
+    test `echo "$BUILD_MODULES" | grep -c ldap` = 0 &&
+    test "$enable_ldap" != "yes"; then
+    MOZ_LDAP_XPCOM=
+fi
+
+dnl Check for GLib and libIDL.
+dnl ========================================================
+case "$target_os" in
+msvc*|mks*|cygwin*|mingw*|wince*)
+    SKIP_IDL_CHECK="yes"
+    ;;
+*)
+    SKIP_IDL_CHECK="no"
+    ;;
+esac
+
+if test -z "$COMPILE_ENVIRONMENT"; then
+    SKIP_IDL_CHECK="yes"
+fi
+
+dnl = Allow users to disable libIDL checking for standalone modules
+MOZ_ARG_WITHOUT_BOOL(libIDL,
+[  --without-libIDL        Skip check for libIDL (standalone modules only)],
+	SKIP_IDL_CHECK="yes")
+
+if test "$SKIP_IDL_CHECK" = "no"
+then
+    _LIBIDL_FOUND=
+    if test "$MACOS_SDK_DIR"; then 
+      dnl xpidl, and therefore libIDL, is only needed on the build host.
+      dnl Don't build it against the SDK, as that causes problems.
+      _MACSAVE_CFLAGS="$CFLAGS"
+      _MACSAVE_LIBS="$LIBS"
+      _MACSAVE_LDFLAGS="$LDFLAGS"
+      _MACSAVE_NEXT_ROOT="$NEXT_ROOT"
+      changequote(,)
+      CFLAGS=`echo $CFLAGS|sed -E -e "s%((-I|-isystem )${MACOS_SDK_DIR}/usr/(include|lib/gcc)[^ ]*)|-F${MACOS_SDK_DIR}(/System)?/Library/Frameworks[^ ]*|-nostdinc[^ ]*|-isysroot ${MACOS_SDK_DIR}%%g"`
+      LIBS=`echo $LIBS|sed -e "s?-L${MACOS_SDK_DIR}/usr/lib[^ ]*??g"`
+      LDFLAGS=`echo $LDFLAGS|sed -e "s?-Wl,-syslibroot,${MACOS_SDK_DIR}??g"`
+      changequote([,])
+      unset NEXT_ROOT
+    fi
+
+    if test "$MOZ_ENABLE_GTK2"; then
+        PKG_CHECK_MODULES(LIBIDL, libIDL-2.0 >= 0.8.0,_LIBIDL_FOUND=1,_LIBIDL_FOUND=)
+    fi
+    if test "$MOZ_ENABLE_GTK"; then
+        AM_PATH_LIBIDL($LIBIDL_VERSION,_LIBIDL_FOUND=1)
+    fi
+    dnl if no gtk/libIDL1 or gtk2/libIDL2 combination was found, fall back
+    dnl to either libIDL1 or libIDL2.
+    if test -z "$_LIBIDL_FOUND"; then
+        AM_PATH_LIBIDL($LIBIDL_VERSION,_LIBIDL_FOUND=1)
+        if test -z "$_LIBIDL_FOUND"; then
+            PKG_CHECK_MODULES(LIBIDL, libIDL-2.0 >= 0.8.0,_LIBIDL_FOUND=1)
+        fi
+    fi
+    dnl
+    dnl If we don't have a libIDL config program & not cross-compiling, 
+    dnl     look for orbit-config instead.
+    dnl
+    if test -z "$_LIBIDL_FOUND" && test -z "$CROSS_COMPILE"; then
+        AC_PATH_PROGS(ORBIT_CONFIG, $ORBIT_CONFIG orbit-config)
+        if test -n "$ORBIT_CONFIG"; then
+            AC_MSG_CHECKING([for ORBit libIDL usability])
+        	_ORBIT_CFLAGS=`${ORBIT_CONFIG} client --cflags`
+    	    _ORBIT_LIBS=`${ORBIT_CONFIG} client --libs`
+            _ORBIT_INC_PATH=`${PERL} -e '{ for $f (@ARGV) { print "$f " if ($f =~ m/^-I/); } }' -- ${_ORBIT_CFLAGS}`
+            _ORBIT_LIB_PATH=`${PERL} -e '{ for $f (@ARGV) { print "$f " if ($f =~ m/^-L/); } }' -- ${_ORBIT_LIBS}`
+            LIBIDL_CFLAGS="$_ORBIT_INC_PATH"
+            LIBIDL_LIBS="$_ORBIT_LIB_PATH -lIDL -lglib"
+            LIBIDL_CONFIG=
+            _SAVE_CFLAGS="$CFLAGS"
+            _SAVE_LIBS="$LIBS"
+            CFLAGS="$LIBIDL_CFLAGS $CFLAGS"
+            LIBS="$LIBIDL_LIBS $LIBS"
+            AC_TRY_RUN([
+#include <stdlib.h>
+#include <libIDL/IDL.h>
+int main() {
+  char *s;
+  s=strdup(IDL_get_libver_string());
+  if(s==NULL) {
+    exit(1);
+  }
+  exit(0);
+}
+            ], [_LIBIDL_FOUND=1
+                result="yes"],
+               [LIBIDL_CFLAGS=
+                LIBIDL_LIBS=
+                result="no"],
+               [_LIBIDL_FOUND=1
+                result="maybe"] )
+            AC_MSG_RESULT($result)
+            CFLAGS="$_SAVE_CFLAGS"
+            LIBS="$_SAVE_LIBS"
+        fi
+    fi
+    if test -z "$_LIBIDL_FOUND"; then
+        AC_MSG_ERROR([libIDL not found.
+        libIDL $LIBIDL_VERSION or higher is required.])
+    fi
+    if test "$MACOS_SDK_DIR"; then
+      CFLAGS="$_MACSAVE_CFLAGS"
+      LIBS="$_MACSAVE_LIBS"
+      LDFLAGS="$_MACSAVE_LDFLAGS"
+      if test -n "$_MACSAVE_NEXT_ROOT" ; then
+        export NEXT_ROOT="$_MACSAVE_NEXT_ROOT"
+      fi
+    fi
+fi
+
+if test -n "$CROSS_COMPILE"; then
+     if test -z "$HOST_LIBIDL_CONFIG"; then
+        HOST_LIBIDL_CONFIG="$LIBIDL_CONFIG"
+    fi
+    if test -n "$HOST_LIBIDL_CONFIG" && test "$HOST_LIBIDL_CONFIG" != "no"; then
+        HOST_LIBIDL_CFLAGS=`${HOST_LIBIDL_CONFIG} --cflags`
+        HOST_LIBIDL_LIBS=`${HOST_LIBIDL_CONFIG} --libs`
+    else
+        HOST_LIBIDL_CFLAGS="$LIBIDL_CFLAGS"
+        HOST_LIBIDL_LIBS="$LIBIDL_LIBS"
+    fi
+fi
+
+if test -z "$SKIP_PATH_CHECKS"; then
+if test -z "${GLIB_CFLAGS}" || test -z "${GLIB_LIBS}" ; then
+    if test "$MOZ_ENABLE_GTK2"; then
+        PKG_CHECK_MODULES(GLIB, glib-2.0 >= 1.3.7)
+    else
+        AM_PATH_GLIB(${GLIB_VERSION})
+    fi
+fi
+fi
+
+if test -z "${GLIB_GMODULE_LIBS}" -a -n "${GLIB_CONFIG}"; then
+    GLIB_GMODULE_LIBS=`$GLIB_CONFIG gmodule --libs`
+fi
+
+AC_SUBST(LIBIDL_CFLAGS)
+AC_SUBST(LIBIDL_LIBS)
+AC_SUBST(STATIC_LIBIDL)
+AC_SUBST(GLIB_CFLAGS)
+AC_SUBST(GLIB_LIBS)
+AC_SUBST(GLIB_GMODULE_LIBS)
+AC_SUBST(HOST_LIBIDL_CONFIG)
+AC_SUBST(HOST_LIBIDL_CFLAGS)
+AC_SUBST(HOST_LIBIDL_LIBS)
+
+dnl ========================================================
+dnl Check for libart
+dnl ========================================================
+if test "$MOZ_SVG_RENDERER_LIBART"; then
+  if test ! -f $topsrcdir/other-licenses/libart_lgpl/Makefile.in; then
+    AC_MSG_ERROR([You must check out the mozilla version of libart. Use
+mk_add_options MOZ_CO_MODULE=mozilla/other-licenses/libart_lgpl])
+  fi
+
+  dnl libart's configure hasn't been run yet, but we know what the
+  dnl answer should be anyway
+  MOZ_LIBART_CFLAGS='-I${DIST}/include/libart_lgpl'
+  case "$target_os" in
+  msvc*|mks*|cygwin*|mingw*|wince*)
+      MOZ_LIBART_LIBS='$(DIST)/lib/$(LIB_PREFIX)moz_art_lgpl.$(IMPORT_LIB_SUFFIX)' 
+      ;;
+  os2*)
+      MOZ_LIBART_LIBS='-lmoz_art -lm'
+      ;;
+  beos*)
+      MOZ_LIBART_LIBS='-lmoz_art_lgpl -lroot -lbe'
+      ;;
+  *)
+      MOZ_LIBART_LIBS='-lmoz_art_lgpl -lm'
+      ;;
+  esac
+  AC_FUNC_ALLOCA
+fi
+
+AC_SUBST(MOZ_LIBART_CFLAGS)
+AC_SUBST(MOZ_LIBART_LIBS)
+
+dnl ========================================================
+dnl Check for cairo
+dnl ========================================================
+if test "$MOZ_SVG_RENDERER_CAIRO" -o "$MOZ_ENABLE_CANVAS" -o "$MOZ_ENABLE_CAIRO_GFX" ; then
+   MOZ_CAIRO_CFLAGS='-I$(DIST)/include/cairo'
+
+   MOZ_TREE_CAIRO=1
+   MOZ_ARG_ENABLE_BOOL(system-cairo,
+   [ --enable-system-cairo Use system cairo (located with pkgconfig)],
+   MOZ_TREE_CAIRO=,
+   MOZ_TREE_CAIRO=1 )
+
+   if test "$MOZ_TREE_CAIRO"; then
+       # Check for headers defining standard int types.
+       AC_CHECK_HEADERS(stdint.h inttypes.h sys/int_types.h)
+
+       # For now we assume that we will have a uint64_t available through
+       # one of the above headers or mozstdint.h.
+       AC_DEFINE(HAVE_UINT64_T)
+
+       # Define macros for cairo-features.h
+       if test "$MOZ_X11"; then
+           XLIB_SURFACE_FEATURE="#define CAIRO_HAS_XLIB_SURFACE 1"
+           FT_FONT_FEATURE="#define CAIRO_HAS_FT_FONT 1"
+           MOZ_ENABLE_CAIRO_FT=1
+       fi
+       if test "$MOZ_WIDGET_TOOLKIT" = "mac" -o "$MOZ_WIDGET_TOOLKIT" = "cocoa"; then
+           QUARTZ_SURFACE_FEATURE="#define CAIRO_HAS_QUARTZ_SURFACE 1"
+           ATSUI_FONT_FEATURE="#define CAIRO_HAS_ATSUI_FONT 1"
+       fi
+       if test "$MOZ_WIDGET_TOOLKIT" = "windows"; then
+           WIN32_SURFACE_FEATURE="#define CAIRO_HAS_WIN32_SURFACE 1"
+           WIN32_FONT_FEATURE="#define CAIRO_HAS_WIN32_FONT 1"
+       fi
+       if test "$MOZ_WIDGET_TOOLKIT" = "os2"; then
+           OS2_SURFACE_FEATURE="#define CAIRO_HAS_OS2_SURFACE 1"
+           FT_FONT_FEATURE="#define CAIRO_HAS_FT_FONT 1"
+           CAIRO_FT_CFLAGS="-I${MZFTCFGFT2}/include"
+           CAIRO_FT_LIBS="-L${MZFTCFGFT2}/lib -lmozft -lmzfntcfg"
+           MOZ_ENABLE_CAIRO_FT=1
+       fi
+       AC_SUBST(MOZ_ENABLE_CAIRO_FT)
+       AC_SUBST(CAIRO_FT_CFLAGS)
+
+       AC_SUBST(PS_SURFACE_FEATURE)
+       AC_SUBST(PDF_SURFACE_FEATURE)
+       AC_SUBST(XLIB_SURFACE_FEATURE)
+       AC_SUBST(QUARTZ_SURFACE_FEATURE)
+       AC_SUBST(XCB_SURFACE_FEATURE)
+       AC_SUBST(WIN32_SURFACE_FEATURE)
+       AC_SUBST(OS2_SURFACE_FEATURE)
+       AC_SUBST(GLITZ_SURFACE_FEATURE)
+       AC_SUBST(FT_FONT_FEATURE)
+       AC_SUBST(WIN32_FONT_FEATURE)
+       AC_SUBST(ATSUI_FONT_FEATURE)
+       AC_SUBST(PNG_FUNCTIONS_FEATURE)
+
+       if test "$_WIN32_MSVC"; then
+           MOZ_CAIRO_LIBS='$(DIST)/lib/mozcairo.lib $(DIST)/lib/mozlibpixman.lib'
+       else
+           MOZ_CAIRO_LIBS="-lmozcairo -lmozlibpixman $CAIRO_FT_LIBS"
+
+           if test "$MOZ_X11"; then
+               MOZ_CAIRO_LIBS="$MOZ_CAIRO_LIBS $XLDFLAGS -lXrender $XLIBS -lfontconfig -lfreetype"
+           fi
+           if test "$MOZ_WIDGET_TOOLKIT" = "windows"; then
+               MOZ_CAIRO_LIBS="$MOZ_CAIRO_LIBS -lgdi32"
+           fi
+       fi
+   else
+      PKG_CHECK_MODULES(CAIRO, cairo >= $CAIRO_VERSION)
+      MOZ_CAIRO_CFLAGS=$CAIRO_CFLAGS
+      MOZ_CAIRO_LIBS=$CAIRO_LIBS
+   fi
+fi
+
+AC_SUBST(MOZ_TREE_CAIRO)
+AC_SUBST(MOZ_CAIRO_CFLAGS)
+AC_SUBST(MOZ_CAIRO_LIBS)
+
+dnl ========================================================
+dnl disable xul
+dnl ========================================================
+MOZ_ARG_DISABLE_BOOL(xul,
+[  --disable-xul           Disable XUL],
+    MOZ_XUL= )
+if test "$MOZ_XUL"; then
+  AC_DEFINE(MOZ_XUL)
+else
+  dnl remove extensions that require XUL
+  MOZ_EXTENSIONS=`echo $MOZ_EXTENSIONS | sed -e 's/inspector//' -e 's/venkman//' -e 's/irc//' -e 's/tasks//'`
+fi
+
+AC_SUBST(MOZ_XUL)
+
+dnl ========================================================
+dnl Python XPCOM bindings - if enabled, we must locate Python.
+dnl ========================================================
+dnl
+dnl Allow PYTHON to point to the Python interpreter to use.
+dnl If not set, we use whatever Python we can find.  Setting
+dnl PYTHON will allow you to build from any Python version you nominate
+dnl
+dnl If future Python based extensions are added, some of this should
+dnl be split out appropriately.
+if test `echo "$MOZ_EXTENSIONS" | grep -c python/xpcom` -ne 0; then
+    dnl If PYTHON is in the environment, we use that
+    if test -z "$PYTHON"; then
+        AC_PATH_PROG(PYTHON, python, :)
+    fi
+    if test "$OS_ARCH" = "WINNT"; then
+        dnl Convert to cygwin style "mixed" (ie, "c:/path/file.exe")
+        PYTHON=`cygpath -t mixed $PYTHON`
+    fi
+    if test ! -x "$PYTHON"; then
+        AC_MSG_ERROR([Could not find Python - please adjust your PATH, or set PYTHON.])
+    fi
+    MOZ_PYTHON=$PYTHON
+    dnl Ask Python what its version number is
+    MOZ_PYTHON_VER=`$PYTHON -c "import sys;print '%d%d' % sys.version_info[[0:2]]"`
+    MOZ_PYTHON_VER_DOTTED=`$PYTHON -c "import sys;print '%d.%d' % sys.version_info[[0:2]]"`
+    dnl Ask for the Python "prefix" (ie, home/source dir)
+    MOZ_PYTHON_PREFIX=`$PYTHON -c "import sys; print sys.prefix"`
+    dnl Setup the include and library directories.
+    if test "$OS_ARCH" = "WINNT"; then
+        MOZ_PYTHON_PREFIX=`cygpath -t mixed $MOZ_PYTHON_PREFIX`
+        dnl Source trees have "include" and "PC" for .h, and "PCbuild" for .lib
+        dnl Binary trees have "include" for .h, and "libs" for .lib
+        dnl We add 'em both - along with quotes, to handle spaces.
+        MOZ_PYTHON_DLL_SUFFIX=.pyd
+        MOZ_PYTHON_INCLUDES="\"-I$MOZ_PYTHON_PREFIX/include\" \"-I$MOZ_PYTHON_PREFIX/PC\""
+        MOZ_PYTHON_LIBS="\"/libpath:$MOZ_PYTHON_PREFIX/PCBuild\" \"/libpath:$MOZ_PYTHON_PREFIX/libs\""
+    else
+        dnl Non-Windows include and libs
+        MOZ_PYTHON_DLL_SUFFIX=$DLL_SUFFIX
+        PYTHON_INCLUDE_SRC=$MOZ_PYTHON_PREFIX/include/python$MOZ_PYTHON_VER_DOTTED
+        PYTHON_LIB_SRC=`$PYTHON  -c 'from distutils import sysconfig; print sysconfig.get_config_var("LIBPL")'`
+        if test ! -f $PYTHON_INCLUDE_SRC/Python.h; then
+            AC_MSG_ERROR([Include directory $PYTHON_INCLUDE_SRC not found or does not contain development headers])
+        fi
+        MOZ_PYTHON_INCLUDES="-I$PYTHON_INCLUDE_SRC"
+        MOZ_PYTHON_LIBS="-L$PYTHON_LIB_SRC -lpython$MOZ_PYTHON_VER_DOTTED"
+    fi
+    dnl Handle "_d" on Windows
+    if test "$OS_ARCH" = "WINNT" && test -n "$MOZ_DEBUG"; then
+        MOZ_PYTHON_DEBUG_SUFFIX="_d"
+    else
+        MOZ_PYTHON_DEBUG_SUFFIX=
+    fi
+    AC_MSG_RESULT(Building PyXPCOM using Python-$MOZ_PYTHON_VER_DOTTED from $MOZ_PYTHON_PREFIX)
+fi
+AC_SUBST(MOZ_PYTHON)
+AC_SUBST(MOZ_PYTHON_PREFIX)
+AC_SUBST(MOZ_PYTHON_INCLUDES)
+AC_SUBST(MOZ_PYTHON_LIBS)
+AC_SUBST(MOZ_PYTHON_VER)
+AC_SUBST(MOZ_PYTHON_VER_DOTTED)
+AC_SUBST(MOZ_PYTHON_DEBUG_SUFFIX)
+AC_SUBST(MOZ_PYTHON_DLL_SUFFIX)
+
+dnl ========================================================
+dnl disable profile sharing
+dnl ========================================================
+MOZ_ARG_DISABLE_BOOL(profilesharing,
+[  --disable-profilesharing           Disable profile sharing],
+    MOZ_PROFILESHARING=,
+    MOZ_PROFILESHARING=1 )
+if test "$MOZ_PROFILESHARING"; then
+  MOZ_IPCD=1
+  AC_DEFINE(MOZ_PROFILESHARING)
+fi
+
+dnl ========================================================
+dnl disable profile locking
+dnl   do no use this in applications that can have more than
+dnl   one process accessing the profile directory.
+dnl ========================================================
+MOZ_ARG_DISABLE_BOOL(profilelocking,
+[  --disable-profilelocking           Disable profile locking],
+    MOZ_PROFILELOCKING=,
+    MOZ_PROFILELOCKING=1 )
+if test "$MOZ_PROFILELOCKING"; then
+  AC_DEFINE(MOZ_PROFILELOCKING)
+fi
+
+
+dnl ========================================================
+dnl necko configuration options
+dnl ========================================================
+
+dnl
+dnl option to disable various necko protocols
+dnl
+MOZ_ARG_ENABLE_STRING(necko-protocols,
+[  --enable-necko-protocols[={http,ftp,default,all,none}]
+                          Enable/disable specific protocol handlers],
+[ for option in `echo $enableval | sed 's/,/ /g'`; do
+    if test "$option" = "yes" || test "$option" = "all"; then
+        NECKO_PROTOCOLS="$NECKO_PROTOCOLS $NECKO_PROTOCOLS_DEFAULT"
+    elif test "$option" = "no" || test "$option" = "none"; then
+        NECKO_PROTOCOLS=""
+    elif test "$option" = "default"; then
+        NECKO_PROTOCOLS="$NECKO_PROTOCOLS $NECKO_PROTOCOLS_DEFAULT"
+    elif test `echo "$option" | grep -c \^-` != 0; then
+        option=`echo $option | sed 's/^-//'`
+        NECKO_PROTOCOLS=`echo "$NECKO_PROTOCOLS" | sed "s/ ${option}//"`
+    else
+        NECKO_PROTOCOLS="$NECKO_PROTOCOLS $option"
+    fi
+done],
+    NECKO_PROTOCOLS="$NECKO_PROTOCOLS_DEFAULT")
+dnl Remove dupes
+NECKO_PROTOCOLS=`${PERL} ${srcdir}/build/unix/uniq.pl ${NECKO_PROTOCOLS}`
+AC_SUBST(NECKO_PROTOCOLS)
+for p in $NECKO_PROTOCOLS; do
+    AC_DEFINE_UNQUOTED(NECKO_PROTOCOL_$p)
+done
+
+dnl
+dnl option to disable necko's disk cache
+dnl
+MOZ_ARG_DISABLE_BOOL(necko-disk-cache,
+[  --disable-necko-disk-cache
+                          Disable necko disk cache],
+    NECKO_DISK_CACHE=,
+    NECKO_DISK_CACHE=1)
+AC_SUBST(NECKO_DISK_CACHE)
+if test "$NECKO_DISK_CACHE"; then
+    AC_DEFINE(NECKO_DISK_CACHE)
+fi
+
+dnl
+dnl option to minimize size of necko's i/o buffers
+dnl
+MOZ_ARG_ENABLE_BOOL(necko-small-buffers,
+[  --enable-necko-small-buffers
+                          Minimize size of necko's i/o buffers],
+    NECKO_SMALL_BUFFERS=1,
+    NECKO_SMALL_BUFFERS=)
+AC_SUBST(NECKO_SMALL_BUFFERS)
+if test "$NECKO_SMALL_BUFFERS"; then
+    AC_DEFINE(NECKO_SMALL_BUFFERS)
+fi 
+
+dnl
+dnl option to disable cookies
+dnl
+MOZ_ARG_DISABLE_BOOL(cookies,
+[  --disable-cookies       Disable cookie support],
+    NECKO_COOKIES=,
+    NECKO_COOKIES=1)
+AC_SUBST(NECKO_COOKIES)
+if test "$NECKO_COOKIES"; then
+    AC_DEFINE(NECKO_COOKIES)
+fi
+
+dnl NECKO_ configuration options are not global
+_NON_GLOBAL_ACDEFINES="$_NON_GLOBAL_ACDEFINES NECKO_"
+
+dnl ========================================================
+dnl string api compatibility
+dnl ========================================================
+MOZ_ARG_DISABLE_BOOL(v1-string-abi,
+[  --disable-v1-string-abi   Disable binary compatibility layer for strings],
+    MOZ_V1_STRING_ABI=,
+    MOZ_V1_STRING_ABI=1)
+AC_SUBST(MOZ_V1_STRING_ABI)
+if test "$MOZ_V1_STRING_ABI"; then
+    AC_DEFINE(MOZ_V1_STRING_ABI)
+fi
+
+dnl Only build Mork if it's required
+AC_SUBST(MOZ_MORK)
+if test "$MOZ_MORK"; then
+  AC_DEFINE(MOZ_MORK)
+fi
+
+dnl Build the lightweight Mork reader if required
+AC_SUBST(MOZ_MORKREADER)
+if test "$MOZ_MORKREADER"; then
+  AC_DEFINE(MOZ_MORKREADER)
+fi
+
+dnl ========================================================
+if test "$MOZ_DEBUG" || test "$NS_TRACE_MALLOC"; then
+    MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS=
+fi
+
+if test "$MOZ_LDAP_XPCOM"; then
+    LDAP_CFLAGS='-I${DIST}/public/ldap'
+    if test "$OS_ARCH" = "WINNT"; then
+        if test -n "$GNU_CC"; then
+            LDAP_LIBS='-L$(DIST)/lib -lnsldap32v50 -lnsldappr32v50'
+        else
+            LDAP_LIBS='$(DIST)/lib/$(LIB_PREFIX)nsldap32v50.${IMPORT_LIB_SUFFIX} $(DIST)/lib/$(LIB_PREFIX)nsldappr32v50.${IMPORT_LIB_SUFFIX}'
+        fi
+    elif test "$VACPP"; then
+            LDAP_LIBS='$(DIST)/lib/$(LIB_PREFIX)ldap50.${IMPORT_LIB_SUFFIX} $(DIST)/lib/$(LIB_PREFIX)prldap50.${IMPORT_LIB_SUFFIX}'
+    else
+        LDAP_LIBS='-L${DIST}/bin -L${DIST}/lib -lldap50 -llber50 -lprldap50'
+    fi
+fi
+
+if test "$COMPILE_ENVIRONMENT"; then
+if test "$SUNCTL"; then
+    dnl older versions of glib do not seem to have gmodule which ctl needs
+    _SAVE_CFLAGS=$CFLAGS
+    CFLAGS="$CFLAGS $GLIB_CFLAGS"
+    AC_LANG_SAVE
+    AC_LANG_C
+    AC_TRY_COMPILE([#include <gmodule.h>],
+        [ int x = 1; x++; ],,
+        [AC_MSG_ERROR([Cannot build ctl without gmodule support in glib.])])
+    AC_LANG_RESTORE
+    CFLAGS=$_SAVE_CFLAGS
+    AC_DEFINE(SUNCTL)
+fi
+fi # COMPILE_ENVIRONMENT
+
+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(WINDRES)
+AC_SUBST(USE_SHORT_LIBNAME)
+AC_SUBST(IMPLIB)
+AC_SUBST(FILTER)
+AC_SUBST(BIN_FLAGS)
+AC_SUBST(NS_USE_NATIVE)
+AC_SUBST(MOZ_WIDGET_TOOLKIT)
+AC_SUBST(MOZ_WIDGET_TOOLKIT_LDFLAGS)
+AC_SUBST(WIDGET_DLL)
+AC_SUBST(GFXWIN_DLL)
+AC_SUBST(MOZ_GFX_TOOLKIT)
+AC_SUBST(MOZ_GFX_TOOLKIT_LDFLAGS)
+AC_SUBST(MOZ_UPDATE_XTERM)
+AC_SUBST(MINIMO)
+AC_SUBST(MOZ_MATHML)
+AC_SUBST(MOZ_XTF)
+AC_SUBST(MOZ_NO_INSPECTOR_APIS)
+AC_SUBST(MOZ_SVG)
+AC_SUBST(MOZ_SVG_FOREIGNOBJECT)
+AC_SUBST(MOZ_SVG_RENDERER_GDIPLUS)
+AC_SUBST(MOZ_SVG_RENDERER_LIBART)
+AC_SUBST(MOZ_SVG_RENDERER_CAIRO)
+AC_SUBST(TX_EXE)
+AC_SUBST(MOZ_JS_LIBS)
+AC_SUBST(MOZ_PSM)
+AC_SUBST(BUILD_MODULES)
+AC_SUBST(MOZ_DEBUG)
+AC_SUBST(MOZ_DEBUG_MODULES)
+AC_SUBST(MOZ_PROFILE_MODULES)
+AC_SUBST(MOZ_DEBUG_ENABLE_DEFS)
+AC_SUBST(MOZ_DEBUG_DISABLE_DEFS)
+AC_SUBST(MOZ_DEBUG_FLAGS)
+AC_SUBST(MOZ_DEBUG_LDFLAGS)
+AC_SUBST(MOZ_DBGRINFO_MODULES)
+AC_SUBST(MOZ_EXTENSIONS)
+AC_SUBST(MOZ_IMG_DECODERS)
+AC_SUBST(MOZ_IMG_ENCODERS)
+AC_SUBST(MOZ_JSDEBUGGER)
+AC_SUBST(MOZ_OJI)
+AC_SUBST(MOZ_NO_XPCOM_OBSOLETE)
+AC_SUBST(MOZ_NO_FAST_LOAD)
+AC_SUBST(MOZ_PLUGINS)
+AC_SUBST(ENABLE_EAZEL_PROFILER)
+AC_SUBST(EAZEL_PROFILER_CFLAGS)
+AC_SUBST(EAZEL_PROFILER_LIBS)
+AC_SUBST(MOZ_PERF_METRICS)
+AC_SUBST(GC_LEAK_DETECTOR)
+AC_SUBST(MOZ_LOG_REFCNT)
+AC_SUBST(MOZ_LEAKY)
+AC_SUBST(MOZ_JPROF)
+AC_SUBST(MOZ_XPCTOOLS)
+AC_SUBST(MOZ_JSLOADER)
+AC_SUBST(MOZ_USE_NATIVE_UCONV)
+AC_SUBST(MOZ_INSURE)
+AC_SUBST(MOZ_INSURE_DIRS)
+AC_SUBST(MOZ_INSURE_EXCLUDE_DIRS)
+AC_SUBST(MOZ_QUANTIFY)
+AC_SUBST(MOZ_INSURIFYING)
+AC_SUBST(MOZ_LDAP_XPCOM)
+AC_SUBST(MOZ_LDAP_XPCOM_EXPERIMENTAL)
+AC_SUBST(LDAP_CFLAGS)
+AC_SUBST(LDAP_LIBS)
+AC_SUBST(LIBICONV)
+AC_SUBST(MOZ_PLACES)
+AC_SUBST(MOZ_STORAGE)
+AC_SUBST(MOZ_FEEDS)
+AC_SUBST(NS_PRINTING)
+
+AC_SUBST(MOZ_JAVAXPCOM)
+AC_SUBST(JAVA_INCLUDE_PATH)
+AC_SUBST(JAVAC)
+AC_SUBST(JAR)
+
+AC_SUBST(MOZ_PROFILESHARING)
+AC_SUBST(MOZ_PROFILELOCKING)
+
+AC_SUBST(MOZ_IPCD)
+
+AC_SUBST(HAVE_XIE)
+AC_SUBST(MOZ_XIE_LIBS)
+AC_SUBST(MOZ_XPRINT_CFLAGS)
+AC_SUBST(MOZ_XPRINT_LDFLAGS)
+AC_SUBST(MOZ_ENABLE_XPRINT)
+AC_SUBST(MOZ_ENABLE_POSTSCRIPT)
+AC_SUBST(MOZ_XINERAMA_LIBS)
+AC_SUBST(MOZ_ENABLE_XINERAMA)
+
+AC_SUBST(XPCOM_USE_LEA)
+AC_SUBST(BUILD_SHARED_LIBS)
+AC_SUBST(BUILD_STATIC_LIBS)
+AC_SUBST(MOZ_STATIC_COMPONENT_LIBS)
+AC_SUBST(MOZ_ENABLE_LIBXUL)
+AC_SUBST(ENABLE_TESTS)
+AC_SUBST(IBMBIDI)
+AC_SUBST(SUNCTL)
+AC_SUBST(ACCESSIBILITY)
+AC_SUBST(MOZ_XPINSTALL)
+AC_SUBST(MOZ_VIEW_SOURCE)
+AC_SUBST(MOZ_SINGLE_PROFILE)
+AC_SUBST(MOZ_XPFE_COMPONENTS)
+AC_SUBST(MOZ_USER_DIR)
+
+AC_SUBST(ENABLE_STRIP)
+AC_SUBST(USE_ELF_DYNSTR_GC)
+AC_SUBST(USE_PREBINDING)
+AC_SUBST(INCREMENTAL_LINKER)
+AC_SUBST(MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS)
+AC_SUBST(MOZ_COMPONENT_NSPR_LIBS)
+AC_SUBST(MOZ_XPCOM_OBSOLETE_LIBS)
+
+AC_SUBST(MOZ_FIX_LINK_PATHS)
+AC_SUBST(XPCOM_LIBS)
+AC_SUBST(XPCOM_FROZEN_LDOPTS)
+AC_SUBST(XPCOM_GLUE_LDOPTS)
+AC_SUBST(XPCOM_STANDALONE_GLUE_LDOPTS)
+
+AC_SUBST(USE_DEPENDENT_LIBS)
+
+AC_SUBST(MOZ_BUILD_ROOT)
+AC_SUBST(MOZ_OS2_TOOLS)
+AC_SUBST(MOZ_OS2_EMX_OBJECTFORMAT)
+
+AC_SUBST(MOZ_POST_DSO_LIB_COMMAND)
+AC_SUBST(MOZ_POST_PROGRAM_COMMAND)
+AC_SUBST(MOZ_REORDER)
+AC_SUBST(MOZ_TIMELINE)
+AC_SUBST(WINCE)
+AC_SUBST(TARGET_DEVICE)
+
+AC_SUBST(MOZ_APP_NAME)
+AC_SUBST(MOZ_APP_DISPLAYNAME)
+AC_SUBST(MOZ_APP_VERSION)
+AC_SUBST(FIREFOX_VERSION)
+AC_SUBST(THUNDERBIRD_VERSION)
+AC_SUBST(SUNBIRD_VERSION)
+AC_SUBST(SEAMONKEY_VERSION)
+
+AC_SUBST(MOZ_PKG_SPECIAL)
+
+dnl win32 options
+AC_SUBST(MOZ_PROFILE)
+AC_SUBST(MOZ_DEBUG_SYMBOLS)
+AC_SUBST(MOZ_COVERAGE)
+AC_SUBST(MOZ_MAPINFO)
+AC_SUBST(MOZ_BROWSE_INFO)
+AC_SUBST(MOZ_TOOLS_DIR)
+AC_SUBST(CYGWIN_WRAPPER)
+AC_SUBST(AS_PERL)
+
+dnl Echo the CFLAGS to remove extra whitespace.
+CFLAGS=`echo \
+	$_WARNINGS_CFLAGS \
+	$CFLAGS`
+
+CXXFLAGS=`echo \
+	$_MOZ_RTTI_FLAGS \
+	$_MOZ_EXCEPTIONS_FLAGS \
+	$_WARNINGS_CXXFLAGS \
+	$CXXFLAGS`
+
+COMPILE_CFLAGS=`echo \
+    $_DEFINES_CFLAGS \
+	$_DEPEND_CFLAGS \
+    $COMPILE_CFLAGS`
+
+COMPILE_CXXFLAGS=`echo \
+    $_DEFINES_CXXFLAGS \
+	$_DEPEND_CFLAGS \
+    $COMPILE_CXXFLAGS`
+
+AC_SUBST(SYSTEM_MAKEDEPEND)
+AC_SUBST(SYSTEM_JPEG)
+AC_SUBST(SYSTEM_PNG)
+AC_SUBST(SYSTEM_ZLIB)
+
+AC_SUBST(JPEG_CFLAGS)
+AC_SUBST(JPEG_LIBS)
+AC_SUBST(ZLIB_CFLAGS)
+AC_SUBST(ZLIB_LIBS)
+AC_SUBST(PNG_CFLAGS)
+AC_SUBST(PNG_LIBS)
+
+AC_SUBST(MOZ_JPEG_CFLAGS)
+AC_SUBST(MOZ_JPEG_LIBS)
+AC_SUBST(MOZ_ZLIB_CFLAGS)
+AC_SUBST(MOZ_ZLIB_LIBS)
+AC_SUBST(MOZ_PNG_CFLAGS)
+AC_SUBST(MOZ_PNG_LIBS)
+
+AC_SUBST(NSPR_CFLAGS)
+AC_SUBST(NSPR_LIBS)
+AC_SUBST(MOZ_NATIVE_NSPR)
+
+AC_SUBST(NSS_CFLAGS)
+AC_SUBST(NSS_LIBS)
+AC_SUBST(NSS_DEP_LIBS)
+AC_SUBST(MOZ_NATIVE_NSS)
+
+AC_SUBST(CFLAGS)
+AC_SUBST(CXXFLAGS)
+AC_SUBST(CPPFLAGS)
+AC_SUBST(COMPILE_CFLAGS)
+AC_SUBST(COMPILE_CXXFLAGS)
+AC_SUBST(LDFLAGS)
+AC_SUBST(LIBS)
+AC_SUBST(CROSS_COMPILE)
+
+AC_SUBST(HOST_CC)
+AC_SUBST(HOST_CXX)
+AC_SUBST(HOST_CFLAGS)
+AC_SUBST(HOST_CXXFLAGS)
+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_NSPR_MDCPUCFG)
+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(MOZ_DISABLE_JAR_PACKAGING)
+AC_SUBST(MOZ_CHROME_FILE_FORMAT)
+
+AC_SUBST(WRAP_MALLOC_CFLAGS)
+AC_SUBST(WRAP_MALLOC_LIB)
+AC_SUBST(MKSHLIB)
+AC_SUBST(MKCSHLIB)
+AC_SUBST(MKSHLIB_FORCE_ALL)
+AC_SUBST(MKSHLIB_UNFORCE_ALL)
+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)
+
+if test "$USING_HCC"; then
+   CC='${topsrcdir}/build/hcc'
+   CC="$CC '$_OLDCC'"
+   CXX='${topsrcdir}/build/hcpp'
+   CXX="$CXX '$_OLDCXX'"
+   AC_SUBST(CC)
+   AC_SUBST(CXX)
+fi
+
+dnl Check for missing components
+if test "$COMPILE_ENVIRONMENT"; then
+if test "$MOZ_X11"; then
+    dnl ====================================================
+    dnl = Check if X headers exist
+    dnl ====================================================
+    _SAVE_CFLAGS=$CFLAGS
+    CFLAGS="$CFLAGS $XCFLAGS"
+    AC_TRY_COMPILE([
+        #include <stdio.h>
+        #include <X11/Xlib.h>
+    ],
+    [
+        Display *dpy = 0;
+        if ((dpy = XOpenDisplay(NULL)) == NULL) {
+            fprintf(stderr, ": can't open %s\n", XDisplayName(NULL));
+            exit(1);
+        }
+    ], [], 
+    [ AC_MSG_ERROR([Could not compile basic X program.]) ])
+    CFLAGS="$_SAVE_CFLAGS"
+
+    if test ! -z "$MISSING_X"; then
+        AC_MSG_ERROR([ Could not find the following X libraries: $MISSING_X ]);
+    fi
+
+fi # MOZ_X11
+fi # COMPILE_ENVIRONMENT
+
+dnl Set various defines and substitutions
+dnl ========================================================
+
+if test "$OS_ARCH" = "OS2" -a "$VACPP" = "yes"; then
+      LIBS='so32dll.lib tcp32dll.lib'
+elif test "$OS_ARCH" = "BeOS"; then
+  AC_DEFINE(XP_BEOS)
+  MOZ_MOVEMAIL=1
+elif test "$OS_ARCH" = "Darwin"; then
+  AC_DEFINE(XP_UNIX)
+  AC_DEFINE(UNIX_ASYNC_DNS)
+  MOZ_MOVEMAIL=1
+elif test "$OS_ARCH" = "OpenVMS"; then
+  AC_DEFINE(XP_UNIX)
+elif test "$OS_ARCH" != "WINNT" -a "$OS_ARCH" != "OS2" -a "$OS_ARCH" != "WINCE"; then
+  AC_DEFINE(XP_UNIX)
+  AC_DEFINE(UNIX_ASYNC_DNS)
+  MOZ_MOVEMAIL=1
+fi
+AC_SUBST(MOZ_MOVEMAIL)
+
+AC_DEFINE(JS_THREADSAFE)
+
+if test "$MOZ_DEBUG"; then
+    AC_DEFINE(MOZ_REFLOW_PERF)
+    AC_DEFINE(MOZ_REFLOW_PERF_DSP)
+fi
+
+if test "$ACCESSIBILITY" -a "$MOZ_ENABLE_GTK2" ; then
+    AC_DEFINE(MOZ_ACCESSIBILITY_ATK)
+fi
+
+# Define MOZILLA_1_8_BRANCH on the branch for code that is kept in sync
+# between branch and trunk.
+AC_DEFINE(MOZILLA_1_8_BRANCH)
+MOZILLA_1_8_BRANCH=1
+AC_SUBST(MOZILLA_1_8_BRANCH)
+
+# Used for LD_LIBRARY_PATH of run_viewer target
+LIBS_PATH=
+for lib_arg in $NSPR_LIBS $TK_LIBS; do
+  case $lib_arg in
+    -L* ) LIBS_PATH="${LIBS_PATH:+$LIBS_PATH:}"`expr $lib_arg : "-L\(.*\)"` ;;
+      * ) ;;
+  esac
+done
+AC_SUBST(LIBS_PATH)
+
+dnl ========================================================
+dnl Use cygwin wrapper for win32 builds, except MSYS/MinGW
+dnl ========================================================
+case "$host_os" in
+mingw*)
+    WIN_TOP_SRC=`cd $srcdir; pwd -W`
+    ;;
+cygwin*|msvc*|mks*)
+    HOST_CC="\$(CYGWIN_WRAPPER) $HOST_CC"
+    HOST_CXX="\$(CYGWIN_WRAPPER) $HOST_CXX"
+    CC="\$(CYGWIN_WRAPPER) $CC"
+    CXX="\$(CYGWIN_WRAPPER) $CXX"
+    CPP="\$(CYGWIN_WRAPPER) $CPP"
+    LD="\$(CYGWIN_WRAPPER) $LD"
+    AS="\$(CYGWIN_WRAPPER) $AS"
+    RC="\$(CYGWIN_WRAPPER) $RC"
+    MIDL="\$(CYGWIN_WRAPPER) $MIDL"
+    CYGDRIVE_MOUNT=`mount -p | awk '{ if (/^\//) { print $1; exit } }'`
+    WIN_TOP_SRC=`cygpath -a -w $srcdir | sed -e 's|\\\\|/|g'`
+    ;;
+esac
+
+AC_SUBST(CYGDRIVE_MOUNT)
+AC_SUBST(WIN_TOP_SRC)
+
+AC_SUBST(MOZILLA_VERSION)
+
+. ${srcdir}/config/chrome-versions.sh
+AC_SUBST(MOZILLA_LOCALE_VERSION)
+AC_SUBST(MOZILLA_REGION_VERSION)
+AC_DEFINE_UNQUOTED(MOZILLA_LOCALE_VERSION,"$MOZILLA_LOCALE_VERSION")
+AC_DEFINE_UNQUOTED(MOZILLA_REGION_VERSION,"$MOZILLA_REGION_VERSION")
+AC_DEFINE_UNQUOTED(MOZILLA_SKIN_VERSION,"$MOZILLA_SKIN_VERSION")
+
+AC_SUBST(ac_configure_args)
+
+dnl Spit out some output
+dnl ========================================================
+
+dnl The following defines are used by xpcom
+_NON_GLOBAL_ACDEFINES="$_NON_GLOBAL_ACDEFINES
+CPP_THROW_NEW
+HAVE_CPP_2BYTE_WCHAR_T
+HAVE_CPP_ACCESS_CHANGING_USING
+HAVE_CPP_AMBIGUITY_RESOLVING_USING
+HAVE_CPP_BOOL
+HAVE_CPP_DYNAMIC_CAST_TO_VOID_PTR
+HAVE_CPP_EXPLICIT
+HAVE_CPP_MODERN_SPECIALIZE_TEMPLATE_SYNTAX
+HAVE_CPP_NAMESPACE_STD
+HAVE_CPP_NEW_CASTS
+HAVE_CPP_PARTIAL_SPECIALIZATION
+HAVE_CPP_TROUBLE_COMPARING_TO_ZERO
+HAVE_CPP_TYPENAME
+HAVE_CPP_UNAMBIGUOUS_STD_NOTEQUAL
+HAVE_STATVFS
+NEED_CPP_UNUSED_IMPLEMENTATIONS
+NEW_H
+HAVE_GETPAGESIZE
+HAVE_ICONV
+HAVE_ICONV_WITH_CONST_INPUT
+HAVE_MBRTOWC
+HAVE_SYS_MOUNT_H
+HAVE_SYS_VFS_H
+HAVE_WCRTOMB
+MOZ_V1_STRING_ABI
+"
+
+AC_CONFIG_HEADER(
+gfx/gfx-config.h
+netwerk/necko-config.h
+xpcom/xpcom-config.h
+xpcom/xpcom-private.h
+)
+
+# Save the defines header file before autoconf removes it.
+# (Do not add AC_DEFINE calls after this line.)
+  _CONFIG_TMP=confdefs-tmp.h
+  _CONFIG_DEFS_H=mozilla-config.h
+
+  cat > $_CONFIG_TMP <<\EOF
+/* List of defines generated by configure. Included with preprocessor flag,
+ * -include, to avoid long list of -D defines on the compile command-line.
+ * Do not edit.
+ */
+
+#ifndef _MOZILLA_CONFIG_H_
+#define _MOZILLA_CONFIG_H_
+EOF
+
+_EGREP_PATTERN='^#define ('
+if test -n "$_NON_GLOBAL_ACDEFINES"; then
+    for f in $_NON_GLOBAL_ACDEFINES; do
+        _EGREP_PATTERN="${_EGREP_PATTERN}$f|"
+    done
+fi
+_EGREP_PATTERN="${_EGREP_PATTERN}dummy_never_defined)"
+ 
+  sort confdefs.h | egrep -v "$_EGREP_PATTERN" >> $_CONFIG_TMP
+
+  cat >> $_CONFIG_TMP <<\EOF
+
+#endif /* _MOZILLA_CONFIG_H_ */
+
+EOF
+
+  # Only write mozilla-config.h when something changes (or it doesn't exist)
+  if cmp -s $_CONFIG_TMP $_CONFIG_DEFS_H; then
+    rm $_CONFIG_TMP
+  else
+    AC_MSG_RESULT("creating $_CONFIG_DEFS_H")
+    mv -f $_CONFIG_TMP $_CONFIG_DEFS_H
+
+    echo ==== $_CONFIG_DEFS_H =================================
+    cat $_CONFIG_DEFS_H
+  fi
+
+dnl Probably shouldn't call this manually but we always want the output of DEFS
+rm -f confdefs.h.save
+mv confdefs.h confdefs.h.save
+egrep -v "$_EGREP_PATTERN" confdefs.h.save > confdefs.h
+AC_OUTPUT_MAKE_DEFS()
+MOZ_DEFINES=$DEFS
+AC_SUBST(MOZ_DEFINES)
+rm -f confdefs.h
+mv confdefs.h.save confdefs.h
+
+dnl Load the list of Makefiles to generate.
+dnl   To add new Makefiles, edit allmakefiles.sh.
+dnl   allmakefiles.sh sets the variable, MAKEFILES.
+. ${srcdir}/allmakefiles.sh
+dnl 
+dnl Run a perl script to quickly create the makefiles.
+dnl If it succeeds, it outputs a shell command to set CONFIG_FILES
+dnl   for the files it cannot handle correctly. This way, config.status
+dnl   will handle these files.
+dnl If it fails, nothing is set and config.status will run as usual.
+dnl
+dnl This does not change the $MAKEFILES variable.
+dnl
+dnl OpenVMS gets a line overflow on the long eval command, so use a temp file.
+dnl
+if test -z "${AS_PERL}"; then
+echo $MAKEFILES | ${PERL} $srcdir/build/autoconf/acoutput-fast.pl > conftest.sh
+else
+echo $MAKEFILES | ${PERL} $srcdir/build/autoconf/acoutput-fast.pl -nowrap --cygwin-srcdir=$srcdir > conftest.sh
+fi
+. ./conftest.sh
+rm conftest.sh
+
+echo $MAKEFILES > unallmakefiles
+
+AC_OUTPUT($MAKEFILES)
+
+dnl ========================================================
+dnl = Setup a nice relatively clean build environment for
+dnl = sub-configures.
+dnl ========================================================
+CC="$_SUBDIR_CC" 
+CXX="$_SUBDIR_CXX" 
+CFLAGS="$_SUBDIR_CFLAGS" 
+CPPFLAGS="$_SUBDIR_CPPFLAGS"
+CXXFLAGS="$_SUBDIR_CXXFLAGS"
+LDFLAGS="$_SUBDIR_LDFLAGS"
+HOST_CC="$_SUBDIR_HOST_CC" 
+HOST_CFLAGS="$_SUBDIR_HOST_CFLAGS"
+HOST_LDFLAGS="$_SUBDIR_HOST_LDFLAGS"
+RC=
+
+unset MAKEFILES
+unset CONFIG_FILES
+
+if test "$COMPILE_ENVIRONMENT"; then
+if test -z "$MOZ_NATIVE_NSPR" || test "$MOZ_LDAP_XPCOM"; then
+    ac_configure_args="$_SUBDIR_CONFIG_ARGS --with-dist-prefix=$MOZ_BUILD_ROOT/dist --with-mozilla"
+    if test -z "$MOZ_DEBUG"; then
+        ac_configure_args="$ac_configure_args --disable-debug"
+    fi
+    if test "$MOZ_OPTIMIZE" = "1"; then
+        ac_configure_args="$ac_configure_args --enable-optimize"
+    fi
+    if test "$OS_ARCH" = "WINNT" && test "$NS_TRACE_MALLOC"; then
+       ac_configure_args="$ac_configure_args --enable-debug --disable-optimize"
+    fi
+    if test -n "$HAVE_64BIT_OS"; then
+        ac_configure_args="$ac_configure_args --enable-64bit"
+    fi
+    AC_OUTPUT_SUBDIRS(nsprpub)
+    ac_configure_args="$_SUBDIR_CONFIG_ARGS"
+fi
+
+if test -z "$MOZ_NATIVE_NSPR"; then
+    # Hack to deal with the fact that we use NSPR_CFLAGS everywhere
+    AC_MSG_WARN([Recreating autoconf.mk with updated nspr-config output])
+    if test ! "$VACPP" && test "$OS_ARCH" != "WINNT" && test "$OS_ARCH" != "WINCE"; then
+       _libs=`./nsprpub/config/nspr-config --prefix=$\(DIST\) --exec-prefix=$\(DIST\) --libdir=$\(DIST\)/lib --libs`
+       $PERL -pi.bak -e "s '^NSPR_LIBS\\s*=.*'NSPR_LIBS = $_libs'" config/autoconf.mk
+    fi
+    if test "$OS_ARCH" != "WINNT" && test "$OS_ARCH" != "WINCE" ; then
+       _cflags=`./nsprpub/config/nspr-config --prefix=$\(DIST\) --exec-prefix=$\(DIST\) --includedir=$\(DIST\)/include/nspr --cflags`
+       $PERL -pi.bak -e "s '^NSPR_CFLAGS\\s*=.*'NSPR_CFLAGS = $_cflags'" config/autoconf.mk
+    fi
+    rm -f config/autoconf.mk.bak
+fi
+
+# if we're building the LDAP XPCOM component, we need to build 
+# the c-sdk first.  
+#
+if test "$MOZ_LDAP_XPCOM"; then
+
+    # these subdirs may not yet have been created in the build tree.
+    # don't use the "-p" switch to mkdir, since not all platforms have it
+    #
+    if test ! -d "directory"; then
+        mkdir "directory"
+    fi
+    if test ! -d "directory/c-sdk"; then
+        mkdir "directory/c-sdk"    
+    fi
+    if test ! -d "directory/c-sdk/ldap"; then
+        mkdir "directory/c-sdk/ldap"    
+    fi
+
+    ac_configure_args="$_SUBDIR_CONFIG_ARGS --prefix=$MOZ_BUILD_ROOT/dist --with-dist-prefix=$MOZ_BUILD_ROOT/dist --without-nss --with-mozilla"
+    if test -z "$MOZ_DEBUG"; then
+        ac_configure_args="$ac_configure_args --disable-debug"
+    fi
+    if test "$MOZ_OPTIMIZE" = "1"; then
+        ac_configure_args="$ac_configure_args --enable-optimize"
+    fi
+    if test -n "$HAVE_64BIT_OS"; then
+        ac_configure_args="$ac_configure_args --enable-64bit"
+    fi
+    AC_OUTPUT_SUBDIRS(directory/c-sdk)
+    ac_configure_args="$_SUBDIR_CONFIG_ARGS"
+fi
+fi # COMPILE_ENVIRONMENT
diff --git a/mozilla/extensions/pref/system-pref/src/Makefile.in b/mozilla/extensions/pref/system-pref/src/Makefile.in
index 6648980..1151949 100644
--- a/mozilla/extensions/pref/system-pref/src/Makefile.in
+++ b/mozilla/extensions/pref/system-pref/src/Makefile.in
@@ -47,14 +47,13 @@ VPATH = @srcdir@
 include $(DEPTH)/config/autoconf.mk
 
 MODULE = system-pref
-LIBRARY_NAME = system-pref_s
+LIBRARY_NAME = system-pref
 ifneq ($(OS_ARCH),WINNT)
 SHORT_LIBNAME = syspref
 endif
 
-# We want to force the creation of a static lib.
-FORCE_STATIC_LIB = 1
 MOZILLA_INTERNAL_API = 1
+GRE_MODULE = 1
 
 REQUIRES        = xpcom \
 		  string \
@@ -62,27 +61,25 @@ REQUIRES        = xpcom \
 		  pref \
 		  $(NULL)
 
-ifdef MOZ_ENABLE_GTK2
+ifdef MOZ_ENABLE_GCONF
 DIRS		= gconf
 endif
 
-EXTRA_DSO_LDOPTS = \
-		-L$(DIST)/bin \
-		$(MOZ_COMPONENT_LIBS) \
-		$(NULL)
-
 CPPSRCS =   \
   nsSystemPref.cpp	   \
+  nsSystemPrefFactory.cpp  \
   $(NULL)
 
+EXTRA_DSO_LDOPTS = \
+		$(MOZ_COMPONENT_LIBS) \
+		$(NULL)
+
 EXPORTS		= \
-		nsSystemPrefLog.h \
+		nsISystemPrefService.h \
 		$(NULL)
 
-include $(topsrcdir)/config/rules.mk
+EXPORT_LIBRARY = 1
+IS_COMPONENT = 1
+MODULE_NAME     = nsSystemPrefModule
 
-ifdef MOZ_ENABLE_GTK2
-INCLUDES	+= \
-		-I$(srcdir)/gconf \
-		$(NULL)
-endif
+include $(topsrcdir)/config/rules.mk
diff --git a/mozilla/extensions/pref/system-pref/src/gconf/Makefile.in b/mozilla/extensions/pref/system-pref/src/gconf/Makefile.in
index 4b2317f..fe834a5 100644
--- a/mozilla/extensions/pref/system-pref/src/gconf/Makefile.in
+++ b/mozilla/extensions/pref/system-pref/src/gconf/Makefile.in
@@ -46,44 +46,36 @@ VPATH = @srcdir@
 
 include $(DEPTH)/config/autoconf.mk
 
-MODULE = system-pref
-LIBRARY_NAME = system-pref
+MODULE = system-pref-gconf
+LIBRARY_NAME = system-pref-gconf
 GRE_MODULE	= 1
 MOZILLA_INTERNAL_API = 1
 
+PACKAGE_FILE = gconf.pkg
+
 REQUIRES        = pref \
+		  system-pref \
 		  string \
 		  xpcom \
 		  embedcomponents \
+		  necko \
 		  $(NULL)
 
 CPPSRCS =   \
 	nsSystemPrefService.cpp       \
-	nsSystemPrefFactory.cpp \
 	$(NULL)
 
-SHARED_LIBRARY_LIBS = $(DIST)/lib/libsystem-pref_s.a
-
 EXTRA_DSO_LDOPTS = \
-		-L$(DIST)/bin \
 		$(MOZ_COMPONENT_LIBS) \
-		$(MOZ_GTK2_LIBS) \
+		$(MOZ_GTK2_LIBS)      \
+		$(MOZ_GCONF_LIBS)     \
 		$(NULL)
 
-EXPORT_LIBRARY = 1
+#EXPORT_LIBRARY = 1
 IS_COMPONENT = 1
-MODULE_NAME	= nsSystemPrefModule
-
-EXPORTS		= \
-		nsSystemPrefService.h \
-		$(NULL)
+FORCE_SHARED_LIB = 1
 
 include $(topsrcdir)/config/rules.mk
 
-CFLAGS		+= $(MOZ_GTK2_CFLAGS)
-CXXFLAGS	+= $(MOZ_GTK2_CFLAGS)
-
-LOCAL_INCLUDES = -I$(srcdir)/..
-
-export::
-	$(INSTALL) $(srcdir)/../nsSystemPrefFactory.cpp .
+CFLAGS          += $(MOZ_GTK2_CFLAGS) $(MOZ_GCONF_CFLAGS)
+CXXFLAGS        += $(MOZ_GTK2_CFLAGS) $(MOZ_GCONF_CFLAGS)
diff --git a/mozilla/extensions/pref/system-pref/src/gconf/nsSystemPrefService.cpp b/mozilla/extensions/pref/system-pref/src/gconf/nsSystemPrefService.cpp
index efac6dd..2c7f463 100644
--- a/mozilla/extensions/pref/system-pref/src/gconf/nsSystemPrefService.cpp
+++ b/mozilla/extensions/pref/system-pref/src/gconf/nsSystemPrefService.cpp
@@ -23,7 +23,7 @@
  *
  * Original Author: Bolian Yin (bolian.yin@sun.com)
  *
- * Contributor(s):
+ * Contributor(s): Robert O'Callahan/Novell (rocallahan@novell.com)
  *
  * Alternatively, the contents of this file may be used under the terms of
  * either the GNU General Public License Version 2 or later (the "GPL"), or
@@ -41,6 +41,7 @@
 
 #include <glib.h>
 #include <glib-object.h>
+#include <gconf/gconf-client.h>
 
 #include "plstr.h"
 #include "nsCOMPtr.h"
@@ -48,837 +49,1260 @@
 #include "nsIServiceManager.h"
 #include "nsIObserver.h"
 #include "nsWeakReference.h"
-
+#include "nsIPrefBranch2.h"
+#include "nsISystemPrefService.h"
+#include "nsDataHashtable.h"
+#include "nsHashKeys.h"
+#include "nsICategoryManager.h"
+#include "nsIGenericFactory.h"
 #include "nsString.h"
-#include "nsSystemPrefLog.h"
-#include "nsSystemPrefService.h"
-
-/*************************************************************************
- * The strange thing here is that we load the gconf library manually and 
- * search the function pointers we need. If that process fails, no gconf
- * support is available in mozilla. The aim is to make mozilla independent
- * on gconf, in both compile time and run time.
- ************************************************************************/
-
-//gconf types
-extern "C" {
-
-    typedef enum {
-        GCONF_VALUE_INVALID,
-        GCONF_VALUE_STRING,
-        GCONF_VALUE_INT,
-        GCONF_VALUE_FLOAT,
-        GCONF_VALUE_BOOL,
-        GCONF_VALUE_SCHEMA,
-
-        GCONF_VALUE_LIST,
-        GCONF_VALUE_PAIR
-
-    }GConfValueType;
-
-    typedef struct {
-        GConfValueType type;
-    }GConfValue;
-
-    typedef void * (*GConfClientGetDefaultType) (void);
-    typedef PRBool (*GConfClientGetBoolType) (void *client, const gchar *key,
-                                              GError **err);
-    typedef gchar* (*GConfClientGetStringType) (void *client, const gchar *key,
-                                                GError **err);
-    typedef PRInt32 (*GConfClientGetIntType) (void *client, const gchar *key,
-                                              GError **err);
-    typedef  void (*GConfClientNotifyFuncType) (void* client, guint cnxn_id,
-                                                void *entry, 
-                                                gpointer user_data);
-    typedef guint (*GConfClientNotifyAddType) (void* client,
-                                               const gchar* namespace_section,
-                                               GConfClientNotifyFuncType func,
-                                               gpointer user_data,
-                                               GFreeFunc destroy_notify,
-                                               GError** err);
-    typedef void (*GConfClientNotifyRemoveType) (void *client,
-                                                 guint cnxn);
-    typedef void (*GConfClientAddDirType) (void *client,
-                                           const gchar *dir,
-                                           guint8 preload,
-                                           GError **err);
-    typedef void (*GConfClientRemoveDirType) (void *client,
-                                              const gchar *dir,
-                                              GError **err);
-
-    typedef const char* (*GConfEntryGetKeyType) (const void *entry);
-    typedef GConfValue* (*GConfEntryGetValueType) (const void *entry);
-
-    typedef const char* (*GConfValueGetStringType) (const GConfValue *value);
-    typedef PRInt32 (*GConfValueGetIntType) (const GConfValue *value);
-    typedef PRBool (*GConfValueGetBoolType) (const GConfValue *value);
+#include "nsIPermissionManager.h"
 
-    
-    static void gconf_key_listener (void* client, guint cnxn_id,
-                                    void *entry, gpointer user_data);
-}
+#define NS_SYSTEMPREF_SERVICE_CID                  \
+  { /* {3724e748-b088-4bf8-9298-aad426b66293} */       \
+    0x3724e748,                                        \
+    0xb088,                                            \
+    0x4bf8,                                            \
+        { 0x92, 0x98, 0xaa, 0xd4, 0x26, 0xb6, 0x62, 0x93 } \
+  }
 
-struct GConfCallbackData
-{
-    GConfProxy *proxy;
-    void * userData;
-    PRUint32 atom;
-    PRUint32 notifyId;
+#define NS_SYSTEMPREF_SERVICE_CLASSNAME "System Preferences Platform Service"
+
+/**
+ * We can link directly to the gconf library. If it's not available,
+ * this component just won't load and no system prefs will be offered.
+ */
+
+#define NUM_ELEM(a) (sizeof(a)/sizeof(a[0]))
+
+class nsSystemPrefService;
+
+/**
+ * List the preferences that have a simple mapping between Moz and gconf.
+ * These preferences have the same meaning and their values are
+ * automatically converted.
+ */
+struct SimplePrefMapping {
+    const char *mozPrefName;
+    const char *gconfPrefName;
+    /**
+     * If this is PR_FALSE, then we never allow Mozilla to change
+     * this setting. The Mozilla pref will always be locked.
+     * If this is PR_TRUE then Mozilla will be allowed to change
+     * the setting --- but only if it is writable in gconf.
+     */
+    PRBool allowWritesFromMozilla;
+};
+typedef nsresult (* ComplexGConfPrefChanged)(nsSystemPrefService* aPrefService,
+                                             GConfClient* aClient);
+typedef nsresult (* ComplexMozPrefChanged)(nsSystemPrefService* aPrefService,
+                                           GConfClient* aClient);
+struct ComplexGConfPrefMapping {
+    const char* gconfPrefName;
+    ComplexGConfPrefChanged callback;
+};
+
+struct ComplexMozPrefMapping {
+    const char* mozPrefName;
+    ComplexMozPrefChanged callback;
 };
-//////////////////////////////////////////////////////////////////////
-// GConPrxoy is a thin wrapper for easy use of gconf funcs. It loads the
-// gconf library and initializes the func pointers for later use.
-//////////////////////////////////////////////////////////////////////
-class GConfProxy
+
+class nsSystemPrefService : public nsISystemPrefService
 {
 public:
-    GConfProxy(nsSystemPrefService* aSysPrefService);
-    ~GConfProxy();
-    PRBool Init();
+    NS_DECL_ISUPPORTS
+
+    nsresult Init();
 
-    nsresult GetBoolPref(const char *aMozKey, PRBool *retval);
-    nsresult GetCharPref(const char *aMozKey, char **retval);
-    nsresult GetIntPref(const char *aMozKey, PRInt32 *retval);
+    virtual nsresult LoadSystemPreferences(nsISystemPref* aPrefs);
+    virtual nsresult NotifyMozillaPrefChanged(const char* aPrefName);
+    virtual nsresult NotifyUnloadSystemPreferences();
 
-    nsresult NotifyAdd (PRUint32 aAtom, void *aUserData);
-    nsresult NotifyRemove (PRUint32 aAtom, const void *aUserData);
+    nsSystemPrefService();
+    virtual ~nsSystemPrefService();
 
-    nsresult GetAtomForMozKey(const char *aMozKey, PRUint32 *aAtom) {
-        return GetAtom(aMozKey, 0, aAtom); 
+    nsISystemPref* GetPrefs() { return mPref; }
+    SimplePrefMapping* GetSimpleCallbackData(PRUint32 aKey) {
+      SimplePrefMapping* result = nsnull;
+      mGConfSimpleCallbacks.Get(aKey, &result);
+      return result;
     }
-    const char *GetMozKey(PRUint32 aAtom) {
-        return GetKey(aAtom, 0); 
+    ComplexGConfPrefMapping* GetComplexCallbackData(PRUint32 aKey) {
+      ComplexGConfPrefMapping* result = nsnull;
+      mGConfComplexCallbacks.Get(aKey, &result);
+      return result;
     }
 
-    void OnNotify(void *aClient, void * aEntry, PRUint32 aNotifyId,
-                  GConfCallbackData *aData);
-
 private:
-    void *mGConfClient;
-    PRLibrary *mGConfLib;
-    PRBool mInitialized;
-    nsSystemPrefService *mSysPrefService;
-
-    //listeners
-    nsAutoVoidArray *mObservers;
-
-    void InitFuncPtrs();
-    //gconf public func ptrs
-
-    //gconf client funcs
-    GConfClientGetDefaultType GConfClientGetDefault;
-    GConfClientGetBoolType GConfClientGetBool;
-    GConfClientGetStringType GConfClientGetString;
-    GConfClientGetIntType GConfClientGetInt;
-    GConfClientNotifyAddType GConfClientNotifyAdd;
-    GConfClientNotifyRemoveType GConfClientNotifyRemove;
-    GConfClientAddDirType GConfClientAddDir;
-    GConfClientRemoveDirType GConfClientRemoveDir;
-
-    //gconf entry funcs
-    GConfEntryGetValueType GConfEntryGetValue;
-    GConfEntryGetKeyType GConfEntryGetKey;
-
-    //gconf value funcs
-    GConfValueGetBoolType GConfValueGetBool;
-    GConfValueGetStringType GConfValueGetString;
-    GConfValueGetIntType GConfValueGetInt;
-
-    //pref name translating stuff
-    nsresult GetAtom(const char *aKey, PRUint8 aNameType, PRUint32 *aAtom);
-    nsresult GetAtomForGConfKey(const char *aGConfKey, PRUint32 *aAtom) \
-    {return GetAtom(aGConfKey, 1, aAtom);}
-    const char *GetKey(PRUint32 aAtom, PRUint8 aNameType);
-    const char *GetGConfKey(PRUint32 aAtom) \
-    {return GetKey(aAtom, 1); }
-    inline const char *MozKey2GConfKey(const char *aMozKey);
-
-    //const strings
-    static const char sPrefGConfKey[];
-    static const char sDefaultLibName1[];
-    static const char sDefaultLibName2[];
-};
-
-struct SysPrefCallbackData {
-    nsISupports *observer;
-    PRBool bIsWeakRef;
-    PRUint32 prefAtom;
+    nsISystemPref* mPref;
+    nsDataHashtable<nsUint32HashKey, SimplePrefMapping*> mGConfSimpleCallbacks;
+    nsDataHashtable<nsUint32HashKey, ComplexGConfPrefMapping*> mGConfComplexCallbacks;
+    // This is set to PR_FALSE temporarily to stop listening to gconf
+    // change notifications (while we change gconf values)
+    PRPackedBool mListenToGConf;
 };
 
-PRBool PR_CALLBACK
-sysPrefDeleteObserver(void *aElement, void *aData) {
-    SysPrefCallbackData *pElement =
-        NS_STATIC_CAST(SysPrefCallbackData *, aElement);
-    NS_RELEASE(pElement->observer);
-    nsMemory::Free(pElement);
-    return PR_TRUE;
-}
-
-NS_IMPL_ISUPPORTS2(nsSystemPrefService, nsIPrefBranch, nsIPrefBranch2)
-
-/* public */
 nsSystemPrefService::nsSystemPrefService()
-    :mInitialized(PR_FALSE),
-     mGConf(nsnull),
-     mObservers(nsnull)
+    : mPref(nsnull), mListenToGConf(PR_TRUE)
 {
+    mGConfSimpleCallbacks.Init();
+    mGConfComplexCallbacks.Init();
 }
 
 nsSystemPrefService::~nsSystemPrefService()
 {
-    mInitialized = PR_FALSE;
-
-    if (mGConf)
-        delete mGConf;
-    if (mObservers) {
-        (void)mObservers->EnumerateForwards(sysPrefDeleteObserver, nsnull);
-        delete mObservers;
-    }
+    NotifyUnloadSystemPreferences();
 }
 
 nsresult
 nsSystemPrefService::Init()
 {
-    if (!gSysPrefLog) {
-        gSysPrefLog = PR_NewLogModule("Syspref");
-        if (!gSysPrefLog) return NS_ERROR_OUT_OF_MEMORY;
-    }
-
-    SYSPREF_LOG(("Init SystemPref Service\n"));
-    if (mInitialized)
-        return NS_ERROR_FAILURE;
-
-    if (!mGConf) {
-        mGConf = new GConfProxy(this);
-        if (!mGConf->Init()) {
-            delete mGConf;
-            mGConf = nsnull;
-            return NS_ERROR_FAILURE;
-        }
-    }
-
-    mInitialized = PR_TRUE;
     return NS_OK;
 }
 
-/* readonly attribute string root; */
-NS_IMETHODIMP nsSystemPrefService::GetRoot(char * *aRoot)
-{
-    return NS_ERROR_NOT_IMPLEMENTED;
+NS_IMPL_ISUPPORTS1(nsSystemPrefService, nsISystemPrefService)
+
+static GConfClient* GetGConf() {
+    return gconf_client_get_default();
 }
 
-/* long getPrefType (in string aPrefName); */
-NS_IMETHODIMP nsSystemPrefService::GetPrefType(const char *aPrefName, PRInt32 *_retval)
+static PRBool VerifyMatchingTypes(nsISystemPref* aPrefs,
+                                  const char* aMozPref, GConfValue* aVal)
 {
-    return NS_ERROR_NOT_IMPLEMENTED;
+    nsCOMPtr<nsIPrefBranch2> prefBranch = aPrefs->GetPrefUserBranch();
+    PRInt32 type;
+    nsresult rv = prefBranch->GetPrefType(aMozPref, &type);
+    if (NS_FAILED(rv)) {
+        // pref probably doesn't exist. Let gconf set it.
+        return PR_TRUE;
+    }
+
+    PRBool ok;
+    switch (aVal->type) {
+    case GCONF_VALUE_STRING:
+        ok = type == nsIPrefBranch2::PREF_STRING;
+        break;
+    case GCONF_VALUE_INT:
+        ok = type == nsIPrefBranch2::PREF_INT;
+        break;
+    case GCONF_VALUE_BOOL:
+        ok = type == nsIPrefBranch2::PREF_BOOL;
+        break;
+    default:
+        NS_ERROR("Unhandled gconf preference type");
+        return PR_FALSE;
+    }
+    
+    NS_ASSERTION(ok, "Mismatched gconf/Mozilla pref types");
+    return ok;
 }
 
-/* boolean getBoolPref (in string aPrefName); */
-NS_IMETHODIMP nsSystemPrefService::GetBoolPref(const char *aPrefName, PRBool *_retval)
+/**
+ * Map a gconf pref value into the corresponding Mozilla pref.
+ */
+static nsresult ApplySimpleMapping(SimplePrefMapping* aMap,
+                                   nsISystemPref* aPrefs,
+                                   GConfClient* aClient)
 {
-    return mInitialized ?
-        mGConf->GetBoolPref(aPrefName, _retval) : NS_ERROR_FAILURE;
+    GConfValue* val = gconf_client_get(aClient, aMap->gconfPrefName, nsnull);
+    if (!val) {
+        // No gconf key, so there's really nothing to do
+        return NS_OK;
+    }
+
+    VerifyMatchingTypes(aPrefs, aMap->mozPrefName, val);
+
+    PRBool locked = !aMap->allowWritesFromMozilla ||
+        !gconf_client_key_is_writable(aClient, aMap->gconfPrefName, nsnull);
+    nsresult rv;
+    switch (val->type) {
+    case GCONF_VALUE_STRING: {
+        const char* str = gconf_value_get_string(val);
+        rv = aPrefs->SetOverridingMozillaStringPref(aMap->mozPrefName, str, locked);
+        // XXX do we need to free 'str' here?
+        break;
+    }
+    case GCONF_VALUE_INT:
+        rv = aPrefs->SetOverridingMozillaIntPref(aMap->mozPrefName,
+                                                 gconf_value_get_int(val), locked);
+        break;
+    case GCONF_VALUE_BOOL:
+        rv = aPrefs->SetOverridingMozillaBoolPref(aMap->mozPrefName,
+                                                  gconf_value_get_bool(val), locked);
+        break;
+    default:
+        NS_ERROR("Unusable gconf value type");
+        rv = NS_ERROR_FAILURE;
+        break;
+    }
+        
+    gconf_value_free(val);
+    return rv;
 }
 
-/* void setBoolPref (in string aPrefName, in long aValue); */
-NS_IMETHODIMP nsSystemPrefService::SetBoolPref(const char *aPrefName, PRInt32 aValue)
+/**
+ * Map a Mozilla pref into the corresponding gconf pref, if
+ * that's allowed.
+ */
+static nsresult ReverseApplySimpleMapping(SimplePrefMapping* aMap,
+                                          nsISystemPref* aPrefs,
+                                          GConfClient* aClient)
 {
-    return NS_ERROR_NOT_IMPLEMENTED;
+    // Verify that the gconf key has the right type, if it exists
+    GConfValue* val = gconf_client_get(aClient, aMap->gconfPrefName, nsnull);
+    if (val) {
+        VerifyMatchingTypes(aPrefs, aMap->mozPrefName, val);
+        gconf_value_free(val);
+    }
+
+    PRBool writable = aMap->allowWritesFromMozilla &&
+        gconf_client_key_is_writable(aClient, aMap->gconfPrefName, nsnull);
+    if (!writable) {
+        NS_ERROR("Gconf key is not writable");
+        return NS_ERROR_FAILURE;
+    }
+
+    nsCOMPtr<nsIPrefBranch2> prefBranch = aPrefs->GetPrefUserBranch();
+    PRInt32 type;
+    nsresult rv = prefBranch->GetPrefType(aMap->mozPrefName, &type);
+    if (NS_FAILED(rv)) {
+        NS_ERROR("Writing back a pref that doesn't exist?");
+        return rv;
+    }
+
+    switch (type) {
+    case nsIPrefBranch2::PREF_STRING:
+        {
+            char* result;
+            rv = prefBranch->GetCharPref(aMap->mozPrefName, &result);
+            if (NS_FAILED(rv))
+                return rv;
+
+            gconf_client_set_string(aClient, aMap->gconfPrefName, result, nsnull);
+            nsMemory::Free(result);
+        }
+        break;
+    case nsIPrefBranch2::PREF_INT:
+        {
+            PRInt32 result;
+            rv = prefBranch->GetIntPref(aMap->mozPrefName, &result);
+            if (NS_FAILED(rv))
+                return rv;
+
+            gconf_client_set_int(aClient, aMap->gconfPrefName, result, nsnull);
+        }
+        break;
+    case nsIPrefBranch2::PREF_BOOL:
+        {
+            PRBool result;
+            rv = prefBranch->GetBoolPref(aMap->mozPrefName, &result);
+            if (NS_FAILED(rv))
+                return rv;
+
+            gconf_client_set_bool(aClient, aMap->gconfPrefName, result, nsnull);
+        }
+        break;
+    default:
+        NS_ERROR("Unhandled gconf preference type");
+        return NS_ERROR_FAILURE;
+    }
+
+    return NS_OK;
 }
 
-/* string getCharPref (in string aPrefName); */
-NS_IMETHODIMP nsSystemPrefService::GetCharPref(const char *aPrefName, char **_retval)
+/* BEGIN preference mapping definition area
+ *
+ * There are a few rules that our preference maps have to obey:
+ *
+ * 1) Each mapping defines a relationship R between a set of GConf preferences and
+ * a set of Mozilla preferences that must *always* be true. Thus, when a Mozilla
+ * pref changes or a gconf pref changes, we may need to change something on the
+ * other side to preserve R. If a GConf preference is read-only, then we may
+ * need to lock one or more Mozilla preferences to avoid a situation where the
+ * Mozilla preference changes and we can't update the GConf preference to
+ * ensure R continues to hold.
+ *
+ * 2) If an unlocked Mozilla preference is changed, then we can only
+ * preserve R by changing GConf preferences; we are not allowed to
+ * change Mozilla preferences.
+ *
+ * 3) If a GConf preference is changed, then we can only preserve R by
+ * changing Moozilla preferences; we are nt allowed to change GConf
+ * preferences.
+ *
+ * For "simple" mappings, the relationship R is just of the form
+ * "GConf preference 'A' is equal to Mozilla preference 'B'". R is
+ * preserved by setting A to B when B changes, and by setting B to A
+ * when A changes. If A is read-only then we lock B (or we may just
+ * decide to lock B for other reasons). Thus rules 1-3 are satisfied.
+ *
+ * For "complex" mappings we have more complicated
+ * relationships. These are documented below.
+ */
+
+static SimplePrefMapping sSimplePrefMappings[] = {
+    // GNOME proxy settings; allow these to be set through the Firefox UI
+    {"network.proxy.http", "/system/http_proxy/host", PR_TRUE},
+    {"network.proxy.http_port", "/system/http_proxy/port", PR_TRUE},
+    {"network.proxy.ftp", "/system/proxy/ftp_host", PR_TRUE},
+    {"network.proxy.ftp_port", "/system/proxy/ftp_port", PR_TRUE},
+    {"network.proxy.ssl", "/system/proxy/secure_host", PR_TRUE},
+    {"network.proxy.ssl_port", "/system/proxy/secure_port", PR_TRUE},
+    {"network.proxy.socks", "/system/proxy/socks_host", PR_TRUE},
+    {"network.proxy.socks_port", "/system/proxy/socks_port", PR_TRUE},
+    {"network.proxy.autoconfig_url", "/system/proxy/autoconfig_url", PR_TRUE},
+    
+    // GNOME accessibility setting; never allow this to be set by Firefox
+    {"config.use_system_prefs.accessibility",
+     "/desktop/gnome/interface/accessibility", PR_FALSE},
+
+    // GConf Firefox preferences; allow these to be set through the Firefox UI
+    {"security.enable_java", "/apps/firefox/web/java_enabled", PR_TRUE},
+    {"javascript.enabled", "/apps/firefox/web/javascript_enabled", PR_TRUE},
+    {"browser.startup.homepage", "/apps/firefox/general/homepage_url", PR_TRUE},
+    {"browser.cache.disk.capacity", "/apps/firefox/web/cache_size", PR_TRUE},
+    {"network.cookie.lifetimePolicy", "/apps/firefox/web/cookie_accept", PR_TRUE},
+
+    // UI lockdown settings; never allow these to be set by Firefox. There is no
+    // Firefox UI for these but they could otherwise be set via about:config.
+    {"config.lockdown.printing", "/desktop/gnome/lockdown/disable_printing", PR_FALSE},
+    {"config.lockdown.printsetup", "/desktop/gnome/lockdown/disable_print_setup", PR_FALSE},
+    {"config.lockdown.savepage", "/desktop/gnome/lockdown/disable_save_to_disk", PR_FALSE},
+    {"config.lockdown.history", "/apps/firefox/lockdown/disable_history", PR_FALSE},
+    {"config.lockdown.toolbarediting", "/apps/firefox/lockdown/disable_toolbar_editing", PR_FALSE},
+    {"config.lockdown.urlbar", "/apps/firefox/lockdown/disable_url_bar", PR_FALSE},
+    {"config.lockdown.bookmark", "/apps/firefox/lockdown/disable_bookmark_editing", PR_FALSE},
+    {"config.lockdown.disable_themes", "/apps/firefox/lockdown/disable_themes", PR_FALSE},
+    {"config.lockdown.disable_extensions", "/apps/firefox/lockdown/disable_extensions", PR_FALSE},
+    {"config.lockdown.searchbar", "/apps/firefox/lockdown/disable_searchbar", PR_FALSE},
+    {"config.lockdown.hidebookmark", "/apps/firefox/lockdown/hide_bookmark", PR_FALSE},
+    {"config.lockdown.showsavedpasswords", "/apps/firefox/lockdown/disable_show_passwords", PR_FALSE},
+};
+
+static nsresult ApplyListPref(nsSystemPrefService* aPrefService,
+                             GConfClient* aClient,
+                             const char* aGConfKey, const char* aMozKey,
+                             char aSeparator)
 {
-    return mInitialized ?
-        mGConf->GetCharPref(aPrefName, _retval) : NS_ERROR_FAILURE;
+    GSList* list = gconf_client_get_list(aClient, aGConfKey,
+                                         GCONF_VALUE_STRING, nsnull);
+    nsCAutoString str;
+    for (GSList* l = list; l; l = l->next) {
+        str.Append((const char*)l->data);
+        if (l->next) {
+            str.Append(aSeparator);
+        }
+    }
+    PRBool lock = !gconf_client_key_is_writable(aClient, aGConfKey, nsnull);
+    nsresult rv = aPrefService->GetPrefs()->
+        SetOverridingMozillaStringPref(aMozKey, str.get(), lock);
+    // XXX does this free the strings? Should it?
+    g_slist_free(list);
+    return rv;
 }
-
-/* void setCharPref (in string aPrefName, in string aValue); */
-NS_IMETHODIMP nsSystemPrefService::SetCharPref(const char *aPrefName, const char *aValue)
+static nsresult ReverseApplyListPref(nsSystemPrefService* aPrefService,
+                                    GConfClient* aClient,
+                                    const char* aGConfKey, const char* aMozKey,
+                                    char aSeparator)
 {
-    return NS_ERROR_NOT_IMPLEMENTED;
+    char* data = nsnull;
+    nsCOMPtr<nsIPrefBranch2> prefs =
+        aPrefService->GetPrefs()->GetPrefUserBranch();
+    prefs->GetCharPref(aMozKey, &data);
+    if (!data)
+        return NS_ERROR_FAILURE;
+    nsresult rv = NS_OK;
+    GSList* list = nsnull;
+    PRInt32 i = 0;
+    while (data[i]) {
+        const char* nextComma = strchr(data+i, ',');
+        PRInt32 tokLen = nextComma ? nextComma - (data+i) : strlen(data+i);
+        char* tok = strndup(data+i, tokLen);
+        if (!tok)
+            break;
+        GSList* newList = g_slist_append(list, tok);
+        if (!newList) {
+            rv = NS_ERROR_OUT_OF_MEMORY;
+            break;
+        }
+        list = newList;
+        if (!nextComma)
+            break;
+        i = nextComma + 1 - data;
+    }
+    nsMemory::Free(data);
+    if (NS_SUCCEEDED(rv)) {
+        gconf_client_set_list(aClient, aGConfKey, GCONF_VALUE_STRING, list, nsnull);
+    }
+    for (GSList* l = list; l; l = l->next) {
+        free(l->data);
+    }
+    g_slist_free(list);
+    return rv;
 }
 
-/* long getIntPref (in string aPrefName); */
-NS_IMETHODIMP nsSystemPrefService::GetIntPref(const char *aPrefName, PRInt32 *_retval)
+/**
+ * The relationship R is
+ * "network.negotiate-auth.trusted-uris" is the comma-separated concatenation
+ * of the elements of the list "/apps/firefox/general/trusted_URIs"
+ */
+static const char GConfKey_TrustedURIs[] = "/apps/firefox/general/trusted_URIs";
+static const char MozKey_TrustedURIs[] = "network.negotiate-auth.trusted-uris";
+static nsresult ApplyTrustedURIs(nsSystemPrefService* aPrefService,
+                                GConfClient* aClient)
 {
-    return mInitialized ?
-        mGConf->GetIntPref(aPrefName, _retval) : NS_ERROR_FAILURE;
+    return ApplyListPref(aPrefService, aClient, 
+                        GConfKey_TrustedURIs, MozKey_TrustedURIs, ',');
 }
-
-/* void setIntPref (in string aPrefName, in long aValue); */
-NS_IMETHODIMP nsSystemPrefService::SetIntPref(const char *aPrefName, PRInt32 aValue)
+static nsresult ReverseApplyTrustedURIs(nsSystemPrefService* aPrefService,
+                                       GConfClient* aClient)
 {
-    return NS_ERROR_NOT_IMPLEMENTED;
+    return ReverseApplyListPref(aPrefService, aClient, 
+                               GConfKey_TrustedURIs, MozKey_TrustedURIs, ',');
 }
 
-/* void getComplexValue (in string aPrefName, in nsIIDRef aType, [iid_is (aType), retval] out nsQIResult aValue); */
-NS_IMETHODIMP nsSystemPrefService::GetComplexValue(const char *aPrefName, const nsIID & aType, void * *aValue)
+/**
+ * The relationship R is
+ * "network.negotiate-auth.delegation-uris" is the comma-separated concatenation
+ * of the elements of the list "/apps/firefox/general/delegation_URIs"
+ */
+static const char GConfKey_DelegationURIs[] = "/apps/firefox/general/delegation_URIs";
+static const char MozKey_DelegationURIs[] = "network.negotiate-auth.delegation-uris";
+static nsresult ApplyDelegationURIs(nsSystemPrefService* aPrefService,
+                                   GConfClient* aClient)
 {
-    return NS_ERROR_NOT_IMPLEMENTED;
+    return ApplyListPref(aPrefService, aClient, 
+                        GConfKey_DelegationURIs, MozKey_DelegationURIs, ',');
 }
-
-/* void setComplexValue (in string aPrefName, in nsIIDRef aType, in nsISupports aValue); */
-NS_IMETHODIMP nsSystemPrefService::SetComplexValue(const char *aPrefName, const nsIID & aType, nsISupports *aValue)
+static nsresult ReverseApplyDelegationURIs(nsSystemPrefService* aPrefService,
+                                          GConfClient* aClient)
 {
-    return NS_ERROR_NOT_IMPLEMENTED;
+    return ReverseApplyListPref(aPrefService, aClient, 
+                               GConfKey_DelegationURIs, MozKey_DelegationURIs, ',');
 }
 
-/* void clearUserPref (in string aPrefName); */
-NS_IMETHODIMP nsSystemPrefService::ClearUserPref(const char *aPrefName)
+/**
+ * The relationship R is
+ * "network.proxy.no_proxies_on" is the comma-separated concatenation
+ * of the elements of the list "/system/http_proxy/ignore_hosts"
+ */
+static const char GConfKey_IgnoreHosts[] = "/system/http_proxy/ignore_hosts";
+static const char MozKey_IgnoreHosts[] = "network.proxy.no_proxies_on";
+static nsresult ApplyIgnoreHosts(nsSystemPrefService* aPrefService,
+                                 GConfClient* aClient)
 {
-    return NS_ERROR_NOT_IMPLEMENTED;
+    return ApplyListPref(aPrefService, aClient, 
+                        GConfKey_IgnoreHosts, MozKey_IgnoreHosts, ',');
 }
-
-/* void lockPref (in string aPrefName); */
-NS_IMETHODIMP nsSystemPrefService::LockPref(const char *aPrefName)
+static nsresult ReverseApplyIgnoreHosts(nsSystemPrefService* aPrefService,
+                                        GConfClient* aClient)
 {
-    return NS_ERROR_NOT_IMPLEMENTED;
+    return ReverseApplyListPref(aPrefService, aClient, 
+                               GConfKey_IgnoreHosts, MozKey_IgnoreHosts, ',');
 }
 
-/* boolean prefHasUserValue (in string aPrefName); */
-NS_IMETHODIMP nsSystemPrefService::PrefHasUserValue(const char *aPrefName, PRBool *_retval)
+/**
+ * The relationship R is
+ * ("/system/proxy/mode" is 'manual' if and only if "network.proxy.type" is eProxyConfig_Manual (1))
+ * AND ("/system/proxy/mode" is 'auto' if and only if "network.proxy.type" is eProxyConfig_PAC (2))
+ * 
+ * [This means 'none' matches any value of "network.proxy.type" other than 1 or 2.]
+ */
+static const char GConfKey_ProxyMode[] = "/system/proxy/mode";
+static const char MozKey_ProxyMode[] = "network.proxy.type";
+static nsresult ApplyProxyMode(nsSystemPrefService* aPrefService,
+                               GConfClient* aClient)
 {
-    return NS_ERROR_NOT_IMPLEMENTED;
+    char* str = gconf_client_get_string(aClient, GConfKey_ProxyMode, nsnull);
+    if (!str)
+        return NS_ERROR_FAILURE;
+    PRInt32 val = -1;
+    nsCOMPtr<nsIPrefBranch2> prefs =
+        aPrefService->GetPrefs()->GetPrefUserBranch();
+    prefs->GetIntPref(MozKey_ProxyMode, &val);
+    if (val < 0)
+        return NS_ERROR_FAILURE;
+    if (!strcmp(str, "manual")) {
+        val = 1;
+    } else if (!strcmp(str, "auto")) {
+        val = 2;
+    } else if (strcmp(str, "none")) {
+        // invalid value for this gconf pref; do nothing
+        g_free(str);
+        return NS_OK;
+    } else {
+        if (val == 1 || val == 2) {
+            // We need to make it something that 'none' maps to
+            val = 0;
+        }
+    }
+    g_free(str);
+    PRBool lock = !gconf_client_key_is_writable(aClient, GConfKey_ProxyMode, nsnull);
+    nsresult rv = aPrefService->GetPrefs()->
+        SetOverridingMozillaIntPref(MozKey_ProxyMode, val, lock);
+    return rv;
 }
-
-/* boolean prefIsLocked (in string aPrefName); */
-NS_IMETHODIMP nsSystemPrefService::PrefIsLocked(const char *aPrefName, PRBool *_retval)
+static nsresult ReverseApplyProxyMode(nsSystemPrefService* aPrefService,
+                                      GConfClient* aClient)
 {
-    return NS_ERROR_NOT_IMPLEMENTED;
+    PRInt32 val = -1;
+    nsCOMPtr<nsIPrefBranch2> prefs =
+        aPrefService->GetPrefs()->GetPrefUserBranch();
+    prefs->GetIntPref(MozKey_ProxyMode, &val);
+    if (val < 0)
+        return NS_ERROR_FAILURE;
+    const char* str;
+    switch (val) {
+    case 1: str = "manual"; break;
+    case 2: str = "auto"; break;
+    default: str = "none"; break;
+    }
+    gconf_client_set_string(aClient, GConfKey_ProxyMode, str, nsnull);
+    return NS_OK;
 }
 
-/* void unlockPref (in string aPrefName); */
-NS_IMETHODIMP nsSystemPrefService::UnlockPref(const char *aPrefName)
+/**
+ * The relationship R is
+ * If "/apps/firefox/web/download_defaultfolder" is the empty string, then
+ * "browser.download.useDownloadDir" is false;
+ * otherwise "browser.download.useDownloadDir" is true and "browser.download.folderList"
+ * is (0 if "/apps/firefox/web/download_defaultfolder" is "Desktop";
+ *     1 if "/apps/firefox/web/download_defaultfolder" is "My Downloads";
+ *     3 if "/apps/firefox/web/download_defaultfolder" is "Home";
+ *     otherwise 2 and "browser.download.dir" = "/apps/firefox/web/download_defaultfolder")
+ */
+static const char GConfKey_DownloadFolder[] = "/apps/firefox/web/download_defaultfolder";
+static const char MozKey_UseDownloadDir[] = "browser.download.useDownloadDir";
+static const char MozKey_DownloadDirType[] = "browser.download.folderList";
+static const char MozKey_DownloadDirExplicit[] = "browser.download.dir";
+static nsresult ApplyDownloadFolder(nsSystemPrefService* aPrefService,
+                                    GConfClient* aClient)
 {
-    return NS_ERROR_NOT_IMPLEMENTED;
+    char* str = gconf_client_get_string(aClient, GConfKey_DownloadFolder, nsnull);
+    if (!str)
+        return NS_ERROR_FAILURE;
+    PRBool lock = !gconf_client_key_is_writable(aClient, GConfKey_DownloadFolder, nsnull);
+    nsresult rv = aPrefService->GetPrefs()->
+        SetOverridingMozillaBoolPref(MozKey_UseDownloadDir, *str != 0, lock);
+    if (NS_FAILED(rv)) {
+        g_free(str);
+        return rv;
+    }
+    PRInt32 dirType = 0;
+    if (!strcmp(str, "Desktop")) {
+        dirType = 0;
+    } else if (!strcmp(str, "My Downloads")) {
+        dirType = 1;
+    } else if (!strcmp(str, "Home")) {
+        dirType = 3;
+    } else {
+        dirType = 2;
+    }
+    // Always set all three Mozilla preferences. This is simpler and avoids
+    // problems; e.g., if the gconf value changes from "/home/rocallahan" to "Desktop"
+    // we might leave MozKey_DownloadDirType accidentally locked.
+    rv = aPrefService->GetPrefs()->
+        SetOverridingMozillaIntPref(MozKey_DownloadDirType, dirType, lock);
+    if (NS_SUCCEEDED(rv)) {
+        rv = aPrefService->GetPrefs()->
+            SetOverridingMozillaStringPref(MozKey_DownloadDirExplicit, str, lock);
+    }
+    g_free(str);
+    return rv;
 }
 
-/* void deleteBranch (in string aStartingAt); */
-NS_IMETHODIMP nsSystemPrefService::DeleteBranch(const char *aStartingAt)
+static nsresult ReverseApplyDownloadFolder(nsSystemPrefService* aPrefService,
+                                           GConfClient* aClient)
 {
-    return NS_ERROR_NOT_IMPLEMENTED;
+    PRBool useDownloadDir = PR_FALSE;
+    const char* result;
+    char* explicitStr = nsnull;
+    nsCOMPtr<nsIPrefBranch2> prefs = aPrefService->GetPrefs()->GetPrefUserBranch();
+    prefs->GetBoolPref(MozKey_UseDownloadDir, &useDownloadDir);
+    if (!useDownloadDir) {
+        result = "";
+    } else {
+        PRInt32 type = -1;
+        prefs->GetIntPref(MozKey_DownloadDirType, &type);
+        if (type < 0)
+            return NS_ERROR_FAILURE;
+        switch (type) {
+        case 0: result = "Desktop"; break;
+        case 1: result = "My Downloads"; break;
+        case 2:
+            prefs->GetCharPref(MozKey_DownloadDirExplicit, &explicitStr);
+            result = explicitStr;
+            break;
+        case 3: result = "Home"; break;
+        default:
+            NS_ERROR("Unknown download dir type");
+            return NS_ERROR_FAILURE;
+        }
+    }
+    if (!result)
+        return NS_ERROR_FAILURE;
+    gconf_client_set_string(aClient, GConfKey_DownloadFolder,
+                            result, nsnull);
+    nsMemory::Free(explicitStr);
+    return NS_OK;
 }
 
-/* void getChildList (in string aStartingAt, out unsigned long aCount, [array, size_is (aCount), retval] out string aChildArray); */
-NS_IMETHODIMP nsSystemPrefService::GetChildList(const char *aStartingAt, PRUint32 *aCount, char ***aChildArray)
+/**
+ * The relationship R is
+ * "/apps/firefox/web/disable_cookies" is true if and only if
+ * "network.cookie.cookieBehavior" is 2 ('dontUse')
+ */
+static const char GConfKey_DisableCookies[] = "/apps/firefox/web/disable_cookies";
+static const char MozKey_CookieBehavior[] = "network.cookie.cookieBehavior";
+static const char MozKey_CookieExceptions[] = "network.cookie.honorExceptions";
+static const char MozKey_CookieViewExceptions[] = "pref.privacy.disable_button.cookie_exceptions";
+static nsresult ApplyDisableCookies(nsSystemPrefService* aPrefService,
+                                    GConfClient* aClient)
 {
-    return NS_ERROR_NOT_IMPLEMENTED;
+    gboolean disable = gconf_client_get_bool(aClient, GConfKey_DisableCookies, nsnull);
+    PRInt32 behavior = -1;
+    nsCOMPtr<nsIPrefBranch2> prefs =
+        aPrefService->GetPrefs()->GetPrefUserBranch();
+    prefs->GetIntPref(MozKey_CookieBehavior, &behavior);
+    if (behavior < 0)
+        return NS_ERROR_FAILURE;
+    if (disable) {
+        behavior = 2;
+    } else {
+        if (behavior == 2) {
+            behavior = 0;
+        }
+    }
+    PRBool lock = !gconf_client_key_is_writable(aClient, GConfKey_DisableCookies, nsnull);
+    nsresult rv = aPrefService->GetPrefs()->
+        SetOverridingMozillaBoolPref(MozKey_CookieExceptions, !lock, lock);
+    if (NS_FAILED(rv))
+      return rv;
+    rv = aPrefService->GetPrefs()->
+        SetOverridingMozillaBoolPref(MozKey_CookieViewExceptions, lock, lock);
+    if (NS_FAILED(rv))
+      return rv;
+    return aPrefService->GetPrefs()->
+        SetOverridingMozillaIntPref(MozKey_CookieBehavior, behavior, lock);
 }
-
-/* void resetBranch (in string aStartingAt); */
-NS_IMETHODIMP nsSystemPrefService::ResetBranch(const char *aStartingAt)
+static nsresult ReverseApplyDisableCookies(nsSystemPrefService* aPrefService,
+                                           GConfClient* aClient)
 {
-    return NS_ERROR_NOT_IMPLEMENTED;
+    PRInt32 behavior = -1;
+    nsCOMPtr<nsIPrefBranch2> prefs =
+        aPrefService->GetPrefs()->GetPrefUserBranch();
+    prefs->GetIntPref(MozKey_CookieBehavior, &behavior);
+    if (behavior < 0)
+        return NS_ERROR_FAILURE;
+    gconf_client_set_bool(aClient, GConfKey_DisableCookies, behavior == 2, nsnull);
+    return NS_OK;
 }
 
-/* void addObserver (in string aDomain, in nsIObserver aObserver, in boolean aHoldWeak); */
-NS_IMETHODIMP nsSystemPrefService::AddObserver(const char *aDomain, nsIObserver *aObserver, PRBool aHoldWeak)
+static char const* windowOpenFeatures[] = {
+    "dom.disable_window_open_feature.close",
+    "dom.disable_window_open_feature.directories",
+    "dom.disable_window_open_feature.location",
+    "dom.disable_window_open_feature.menubar",
+    "dom.disable_window_open_feature.minimizable",
+    "dom.disable_window_open_feature.personalbar",
+    "dom.disable_window_open_feature.resizable",
+    "dom.disable_window_open_feature.scrollbars",
+    "dom.disable_window_open_feature.status",
+    "dom.disable_window_open_feature.titlebar",
+    "dom.disable_window_open_feature.toolbar"
+};
+/**
+ * The relationship R is
+ * "/apps/firefox/lockdown/disable_javascript_chrome" is true if and only if
+ * all of windowOpenFeatures are true
+ */
+static const char GConfKey_DisableJSChrome[] =
+    "/apps/firefox/lockdown/disable_javascript_chrome";
+static nsresult ApplyWindowOpen(nsSystemPrefService* aPrefService,
+                                GConfClient* aClient)
 {
-    nsresult rv;
-
-    NS_ENSURE_ARG_POINTER(aDomain);
-    NS_ENSURE_ARG_POINTER(aObserver);
-
-    NS_ENSURE_TRUE(mInitialized, NS_ERROR_FAILURE);
-
-    PRUint32 prefAtom;
-    // make sure the pref name is supported
-    rv = mGConf->GetAtomForMozKey(aDomain, &prefAtom);
-    NS_ENSURE_SUCCESS(rv, rv);
-
-    if (!mObservers) {
-        mObservers = new nsAutoVoidArray();
-        if (mObservers == nsnull)
-            return NS_ERROR_OUT_OF_MEMORY;
-    }
-
-    SysPrefCallbackData *pCallbackData = (SysPrefCallbackData *)
-        nsMemory::Alloc(sizeof(SysPrefCallbackData));
-    if (pCallbackData == nsnull)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    pCallbackData->bIsWeakRef = aHoldWeak;
-    pCallbackData->prefAtom = prefAtom;
-    // hold a weak reference to the observer if so requested
-    nsCOMPtr<nsISupports> observerRef;
-    if (aHoldWeak) {
-        nsCOMPtr<nsISupportsWeakReference> weakRefFactory = 
-            do_QueryInterface(aObserver);
-        if (!weakRefFactory) {
-            // the caller didn't give us a object that supports weak reference.
-            // ... tell them
-            nsMemory::Free(pCallbackData);
-            return NS_ERROR_INVALID_ARG;
+    gboolean disable = gconf_client_get_bool(aClient, GConfKey_DisableJSChrome, nsnull);
+    PRBool lock = !gconf_client_key_is_writable(aClient, GConfKey_DisableJSChrome, nsnull);
+    PRBool curValues[NUM_ELEM(windowOpenFeatures)];
+    PRUint32 i;
+    nsCOMPtr<nsIPrefBranch2> prefs = aPrefService->GetPrefs()->GetPrefUserBranch();
+    PRBool allDisabled = PR_TRUE;
+    for (i = 0; i < NUM_ELEM(windowOpenFeatures); ++i) {
+        nsresult rv = prefs->GetBoolPref(windowOpenFeatures[i], &curValues[i]);
+        if (NS_FAILED(rv))
+            return rv;
+        if (!curValues[i]) {
+            allDisabled = PR_FALSE;
         }
-        nsCOMPtr<nsIWeakReference> tmp = do_GetWeakReference(weakRefFactory);
-        observerRef = tmp;
-    } else {
-        observerRef = aObserver;
     }
-
-    rv = mGConf->NotifyAdd(prefAtom, pCallbackData);
-    if (NS_FAILED(rv)) {
-        nsMemory::Free(pCallbackData);
-        return rv;
+    for (i = 0; i < NUM_ELEM(windowOpenFeatures); ++i) {
+        PRBool newVal = curValues[i];
+        if (disable) {
+            newVal = PR_TRUE;
+        } else if (allDisabled) {
+            // If all disable-window-open-feature prefs are currently
+            // PR_TRUE, then we need to set at least one of them to
+            // PR_FALSE. Set all of them to PR_FALSE.
+            newVal = PR_FALSE;
+        } // If at least one disable-window-open-feature pref is
+          // currently PR_FALSE, then we don't need to change anything
+          // when the gconf pref says don't disable
+        nsresult rv = aPrefService->GetPrefs()->
+            SetOverridingMozillaBoolPref(windowOpenFeatures[i], newVal, lock);
+        if (NS_FAILED(rv))
+            return rv;
     }
-
-    pCallbackData->observer = observerRef;
-    NS_ADDREF(pCallbackData->observer);
-
-    mObservers->AppendElement(pCallbackData);
     return NS_OK;
 }
 
-/* void removeObserver (in string aDomain, in nsIObserver aObserver); */
-NS_IMETHODIMP nsSystemPrefService::RemoveObserver(const char *aDomain, nsIObserver *aObserver)
+static nsresult ReverseApplyWindowOpen(nsSystemPrefService* aPrefService,
+                                       GConfClient* aClient)
 {
-    nsresult rv;
-
-    NS_ENSURE_ARG_POINTER(aDomain);
-    NS_ENSURE_ARG_POINTER(aObserver);
-    NS_ENSURE_TRUE(mInitialized, NS_ERROR_FAILURE);
-
-    if (!mObservers)
-        return NS_OK;
-    
-    PRUint32 prefAtom;
-    // make sure the pref name is supported
-    rv = mGConf->GetAtomForMozKey(aDomain, &prefAtom);
-    NS_ENSURE_SUCCESS(rv, rv);
-
-    // need to find the index of observer, so we can remove it
-    PRIntn count = mObservers->Count();
-    if (count <= 0)
-        return NS_OK;
-
-    PRIntn i;
-    SysPrefCallbackData *pCallbackData;
-    for (i = 0; i < count; ++i) {
-        pCallbackData = (SysPrefCallbackData *)mObservers->ElementAt(i);
-        if (pCallbackData) {
-            nsCOMPtr<nsISupports> observerRef;
-            if (pCallbackData->bIsWeakRef) {
-                nsCOMPtr<nsISupportsWeakReference> weakRefFactory =
-                    do_QueryInterface(aObserver);
-                if (weakRefFactory) {
-                    nsCOMPtr<nsIWeakReference> tmp =
-                        do_GetWeakReference(aObserver);
-                    observerRef = tmp;
-                }
-            }
-            if (!observerRef)
-                observerRef = aObserver;
-
-            if (pCallbackData->observer == observerRef &&
-                pCallbackData->prefAtom == prefAtom) {
-                rv = mGConf->NotifyRemove(prefAtom, pCallbackData);
-                if (NS_SUCCEEDED(rv)) {
-                    mObservers->RemoveElementAt(i);
-                    NS_RELEASE(pCallbackData->observer);
-                    nsMemory::Free(pCallbackData);
-                }
-                return rv;
-            }
+    nsCOMPtr<nsIPrefBranch2> prefs = aPrefService->GetPrefs()->GetPrefUserBranch();
+    PRBool allDisabled = PR_TRUE;
+    PRBool curValues[NUM_ELEM(windowOpenFeatures)];
+    for (PRUint32 i = 0; i < NUM_ELEM(windowOpenFeatures); ++i) {
+        nsresult rv = prefs->GetBoolPref(windowOpenFeatures[i], &curValues[i]);
+        if (NS_FAILED(rv))
+            return rv;
+        if (!curValues[i]) {
+            allDisabled = PR_FALSE;
         }
     }
+    gconf_client_set_bool(aClient, GConfKey_DisableJSChrome, allDisabled, nsnull);
     return NS_OK;
 }
 
-void
-nsSystemPrefService::OnPrefChange(PRUint32 aPrefAtom, void *aData)
+/**
+ * The relationship R is
+ * If "/apps/firefox/lockdown/disable_unsafe_protocol" is true then
+ * -- "network.protocol-handler.blocked-default" is true
+ * -- "network.protocol-handler.blocked.XYZ" is false if and only if
+ * XYZ is a builtin non-disablable protocol or in
+ * "/apps/firefox/lockdown/additional_safe_protocols"
+ * AND if "/apps/firefox/lockdown/disable_unsafe_protocol" is false then
+ * -- "network.protocol-handler.blocked-default" is false
+ * -- if "network.protocol-handler.blocked.XYZ" exists then it is false
+ */
+static const char GConfKey_DisableUnsafeProtocols[] =
+    "/apps/firefox/lockdown/disable_unsafe_protocol";
+static const char GConfKey_AdditionalSafeProtocols[] =
+    "/apps/firefox/lockdown/additional_safe_protocols";
+static const char MozKey_BlockedDefault[] =
+    "network.protocol-handler.blocked-default";
+static const char MozKey_BlockedPrefix[] =
+    "network.protocol-handler.blocked.";
+static const char* nonDisablableBuiltinProtocols[] =
+    { "about", "data", "jar", "keyword", "resource", "viewsource",
+      "chrome", "moz-icon", "javascript", "file" };
+static PRBool FindString(const char** aList, PRInt32 aCount,
+                         const char* aStr)
 {
-    if (!mInitialized)
-        return;
-
-    SysPrefCallbackData *pData = (SysPrefCallbackData *)aData;
-    if (pData->prefAtom != aPrefAtom)
-        return;
-
-    nsCOMPtr<nsIObserver> observer;
-    if (pData->bIsWeakRef) {
-        nsCOMPtr<nsIWeakReference> weakRef =
-            do_QueryInterface(pData->observer);
-        if(weakRef)
-            observer = do_QueryReferent(weakRef);
-        if (!observer) {
-            // this weak referenced observer went away, remove it from the list
-            nsresult rv = mGConf->NotifyRemove(aPrefAtom, pData);
-            if (NS_SUCCEEDED(rv)) {
-                mObservers->RemoveElement(pData);
-                NS_RELEASE(pData->observer);
-                nsMemory::Free(pData);
-            }
-            return;
+    for (PRInt32 i = 0; i < aCount; ++i) {
+        if (!strcmp(aStr, aList[i]))
+            return PR_TRUE;
+    }
+    return PR_FALSE;
+}
+typedef nsDataHashtable<nsCStringHashKey,int> StringSet;
+/** Collect the set of protocol names that we want to set preferences for */
+static nsresult AddAllProtocols(nsSystemPrefService* aPrefService,
+                                const char* aSafeProtocols,
+                                StringSet* aProtocolSet,
+                                StringSet* aSafeSet)
+{
+    nsCOMPtr<nsIPrefBranch2> prefs = aPrefService->GetPrefs()->GetPrefUserBranch();
+    PRUint32 childCount;
+    char **childArray = nsnull;
+    nsresult rv = prefs->GetChildList(MozKey_BlockedPrefix, &childCount, &childArray);
+    if (NS_FAILED(rv))
+        return rv;
+    PRUint32 i;
+    for (i = 0; i < childCount; ++i) {
+        nsDependentCString tmp(childArray[i] + NUM_ELEM(MozKey_BlockedPrefix)-1);
+        aProtocolSet->Put(tmp, 1); // copies
+    }
+    for (i = 0; i < NUM_ELEM(nonDisablableBuiltinProtocols); ++i) {
+        nsDependentCString tmp(nonDisablableBuiltinProtocols[i]);
+        aProtocolSet->Put(tmp, 1);
+    }
+    i = 0;
+    while (aSafeProtocols[i]) {
+        const char* nextComma = strchr(aSafeProtocols+i, ',');
+        PRUint32 tokLen = nextComma ? nextComma - (aSafeProtocols+i)
+            : strlen(aSafeProtocols+i);
+        nsCAutoString tok(aSafeProtocols+i, tokLen);
+        aProtocolSet->Put(tok, 1);
+        aSafeSet->Put(tok, 1);
+        if (nextComma) {
+            i = nextComma - aSafeProtocols + 1;
+        } else {
+            break;
         }
     }
-    else
-        observer = do_QueryInterface(pData->observer);
-
-    if (observer)
-        observer->Observe(NS_STATIC_CAST(nsIPrefBranch *, this),
-                          NS_SYSTEMPREF_PREFCHANGE_TOPIC_ID,
-                          NS_ConvertUTF8toUCS2(mGConf->GetMozKey(aPrefAtom)).
-                          get());
+    NS_FREE_XPCOM_ALLOCATED_POINTER_ARRAY(childCount, childArray);
+    return NS_OK;
 }
 
-/*************************************************************
- *  GConfProxy
- *
- ************************************************************/
-
-struct GConfFuncListType {
-    const char *FuncName;
-    PRFuncPtr  FuncPtr;
-};
-
-struct PrefNamePair {
-    const char *mozPrefName;
-    const char *gconfPrefName;
+struct ProtocolPrefClosure {
+    StringSet safeProtocolSet;
+    nsIPrefBranch2* prefs;
+    nsISystemPref* prefSetter;
+    PRPackedBool disableUnsafe;
+    PRPackedBool lock;
 };
 
-const char
-GConfProxy::sPrefGConfKey[] = "accessibility.unix.gconf2.shared-library";
-const char GConfProxy::sDefaultLibName1[] = "libgconf-2.so.4";
-const char GConfProxy::sDefaultLibName2[] = "libgconf-2.so";
-
-#define GCONF_FUNCS_POINTER_BEGIN \
-    static GConfFuncListType sGConfFuncList[] = {
-#define GCONF_FUNCS_POINTER_ADD(func_name) \
-    {func_name, nsnull},
-#define GCONF_FUNCS_POINTER_END \
-    {nsnull, nsnull}, };
-
-GCONF_FUNCS_POINTER_BEGIN
-    GCONF_FUNCS_POINTER_ADD("gconf_client_get_default")        // 0
-    GCONF_FUNCS_POINTER_ADD("gconf_client_get_bool")       // 1
-    GCONF_FUNCS_POINTER_ADD("gconf_client_get_string")     //2
-    GCONF_FUNCS_POINTER_ADD("gconf_client_get_int")       //3
-    GCONF_FUNCS_POINTER_ADD("gconf_client_notify_add")   //4
-    GCONF_FUNCS_POINTER_ADD("gconf_client_notify_remove")   //5
-    GCONF_FUNCS_POINTER_ADD("gconf_client_add_dir")   //6
-    GCONF_FUNCS_POINTER_ADD("gconf_client_remove_dir")   //7
-    GCONF_FUNCS_POINTER_ADD("gconf_entry_get_value")       //8
-    GCONF_FUNCS_POINTER_ADD("gconf_entry_get_key")       //9
-    GCONF_FUNCS_POINTER_ADD("gconf_value_get_bool")      //10
-    GCONF_FUNCS_POINTER_ADD("gconf_value_get_string")     //11
-    GCONF_FUNCS_POINTER_ADD("gconf_value_get_int")       //12
-GCONF_FUNCS_POINTER_END
-
-/////////////////////////////////////////////////////////////////////////////
-// the list is the mapping table, between mozilla prefs and gconf prefs
-// It is expected to include all the pref pairs that are related in mozilla
-// and gconf. 
-//
-// Note: the prefs listed here are not neccessarily be read from gconf, they
-//       are the prefs that could be read from gconf. Mozilla has another
-//       list (see sSysPrefList in nsSystemPref.cpp) that decide which prefs
-//       are really read.
-//////////////////////////////////////////////////////////////////////////////
-
-static const PrefNamePair sPrefNameMapping[] = {
-#include "gconf_pref_list.inc"
-    {nsnull, nsnull},
-};
+static PLDHashOperator PR_CALLBACK SetProtocolPref(const nsACString& aKey,
+                                                   int aItem,
+                                                   void* aClosure)
+{
+    ProtocolPrefClosure* closure = NS_STATIC_CAST(ProtocolPrefClosure*, aClosure);
+    const nsCString& protocol = PromiseFlatCString(aKey);
+    PRBool blockProtocol = PR_FALSE;
+    if (closure->disableUnsafe &&
+        !FindString(nonDisablableBuiltinProtocols,
+                    NUM_ELEM(nonDisablableBuiltinProtocols), protocol.get()) &&
+        !closure->safeProtocolSet.Get(aKey, nsnull)) {
+        blockProtocol = PR_TRUE;
+    }
 
-PRBool PR_CALLBACK
-gconfDeleteObserver(void *aElement, void *aData) {
-    nsMemory::Free(aElement);
-    return PR_TRUE;
+    nsCAutoString prefName;
+    prefName.Append(MozKey_BlockedPrefix);
+    prefName.Append(protocol);
+    closure->prefSetter->SetOverridingMozillaBoolPref(prefName.get(), blockProtocol,
+                                                      closure->lock);
+    return PL_DHASH_NEXT;
 }
-
-GConfProxy::GConfProxy(nsSystemPrefService *aSysPrefService):
-    mGConfClient(nsnull),
-    mGConfLib(nsnull),
-    mInitialized(PR_FALSE),
-    mSysPrefService(aSysPrefService),
-    mObservers(nsnull)
+static nsresult ApplyUnsafeProtocols(nsSystemPrefService* aPrefService,
+                                     GConfClient* aClient)
 {
+    PRBool lock = !gconf_client_key_is_writable(aClient, GConfKey_DisableUnsafeProtocols, nsnull)
+        || !gconf_client_key_is_writable(aClient, GConfKey_AdditionalSafeProtocols, nsnull);
+    gboolean disable = gconf_client_get_bool(aClient, GConfKey_DisableUnsafeProtocols, nsnull);
+    char* protocols = gconf_client_get_string(aClient, GConfKey_AdditionalSafeProtocols, nsnull);
+    if (!protocols)
+        return NS_ERROR_FAILURE;
+    nsresult rv = aPrefService->GetPrefs()->
+        SetOverridingMozillaBoolPref(MozKey_BlockedDefault, disable, lock);
+    StringSet protocolSet;
+    ProtocolPrefClosure closure;
+    protocolSet.Init();
+    closure.safeProtocolSet.Init();
+    if (NS_SUCCEEDED(rv)) {
+        rv = AddAllProtocols(aPrefService, protocols, &protocolSet,
+                             &closure.safeProtocolSet);
+    }
+    if (NS_SUCCEEDED(rv)) {
+        closure.disableUnsafe = disable;
+        closure.lock = lock;
+        closure.prefSetter = aPrefService->GetPrefs();
+        nsCOMPtr<nsIPrefBranch2> prefs = aPrefService->GetPrefs()->GetPrefUserBranch();
+        closure.prefs = prefs;
+        protocolSet.EnumerateRead(SetProtocolPref, &closure);
+    }
+    g_free(protocols);
+    return rv;
 }
 
-GConfProxy::~GConfProxy()
+static nsresult ReverseApplyUnsafeProtocols(nsSystemPrefService* aPrefService,
+                                            GConfClient* aClient)
 {
-    if (mGConfClient)
-        g_object_unref(G_OBJECT(mGConfClient));
-
-    if (mObservers) {
-        (void)mObservers->EnumerateForwards(gconfDeleteObserver, nsnull);
-        delete mObservers;
+    nsCOMPtr<nsIPrefBranch2> prefs = aPrefService->GetPrefs()->GetPrefUserBranch();
+    PRBool blockedDefault;
+    nsresult rv = prefs->GetBoolPref(MozKey_BlockedDefault, &blockedDefault);
+    if (NS_FAILED(rv))
+        return rv;
+    nsCAutoString enabledProtocols;
+    PRUint32 childCount;
+    char **childArray = nsnull;
+    rv = prefs->GetChildList(MozKey_BlockedPrefix, &childCount, &childArray);
+    if (NS_FAILED(rv))
+        return rv;
+    for (PRUint32 i = 0; i < childCount; ++i) {
+        PRBool val = PR_FALSE;
+        prefs->GetBoolPref(childArray[i], &val);
+        if (val) {
+            if (enabledProtocols.Length() > 0) {
+                enabledProtocols.Append(',');
+            }
+            enabledProtocols.Append(childArray[i] + NUM_ELEM(MozKey_BlockedPrefix)-1);
+        }
     }
+    NS_FREE_XPCOM_ALLOCATED_POINTER_ARRAY(childCount, childArray);
+    gconf_client_set_bool(aClient, GConfKey_DisableUnsafeProtocols, blockedDefault, nsnull);
+    gconf_client_set_string(aClient, GConfKey_AdditionalSafeProtocols,
+                            enabledProtocols.get(), nsnull);
+    return NS_OK;
 }
 
-PRBool
-GConfProxy::Init()
+/**
+ * Set config.lockdown.setwallpaper if and only if
+ * /desktop/gnome/background/picture_filename is write-only. Always
+ * lock it.
+ */
+static const char MozKey_LockdownWallpaper[] = "config.lockdown.setwallpaper";
+static const char GConfKey_WallpaperSetting[] =
+    "/desktop/gnome/background/picture_filename";
+static nsresult ApplyWallpaper(nsSystemPrefService* aPrefService,
+                               GConfClient* aClient)
 {
-    SYSPREF_LOG(("GConfProxy:: Init GConfProxy\n"));
-    if (!mSysPrefService)
-        return PR_FALSE;
-    if (mInitialized)
-        return PR_TRUE;
+    PRBool canSetWallpaper =
+        gconf_client_key_is_writable(aClient, GConfKey_WallpaperSetting, nsnull);
+    return aPrefService->GetPrefs()->
+        SetOverridingMozillaBoolPref(MozKey_LockdownWallpaper,
+                                     !canSetWallpaper, PR_TRUE);
+}
+// No ReverseApplyWallpaper because this Mozilla pref can never be
+// modified
 
-    nsCOMPtr<nsIPref> pref = do_GetService(NS_PREF_CONTRACTID);
-    if (!pref)
-        return PR_FALSE;
+/**
+ * The relationship R is 
+ * "signon.rememberSignons" is true if and only if "/apps/firefox/web/disable_save_password"
+ * is false.
+ */
+static const char MozKey_RememberSignons[] = "signon.rememberSignons";
+static const char GConfKey_DisableSavePassword[] = "/apps/firefox/web/disable_save_password";
+static nsresult ApplyDisableSavePassword(nsSystemPrefService* aPrefService,
+                                         GConfClient* aClient)
+{
+    PRBool lock = !gconf_client_key_is_writable(aClient, GConfKey_DisableSavePassword, nsnull);
+    gboolean disable = gconf_client_get_bool(aClient, GConfKey_DisableSavePassword, nsnull);
+    return aPrefService->GetPrefs()->
+        SetOverridingMozillaBoolPref(MozKey_RememberSignons, !disable, lock);
+}
 
-    nsXPIDLCString gconfLibName;
-    nsresult rv;
+static nsresult ReverseApplyDisableSavePassword(nsSystemPrefService* aPrefService,
+                                                GConfClient* aClient)
+{
+    nsCOMPtr<nsIPrefBranch2> prefs = aPrefService->GetPrefs()->GetPrefUserBranch();
+    PRBool remember;
+    nsresult rv = prefs->GetBoolPref(MozKey_RememberSignons, &remember);
+    if (NS_FAILED(rv))
+        return rv;
+    gconf_client_set_bool(aClient, GConfKey_DisableSavePassword, !remember, nsnull);
+    return NS_OK;
+}
 
-    //check if gconf-2 library is given in prefs
-    rv = pref->GetCharPref(sPrefGConfKey, getter_Copies(gconfLibName));
-    if (NS_SUCCEEDED(rv)) {
-        //use the library name in the preference
-        SYSPREF_LOG(("GConf library in prefs is %s\n", gconfLibName.get()));
-        mGConfLib = PR_LoadLibrary(gconfLibName.get());
-    }
-    else {
-        SYSPREF_LOG(("GConf library not specified in prefs, try the default: "
-                     "%s and %s\n", sDefaultLibName1, sDefaultLibName2));
-        mGConfLib = PR_LoadLibrary(sDefaultLibName1);
-        if (!mGConfLib)
-            mGConfLib = PR_LoadLibrary(sDefaultLibName2);
+/**
+ * The relationship R is
+ * "permissions.default.image" is 1 (nsIPermissionManager::ALLOW_ACTION) if and only if
+ * "/apps/firefox/web/images_load" is 0, AND
+ * "permissions.default.image" is 2 (nsIPermissionManager::DENY_ACTION) if and only if
+ * "/apps/firefox/web/images_load" is 2, AND
+ * "permissions.default.image" is 3 if and only if "/apps/firefox/web/images_load" is 1
+ *
+ * Also, we set pref.advanced.images.disable_button.view_image iff
+ * /apps/firefox/web/images_load is read-only
+ * And we set permissions.default.honorExceptions iff
+ * /apps/firefox/web/images_load is not read-only
+ */
+static const char MozKey_ImagePermissions[] = "permissions.default.image";
+static const char MozKey_ImageExceptions[] = "permissions.honorExceptions.image";
+static const char MozKey_ImageViewExceptions[] = "pref.advanced.images.disable_button.view_image";
+static const char GConfKey_LoadImages[] = "/apps/firefox/web/images_load";
+static nsresult ApplyLoadImages(nsSystemPrefService* aPrefService,
+                                 GConfClient* aClient)
+{
+    PRBool lock = !gconf_client_key_is_writable(aClient, GConfKey_LoadImages, nsnull);
+    // 0 == accept, 1 == no-foreign, 2 == reject
+    gint setting = gconf_client_get_int(aClient, GConfKey_LoadImages, nsnull);
+    PRInt32 pref;
+    switch (setting) {
+      case 0: pref = nsIPermissionManager::ALLOW_ACTION; break;
+      case 2: pref = nsIPermissionManager::DENY_ACTION; break;
+      case 1: pref = 3; break;
+      default: return NS_ERROR_FAILURE;
     }
+    nsresult rv = aPrefService->GetPrefs()->
+        SetOverridingMozillaBoolPref(MozKey_ImageExceptions, !lock, lock);
+    if (NS_FAILED(rv))
+      return rv;
+    rv = aPrefService->GetPrefs()->
+        SetOverridingMozillaBoolPref(MozKey_ImageViewExceptions, lock, lock);
+    if (NS_FAILED(rv))
+      return rv;
+    return aPrefService->GetPrefs()->
+        SetOverridingMozillaIntPref(MozKey_ImagePermissions, pref, lock);
+}
 
-    if (!mGConfLib) {
-        SYSPREF_LOG(("Fail to load GConf library\n"));
-        return PR_FALSE;
+static nsresult ReverseApplyLoadImages(nsSystemPrefService* aPrefService,
+                                        GConfClient* aClient)
+{
+    nsCOMPtr<nsIPrefBranch2> prefs = aPrefService->GetPrefs()->GetPrefUserBranch();
+    PRInt32 pref;
+    nsresult rv = prefs->GetIntPref(MozKey_ImagePermissions, &pref);
+    if (NS_FAILED(rv))
+        return rv;
+    gint setting;
+    switch (pref) {
+      case nsIPermissionManager::ALLOW_ACTION: setting = 0; break;
+      case nsIPermissionManager::DENY_ACTION: setting = 2; break;
+      case 3: setting = 1; break;
+      default: return NS_ERROR_FAILURE;
     }
+    gconf_client_set_int(aClient, GConfKey_LoadImages, setting, nsnull);
+    return NS_OK;
+}
 
-    //check every func we need in the gconf library
-    GConfFuncListType *funcList;
-    PRFuncPtr func;
-    for (funcList = sGConfFuncList; funcList->FuncName; ++funcList) {
-        func = PR_FindFunctionSymbol(mGConfLib, funcList->FuncName);
-        if (!func) {
-            SYSPREF_LOG(("Check GConf Func Error: %s", funcList->FuncName));
-            goto init_failed_unload;
+/**
+ * The relationship R is 
+ * "/apps/firefox/web/disable_popups" is true if and only if
+ * "dom.disable_open_during_load" is true
+ * AND if "/apps/firefox/web/disable_popups" is true then
+ * "privacy.popups.showBrowserMessage" is false.
+ */
+static const char MozKey_DisablePopups[] = "dom.disable_open_during_load";
+static const char MozKey_DisableBrowserPopupMessage[] = "privacy.popups.showBrowserMessage";
+static const char GConfKey_DisablePopups[] = "/apps/firefox/web/disable_popups";
+static nsresult ApplyDisablePopups(nsSystemPrefService* aPrefService,
+                                   GConfClient* aClient)
+{
+    PRBool lock = !gconf_client_key_is_writable(aClient, GConfKey_DisablePopups, nsnull);
+    gboolean disable = gconf_client_get_bool(aClient, GConfKey_DisablePopups, nsnull);
+    nsresult rv = aPrefService->GetPrefs()->
+        SetOverridingMozillaBoolPref(MozKey_DisablePopups, disable, lock);
+    if (NS_SUCCEEDED(rv)) {
+        if (disable) {
+            rv = aPrefService->GetPrefs()->
+                SetOverridingMozillaBoolPref(MozKey_DisableBrowserPopupMessage, PR_TRUE, lock);
+        } else {
+            rv = aPrefService->GetPrefs()->
+                StopOverridingMozillaPref(MozKey_DisableBrowserPopupMessage);
         }
-        funcList->FuncPtr = func;
     }
-
-    InitFuncPtrs();
-
-    mGConfClient = GConfClientGetDefault();
-
-    // Don't unload past this point, since GConf's initialization of ORBit
-    // causes atexit handlers to be registered.
-
-    if (!mGConfClient) {
-        SYSPREF_LOG(("Fail to Get default gconf client\n"));
-        goto init_failed;
-    }
-    mInitialized = PR_TRUE;
-    return PR_TRUE;
-
- init_failed_unload:
-    PR_UnloadLibrary(mGConfLib);
- init_failed:
-    mGConfLib = nsnull;
-    return PR_FALSE;
+    return rv;
 }
 
-nsresult
-GConfProxy::GetBoolPref(const char *aMozKey, PRBool *retval)
+static nsresult ReverseApplyDisablePopups(nsSystemPrefService* aPrefService,
+                                          GConfClient* aClient)
 {
-    NS_ENSURE_TRUE(mInitialized, NS_ERROR_FAILURE);
-    *retval = GConfClientGetBool(mGConfClient, MozKey2GConfKey(aMozKey), NULL);
+    nsCOMPtr<nsIPrefBranch2> prefs = aPrefService->GetPrefs()->GetPrefUserBranch();
+    PRBool disabled;
+    nsresult rv = prefs->GetBoolPref(MozKey_DisablePopups, &disabled);
+    if (NS_FAILED(rv))
+        return rv;
+    gconf_client_set_bool(aClient, GConfKey_DisablePopups, disabled, nsnull);
     return NS_OK;
 }
 
-nsresult
-GConfProxy::GetCharPref(const char *aMozKey, char **retval)
-{
-    NS_ENSURE_TRUE(mInitialized, NS_ERROR_FAILURE);
+static ComplexGConfPrefMapping sComplexGConfPrefMappings[] = {
+    {GConfKey_TrustedURIs, ApplyTrustedURIs},
+    {GConfKey_DelegationURIs, ApplyDelegationURIs},
+    {GConfKey_IgnoreHosts, ApplyIgnoreHosts},
+    {GConfKey_ProxyMode, ApplyProxyMode},
+    {GConfKey_DownloadFolder, ApplyDownloadFolder},
+    {GConfKey_DisableCookies, ApplyDisableCookies},
+    {GConfKey_DisableJSChrome, ApplyWindowOpen},
+    {GConfKey_DisableUnsafeProtocols, ApplyUnsafeProtocols},
+    {GConfKey_AdditionalSafeProtocols, ApplyUnsafeProtocols},
+    {GConfKey_WallpaperSetting, ApplyWallpaper},
+    {GConfKey_DisableSavePassword, ApplyDisableSavePassword},
+    {GConfKey_LoadImages, ApplyLoadImages},
+    {GConfKey_DisablePopups, ApplyDisablePopups}
+};
+static ComplexMozPrefMapping sComplexMozPrefMappings[] = {
+    {MozKey_TrustedURIs, ReverseApplyTrustedURIs},
+    {MozKey_DelegationURIs, ReverseApplyDelegationURIs},
+    {MozKey_IgnoreHosts, ReverseApplyIgnoreHosts},
+    {MozKey_ProxyMode, ReverseApplyProxyMode},
+    {MozKey_UseDownloadDir, ReverseApplyDownloadFolder},
+    {MozKey_DownloadDirType, ReverseApplyDownloadFolder},
+    {MozKey_DownloadDirExplicit, ReverseApplyDownloadFolder},
+    {MozKey_CookieBehavior, ReverseApplyDisableCookies},
+    {MozKey_RememberSignons, ReverseApplyDisableSavePassword},
+    {MozKey_ImagePermissions, ReverseApplyLoadImages},
+    {MozKey_DisablePopups, ReverseApplyDisablePopups}
+};
+// The unsafe protocol preferences are handled specially because
+// they affect an unknown number of Mozilla preferences
+// Window opener permissions are also handled specially so we don't have to
+// repeat the windowOpenFeatures list.
 
-    gchar *str = GConfClientGetString(mGConfClient,
-                                      MozKey2GConfKey(aMozKey), NULL);
-    if (str) {
-        *retval = PL_strdup(str);
-        g_free(str);
-    }
-    return NS_OK;
-}
+/* END preference mapping definition area */
 
-nsresult
-GConfProxy::GetIntPref(const char *aMozKey, PRInt32 *retval)
-{
-    NS_ENSURE_TRUE(mInitialized, NS_ERROR_FAILURE);
-    if (strcmp (aMozKey, "network.proxy.type") == 0) {
-	gchar *str;
-
-	str = GConfClientGetString(mGConfClient,
-	                           MozKey2GConfKey (aMozKey), NULL);
-
-	if (str) {
-		if (strcmp (str, "manual") == 0)
-			*retval = 1;
-		else if (strcmp (str, "auto") == 0)
-			*retval = 2;
-		else
-			*retval = 0;
-
-		g_free (str);
-	} else
-		*retval = 0;
-    } else {
-    	*retval = GConfClientGetInt(mGConfClient, 
-	                            MozKey2GConfKey(aMozKey), NULL);
-    }
+static PR_CALLBACK void GConfSimpleNotification(GConfClient* client,
+                                                guint cnxn_id,
+                                                GConfEntry *entry,
+                                                gpointer user_data)
+{
+    nsSystemPrefService* service = NS_STATIC_CAST(nsSystemPrefService*, user_data);
+    SimplePrefMapping* map = NS_STATIC_CAST(SimplePrefMapping*,
+                                            service->GetSimpleCallbackData(cnxn_id));
+    NS_ASSERTION(map, "Can't find mapping for callback");
+    if (!map)
+        return;
 
-    return NS_OK;
+    ApplySimpleMapping(map, service->GetPrefs(), client);
 }
 
-nsresult
-GConfProxy::NotifyAdd (PRUint32 aAtom, void *aUserData)
+static PR_CALLBACK void GConfComplexNotification(GConfClient* client,
+                                                 guint cnxn_id,
+                                                 GConfEntry *entry,
+                                                 gpointer user_data)
 {
-    NS_ENSURE_TRUE(mInitialized, NS_ERROR_FAILURE);
+    nsSystemPrefService* service = NS_STATIC_CAST(nsSystemPrefService*, user_data);
+    ComplexGConfPrefMapping* map = NS_STATIC_CAST(ComplexGConfPrefMapping*,
+                                                  service->GetComplexCallbackData(cnxn_id));
+    NS_ASSERTION(map, "Can't find mapping for callback");
+    if (!map)
+        return;
 
-    const char *gconfKey = GetGConfKey(aAtom);
-    if (!gconfKey)
-        return NS_ERROR_FAILURE;
+    map->callback(service, GetGConf());
+}
 
-    if (!mObservers) {
-        mObservers = new nsAutoVoidArray();
-        if (mObservers == nsnull)
-            return NS_ERROR_OUT_OF_MEMORY;
+nsresult nsSystemPrefService::LoadSystemPreferences(nsISystemPref* aPrefs)
+{
+    mPref = aPrefs;
+
+    GConfClient* client = GetGConf();
+    PRUint32 i;
+    nsCOMPtr<nsIPrefBranch2> userPrefs = aPrefs->GetPrefUserBranch();
+
+    // Update gconf settings with any Mozilla settings that have
+    // changed from the default. Do it before we register our
+    // gconf notifications.
+    for (i = 0; i < NUM_ELEM(sSimplePrefMappings); ++i) {
+        gconf_client_add_dir(client, sSimplePrefMappings[i].gconfPrefName,
+                             GCONF_CLIENT_PRELOAD_NONE, nsnull);
+
+        PRBool hasUserPref = PR_FALSE;
+        nsresult rv =
+            userPrefs->PrefHasUserValue(sSimplePrefMappings[i].mozPrefName,
+                                        &hasUserPref);
+        if (NS_FAILED(rv))
+            return rv;
+        if (hasUserPref && sSimplePrefMappings[i].allowWritesFromMozilla &&
+            gconf_client_key_is_writable(client,
+                                         sSimplePrefMappings[i].gconfPrefName,
+                                         nsnull)) {
+            rv = ReverseApplySimpleMapping(&sSimplePrefMappings[i],
+                                           aPrefs, client);
+            if (NS_FAILED(rv))
+                return rv;
+        }
+    }
+    for (i = 0; i < NUM_ELEM(sComplexGConfPrefMappings); ++i) {
+        gconf_client_add_dir(client, sComplexGConfPrefMappings[i].gconfPrefName,
+                             GCONF_CLIENT_PRELOAD_NONE, nsnull);
+    }
+    ComplexMozPrefChanged lastMozCallback = nsnull;
+    for (i = 0; i < NUM_ELEM(sComplexMozPrefMappings); ++i) {
+        PRBool hasUserPref = PR_FALSE;
+        nsresult rv =
+            userPrefs->PrefHasUserValue(sComplexMozPrefMappings[i].mozPrefName,
+                                        &hasUserPref);
+        if (NS_FAILED(rv))
+            return rv;
+        if (hasUserPref) {
+            ComplexMozPrefChanged cb = sComplexMozPrefMappings[i].callback;
+            if (cb != lastMozCallback) {
+                cb(this, client);
+                lastMozCallback = cb;
+            }
+        }
     }
  
-    GConfCallbackData *pData = (GConfCallbackData *)
-        nsMemory::Alloc(sizeof(GConfCallbackData));
-    NS_ENSURE_TRUE(pData, NS_ERROR_OUT_OF_MEMORY);
-
-    pData->proxy = this;
-    pData->userData = aUserData;
-    pData->atom = aAtom;
-    mObservers->AppendElement(pData);
-
-    GConfClientAddDir(mGConfClient, gconfKey,
-                      0, // GCONF_CLIENT_PRELOAD_NONE,  don't preload anything 
-                      NULL);
-
-    pData->notifyId = GConfClientNotifyAdd(mGConfClient, gconfKey,
-                                           gconf_key_listener, pData,
-                                           NULL, NULL);
+    // Register simple mappings and callbacks
+    for (i = 0; i < NUM_ELEM(sSimplePrefMappings); ++i) {
+        guint cx = gconf_client_notify_add(client,
+                                           sSimplePrefMappings[i].gconfPrefName,
+                                           GConfSimpleNotification, this,
+                                           nsnull, nsnull);
+        mGConfSimpleCallbacks.Put(cx, &sSimplePrefMappings[i]);
+        nsresult rv = ApplySimpleMapping(&sSimplePrefMappings[i], aPrefs, client);
+        if (NS_FAILED(rv))
+            return rv;
+    }
+
+    ComplexGConfPrefChanged lastCallback = nsnull;
+    for (i = 0; i < NUM_ELEM(sComplexGConfPrefMappings); ++i) {
+        guint cx = gconf_client_notify_add(client,
+                                           sComplexGConfPrefMappings[i].gconfPrefName,
+                                           GConfComplexNotification, this,
+                                           nsnull, nsnull);
+        mGConfComplexCallbacks.Put(cx, &sComplexGConfPrefMappings[i]);
+        ComplexGConfPrefChanged cb = sComplexGConfPrefMappings[i].callback;
+        if (cb != lastCallback) {
+            cb(this, client);
+            lastCallback = cb;
+        }
+    }
+
+    ApplyUnsafeProtocols(this, client);
+
     return NS_OK;
 }
 
-nsresult
-GConfProxy::NotifyRemove (PRUint32 aAtom, const void *aUserData)
+nsresult nsSystemPrefService::NotifyMozillaPrefChanged(const char* aPrefName)
 {
-    NS_ENSURE_TRUE(mInitialized, NS_ERROR_FAILURE);
+    PRUint32 i;
+    GConfClient* client = GetGConf();
 
-    PRIntn count = mObservers->Count();
-    if (count <= 0)
-        return NS_OK;
-
-    PRIntn i;
-    GConfCallbackData *pData;
-    for (i = 0; i < count; ++i) {
-        pData = (GConfCallbackData *)mObservers->ElementAt(i);
-        if (pData && pData->atom == aAtom && pData->userData == aUserData) {
-            GConfClientNotifyRemove(mGConfClient, pData->notifyId);
-            GConfClientRemoveDir(mGConfClient,
-                                 GetGConfKey(pData->atom), NULL);
-            mObservers->RemoveElementAt(i);
-            nsMemory::Free(pData);
-            break;
+    for (i = 0; i < NUM_ELEM(sSimplePrefMappings); ++i) {
+        if (!strcmp(aPrefName, sSimplePrefMappings[i].mozPrefName)) {
+            ReverseApplySimpleMapping(&sSimplePrefMappings[i],
+                                      mPref, client);
         }
     }
-    return NS_OK;
-}
 
-void
-GConfProxy::InitFuncPtrs()
-{
-    //gconf client funcs
-    GConfClientGetDefault =
-        (GConfClientGetDefaultType) sGConfFuncList[0].FuncPtr;
-    GConfClientGetBool =
-        (GConfClientGetBoolType) sGConfFuncList[1].FuncPtr;
-    GConfClientGetString =
-        (GConfClientGetStringType) sGConfFuncList[2].FuncPtr;
-    GConfClientGetInt =
-        (GConfClientGetIntType) sGConfFuncList[3].FuncPtr;
-    GConfClientNotifyAdd =
-        (GConfClientNotifyAddType) sGConfFuncList[4].FuncPtr;
-    GConfClientNotifyRemove =
-        (GConfClientNotifyRemoveType) sGConfFuncList[5].FuncPtr;
-    GConfClientAddDir =
-        (GConfClientAddDirType) sGConfFuncList[6].FuncPtr;
-    GConfClientRemoveDir =
-        (GConfClientRemoveDirType) sGConfFuncList[7].FuncPtr;
-
-    //gconf entry funcs
-    GConfEntryGetValue = (GConfEntryGetValueType) sGConfFuncList[8].FuncPtr;
-    GConfEntryGetKey = (GConfEntryGetKeyType) sGConfFuncList[9].FuncPtr;
-
-    //gconf value funcs
-    GConfValueGetBool = (GConfValueGetBoolType) sGConfFuncList[10].FuncPtr;
-    GConfValueGetString = (GConfValueGetStringType) sGConfFuncList[11].FuncPtr;
-    GConfValueGetInt = (GConfValueGetIntType) sGConfFuncList[12].FuncPtr;
-}
-
-void
-GConfProxy::OnNotify(void *aClient, void * aEntry, PRUint32 aNotifyId,
-                     GConfCallbackData *aData)
-{
-    if (!mInitialized || !aEntry || (mGConfClient != aClient) || !aData)
-        return;
+    for (i = 0; i < NUM_ELEM(sComplexMozPrefMappings); ++i) {
+        if (!strcmp(aPrefName, sComplexMozPrefMappings[i].mozPrefName)) {
+            sComplexMozPrefMappings[i].callback(this, client);
+        }
+    }
 
-    if (GConfEntryGetValue(aEntry) == NULL)
-        return;
+    for (i = 0; i < NUM_ELEM(windowOpenFeatures); ++i) {
+        if (!strcmp(aPrefName, windowOpenFeatures[i])) {
+            ReverseApplyWindowOpen(this, client);
+        }
+    }
 
-    PRUint32 prefAtom;
-    nsresult rv = GetAtomForGConfKey(GConfEntryGetKey(aEntry), &prefAtom);
-    if (NS_FAILED(rv))
-        return;
+    ReverseApplyUnsafeProtocols(this, client);
 
-    mSysPrefService->OnPrefChange(prefAtom, aData->userData);
+    return NS_OK;
 }
 
-nsresult
-GConfProxy::GetAtom(const char *aKey, PRUint8 aNameType, PRUint32 *aAtom)
+static PLDHashOperator PR_CALLBACK UnregisterSimple(const PRUint32& aKey,
+                                                    SimplePrefMapping* aData,
+                                                    void* aClosure)
 {
-    if (!aKey)
-        return NS_ERROR_FAILURE;
-    PRUint32 prefSize = sizeof(sPrefNameMapping) / sizeof(sPrefNameMapping[0]);
-    for (PRUint32 index = 0; index < prefSize; ++index) {
-        if (!strcmp((aNameType == 0) ? sPrefNameMapping[index].mozPrefName :
-                    sPrefNameMapping[index].gconfPrefName, aKey)) {
-            *aAtom = index;
-            return NS_OK;
-        }
-    }
-    return NS_ERROR_FAILURE;
+    GConfClient* client = GetGConf();
+    gconf_client_notify_remove(client, aKey);
+    gconf_client_remove_dir(client, aData->gconfPrefName, nsnull);
+    return PL_DHASH_NEXT;
 }
 
-const char *
-GConfProxy::GetKey(PRUint32 aAtom, PRUint8 aNameType)
+static PLDHashOperator PR_CALLBACK UnregisterComplex(const PRUint32& aKey,
+                                                     ComplexGConfPrefMapping* aData,
+                                                     void* aClosure)
 {
-    PRUint32 mapSize = sizeof(sPrefNameMapping) / sizeof(sPrefNameMapping[0]);
-    if (aAtom >= 0 && aAtom < mapSize)
-        return (aNameType == 0) ? sPrefNameMapping[aAtom].mozPrefName :
-            sPrefNameMapping[aAtom].gconfPrefName;
-    return NULL;
+    GConfClient* client = GetGConf();
+    gconf_client_notify_remove(client, aKey);
+    gconf_client_remove_dir(client, aData->gconfPrefName, nsnull);
+    return PL_DHASH_NEXT;
 }
 
-inline const char *
-GConfProxy::MozKey2GConfKey(const char *aMozKey)
+nsresult nsSystemPrefService::NotifyUnloadSystemPreferences()
 {
-    PRUint32 atom;
-    nsresult rv = GetAtomForMozKey(aMozKey, &atom);
-    if (NS_SUCCEEDED(rv))
-        return GetGConfKey(atom);
-    return NULL;
-}
+    // Unregister callbacks
+    mGConfSimpleCallbacks.EnumerateRead(UnregisterSimple, this);
+    mGConfSimpleCallbacks.Clear();
+    mGConfComplexCallbacks.EnumerateRead(UnregisterComplex, this);
+    mGConfComplexCallbacks.Clear();
 
-/* static */
-void gconf_key_listener (void* client, guint cnxn_id,
-                         void *entry, gpointer user_data)
-{
-    SYSPREF_LOG(("...SYSPREF_LOG...key listener get called \n"));
-    if (!user_data)
-        return;
-    GConfCallbackData *pData = NS_REINTERPRET_CAST(GConfCallbackData *,
-                                                   user_data);
-    pData->proxy->OnNotify(client, entry, cnxn_id, pData);
+    return NS_OK;
 }
+
+// Factory stuff
+
+NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsSystemPrefService, Init)
+
+static const nsModuleComponentInfo components[] = {
+    { NS_SYSTEMPREF_SERVICE_CLASSNAME,
+      NS_SYSTEMPREF_SERVICE_CID,
+      NS_SYSTEMPREF_SERVICE_CONTRACTID,
+      nsSystemPrefServiceConstructor,
+    },
+};
+
+NS_IMPL_NSGETMODULE(nsSystemPrefServiceModule, components)
diff --git a/mozilla/extensions/pref/system-pref/src/nsISystemPrefService.h b/mozilla/extensions/pref/system-pref/src/nsISystemPrefService.h
new file mode 100644
index 0000000..d517e70
--- /dev/null
+++ b/mozilla/extensions/pref/system-pref/src/nsISystemPrefService.h
@@ -0,0 +1,107 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* vim:expandtab:shiftwidth=4:tabstop=4:
+ */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ *
+ * The contents of this file are subject to the Mozilla Public
+ * License Version 1.1 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * rights and limitations under the License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Novell
+ * Portions created by Novell are Copyright (C) 2005 Novell,
+ * All Rights Reserved.
+ *
+ * Original Author: Robert O'Callahan (rocallahan@novell.com)
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the NPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the NPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#ifndef nsISystemPrefService_h__
+#define nsISystemPrefService_h__
+
+#include "nsCOMPtr.h"
+#include "nsIPrefBranchInternal.h"
+
+#define NS_SYSTEMPREF_SERVICE_CONTRACTID "@mozilla.org/system-preferences-service;1"
+
+#define NS_ISYSTEMPREFSERVICE_IID   \
+{ 0x006e1cfd, 0xd66a, 0x40b9, \
+    { 0x84, 0xa1, 0x84, 0xf3, 0xe6, 0xa2, 0xca, 0xbc } }
+
+class nsISystemPref {
+public:
+    /**
+     * Call one of these three methods to override a Mozilla
+     * preference with a system value. You can call it multiple
+     * times to change the value of a given preference to track
+     * the underlying system value.
+     *
+     * If aLocked is true then we set the default preference and
+     * lock it so the user value is ignored. If aLocked is false
+     * then we unlock the Mozilla preference and set the Mozilla
+     * user value.
+     */
+    virtual nsresult SetOverridingMozillaBoolPref(const char* aPrefName,
+                                                  PRBool aValue, PRBool aLocked,
+                                                  PRBool aPresent = PR_TRUE) = 0;
+    virtual nsresult SetOverridingMozillaIntPref(const char* aPrefName,
+                                                 PRInt32 aValue, PRBool aLocked,
+                                                 PRBool aPresent = PR_TRUE) = 0;
+    virtual nsresult SetOverridingMozillaStringPref(const char* aPrefName,
+                                                    const char* aValue, PRBool aLocked,
+                                                    PRBool aPresent = PR_TRUE) = 0;
+    virtual nsresult StopOverridingMozillaPref(const char* aPrefName) = 0;
+    virtual already_AddRefed<nsIPrefBranch2> GetPrefUserBranch() = 0;
+    virtual already_AddRefed<nsIPrefBranch> GetPrefDefaultBranch() = 0;
+};
+
+class nsISystemPrefService : public nsISupports {
+public:
+    NS_DEFINE_STATIC_IID_ACCESSOR(NS_ISYSTEMPREFSERVICE_IID)
+
+    /**
+     * Load the system prefs from the store into their corresponding
+     * Mozilla prefs, calling SetOverridingMozillaPref on each
+     * such pref.
+     */
+    virtual nsresult LoadSystemPreferences(nsISystemPref* aPrefs) = 0;
+
+    /**
+     * Notify that a Mozilla user pref that is being overridden by the
+     * store has changed.  The new value of the Mozilla pref should be
+     * written back to the store.
+     */
+    virtual nsresult NotifyMozillaPrefChanged(const char* aPrefName) = 0;
+
+    /**
+     * Notify that we're about to stop using the system prefs.  After
+     * this, nsSystemPref will automatically stop overriding all
+     * Mozilla prefs that are being overridden.
+     */
+    virtual nsresult NotifyUnloadSystemPreferences() = 0;
+};
+
+#endif
diff --git a/mozilla/extensions/pref/system-pref/src/nsSystemPref.cpp b/mozilla/extensions/pref/system-pref/src/nsSystemPref.cpp
index 2f0d2a5..2b7158d 100644
--- a/mozilla/extensions/pref/system-pref/src/nsSystemPref.cpp
+++ b/mozilla/extensions/pref/system-pref/src/nsSystemPref.cpp
@@ -24,6 +24,7 @@
  * Original Author: Bolian Yin (bolian.yin@sun.com)
  *
  * Contributor(s):
+ *   Robert O'Callahan (rocallahan@novell.com)
  *
  * Alternatively, the contents of this file may be used under the terms of
  * either the GNU General Public License Version 2 or later (the "GPL"), or
@@ -41,66 +42,60 @@
 
 #include "nsSystemPref.h"
 #include "nsIObserverService.h"
+#include "nsIAppStartupNotifier.h"
+#include "nsIPrefService.h"
+#include "nsIPrefBranch.h"
+#include "nsICategoryManager.h"
+#include "nsIServiceManager.h"
 
 #include "nsSystemPrefLog.h"
-#include "nsSystemPrefService.h"
 #include "nsString.h"
 
-const char sSysPrefString[] = "config.use_system_prefs";
-union MozPrefValue {
-    char *      stringVal;
-    PRInt32     intVal;
-    PRBool      boolVal;
-};
+#include <stdlib.h>
 
 struct SysPrefItem {
-    const char *prefName;       // mozilla pref string name
-    MozPrefValue defaultValue;  // store the mozilla default value
-    PRBool isLocked;  // store the mozilla lock status
+    // Saved values on both branches
+    PRInt32      savedUserValueScalar;
+    char*        savedUserValueString;
+    PRInt32      savedDefaultValueScalar;
+    char*        savedDefaultValueString;
+    // When this is true, then the value was locked originally
+    PRPackedBool savedLocked;
+    // When this is true, then there was a user value
+    PRPackedBool savedUserPresent;
+    PRPackedBool ignore;
+    
     SysPrefItem() {
-        prefName = nsnull;
-        defaultValue.intVal = 0;
-        defaultValue.stringVal = nsnull;
-        defaultValue.boolVal = PR_FALSE;
-        isLocked = PR_FALSE;
+        savedUserValueScalar = 0;
+        savedUserValueString = nsnull;
+        savedDefaultValueScalar = 0;
+        savedDefaultValueString = nsnull;
+        savedUserPresent = PR_FALSE;
+        savedLocked = PR_FALSE;
+        ignore = PR_FALSE;
     }
-    void SetPrefName(const char *aPrefName) {
-        prefName = aPrefName;
+
+    virtual ~SysPrefItem() {
+        nsMemory::Free(savedUserValueString);
+        nsMemory::Free(savedDefaultValueString);
     }
 };
 
-// all prefs that mozilla need to read from host system if they are available
-static const char *sSysPrefList[] = {
-    "network.proxy.http",
-    "network.proxy.http_port",
-    "network.proxy.ftp",
-    "network.proxy.ftp_port",
-    "network.proxy.ssl",
-    "network.proxy.ssl_port",
-    "network.proxy.socks",
-    "network.proxy.socks_port",
-    "network.proxy.no_proxies_on",
-    "network.proxy.autoconfig_url",
-    "network.proxy.type",
-    "config.use_system_prefs.accessibility",
-};
+static const char sSysPrefString[] = "config.use_system_prefs";
 
 PRLogModuleInfo *gSysPrefLog = NULL;
 
 NS_IMPL_ISUPPORTS2(nsSystemPref, nsIObserver, nsISupportsWeakReference)
 
-nsSystemPref::nsSystemPref():
-    mSysPrefService(nsnull),
-    mEnabled(PR_FALSE),
-    mSysPrefs(nsnull)
+nsSystemPref::nsSystemPref() : mIgnorePrefSetting(PR_FALSE)
 {
+   mSavedPrefs.Init();
+   mCachedUserPrefBranch = nsnull;
+   mCachedDefaultPrefBranch = nsnull;
 }
 
 nsSystemPref::~nsSystemPref()
 {
-    mSysPrefService = nsnull;
-    mEnabled = PR_FALSE;
-    delete [] mSysPrefs;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -131,6 +126,54 @@ nsSystemPref::Init(void)
     return(rv);
 }
 
+already_AddRefed<nsIPrefBranch2>
+nsSystemPref::GetPrefUserBranch()
+{
+    if (mCachedUserPrefBranch) {
+        NS_ADDREF(mCachedUserPrefBranch);
+        return mCachedUserPrefBranch;
+    }
+
+    nsresult rv;
+    nsCOMPtr<nsIPrefService> prefService = 
+        do_GetService(NS_PREFSERVICE_CONTRACTID, &rv);
+    if (NS_FAILED(rv))
+        return nsnull;
+    nsCOMPtr<nsIPrefBranch> prefBranch;
+    rv = prefService->GetBranch(nsnull, getter_AddRefs(prefBranch));
+    if (NS_FAILED(rv))
+        return nsnull;
+    nsCOMPtr<nsIPrefBranch2> pb2(do_QueryInterface(prefBranch));
+    if (!pb2)
+        return nsnull;
+    
+    nsIPrefBranch2* result = nsnull;
+    pb2.swap(result);
+    return result;
+}
+
+already_AddRefed<nsIPrefBranch>
+nsSystemPref::GetPrefDefaultBranch()
+{
+    if (mCachedDefaultPrefBranch) {
+        NS_ADDREF(mCachedDefaultPrefBranch);
+        return mCachedDefaultPrefBranch;
+    }
+
+    nsresult rv;
+    nsCOMPtr<nsIPrefService> prefService = 
+        do_GetService(NS_PREFSERVICE_CONTRACTID, &rv);
+    if (NS_FAILED(rv))
+        return nsnull;
+    nsCOMPtr<nsIPrefBranch> prefBranch;
+    rv = prefService->GetDefaultBranch(nsnull, getter_AddRefs(prefBranch));
+    if (NS_FAILED(rv))
+        return nsnull;
+    nsIPrefBranch* pb = nsnull;
+    prefBranch.swap(pb);
+    return pb;
+}
+
 ///////////////////////////////////////////////////////////////////////////////
 // nsSystemPref::Observe
 // Observe notifications from mozilla pref system and system prefs (if enabled)
@@ -145,330 +188,446 @@ nsSystemPref::Observe(nsISupports *aSubject,
     if (!aTopic)
         return NS_OK;
 
-    // if we are notified by pref service
-    // check the system pref settings
-    if (!nsCRT::strcmp(aTopic, NS_PREFSERVICE_READ_TOPIC_ID)) {
-        SYSPREF_LOG(("Observed: %s\n", aTopic));
-
-        nsCOMPtr<nsIPrefBranch2> prefBranch =
-            do_GetService(NS_PREFSERVICE_CONTRACTID, &rv);
-        if (NS_FAILED(rv))
-            return rv;
+    nsCOMPtr<nsIPrefBranch2> userBranch = GetPrefUserBranch();
+    nsCOMPtr<nsIPrefBranch> defaultBranch = GetPrefDefaultBranch();
 
-        rv = prefBranch->GetBoolPref(sSysPrefString, &mEnabled);
+    // Check the default branch first. If system prefs are enabled
+    // by default, then don't check the user prefs; we don't want
+    // to allow users to change the default.
+    PRBool defaultEnabled;
+    rv = defaultBranch->GetBoolPref(sSysPrefString, &defaultEnabled);
+    if (NS_FAILED(rv)) {
+        SYSPREF_LOG(("...Failed to Get %s\n", sSysPrefString));
+        return rv;
+    }
+    PRBool enabled = defaultEnabled;
+    if (!enabled) {
+        rv = userBranch->GetBoolPref(sSysPrefString, &enabled);
         if (NS_FAILED(rv)) {
-            SYSPREF_LOG(("...FAil to Get %s\n", sSysPrefString));
+            SYSPREF_LOG(("...Failed to Get %s\n", sSysPrefString));
             return rv;
         }
+    }
 
-        // if there is no system pref service, assume nothing happen to us
-        mSysPrefService = do_GetService(NS_SYSTEMPREF_SERVICE_CONTRACTID, &rv);
-        if (NS_FAILED(rv) || !mSysPrefService) {
-            SYSPREF_LOG(("...No System Pref Service\n"));
-            return NS_OK;
-        }
+    if (!nsCRT::strcmp(aTopic, NS_PREFSERVICE_READ_TOPIC_ID)) {
+        // The prefs have just loaded. This is the first thing that
+        // happens to us.
+        SYSPREF_LOG(("Observed: %s\n", aTopic));
 
-        // listen on its changes
-        rv = prefBranch->AddObserver(sSysPrefString, this, PR_TRUE);
+        // listen on changes to use_system_pref. It's OK to
+        // hold a strong reference because we don't keep a reference
+        // to the pref branch.
+        rv = userBranch->AddObserver(sSysPrefString, this, PR_TRUE);
         if (NS_FAILED(rv)) {
-            SYSPREF_LOG(("...FAil to add observer for %s\n", sSysPrefString));
+            SYSPREF_LOG(("...Failed to add observer for %s\n", sSysPrefString));
             return rv;
         }
 
-        if (!mEnabled) {
-            SYSPREF_LOG(("%s is disabled\n", sSysPrefString));
+        NS_ASSERTION(!mSysPrefService, "Should not be already enabled");
+        if (!enabled) {
+            // Don't load the system pref service if the preference is
+            // not set.
             return NS_OK;
         }
-        SYSPREF_LOG(("%s is enabled\n", sSysPrefString));
-        rv = UseSystemPrefs();
 
-    }
-    // sSysPrefString value was changed, update ...
-    else if (!nsCRT::strcmp(aTopic, NS_PREFBRANCH_PREFCHANGE_TOPIC_ID) &&
-             NS_ConvertUTF8toUCS2(sSysPrefString).Equals(aData)) {
-        SYSPREF_LOG(("++++++ Notify: topic=%s data=%s\n",
-                     aTopic, NS_ConvertUCS2toUTF8(aData).get()));
+        SYSPREF_LOG(("%s is enabled\n", sSysPrefString));
 
-        nsCOMPtr<nsIPrefBranch> prefBranch =
-            do_GetService(NS_PREFSERVICE_CONTRACTID, &rv);
+        rv = LoadSystemPrefs();
         if (NS_FAILED(rv))
             return rv;
 
-        PRBool enabled = mEnabled;
-        rv = prefBranch->GetBoolPref(sSysPrefString, &mEnabled);
-        if (enabled != mEnabled) {
-            if (mEnabled)
-                //read prefs from system
-                rv = UseSystemPrefs();
-            else
-                //roll back to mozilla prefs
-                rv = UseMozillaPrefs();
+        // Lock config.use_system_prefs so the user can't undo
+        // it. But only do this if it was set by in the default prefs;
+        // if it was not set by default, then locking it would actually
+        // unset the value! And the user should be allowed to turn off
+        // something they set themselves.
+        if (NS_SUCCEEDED(rv) && defaultEnabled) {
+            userBranch->LockPref(sSysPrefString);
         }
     }
 
-    // if the system pref notify us that some pref has been changed by user
-    // outside mozilla. We need to read it again.
-    else if (!nsCRT::strcmp(aTopic, NS_SYSTEMPREF_PREFCHANGE_TOPIC_ID) &&
-             aData) {
-        NS_ASSERTION(mEnabled == PR_TRUE, "Should not listen when disabled");
-        SYSPREF_LOG(("====== System Pref Notify topic=%s data=%s\n",
-                     aTopic, (char*)aData));
-        rv = ReadSystemPref(NS_LossyConvertUCS2toASCII(aData).get());
-        return NS_OK;
-    } else if (!nsCRT::strcmp(aTopic,"profile-before-change")) {
-      //roll back to mozilla prefs
-      if (mEnabled)
-        UseMozillaPrefs();
-      mEnabled = PR_FALSE;
-      mSysPrefService = nsnull;
-      delete [] mSysPrefs;
-      mSysPrefs = nsnull;
-    } else
-        SYSPREF_LOG(("Not needed topic Received %s\n", aTopic));
-    return rv;
-}
+    if (!nsCRT::strcmp(aTopic, NS_PREFBRANCH_PREFCHANGE_TOPIC_ID) &&
+        nsDependentString(aData).EqualsASCII(sSysPrefString)) {
+        // sSysPrefString value was changed, update...
+        SYSPREF_LOG(("++++++ Notify: topic=%s data=%s\n",
+                     aTopic, NS_ConvertUCS2toUTF8(aData).get()));
+        if (mSysPrefService && !enabled)
+            return RestoreMozillaPrefs();
+        if (!mSysPrefService && enabled) {
+            // Don't lock it. If the user enabled use_system_prefs,
+            // they should be allowed to unlock it.
+            return LoadSystemPrefs();
+        }
 
-/* private */
+        // didn't change?
+        return NS_OK;
+    }
 
-////////////////////////////////////////////////////////////////
-// nsSystemPref::UseSystemPrefs
-// Read all the prefs in the table from system, listen for their
-// changes in system pref service.
-////////////////////////////////////////////////////////////////
-nsresult
-nsSystemPref::UseSystemPrefs()
-{
-    SYSPREF_LOG(("\n====Now Use system prefs==\n"));
-    nsresult rv = NS_OK;
-    if (!mSysPrefService) {
-        return NS_ERROR_FAILURE;
+    if (!nsCRT::strcmp(aTopic, NS_PREFBRANCH_PREFCHANGE_TOPIC_ID)) {
+        // some other pref changed, tell the backend if there is one
+        if (mSysPrefService && !mIgnorePrefSetting) {
+            NS_LossyConvertUTF16toASCII tmp(aData);
+#ifdef DEBUG
+            PRBool isLocked;
+            userBranch->PrefIsLocked(tmp.get(), &isLocked);
+            NS_ASSERTION(!isLocked, "Locked pref is changing?");
+#endif
+            SysPrefItem* item;
+            if (!mSavedPrefs.Get(tmp, &item)) {
+                NS_ERROR("Notified about pref change that we didn't ask about?");
+            } else {
+                if (!item->ignore) {
+                    mSysPrefService->NotifyMozillaPrefChanged(tmp.get());
+                }
+            }
+        }
+        return NS_OK;
     }
 
-    PRIntn sysPrefCount= sizeof(sSysPrefList) / sizeof(sSysPrefList[0]);
+    if (!nsCRT::strcmp(aTopic,"profile-before-change"))
+        return RestoreMozillaPrefs();
 
-    if (!mSysPrefs) {
-        mSysPrefs = new SysPrefItem[sysPrefCount];
-        if (!mSysPrefs)
-            return NS_ERROR_OUT_OF_MEMORY;
-        for (PRIntn index = 0; index < sysPrefCount; ++index)
-            mSysPrefs[index].SetPrefName(sSysPrefList[index]);
-    }
+    SYSPREF_LOG(("Not needed topic Received %s\n", aTopic));
 
-    for (PRIntn index = 0; index < sysPrefCount; ++index) {
-        // save mozilla prefs
-        SaveMozDefaultPref(mSysPrefs[index].prefName,
-                           &mSysPrefs[index].defaultValue,
-                           &mSysPrefs[index].isLocked);
-
-        // get the system prefs
-        ReadSystemPref(mSysPrefs[index].prefName);
-        SYSPREF_LOG(("Add Listener on %s\n", mSysPrefs[index].prefName));
-        mSysPrefService->AddObserver(mSysPrefs[index].prefName,
-                                     this, PR_TRUE);
-    }
     return rv;
 }
 
-//////////////////////////////////////////////////////////////////////
-// nsSystemPref::ReadSystemPref
-// Read a pref value from system pref service, and lock it in mozilla.
-//////////////////////////////////////////////////////////////////////
 nsresult
-nsSystemPref::ReadSystemPref(const char *aPrefName)
+nsSystemPref::SetOverridingMozillaBoolPref(const char* aPrefName,
+                                           PRBool aValue, PRBool aLock, PRBool aPresent)
 {
-    if (!mSysPrefService)
-        return NS_ERROR_FAILURE;
-    nsresult rv;
-
-    nsCOMPtr<nsIPrefBranch> prefBranch
-        (do_GetService(NS_PREFSERVICE_CONTRACTID, &rv));
-    if (NS_FAILED(rv))
-        return rv;
-
-    SYSPREF_LOG(("about to read aPrefName %s\n", aPrefName));
+    return OverridePref(aPrefName, nsIPrefBranch::PREF_BOOL,
+                        (void*)aValue, aLock, aPresent);
+}
 
-    prefBranch->UnlockPref(aPrefName);
+nsresult
+nsSystemPref::SetOverridingMozillaIntPref(const char* aPrefName,
+                                          PRInt32 aValue, PRBool aLock, PRBool aPresent)
+{
+    return OverridePref(aPrefName, nsIPrefBranch::PREF_INT,
+                        (void*)aValue, aLock, aPresent);
+}
 
-    PRInt32 prefType = nsIPrefBranch::PREF_INVALID;
-    nsXPIDLCString strValue;
-    PRInt32 intValue = 0;
-    PRBool boolValue = PR_FALSE;
+nsresult
+nsSystemPref::SetOverridingMozillaStringPref(const char* aPrefName,
+                                             const char* aValue, PRBool aLock, PRBool aPresent)
+{
+    return OverridePref(aPrefName, nsIPrefBranch::PREF_STRING,
+                        (void*)aValue, aLock, aPresent);
+}
 
-    rv = prefBranch->GetPrefType(aPrefName, &prefType);
-    if (NS_FAILED(rv))
-        return rv;
-    switch (prefType) {
+static nsresult RestorePrefValue(PRInt32 aPrefType,
+                                 const char* aPrefName,
+                                 SysPrefItem* aItem,
+                                 nsIPrefBranch* aUser,
+                                 nsIPrefBranch* aDefault)
+{
+    switch (aPrefType) {
     case nsIPrefBranch::PREF_STRING:
-        mSysPrefService->GetCharPref(aPrefName, getter_Copies(strValue));
-        SYSPREF_LOG(("system value is %s\n", strValue.get()));
-
-        prefBranch->SetCharPref(aPrefName, strValue.get());
+        aDefault->SetCharPref(aPrefName,
+                              aItem->savedDefaultValueString);
+        if (aItem->savedUserPresent) {
+            aUser->SetCharPref(aPrefName, aItem->savedUserValueString);
+        }
         break;
     case nsIPrefBranch::PREF_INT:
-        mSysPrefService->GetIntPref(aPrefName, &intValue);
-        SYSPREF_LOG(("system value is %d\n", intValue));
-
-        prefBranch->SetIntPref(aPrefName, intValue);
+        aDefault->SetIntPref(aPrefName, aItem->savedDefaultValueScalar);
+        if (aItem->savedUserPresent) {
+            aUser->SetIntPref(aPrefName, aItem->savedUserValueScalar);
+        }
         break;
     case nsIPrefBranch::PREF_BOOL:
-        mSysPrefService->GetBoolPref(aPrefName, &boolValue);
-        SYSPREF_LOG(("system value is %s\n", boolValue ? "TRUE" : "FALSE"));
-
-        prefBranch->SetBoolPref(aPrefName, boolValue);
+        aDefault->SetBoolPref(aPrefName, aItem->savedDefaultValueScalar);
+        if (aItem->savedUserPresent) {
+            aUser->SetBoolPref(aPrefName, aItem->savedUserValueScalar);
+        }
         break;
     default:
-        SYSPREF_LOG(("Fail to system value for it\n"));
+        NS_ERROR("Unknown preference type");
         return NS_ERROR_FAILURE;
     }
-    prefBranch->LockPref(aPrefName);
+
+    if (!aItem->savedUserPresent) {
+        aUser->DeleteBranch(aPrefName);
+    }
+
     return NS_OK;
 }
 
-//////////////////////////////////////////////////////////////////////
-// nsSystemPref::UseMozillaPrefs
-// Restore mozilla default prefs, remove system pref listeners
-/////////////////////////////////////////////////////////////////////
-nsresult
-nsSystemPref::UseMozillaPrefs()
+static PLDHashOperator PR_CALLBACK RestorePref(const nsACString& aKey,
+                                               SysPrefItem* aItem,
+                                               void* aClosure)
 {
-    nsresult rv = NS_OK;
-    SYSPREF_LOG(("\n====Now rollback to Mozilla prefs==\n"));
+    nsSystemPref* prefs = NS_STATIC_CAST(nsSystemPref*, aClosure);
+    nsCOMPtr<nsIPrefBranch2> userBranch = prefs->GetPrefUserBranch();
+    const nsCString& prefName = PromiseFlatCString(aKey);
+    
+    PRInt32 prefType = nsIPrefBranch::PREF_INVALID;
+    nsresult rv = userBranch->GetPrefType(prefName.get(), &prefType);
+    if (NS_FAILED(rv))
+        return PL_DHASH_NEXT;
+    PRBool isLocked;
+    userBranch->PrefIsLocked(prefName.get(), &isLocked);
+    if (NS_FAILED(rv))
+        return PL_DHASH_NEXT;
+
+    // Remove our observer before we change the value
+    userBranch->RemoveObserver(prefName.get(), prefs);
+    // Remember to ignore this item. Because some prefs start with "config.use_system_prefs",
+    // which we always observe, even after we remove the observer, changes to the pref will
+    // still be observed by us. We must ignore them.
+    aItem->ignore = PR_TRUE;
+
+    // Unlock the pref so we can set it
+    if (isLocked) {
+        userBranch->UnlockPref(prefName.get());
+    }
 
-    // if we did not use system prefs, do nothing
-    if (!mSysPrefService)
-        return NS_OK;
+    nsCOMPtr<nsIPrefBranch> defaultBranch = prefs->GetPrefDefaultBranch();
 
-    PRIntn sysPrefCount= sizeof(sSysPrefList) / sizeof(sSysPrefList[0]);
-    for (PRIntn index = 0; index < sysPrefCount; ++index) {
-        // restore mozilla default value and free string memory if needed
-        RestoreMozDefaultPref(mSysPrefs[index].prefName,
-                              &mSysPrefs[index].defaultValue,
-                              mSysPrefs[index].isLocked);
-        SYSPREF_LOG(("stop listening on %s\n", mSysPrefs[index].prefName));
-        mSysPrefService->RemoveObserver(mSysPrefs[index].prefName,
-                                        this);
+    RestorePrefValue(prefType, prefName.get(), aItem,
+                     userBranch, defaultBranch);
+
+    if (aItem->savedLocked) {
+        userBranch->LockPref(prefName.get());
     }
-    return rv;
+
+    return PL_DHASH_NEXT;
 }
 
-////////////////////////////////////////////////////////////////////////////
-// nsSystemPref::RestoreMozDefaultPref
-// Save the saved mozilla default value.
-// It is also responsible for allocate the string memory when needed, because
-// this method know what type of value is stored.
-/////////////////////////////////////////////////////////////////////////////
 nsresult
-nsSystemPref::SaveMozDefaultPref(const char *aPrefName,
-                                 MozPrefValue *aPrefValue,
-                                 PRBool *aLocked)
+nsSystemPref::StopOverridingMozillaPref(const char* aPrefName)
 {
-    NS_ENSURE_ARG_POINTER(aPrefName);
-    NS_ENSURE_ARG_POINTER(aPrefValue);
-    NS_ENSURE_ARG_POINTER(aLocked);
-
-    nsresult rv;
+    SysPrefItem* item;
+    nsDependentCString prefNameStr(aPrefName);
+    if (!mSavedPrefs.Get(prefNameStr, &item))
+        return NS_OK;
 
-    nsCOMPtr<nsIPrefBranch> prefBranch =
-        do_GetService(NS_PREFSERVICE_CONTRACTID, &rv);
-    if (NS_FAILED(rv))
-        return rv;
+    RestorePref(prefNameStr, item, this);
+    mSavedPrefs.Remove(prefNameStr);
+    delete item;
+    return NS_OK;
+}
 
-    SYSPREF_LOG(("Save Mozilla value for %s\n", aPrefName));
+/* private */
 
+nsresult
+nsSystemPref::OverridePref(const char* aPrefName, PRInt32 aType,
+                           void* aValue, PRBool aLock, PRBool aPresent)
+{
+    nsCOMPtr<nsIPrefBranch2> userBranch = GetPrefUserBranch();
+    nsCOMPtr<nsIPrefBranch> defaultBranch = GetPrefDefaultBranch();
     PRInt32 prefType = nsIPrefBranch::PREF_INVALID;
-    nsXPIDLCString strValue;
+    nsresult rv = userBranch->GetPrefType(aPrefName, &prefType);
+    if (NS_FAILED(rv))
+        return rv;
 
-    rv = prefBranch->GetPrefType(aPrefName, &prefType);
+    PRBool isLocked;
+    rv = userBranch->PrefIsLocked(aPrefName, &isLocked);
+    if (NS_FAILED(rv))
+        return rv;
+    PRBool hasUserValue;
+    rv = userBranch->PrefHasUserValue(aPrefName, &hasUserValue);
     if (NS_FAILED(rv))
         return rv;
-    switch (prefType) {
-    case nsIPrefBranch::PREF_STRING:
-        prefBranch->GetCharPref(aPrefName,
-                                getter_Copies(strValue));
-        SYSPREF_LOG(("Mozilla value is %s", strValue.get()));
 
-        if (aPrefValue->stringVal)
-            PL_strfree(aPrefValue->stringVal);
-        aPrefValue->stringVal = PL_strdup(strValue.get());
-        break;
-    case nsIPrefBranch::PREF_INT:
-        prefBranch->GetIntPref(aPrefName, &aPrefValue->intVal);
-        SYSPREF_LOG(("Mozilla value is %d\n", aPrefValue->intVal));
+    if (prefType == 0) {
+        // Preference does not exist. Allow the system prefs to
+        // set it.
+    } else {
+        NS_ASSERTION(aType == prefType,
+                     "System pref engine passed incorrect type for Mozilla pref");
+        if (aType != prefType)
+            return NS_ERROR_FAILURE;
+    }
 
-        break;
-    case nsIPrefBranch::PREF_BOOL:
-        prefBranch->GetBoolPref(aPrefName, &aPrefValue->boolVal);
-        SYSPREF_LOG(("Mozilla value is %s\n",
-                     aPrefValue->boolVal ? "TRUE" : "FALSE"));
+    if (prefType != 0) {
+        nsDependentCString prefNameStr(aPrefName);
+        SysPrefItem* item = nsnull;
+        if (!mSavedPrefs.Get(prefNameStr, &item)) {
+            // Need to save the existing value away
+            item = new SysPrefItem();
+            if (!item)
+                return NS_ERROR_OUT_OF_MEMORY;
+
+            item->savedLocked = isLocked;
+            item->savedUserPresent = hasUserValue;
+        
+            switch (prefType) {
+            case nsIPrefBranch::PREF_STRING:
+                if (hasUserValue) {
+                    userBranch->GetCharPref(aPrefName, &item->savedUserValueString);
+                }
+                defaultBranch->GetCharPref(aPrefName, &item->savedDefaultValueString);
+                break;
+            case nsIPrefBranch::PREF_INT:
+                if (hasUserValue) {
+                    userBranch->GetIntPref(aPrefName, &item->savedUserValueScalar);
+                }
+                defaultBranch->GetIntPref(aPrefName, &item->savedDefaultValueScalar);
+                break;
+            case nsIPrefBranch::PREF_BOOL:
+                if (hasUserValue) {
+                    userBranch->GetBoolPref(aPrefName, &item->savedUserValueScalar);
+                }
+                defaultBranch->GetBoolPref(aPrefName, &item->savedDefaultValueScalar);
+                break;
+            default:
+                NS_ERROR("Unknown preference type");
+                delete item;
+                return NS_ERROR_FAILURE;
+            }
+
+            mSavedPrefs.Put(prefNameStr, item);
+
+            // Watch the user value in case it changes on the Mozilla side
+            // If 'aLock' is true then it shouldn't change and we don't
+            // need the observer, but don't bother optimizing for that.
+            userBranch->AddObserver(aPrefName, this, PR_TRUE);
+        } else {
+            if (isLocked != aLock) {
+                // restore pref value on user and default branches
+                RestorePrefValue(prefType, aPrefName, item,
+                                 userBranch, defaultBranch);
+            }
+        }
+    }
 
-        break;
-    default:
-        SYSPREF_LOG(("Fail to Read Mozilla value for it\n"));
-        return NS_ERROR_FAILURE;
+    // We need to ignore pref changes due to our own calls here
+    mIgnorePrefSetting = PR_TRUE;
+
+    // Unlock it if it's locked, so we can set it
+    if (isLocked) {
+        rv = userBranch->UnlockPref(aPrefName);
+        if (NS_FAILED(rv))
+            return rv;
     }
-    rv = prefBranch->PrefIsLocked(aPrefName, aLocked);
-    SYSPREF_LOG((" (%s).\n", aLocked ? "Locked" : "NOT Locked"));
+
+    // Set the pref on the default branch if we're locking it, because
+    // only the default branch gets used when the pref is locked.
+    // Set the pref on the user branch if we're not locking it, because
+    // that's where the user change will go.
+    nsIPrefBranch* settingBranch =
+        aLock ? defaultBranch.get() : NS_STATIC_CAST(nsIPrefBranch*, userBranch.get());
+
+    if (!aPresent) {
+        rv = settingBranch->DeleteBranch(aPrefName);
+    } else {
+        switch (aType) {
+        case nsIPrefBranch::PREF_STRING:
+            rv = settingBranch->SetCharPref(aPrefName, (const char*)aValue);
+            break;
+        case nsIPrefBranch::PREF_INT:
+            rv = settingBranch->SetIntPref(aPrefName, (PRInt32)(NS_PTR_TO_INT32(aValue)));
+            break;
+        case nsIPrefBranch::PREF_BOOL:
+            rv = settingBranch->SetBoolPref(aPrefName, (PRBool)(NS_PTR_TO_INT32(aValue)));
+            break;
+        default:
+            NS_ERROR("Unknown preference type");
+            mIgnorePrefSetting = PR_FALSE;
+            return NS_ERROR_FAILURE;
+        }
+    }
+    if (NS_FAILED(rv))
+        return rv;
+    if (aLock) {
+        rv = userBranch->LockPref(aPrefName);
+    }
+
+    mIgnorePrefSetting = PR_FALSE;
     return rv;
 }
 
-////////////////////////////////////////////////////////////////////////////
-// nsSystemPref::RestoreMozDefaultPref
-// Restore the saved mozilla default value to pref service.
-// It is also responsible for free the string memory when needed, because
-// this method know what type of value is stored.
-/////////////////////////////////////////////////////////////////////////////
 nsresult
-nsSystemPref::RestoreMozDefaultPref(const char *aPrefName,
-                                    MozPrefValue *aPrefValue,
-                                    PRBool aLocked)
+nsSystemPref::FixupLockdownPrefs()
 {
-    NS_ENSURE_ARG_POINTER(aPrefName);
-
-    nsresult rv;
-
-    nsCOMPtr<nsIPrefBranch> prefBranch =
-        do_GetService(NS_PREFSERVICE_CONTRACTID, &rv);
+    nsCOMPtr<nsIPrefBranch2> userPrefs = GetPrefUserBranch();
+    nsCOMPtr<nsIPrefBranch2> defaultPrefs = GetPrefUserBranch();
+    PRUint32 childCount;
+    char **childArray = nsnull;
+    nsresult rv = userPrefs->GetChildList("config.lockdown.",
+                                          &childCount, &childArray);
     if (NS_FAILED(rv))
         return rv;
+    for (PRUint32 i = 0; i < childCount; ++i) {
+        PRInt32 type;
+        rv = defaultPrefs->GetPrefType(childArray[i], &type);
+        if (NS_FAILED(rv))
+            return rv;
+        NS_ASSERTION(type == nsIPrefBranch2::PREF_BOOL,
+                     "All config.lockdown.* prefs should be boolean");
+        if (type == nsIPrefBranch2::PREF_BOOL) {
+            rv = defaultPrefs->SetBoolPref(childArray[i], PR_FALSE);
+            if (NS_FAILED(rv))
+                return rv;
+        }
+    }
+    NS_FREE_XPCOM_ALLOCATED_POINTER_ARRAY(childCount, childArray);
+    return NS_OK;
+}
 
-    SYSPREF_LOG(("Restore Mozilla value for %s\n", aPrefName));
+nsresult
+nsSystemPref::LoadSystemPrefs()
+{
+    SYSPREF_LOG(("\n====Now Use system prefs==\n"));
+    NS_ASSERTION(!mSysPrefService,
+                 "Shouldn't have the pref service here");
+    nsresult rv;
+    mSysPrefService = do_GetService(NS_SYSTEMPREF_SERVICE_CONTRACTID, &rv);
+    if (NS_FAILED(rv) || !mSysPrefService) {
+        FixupLockdownPrefs();
+        SYSPREF_LOG(("...No System Pref Service\n"));
+        return NS_OK;
+    }
 
-    PRInt32 prefType = nsIPrefBranch::PREF_INVALID;
-    rv = prefBranch->GetPrefType(aPrefName, &prefType);
-    if (NS_FAILED(rv))
-        return rv;
+    // Cache the pref-branch while we load up the system prefs.
+    NS_ASSERTION(!mCachedUserPrefBranch,
+                 "Shouldn't have a cache here");
+    nsCOMPtr<nsIPrefBranch2> userBranch = GetPrefUserBranch();
+    nsCOMPtr<nsIPrefBranch> defaultBranch = GetPrefDefaultBranch();
+    mCachedDefaultPrefBranch = defaultBranch;
+    mCachedUserPrefBranch = userBranch;
+    rv = mSysPrefService->LoadSystemPreferences(this);
+    mCachedDefaultPrefBranch = nsnull;
+    mCachedUserPrefBranch = nsnull;
+
+    if (NS_FAILED(rv)) {
+        // Restore all modified preferences to their original values
+        mSavedPrefs.EnumerateRead(RestorePref, this);
+        mSavedPrefs.Clear();
+        mSysPrefService = nsnull;
+    }
+        
+    return rv;
+}
 
-    // unlock, if it is locked
-    prefBranch->UnlockPref(aPrefName);
+nsresult
+nsSystemPref::RestoreMozillaPrefs()
+{
+    SYSPREF_LOG(("\n====Now rollback to Mozilla prefs==\n"));
 
-    switch (prefType) {
-    case nsIPrefBranch::PREF_STRING:
-        prefBranch->SetCharPref(aPrefName,
-                                aPrefValue->stringVal);
-        SYSPREF_LOG(("Mozilla value is %s\n", aPrefValue->stringVal));
+    NS_ASSERTION(mSysPrefService,
+                 "Should have the pref service here");
+    if (!mSysPrefService)
+        return NS_ERROR_FAILURE;
 
-        PL_strfree(aPrefValue->stringVal);
-        aPrefValue->stringVal = nsnull;
+    nsCOMPtr<nsIPrefBranch2> userBranch = GetPrefUserBranch();
+    nsCOMPtr<nsIPrefBranch> defaultBranch = GetPrefDefaultBranch();
+    mCachedDefaultPrefBranch = defaultBranch;
+    mCachedUserPrefBranch = userBranch;
 
-        break;
-    case nsIPrefBranch::PREF_INT:
-        prefBranch->SetIntPref(aPrefName, aPrefValue->intVal);
-        SYSPREF_LOG(("Mozilla value is %d\n", aPrefValue->intVal));
+    mSysPrefService->NotifyUnloadSystemPreferences();
+    // Restore all modified preferences to their original values
+    mSavedPrefs.EnumerateRead(RestorePref, this);
+    mSavedPrefs.Clear();
 
-        break;
-    case nsIPrefBranch::PREF_BOOL:
-        prefBranch->SetBoolPref(aPrefName, aPrefValue->boolVal);
-        SYSPREF_LOG(("Mozilla value is %s\n",
-                     aPrefValue->boolVal ? "TRUE" : "FALSE"));
+    mCachedDefaultPrefBranch = nsnull;
+    mCachedUserPrefBranch = nsnull;
+    
+    mSysPrefService = nsnull;
 
-        break;
-    default:
-        SYSPREF_LOG(("Fail to Restore Mozilla value for it\n"));
-        return NS_ERROR_FAILURE;
-    }
+    FixupLockdownPrefs();
 
-    // restore its old lock status
-    if (aLocked)
-        prefBranch->LockPref(aPrefName);
     return NS_OK;
 }
diff --git a/mozilla/extensions/pref/system-pref/src/nsSystemPref.h b/mozilla/extensions/pref/system-pref/src/nsSystemPref.h
index 9bc3e87..7a069ab 100644
--- a/mozilla/extensions/pref/system-pref/src/nsSystemPref.h
+++ b/mozilla/extensions/pref/system-pref/src/nsSystemPref.h
@@ -23,7 +23,7 @@
  *
  * Original Author: Bolian Yin (bolian.yin@sun.com)
  *
- * Contributor(s):
+ * Contributor(s): Robert O'Callahan/Novell (rocallahan@novell.com)
  *
  * Alternatively, the contents of this file may be used under the terms of
  * either the GNU General Public License Version 2 or later (the "GPL"), or
@@ -45,16 +45,14 @@
 #include "nsCOMPtr.h"
 #include "nsXPCOM.h"
 #include "nsCRT.h"
-#include "nsIAppStartupNotifier.h"
-#include "nsICategoryManager.h"
-#include "nsIServiceManager.h"
 #include "nsWeakReference.h"
-#include "nsIPrefService.h"
-#include "nsIPrefBranch2.h"
+#include "nsClassHashtable.h"
+#include "nsHashKeys.h"
+#include "nsMemory.h"
 
-#include <nsIObserver.h>
+#include "nsISystemPrefService.h"
+#include "nsIObserver.h"
 
-union MozPrefValue;
 struct SysPrefItem;
 
 //////////////////////////////////////////////////////////////////////////
@@ -62,18 +60,34 @@ struct SysPrefItem;
 // nsSystemPref, as an extension of mozilla pref service, reads some mozilla
 // prefs from host system when the feature is enabled ("config.system-pref").
 //
-// nsSystemPref listens on NS_PREFSERVICE_READ_TOPIC_ID. When notified,
-// nsSystemPref will start the nsSystemPrefService (platform specific) to
-// read all the interested prefs (listed in sSysPrefList table) from system
-// and lock these prefs from user's modification. 
+// nsSystemPref listens on NS_PREFSERVICE_READ_TOPIC_ID. When
+// notified, nsSystemPref will start the nsSystemPrefService (platform
+// specific) and tell it to override Mozilla prefs with its own
+// settings.
+//
+// When overriding a Mozilla preference the prefservice can request the
+// pref be locked or unlocked. If the pref is locked then we set the default
+// value and lock it in Mozilla so the user value is ignored and the user cannot
+// change the value. If the pref is unlocked then we set the user value
+// and unlock it in Mozilla so the user can change it. If the user changes it,
+// then the prefservice is notified so it can copy the value back to its
+// underlying store.
+//
+// We detect changes to Mozilla prefs by observing pref changes in the
+// user branch.
+//
+// For testing purposes, if the user toggles on
+// config.use_system_prefs then we save the current preferences before
+// overriding them from gconf, and if the user toggles off
+// config.use_system_prefs *in the same session* then we restore the
+// preferences. If the user exits without turning off use_system_prefs
+// then the saved values are lost and the new values are permanent.
 //
-// This feature will make mozilla integrated better into host platforms. If
-// users want to change the prefs read from system, the system provided pref
-// editor (i.e. gconf-editor in gnome) should be used.
 //////////////////////////////////////////////////////////////////////////
 
 class nsSystemPref : public nsIObserver,
-                     public nsSupportsWeakReference
+                     public nsSupportsWeakReference,
+                     public nsISystemPref
 {
 public:
     NS_DECL_ISUPPORTS
@@ -83,23 +97,39 @@ public:
     virtual ~nsSystemPref();
     nsresult Init(void);
 
+    // nsISystemPref
+    virtual nsresult SetOverridingMozillaBoolPref(const char* aPrefName,
+                                                  PRBool aValue, PRBool aLocked,
+                                                  PRBool aPresent = PR_TRUE);
+    virtual nsresult SetOverridingMozillaIntPref(const char* aPrefName,
+                                                 PRInt32 aValue, PRBool aLocked,
+                                                 PRBool aPresent = PR_TRUE);
+    virtual nsresult SetOverridingMozillaStringPref(const char* aPrefName,
+                                                    const char* aValue, PRBool aLocked,
+                                                    PRBool aPresent = PR_TRUE);
+    virtual nsresult StopOverridingMozillaPref(const char* aPrefName);
+    virtual already_AddRefed<nsIPrefBranch2> GetPrefUserBranch();
+    virtual already_AddRefed<nsIPrefBranch> GetPrefDefaultBranch();
+
 private:
-    // funcs used to load system prefs and save mozilla default prefs
-    nsresult UseSystemPrefs();
-    nsresult ReadSystemPref(const char *aPrefName);
-    nsresult SaveMozDefaultPref(const char *aPrefName,
-                                MozPrefValue *aPrefVal,
-                                PRBool *aLocked);
-
-    // funcs used to load mozilla default prefs
-    nsresult UseMozillaPrefs();
-    nsresult RestoreMozDefaultPref(const char *aPrefName,
-                                   MozPrefValue *aPrefVal,
-                                   PRBool aLocked);
-
-    nsCOMPtr<nsIPrefBranch2>  mSysPrefService;
-    PRBool mEnabled;  // system pref is enabled or not
-    SysPrefItem *mSysPrefs;
+    // If we don't load the system prefs for any reason, then
+    // set all config.lockdown.* preferences to PR_FALSE so that
+    // residual lockdown settings are removed.
+    nsresult FixupLockdownPrefs();
+
+    nsresult LoadSystemPrefs();
+
+    nsresult RestoreMozillaPrefs();
+
+    nsresult OverridePref(const char* aPrefName, PRInt32 aType,
+                          void* aValue, PRBool aLock, PRBool aPresent);
+
+    nsCOMPtr<nsISystemPrefService>  mSysPrefService;
+    nsClassHashtable<nsCStringHashKey,SysPrefItem> mSavedPrefs;
+    // weak pointers to cached prefbranches
+    nsIPrefBranch2* mCachedUserPrefBranch;
+    nsIPrefBranch* mCachedDefaultPrefBranch;
+    PRPackedBool mIgnorePrefSetting;
 };
 
 #define NS_SYSTEMPREF_CID                  \
diff --git a/mozilla/extensions/pref/system-pref/src/nsSystemPrefFactory.cpp b/mozilla/extensions/pref/system-pref/src/nsSystemPrefFactory.cpp
index 690d11b..98331fe 100644
--- a/mozilla/extensions/pref/system-pref/src/nsSystemPrefFactory.cpp
+++ b/mozilla/extensions/pref/system-pref/src/nsSystemPrefFactory.cpp
@@ -42,10 +42,10 @@
 #include "nsICategoryManager.h"
 #include "nsIGenericFactory.h"
 #include "nsSystemPref.h"
-#include "nsSystemPrefService.h"
+#include "nsIServiceManager.h"
+#include "nsIAppStartupNotifier.h"
 
 NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsSystemPref, Init)
-NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsSystemPrefService, Init)
 
 // Registering nsSystemPref module as part of the app-startup category to get 
 // it instantiated.
@@ -96,11 +96,6 @@ static const nsModuleComponentInfo components[] = {
       RegisterSystemPref,
       UnRegisterSystemPref,
     },
-    { NS_SYSTEMPREF_SERVICE_CLASSNAME,
-      NS_SYSTEMPREF_SERVICE_CID,
-      NS_SYSTEMPREF_SERVICE_CONTRACTID,
-      nsSystemPrefServiceConstructor,
-    },
 };
 
 NS_IMPL_NSGETMODULE(nsSystemPrefModule, components)
