Andrew Overholt 5799696
#!/bin/bash
Andrew Overholt 5799696
Andrew Overholt 1fcf3f0
# args:  [-f <feature>] [-d <dependencies (outside SDK)>] [-a <additional build args>] [-j <JVM args>] [-v] [-D] [-o <Orbit dependencies>]
Andrew Overholt 5799696
Andrew Overholt 5799696
function usage {
Andrew Overholt 5799696
cat << _EOF_
Andrew Overholt 5799696
usage: $0 [<options>]
Andrew Overholt 5799696
Andrew Overholt 5799696
Use PDE Build to build Eclipse features
Andrew Overholt 5799696
Andrew Overholt 5799696
Optional arguments:
Andrew Overholt 5799696
   -h      Show this help message
Andrew Overholt 5799696
   -f      Feature ID to build
Andrew Overholt 5799696
   -d      Plugin dependencies in addition to Eclipse SDK
Andrew Overholt 5799696
           (space-separated, names on which to glob features and plugins)
Andrew Overholt 5799696
   -a      Additional build arguments (ex. -DjavacSource=1.5)
Andrew Overholt 5799696
   -j      VM arguments (ex. -DJ2SE-1.5=%{_jvmdir}/java/jre/lib/rt.jar)
Andrew Overholt 5799696
   -v      Be verbose
Andrew Overholt 5799696
   -D      Debug platform itself (passes -consolelog -debug to Eclipse)
Andrew Overholt e2adc12
   -o      Directory containing Orbit-style dependencies
Andrew Overholt 18fb930
   -z      Comma-delimited list of dependency zips (not for use during RPM build)
Andrew Overholt 5799696
_EOF_
Andrew Overholt 5799696
}
Andrew Overholt 5799696
Andrew Overholt 5799696
function copyPlatform {
Andrew Overholt 5799696
    # This seems silly but I was running into issues with empty strings
Andrew Overholt 5799696
    # counting as arguments to copy-platform -- overholt, 2008-03
Andrew Overholt 1fcf3f0
    if [ -z "$dependencies" ]; then
Andrew Overholt 5799696
        if [ $verbose -eq 1 ]; then
Andrew Overholt 5799696
            echo "/bin/sh -x $datadir/eclipse/buildscripts/copy-platform $SDK $datadir/eclipse"
Andrew Overholt 5799696
            /bin/sh -x $datadir/eclipse/buildscripts/copy-platform $SDK $datadir/eclipse
Andrew Overholt 5799696
        else
Andrew Overholt 5799696
            echo "/bin/sh $datadir/eclipse/buildscripts/copy-platform $SDK $datadir/eclipse"
Andrew Overholt 5799696
            /bin/sh $datadir/eclipse/buildscripts/copy-platform $SDK $datadir/eclipse
Andrew Overholt 5799696
        fi
Andrew Overholt 5799696
    else
Andrew Overholt 5799696
        if [ $verbose -eq 1 ]; then
Andrew Overholt 5799696
            echo "/bin/sh -x $datadir/eclipse/buildscripts/copy-platform $SDK $datadir/eclipse $dependencies"
Andrew Overholt 5799696
            /bin/sh -x $datadir/eclipse/buildscripts/copy-platform $SDK $datadir/eclipse $dependencies
Andrew Overholt 5799696
        else
Andrew Overholt 5799696
            echo "/bin/sh $datadir/eclipse/buildscripts/copy-platform $SDK $datadir/eclipse $dependencies"
Andrew Overholt 5799696
            /bin/sh $datadir/eclipse/buildscripts/copy-platform $SDK $datadir/eclipse $dependencies
Andrew Overholt 5799696
        fi
Andrew Overholt 5799696
    fi
Andrew Overholt 5799696
}
Andrew Overholt 5799696
Andrew Overholt 5799696
function findFeatureId {
Andrew Overholt 5799696
    # We can determine the feature ID if we have only one
Andrew Overholt 5799696
    numFeatures=$(find $sourceDir -name feature.xml | wc -l)
Andrew Overholt 5799696
    if [ $numFeatures -ne 1 ]; then
Andrew Overholt 5799696
        #echo "# features found = $numFeatures"
Andrew Overholt 5799696
        echo "Cannot determine feature ID.  Please specify with -f."
Andrew Overholt 5799696
        usage
Andrew Overholt 5799696
        exit 1
Andrew Overholt 5799696
    fi
Andrew Overholt 5799696
    
Andrew Overholt 5799696
    featureXml=$(find $sourceDir -name feature.xml)
Andrew Overholt 5799696
    
Andrew Overholt 5799696
    # Taken from Ben Konrath's package-build
Andrew Overholt 5799696
    # make an ant build files to extract the id from the feature.xml
Andrew Overholt 5799696
    buildFile=$buildDir/findFeatureForRPM-tmp-build.xml
Andrew Overholt 5799696
    
Andrew Overholt 5799696
    echo "<project default=\"main\">
Andrew Overholt 5799696
    	<target name=\"main\">
Andrew Overholt 5799696
                   	<xmlproperty file=\"$featureXml\" collapseAttributes=\"true\"/>
Andrew Overholt 5799696
    		<fail unless=\"feature.id\" message=\"feature.id not set\"/>
Andrew Overholt 5799696
                   	<echo message=\"\${feature.id}\" />
Andrew Overholt 5799696
            </target>
Andrew Overholt 5799696
    </project>" > $buildFile
Andrew Overholt 5799696
    
Andrew Overholt 5799696
    featureId=$(ant -Dbasedir=$sourceDir -f $buildFile 2>&1 | grep echo | cut --delimiter=' ' -f 7)
Andrew Overholt 5799696
    rm $buildFile
Andrew Overholt 5799696
}
Andrew Overholt 5799696
Andrew Overholt 8fa0c06
function findFeatureNameAndVersion {
Andrew Overholt 8fa0c06
    featureXml=$(find $sourceDir -name feature.xml | while read f; do grep -l id=\"$featureId\" $f; done)
Andrew Overholt 8fa0c06
    
Andrew Overholt 8fa0c06
    buildFile=$buildDir/findFeatureForRPM-tmp-build.xml
Andrew Overholt 8fa0c06
    
Andrew Overholt 8fa0c06
    echo "<project default=\"main\">
Andrew Overholt 8fa0c06
    	<target name=\"main\">
Andrew Overholt 8fa0c06
                   	<xmlproperty file=\"$featureXml\" collapseAttributes=\"true\"/>
Andrew Overholt 8fa0c06
    		<fail unless=\"feature.id\" message=\"feature.id not set\"/>
Andrew Overholt 8fa0c06
                   	<echo message=\"\${feature.label}\" />
Andrew Overholt 8fa0c06
            </target>
Andrew Overholt 8fa0c06
    </project>" > $buildFile
Andrew Overholt 8fa0c06
    
Andrew Overholt 8fa0c06
    featureName=$(ant -Dbasedir=$sourceDir -f $buildFile 2>&1 | grep echo | sed "s/.*\[echo\]\ //")
Andrew Overholt 8fa0c06
    rm $buildFile
Andrew Overholt 8fa0c06
Andrew Overholt 8fa0c06
    echo "<project default=\"main\">
Andrew Overholt 8fa0c06
    	<target name=\"main\">
Andrew Overholt 8fa0c06
                   	<xmlproperty file=\"$featureXml\" collapseAttributes=\"true\"/>
Andrew Overholt 8fa0c06
    		<fail unless=\"feature.id\" message=\"feature.id not set\"/>
Andrew Overholt 8fa0c06
                   	<echo message=\"\${feature.version}\" />
Andrew Overholt 8fa0c06
            </target>
Andrew Overholt 8fa0c06
    </project>" > $buildFile
Andrew Overholt 8fa0c06
    
Andrew Overholt 8fa0c06
    featureVersion=$(ant -Dbasedir=$sourceDir -f $buildFile 2>&1 | grep echo | sed "s/.*\[echo\]\ //")
Andrew Overholt 8fa0c06
    rm $buildFile
Andrew Overholt 8fa0c06
}
f2ed904
f2ed904
function findMaxBREE {
f2ed904
	manifests=$(find $sourceDir -name MANIFEST.MF)
f2ed904
	maxBree=1.4
f2ed904
	for i in $manifests; do
f2ed904
		breeLine=$(cat $i|grep RequiredExecutionEnvironment|cut -c37-|sed 's/^ *\(.*\) *$/\1/')
f2ed904
		case $breeLine in
f2ed904
         "J2SE-1.5")
f2ed904
         	 bree=1.5
f2ed904
             ;;
f2ed904
         "JavaSE-1.6")
