# 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 interepreted 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.p2.artifact.repository,\
	org.eclipse.equinox.p2.console,\
	org.eclipse.equinox.p2.core,\
	org.eclipse.equinox.p2.director,\
	org.eclipse.equinox.p2.director.app,\
	org.eclipse.equinox.p2.download,\
	org.eclipse.equinox.p2.engine,\
	org.eclipse.equinox.p2.exemplarysetup@start,\
	org.eclipse.equinox.p2.metadata,\
	org.eclipse.equinox.p2.metadata.repository,\
	org.eclipse.equinox.p2.operations,\
	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.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=

# 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