1 #!/bin/bash |
1 #!/bin/bash |
2 # |
2 # |
3 # Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved. |
3 # Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved. |
4 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
5 # |
5 # |
6 # This code is free software; you can redistribute it and/or modify it |
6 # This code is free software; you can redistribute it and/or modify it |
7 # under the terms of the GNU General Public License version 2 only, as |
7 # under the terms of the GNU General Public License version 2 only, as |
8 # published by the Free Software Foundation. |
8 # published by the Free Software Foundation. |
31 # Check that we are run via the wrapper generated by configure |
31 # Check that we are run via the wrapper generated by configure |
32 if [ -z "$TOPDIR" ]; then |
32 if [ -z "$TOPDIR" ]; then |
33 echo "Error: You must run this script using build/[conf]/compare.sh" |
33 echo "Error: You must run this script using build/[conf]/compare.sh" |
34 exit 1 |
34 exit 1 |
35 fi |
35 fi |
|
36 |
|
37 # Make sure all shell commands are executed with the C locale |
|
38 export LC_ALL=C |
36 |
39 |
37 if [ "$OPENJDK_TARGET_OS" = "macosx" ]; then |
40 if [ "$OPENJDK_TARGET_OS" = "macosx" ]; then |
38 FULLDUMP_CMD="$OTOOL -v -V -h -X -d" |
41 FULLDUMP_CMD="$OTOOL -v -V -h -X -d" |
39 LDD_CMD="$OTOOL -L" |
42 LDD_CMD="$OTOOL -L" |
40 DIS_CMD="$OTOOL -v -V -t" |
43 DIS_CMD="$OTOOL -v -V -t" |
108 -e 's/([a-z]{2}[a-z ]{2}) [0-9A-F]{4,16}$/\1 <HEXSTR>/' \ |
111 -e 's/([a-z]{2}[a-z ]{2}) [0-9A-F]{4,16}$/\1 <HEXSTR>/' \ |
109 -e 's/\[\?\?_C@_.*/[<SYM>]/' \ |
112 -e 's/\[\?\?_C@_.*/[<SYM>]/' \ |
110 " |
113 " |
111 fi |
114 fi |
112 elif [ "$OPENJDK_TARGET_OS" = "macosx" ]; then |
115 elif [ "$OPENJDK_TARGET_OS" = "macosx" ]; then |
113 DIS_DIFF_FILTER="LANG=C $SED \ |
116 DIS_DIFF_FILTER="$SED \ |
114 -e 's/0x[0-9a-f]\{3,16\}/<HEXSTR>/g' -e 's/^[0-9a-f]\{12,20\}/<ADDR>/' \ |
117 -e 's/0x[0-9a-f]\{3,16\}/<HEXSTR>/g' -e 's/^[0-9a-f]\{12,20\}/<ADDR>/' \ |
115 -e 's/-20[0-9][0-9]-[0-1][0-9]-[0-3][0-9]-[0-2][0-9]\{5\}/<DATE>/g' \ |
118 -e 's/-20[0-9][0-9]-[0-1][0-9]-[0-3][0-9]-[0-2][0-9]\{5\}/<DATE>/g' \ |
116 -e 's/), built on .*/), <DATE>/' \ |
119 -e 's/), built on .*/), <DATE>/' \ |
117 " |
120 " |
118 fi |
121 fi |
132 |
135 |
133 TMP=1 |
136 TMP=1 |
134 |
137 |
135 if [[ "$THIS_FILE" = *"META-INF/MANIFEST.MF" ]]; then |
138 if [[ "$THIS_FILE" = *"META-INF/MANIFEST.MF" ]]; then |
136 # Filter out date string, ant version and java version differences. |
139 # Filter out date string, ant version and java version differences. |
137 TMP=$(LC_ALL=C $DIFF $OTHER_FILE $THIS_FILE | \ |
140 TMP=$($DIFF $OTHER_FILE $THIS_FILE | \ |
138 $GREP '^[<>]' | \ |
141 $GREP '^[<>]' | \ |
139 $SED -e '/[<>] Ant-Version: Apache Ant .*/d' \ |
142 $SED -e '/[<>] Ant-Version: Apache Ant .*/d' \ |
140 -e '/[<>] Created-By: .* (Oracle [Corpatin)]*/d' \ |
143 -e '/[<>] Created-By: .* (Oracle [Corpatin)]*/d' \ |
141 -e '/[<>] [Corpatin]*)/d' \ |
144 -e '/[<>] [Corpatin]*)/d' \ |
142 -e '/[<>].*[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}-b[0-9]\{2\}.*/d') |
145 -e '/[<>].*[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}-b[0-9]\{2\}.*/d') |
143 fi |
146 fi |
144 if test "x$SUFFIX" = "xjava"; then |
147 if test "x$SUFFIX" = "xjava"; then |
145 TMP=$(LC_ALL=C $DIFF $OTHER_FILE $THIS_FILE | \ |
148 TMP=$($DIFF $OTHER_FILE $THIS_FILE | \ |
146 $GREP '^[<>]' | \ |
149 $GREP '^[<>]' | \ |
147 $SED -e '/[<>] \* from.*\.idl/d' \ |
150 $SED -e '/[<>] \* from.*\.idl/d' \ |
148 -e '/[<>] .*[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}-b[0-9]\{2\}.*/d' \ |
151 -e '/[<>] .*[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}-b[0-9]\{2\}.*/d' \ |
149 -e '/[<>] .*[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}-[0-9]\{6\}.*/d' \ |
152 -e '/[<>] .*[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}-[0-9]\{6\}.*/d' \ |
150 -e '/[<>] \*.*[0-9]\{4\} \(at \)*[0-9][0-9]*:[0-9]\{2\}:[0-9]\{2\}.*/d' \ |
153 -e '/[<>] \*.*[0-9]\{4\} \(at \)*[0-9][0-9]*:[0-9]\{2\}:[0-9]\{2\}.*/d' \ |
195 -e '/[<>].*lambda\$[a-zA-Z0-9]*\$[0-9]*/d') |
198 -e '/[<>].*lambda\$[a-zA-Z0-9]*\$[0-9]*/d') |
196 fi |
199 fi |
197 fi |
200 fi |
198 if test "x$SUFFIX" = "xproperties"; then |
201 if test "x$SUFFIX" = "xproperties"; then |
199 # Filter out date string differences. |
202 # Filter out date string differences. |
200 TMP=$(LC_ALL=C $DIFF $OTHER_FILE $THIS_FILE | \ |
203 TMP=$($DIFF $OTHER_FILE $THIS_FILE | \ |
201 $GREP '^[<>]' | \ |
204 $GREP '^[<>]' | \ |
202 $SED -e '/[<>].*[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}-[0-9]\{6\}.*/d') |
205 $SED -e '/[<>].*[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}-[0-9]\{6\}.*/d') |
203 fi |
206 fi |
204 if test "x$SUFFIX" = "xhtml"; then |
207 if test "x$SUFFIX" = "xhtml"; then |
205 # Some javadoc versions do not put quotes around font size |
208 # Some javadoc versions do not put quotes around font size |
206 HTML_FILTER="$SED \ |
209 HTML_FILTER="$SED \ |
207 -e 's/<font size=-1>/<font size=\"-1\">/g'" |
210 -e 's/<font size=-1>/<font size=\"-1\">/g'" |
208 $CAT $THIS_FILE | eval "$HTML_FILTER" > $THIS_FILE.filtered |
211 $CAT $THIS_FILE | eval "$HTML_FILTER" > $THIS_FILE.filtered |
209 $CAT $OTHER_FILE | eval "$HTML_FILTER" > $OTHER_FILE.filtered |
212 $CAT $OTHER_FILE | eval "$HTML_FILTER" > $OTHER_FILE.filtered |
210 TMP=$(LC_ALL=C $DIFF $OTHER_FILE.filtered $THIS_FILE.filtered | \ |
213 TMP=$($DIFF $OTHER_FILE.filtered $THIS_FILE.filtered | \ |
211 $GREP '^[<>]' | \ |
214 $GREP '^[<>]' | \ |
212 $SED -e '/[<>] <!-- Generated by javadoc .* on .* -->/d' \ |
215 $SED -e '/[<>] <!-- Generated by javadoc .* on .* -->/d' \ |
213 -e '/[<>] <meta name="date" content=".*">/d' ) |
216 -e '/[<>] <meta name="date" content=".*">/d' ) |
214 fi |
217 fi |
215 if test "$NAME" = "BenchmarkList"; then |
218 if test "$NAME" = "BenchmarkList"; then |
359 && [ "`echo $TF | $GREP -c 'Zip archive data'`" -gt 0 ] |
362 && [ "`echo $TF | $GREP -c 'Zip archive data'`" -gt 0 ] |
360 then |
363 then |
361 # the way we produce zip-files make it so that directories are stored in |
364 # the way we produce zip-files make it so that directories are stored in |
362 # old file but not in new (only files with full-path) this makes file |
365 # old file but not in new (only files with full-path) this makes file |
363 # report them as different |
366 # report them as different |
|
367 continue |
|
368 elif [ "`echo $OF | $GREP -c 'MSVC program database ver 7.00'`" -gt 0 ] \ |
|
369 && [ "`echo $TF | $GREP -c 'MSVC program database ver 7.00'`" -gt 0 ] |
|
370 then |
|
371 # For Windows pdb files the file command reports some kind of size data |
|
372 # which may sometimes come out randomly different. |
364 continue |
373 continue |
365 else |
374 else |
366 if [ -z "$found" ]; then echo ; found="yes"; fi |
375 if [ -z "$found" ]; then echo ; found="yes"; fi |
367 $PRINTF "\tother: ${OF}\n\tthis : ${TF}\n" |
376 $PRINTF "\tother: ${OF}\n\tthis : ${TF}\n" |
368 fi |
377 fi |
546 done |
555 done |
547 |
556 |
548 CONTENTS_DIFF_FILE=$WORK_DIR/$ZIP_FILE.diff |
557 CONTENTS_DIFF_FILE=$WORK_DIR/$ZIP_FILE.diff |
549 # On solaris, there is no -q option. |
558 # On solaris, there is no -q option. |
550 if [ "$OPENJDK_TARGET_OS" = "solaris" ]; then |
559 if [ "$OPENJDK_TARGET_OS" = "solaris" ]; then |
551 LC_ALL=C $DIFF -r $OTHER_UNZIPDIR $THIS_UNZIPDIR \ |
560 $DIFF -r $OTHER_UNZIPDIR $THIS_UNZIPDIR \ |
552 | $GREP -v -e "^<" -e "^>" -e "^Common subdirectories:" \ |
561 | $GREP -v -e "^<" -e "^>" -e "^Common subdirectories:" \ |
553 > $CONTENTS_DIFF_FILE |
562 > $CONTENTS_DIFF_FILE |
554 else |
563 else |
555 LC_ALL=C $DIFF -rq $OTHER_UNZIPDIR $THIS_UNZIPDIR > $CONTENTS_DIFF_FILE |
564 $DIFF -rq $OTHER_UNZIPDIR $THIS_UNZIPDIR > $CONTENTS_DIFF_FILE |
556 fi |
565 fi |
557 |
566 |
558 ONLY_OTHER=$($GREP "^Only in $OTHER_UNZIPDIR" $CONTENTS_DIFF_FILE) |
567 ONLY_OTHER=$($GREP "^Only in $OTHER_UNZIPDIR" $CONTENTS_DIFF_FILE) |
559 ONLY_THIS=$($GREP "^Only in $THIS_UNZIPDIR" $CONTENTS_DIFF_FILE) |
568 ONLY_THIS=$($GREP "^Only in $THIS_UNZIPDIR" $CONTENTS_DIFF_FILE) |
560 |
569 |
597 $CAT $WORK_DIR/$ZIP_FILE.difflist |
606 $CAT $WORK_DIR/$ZIP_FILE.difflist |
598 |
607 |
599 if [ -n "$SHOW_DIFFS" ]; then |
608 if [ -n "$SHOW_DIFFS" ]; then |
600 for i in $(cat $WORK_DIR/$ZIP_FILE.difflist) ; do |
609 for i in $(cat $WORK_DIR/$ZIP_FILE.difflist) ; do |
601 if [ -f "${OTHER_UNZIPDIR}/$i.javap" ]; then |
610 if [ -f "${OTHER_UNZIPDIR}/$i.javap" ]; then |
602 LC_ALL=C $DIFF ${OTHER_UNZIPDIR}/$i.javap ${THIS_UNZIPDIR}/$i.javap |
611 $DIFF ${OTHER_UNZIPDIR}/$i.javap ${THIS_UNZIPDIR}/$i.javap |
603 elif [ -f "${OTHER_UNZIPDIR}/$i.cleaned" ]; then |
612 elif [ -f "${OTHER_UNZIPDIR}/$i.cleaned" ]; then |
604 LC_ALL=C $DIFF ${OTHER_UNZIPDIR}/$i.cleaned ${THIS_UNZIPDIR}/$i |
613 $DIFF ${OTHER_UNZIPDIR}/$i.cleaned ${THIS_UNZIPDIR}/$i |
605 else |
614 else |
606 LC_ALL=C $DIFF ${OTHER_UNZIPDIR}/$i ${THIS_UNZIPDIR}/$i |
615 $DIFF ${OTHER_UNZIPDIR}/$i ${THIS_UNZIPDIR}/$i |
607 fi |
616 fi |
608 done |
617 done |
609 fi |
618 fi |
610 fi |
619 fi |
611 fi |
620 fi |
634 mkdir -p $(dirname $THIS_JMOD_LIST) $(dirname $OTHER_JMOD_LIST) |
643 mkdir -p $(dirname $THIS_JMOD_LIST) $(dirname $OTHER_JMOD_LIST) |
635 |
644 |
636 $JMOD list $THIS_JMOD | sort > $THIS_JMOD_LIST |
645 $JMOD list $THIS_JMOD | sort > $THIS_JMOD_LIST |
637 $JMOD list $OTHER_JMOD | sort > $OTHER_JMOD_LIST |
646 $JMOD list $OTHER_JMOD | sort > $OTHER_JMOD_LIST |
638 JMOD_LIST_DIFF_FILE=$WORK_DIR/$JMOD_FILE.list.diff |
647 JMOD_LIST_DIFF_FILE=$WORK_DIR/$JMOD_FILE.list.diff |
639 LC_ALL=C $DIFF $THIS_JMOD_LIST $OTHER_JMOD_LIST > $JMOD_LIST_DIFF_FILE |
648 $DIFF $THIS_JMOD_LIST $OTHER_JMOD_LIST > $JMOD_LIST_DIFF_FILE |
640 |
649 |
641 ONLY_THIS=$($GREP "^<" $JMOD_LIST_DIFF_FILE) |
650 ONLY_THIS=$($GREP "^<" $JMOD_LIST_DIFF_FILE) |
642 ONLY_OTHER=$($GREP "^>" $JMOD_LIST_DIFF_FILE) |
651 ONLY_OTHER=$($GREP "^>" $JMOD_LIST_DIFF_FILE) |
643 |
652 |
644 if [ -n "$ONLY_OTHER" ]; then |
653 if [ -n "$ONLY_OTHER" ]; then |
916 | eval "$this_SYMBOLS_DIFF_FILTER" \ |
925 | eval "$this_SYMBOLS_DIFF_FILTER" \ |
917 | $SYM_SORT_CMD \ |
926 | $SYM_SORT_CMD \ |
918 > $WORK_FILE_BASE.symbols.this |
927 > $WORK_FILE_BASE.symbols.this |
919 fi |
928 fi |
920 |
929 |
921 LC_ALL=C $DIFF $WORK_FILE_BASE.symbols.other $WORK_FILE_BASE.symbols.this > $WORK_FILE_BASE.symbols.diff |
930 $DIFF $WORK_FILE_BASE.symbols.other $WORK_FILE_BASE.symbols.this > $WORK_FILE_BASE.symbols.diff |
922 if [ -s $WORK_FILE_BASE.symbols.diff ]; then |
931 if [ -s $WORK_FILE_BASE.symbols.diff ]; then |
923 SYM_MSG=" diff " |
932 SYM_MSG=" diff " |
924 if [[ "$ACCEPTED_SYM_DIFF" != *"$BIN_FILE"* ]]; then |
933 if [[ "$ACCEPTED_SYM_DIFF" != *"$BIN_FILE"* ]]; then |
925 DIFF_SYM=true |
934 DIFF_SYM=true |
926 if [[ "$KNOWN_SYM_DIFF" != *"$BIN_FILE"* ]]; then |
935 if [[ "$KNOWN_SYM_DIFF" != *"$BIN_FILE"* ]]; then |
956 | $LDD_FILTER | $AWK '{ print $1;}' | $SORT \ |
965 | $LDD_FILTER | $AWK '{ print $1;}' | $SORT \ |
957 | $TEE $WORK_FILE_BASE.deps.this \ |
966 | $TEE $WORK_FILE_BASE.deps.this \ |
958 | $UNIQ > $WORK_FILE_BASE.deps.this.uniq) |
967 | $UNIQ > $WORK_FILE_BASE.deps.this.uniq) |
959 (cd $FILE_WORK_DIR && $RM -f $NAME) |
968 (cd $FILE_WORK_DIR && $RM -f $NAME) |
960 |
969 |
961 LC_ALL=C $DIFF $WORK_FILE_BASE.deps.other $WORK_FILE_BASE.deps.this \ |
970 $DIFF $WORK_FILE_BASE.deps.other $WORK_FILE_BASE.deps.this \ |
962 > $WORK_FILE_BASE.deps.diff |
971 > $WORK_FILE_BASE.deps.diff |
963 LC_ALL=C $DIFF $WORK_FILE_BASE.deps.other.uniq $WORK_FILE_BASE.deps.this.uniq \ |
972 $DIFF $WORK_FILE_BASE.deps.other.uniq $WORK_FILE_BASE.deps.this.uniq \ |
964 > $WORK_FILE_BASE.deps.diff.uniq |
973 > $WORK_FILE_BASE.deps.diff.uniq |
965 |
974 |
966 if [ -s $WORK_FILE_BASE.deps.diff ]; then |
975 if [ -s $WORK_FILE_BASE.deps.diff ]; then |
967 if [ -s $WORK_FILE_BASE.deps.diff.uniq ]; then |
976 if [ -s $WORK_FILE_BASE.deps.diff.uniq ]; then |
968 DEP_MSG=" diff " |
977 DEP_MSG=" diff " |
1008 > $WORK_FILE_BASE.fulldump.other 2>&1 & |
1017 > $WORK_FILE_BASE.fulldump.other 2>&1 & |
1009 $FULLDUMP_CMD $THIS_FILE | eval "$BUILD_ID_FILTER" | eval "$FULLDUMP_DIFF_FILTER" \ |
1018 $FULLDUMP_CMD $THIS_FILE | eval "$BUILD_ID_FILTER" | eval "$FULLDUMP_DIFF_FILTER" \ |
1010 > $WORK_FILE_BASE.fulldump.this 2>&1 & |
1019 > $WORK_FILE_BASE.fulldump.this 2>&1 & |
1011 wait |
1020 wait |
1012 |
1021 |
1013 LC_ALL=C $DIFF $WORK_FILE_BASE.fulldump.other $WORK_FILE_BASE.fulldump.this \ |
1022 $DIFF $WORK_FILE_BASE.fulldump.other $WORK_FILE_BASE.fulldump.this \ |
1014 > $WORK_FILE_BASE.fulldump.diff |
1023 > $WORK_FILE_BASE.fulldump.diff |
1015 |
1024 |
1016 if [ -s $WORK_FILE_BASE.fulldump.diff ]; then |
1025 if [ -s $WORK_FILE_BASE.fulldump.diff ]; then |
1017 FULLDUMP_DIFF_SIZE=$(ls -n $WORK_FILE_BASE.fulldump.diff | awk '{print $5}') |
1026 FULLDUMP_DIFF_SIZE=$(ls -n $WORK_FILE_BASE.fulldump.diff | awk '{print $5}') |
1018 FULLDUMP_MSG=$($PRINTF "%8d" $FULLDUMP_DIFF_SIZE) |
1027 FULLDUMP_MSG=$($PRINTF "%8d" $FULLDUMP_DIFF_SIZE) |
1055 | eval "$this_DIS_DIFF_FILTER" > $WORK_FILE_BASE.dis.other 2>&1 & |
1064 | eval "$this_DIS_DIFF_FILTER" > $WORK_FILE_BASE.dis.other 2>&1 & |
1056 $DIS_CMD $THIS_FILE | $GREP $DIS_GREP_ARG -v $NAME \ |
1065 $DIS_CMD $THIS_FILE | $GREP $DIS_GREP_ARG -v $NAME \ |
1057 | eval "$this_DIS_DIFF_FILTER" > $WORK_FILE_BASE.dis.this 2>&1 & |
1066 | eval "$this_DIS_DIFF_FILTER" > $WORK_FILE_BASE.dis.this 2>&1 & |
1058 wait |
1067 wait |
1059 |
1068 |
1060 LC_ALL=C $DIFF $WORK_FILE_BASE.dis.other $WORK_FILE_BASE.dis.this > $WORK_FILE_BASE.dis.diff |
1069 $DIFF $WORK_FILE_BASE.dis.other $WORK_FILE_BASE.dis.this > $WORK_FILE_BASE.dis.diff |
1061 |
1070 |
1062 if [ -s $WORK_FILE_BASE.dis.diff ]; then |
1071 if [ -s $WORK_FILE_BASE.dis.diff ]; then |
1063 DIS_DIFF_SIZE=$(ls -n $WORK_FILE_BASE.dis.diff | awk '{print $5}') |
1072 DIS_DIFF_SIZE=$(ls -n $WORK_FILE_BASE.dis.diff | awk '{print $5}') |
1064 DIS_MSG=$($PRINTF "%8d" $DIS_DIFF_SIZE) |
1073 DIS_MSG=$($PRINTF "%8d" $DIS_DIFF_SIZE) |
1065 if [[ "$ACCEPTED_DIS_DIFF" != *"$BIN_FILE"* ]]; then |
1074 if [[ "$ACCEPTED_DIS_DIFF" != *"$BIN_FILE"* ]]; then |