#This file is adapted to the needs of the Eclipse Packaging Project.
#Do not modify.

#The directory used as a base for the all process
# Provided by EPP.
#baseDirectory = <folder>

#Setting this to true will cause the dependency analysis to only be done on the features and plugins reachable from the ${featureList}.
filteredDependencyCheck=false

# A comma separated list of feature ids that will be part of the archive.
# Provided by EPP. 
#featureList = <featuresToGather>

# The list of {os, ws, arch} configurations to build.  This 
# value is a '&' separated list of ',' separate triples. 
# By default the value is *,*,* which is platform independant
# Provided by EPP.
#config=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

#Set this variable to normalize plug-in and feature names while packaging 
normalizeWhilePackaging=true

################ DOWNLOAD ############################
#Skip any download and unzipping work because the things to be packaged are already available in ${target}
#Comment the property if you want the download and unzip to occur.
#prefilledTarget = true

#Don't download packager map files, they should already exist in ${downloadDirectory}
#comment out this property to download the map file from packagerMapURL
#skipMaps = true
#localMaps = true
#The URL from which to download the packager map file. If more than one file needs to be downloaded, edit the getMapFiles target in your customTargets.xml
#packagerMapURL = 

#Don't download the archives.
#skipFetch = true

# A comma seperated list of the component from which the features listed in featureList can be found
# This is used as a optimization to avoid unnecessary downloads.
# * should be specified if you don't know
componentFilter=*

# A comma separated list of filters used to optimize the download of archives.
#Values in this filter should match the 
contentFilter=sdk


################ FOLDERS ############################
# The place in which all the scripts will be contained
workingDirectory = ${baseDirectory}/workingPlace
buildDirectory = ${workingDirectory}

# The folder in which all the zips will be downloaded
downloadDirectory = ${baseDirectory}/toPackage

# The folder where all the operations are being done
tempDirectory = ${baseDirectory}/temp

# The place in which the zips are located
sourceFolder = ${downloadDirectory}

################# SOURCES ###########################
# The name of the root of the archives downloaded.  Features and plug-ins will be looked for 
# in ${tempDirectory}/${featurePaths}/features and ${tempDirectory}/${featurePaths}/plugins 
# It is possible to specify a list of roots, see https://bugs.eclipse.org/bugs/show_bug.cgi?id=143854  for details.
#featurePaths = eclipse

# A comma separated lists of places where plugins and features will be looked for 
target = ${tempDirectory}/eclipse


################## MISC ##########################
# This controls the build id in the default name of the archive
buildId=EclipsePackagerBuild

# Type of build.  Used in naming the build output.  Typically this value is
# one of I, N, M, S, ...
buildType=I

#Set the name of the archive that will result from the product build.
#archiveNamePrefix =RCP

# Label for the build.  Used in naming the build output
buildLabel=${buildType}.${buildId}

#The format of the archive. By default a zip is created using antZip.
# Provided by EPP.
#archivesFormat=win32, win32, x86 - antZip& \
#	linux, gtk, ppc - antZip &\
#    linux, gtk, x86 - antZip& \
#	linux, gtk, x86_64 - antZip& \
# linux, motif, x86 - antZip& \
#	solaris, motif, sparc - antZip& \
#	solaris, gtk, sparc - antZip& \
#	aix, motif, ppc - antZip& \
#	hpux, motif, PA_RISC - antZip& \
#	macosx, carbon, ppc - antZip

# extra arguments to be passed to zip / unzip (-y is usually used on unix for zip)
zipargs=
unzipArgs=

# the prefix in the archive
archivePrefix=eclipse

# the folder in which the files that will be added to the archive will be placed
collectingFolder=eclipse


############### PACKAGING.PROPERTIES #############################
# a relative path to the file containing the properties for element to package
packagingProperties = packaging.properties
