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