# The prefix that will be used inside the generated archive. This should be set to eclipse
# so that the archive can be directly unzipped into the dropins directory of the
# Eclipse installation.
# @category packaging
archivePrefix=eclipse

# The location under which all of the build output will be collected.
# @category packaging
collectingFolder=${archivePrefix}

# Choose configurations if you want to build configuration specific plug-ins. However, if you
# only want to create RCP distributables for different platforms do not change the default
# *,*,*. If you select any other entry than *,*,* you also have to provide an assemble task in allElements.xml. 
# @category compiling
# @type list separator=&;values=*,*,*&win32,win32,x86&linux,gtk,ppc&linux,gtk,x86 & linux,gtk,x86_64 & linux,motif,x86 & solaris,motif,sparc & solaris,gtk,sparc & aix,motif,ppc & hpux,motif,PA_RISC & macosx,carbon,ppc & macosx,carbon,x86
#configs=*,*,*


# By default PDE creates one archive (result) per entry listed in the configs property.
# Setting this value to true will cause PDE to only create one output containing all 
# artifacts for all the platforms listed in the configs property.
# @category packaging
# @type Boolean
#groupConfigurations=false

#The format of the archive. By default a zip is created using antZip.
#The list can only contain the configuration for which the desired format is different than zip.
# E.g. win32,win32,x86 - antZip
#archivesFormat=
	
# Set to true for Jnlp generation
# @category jnlp
# @type Boolean
# generateJnlp=false

# Codebase should be a URL that will be used as the root of all relative URLs in the output.
# @category jnlp
#jnlp.codebase=<codebase url>

# @category jnlp
#jnlp.j2se=<j2se version>

# @category jnlp
#jnlp.locale=<a locale>

# Generate <offlineAllowed/> attribute in the generated features
# @category jnlp
# @type Boolean
#jnlp.generateOfflineAllowed=

# Set to ${configs} in order to filter the content of the generated jnlp files based on the configuration being built
# @category jnlp
# @type enum values=${configs} 
# jnlp.configs=			

# Check if you want to sign jars
# @type Boolean
# @category jarsigning
#signJars=false

# The Alias used for signing jars
# @category jarsigning
#sign.alias=

# A path to the keystore used for signing jars
# @category jarsigning
#sign.keystore=

# The password for the keystore
# @category jarsigning
#sign.storepass=

#Arguments to send to the zip executable
# @category packaging
zipargs=

#Arguments to send to the tar executable
# @category packaging
tarargs=

# Control the creation of a file containing the version included in each configuration - on by default
# @type Boolean 
#generateVersionsLists=true

# Indicates whether you want the set of plug-ins and features to be considered during the build to be limited to the ones reachable from the features / plugins being built
# @type Boolean
filteredDependencyCheck=false

# Indicates whether the resolution should be done in development mode (i.e. ignore multiple bundles with singletons)
# @type Boolean
resolution.devMode=false

#pluginPath is a list of locations in which to find plugins and features.  This list is separated by the platform file separator (; or :)
#a location is one of:  
#- the location of the jar or folder that is the plugin or feature : /path/to/foo.jar or /path/to/foo
#- a directory that contains a /plugins or /features subdirectory
#- the location of a feature.xml, or for 2.1 style plugins, the plugin.xml or fragment.xml
#pluginPath=


# The location of the Java jars to compile against.  Typically the rt.jar for your JDK/JRE
# @category compiling
# bootclasspath=${java.home}/lib/rt.jar

# @category executionEnvironment
#CDC-1.0/Foundation-1.0=
# @category executionEnvironment
#CDC-1.1/Foundation-1.1=
# @category executionEnvironment
#OSGi/Minimum-1.0=
# @category executionEnvironment
#OSGi/Minimum-1.1=
# @category executionEnvironment
#JRE-1.1=
# @category executionEnvironment
#J2SE-1.2=
# @category executionEnvironment
#J2SE-1.3=
# @category executionEnvironment
#J2SE-1.4=
# @category executionEnvironment
#J2SE-1.5=
# @category executionEnvironment
#JavaSE-1.6=
# @category executionEnvironment
#PersonalJava-1.1=
# @category executionEnvironment
#PersonalJava-1.2=
# @category executionEnvironment
#CDC-1.0/PersonalBasis-1.0=
# @category executionEnvironment
#CDC-1.0/PersonalJava-1.0=
# @category executionEnvironment
#CDC-1.1/PersonalBasis-1.1=
# @category executionEnvironment
#CDC-1.1/PersonalJava-1.1=

# Specify the output format of the compiler log when eclipse jdt is used
# @category compiling
logExtension=.log

# Whether or not to include debug info in the output jars
# @category compiling
# @type Boolean
javacDebugInfo=false

# Whether or not to fail the build if there are compiler errors
# @category compiling
# @type Boolean
javacFailOnError=true

# Enable or disable verbose mode of the compiler
# @category compiling
# @type Boolean
javacVerbose=false

# Extra arguments for the compiler. These are specific to the java compiler being used.
# @category compiling
#compilerArg=

# Default value for the version of the source code. This value is used when compiling plug-ins that do not set the Bundle-RequiredExecutionEnvironment or set javacSource in build.properties
# @type enum values=1.1,1.2,1.3,1.4,1.5,1.6
# @category compiling
#javacSource=1.3
javacSource=1.5

# Default value for the version of the byte code targeted. This value is used when compiling plug-ins that do not set the Bundle-RequiredExecutionEnvironment or set javacTarget in build.properties.
# @type enum values=1.1,1.2,1.3,1.4,1.5,1.6
# @category compiling
#javacTarget=1.1
javacTarget=1.5

# Set the description for the update site. The update manager shows the description in the Updates dialog.
# @category updateSite
updateSiteDescription=Update site generated by pluginbuilder.

# There will be one category for the generated update site. Here you can set the name.
# It is more like an id with which features refer to their category and does not appear in the GUI.
# @category updateSite
updateSiteCategoryName=Builds

# Here you can set the Label of the category which will be displayed in the Updates dialog.
# @category updateSite
updateSiteCategoryLabel=Nightly Builds

# Create a provisioning (p2) repository. Since Eclipse 3.4 it is recommended that you create
# a p2 repository for your features.
# However, the installation of old-style (pre p2) update sites is still possible.
# @type Boolean
# @category p2
generate.p2.metadata=true

# @category hidden
p2.metadata.repo=file:${buildDirectory}/repo

# @category hidden
p2.artifact.repo=file:${buildDirectory}/repo

# The name of the metadata repository. The Update Manager will display this name.
# @category p2
p2.metadata.repo.name=EasyAnt For Eclipse Update Site

# The name of the artifacts repository
# @category p2
p2.artifact.repo.name=EasyAnt For Eclipse Update Site

# @category hidden
p2.flavor=tooling
# @category hidden
p2.publish.artifacts=true