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