###############################################################################
# Copyright (c) 2010, 2011 Stephan Herrmann and others.
# This program and the accompanying materials
# are made available under the terms of the Eclipse Public License 2.0
# which accompanies this distribution, and is available at
# https://www.eclipse.org/legal/epl-2.0/
#
# SPDX-License-Identifier: EPL-2.0
#
# Contributors:
#     Stephan Herrmann - initial API and implementation
###############################################################################

# Note: for some reason, only one vm-argument is possible.
#vm.args=-Xmx256m

# this one is used by eclipse junit tests:
vmargs=-Xmx1200m -XX:-UseGCOverheadLimit

# Version dependent names:

# ------------- insert current versions here ---------------
# Details of the Eclipse SDK built upon:
run.eclipseScriptDir=plugins/org.eclipse.pde.build_3.11.100.v20210916-0743/scripts
org.eclipse.equinox.launcher_jar=org.eclipse.equinox.launcher_1.6.400.v20210924-0641.jar

# for patching our patch feature to match this version with any suffix:
jdt.feature.version=3.18.1000.v20211124-1800
jdt.feature.version.next=3.18.1000.v20211124-1801

# jdt.core fragments for extracting pre-built classes and properties:
jdt.compiler.apt=org.eclipse.jdt.compiler.apt_1.4.50.v20210914-1429.jar
jdt.compiler.tool=org.eclipse.jdt.compiler.tool_1.3.50.v20210925-0955.jar
# -----------------------------------------------------------

#Git Support for PDE BUILD:
# (Note: this file must be provided in ${OTScriptDir}/lib)
# orig:
#git.pde.build=org.eclipse.egit.fetchfactory_0.12.0.201108111757.jar
# enhanced (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=365944):
git.pde.build=org.eclipse.egit.fetchfactory_0.12.0.201208152153.jar

