#!/bin/bash
# Compares the ant jars to the maven jars and makes sure they're the same
# (or different where/how expected)

# Build everything first.
function cleanAndBuild {
  mvn clean
  ant clean.all
  ant no_aop
  ant dist test.dist
  mvn package
  cd build/no_aop
  ant dist test.dist
  cd ../..
}

function findAndCompareJars {
  version=3.0
  for ANT in `find ./build/dist/* -name "*-snapshot.jar" `
  do
    if [ $ANT = "./build/dist/guice-snapshot.jar" ]; then  #Check 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"  #also compare no_aop core
    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
 
  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
  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: util"
  cd ..
  rm -rf "tmp$$"
}

cleanAndBuild
echo "Starting to compare jars... Check the output closely!"
echo
findAndCompareJars
echo
echo "If the only thing that printed out is 'Comparing <thing>', then you're good!"