f2ed904
         	 bree=1.6
f2ed904
             ;;
f2ed904
     	esac
f2ed904
     	if [ "$bree" \> "$maxBree" ]; then
f2ed904
     		maxBree=$bree
f2ed904
     	fi
f2ed904
    done
f2ed904
}
f2ed904
Andrew Overholt 5799696
sourceDir=$PWD
Andrew Overholt 5799696
buildDir=$PWD/build
Andrew Overholt 5799696
SDK=$buildDir/SDK
Andrew Overholt 5799696
homeDir=$buildDir/home
Andrew Overholt 1fcf3f0
datadir=`rpm --eval "%{_libdir}"`
Andrew Overholt df2c916
pdeBuildDir=$datadir/eclipse/dropins/sdk/plugins/org.eclipse.pde.build_@PDEBUILDVERSION@
Andrew Overholt 5799696
Andrew Overholt 5799696
featureId=
Andrew Overholt 5799696
dependencies=
Andrew Overholt 5799696
additionalArgs=
Andrew Overholt 5799696
vmArgs=
Andrew Overholt 5799696
verbose=0
Andrew Overholt 5799696
dryRun=0
Andrew Overholt 5799696
debugPlatform=0
Andrew Overholt 1fcf3f0
orbitDepsDir=
Andrew Overholt 465153c
p2Generate=
Andrew Overholt 465153c
testing=false
Andrew Overholt 18fb930
zipDeps=
Andrew Overholt 5799696
Andrew Overholt 5799696
# See above.  r = dry run (used for testing)
Andrew Overholt 18fb930
while getopts “hf:d:z:a:j:tvrDo:” OPTION
Andrew Overholt 5799696
do
Andrew Overholt 5799696
     case $OPTION in
