File gconf-backend.patch of Package firefox2
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)