# The name of the product for display purposes

product.name = Eclipse Data Tools

# The prefix to use when creating the product repository archive and other packages

product.package.file.prefix = dtp

# The feature that includes all other features

root.feature = org.eclipse.datatools

# The feature whose version determines the overall product version

version.master.feature = org.eclipse.datatools.connectivity.feature

# The names of the supported target configurations, separated by commas

configurations = oxygen,oxygen.1a,oxygen.2,photon

# The minimal (oldest) supported configuration

configuration.min = oxygen

# The maximum (newest) supported configuration

configuration.max = photon

# The configuration to use for the main build as well as for dev-eclipse and dev-target

configuration.recommended = oxygen.2

# The Mylyn and EGit repositories (used only for dev-eclipse, so kept at the latest version in all configurations)

rep.dev = \
${rep.eclipse.mylyn-latest},\
${rep.eclipse.egit-latest}

# The photon configuration

photon.repositories = \
${rep.eclipse-photon},\
${rep.eclipse.gef-photon},\
${rep.eclipse.emf-photon},\
${rep.eclipse.orbit-photon},\
file:../../org.eclipse.datatools.doc/packaged_jars,\
${rep.dev}

# The oxygen.2 configuration

oxygen.2.repositories = \
${rep.eclipse-oxygen.2},\
${rep.eclipse.gef-oxygen.2},\
${rep.eclipse.emf-oxygen.2},\
${rep.eclipse.orbit-oxygen.2},\
file:../../org.eclipse.datatools.doc/packaged_jars,\
${rep.dev}

# The oxygen.1a configuration

oxygen.1a.repositories = \
${rep.eclipse-oxygen.1a},\
${rep.eclipse.gef-oxygen.1a},\
${rep.eclipse.emf-oxygen.1a},\
${rep.eclipse.orbit-oxygen.1a},\
file:../../org.eclipse.datatools.doc/packaged_jars,\
${rep.dev}

# The oxygen configuration

oxygen.repositories = \
${rep.eclipse-oxygen},\
${rep.eclipse.gef-oxygen},\
${rep.eclipse.emf-oxygen},\
${rep.eclipse.orbit-oxygen},\
file:../../org.eclipse.datatools.doc/packaged_jars,\
${rep.dev}

# Automatically set Require-Bundle version ranges

require.bundle.version.constraint.excludes = .*\.source

require.bundle.version.constraint.rules = \
com.ibm.icu=[M1.M2.M3,T1+10.0.0);\
*=[M1.M2.M3,T1+1.0.0)

# Verify that Bundle-RequiredExecutionEnvironment is set to the specified value

verify.bundle.required.env = true
verify.bundle.required.env.value = JavaSE-1.8

# The components to install in build's target platform

iu.orbit = net.sourceforge.lpg.lpgjavaruntime,\
org.apache.xerces,\
javax.wsdl/1.5.1.v201012040544,\
org.apache.lucene.core/6.1.0.v20161115-1612,\
org.apache.lucene.queryparser/6.1.0.v20161115-1612,\
org.apache.lucene.analyzers-common/6.1.0.v20161115-1612

iu.packaged.jars = org.eclipse.datatools.common.doc.user,\
org.eclipse.datatools.connectivity.doc.user.contexts,\
org.eclipse.datatools.connectivity.doc.user,\
org.eclipse.datatools.doc.user,\
org.eclipse.datatools.intro,\
org.eclipse.datatools.sqltools.doc.user.contexts,\
org.eclipse.datatools.sqltools.doc.user

iu.build.target = \
${iu.eclipse.jdt},\
${iu.eclipse.pde},\
${iu.eclipse.emf},\
${iu.eclipse.gef},\
${iu.orbit},\
${iu.packaged.jars}

# The components to install in dev-target (typically the same as build target, but with source)

iu.dev.target = \
${iu.eclipse.platform.source},\
${iu.eclipse.jdt},\
${iu.eclipse.jdt.source},\
${iu.eclipse.pde},\
${iu.eclipse.pde.source},\
${iu.eclipse.emf.sdk},\
${iu.eclipse.gef.sdk},\
${iu.orbit},\
${iu.packaged.jars}

# The components to install in dev-eclipse

iu.dev.env = \
${iu.eclipse.jdt},\
${iu.eclipse.pde},\
${iu.eclipse.mylyn},\
${iu.eclipse.egit}
