xref: /aosp_15_r20/external/guice/util/compareBuilds.sh (revision dc5640d1ceac12a29404866b9a53df952a7a6c47)
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