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 |
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" |
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" ] \ |