Andrew Overholt 5799696
         h)
Andrew Overholt 5799696
             usage
Andrew Overholt 5799696
             exit
Andrew Overholt 5799696
             ;;
Andrew Overholt 5799696
         f)
Andrew Overholt 5799696
             featureId=$OPTARG
Andrew Overholt 5799696
             ;;
Andrew Overholt 5799696
         d)
Andrew Overholt 5799696
             dependencies=$OPTARG
Andrew Overholt 5799696
             ;;
Andrew Overholt 5799696
         a)
Andrew Overholt 5799696
             additionalArgs=$OPTARG
Andrew Overholt 5799696
             ;;
Andrew Overholt 5799696
         j)
Andrew Overholt 5799696
             vmArgs=$OPTARG
Andrew Overholt 5799696
             ;;
Andrew Overholt 465153c
         t)
Andrew Overholt 465153c
             testing=true
Andrew Overholt 465153c
             ;;
Andrew Overholt 5799696
         v)
Andrew Overholt 5799696
             verbose=1
Andrew Overholt 5799696
             ;;
Andrew Overholt 5799696
         r)
Andrew Overholt 5799696
             dryRun=1
Andrew Overholt 5799696
             ;;
Andrew Overholt 5799696
         D)
Andrew Overholt 5799696
             debugPlatform=1
Andrew Overholt 5799696
             ;;
Andrew Overholt 1fcf3f0
         o)
Andrew Overholt 1fcf3f0
             orbitDepsDir=$OPTARG
Andrew Overholt 1fcf3f0
             ;;
Andrew Overholt 18fb930
         z)
Andrew Overholt 18fb930
             zipDeps=$OPTARG
Andrew Overholt 18fb930
             ;;
