1*dc5640d1SHerbert Xue#!/bin/bash 2*dc5640d1SHerbert Xue## Compares the ant jars to the maven jars and makes sure they're the same 3*dc5640d1SHerbert Xue## (or different where/how expected) 4*dc5640d1SHerbert Xue 5*dc5640d1SHerbert Xue## Note: The no_aop build doesn't compare cleanly for some reason. 6*dc5640d1SHerbert Xue## Maybe a difference between the ant & maven munge preprocessor? 7*dc5640d1SHerbert Xue 8*dc5640d1SHerbert XueRETVAL=0 9*dc5640d1SHerbert Xue 10*dc5640d1SHerbert Xuefunction cleanAndBuild { 11*dc5640d1SHerbert Xue mvn clean > /dev/null 12*dc5640d1SHerbert Xue ant clean.all > /dev/null 13*dc5640d1SHerbert Xue #ant no_aop > /dev/null 14*dc5640d1SHerbert Xue ant dist > /dev/null 15*dc5640d1SHerbert Xue mvn package -DskipTests=true -Dmaven.javadoc.skip=true > /dev/null 16*dc5640d1SHerbert Xue #ant -f build/no_aop/build.xml dist > /dev/null 17*dc5640d1SHerbert Xue} 18*dc5640d1SHerbert Xue 19*dc5640d1SHerbert Xuefunction findAndCompareJars { 20*dc5640d1SHerbert Xue version=4.0 21*dc5640d1SHerbert Xue for ANT in `find ./build/dist/* -name "*-snapshot.jar" ` 22*dc5640d1SHerbert Xue do 23*dc5640d1SHerbert Xue if [ $ANT = "./build/dist/guice-snapshot.jar" ]; then 24*dc5640d1SHerbert Xue ## Check the main build. 25*dc5640d1SHerbert Xue MVN=./core/target/guice-$version-SNAPSHOT.jar 26*dc5640d1SHerbert Xue extension=core 27*dc5640d1SHerbert Xue compareJars "$ANT" "$MVN" $extension 28*dc5640d1SHerbert Xue #compareJars "./build/no_aop/$ANT" "./core/target/guice-$version-SNAPSHOT-no_aop.jar" "no_aop: $extension" 29*dc5640d1SHerbert Xue else 30*dc5640d1SHerbert Xue ## Check extensions. 31*dc5640d1SHerbert Xue extension=`echo $ANT | awk -F"-" '{print $2 }'` 32*dc5640d1SHerbert Xue MVN=./extensions/$extension/target/guice-$extension-$version-SNAPSHOT.jar 33*dc5640d1SHerbert Xue compareJars "$ANT" "$MVN" $extension 34*dc5640d1SHerbert Xue fi 35*dc5640d1SHerbert Xue 36*dc5640d1SHerbert Xue done; 37*dc5640d1SHerbert Xue} 38*dc5640d1SHerbert Xue 39*dc5640d1SHerbert Xuefunction compareJars { 40*dc5640d1SHerbert Xue ANT=$1 41*dc5640d1SHerbert Xue MVN=$2 42*dc5640d1SHerbert Xue extension=$3 43*dc5640d1SHerbert Xue curdir=`pwd` 44*dc5640d1SHerbert Xue 45*dc5640d1SHerbert Xue echo Comparing $3 46*dc5640d1SHerbert Xue mkdir "tmp$$" 47*dc5640d1SHerbert Xue cp $ANT tmp$$/ant.jar 48*dc5640d1SHerbert Xue cp $MVN tmp$$/mvn.jar 49*dc5640d1SHerbert Xue cd "tmp$$" 50*dc5640d1SHerbert Xue mkdir ant 51*dc5640d1SHerbert Xue mkdir mvn 52*dc5640d1SHerbert Xue cd ant 53*dc5640d1SHerbert Xue jar -xf ../ant.jar 54*dc5640d1SHerbert Xue cd .. 55*dc5640d1SHerbert Xue cd mvn 56*dc5640d1SHerbert Xue jar -xf ../mvn.jar 57*dc5640d1SHerbert Xue cd .. 58*dc5640d1SHerbert Xue 59*dc5640d1SHerbert Xue ## ant puts LICENSE & NOTICE files in a different place 60*dc5640d1SHerbert Xue echo LICENSE > excludes 61*dc5640d1SHerbert Xue echo NOTICE >> excludes 62*dc5640d1SHerbert Xue ## ant does not create DEPENDENCIES 63*dc5640d1SHerbert Xue echo DEPENDENCIES >> excludes 64*dc5640d1SHerbert Xue ## ant/mvn slightly different in MANIFEST.MF 65*dc5640d1SHerbert Xue echo MANIFEST.MF >> excludes 66*dc5640d1SHerbert Xue 67*dc5640d1SHerbert Xue ## ant leaves empty directories for some jarjar'd paths -- 68*dc5640d1SHerbert Xue ## we grep -v instead of exclude because we want to make sure 69*dc5640d1SHerbert Xue ## if any files in those directories exist, that they're diff'd. 70*dc5640d1SHerbert Xue ## ant 1.8+ also creates package-info classes all the time, and 71*dc5640d1SHerbert Xue ## maven doesn't -- so we just ignore the package-info classes. 72*dc5640d1SHerbert Xue diff -u --recursive -Xexcludes ant mvn | \ 73*dc5640d1SHerbert Xue grep -v "^Only in ant/com/google/inject/internal/asm: signature$" | \ 74*dc5640d1SHerbert Xue grep -v "^Only in ant/com/google/inject/internal/cglib: beans$" | \ 75*dc5640d1SHerbert Xue grep -v "^Only in ant/com/google/inject/internal/cglib: transform$" | \ 76*dc5640d1SHerbert Xue grep -v "^Only in ant/com/google/inject/internal/cglib/transform: impl$" | \ 77*dc5640d1SHerbert Xue grep -v "^Only in ant/com/google/inject/internal/cglib: util$" | \ 78*dc5640d1SHerbert Xue grep -v "^Only in ant: net$" | \ 79*dc5640d1SHerbert Xue grep -v "^Only in ant: org$" | \ 80*dc5640d1SHerbert Xue grep -v "^Only in ant/com/google/inject/.*: package-info\.class$" 81*dc5640d1SHerbert Xue # failure is 0 because we're using grep -v to filter things out 82*dc5640d1SHerbert Xue if [ $? -eq 0 ]; then 83*dc5640d1SHerbert Xue export RETVAL=1 84*dc5640d1SHerbert Xue fi 85*dc5640d1SHerbert Xue cd "$curdir" 86*dc5640d1SHerbert Xue rm -rf "tmp$$" 87*dc5640d1SHerbert Xue} 88*dc5640d1SHerbert Xue 89*dc5640d1SHerbert Xue## Only bother doing this on the jdk8/mvn build (before we publish snapshots). 90*dc5640d1SHerbert Xue## Otherwise it's a waste of time building mvn+ant each time. 91*dc5640d1SHerbert Xueif [ "$TRAVIS_JDK_VERSION" == "oraclejdk8" ] && \ 92*dc5640d1SHerbert Xue [ "$LABEL" == "mvn" ]; then 93*dc5640d1SHerbert Xue echo "Cleaning and building ant & maven..." 94*dc5640d1SHerbert Xue cleanAndBuild 95*dc5640d1SHerbert Xue echo "Starting to compare jars..." 96*dc5640d1SHerbert Xue echo 97*dc5640d1SHerbert Xue findAndCompareJars 98*dc5640d1SHerbert Xue if [ $RETVAL -eq 0 ]; then 99*dc5640d1SHerbert Xue echo "Everything looks good!" 100*dc5640d1SHerbert Xue exit 0 101*dc5640d1SHerbert Xue else 102*dc5640d1SHerbert Xue echo "Some things don't match -- see above for details." 103*dc5640d1SHerbert Xue exit 1 104*dc5640d1SHerbert Xue fi 105*dc5640d1SHerbert Xuefi 106