# This file specifies a list of possible mozilla installations to load, in
# priority order.  Non-existent paths are ignored, and the next location is
# searched.  A best effort attempt is also made to ignore paths containing
# incompatible mozilla installations (for example, ones which use GTK1 instead
# of GTK2, which is required).  The first apparently valid installation found
# will be used (although it could still fail later).
#
# Non-absolute paths are relative to the directory containing this file (that
# is, the GWT install directory).
#
# Non-system installations should contain a file named "gwt-dl-loadorder.conf".
# The format of such a file is one shared library per line which dictates the
# order in which that installation's shared libraries must be loaded to prevent
# implicit loading of other libraries.  In other words, no library should be
# loaded before its dependencies.  This is to prevent the LD_LIBRARY_PATH or
# other system library load configuration from loading the default system
# version of the library instead of the version in the target installation.


# Prefer mozilla 1.7.13 if it exists, because it supports mouse wheel events.
# If you need mouse wheel events, you can install the distribution available at:
#
#   http://google-web-toolkit.googlecode.com/svn/tools/redist/mozilla/mozilla-1.7.13.tar.gz
#
# However, this version may not run correctly on your system.  If it doesn't,
# you can try installing a mozilla 1.7.13 built for your system.
mozilla-1.7.13

# This is the default mozilla that ships with GWT.
mozilla-1.7.12

# See if there are compatible mozilla distributions already installed.
/usr/lib/mozilla-1.7.13
/usr/lib/mozilla-1.7.12
/usr/lib/mozilla