Andrew Overholt 5799696
         ?)
Andrew Overholt 5799696
             usage
Andrew Overholt 5799696
             exit
Andrew Overholt 5799696
             ;;
Andrew Overholt 5799696
     esac
Andrew Overholt 5799696
done
Andrew Overholt 5799696
Andrew Overholt 5799696
echo "mkdir -p $buildDir"
Andrew Overholt 5799696
if [ $dryRun -ne 1 ]; then
Andrew Overholt 5799696
    mkdir -p $buildDir
Andrew Overholt 5799696
fi
Andrew Overholt 5799696
Andrew Overholt 5799696
# Eclipse may try to write to the building user's home directory so we create a
Andrew Overholt 5799696
# temporary one for use by the build.
Andrew Overholt 5799696
echo "mkdir -p $homeDir"
Andrew Overholt 5799696
if [ $dryRun -ne 1 ]; then
Andrew Overholt 5799696
    mkdir -p $homeDir
Andrew Overholt 5799696
fi
Andrew Overholt 5799696
Andrew Overholt 5799696
if [ -z $featureId ]; then
Andrew Overholt 5799696
    findFeatureId
Andrew Overholt 5799696
fi
Andrew Overholt 5799696
Andrew Overholt 5799696
if [ -z $featureId ]; then
Andrew Overholt 5799696
    echo "Cannot determine feature ID.  Please specify with -f."
Andrew Overholt 5799696
    usage
Andrew Overholt 5799696
    exit 1
Andrew Overholt 5799696
fi
Andrew Overholt 5799696
Andrew Overholt 8fa0c06
findFeatureNameAndVersion
Andrew Overholt 8fa0c06
Andrew Overholt 5799696
echo "Building feature = $featureId."
Andrew Overholt 5799696
Andrew Overholt 5799696
if [ -z "$dependencies" ]; then
Andrew Overholt 5799696
    if [ $verbose -eq 1 ]; then
Andrew Overholt 5799696
        echo "Assuming no dependencies except Eclipse SDK."
Andrew Overholt 5799696
    fi
Andrew Overholt 5799696
fi
Andrew Overholt 5799696
Andrew Overholt 5799696
# Symlink the SDK and dependencies for build
Andrew Overholt 5799696
if [ -z "$dependencies" ]; then
Andrew Overholt 5799696
    echo "Symlinking SDK into $SDK directory."
Andrew Overholt 5799696
else
Andrew Overholt 5799696
    echo "Symlinking SDK and \"$dependencies\" into $SDK directory."
Andrew Overholt 5799696
fi
Andrew Overholt 5799696
if [ $dryRun -ne 1 ]; then
Andrew Overholt 5799696
    copyPlatform
Andrew Overholt 5799696
fi
Andrew Overholt 5799696
Andrew Overholt 5799696
if [ $debugPlatform -eq 1 ]; then
Andrew Overholt 5799696
    debugPlatformArgs="-debug -consolelog"
Andrew Overholt 5799696
fi
Andrew Overholt 5799696
Andrew Overholt e2adc12
if [ "x$orbitDepsDir" != "x" ]; then
Andrew Overholt e2adc12
    orbitDeps="-DorbitDepsDir=\"$orbitDepsDir\""
Andrew Overholt 465153c
fi
Andrew Overholt 465153c
Andrew Overholt 18fb930
if [ "x$zipDeps" != "x" ]; then
Andrew Overholt 18fb930
    OLD_IFS="$IFS"
Andrew Overholt 18fb930
    IFS=","
Andrew Overholt 18fb930
    zipDepsArray=($zipDeps)
Andrew Overholt 18fb930
    IFS="$OLD_IFS"
