move to improved p2 functions
diff --git a/releng.wtpbuilder/scripts/build/buildutilitiesp2.xml b/releng.wtpbuilder/scripts/build/buildutilitiesp2.xml
new file mode 100644
index 0000000..e355ca0
--- /dev/null
+++ b/releng.wtpbuilder/scripts/build/buildutilitiesp2.xml
@@ -0,0 +1,612 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+ name="buildutilities"
+ default="nodefault"
+ basedir=".">
+
+ <!-- = = = standard properties pattern = = = -->
+ <!--
+ Note to be cross-platform, "environment variables" are only
+ appropriate for some variables, e.g. ones we set, since
+ properties are case sensitive, even if the environment variables
+ on your operating system are not, e.g. it will be ${env.Path}
+ not ${env.PATH} on Windows
+ -->
+ <property
+ environment="env"/>
+ <!--
+ Let users override standard properties, if desired. If
+ directory, file, or some properties do not exist, then standard
+ properties will be used.
+ -->
+ <property
+ file="${env.LOCAL_BUILD_PROPERTIES_DIR}/${ant.project.name}.properties"/>
+
+ <!-- = = = end standard properties pattern = = = -->
+
+
+ <!-- if not otherwise set, use these default properties -->
+ <property
+ name="debugOptimization"
+ value="false"/>
+ <!--
+ We should not always normalize ("-repack") jars by default,
+ since in production we sign the jars (which does the -repack for
+ us) and not in production we don't really care so why spend the
+ extra time. For jars which are not supposed to be normalized,
+ such as pre-existing jars, they need to be added to the
+ pack.properties file (see the updatePackProperties task). Note:
+ signing does the -repack when we sign. This can be over-ridden
+ by the caller setting normalize to true, but there are know
+ known cases where we want to normalize (and eventually pack) the
+ jar files but not sign them.
+ -->
+ <property
+ name="normalizeJarFiles"
+ value="false"/>
+ <!--
+ we'll currently pack jar files, just as part of "debugging" to
+ help sanity check all is working as expected. Eventually we may
+ want to provide some service there jar files in the bundles
+ directory are packed ... but, there's no known use-case for this
+ so far
+ -->
+ <property
+ name="packJarFiles"
+ value="false"/>
+ <!--
+ Let tmp site be global. Note: we use this odd
+ "tmpsite-archiveName-temp" to make sure unique directories,
+ since in some cases these directories can not be deleted from
+ ant, see https://bugs.eclipse.org/bugs/show_bug.cgi?id=142926,
+ and since directory names ending in .zip are misinterpreted by
+ jarProcessor, see
+ https://bugs.eclipse.org/bugs/show_bug.cgi?id=143385 But, its
+ handy to do as unique directories anyway, since if a larger
+ process calls this mulitiple times, on different zips, and if
+ debugging is turnned on, then all the tmpsite directories are
+ left on disk for post-build inspection.
+ -->
+ <property
+ name="tmpsite"
+ value="${buildDirectory}/tmpsite-${archiveName}-temp"/>
+ <!--
+ ==================================================================================
+ Primary Task: unpackUpdateJarsAndCreateZippedPackages This task
+ takes a zip file of update jars, which is created by PDE build
+ process, and "converts" it to a traditional zip file, processing
+ the jars with pack200 for better compression on update sites.
+ ==================================================================================
+ -->
+ <target
+ name="unpackUpdateJarsAndCreateZippedPackages"
+ depends="init">
+ <!--
+ ==================================================================================
+ 1. make "backup" copy of original zip, if debugging, since
+ might be needed for comparison
+ ==================================================================================
+ -->
+ <antcall
+ target="makeBackupCopyForDebugging"/>
+ <!--
+ add pack.properties file that specifies effort level, and
+ files not to sign We don't have to do this if not
+ normalizing and not signing
+ -->
+ <antcall
+ target="updatePackPropertiesFile"/>
+ <!--
+ ==================================================================================
+ 2. normalize jars here, from a zip file of update jars. The
+ normalized jars are put in zip file of same name, in a
+ directory named normalized
+ ==================================================================================
+ -->
+ <echo
+ level="info"
+ message="normalize jars if desired ..."/>
+ <antcall
+ target="normalizeJarFiles"/>
+ <echo
+ level="info"
+ message="normalized jars: ${normalizeJarFiles}"/>
+ <!--
+ ==================================================================================
+ 3. sign the jars in archive file, if desired
+ ==================================================================================
+ -->
+ <ant
+ antfile="${wtp.builder.home}/scripts/build/signjars.xml"/>
+ <!--
+ ==================================================================================
+ 4. unzip the normalized jars in the zip file produced in
+ step 1., to the directory {tmpsite} for further processing.
+ plugins and features end up in {tmpsite}/eclipse
+ ==================================================================================
+ -->
+ <echo
+ level="info"
+ message="unzip normalized update jars to a holding place"/>
+ <echo
+ level="info"
+ message="tmpsite: ${tmpsite}"/>
+ <echo
+ level="info"
+ message="archiveDir: ${archiveDir}"/>
+ <echo
+ level="info"
+ message="archiveName: ${archiveName}"/>
+ <unzip
+ dest="${tmpsite}"
+ src="${archiveDir}/${archiveName}"/>
+ <!--
+ ==================================================================================
+ 5. copy all update jars to a common update site directory,
+ if desired. Note: overwite is false to avoid "touching"
+ files already produced and processed by previous steps in a
+ larger build process. This means the repository *must* be
+ completely clean before the larger process starts.
+ ==================================================================================
+ -->
+ <antcall
+ target="makeCopyForUpdate"/>
+ <!--
+ ==================================================================================
+ 6. for modularity, pack200 is done here, optionally. The
+ resulting gz files are produced in update site directory.
+ This is optional since processing is expensive to do for
+ every build. Only need when ready to declare an update site,
+ and, for exmaple, no need to do for "local" or HEAD builds
+ since developers wouldn't normally need it for a quick check
+ of a build.
+ ==================================================================================
+ -->
+ <echo
+ level="info"
+ message="create pack files if desired ..."/>
+ <antcall
+ target="createPackFilesIfDesired"/>
+ <echo
+ level="info"
+ message="created pack files: ${packJarFiles}"/>
+ <!--
+ 7. create a site.xml file, by merging a template site.xml
+ with the feature versions produced by PDE build
+ -->
+ <antcall
+ target="createSiteFiles"/>
+
+ <!-- 8. now generate P2 meta data for that P2 repo -->
+ <echo
+ level="info"
+ message="Generating p2 metadata for P2 repo."/>
+ <antcall
+ target="generateP2Metadata"/>
+ <!--
+ ==================================================================================
+ 9. now create traditional zip file of unpacked jars. This
+ type of "unpack" is not related to pack200, but instead
+ means to unpack those jars that are supposed to be unpacked
+ based on feature defintion, if the plugin's unpack attribute
+ is set to true in the feature
+ ==================================================================================
+ -->
+ <!-- use releng task of unpackUpdateJars -->
+ <unpackUpdateJars
+ site="${tmpsite}/eclipse"
+ output="${tmpsite}/unpacked/eclipse"/>
+ <!--
+ add copy of legal doc's here, product.ini, etc., before
+ re-zipping
+ -->
+ <copy
+ todir="${tmpsite}/unpacked/eclipse"
+ overwrite="false">
+ <fileset
+ dir="${wtp.builder.home}/rootfiles">
+ </fileset>
+ </copy>
+ <!--
+ delete the zip file of update jars we started with, which we
+ are about to re-create as traditional zip file
+ -->
+ <delete
+ file="${buildDirectory}/${buildLabel}/${archiveName}"/>
+ <mkdir
+ dir="${buildDirectory}/${buildLabel}"/>
+ <!--
+ recreate zip file now, same name, traditional content, which
+ is mix of folders and jars
+ -->
+
+ <zip
+ destfile="${buildDirectory}/${buildLabel}/${archiveName}"
+ basedir="${tmpsite}/unpacked"
+ update="false"
+ duplicate="preserve"/>
+ <!-- always produce checksum files for any zips produced -->
+ <antcall
+ target="createChecksums"/>
+ <!--
+ ==================================================================================
+ 10. can now remove tmpsite as no longer needed, unless
+ debugging
+ ==================================================================================
+ -->
+ <antcall
+ target="deleteTmpSite"/>
+ </target>
+ <!--
+ ==============================================================================================
+ Utility and Helper tasks
+ ==============================================================================================
+ -->
+ <target
+ name="init"
+ depends="check.sign">
+ <condition
+ property="verboseIfDebug"
+ value="-verbose"
+ else="">
+ <istrue
+ value="${debugOptimization}"/>
+ </condition>
+ <condition
+ property="logIfDebug"
+ value="-debug -consolelog"
+ else="">
+ <istrue
+ value="${debugOptimization}"/>
+ </condition>
+ <condition
+ property="keepIfDebug"
+ value="true">
+ <istrue
+ value="${debugOptimization}"/>
+ </condition>
+ <!-- don't normalize if signing, since then it's done by signing -->
+ <condition
+ property="doNormalize"
+ value="true">
+ <and>
+ <istrue
+ value="${normalizeJarFiles}"/>
+ <not>
+ <equals
+ arg1="${doSign}"
+ arg2="true"
+ trim="true"
+ casesensitive="false"/>
+ </not>
+ </and>
+ </condition>
+ <condition
+ property="doPack"
+ value="true">
+ <and>
+ <istrue
+ value="${packJarFiles}"/>
+ <istrue
+ value="${createP2repo}"/>
+ <and>
+ <or>
+ <istrue
+ value="${normalizeJarFiles}"/>
+ <istrue
+ value="${doSign}"/>
+ </or>
+ </and>
+ </and>
+ </condition>
+ <condition
+ property="excludeFromRepoZip"
+ value="site.xml">
+ <isfalse
+ value="${doPack}"/>
+ </condition>
+ <condition
+ property="excludeFromRepoZip"
+ value="site.xml,plugins/*.jar,features/*.jar">
+ <istrue
+ value="${doPack}"/>
+ </condition>
+ <condition
+ property="archiveDir"
+ value="${tmpsite}/normalized">
+ <istrue
+ value="${doPack}"/>
+ </condition>
+ <condition
+ property="archiveDir"
+ value="${buildDirectory}/${buildLabel}">
+ <isfalse
+ value="${doPack}"/>
+ </condition>
+ <condition
+ property="doP2Repo"
+ value="true">
+ <available
+ file="${buildDirectory}/maps/webtools.maps/releng/sitefile/site.xml"/>
+ </condition>
+ <!-- echo important values, so it's documneted in build logs -->
+ <echo
+ message="doPack: ${doPack}"/>
+ <echo
+ message="packJarFiles: ${packJarFiles}"/>
+ <echo
+ message="normalizeJarFiles: ${normalizeJarFiles}"/>
+ <echo
+ message="doSign: ${doSign}"/>
+ <echo
+ message="doNormalize: ${doNormalize}"/>
+ <echo
+ message="doP2Repo: ${doP2Repo}"/>
+ </target>
+ <target
+ name="deleteTmpSite"
+ unless="keepIfDebug">
+ <delete
+ dir="${tmpsite}"/>
+ </target>
+ <target
+ name="normalizeJarFiles"
+ if="doNormalize"
+ depends="init">
+ <!--
+ stick with JAVA5 for signing/packing for now ... I've heard
+ rumors of some 'compatibility' issues with JAVA6?
+ -->
+ <echo
+ message="Starting normalizeJarFiles"/>
+ <echo
+ message="archiveDir: ${archiveDir}"/>
+ <java
+ jar="${eclipse.launcher}"
+ fork="true"
+ jvm="${env.JAVA_5_HOME}/bin/java"
+ failonerror="true"
+ maxmemory="512m"
+ dir="${buildDirectory}">
+ <jvmarg
+ value="-Djava.io.tmpdir=${env.RECOMMENDED_TMP_DIR}"/>
+ <arg
+ line="${logIfDebug}"/>
+ <arg
+ line="-application org.eclipse.update.core.siteOptimizer"/>
+ <!--
+ note: this -processAll option is critical in this first
+ step. For various reasons, jarProcessor is written to
+ not act on any jar if the jar is not "marked", or if not
+ told explicitly to to processAll. There are ways where
+ not all are literally processed, such as using
+ pack.properties (and others, see
+ http://wiki.eclipse.org/JarProcessor_Options).
+ -->
+ <arg
+ line="-jarProcessor ${verboseIfDebug} -processAll -outputDir ${archiveDir} -repack ${buildDirectory}/${buildLabel}/${archiveName}"/>
+ </java>
+ </target>
+ <target
+ name="createPackFilesIfDesired"
+ if="doPack"
+ depends="init">
+ <!--
+ stick with JAVA5 for signing/packing for now ... I've heard
+ rumors of some 'compatibility' issues with JAVA6?
+ -->
+ <!--
+ <java
+ jar="${pde.builder.path}/plugins/org.eclipse.equinox.launcher.jar"
+ fork="true" jvm="${env.JAVA_5_HOME}/bin/java"
+ failonerror="true" maxmemory="512m" dir="${buildDirectory}">
+ <jvmarg
+ value="-Djava.io.tmpdir=${env.RECOMMENDED_TMP_DIR}"/> <arg
+ line="${logIfDebug}"/> <arg line="-application
+ org.eclipse.update.core.siteOptimizer"/> <arg
+ line="-jarProcessor ${verboseIfDebug} -outputDir
+ ${buildDirectory}/${buildLabel}/repository -pack
+ ${buildDirectory}/${buildLabel}/repository"/> </java>
+ -->
+ <java
+ jar="${pde.builder.path}/plugins/org.eclipse.equinox.launcher.jar"
+ fork="true"
+ jvm="${env.JAVA_5_HOME}/bin/java"
+ failonerror="true"
+ maxmemory="512m"
+ dir="${buildDirectory}">
+ <jvmarg
+ value="-Djava.io.tmpdir=${env.RECOMMENDED_TMP_DIR}"/>
+ <arg
+ line="${logIfDebug}"/>
+ <arg
+ line="-application org.eclipse.update.core.siteOptimizer"/>
+ <arg
+ line="-jarProcessor ${verboseIfDebug} -outputDir ${buildDirectory}/${buildLabel}/${component}/repository -pack ${buildDirectory}/${buildLabel}/${component}/repository"/>
+ </java>
+ </target>
+ <!--
+ always make copy, since normally either normalized, or signed
+ (and normalized) TODO: (minor) tiny improvement in efficiency
+ could be made, for N-builds?, that are neither normalized nor
+ signed.
+ -->
+ <target
+ name="makeCopyForUpdate">
+ <mkdir
+ dir="${buildDirectory}/${buildLabel}/repository"/>
+ <copy
+ todir="${buildDirectory}/${buildLabel}/repository"
+ overwrite="false">
+ <fileset
+ dir="${tmpsite}/eclipse">
+ </fileset>
+ </copy>
+ <mkdir
+ dir="${buildDirectory}/${buildLabel}/${component}/repository"/>
+ <copy
+ todir="${buildDirectory}/${buildLabel}/${component}/repository"
+ overwrite="false">
+ <fileset
+ dir="${tmpsite}/eclipse">
+ </fileset>
+ </copy>
+ </target>
+ <target
+ name="makeBackupCopyForDebugging"
+ if="keepIfDebug">
+ <!--
+ temporary copy while confirming build to be able to do
+ side-by-side comparisons
+ -->
+ <mkdir
+ dir="${buildDirectory}/backuporiginalzips"/>
+ <copy
+ file="${buildDirectory}/${buildLabel}/${archiveName}"
+ todir="${buildDirectory}/backuporiginalzips"/>
+ </target>
+ <target
+ name="createChecksums">
+ <!--
+ This createChecksums task creates two files, for use in two
+ contexts. a. an x.md5 file, that has the name of the file in
+ the contents. This is good for some "third party"
+ executables, like md5summ, that expects the name in the
+ file. b. since ant does not deal well with md5 files with
+ anything in them other than the checksum, we provide same
+ thing in a file with an md5antformat extension, that has
+ only the checksum.
+ -->
+ <mkdir
+ dir="${buildDirectory}/${buildLabel}/checksum"/>
+ <checksum
+ file="${buildDirectory}/${buildLabel}/${archiveName}"
+ property="md5"/>
+ <echo
+ message="${md5} *${archiveName}"
+ file="${buildDirectory}/${buildLabel}/checksum/${archiveName}.md5"/>
+ <echo
+ message="${md5}"
+ file="${buildDirectory}/${buildLabel}/checksum/${archiveName}.md5antformat"/>
+ </target>
+ <target
+ name="check.sign">
+ <echo
+ message="sign: ${sign}"/>
+ <echo
+ message="env skip jar signing: ${env.SKIP_JAR_SIGNING}"/>
+ <echo
+ message="skip jar signing: ${SKIP_JAR_SIGNING}"/>
+ <condition
+ property="doSign">
+ <and>
+ <equals
+ arg1="${sign}"
+ arg2="true"
+ trim="true"
+ casesensitive="false"/>
+ <not>
+ <equals
+ arg1="${env.SKIP_JAR_SIGNING}"
+ arg2="true"
+ trim="true"
+ casesensitive="false"/>
+ </not>
+ <not>
+ <equals
+ arg1="${SKIP_JAR_SIGNING}"
+ arg2="true"
+ trim="true"
+ casesensitive="false"/>
+ </not>
+ </and>
+ </condition>
+ <echo
+ message="doSign: ${doSign}"/>
+ </target>
+
+ <!-- Call the p2 metadata generator on the update site. -->
+ <!-- TODO: do we need to pack200 files first? (create gz files?) -->
+ <target
+ name="generateP2Metadata"
+ depends="init"
+ if="doP2Repo">
+
+
+ <!-- 1. Generate the P2 metadata -->
+ <!--
+ initial generation now hanlded by
+ p2.gathering=true
+ in build.properties
+ -->
+ <!--
+ TODO: should "merge" component repos into main one here?
+ -->
+ <!--
+ 2. Create zip of P2 repo. Note we put it in
+ 'repoBaseLocation' for use by subsequent build steps TODO:
+ investigate a location outside a per-build location
+ -->
+ <mkdir
+ dir="${buildDirectory}/${buildLabel}/repos"/>
+ <zip
+ destfile="${buildDirectory}/${buildLabel}/repos/${component}-buildrepo-${buildLabel}.zip"
+ basedir="${buildDirectory}/${buildLabel}/${component}/repository/"
+ excludes="${excludeFromRepoZip}"
+ update="yes"
+ duplicate="preserve">
+ </zip>
+ <!--
+ <zip
+ destfile="${buildDirectory}/${buildLabel}/repos/${build.distribution}-buildrepo-${buildLabel}.zip"
+ basedir="${buildDirectory}/${buildLabel}/repository/"
+ excludes="${excludeFromRepoZip}" update="yes"
+ duplicate="preserve"> </zip>
+ -->
+ <!--
+ 3. generate maps each step TODO: avoid double processing by
+ changing task so that if file exists, append to it
+ -->
+ <generateMapFiles
+ buildlabel="${buildLabel}"
+ inputFilePluginVersions="${buildDirectory}/finalPluginsVersions.properties"
+ inputFileFeatureVersions="${buildDirectory}/finalFeaturesVersions.properties"
+ p2MapFile="${buildDirectory}/${buildLabel}/Web-Tools-Platform-${buildLabel}.p2.map"
+ p2Repository="http://build.eclipse.org/webtools/committers/${projectname}/${buildLabel}/repository"/>
+ </target>
+ <target
+ name="createSiteFiles"
+ depends="init"
+ if="doP2Repo">
+ <property
+ name="sitexmlfile"
+ value="${buildDirectory}/maps/webtools.maps/releng/sitefile/site.xml"/>
+ <property
+ file="${buildDirectory}/finalFeaturesVersions.properties"/>
+ <loadfile
+ property="sitefiletext"
+ srcFile="${sitexmlfile}">
+ <filterchain>
+ <expandproperties/>
+ </filterchain>
+ </loadfile>
+ <echo
+ message="${sitefiletext}"
+ file="${buildDirectory}/${buildLabel}/repository/site.xml"/>
+ <echo
+ message="${sitefiletext}"
+ file="${buildDirectory}/${buildLabel}/${component}/repository/site.xml"/>
+ </target>
+ <target
+ name="updatePackPropertiesFile"
+ if="doNormalize">
+ <updatePackProperties
+ archiveFilename="${buildDirectory}/${buildLabel}/${archiveName}"/>
+ </target>
+ <target
+ name="nodefault">
+ <echo
+ level="error"
+ message="There is no default target for this buildutililites.xml ant script."/>
+ </target>
+</project>
\ No newline at end of file