#!/bin/bash
## Compares the ant jars to the maven jars and makes sure they're the same
## (or different where/how expected)
## Note: The no_aop build doesn't compare cleanly for some reason.
## Maybe a difference between the ant & maven munge preprocessor?
RETVAL=0
function cleanAndBuild {
mvn clean > /dev/null
ant clean.all > /dev/null
#ant no_aop > /dev/null
ant dist > /dev/null
mvn package -DskipTests=true -Dmaven.javadoc.skip=true > /dev/null
#ant -f build/no_aop/build.xml dist > /dev/null
}
function findAndCompareJars {
version=4.0
for ANT in `find ./build/dist/* -name "*-snapshot.jar" `
do
if [ $ANT = "./build/dist/guice-snapshot.jar" ]; then
## Check the main build.
MVN=./core/target/guice-$version-SNAPSHOT.jar
extension=core
compareJars "$ANT" "$MVN" $extension
#compareJars "./build/no_aop/$ANT" "./core/target/guice-$version-SNAPSHOT-no_aop.jar" "no_aop: $extension"
else
## Check extensions.
extension=`echo $ANT | awk -F"-" '{print $2 }'`
MVN=./extensions/$extension/target/guice-$extension-$version-SNAPSHOT.jar
compareJars "$ANT" "$MVN" $extension
fi
done;
}
function compareJars {
ANT=$1
MVN=$2
extension=$3
curdir=`pwd`
echo Comparing $3
mkdir "tmp$$"
cp $ANT tmp$$/ant.jar
cp $MVN tmp$$/mvn.jar
cd "tmp$$"
mkdir ant
mkdir mvn
cd ant
jar -xf ../ant.jar
cd ..
cd mvn
jar -xf ../mvn.jar
cd ..
## ant puts LICENSE & NOTICE files in a different place
echo LICENSE > excludes
echo NOTICE >> excludes
## ant does not create DEPENDENCIES
echo DEPENDENCIES >> excludes
## ant/mvn slightly different in MANIFEST.MF
echo MANIFEST.MF >> excludes
## ant leaves empty directories for some jarjar'd paths --
## we grep -v instead of exclude because we want to make sure
## if any files in those directories exist, that they're diff'd.
## ant 1.8+ also creates package-info classes all the time, and
## maven doesn't -- so we just ignore the package-info classes.
diff -u --recursive -Xexcludes ant mvn | \
grep -v "^Only in ant/com/google/inject/internal/asm: signature$" | \
grep -v "^Only in ant/com/google/inject/internal/cglib: beans$" | \
grep -v "^Only in ant/com/google/inject/internal/cglib: transform$" | \
grep -v "^Only in ant/com/google/inject/internal/cglib/transform: impl$" | \
grep -v "^Only in ant/com/google/inject/internal/cglib: util$" | \
grep -v "^Only in ant: net$" | \
grep -v "^Only in ant: org$" | \
grep -v "^Only in ant/com/google/inject/.*: package-info\.class$"
# failure is 0 because we're using grep -v to filter things out
if [ $? -eq 0 ]; then
export RETVAL=1
fi
cd "$curdir"
rm -rf "tmp$$"
}
## Only bother doing this on the jdk8/mvn build (before we publish snapshots).
## Otherwise it's a waste of time building mvn+ant each time.
if [ "$TRAVIS_JDK_VERSION" == "oraclejdk8" ] && \
[ "$LABEL" == "mvn" ]; then
echo "Cleaning and building ant & maven..."
cleanAndBuild
echo "Starting to compare jars..."
echo
findAndCompareJars
if [ $RETVAL -eq 0 ]; then
echo "Everything looks good!"
exit 0
else
echo "Some things don't match -- see above for details."
exit 1
fi
fi