Andrew Overholt 18fb930
    numZips=${#zipDepsArray[@]}
Andrew Overholt 18fb930
    for (( i=0; i< $numZips; i++ )); do
Andrew Overholt 18fb930
        thisZip=${zipDepsArray[$i]}
Andrew Overholt 18fb930
        thisFile=$(basename $thisZip)
Andrew Overholt 18fb930
        thisURL=$(echo $thisZip | sed s/$thisFile//)
Andrew Overholt 18fb930
        if [ ! -e $thisFile ]; then
Andrew Overholt 18fb930
            wget -q $thisZip
Andrew Overholt 18fb930
        fi
Andrew Overholt 18fb930
        mkdir -p tmp
Andrew Overholt 18fb930
        unzip -q -o $thisFile -d tmp
Andrew Overholt 18fb930
        cp -raf tmp/eclipse/features/* $SDK/features
Andrew Overholt 18fb930
        cp -raf tmp/eclipse/plugins/* $SDK/plugins
Andrew Overholt 18fb930
        rm -rf tmp
Andrew Overholt 18fb930
        thisZip=
Andrew Overholt 18fb930
        thisFile=
Andrew Overholt 18fb930
        thisURL=
Andrew Overholt 18fb930
    done
Andrew Overholt 18fb930
fi
f2ed904
if [ -z "$additionalArgs" ]; then
f2ed904
	findMaxBREE
f2ed904
	additionalArgs="-DjavacSource=$maxBree -DjavacTarget=$maxBree"
f2ed904
fi
Andrew Overholt 18fb930
Andrew Overholt 5799696
echo "Starting build:"
Andrew Overholt 5799696
Andrew Overholt e2adc12
if [ $testing != true ]; then
Andrew Overholt e2adc12
  java -cp $SDK/startup.jar \
Andrew Overholt 5799696
    org.eclipse.core.launcher.Main \
Andrew Overholt 5799696
    -application org.eclipse.ant.core.antRunner \
Andrew Overholt 5799696
    $debugPlatformArgs \
Andrew Overholt 5799696
    -Dtype=feature \
Andrew Overholt 5799696
    -Did=$featureId \
Andrew Overholt 5799696
    -DbaseLocation=$SDK \
Andrew Overholt 5799696
    -DsourceDirectory=$sourceDir \
Andrew Overholt 5799696
    -DbuildDirectory=$buildDir \
Andrew Overholt df2c916
    -Dbuilder=$datadir/eclipse/dropins/sdk/plugins/org.eclipse.pde.build_@PDEBUILDVERSION@/templates/package-build \
Andrew Overholt e2adc12
    $orbitDeps \
Andrew Overholt 465153c
    -Dtesting="$testing" \
Andrew Overholt 5799696
    $additionalArgs \
Andrew Overholt 5799696
    -f $pdeBuildDir/scripts/build.xml \
Andrew Overholt 5799696
    -vmargs \
Andrew Overholt 5799696
    -Duser.home=$homeDir \
Andrew Overholt 5799696
    $vmArgs
Andrew Overholt 8fa0c06
Andrew Overholt e2adc12
else
Andrew Overholt e2adc12
  java -cp $SDK/startup.jar \
Andrew Overholt e2adc12
    org.eclipse.core.launcher.Main \
Andrew Overholt e2adc12
    -application org.eclipse.ant.core.antRunner \
Andrew Overholt e2adc12
    $debugPlatformArgs \
Andrew Overholt e2adc12
    -Dtype=feature \
Andrew Overholt e2adc12
    -Did=$featureId \
Andrew Overholt e2adc12
    -DbaseLocation=$SDK \
Andrew Overholt e2adc12
    -DsourceDirectory=$sourceDir \
Andrew Overholt e2adc12
    -DbuildDirectory=$buildDir \
Andrew Overholt e2adc12
    -Dbuilder=$datadir/eclipse/dropins/sdk/plugins/org.eclipse.pde.build_@PDEBUILDVERSION@/templates/package-build \
Andrew Overholt e2adc12
    $orbitDeps \
Andrew Overholt e2adc12
    -Dtesting="$testing" \
Andrew Overholt e2adc12
    $additionalArgs \
Andrew Overholt e2adc12
    -f $pdeBuildDir/scripts/build.xml \
Andrew Overholt e2adc12
    -vmargs \
Andrew Overholt e2adc12
    -Duser.home=$homeDir \
Andrew Overholt e2adc12
    $vmArgs
Andrew Overholt e2adc12
fi