### Eclipse Workspace Patch 1.0 #P org.eclipse.pde.build Index: templates/package-build/prepare-build-dir.sh =================================================================== RCS file: templates/package-build/prepare-build-dir.sh diff -N templates/package-build/prepare-build-dir.sh --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ templates/package-build/prepare-build-dir.sh 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,96 @@ +#!/bin/sh + +if [ $# -lt 2 ]; then + echo "usage: $0 <path to source dir> <path to build dir>" + exit 1 +fi + +if [ ! -d $1 ]; then + echo "usage: $0 <path to source dir> <path to build dir>" + exit 1 +fi + +SOURCEDIR=$1 +BUILDDIR=$2 +TESTING=$3 + +echo "preparing files in $1 for buildfile generation ..." +mkdir -p $BUILDDIR + +# make some ant build files to extract the id from the feature.xml, plugin.xml or the fragment.xml +mkdir -p $BUILDDIR/tmp +BUILDFILE=$BUILDDIR/tmp/build.xml + +echo "<project default=\"main\"> + <target name=\"main\"> + <xmlproperty file=\"@type@.xml\" collapseAttributes=\"true\"/> + <fail unless=\"@type@.id\" message=\"feature.id not set\"/> + <echo message=\"\${@type@.id}\" /> + </target> +</project>" > $BUILDFILE + +for type in feature plugin fragment; do + CURBUILDFILE=$BUILDDIR/tmp/$type-build.xml + cat $BUILDFILE | sed "s|@type@|$type|" > $CURBUILDFILE +done + +# make the directories eclipse is expecting +echo " making the 'features' and 'plugins' directories" +mkdir -p $BUILDDIR/features $BUILDDIR/plugins + +# make symlinks for the features +FEATURES=$(find $SOURCEDIR -name feature.xml) +find $SOURCEDIR -name feature.xml | while read f; do + PROJECTDIR=$(dirname "$f") + PROJECTNAME=$(ant -Dbasedir="$PROJECTDIR" -f $BUILDDIR/tmp/feature-build.xml 2>&1 | grep echo | cut --delimiter=' ' -f 7) + ERROR="" + if [ -z "$PROJECTNAME" ]; then + echo "ERROR: could not determine the feature id for $PROJECTDIR" + if [ $TESTING != true ]; then + exit 1 + else + ERROR="yes" + fi + fi + + if [ "x$ERROR" != "xyes" ]; then + if [[ $TESTING != true || `echo $PROJECTNAME | grep "org.eclipse"` ]]; then + echo " making symlink: $BUILDDIR/features/$PROJECTNAME -> $PROJECTDIR" + ln -sf "$PROJECTDIR" $BUILDDIR/features/"$PROJECTNAME" + fi + fi +done + +# make symlinks for plugins and fragments +PLUGINDIRS=$(find $SOURCEDIR -name plugin.xml -o -name fragment.xml -o -name MANIFEST.MF | sed "s/plugin.xml//g" | sed "s/fragment.xml//g" | sed "s/META-INF\/MANIFEST.MF//" | sort | uniq) +find $SOURCEDIR -name plugin.xml -o -name fragment.xml -o -name MANIFEST.MF | sed "s/plugin.xml//g" | sed "s/fragment.xml//g" | sed "s/META-INF\/MANIFEST.MF//" | sort | uniq | while read dir; do + PROJECTNAME="" + ERROR="" + if [ -e "$dir/META-INF/MANIFEST.MF" ]; then + PROJECTNAME=$(grep Bundle-SymbolicName $dir/META-INF/MANIFEST.MF | cut --delimiter=';' -f 1 | cut --delimiter=' ' -f 2) + elif [ -e "$dir/plugin.xml" ]; then + PROJECTNAME=$(ant -Dbasedir=$dir -f $BUILDDIR/tmp/plugin-build.xml 2>&1 | grep echo | cut --delimiter=' ' -f 7) + elif [ -e "$dir/fragment.xml" ]; then + PROJECTNAME=$(ant -Dbasedir=$dir -f $BUILDDIR/tmp/fragment-build.xml 2>&1 | grep echo | cut --delimiter=' ' -f 7) + fi + + if [ -z "$PROJECTNAME" ]; then + echo "ERROR: could not determine the plugin or fragment id for $dir" + if [ $TESTING != true ]; then + exit 1 + else + ERROR="yes" + fi + fi + + if [ "x$ERROR" != "xyes" ]; then + if [[ $TESTING != true || `echo $PROJECTNAME | grep "org.eclipse"` ]]; then + echo " making symlink: $BUILDDIR/plugins/$PROJECTNAME -> $dir" + ln -sf $dir $BUILDDIR/plugins/"$PROJECTNAME" + fi + fi; + +done + +rm -rf $BUILDDIR/tmp +echo done Index: templates/package-build/customTargets-assemble-target.xml =================================================================== RCS file: templates/package-build/customTargets-assemble-target.xml diff -N templates/package-build/customTargets-assemble-target.xml --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ templates/package-build/customTargets-assemble-target.xml 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,12 @@ +<project> + <!-- ===================================================================== --> + <!-- Targets to assemble the built elements for particular configurations --> + <!-- These generally call the generated assemble scripts (named in --> + <!-- ${assembleScriptName}) but may also add pre and post processing --> + <!-- Add one target for each root element and each configuration --> + <!-- ===================================================================== --> + + <target name="assemble.@id@"> + <ant antfile="${assembleScriptName}" dir="${buildDirectory}"/> + </target> +</project> Index: templates/package-build/customTargets.xml =================================================================== RCS file: templates/package-build/customTargets.xml diff -N templates/package-build/customTargets.xml --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ templates/package-build/customTargets.xml 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,147 @@ +<project name="Build specific targets and properties" default="noDefault"> + + <fail unless="type" message="Please set the ${type} property to 'feature', 'plugin' or 'fragment'." /> + <fail unless="id" message="Please set the ${id} property to the feature, plugin or fragment id of the plugin you are building." /> + <fail unless="sourceDirectory" message="Please set the ${sourceDirectory} property to the directory that has the source plugins." /> + + <!-- we need to do this because you can't expand variables in target names --> + <copy file="${builder}/customTargets-assemble-target.xml" tofile="${buildDirectory}/customTargets-${id}-assemble-target.xml" /> + <replace file="${buildDirectory}/customTargets-${id}-assemble-target.xml" token="@id@" value="${id}" /> + <import file="${buildDirectory}/customTargets-${id}-assemble-target.xml" /> + + <!-- ===================================================================== --> + <!-- Run a given ${target} on all elements being built --> + <!-- Add on <ant> task for each top level element being built. --> + <!-- ===================================================================== --> + <target name="allElements"> + <ant antfile="${genericTargets}" target="${target}"> + <property name="type" value="${type}" /> + <property name="id" value="${id}" /> + </ant> + </target> + + + <!-- ===================================================================== --> + <!-- Check out map files from correct repository --> + <!-- ===================================================================== --> + <target name="getMapFiles"> + </target> + + <!-- ===================================================================== --> + + <target name="clean" unless="noclean"> + <antcall target="allElements"> + <param name="target" value="cleanElement" /> + </antcall> + </target> + + <!-- ===================================================================== --> + <!-- Steps to do before setup --> + <!-- ===================================================================== --> + <target name="preSetup"> + </target> + + <!-- ===================================================================== --> + <!-- Steps to do after setup but before starting the build proper --> + <!-- ===================================================================== --> + <target name="postSetup"> + </target> + + <!-- ===================================================================== --> + <!-- Steps to do before fetching the build elements --> + <!-- ===================================================================== --> + <target name="preFetch"> + </target> + + <!-- ===================================================================== --> + <!-- Steps to do after fetching the build elements --> + <!-- ===================================================================== --> + <target name="postFetch"> + </target> + + <!-- ===================================================================== --> + <!-- Steps to do before generating the build scripts. --> + <!-- ===================================================================== --> + <target name="preGenerate"> + <!-- Eclipse expects the feature projects to be in the 'features' directory and + plugin projects to be in the 'plugins' directory. The build infrastructure + normally arranges the projects during the fetch stage. Since we aren't doing + the fetch stage, we have to manually arrange the files --> + <exec dir="${builder}" executable="/bin/sh"> + <arg line="prepare-build-dir.sh ${sourceDirectory} ${buildDirectory} ${testing}" /> + </exec> + <exec dir="${builder}" executable="/bin/sh"> + <arg line="symlink-deps.sh ${buildDirectory} ${orbitDepsDir}" /> + </exec> + + </target> + + <!-- ===================================================================== --> + <!-- Steps to do after generating the build scripts. --> + <!-- ===================================================================== --> + <target name="postGenerate"> + <antcall target="clean" /> + </target> + + <!-- ===================================================================== --> + <!-- Steps to do before running the build.xmls for the elements being built. --> + <!-- ===================================================================== --> + <target name="preProcess"> + </target> + + <!-- ===================================================================== --> + <!-- Steps to do after running the build.xmls for the elements being built. --> + <!-- ===================================================================== --> + <target name="postProcess"> + </target> + + <!-- ===================================================================== --> + <!-- Steps to do before running assemble. --> + <!-- ===================================================================== --> + <target name="preAssemble"> + </target> + + <!-- ===================================================================== --> + <!-- Steps to do after running assemble. --> + <!-- ===================================================================== --> + <target name="postAssemble"> + </target> + + <!-- ===================================================================== --> + <!-- Steps to do before running package. --> + <!-- ===================================================================== --> + <target name="prePackage"> + </target> + + <!-- ===================================================================== --> + <!-- Steps to do after running package. --> + <!-- ===================================================================== --> + <target name="postPackage"> + </target> + + <!-- ===================================================================== --> + <!-- Steps to do after the build is done. --> + <!-- ===================================================================== --> + <target name="postBuild"> + </target> + + <!-- ===================================================================== --> + <!-- Steps to do to test the build results --> + <!-- ===================================================================== --> + <target name="test"> + </target> + + <!-- ===================================================================== --> + <!-- Steps to do to publish the build results --> + <!-- ===================================================================== --> + <target name="publish"> + </target> + + <!-- ===================================================================== --> + <!-- Default target --> + <!-- ===================================================================== --> + <target name="noDefault"> + <echo message="You must specify a target when invoking this file" /> + </target> + +</project> Index: templates/package-build/build.properties =================================================================== RCS file: templates/package-build/build.properties diff -N templates/package-build/build.properties --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ templates/package-build/build.properties 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,12 @@ +buildDirectory=${sourceDirectory}/build +buildLabel=rpmBuild +archivePrefix=eclipse +skipFetch=true +javacFailOnError=true +collectingFolder=eclipse +archivesFormat=*,*,*-zip +zipargs=-y +javacDebugInfo=true +archiveName=${id}.zip +runPackager=false +baseLocation=/usr/share/eclipse Index: templates/package-build/symlink-deps.sh =================================================================== RCS file: templates/package-build/symlink-deps.sh diff -N templates/package-build/symlink-deps.sh --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ templates/package-build/symlink-deps.sh 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,21 @@ +#!/bin/sh -x + +if [ $# -ne 2 ]; then + echo "usage: $0 <path to build dir> <dependencies>" + exit 1 +fi + +if [ ! -d $1 ]; then + echo "usage: $0 <path to build dir> <dependencies>" + exit 1 +fi + +BUILDDIR=$1 +DEPENDENCIESDIR=$2 + +pushd $BUILDDIR/plugins + for dep in `ls $DEPENDENCIESDIR`; do + echo "ln -s $DEPENDENCIESDIR/$dep" + ln -s $DEPENDENCIESDIR/$dep + done +popd