# Eclipse runtime configuration file
# This file contains a number of key/value pairs that are merged into the 
# System properties on system startup.  The values control the way the 
# runtime is structured and runs.

# Note:  Only platform:/base/ and file: URLs are supported.  In general the 
# URLs given may include a version number (e.g., .../location_1.2.3).  
# If a version is not specified, the system binds
# to the location which matches exactly or to the versioned location with the
# latest version number.  If a version number is given then only exact matches
# are considered.

# The URL for the runtime entry point.  The default value is
# platform:/base/plugins/org.eclipse.osgi 
#osgi.framework=platform:/base/plugins/org.eclipse.osgi

# The classpath for the framework found at the osgi.framework location.  This 
# comma-separated list contains either URLs or simple element names.  Simple
# names are assumed to be relative to the framework's install directory.  
# Typically this value need not be set as it is initialized by the framework itself.
# Version match searching is not done for URLs listed here.
#osgi.frameworkClassPath =

# The comma-separated list of locations to search for the splash screen file (splash.bmp).
# For each list element a subdirectory structure based on the pattern nl/<locale> is searched.
# The system binds to the first matching file.  There is no default value.
#osgi.splashPath=

# The location of the splash screen file.  If this value is set at system startup it is used 
# in favour of the osgi.splashPath searching outlined above.  If the value is not set 
# the searching is done and this key is bound to the result of the search.
#osgi.splashLocation =

# The comma-separated list of bundles which are automatically installed and optionally started
# once the system is up and running.  Each entry if of the form
#     <URL | simple bundle location>[@ [<startlevel>] [":start"]]
# If the startlevel is omitted then the framework will use the default start level for the bundle.
# If the "start" tag is added then the bundle will be marked as started after being installed.
# Simple bundle locations are interpreted as relative to the framework's parent directory.
# The startlevel indicates the OSGi start level at which the bundle should run.
osgi.bundles=\
	org.eclipse.core.jobs,\
	org.eclipse.ecf,\
	org.eclipse.ecf.filetransfer,\
	org.eclipse.ecf.identity,\
	org.eclipse.ecf.provider.filetransfer,\
	org.eclipse.equinox.app@start,\
	org.eclipse.equinox.common,\
	org.eclipse.equinox.frameworkadmin,\
	org.eclipse.equinox.frameworkadmin.equinox@start,\
	org.eclipse.equinox.preferences,\
	org.eclipse.equinox.p2.artifact.repository,\
	org.eclipse.equinox.p2.core,\
	org.eclipse.equinox.p2.director,\
	org.eclipse.equinox.p2.engine,\
	org.eclipse.equinox.p2.exemplarysetup,\
	org.eclipse.equinox.p2.garbagecollector,\
	org.eclipse.equinox.p2.installer,\
	org.eclipse.equinox.p2.metadata,\
	org.eclipse.equinox.p2.metadata.repository,\
	org.eclipse.equinox.p2.touchpoint.eclipse,\
	org.eclipse.equinox.p2.touchpoint.natives,\
	org.eclipse.equinox.registry,\
	org.eclipse.equinox.simpleconfigurator,\
	org.eclipse.equinox.simpleconfigurator.manipulator@start,\
	org.eclipse.osgi.services,\
	org.eclipse.swt,\
	org.eclipse.swt.win32.win32.x86,\
	org.eclipse.swt.gtk.linux.x86,\
	org.eclipse.swt.carbon.macosx,\
	org.sat4j.core,\
	org.sat4j.pb

org.eclipse.update.reconcile=false

# The product to run.  A given Eclipse configuration may contain many products.
# The product identified will supply the branding (window icons, title bar text) etc 
# as well as define the default application to run.  
eclipse.product=org.eclipse.equinox.p2.installer.product

# The application to run.  The value specified here is the id of the application extension
# the runtime will find, instantiate and execute once the system is up.  Note that typically 
# the identified eclipse.product defines the default application to run.
#eclipse.application=

# The build identifier
eclipse.buildId=@build@

# End of file marker - must be here
eof=eof