common/bin/compare.sh
changeset 32720 7e0e586a6817
parent 31310 481585782338
child 32812 7a2d9c874229
equal deleted inserted replaced
32719:c41d1a7bffcf 32720:7e0e586a6817
    86     fi
    86     fi
    87     if test "x$SUFFIX" = "xjava"; then
    87     if test "x$SUFFIX" = "xjava"; then
    88         TMP=$(LC_ALL=C $DIFF $OTHER_FILE $THIS_FILE | \
    88         TMP=$(LC_ALL=C $DIFF $OTHER_FILE $THIS_FILE | \
    89             $GREP '^[<>]' | \
    89             $GREP '^[<>]' | \
    90             $SED -e '/[<>] \* from.*\.idl/d' \
    90             $SED -e '/[<>] \* from.*\.idl/d' \
    91                  -e '/[<>] \*.*[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}-b[0-9]\{2\}.*/d' \
    91                  -e '/[<>] .*[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}-b[0-9]\{2\}.*/d' \
    92                  -e '/[<>] \*.*[0-9]\{4\} [0-9][0-9]*:[0-9]\{2\}:[0-9]\{2\}.*/d' \
    92                  -e '/[<>] \*.*[0-9]\{4\} [0-9][0-9]*:[0-9]\{2\}:[0-9]\{2\}.*/d' \
    93                  -e '/\/\/ Generated from input file.*/d' \
    93                  -e '/\/\/ Generated from input file.*/d' \
    94                  -e '/\/\/ This file was generated AUTOMATICALLY from a template file.*/d' \
    94                  -e '/\/\/ This file was generated AUTOMATICALLY from a template file.*/d' \
    95                  -e '/\/\/ java GenerateCharacter.*/d')
    95                  -e '/\/\/ java GenerateCharacter.*/d')
    96     fi
    96     fi
    97     # Ignore date strings in class files.
    97     # Ignore date strings in class files.
    98     # On Macosx the system sources for generated java classes produce different output on
       
    99     # consequtive invocations seemingly randomly.
       
   100     # For example a method parameter randomly named "thePoint" or "aPoint". Ignore this.
       
   101     # Anonymous lambda classes get randomly assigned counters in their names.
    98     # Anonymous lambda classes get randomly assigned counters in their names.
   102     if test "x$SUFFIX" = "xclass"; then
    99     if test "x$SUFFIX" = "xclass"; then
   103         # To improve performance when large diffs are found, do a rough filtering of classes
   100         # To improve performance when large diffs are found, do a rough filtering of classes
   104         # elibeble for these exceptions
   101         # elibeble for these exceptions
   105         if $GREP -R -e '[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}-b[0-9]\{2\}' \
   102         if $GREP -R -e '[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}-b[0-9]\{2\}' \
   106                 -e '[0-9]\{2\}/[0-9]\{2\}/[0-9]\{4\}' \
   103                 -e '[0-9]\{2\}/[0-9]\{2\}/[0-9]\{4\}' \
   107                 -e thePoint -e aPoint -e setItemsPtr \
       
   108                 -e 'lambda\$[a-zA-Z0-9]*\$[0-9]' ${THIS_FILE} > /dev/null; then
   104                 -e 'lambda\$[a-zA-Z0-9]*\$[0-9]' ${THIS_FILE} > /dev/null; then
   109             $JAVAP -c -constants -l -p "${OTHER_FILE}" >  ${OTHER_FILE}.javap
   105             $JAVAP -c -constants -l -p "${OTHER_FILE}" >  ${OTHER_FILE}.javap
   110             $JAVAP -c -constants -l -p "${THIS_FILE}" > ${THIS_FILE}.javap
   106             $JAVAP -c -constants -l -p "${THIS_FILE}" > ${THIS_FILE}.javap
   111             TMP=$($DIFF ${OTHER_FILE}.javap ${THIS_FILE}.javap | \
   107             TMP=$($DIFF ${OTHER_FILE}.javap ${THIS_FILE}.javap | \
   112                 $GREP '^[<>]' | \
   108                 $GREP '^[<>]' | \
   113                 $SED -e '/[<>].*[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}-b[0-9]\{2\}.*/d' \
   109                 $SED -e '/[<>].*[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}-b[0-9]\{2\}.*/d' \
   114                      -e '/[0-9]\{2\}\/[0-9]\{2\}\/[0-9]\{4\}/d' \
   110                      -e '/[0-9]\{2\}\/[0-9]\{2\}\/[0-9]\{4\}/d' \
   115                      -e '/[<>].*Point   Lcom\/apple\/jobjc\/foundation\/NSPoint;/d' \
       
   116                      -e '/[<>].*public com\.apple\.jobjc\.Pointer<com\.apple\.jobjc\..*itemsPtr();/d' \
       
   117                      -e '/[<>].*public void setItemsPtr(com\.apple\.jobjc\.Pointer<com\.apple\.jobjc\..*);/d' \
       
   118                      -e '/[<>].*lambda\$[a-zA-Z0-9]*\$[0-9]*/d')
   111                      -e '/[<>].*lambda\$[a-zA-Z0-9]*\$[0-9]*/d')
   119         fi
   112         fi
   120     fi
   113     fi
   121     if test "x$SUFFIX" = "xproperties"; then
   114     if test "x$SUFFIX" = "xproperties"; then
   122         # Run through nawk to add possibly missing newline at end of file.
   115         # Run through nawk to add possibly missing newline at end of file.
   311         ! -name "*.obj" ! -name "*.o" ! -name "JavaControlPanelHelper" \
   304         ! -name "*.obj" ! -name "*.o" ! -name "JavaControlPanelHelper" \
   312         ! -name "JavaUpdater" ! -name "JavaWSApplicationStub" \
   305         ! -name "JavaUpdater" ! -name "JavaWSApplicationStub" \
   313         ! -name "jspawnhelper" \
   306         ! -name "jspawnhelper" \
   314         | $GREP -v "./bin/"  | $SORT | $FILTER)
   307         | $GREP -v "./bin/"  | $SORT | $FILTER)
   315 
   308 
   316     echo General files...
   309     echo Other files with binary differences...
   317     for f in $GENERAL_FILES
   310     for f in $GENERAL_FILES
   318     do
   311     do
   319         if [ -e $OTHER_DIR/$f ]; then
   312         if [ -e $OTHER_DIR/$f ]; then
   320             SUFFIX="${f##*.}"
   313             SUFFIX="${f##*.}"
   321             if [ "$(basename $f)" = "release" ]; then
   314             if [ "$(basename $f)" = "release" ]; then
   588     $LN -f -s $OTHER_FILE $WORK_FILE_BASE.other
   581     $LN -f -s $OTHER_FILE $WORK_FILE_BASE.other
   589 
   582 
   590     ORIG_THIS_FILE="$THIS_FILE"
   583     ORIG_THIS_FILE="$THIS_FILE"
   591     ORIG_OTHER_FILE="$OTHER_FILE"
   584     ORIG_OTHER_FILE="$OTHER_FILE"
   592 
   585 
   593     if [[ "$STRIP_BEFORE_COMPARE" = *"$BIN_FILE"* ]]; then
   586     if [ "$STRIP_ALL" = "true" ] || [[ "$STRIP_BEFORE_COMPARE" = *"$BIN_FILE"* ]]; then
   594         THIS_STRIPPED_FILE=$FILE_WORK_DIR/this/$NAME
   587         THIS_STRIPPED_FILE=$FILE_WORK_DIR/this/$NAME
   595         OTHER_STRIPPED_FILE=$FILE_WORK_DIR/other/$NAME
   588         OTHER_STRIPPED_FILE=$FILE_WORK_DIR/other/$NAME
   596         $MKDIR -p $FILE_WORK_DIR/this $FILE_WORK_DIR/other
   589         $MKDIR -p $FILE_WORK_DIR/this $FILE_WORK_DIR/other
   597         $CP $THIS_FILE $THIS_STRIPPED_FILE
   590         $CP $THIS_FILE $THIS_STRIPPED_FILE
   598         $CP $OTHER_FILE $OTHER_STRIPPED_FILE
   591         $CP $OTHER_FILE $OTHER_STRIPPED_FILE
   720         if [[ "$KNOWN_SIZE_DIFF $ACCEPTED_SIZE_DIFF" = *"$BIN_FILE"* ]]; then
   713         if [[ "$KNOWN_SIZE_DIFF $ACCEPTED_SIZE_DIFF" = *"$BIN_FILE"* ]]; then
   721             SIZE_MSG="     !     "
   714             SIZE_MSG="     !     "
   722         fi
   715         fi
   723     fi
   716     fi
   724 
   717 
   725     if [[ "$SORT_SYMBOLS" = *"$BIN_FILE"* ]]; then
   718     if [ "$SORT_ALL_SYMBOLS" = "true" ] || [[ "$SORT_SYMBOLS" = *"$BIN_FILE"* ]]; then
   726         SYM_SORT_CMD="sort"
   719         SYM_SORT_CMD="sort"
   727     else
   720     else
   728         SYM_SORT_CMD="cat"
   721         SYM_SORT_CMD="cat"
   729     fi
   722     fi
   730 
   723 
   808     # Compare fulldump output
   801     # Compare fulldump output
   809     if [ -n "$FULLDUMP_CMD" ] && [ -z "$SKIP_FULLDUMP_DIFF" ]; then
   802     if [ -n "$FULLDUMP_CMD" ] && [ -z "$SKIP_FULLDUMP_DIFF" ]; then
   810         if [ -z "$FULLDUMP_DIFF_FILTER" ]; then
   803         if [ -z "$FULLDUMP_DIFF_FILTER" ]; then
   811             FULLDUMP_DIFF_FILTER="$CAT"
   804             FULLDUMP_DIFF_FILTER="$CAT"
   812         fi
   805         fi
   813         $FULLDUMP_CMD $OTHER_FILE | eval "$FULLDUMP_DIFF_FILTER" > $WORK_FILE_BASE.fulldump.other 2>&1
   806         $FULLDUMP_CMD $OTHER_FILE | eval "$FULLDUMP_DIFF_FILTER" \
   814         $FULLDUMP_CMD $THIS_FILE  | eval "$FULLDUMP_DIFF_FILTER" > $WORK_FILE_BASE.fulldump.this  2>&1
   807             > $WORK_FILE_BASE.fulldump.other 2>&1
   815 
   808         $FULLDUMP_CMD $THIS_FILE  | eval "$FULLDUMP_DIFF_FILTER" \
   816         LC_ALL=C $DIFF $WORK_FILE_BASE.fulldump.other $WORK_FILE_BASE.fulldump.this > $WORK_FILE_BASE.fulldump.diff
   809             > $WORK_FILE_BASE.fulldump.this  2>&1
       
   810 
       
   811         LC_ALL=C $DIFF $WORK_FILE_BASE.fulldump.other $WORK_FILE_BASE.fulldump.this \
       
   812             > $WORK_FILE_BASE.fulldump.diff
   817 
   813 
   818         if [ -s $WORK_FILE_BASE.fulldump.diff ]; then
   814         if [ -s $WORK_FILE_BASE.fulldump.diff ]; then
   819             ELF_DIFF_SIZE=$(ls -n $WORK_FILE_BASE.fulldump.diff | awk '{print $5}')
   815             FULLDUMP_DIFF_SIZE=$(ls -n $WORK_FILE_BASE.fulldump.diff | awk '{print $5}')
   820             ELF_MSG=$($PRINTF "%8d" $ELF_DIFF_SIZE)
   816             FULLDUMP_MSG=$($PRINTF "%8d" $FULLDUMP_DIFF_SIZE)
   821             if [[ "$ACCEPTED_ELF_DIFF" != *"$BIN_FILE"* ]]; then
   817             if [[ "$ACCEPTED_FULLDUMP_DIFF" != *"$BIN_FILE"* ]]; then
   822                 DIFF_ELF=true
   818                 DIFF_FULLDUMP=true
   823                 if [[ "$KNOWN_ELF_DIFF" != *"$BIN_FILE"* ]]; then
   819                 if [[ "$KNOWN_FULLDUMP_DIFF" != *"$BIN_FILE"* ]]; then
   824                     ELF_MSG="*$ELF_MSG*"
   820                     FULLDUMP_MSG="*$FULLDUMP_MSG*"
   825                     REGRESSIONS=true
   821                     REGRESSIONS=true
   826                 else
   822                 else
   827                     ELF_MSG=" $ELF_MSG "
   823                     FULLDUMP_MSG=" $FULLDUMP_MSG "
   828                 fi
   824                 fi
   829             else
   825             else
   830                 ELF_MSG="($ELF_MSG)"
   826                 FULLDUMP_MSG="($FULLDUMP_MSG)"
   831                 DIFF_ELF=
   827                 DIFF_FULLDUMP=
   832             fi
   828             fi
   833         else
   829         else
   834             ELF_MSG="          "
   830             FULLDUMP_MSG="          "
   835             DIFF_ELF=
   831             DIFF_FULLDUMP=
   836             if [[ "$KNOWN_DEP_DIFF $ACCEPTED_DEP_DIFF" = *"$BIN_FILE"* ]]; then
   832             if [[ "$KNOWN_FULLDUMP_DIFF $ACCEPTED_FULLDUMP_DIFF" = *"$BIN_FILE"* ]]; then
   837                 ELF_MSG="    !    "
   833                 FULLDUMP_MSG="    !    "
   838             fi
   834             fi
   839         fi
   835         fi
   840     fi
   836     fi
   841 
   837 
   842     # Compare disassemble output
   838     # Compare disassemble output
   843     if [ -n "$DIS_CMD" ] && [ -z "$SKIP_DIS_DIFF" ]; then
   839     if [ -n "$DIS_CMD" ] && [ -z "$SKIP_DIS_DIFF" ]; then
   844         # By default we filter out differences that include references to symbols.
   840         # By default we filter out differences that include references to symbols.
   845         # To get a raw diff with the complete disassembly, set
   841         # To get a raw diff with the complete disassembly, set
   846         # DIS_DIFF_FILTER="$CAT"
   842         # DIS_DIFF_FILTER="$CAT"
   847         if [ -z "$DIS_DIFF_FILTER" ]; then
   843         if [ -z "$DIS_DIFF_FILTER" ]; then
   848             DIS_DIFF_FILTER="$GREP -v ' # .* <.*>$'"
   844             DIS_DIFF_FILTER="$GREP -v ' # .* <.*>$' | $SED -r -e 's/(\b|x)([0-9a-fA-F]+)(\b|:|>)/X/g'"
   849         fi
   845         fi
   850         $DIS_CMD $OTHER_FILE | $GREP -v $NAME | eval "$DIS_DIFF_FILTER" > $WORK_FILE_BASE.dis.other 2>&1
   846         $DIS_CMD $OTHER_FILE | $GREP -v $NAME | eval "$DIS_DIFF_FILTER" > $WORK_FILE_BASE.dis.other 2>&1
   851         $DIS_CMD $THIS_FILE  | $GREP -v $NAME | eval "$DIS_DIFF_FILTER" > $WORK_FILE_BASE.dis.this  2>&1
   847         $DIS_CMD $THIS_FILE  | $GREP -v $NAME | eval "$DIS_DIFF_FILTER" > $WORK_FILE_BASE.dis.this  2>&1
   852 
   848 
   853         LC_ALL=C $DIFF $WORK_FILE_BASE.dis.other $WORK_FILE_BASE.dis.this > $WORK_FILE_BASE.dis.diff
   849         LC_ALL=C $DIFF $WORK_FILE_BASE.dis.other $WORK_FILE_BASE.dis.this > $WORK_FILE_BASE.dis.diff
   875             fi
   871             fi
   876         fi
   872         fi
   877     fi
   873     fi
   878 
   874 
   879 
   875 
   880     if [ -n "$DIFF_BIN$DIFF_SIZE$DIFF_SYM$DIFF_DEP$DIFF_ELF$DIFF_DIS" ] || [ -n "$VERBOSE" ]; then
   876     if [ -n "$DIFF_BIN$DIFF_SIZE$DIFF_SYM$DIFF_DEP$DIFF_FULLDUMP$DIFF_DIS" ] || [ -n "$VERBOSE" ]; then
   881         if [ -n "$BIN_MSG" ]; then echo -n "$BIN_MSG:"; fi
   877         if [ -n "$BIN_MSG" ]; then echo -n "$BIN_MSG:"; fi
   882         if [ -n "$SIZE_MSG" ]; then echo -n "$SIZE_MSG:"; fi
   878         if [ -n "$SIZE_MSG" ]; then echo -n "$SIZE_MSG:"; fi
   883         if [ -n "$SYM_MSG" ]; then echo -n "$SYM_MSG:"; fi
   879         if [ -n "$SYM_MSG" ]; then echo -n "$SYM_MSG:"; fi
   884         if [ -n "$DEP_MSG" ]; then echo -n "$DEP_MSG:"; fi
   880         if [ -n "$DEP_MSG" ]; then echo -n "$DEP_MSG:"; fi
   885         if [ -n "$ELF_MSG" ]; then echo -n "$ELF_MSG:"; fi
   881         if [ -n "$FULLDUMP_MSG" ]; then echo -n "$FULLDUMP_MSG:"; fi
   886         if [ -n "$DIS_MSG" ]; then echo -n "$DIS_MSG:"; fi
   882         if [ -n "$DIS_MSG" ]; then echo -n "$DIS_MSG:"; fi
   887         echo " $BIN_FILE"
   883         echo " $BIN_FILE"
   888         if [ "$SHOW_DIFFS" = "true" ]; then
   884         if [ "$SHOW_DIFFS" = "true" ]; then
   889             if [ -s "$WORK_FILE_BASE.symbols.diff" ]; then
   885             if [ -s "$WORK_FILE_BASE.symbols.diff" ]; then
   890                 echo "Symbols diff:"
   886                 echo "Symbols diff:"
  1013     echo "-execs              Compare all executables"
  1009     echo "-execs              Compare all executables"
  1014     echo "-v                  Verbose output, does not hide known differences"
  1010     echo "-v                  Verbose output, does not hide known differences"
  1015     echo "-vv                 More verbose output, shows diff output of all comparisons"
  1011     echo "-vv                 More verbose output, shows diff output of all comparisons"
  1016     echo "-o [OTHER]          Compare with build in other directory. Will default to the old build directory"
  1012     echo "-o [OTHER]          Compare with build in other directory. Will default to the old build directory"
  1017     echo ""
  1013     echo ""
       
  1014     echo "--sort-symbols      Sort all symbols before comparing"
       
  1015     echo "--strip             Strip all binaries before comparing"
       
  1016     echo ""
  1018     echo "[FILTER]            List filenames in the image to compare, works for jars, zips, libs and execs"
  1017     echo "[FILTER]            List filenames in the image to compare, works for jars, zips, libs and execs"
  1019     echo "Example:"
  1018     echo "Example:"
  1020     echo "bash ./common/bin/compareimages.sh CodePointIM.jar"
  1019     echo "bash ./common/bin/compareimages.sh CodePointIM.jar"
  1021     echo ""
  1020     echo ""
  1022     echo "-2zips <file1> <file2> Compare two zip files only"
  1021     echo "-2zips <file1> <file2> Compare two zip files only"
  1104             CMP_2_BINS=true
  1103             CMP_2_BINS=true
  1105             THIS_FILE=$2
  1104             THIS_FILE=$2
  1106             OTHER_FILE=$3
  1105             OTHER_FILE=$3
  1107             shift
  1106             shift
  1108             shift
  1107             shift
       
  1108             ;;
       
  1109         --sort-symbols)
       
  1110             SORT_ALL_SYMBOLS=true
       
  1111             ;;
       
  1112         --strip)
       
  1113             STRIP_ALL=true
  1109             ;;
  1114             ;;
  1110         *)
  1115         *)
  1111             CMP_NAMES=false
  1116             CMP_NAMES=false
  1112             CMP_PERMS=false
  1117             CMP_PERMS=false
  1113             CMP_TYPES=false
  1118             CMP_TYPES=false
  1221             OTHER_JRE_BUNDLE="$OTHER/deploy/images/jre-bundle"
  1226             OTHER_JRE_BUNDLE="$OTHER/deploy/images/jre-bundle"
  1222 	else
  1227 	else
  1223             OTHER_JDK_BUNDLE="$OTHER/images/jdk-bundle"
  1228             OTHER_JDK_BUNDLE="$OTHER/images/jdk-bundle"
  1224             OTHER_JRE_BUNDLE="$OTHER/images/jre-bundle"
  1229             OTHER_JRE_BUNDLE="$OTHER/images/jre-bundle"
  1225 	fi
  1230 	fi
  1226         echo "Also comparing macosx bundles"
  1231         echo "Also comparing jdk macosx bundles"
  1227         echo "  $THIS_JDK_BUNDLE"
  1232         echo "  $THIS_JDK_BUNDLE"
  1228         echo "  $OTHER_JDK_BUNDLE"
  1233         echo "  $OTHER_JDK_BUNDLE"
  1229     fi
  1234     fi
  1230 
  1235 
  1231     if [ -d "$THIS/deploy/bundles" -o -d "$THIS/deploy/images/bundles" ] \
  1236     if [ -d "$THIS/deploy/bundles" -o -d "$THIS/deploy/images/bundles" ] \