1 #!/bin/bash 2 # 3 # Copyright (c) 2012, 2020, Oracle and/or its affiliates. All rights reserved. 4 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 5 # 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 8 # published by the Free Software Foundation. 9 # 10 # This code is distributed in the hope that it will be useful, but WITHOUT 11 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 13 # version 2 for more details (a copy is included in the LICENSE file that 14 # accompanied this code). 15 # 16 # You should have received a copy of the GNU General Public License version 17 # 2 along with this work; if not, write to the Free Software Foundation, 18 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 19 # 20 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 21 # or visit www.oracle.com if you need additional information or have any 22 # questions. 23 # 24 25 # This script is processed by configure before it's usable. It is run from 26 # the root of the build directory. 27 28 29 ################################################################################ 30 31 # Check that we are run via the wrapper generated by configure 32 if [ -z "$TOPDIR" ]; then 33 echo "Error: You must run this script using build/[conf]/compare.sh" 34 exit 1 35 fi 36 37 # Make sure all shell commands are executed with the C locale 38 export LC_ALL=C 39 40 if [ "$OPENJDK_TARGET_OS" = "macosx" ]; then 41 FULLDUMP_CMD="$OTOOL -v -V -h -X -d" 42 LDD_CMD="$OTOOL -L" 43 DIS_CMD="$OTOOL -v -V -t" 44 STAT_PRINT_SIZE="-f %z" 45 elif [ "$OPENJDK_TARGET_OS" = "windows" ]; then 46 FULLDUMP_CMD="$DUMPBIN -all" 47 LDD_CMD="$DUMPBIN -dependents" 48 DIS_CMD="$DUMPBIN -disasm:nobytes" 49 STAT_PRINT_SIZE="-c %s" 50 elif [ "$OPENJDK_TARGET_OS" = "aix" ]; then 51 FULLDUMP_CMD="dump -h -r -t -n -X64" 52 LDD_CMD="$LDD" 53 DIS_CMD="$OBJDUMP -d" 54 STAT_PRINT_SIZE="-c %s" 55 else 56 FULLDUMP_CMD="$READELF -a" 57 LDD_CMD="$LDD" 58 DIS_CMD="$OBJDUMP -d" 59 STAT_PRINT_SIZE="-c %s" 60 fi 61 62 COMPARE_EXCEPTIONS_INCLUDE="$TOPDIR/make/scripts/compare_exceptions.sh.incl" 63 if [ ! -e "$COMPARE_EXCEPTIONS_INCLUDE" ]; then 64 echo "Error: Cannot locate the exceptions file, it should have been here: $COMPARE_EXCEPTIONS_INCLUDE" 65 exit 1 66 fi 67 # Include exception definitions 68 . "$COMPARE_EXCEPTIONS_INCLUDE" 69 70 ################################################################################ 71 # 72 # Disassembly diff filters. These filters try to filter out ephemeral parts of the 73 # disassembly, such as hard-coded addresses, to be able to catch "actual" differences. 74 75 if [ "$OPENJDK_TARGET_OS" = "windows" ]; then 76 if [ "$OPENJDK_TARGET_CPU" = "x86" ]; then 77 DIS_DIFF_FILTER="$SED -r \ 78 -e 's/^ [0-9A-F]{16}: //' \ 79 -e 's/^ [0-9A-F]{8}: / <ADDR>: /' \ 80 -e 's/(offset \?\?)_C@_.*/\1<SYM>/' \ 81 -e 's/[@?][A-Za-z0-9_]{1,25}/<SYM>/' \ 82 -e 's/([-,+])[0-9A-F]{2,16}/\1<HEXSTR>/g' \ 83 -e 's/\[[0-9A-F]{4,16}h\]/[<HEXSTR>]/' \ 84 -e 's/: ([a-z]{2}[a-z ]{2}) [0-9A-F]{2,16}h?$/: \1 <HEXSTR>/' \ 85 -e 's/_20[0-9]{2}_[0-1][0-9]_[0-9]{2}/_<DATE>/' \ 86 " 87 elif [ "$OPENJDK_TARGET_CPU" = "x86_64" ]; then 88 DIS_DIFF_FILTER="$SED -r \ 89 -e 's/^ [0-9A-F]{16}: //' \ 90 -e 's/\[[0-9A-F]{4,16}h\]/[<HEXSTR>]/' \ 91 -e 's/([,+])[0-9A-F]{2,16}h/\1<HEXSTR>/' \ 92 -e 's/([a-z]{2}[a-z ]{2}) [0-9A-F]{4,16}$/\1 <HEXSTR>/' \ 93 -e 's/\[\?\?_C@_.*/[<SYM>]/' \ 94 " 95 fi 96 elif [ "$OPENJDK_TARGET_OS" = "macosx" ]; then 97 DIS_DIFF_FILTER="$SED \ 98 -e 's/0x[0-9a-f]\{3,16\}/<HEXSTR>/g' -e 's/^[0-9a-f]\{12,20\}/<ADDR>/' \ 99 -e 's/-20[0-9][0-9]-[0-1][0-9]-[0-3][0-9]-[0-2][0-9]\{5\}/<DATE>/g' \ 100 -e 's/), built on .*/), <DATE>/' \ 101 " 102 fi 103 104 ################################################################################ 105 # Compare text files and ignore specific differences: 106 # 107 # * Timestamps in Java sources generated by idl2java 108 # * Sorting order and cleanup style in .properties files 109 110 diff_text() { 111 OTHER_FILE=$1 112 THIS_FILE=$2 113 114 SUFFIX="${THIS_FILE##*.}" 115 NAME="${THIS_FILE##*/}" 116 117 TMP=1 118 119 if [[ "$THIS_FILE" = *"META-INF/MANIFEST.MF" ]]; then 120 # Filter out date string, ant version and java version differences. 121 TMP=$($DIFF $OTHER_FILE $THIS_FILE | \ 122 $GREP '^[<>]' | \ 123 $SED -e '/[<>] Ant-Version: Apache Ant .*/d' \ 124 -e '/[<>] Created-By: .* (Oracle [Corpatin)]*/d' \ 125 -e '/[<>] [Corpatin]*)/d' \ 126 -e '/[<>].*[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}-b[0-9]\{2\}.*/d') 127 fi 128 if test "x$SUFFIX" = "xjava"; then 129 TMP=$($DIFF $OTHER_FILE $THIS_FILE | \ 130 $GREP '^[<>]' | \ 131 $SED -e '/[<>] \* from.*\.idl/d' \ 132 -e '/[<>] .*[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}-b[0-9]\{2\}.*/d' \ 133 -e '/[<>] .*[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}-[0-9]\{6\}.*/d' \ 134 -e '/[<>] \*.*[0-9]\{4\} \(at \)*[0-9][0-9]*:[0-9]\{2\}:[0-9]\{2\}.*/d' \ 135 -e '/\/\/ Generated from input file.*/d' \ 136 -e '/\/\/ This file was generated AUTOMATICALLY from a template file.*/d' \ 137 -e '/\/\/ java GenerateCharacter.*/d') 138 fi 139 # Ignore date strings in class files. 140 # Anonymous lambda classes get randomly assigned counters in their names. 141 if test "x$SUFFIX" = "xclass"; then 142 if [ "$NAME" = "SystemModules\$all.class" ] \ 143 || [ "$NAME" = "SystemModules\$default.class" ]; then 144 # The SystemModules\$*.classes are not comparable as they contain the 145 # module hashes which would require a whole other level of 146 # reproducible builds to get reproducible. There is also random 147 # order of map initialization. 148 TMP="" 149 elif [ "$NAME" = "module-info.class" ]; then 150 # The module-info.class have several issues with random ordering of 151 # elements in HashSets. 152 MODULES_CLASS_FILTER="$SED \ 153 -e 's/,$//' \ 154 -e 's/;$//' \ 155 -e 's/^ *[0-9]*://' \ 156 -e 's/#[0-9]* */#/' \ 157 -e 's/ *\/\// \/\//' \ 158 -e 's/aload *[0-9]*/aload X/' \ 159 -e 's/ldc_w/ldc /' \ 160 | $SORT \ 161 " 162 $JAVAP -c -constants -l -p "${OTHER_FILE}" \ 163 | eval "$MODULES_CLASS_FILTER" > ${OTHER_FILE}.javap & 164 $JAVAP -c -constants -l -p "${THIS_FILE}" \ 165 | eval "$MODULES_CLASS_FILTER" > ${THIS_FILE}.javap & 166 wait 167 TMP=$($DIFF ${OTHER_FILE}.javap ${THIS_FILE}.javap) 168 # To improve performance when large diffs are found, do a rough filtering of classes 169 # elibeble for these exceptions 170 elif $GREP -R -e '[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}-[0-9]\{6\}' \ 171 -e 'lambda\$[a-zA-Z0-9]*\$[0-9]' ${THIS_FILE} > /dev/null 172 then 173 $JAVAP -c -constants -l -p "${OTHER_FILE}" > ${OTHER_FILE}.javap & 174 $JAVAP -c -constants -l -p "${THIS_FILE}" > ${THIS_FILE}.javap & 175 wait 176 TMP=$($DIFF ${OTHER_FILE}.javap ${THIS_FILE}.javap | \ 177 $GREP '^[<>]' | \ 178 $SED -e '/[<>].*[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}-[0-9]\{6\}.*/d' \ 179 -e '/[<>].*lambda\$[a-zA-Z0-9]*\$[0-9]*/d') 180 fi 181 fi 182 if test "x$SUFFIX" = "xproperties"; then 183 # Filter out date string differences. 184 TMP=$($DIFF $OTHER_FILE $THIS_FILE | \ 185 $GREP '^[<>]' | \ 186 $SED -e '/[<>].*[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}-[0-9]\{6\}.*/d') 187 fi 188 if test "x$SUFFIX" = "xhtml"; then 189 # Some javadoc versions do not put quotes around font size 190 HTML_FILTER="$SED \ 191 -e 's/<font size=-1>/<font size=\"-1\">/g'" 192 $CAT $THIS_FILE | eval "$HTML_FILTER" > $THIS_FILE.filtered 193 $CAT $OTHER_FILE | eval "$HTML_FILTER" > $OTHER_FILE.filtered 194 TMP=$($DIFF $OTHER_FILE.filtered $THIS_FILE.filtered | \ 195 $GREP '^[<>]' | \ 196 $SED -e '/[<>] <!-- Generated by javadoc .* on .* -->/d' \ 197 -e '/[<>] <meta name="date" content=".*">/d' ) 198 fi 199 if test "$NAME" = "BenchmarkList"; then 200 $SORT $THIS_FILE > $THIS_FILE.sorted 201 $SORT $OTHER_FILE > $OTHER_FILE.sorted 202 TMP=$($DIFF $THIS_FILE.sorted $OTHER_FILE.sorted) 203 fi 204 if test -n "$TMP"; then 205 echo Files $OTHER_FILE and $THIS_FILE differ 206 return 1 207 fi 208 209 return 0 210 } 211 212 ################################################################################ 213 # Compare directory structure 214 215 compare_dirs() { 216 THIS_DIR=$1 217 OTHER_DIR=$2 218 WORK_DIR=$3 219 220 mkdir -p $WORK_DIR 221 222 (cd $OTHER_DIR && $FIND . -type d | $SORT > $WORK_DIR/dirs_other) 223 (cd $THIS_DIR && $FIND . -type d | $SORT > $WORK_DIR/dirs_this) 224 225 $DIFF $WORK_DIR/dirs_other $WORK_DIR/dirs_this > $WORK_DIR/dirs_diff 226 227 echo -n Directory structure... 228 if [ -s $WORK_DIR/dirs_diff ]; then 229 echo Differences found. 230 REGRESSIONS=true 231 # Differences in directories found. 232 ONLY_OTHER=$($GREP '<' $WORK_DIR/dirs_diff) 233 if [ "$ONLY_OTHER" ]; then 234 echo Only in $OTHER 235 $GREP '<' $WORK_DIR/dirs_diff | $SED 's|< ./| |g' 236 fi 237 ONLY_THIS=$($GREP '>' $WORK_DIR/dirs_diff) 238 if [ "$ONLY_THIS" ]; then 239 echo Only in $THIS 240 $GREP '>' $WORK_DIR/dirs_diff | $SED 's|> ./| |g' 241 fi 242 else 243 echo Identical! 244 fi 245 } 246 247 248 ################################################################################ 249 # Compare file structure 250 251 compare_files() { 252 THIS_DIR=$1 253 OTHER_DIR=$2 254 WORK_DIR=$3 255 256 $MKDIR -p $WORK_DIR 257 258 (cd $OTHER_DIR && $FIND . ! -type d | $SORT > $WORK_DIR/files_other) 259 (cd $THIS_DIR && $FIND . ! -type d | $SORT > $WORK_DIR/files_this) 260 261 $DIFF $WORK_DIR/files_other $WORK_DIR/files_this > $WORK_DIR/files_diff 262 263 echo -n File names... 264 if [ -s $WORK_DIR/files_diff ]; then 265 echo Differences found. 266 REGRESSIONS=true 267 # Differences in files found. 268 ONLY_OTHER=$($GREP '<' $WORK_DIR/files_diff) 269 if [ "$ONLY_OTHER" ]; then 270 echo Only in $OTHER 271 $GREP '<' $WORK_DIR/files_diff | $SED 's|< ./| |g' 272 fi 273 ONLY_THIS=$($GREP '>' $WORK_DIR/files_diff) 274 if [ "$ONLY_THIS" ]; then 275 echo Only in $THIS 276 $GREP '>' $WORK_DIR/files_diff | $SED 's|> ./| |g' 277 fi 278 else 279 echo Identical! 280 fi 281 } 282 283 284 ################################################################################ 285 # Compare permissions 286 287 compare_permissions() { 288 THIS_DIR=$1 289 OTHER_DIR=$2 290 WORK_DIR=$3 291 292 mkdir -p $WORK_DIR 293 294 echo -n Permissions... 295 found="" 296 for f in `cd $OTHER_DIR && $FIND . -type f` 297 do 298 if [ ! -f ${OTHER_DIR}/$f ]; then continue; fi 299 if [ ! -f ${THIS_DIR}/$f ]; then continue; fi 300 OP=`ls -l ${OTHER_DIR}/$f | awk '{printf("%.10s\n", $1);}'` 301 TP=`ls -l ${THIS_DIR}/$f | awk '{printf("%.10s\n", $1);}'` 302 if [ "$OP" != "$TP" ] 303 then 304 if [ -z "$found" ]; then echo ; found="yes"; fi 305 $PRINTF "\tother: ${OP} this: ${TP}\t$f\n" 306 fi 307 done 308 if [ -z "$found" ]; then 309 echo "Identical!" 310 else 311 REGRESSIONS=true 312 fi 313 } 314 315 ################################################################################ 316 # Compare file command output 317 318 compare_file_types() { 319 THIS_DIR=$1 320 OTHER_DIR=$2 321 WORK_DIR=$3 322 323 $MKDIR -p $WORK_DIR 324 325 FILE_TYPES_FILTER="$SED \ 326 -e 's/BuildID[^,]*//' \ 327 -e 's/last modified: .*//' \ 328 " 329 330 echo -n File types... 331 found="" 332 # The file command does not know about jmod files and this sometimes results 333 # in different types being detected more or less randomly. 334 for f in $(cd $OTHER_DIR && $FIND . ! -type d -a ! -name "*.jmod") 335 do 336 if [ ! -f ${OTHER_DIR}/$f ]; then continue; fi 337 if [ ! -f ${THIS_DIR}/$f ]; then continue; fi 338 OF=$(cd ${OTHER_DIR} && $FILE -h $f | eval $FILE_TYPES_FILTER) 339 TF=$(cd ${THIS_DIR} && $FILE -h $f | eval $FILE_TYPES_FILTER) 340 if [ "$OF" != "$TF" ] 341 then 342 if [ "`echo $OF | $GREP -c 'Zip archive data'`" -gt 0 ] \ 343 && [ "`echo $TF | $GREP -c 'Zip archive data'`" -gt 0 ] 344 then 345 # the way we produce zip-files make it so that directories are stored in 346 # old file but not in new (only files with full-path) this makes file 347 # report them as different 348 continue 349 elif [ "`echo $OF | $GREP -c 'MSVC program database ver 7.00'`" -gt 0 ] \ 350 && [ "`echo $TF | $GREP -c 'MSVC program database ver 7.00'`" -gt 0 ] 351 then 352 # For Windows pdb files the file command reports some kind of size data 353 # which may sometimes come out randomly different. 354 continue 355 else 356 if [ -z "$found" ]; then echo ; found="yes"; fi 357 $PRINTF "\tother: ${OF}\n\tthis : ${TF}\n" 358 fi 359 fi 360 done 361 if [ -z "$found" ]; then 362 echo "Identical!" 363 else 364 REGRESSIONS=true 365 fi 366 } 367 368 ################################################################################ 369 # Compare the rest of the files 370 371 compare_general_files() { 372 THIS_DIR=$1 373 OTHER_DIR=$2 374 WORK_DIR=$3 375 376 GENERAL_FILES=$(cd $THIS_DIR && $FIND . -type f ! -name "*.so" ! -name "*.jar" \ 377 ! -name "*.zip" ! -name "*.debuginfo" ! -name "*.dylib" ! -name "jexec" \ 378 ! -name "modules" ! -name "ct.sym" ! -name "*.diz" ! -name "*.dll" \ 379 ! -name "*.cpl" ! -name "*.pdb" ! -name "*.exp" ! -name "*.ilk" \ 380 ! -name "*.lib" ! -name "*.war" ! -name "*.jmod" ! -name "*.exe" \ 381 ! -name "*.obj" ! -name "*.o" ! -name "jspawnhelper" ! -name "*.a" \ 382 ! -name "*.tar.gz" ! -name "classes.jsa" ! -name "gtestLauncher" \ 383 ! -name "*.map" \ 384 | $GREP -v "./bin/" | $SORT | $FILTER) 385 386 echo Other files with binary differences... 387 for f in $GENERAL_FILES 388 do 389 # Skip all files in test/*/native 390 if [[ "$f" == */native/* ]]; then 391 continue 392 fi 393 if [ -e $OTHER_DIR/$f ]; then 394 SUFFIX="${f##*.}" 395 if [ "$(basename $f)" = "release" ]; then 396 # In release file, ignore differences in change numbers and order 397 # of modules in list. 398 OTHER_FILE=$WORK_DIR/$f.other 399 THIS_FILE=$WORK_DIR/$f.this 400 $MKDIR -p $(dirname $OTHER_FILE) 401 $MKDIR -p $(dirname $THIS_FILE) 402 RELEASE_FILTER="$SED \ 403 -e 's/\:[0-9a-f]\{12,12\}/:CHANGE/g' \ 404 -e 's/[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}-[0-9]\{6\}/<DATE>/g' \ 405 -e 's/^#.*/#COMMENT/g' \ 406 -e 's/MODULES=/MODULES=\'$'\n/' \ 407 -e 's/,/\'$'\n/g' \ 408 | $SORT 409 " 410 $CAT $OTHER_DIR/$f | eval "$RELEASE_FILTER" > $OTHER_FILE 411 $CAT $THIS_DIR/$f | eval "$RELEASE_FILTER" > $THIS_FILE 412 elif [ "x$SUFFIX" = "xhtml" ]; then 413 # Ignore time stamps in docs files 414 OTHER_FILE=$WORK_DIR/$f.other 415 THIS_FILE=$WORK_DIR/$f.this 416 $MKDIR -p $(dirname $OTHER_FILE) $(dirname $THIS_FILE) 417 # Older versions of compare might have left soft links with 418 # these names. 419 $RM $OTHER_FILE $THIS_FILE 420 #Note that | doesn't work on mac sed. 421 HTML_FILTER="$SED \ 422 -e 's/20[0-9]\{2\}-[0-9]\{2\}-[0-9]\{2\}-[0-9]\{6,7\}/<DATE>/g' \ 423 -e 's/20[0-9]\{2\}-[0-9]\{2\}-[0-9]\{2\}/<DATE>/g' \ 424 -e 's/\(-- Generated by javadoc \).*\( --\)/\1(removed)\2/' \ 425 -e 's/[A-Z][a-z]*, [A-Z][a-z]* [0-9][0-9]*, [0-9]\{4\} [0-9][0-9:]* [AMP]\{2,2\} [A-Z][A-Z]*/<DATE>/' \ 426 -e 's/from .*\.idl/\.idl/' \ 427 " 428 $CAT $OTHER_DIR/$f | eval "$HTML_FILTER" > $OTHER_FILE & 429 $CAT $THIS_DIR/$f | eval "$HTML_FILTER" > $THIS_FILE & 430 wait 431 elif [ "$SUFFIX" = "svg" ]; then 432 # GraphViz has non-determinism when generating svg files 433 OTHER_FILE=$WORK_DIR/$f.other 434 THIS_FILE=$WORK_DIR/$f.this 435 $MKDIR -p $(dirname $OTHER_FILE) $(dirname $THIS_FILE) 436 SVG_FILTER="$SED \ 437 -e 's/edge[0-9][0-9]*/edgeX/g' 438 " 439 $CAT $OTHER_DIR/$f | eval "$SVG_FILTER" > $OTHER_FILE 440 $CAT $THIS_DIR/$f | eval "$SVG_FILTER" > $THIS_FILE 441 elif [[ "$f" = *"/lib/classlist" ]] || [ "$SUFFIX" = "jar_contents" ]; then 442 # The classlist files may have some lines in random order 443 OTHER_FILE=$WORK_DIR/$f.other 444 THIS_FILE=$WORK_DIR/$f.this 445 $MKDIR -p $(dirname $OTHER_FILE) $(dirname $THIS_FILE) 446 $RM $OTHER_FILE $THIS_FILE 447 $CAT $OTHER_DIR/$f | $SORT > $OTHER_FILE 448 $CAT $THIS_DIR/$f | $SORT > $THIS_FILE 449 else 450 OTHER_FILE=$OTHER_DIR/$f 451 THIS_FILE=$THIS_DIR/$f 452 fi 453 DIFF_OUT=$($DIFF $OTHER_FILE $THIS_FILE 2>&1) 454 if [ -n "$DIFF_OUT" ]; then 455 echo $f 456 REGRESSIONS=true 457 if [ "$SHOW_DIFFS" = "true" ]; then 458 echo "$DIFF_OUT" 459 fi 460 fi 461 fi 462 done 463 464 465 } 466 467 ################################################################################ 468 # Compare zip file 469 470 compare_zip_file() { 471 THIS_DIR=$1 472 OTHER_DIR=$2 473 WORK_DIR=$3 474 ZIP_FILE=$4 475 # Optionally provide different name for other zipfile 476 OTHER_ZIP_FILE=$5 477 478 THIS_ZIP=$THIS_DIR/$ZIP_FILE 479 if [ -n "$OTHER_ZIP_FILE" ]; then 480 OTHER_ZIP=$OTHER_DIR/$OTHER_ZIP_FILE 481 else 482 OTHER_ZIP=$OTHER_DIR/$ZIP_FILE 483 fi 484 485 THIS_SUFFIX="${THIS_ZIP##*.}" 486 OTHER_SUFFIX="${OTHER_ZIP##*.}" 487 if [ "$THIS_SUFFIX" != "$OTHER_SUFFIX" ]; then 488 echo "The files do not have the same suffix type! ($THIS_SUFFIX != $OTHER_SUFFIX)" 489 return 2 490 fi 491 492 TYPE="$THIS_SUFFIX" 493 494 if $CMP $OTHER_ZIP $THIS_ZIP > /dev/null 495 then 496 return 0 497 fi 498 # Not quite identical, the might still contain the same data. 499 # Unpack the jar/zip files in temp dirs 500 501 THIS_UNZIPDIR=$WORK_DIR/$ZIP_FILE.this 502 OTHER_UNZIPDIR=$WORK_DIR/$ZIP_FILE.other 503 $RM -rf $THIS_UNZIPDIR $OTHER_UNZIPDIR 504 $MKDIR -p $THIS_UNZIPDIR 505 $MKDIR -p $OTHER_UNZIPDIR 506 if [ "$TYPE" = "jar" -o "$TYPE" = "war" -o "$TYPE" = "zip" ] 507 then 508 (cd $THIS_UNZIPDIR && $UNARCHIVE $THIS_ZIP) 509 (cd $OTHER_UNZIPDIR && $UNARCHIVE $OTHER_ZIP) 510 elif [ "$TYPE" = "gz" ] 511 then 512 (cd $THIS_UNZIPDIR && $GUNZIP -c $THIS_ZIP | $TAR xf -) 513 (cd $OTHER_UNZIPDIR && $GUNZIP -c $OTHER_ZIP | $TAR xf -) 514 elif [ "$TYPE" = "jmod" ] 515 then 516 (cd $THIS_UNZIPDIR && $JMOD extract $THIS_ZIP) 517 (cd $OTHER_UNZIPDIR && $JMOD extract $OTHER_ZIP) 518 else 519 (cd $THIS_UNZIPDIR && $JIMAGE extract $THIS_ZIP) 520 (cd $OTHER_UNZIPDIR && $JIMAGE extract $OTHER_ZIP) 521 fi 522 523 CONTENTS_DIFF_FILE=$WORK_DIR/$ZIP_FILE.diff 524 $DIFF -rq $OTHER_UNZIPDIR $THIS_UNZIPDIR > $CONTENTS_DIFF_FILE 525 526 ONLY_OTHER=$($GREP "^Only in $OTHER_UNZIPDIR" $CONTENTS_DIFF_FILE) 527 ONLY_THIS=$($GREP "^Only in $THIS_UNZIPDIR" $CONTENTS_DIFF_FILE) 528 529 return_value=0 530 531 if [ -n "$ONLY_OTHER" ]; then 532 echo " Only OTHER $ZIP_FILE contains:" 533 echo "$ONLY_OTHER" | sed "s|Only in $OTHER_UNZIPDIR| |"g | sed 's|: |/|g' 534 return_value=1 535 fi 536 537 if [ -n "$ONLY_THIS" ]; then 538 echo " Only THIS $ZIP_FILE contains:" 539 echo "$ONLY_THIS" | sed "s|Only in $THIS_UNZIPDIR| |"g | sed 's|: |/|g' 540 return_value=1 541 fi 542 543 if [ "$CMP_ZIPS_CONTENTS" = "true" ]; then 544 DIFFING_FILES=$($GREP -e "differ$" $CONTENTS_DIFF_FILE \ 545 | $CUT -f 2 -d ' ' | $SED "s|$OTHER_UNZIPDIR/||g") 546 547 # Separate executable/library files from other files in zip. 548 DIFFING_TEXT_FILES= 549 DIFFING_EXEC_FILES= 550 for file in $DIFFING_FILES; do 551 SUFFIX="${file##*.}" 552 if [ "$SUFFIX" = "exe" -o "$SUFFIX" = "dll" -o "$SUFFIX" = "so" \ 553 -o "$SUFFIX" = "dylib" ]; then 554 DIFFING_EXEC_FILES="$DIFFING_EXEC_FILES $file" 555 else 556 DIFFING_TEXT_FILES="$DIFFING_TEXT_FILES $file" 557 fi 558 done 559 560 $RM -f $WORK_DIR/$ZIP_FILE.diffs 561 for file in $DIFFING_TEXT_FILES; do 562 if [[ "$ACCEPTED_JARZIP_CONTENTS $EXCEPTIONS" != *"$file"* ]]; then 563 diff_text $OTHER_UNZIPDIR/$file $THIS_UNZIPDIR/$file >> $WORK_DIR/$ZIP_FILE.diffs 564 fi 565 done 566 567 if [ -s "$WORK_DIR/$ZIP_FILE.diffs" ]; then 568 return_value=1 569 echo " Differing files in $ZIP_FILE" 570 $CAT $WORK_DIR/$ZIP_FILE.diffs | $GREP 'differ$' | cut -f 2 -d ' ' | \ 571 $SED "s|$OTHER_UNZIPDIR| |g" > $WORK_DIR/$ZIP_FILE.difflist 572 $CAT $WORK_DIR/$ZIP_FILE.difflist 573 574 if [ -n "$SHOW_DIFFS" ]; then 575 for i in $(cat $WORK_DIR/$ZIP_FILE.difflist) ; do 576 if [ -f "${OTHER_UNZIPDIR}/$i.javap" ]; then 577 $DIFF ${OTHER_UNZIPDIR}/$i.javap ${THIS_UNZIPDIR}/$i.javap 578 elif [ -f "${OTHER_UNZIPDIR}/$i.cleaned" ]; then 579 $DIFF ${OTHER_UNZIPDIR}/$i.cleaned ${THIS_UNZIPDIR}/$i 580 else 581 $DIFF ${OTHER_UNZIPDIR}/$i ${THIS_UNZIPDIR}/$i 582 fi 583 done 584 fi 585 fi 586 587 # Use the compare_bin_file function for comparing the executable files. 588 for file in $DIFFING_EXEC_FILES; do 589 compare_bin_file $THIS_UNZIPDIR $OTHER_UNZIPDIR $WORK_DIR/$ZIP_FILE.bin \ 590 $file 591 if [ "$?" != "0" ]; then 592 return_value=1 593 fi 594 done 595 fi 596 597 return $return_value 598 } 599 600 ################################################################################ 601 # Compare jmod file 602 603 compare_jmod_file() { 604 THIS_DIR=$1 605 OTHER_DIR=$2 606 WORK_DIR=$3 607 JMOD_FILE=$4 608 609 THIS_JMOD=$THIS_DIR/$JMOD_FILE 610 OTHER_JMOD=$OTHER_DIR/$JMOD_FILE 611 612 if $CMP $OTHER_JMOD $THIS_JMOD > /dev/null; then 613 return 0 614 fi 615 616 THIS_JMOD_LIST=$WORK_DIR/$JMOD_FILE.list.this 617 OTHER_JMOD_LIST=$WORK_DIR/$JMOD_FILE.list.other 618 mkdir -p $(dirname $THIS_JMOD_LIST) $(dirname $OTHER_JMOD_LIST) 619 620 $JMOD list $THIS_JMOD | sort > $THIS_JMOD_LIST 621 $JMOD list $OTHER_JMOD | sort > $OTHER_JMOD_LIST 622 JMOD_LIST_DIFF_FILE=$WORK_DIR/$JMOD_FILE.list.diff 623 $DIFF $THIS_JMOD_LIST $OTHER_JMOD_LIST > $JMOD_LIST_DIFF_FILE 624 625 ONLY_THIS=$($GREP "^<" $JMOD_LIST_DIFF_FILE) 626 ONLY_OTHER=$($GREP "^>" $JMOD_LIST_DIFF_FILE) 627 628 if [ -n "$ONLY_OTHER" ]; then 629 echo " Only OTHER $JMOD_FILE contains:" 630 echo "$ONLY_OTHER" | sed "s|^>| |"g | sed 's|: |/|g' 631 return_value=1 632 fi 633 634 if [ -n "$ONLY_THIS" ]; then 635 echo " Only THIS $JMOD_FILE contains:" 636 echo "$ONLY_THIS" | sed "s|^<| |"g | sed 's|: |/|g' 637 return_value=1 638 fi 639 640 return $return_value 641 } 642 643 ################################################################################ 644 # Compare all zip files 645 646 compare_all_zip_files() { 647 THIS_DIR=$1 648 OTHER_DIR=$2 649 WORK_DIR=$3 650 651 ZIPS=$(cd $THIS_DIR && $FIND . -type f -name "*.zip" -o -name "*.tar.gz" \ 652 | $SORT | $FILTER ) 653 654 if [ -n "$ZIPS" ]; then 655 echo Zip/tar.gz files... 656 657 return_value=0 658 for f in $ZIPS; do 659 if [ -f "$OTHER_DIR/$f" ]; then 660 compare_zip_file $THIS_DIR $OTHER_DIR $WORK_DIR $f 661 if [ "$?" != "0" ]; then 662 return_value=1 663 REGRESSIONS=true 664 fi 665 fi 666 done 667 fi 668 669 return $return_value 670 } 671 672 ################################################################################ 673 # Compare all jmod files 674 675 compare_all_jmod_files() { 676 THIS_DIR=$1 677 OTHER_DIR=$2 678 WORK_DIR=$3 679 680 JMODS=$(cd $THIS_DIR && $FIND . -type f -name "*.jmod" | $SORT | $FILTER ) 681 682 if [ -n "$JMODS" ]; then 683 echo Jmod files... 684 685 return_value=0 686 for f in $JMODS; do 687 if [ -f "$OTHER_DIR/$f" ]; then 688 compare_jmod_file $THIS_DIR $OTHER_DIR $WORK_DIR $f 689 if [ "$?" != "0" ]; then 690 return_value=1 691 REGRESSIONS=true 692 fi 693 fi 694 done 695 fi 696 697 return $return_value 698 } 699 700 ################################################################################ 701 # Compare all jar files 702 703 compare_all_jar_files() { 704 THIS_DIR=$1 705 OTHER_DIR=$2 706 WORK_DIR=$3 707 708 # TODO filter? 709 ZIPS=$(cd $THIS_DIR && $FIND . -type f -name "*.jar" -o -name "*.war" \ 710 -o -name "modules" | $SORT | $FILTER) 711 712 if [ -n "$ZIPS" ]; then 713 echo Jar files... 714 715 return_value=0 716 for f in $ZIPS; do 717 if [ -f "$OTHER_DIR/$f" ]; then 718 compare_zip_file $THIS_DIR $OTHER_DIR $WORK_DIR $f 719 if [ "$?" != "0" ]; then 720 return_value=1 721 REGRESSIONS=true 722 fi 723 fi 724 done 725 fi 726 727 return $return_value 728 } 729 730 ################################################################################ 731 # Compare binary (executable/library) file 732 733 compare_bin_file() { 734 THIS_DIR=$1 735 OTHER_DIR=$2 736 WORK_DIR=$3 737 BIN_FILE=$4 738 OTHER_BIN_FILE=$5 739 740 THIS_FILE=$THIS_DIR/$BIN_FILE 741 if [ -n "$OTHER_BIN_FILE" ]; then 742 OTHER_FILE=$OTHER_DIR/$OTHER_BIN_FILE 743 else 744 OTHER_FILE=$OTHER_DIR/$BIN_FILE 745 fi 746 NAME=$(basename $BIN_FILE) 747 WORK_FILE_BASE=$WORK_DIR/$BIN_FILE 748 FILE_WORK_DIR=$(dirname $WORK_FILE_BASE) 749 750 $MKDIR -p $FILE_WORK_DIR 751 752 # Make soft links to original files from work dir to facilitate debugging 753 $LN -f -s $THIS_FILE $WORK_FILE_BASE.this 754 $LN -f -s $OTHER_FILE $WORK_FILE_BASE.other 755 756 ORIG_THIS_FILE="$THIS_FILE" 757 ORIG_OTHER_FILE="$OTHER_FILE" 758 759 if [ "$STRIP_ALL" = "true" ] || [[ "$STRIP_BEFORE_COMPARE" = *"$BIN_FILE"* ]]; then 760 THIS_STRIPPED_FILE=$FILE_WORK_DIR/this/$NAME 761 OTHER_STRIPPED_FILE=$FILE_WORK_DIR/other/$NAME 762 $MKDIR -p $FILE_WORK_DIR/this $FILE_WORK_DIR/other 763 $CP $THIS_FILE $THIS_STRIPPED_FILE 764 $CP $OTHER_FILE $OTHER_STRIPPED_FILE 765 $STRIP $THIS_STRIPPED_FILE 766 $STRIP $OTHER_STRIPPED_FILE 767 THIS_FILE="$THIS_STRIPPED_FILE" 768 OTHER_FILE="$OTHER_STRIPPED_FILE" 769 fi 770 771 if [ "$OPENJDK_TARGET_OS" = "windows" ]; then 772 unset _NT_SYMBOL_PATH 773 if [ "$(uname -o)" = "Cygwin" ]; then 774 THIS=$(cygpath -msa $THIS) 775 OTHER=$(cygpath -msa $OTHER) 776 fi 777 # Build an _NT_SYMBOL_PATH that contains all known locations for 778 # pdb files. 779 PDB_DIRS="$(ls -d \ 780 {$OTHER,$THIS}/support/modules_{cmds,libs}/{*,*/*} \ 781 {$OTHER,$THIS}/support/native/jdk.incubator.jpackage/* \ 782 )" 783 export _NT_SYMBOL_PATH="$(echo $PDB_DIRS | tr ' ' ';')" 784 fi 785 786 if cmp $OTHER_FILE $THIS_FILE > /dev/null; then 787 # The files were bytewise identical. 788 if [ -n "$VERBOSE" ]; then 789 echo " : : : : : : $BIN_FILE" 790 fi 791 return 0 792 fi 793 if [ -z "$SKIP_BIN_DIFF" ]; then 794 BIN_MSG=" diff " 795 if [[ "$ACCEPTED_BIN_DIFF" != *"$BIN_FILE"* ]]; then 796 DIFF_BIN=true 797 if [[ "$KNOWN_BIN_DIFF" != *"$BIN_FILE"* ]]; then 798 BIN_MSG="*$BIN_MSG*" 799 REGRESSIONS=true 800 else 801 BIN_MSG=" $BIN_MSG " 802 fi 803 else 804 BIN_MSG="($BIN_MSG)" 805 DIFF_BIN= 806 fi 807 else 808 BIN_MSG= 809 DIFF_BIN= 810 fi 811 812 if [ -n "$STAT" ]; then 813 THIS_SIZE=$($STAT $STAT_PRINT_SIZE "$THIS_FILE") 814 OTHER_SIZE=$($STAT $STAT_PRINT_SIZE "$OTHER_FILE") 815 else 816 THIS_SIZE=$(ls -l "$THIS_FILE" | awk '{ print $5 }') 817 OTHER_SIZE=$(ls -l "$OTHER_FILE" | awk '{ print $5 }') 818 fi 819 if [ $THIS_SIZE -ne $OTHER_SIZE ]; then 820 DIFF_SIZE_NUM=$($EXPR $THIS_SIZE - $OTHER_SIZE) 821 DIFF_SIZE_REL=$($EXPR $THIS_SIZE \* 100 / $OTHER_SIZE) 822 SIZE_MSG=$($PRINTF "%3d%% %4d" $DIFF_SIZE_REL $DIFF_SIZE_NUM) 823 if [[ "$ACCEPTED_SMALL_SIZE_DIFF" = *"$BIN_FILE"* || "$ACCEPTED_SMALL_SIZE_DIFF" = "true" ]] \ 824 && [ "$DIFF_SIZE_REL" -gt 98 ] \ 825 && [ "$DIFF_SIZE_REL" -lt 102 ]; then 826 SIZE_MSG="($SIZE_MSG)" 827 DIFF_SIZE= 828 elif [ "$OPENJDK_TARGET_OS" = "windows" ] \ 829 && [[ "$ACCEPTED_SMALL_SIZE_DIFF" = *"$BIN_FILE"* ]] \ 830 && [ "$DIFF_SIZE_NUM" = 512 ]; then 831 # On windows, size of binaries increase in 512 increments. 832 SIZE_MSG="($SIZE_MSG)" 833 DIFF_SIZE= 834 elif [ "$OPENJDK_TARGET_OS" = "windows" ] \ 835 && [[ "$ACCEPTED_SMALL_SIZE_DIFF" = *"$BIN_FILE"* ]] \ 836 && [ "$DIFF_SIZE_NUM" = -512 ]; then 837 # On windows, size of binaries increase in 512 increments. 838 SIZE_MSG="($SIZE_MSG)" 839 DIFF_SIZE= 840 else 841 if [[ "$ACCEPTED_SIZE_DIFF" != *"$BIN_FILE"* ]]; then 842 DIFF_SIZE=true 843 if [[ "$KNOWN_SIZE_DIFF" != *"$BIN_FILE"* ]]; then 844 SIZE_MSG="*$SIZE_MSG*" 845 REGRESSIONS=true 846 else 847 SIZE_MSG=" $SIZE_MSG " 848 fi 849 else 850 SIZE_MSG="($SIZE_MSG)" 851 DIFF_SIZE= 852 fi 853 fi 854 else 855 SIZE_MSG=" " 856 DIFF_SIZE= 857 if [[ "$KNOWN_SIZE_DIFF $ACCEPTED_SIZE_DIFF" = *"$BIN_FILE"* ]]; then 858 SIZE_MSG=" ! " 859 fi 860 fi 861 862 if [ "$SORT_ALL_SYMBOLS" = "true" ] || [[ "$SORT_SYMBOLS" = *"$BIN_FILE"* ]]; then 863 SYM_SORT_CMD="sort" 864 else 865 SYM_SORT_CMD="cat" 866 fi 867 868 if [ -n "$SYMBOLS_DIFF_FILTER" ] && [ -z "$NEED_SYMBOLS_DIFF_FILTER" ] \ 869 || [[ "$NEED_SYMBOLS_DIFF_FILTER" = *"$BIN_FILE"* ]]; then 870 this_SYMBOLS_DIFF_FILTER="$SYMBOLS_DIFF_FILTER" 871 else 872 this_SYMBOLS_DIFF_FILTER="$CAT" 873 fi 874 875 # Check symbols 876 if [ "$OPENJDK_TARGET_OS" = "windows" ]; then 877 # The output from dumpbin on windows differs depending on if the debug symbol 878 # files are still around at the location the binary is pointing too. Need 879 # to filter out that extra information. 880 $DUMPBIN -exports $OTHER_FILE | $GREP -E '^ +[0-9A-F]+ +[0-9A-F]+ [0-9A-F]+' | sed 's/ = .*//g' | cut -c27- | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.other 881 $DUMPBIN -exports $THIS_FILE | $GREP -E '^ +[0-9A-F]+ +[0-9A-F]+ [0-9A-F]+' | sed 's/ = .*//g' | cut -c27- | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.this 882 elif [ "$OPENJDK_TARGET_OS" = "aix" ]; then 883 $OBJDUMP -T $ORIG_OTHER_FILE 2> /dev/null | $GREP -v $NAME | $AWK '{print $2, $3, $4, $5}' | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.other 884 $OBJDUMP -T $ORIG_THIS_FILE 2> /dev/null | $GREP -v $NAME | $AWK '{print $2, $3, $4, $5}' | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.this 885 elif [ "$OPENJDK_TARGET_OS" = "macosx" ]; then 886 $NM -j $ORIG_OTHER_FILE 2> /dev/null | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.other 887 $NM -j $ORIG_THIS_FILE 2> /dev/null | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.this 888 else 889 $NM -a $ORIG_OTHER_FILE 2> /dev/null | $GREP -v $NAME \ 890 | $AWK '{print $2, $3, $4, $5}' \ 891 | eval "$this_SYMBOLS_DIFF_FILTER" \ 892 | $SYM_SORT_CMD \ 893 > $WORK_FILE_BASE.symbols.other 894 $NM -a $ORIG_THIS_FILE 2> /dev/null | $GREP -v $NAME \ 895 | $AWK '{print $2, $3, $4, $5}' \ 896 | eval "$this_SYMBOLS_DIFF_FILTER" \ 897 | $SYM_SORT_CMD \ 898 > $WORK_FILE_BASE.symbols.this 899 fi 900 901 $DIFF $WORK_FILE_BASE.symbols.other $WORK_FILE_BASE.symbols.this > $WORK_FILE_BASE.symbols.diff 902 if [ -s $WORK_FILE_BASE.symbols.diff ]; then 903 SYM_MSG=" diff " 904 if [[ "$ACCEPTED_SYM_DIFF" != *"$BIN_FILE"* ]]; then 905 DIFF_SYM=true 906 if [[ "$KNOWN_SYM_DIFF" != *"$BIN_FILE"* ]]; then 907 SYM_MSG="*$SYM_MSG*" 908 REGRESSIONS=true 909 else 910 SYM_MSG=" $SYM_MSG " 911 fi 912 else 913 SYM_MSG="($SYM_MSG)" 914 DIFF_SYM= 915 fi 916 else 917 SYM_MSG=" " 918 DIFF_SYM= 919 if [[ "$KNOWN_SYM_DIFF $ACCEPTED_SYM_DIFF" = *"$BIN_FILE"* ]]; then 920 SYM_MSG=" ! " 921 fi 922 fi 923 924 # Check dependencies 925 if [ -n "$LDD_CMD" ]; then 926 if [ "$OPENJDK_TARGET_OS" = "windows" ]; then 927 LDD_FILTER="$GREP \.dll" 928 else 929 LDD_FILTER="$CAT" 930 fi 931 (cd $FILE_WORK_DIR && $CP $OTHER_FILE . && $LDD_CMD $NAME 2>/dev/null \ 932 | $LDD_FILTER | $AWK '{ print $1;}' | $SORT \ 933 | $TEE $WORK_FILE_BASE.deps.other \ 934 | $UNIQ > $WORK_FILE_BASE.deps.other.uniq) 935 (cd $FILE_WORK_DIR && $CP $THIS_FILE . && $LDD_CMD $NAME 2</dev/null \ 936 | $LDD_FILTER | $AWK '{ print $1;}' | $SORT \ 937 | $TEE $WORK_FILE_BASE.deps.this \ 938 | $UNIQ > $WORK_FILE_BASE.deps.this.uniq) 939 (cd $FILE_WORK_DIR && $RM -f $NAME) 940 941 $DIFF $WORK_FILE_BASE.deps.other $WORK_FILE_BASE.deps.this \ 942 > $WORK_FILE_BASE.deps.diff 943 $DIFF $WORK_FILE_BASE.deps.other.uniq $WORK_FILE_BASE.deps.this.uniq \ 944 > $WORK_FILE_BASE.deps.diff.uniq 945 946 if [ -s $WORK_FILE_BASE.deps.diff ]; then 947 if [ -s $WORK_FILE_BASE.deps.diff.uniq ]; then 948 DEP_MSG=" diff " 949 else 950 DEP_MSG=" redun " 951 fi 952 if [[ "$ACCEPTED_DEP_DIFF" != *"$BIN_FILE"* ]]; then 953 DIFF_DEP=true 954 if [[ "$KNOWN_DEP_DIFF" != *"$BIN_FILE"* ]]; then 955 DEP_MSG="*$DEP_MSG*" 956 REGRESSIONS=true 957 else 958 DEP_MSG=" $DEP_MSG " 959 fi 960 else 961 DEP_MSG="($DEP_MSG)" 962 DIFF_DEP= 963 fi 964 else 965 DEP_MSG=" " 966 DIFF_DEP= 967 if [[ "$KNOWN_DEP_DIFF $ACCEPTED_DEP_DIFF" = *"$BIN_FILE"* ]]; then 968 DEP_MSG=" ! " 969 fi 970 fi 971 else 972 DEP_MSG=" - " 973 fi 974 975 # Some linux compilers add a unique Build ID 976 if [ "$OPENJDK_TARGET_OS" = "linux" ]; then 977 BUILD_ID_FILTER="$SED -r 's/(Build ID:) [0-9a-f]{40}/\1/'" 978 else 979 BUILD_ID_FILTER="$CAT" 980 fi 981 982 # Compare fulldump output 983 if [ -n "$FULLDUMP_CMD" ] && [ -z "$SKIP_FULLDUMP_DIFF" ]; then 984 if [ -z "$FULLDUMP_DIFF_FILTER" ]; then 985 FULLDUMP_DIFF_FILTER="$CAT" 986 fi 987 $FULLDUMP_CMD $OTHER_FILE | eval "$BUILD_ID_FILTER" | eval "$FULLDUMP_DIFF_FILTER" \ 988 > $WORK_FILE_BASE.fulldump.other 2>&1 & 989 $FULLDUMP_CMD $THIS_FILE | eval "$BUILD_ID_FILTER" | eval "$FULLDUMP_DIFF_FILTER" \ 990 > $WORK_FILE_BASE.fulldump.this 2>&1 & 991 wait 992 993 $DIFF $WORK_FILE_BASE.fulldump.other $WORK_FILE_BASE.fulldump.this \ 994 > $WORK_FILE_BASE.fulldump.diff 995 996 if [ -s $WORK_FILE_BASE.fulldump.diff ]; then 997 FULLDUMP_DIFF_SIZE=$(ls -n $WORK_FILE_BASE.fulldump.diff | awk '{print $5}') 998 FULLDUMP_MSG=$($PRINTF "%8d" $FULLDUMP_DIFF_SIZE) 999 if [[ "$ACCEPTED_FULLDUMP_DIFF" != *"$BIN_FILE"* ]]; then 1000 DIFF_FULLDUMP=true 1001 if [[ "$KNOWN_FULLDUMP_DIFF" != *"$BIN_FILE"* ]]; then 1002 FULLDUMP_MSG="*$FULLDUMP_MSG*" 1003 REGRESSIONS=true 1004 else 1005 FULLDUMP_MSG=" $FULLDUMP_MSG " 1006 fi 1007 else 1008 FULLDUMP_MSG="($FULLDUMP_MSG)" 1009 DIFF_FULLDUMP= 1010 fi 1011 else 1012 FULLDUMP_MSG=" " 1013 DIFF_FULLDUMP= 1014 if [[ "$KNOWN_FULLDUMP_DIFF $ACCEPTED_FULLDUMP_DIFF" = *"$BIN_FILE"* ]]; then 1015 FULLDUMP_MSG=" ! " 1016 fi 1017 fi 1018 fi 1019 1020 # Compare disassemble output 1021 if [ -n "$DIS_CMD" ] && [ -z "$SKIP_DIS_DIFF" ]; then 1022 this_DIS_DIFF_FILTER="$CAT" 1023 if [ -n "$DIS_DIFF_FILTER" ]; then 1024 if [ -z "$NEED_DIS_DIFF_FILTER" ] \ 1025 || [[ "$NEED_DIS_DIFF_FILTER" = *"$BIN_FILE"* ]]; then 1026 this_DIS_DIFF_FILTER="$DIS_DIFF_FILTER" 1027 fi 1028 fi 1029 if [ "$OPENJDK_TARGET_OS" = "windows" ]; then 1030 DIS_GREP_ARG=-a 1031 else 1032 DIS_GREP_ARG= 1033 fi 1034 $DIS_CMD $OTHER_FILE | $GREP $DIS_GREP_ARG -v $NAME \ 1035 | eval "$this_DIS_DIFF_FILTER" > $WORK_FILE_BASE.dis.other 2>&1 & 1036 $DIS_CMD $THIS_FILE | $GREP $DIS_GREP_ARG -v $NAME \ 1037 | eval "$this_DIS_DIFF_FILTER" > $WORK_FILE_BASE.dis.this 2>&1 & 1038 wait 1039 1040 $DIFF $WORK_FILE_BASE.dis.other $WORK_FILE_BASE.dis.this > $WORK_FILE_BASE.dis.diff 1041 1042 if [ -s $WORK_FILE_BASE.dis.diff ]; then 1043 DIS_DIFF_SIZE=$(ls -n $WORK_FILE_BASE.dis.diff | awk '{print $5}') 1044 DIS_MSG=$($PRINTF "%8d" $DIS_DIFF_SIZE) 1045 if [[ "$ACCEPTED_DIS_DIFF" != *"$BIN_FILE"* ]]; then 1046 DIFF_DIS=true 1047 if [ "$MAX_KNOWN_DIS_DIFF_SIZE" = "" ]; then 1048 MAX_KNOWN_DIS_DIFF_SIZE="0" 1049 fi 1050 if [[ "$KNOWN_DIS_DIFF" = *"$BIN_FILE"* ]] \ 1051 && [ "$DIS_DIFF_SIZE" -lt "$MAX_KNOWN_DIS_DIFF_SIZE" ]; then 1052 DIS_MSG=" $DIS_MSG " 1053 else 1054 DIS_MSG="*$DIS_MSG*" 1055 REGRESSIONS=true 1056 fi 1057 else 1058 DIS_MSG="($DIS_MSG)" 1059 DIFF_DIS= 1060 fi 1061 else 1062 DIS_MSG=" " 1063 DIFF_DIS= 1064 if [[ "$KNOWN_DEP_DIFF $ACCEPTED_DEP_DIFF" = *"$BIN_FILE"* ]]; then 1065 DIS_MSG=" ! " 1066 fi 1067 fi 1068 fi 1069 1070 1071 if [ -n "$DIFF_BIN$DIFF_SIZE$DIFF_SYM$DIFF_DEP$DIFF_FULLDUMP$DIFF_DIS" ] || [ -n "$VERBOSE" ]; then 1072 if [ -n "$BIN_MSG" ]; then echo -n "$BIN_MSG:"; fi 1073 if [ -n "$SIZE_MSG" ]; then echo -n "$SIZE_MSG:"; fi 1074 if [ -n "$SYM_MSG" ]; then echo -n "$SYM_MSG:"; fi 1075 if [ -n "$DEP_MSG" ]; then echo -n "$DEP_MSG:"; fi 1076 if [ -n "$FULLDUMP_MSG" ]; then echo -n "$FULLDUMP_MSG:"; fi 1077 if [ -n "$DIS_MSG" ]; then echo -n "$DIS_MSG:"; fi 1078 echo " $BIN_FILE" 1079 if [ "$SHOW_DIFFS" = "true" ]; then 1080 if [ -s "$WORK_FILE_BASE.symbols.diff" ]; then 1081 echo "Symbols diff:" 1082 $CAT $WORK_FILE_BASE.symbols.diff 1083 fi 1084 if [ -s "$WORK_FILE_BASE.deps.diff" ]; then 1085 echo "Deps diff:" 1086 $CAT $WORK_FILE_BASE.deps.diff 1087 fi 1088 if [ -s "$WORK_FILE_BASE.fulldump.diff" ]; then 1089 echo "Fulldump diff:" 1090 $CAT $WORK_FILE_BASE.fulldump.diff 1091 fi 1092 if [ -s "$WORK_FILE_BASE.dis.diff" ]; then 1093 echo "Disassembly diff:" 1094 $CAT $WORK_FILE_BASE.dis.diff 1095 fi 1096 fi 1097 return 1 1098 fi 1099 return 0 1100 } 1101 1102 ################################################################################ 1103 # Print binary diff header 1104 1105 print_binary_diff_header() { 1106 if [ -z "$SKIP_BIN_DIFF" ]; then echo -n " Binary :"; fi 1107 if [ -z "$SKIP_SIZE_DIFF" ]; then echo -n " Size :"; fi 1108 if [ -z "$SKIP_SYM_DIFF" ]; then echo -n " Symbols :"; fi 1109 if [ -z "$SKIP_DEP_DIFF" ]; then echo -n " Deps :"; fi 1110 if [ -z "$SKIP_FULLDUMP_DIFF" ]; then echo -n " Fulldump :"; fi 1111 if [ -z "$SKIP_DIS_DIFF" ]; then echo -n " Disass :"; fi 1112 echo 1113 } 1114 1115 ################################################################################ 1116 # Compare all libraries 1117 1118 compare_all_libs() { 1119 THIS_DIR=$1 1120 OTHER_DIR=$2 1121 WORK_DIR=$3 1122 1123 LIBS=$(cd $THIS_DIR && $FIND . -type f \( -name 'lib*.so' -o -name '*.dylib' \ 1124 -o -name '*.dll' -o -name '*.obj' -o -name '*.o' -o -name '*.a' \ 1125 -o -name '*.cpl' \) | $SORT | $FILTER) 1126 1127 # On macos, filter out the dSYM debug symbols files as they are also 1128 # named *.dylib. 1129 if [ "$OPENJDK_TARGET_OS" = "macosx" ]; then 1130 LIBS=$(echo "$LIBS" | $GREP -v '\.dSYM/') 1131 fi 1132 1133 if [ -n "$LIBS" ]; then 1134 echo Libraries... 1135 print_binary_diff_header 1136 for l in $LIBS; do 1137 if [ -f "$OTHER_DIR/$l" ]; then 1138 compare_bin_file $THIS_DIR $OTHER_DIR $WORK_DIR $l 1139 if [ "$?" != "0" ]; then 1140 return_value=1 1141 fi 1142 fi 1143 done 1144 fi 1145 1146 return $return_value 1147 } 1148 1149 ################################################################################ 1150 # Compare all executables 1151 1152 compare_all_execs() { 1153 THIS_DIR=$1 1154 OTHER_DIR=$2 1155 WORK_DIR=$3 1156 1157 if [ "$OPENJDK_TARGET_OS" = "windows" ]; then 1158 EXECS=$(cd $THIS_DIR && $FIND . -type f -name '*.exe' | $SORT | $FILTER) 1159 else 1160 EXECS=$(cd $THIS_DIR && $FIND . -name db -prune -o -type f -perm -100 \! \ 1161 \( -name '*.so' -o -name '*.dylib' -o -name '*.dll' -o -name '*.cgi' \ 1162 -o -name '*.jar' -o -name '*.diz' -o -name 'jcontrol' -o -name '*.properties' \ 1163 -o -name '*.data' -o -name '*.bfc' -o -name '*.src' -o -name '*.txt' \ 1164 -o -name '*.cfg' -o -name 'meta-index' -o -name '*.properties.ja' \ 1165 -o -name '*.xml' -o -name '*.html' -o -name '*.png' -o -name 'README' \ 1166 -o -name '*.zip' -o -name '*.jimage' -o -name '*.java' -o -name '*.mf' \ 1167 -o -name '*.jpg' -o -name '*.wsdl' -o -name '*.js' -o -name '*.sh' \ 1168 -o -name '*.bat' -o -name '*LICENSE' -o -name '*.d' -o -name '*store' \ 1169 -o -name 'blacklist' -o -name '*certs' -o -name '*.ttf' \ 1170 -o -name '*.jfc' -o -name '*.dat' -o -name 'release' -o -name '*.dir'\ 1171 -o -name '*.sym' -o -name '*.idl' -o -name '*.h' -o -name '*.access' \ 1172 -o -name '*.template' -o -name '*.policy' -o -name '*.security' \ 1173 -o -name 'COPYRIGHT' -o -name '*.1' -o -name '*.debuginfo' \ 1174 -o -name 'classlist' \) | $SORT | $FILTER) 1175 fi 1176 1177 if [ -n "$EXECS" ]; then 1178 echo Executables... 1179 print_binary_diff_header 1180 for e in $EXECS; do 1181 if [ -f "$OTHER_DIR/$e" ]; then 1182 compare_bin_file $THIS_DIR $OTHER_DIR $WORK_DIR $e 1183 if [ "$?" != "0" ]; then 1184 return_value=1 1185 fi 1186 fi 1187 done 1188 fi 1189 1190 return $return_value 1191 } 1192 1193 ################################################################################ 1194 # Initiate configuration 1195 1196 THIS="$SCRIPT_DIR" 1197 echo "$THIS" 1198 THIS_SCRIPT="$0" 1199 1200 if [ -z "$1" ] || [ "$1" = "-h" ] || [ "$1" = "-?" ] || [ "$1" = "/h" ] || [ "$1" = "/?" ] || [ "$1" = "-help" ] || [ "$1" = "--help" ]; then 1201 echo "bash ./compare.sh [OPTIONS] [FILTER]" 1202 echo "" 1203 echo "-all Compare all files in all known ways" 1204 echo "-names Compare the file names and directory structure" 1205 echo "-perms Compare the permission bits on all files and directories" 1206 echo "-types Compare the output of the file command on all files" 1207 echo "-general Compare the files not convered by the specialized comparisons" 1208 echo "-zips Compare the contents of all zip files and files in them" 1209 echo "-zips-names Compare the file names inside all zip files" 1210 echo "-jars Compare the contents of all jar files" 1211 echo "-jmods Compare the listings of all jmod files" 1212 echo "-libs Compare all native libraries" 1213 echo "-execs Compare all executables" 1214 echo "-v Verbose output, does not hide known differences" 1215 echo "-vv More verbose output, shows diff output of all comparisons" 1216 echo "-o [OTHER] Compare with build in other directory. Will default to the old build directory" 1217 echo "" 1218 echo "--sort-symbols Sort all symbols before comparing" 1219 echo "--strip Strip all binaries before comparing" 1220 echo "--clean Clean all previous comparison results first" 1221 echo "" 1222 echo "[FILTER] List filenames in the image to compare, works for jars, zips, libs and execs" 1223 echo "Example:" 1224 echo "bash ./make/scripts/compareimages.sh CodePointIM.jar" 1225 echo "" 1226 echo "-2zips <file1> <file2> Compare two zip files only" 1227 echo "-2bins <file1> <file2> Compare two binary files only" 1228 echo "-2dirs <dir1> <dir2> Compare two directories as if they were images" 1229 echo "" 1230 exit 10 1231 fi 1232 1233 CMP_NAMES=false 1234 CMP_PERMS=false 1235 CMP_TYPES=false 1236 CMP_GENERAL=false 1237 CMP_ZIPS=false 1238 CMP_ZIPS_CONTENTS=true 1239 CMP_JARS=false 1240 CMP_JMODS=false 1241 CMP_LIBS=false 1242 CMP_EXECS=false 1243 1244 while [ -n "$1" ]; do 1245 case "$1" in 1246 -v) 1247 VERBOSE=true 1248 ;; 1249 -vv) 1250 VERBOSE=true 1251 SHOW_DIFFS=true 1252 ;; 1253 -o) 1254 OTHER="$2" 1255 shift 1256 ;; 1257 -all) 1258 CMP_NAMES=true 1259 if [ "$OPENJDK_TARGET_OS" != "windows" ]; then 1260 CMP_PERMS=true 1261 fi 1262 CMP_TYPES=true 1263 CMP_GENERAL=true 1264 CMP_ZIPS=true 1265 CMP_JARS=true 1266 CMP_JMODS=true 1267 CMP_LIBS=true 1268 CMP_EXECS=true 1269 ;; 1270 -names) 1271 CMP_NAMES=true 1272 ;; 1273 -perms) 1274 CMP_PERMS=true 1275 ;; 1276 -types) 1277 CMP_TYPES=true 1278 ;; 1279 -general) 1280 CMP_GENERAL=true 1281 ;; 1282 -zips) 1283 CMP_ZIPS=true 1284 CMP_ZIPS_CONTENTS=true 1285 ;; 1286 -zips-names) 1287 CMP_ZIPS=true 1288 CMP_ZIPS_CONTENTS=false 1289 ;; 1290 -jars) 1291 CMP_JARS=true 1292 ;; 1293 -jmods) 1294 CMP_JMODS=true 1295 ;; 1296 -libs) 1297 CMP_LIBS=true 1298 ;; 1299 -execs) 1300 CMP_EXECS=true 1301 ;; 1302 -2dirs) 1303 THIS="$(cd "$2" > /dev/null && pwd )" 1304 OTHER="$(cd "$3" > /dev/null && pwd )" 1305 THIS_BASE_DIR="$THIS" 1306 OTHER_BASE_DIR="$OTHER" 1307 SKIP_DEFAULT=true 1308 shift 1309 shift 1310 ;; 1311 -2zips) 1312 CMP_2_ZIPS=true 1313 THIS_FILE=$2 1314 OTHER_FILE=$3 1315 shift 1316 shift 1317 ;; 1318 -2bins) 1319 CMP_2_BINS=true 1320 THIS_FILE=$2 1321 OTHER_FILE=$3 1322 shift 1323 shift 1324 ;; 1325 --sort-symbols) 1326 SORT_ALL_SYMBOLS=true 1327 ;; 1328 --strip) 1329 STRIP_ALL=true 1330 ;; 1331 --clean) 1332 CLEAN_OUTPUT=true 1333 ;; 1334 *) 1335 CMP_NAMES=false 1336 CMP_PERMS=false 1337 CMP_TYPES=false 1338 CMP_ZIPS=true 1339 CMP_JARS=true 1340 CMP_JMODS=true 1341 CMP_LIBS=true 1342 CMP_EXECS=true 1343 1344 if [ -z "$FILTER" ]; then 1345 FILTER="$GREP" 1346 fi 1347 FILTER="$FILTER -e $1" 1348 ;; 1349 esac 1350 shift 1351 done 1352 1353 if [ "$STRIP_ALL" = "true" ] && [ -z "$STRIP" ]; then 1354 echo Warning: Not stripping even with --strip, since strip is missing on this platform 1355 STRIP_ALL=false 1356 fi 1357 1358 COMPARE_ROOT=$OUTPUTDIR/compare-support 1359 if [ "$CLEAN_OUTPUT" = "true" ]; then 1360 echo Cleaning old output in $COMPARE_ROOT. 1361 $RM -rf $COMPARE_ROOT 1362 fi 1363 $MKDIR -p $COMPARE_ROOT 1364 if [ "$OPENJDK_TARGET_OS" = "windows" ]; then 1365 if [ "$(uname -o)" = "Cygwin" ]; then 1366 COMPARE_ROOT=$(cygpath -msa $COMPARE_ROOT) 1367 fi 1368 fi 1369 1370 if [ "$CMP_2_ZIPS" = "true" ]; then 1371 THIS_DIR="$(dirname $THIS_FILE)" 1372 THIS_DIR="$(cd "$THIS_DIR" > /dev/null && pwd )" 1373 OTHER_DIR="$(dirname $OTHER_FILE)" 1374 OTHER_DIR="$(cd "$OTHER_DIR" > /dev/null && pwd )" 1375 THIS_FILE_NAME="$(basename $THIS_FILE)" 1376 OTHER_FILE_NAME="$(basename $OTHER_FILE)" 1377 echo Comparing $THIS_DIR/$THIS_FILE_NAME and $OTHER_DIR/$OTHER_FILE_NAME 1378 compare_zip_file $THIS_DIR $OTHER_DIR $COMPARE_ROOT/2zips $THIS_FILE_NAME $OTHER_FILE_NAME 1379 exit 1380 fi 1381 1382 if [ "$CMP_2_BINS" = "true" ]; then 1383 THIS_DIR="$(dirname $THIS_FILE)" 1384 THIS_DIR="$(cd "$THIS_DIR" > /dev/null && pwd )" 1385 OTHER_DIR="$(dirname $OTHER_FILE)" 1386 OTHER_DIR="$(cd "$OTHER_DIR" > /dev/null && pwd )" 1387 THIS_FILE_NAME="$(basename $THIS_FILE)" 1388 OTHER_FILE_NAME="$(basename $OTHER_FILE)" 1389 echo Comparing $THIS_DIR/$THIS_FILE_NAME and $OTHER_DIR/$OTHER_FILE_NAME 1390 compare_bin_file $THIS_DIR $OTHER_DIR $COMPARE_ROOT/2bins $THIS_FILE_NAME $OTHER_FILE_NAME 1391 exit 1392 fi 1393 1394 if [ "$CMP_NAMES" = "false" ] \ 1395 && [ "$CMP_TYPES" = "false" ] \ 1396 && [ "$CMP_PERMS" = "false" ] \ 1397 && [ "$CMP_GENERAL" = "false" ] \ 1398 && [ "$CMP_ZIPS" = "false" ] \ 1399 && [ "$CMP_JARS" = "false" ] \ 1400 && [ "$CMP_JMODS" = "false" ] \ 1401 && [ "$CMP_LIBS" = "false" ] \ 1402 && [ "$CMP_EXECS" = "false" ]; then 1403 CMP_NAMES=true 1404 CMP_PERMS=true 1405 CMP_TYPES=true 1406 CMP_GENERAL=true 1407 CMP_ZIPS=true 1408 CMP_JARS=true 1409 CMP_JMODS=true 1410 CMP_LIBS=true 1411 CMP_EXECS=true 1412 fi 1413 1414 if [ -z "$FILTER" ]; then 1415 FILTER="$CAT" 1416 fi 1417 1418 if [ "$SKIP_DEFAULT" != "true" ]; then 1419 if [ -z "$OTHER" ]; then 1420 echo "Nothing to compare to, set with -o" 1421 exit 1 1422 else 1423 if [ ! -d "$OTHER" ]; then 1424 echo "Other build directory does not exist:" 1425 echo "$OTHER" 1426 exit 1 1427 fi 1428 OTHER="$( cd "$OTHER" > /dev/null && pwd )" 1429 echo "Comparing to:" 1430 echo "$OTHER" 1431 echo 1432 fi 1433 1434 # Find the common images to compare, prioritizing later build stages 1435 if [ -d "$THIS/images/jdk" ] && [ -d "$OTHER/images/jdk" ]; then 1436 THIS_JDK="$THIS/images/jdk" 1437 OTHER_JDK="$OTHER/images/jdk" 1438 echo "Selecting normal images for JDK compare" 1439 elif [ -d "$(ls -d $THIS/licensee-src/build/*/images/jdk 2> /dev/null)" ] \ 1440 && [ -d "$(ls -d $OTHER/licensee-src/build/*/images/jdk 2> /dev/null)" ] 1441 then 1442 echo "Selecting licensee images for compare" 1443 # Simply override the THIS and OTHER dir with the build dir from 1444 # the nested licensee source build for the rest of the script 1445 # execution. 1446 OLD_THIS="$THIS" 1447 OLD_OTHER="$OTHER" 1448 THIS="$(ls -d $THIS/licensee-src/build/*)" 1449 OTHER="$(ls -d $OTHER/licensee-src/build/*)" 1450 THIS_JDK="$THIS/images/jdk" 1451 OTHER_JDK="$OTHER/images/jdk" 1452 # Rewrite the path to tools that are used from the build 1453 JIMAGE="$(echo "$JIMAGE" | $SED "s|$OLD_THIS|$THIS|g")" 1454 JMOD="$(echo "$JMOD" | $SED "s|$OLD_THIS|$THIS|g")" 1455 JAVAP="$(echo "$JAVAP" | $SED "s|$OLD_THIS|$THIS|g")" 1456 else 1457 echo "No common images found." 1458 exit 1 1459 fi 1460 echo " $THIS_JDK" 1461 echo " $OTHER_JDK" 1462 1463 if [ -d "$THIS/images/jdk-bundle" -o -d "$THIS/deploy/images/jdk-bundle" ] \ 1464 && [ -d "$OTHER/images/jdk-bundle" -o -d "$OTHER/deploy/images/jdk-bundle" ]; then 1465 if [ -d "$THIS/deploy/images/jdk-bundle" ]; then 1466 THIS_JDK_BUNDLE="$THIS/deploy/images/jdk-bundle" 1467 else 1468 THIS_JDK_BUNDLE="$THIS/images/jdk-bundle" 1469 fi 1470 if [ -d "$OTHER/deploy/images/jdk-bundle" ]; then 1471 OTHER_JDK_BUNDLE="$OTHER/deploy/images/jdk-bundle" 1472 else 1473 OTHER_JDK_BUNDLE="$OTHER/images/jdk-bundle" 1474 fi 1475 echo "Also comparing jdk macosx bundles" 1476 echo " $THIS_JDK_BUNDLE" 1477 echo " $OTHER_JDK_BUNDLE" 1478 fi 1479 1480 THIS_SEC_DIR="$THIS/images" 1481 OTHER_SEC_DIR="$OTHER/images" 1482 if [ -f "$THIS_SEC_DIR/sec-bin.zip" ] && [ -f "$OTHER_SEC_DIR/sec-bin.zip" ]; then 1483 OTHER_SEC_BIN="$OTHER_SEC_DIR/sec-bin.zip" 1484 THIS_SEC_BIN="$THIS_SEC_DIR/sec-bin.zip" 1485 if [ "$OPENJDK_TARGET_OS" = "windows" ]; then 1486 if [ "$OPENJDK_TARGET_CPU" = "x86_64" ]; then 1487 JGSS_WINDOWS_BIN="jgss-windows-x64-bin.zip" 1488 else 1489 JGSS_WINDOWS_BIN="jgss-windows-i586-bin.zip" 1490 fi 1491 OTHER_SEC_WINDOWS_BIN="$OTHER_SEC_DIR/sec-windows-bin.zip" 1492 OTHER_JGSS_WINDOWS_BIN="$OTHER_SEC_DIR/$JGSS_WINDOWS_BIN" 1493 THIS_SEC_WINDOWS_BIN="$THIS_SEC_DIR/sec-windows-bin.zip" 1494 THIS_JGSS_WINDOWS_BIN="$THIS_SEC_DIR/$JGSS_WINDOWS_BIN" 1495 fi 1496 fi 1497 1498 if [ -d "$THIS/images/docs" ] && [ -d "$OTHER/images/docs" ]; then 1499 THIS_DOCS="$THIS/images/docs" 1500 OTHER_DOCS="$OTHER/images/docs" 1501 echo "Also comparing docs" 1502 else 1503 echo "WARNING! Docs haven't been built and won't be compared." 1504 fi 1505 1506 if [ -d "$THIS/images/test" ] && [ -d "$OTHER/images/test" ]; then 1507 THIS_TEST="$THIS/images/test" 1508 OTHER_TEST="$OTHER/images/test" 1509 echo "Also comparing test image" 1510 else 1511 echo "WARNING! Test haven't been built and won't be compared." 1512 fi 1513 fi 1514 1515 ################################################################################ 1516 # Do the work 1517 1518 if [ "$CMP_NAMES" = "true" ]; then 1519 if [ -n "$THIS_JDK" ] && [ -n "$OTHER_JDK" ]; then 1520 echo -n "JDK " 1521 compare_dirs $THIS_JDK $OTHER_JDK $COMPARE_ROOT/jdk 1522 echo -n "JDK " 1523 compare_files $THIS_JDK $OTHER_JDK $COMPARE_ROOT/jdk 1524 fi 1525 if [ -n "$THIS_JDK_BUNDLE" ] && [ -n "$OTHER_JDK_BUNDLE" ]; then 1526 echo -n "JDK Bundle " 1527 compare_dirs $THIS_JDK_BUNDLE $OTHER_JDK_BUNDLE $COMPARE_ROOT/jdk-bundle 1528 1529 echo -n "JDK Bundle " 1530 compare_files $THIS_JDK_BUNDLE $OTHER_JDK_BUNDLE $COMPARE_ROOT/jdk-bundle 1531 fi 1532 if [ -n "$THIS_DOCS" ] && [ -n "$OTHER_DOCS" ]; then 1533 echo -n "Docs " 1534 compare_dirs $THIS_DOCS $OTHER_DOCS $COMPARE_ROOT/docs 1535 echo -n "Docs " 1536 compare_files $THIS_DOCS $OTHER_DOCS $COMPARE_ROOT/docs 1537 fi 1538 if [ -n "$THIS_TEST" ] && [ -n "$OTHER_TEST" ]; then 1539 echo -n "Test " 1540 compare_dirs $THIS_TEST $OTHER_TEST $COMPARE_ROOT/test 1541 echo -n "Test " 1542 compare_files $THIS_TEST $OTHER_TEST $COMPARE_ROOT/test 1543 fi 1544 if [ -n "$THIS_BASE_DIR" ] && [ -n "$OTHER_BASE_DIR" ]; then 1545 compare_dirs $THIS_BASE_DIR $OTHER_BASE_DIR $COMPARE_ROOT/base_dir 1546 compare_files $THIS_BASE_DIR $OTHER_BASE_DIR $COMPARE_ROOT/base_dir 1547 fi 1548 fi 1549 1550 if [ "$CMP_LIBS" = "true" ]; then 1551 if [ -n "$THIS_JDK" ] && [ -n "$OTHER_JDK" ]; then 1552 echo -n "JDK " 1553 compare_all_libs $THIS_JDK $OTHER_JDK $COMPARE_ROOT/jdk 1554 fi 1555 if [ -n "$THIS_TEST" ] && [ -n "$OTHER_TEST" ]; then 1556 echo -n "Test " 1557 STRIP_ALL_bak="$STRIP_ALL" 1558 if [ "$STRIP_TESTS_BEFORE_COMPARE" = "true" ]; then 1559 STRIP_ALL="true" 1560 fi 1561 compare_all_libs $THIS_TEST $OTHER_TEST $COMPARE_ROOT/test 1562 STRIP_ALL="$STRIP_ALL_bak" 1563 fi 1564 if [ -n "$THIS_BASE_DIR" ] && [ -n "$OTHER_BASE_DIR" ]; then 1565 compare_all_libs $THIS_BASE_DIR $OTHER_BASE_DIR $COMPARE_ROOT/base_dir 1566 fi 1567 fi 1568 1569 if [ "$CMP_EXECS" = "true" ]; then 1570 if [ -n "$THIS_JDK" ] && [ -n "$OTHER_JDK" ]; then 1571 echo -n "JDK " 1572 compare_all_execs $THIS_JDK $OTHER_JDK $COMPARE_ROOT/jdk 1573 fi 1574 if [ -n "$THIS_TEST" ] && [ -n "$OTHER_TEST" ]; then 1575 echo -n "Test " 1576 STRIP_ALL_bak="$STRIP_ALL" 1577 if [ "$STRIP_TESTS_BEFORE_COMPARE" = "true" ]; then 1578 STRIP_ALL="true" 1579 fi 1580 compare_all_execs $THIS_TEST $OTHER_TEST $COMPARE_ROOT/test 1581 STRIP_ALL="$STRIP_ALL_bak" 1582 fi 1583 if [ -n "$THIS_BASE_DIR" ] && [ -n "$OTHER_BASE_DIR" ]; then 1584 compare_all_execs $THIS_BASE_DIR $OTHER_BASE_DIR $COMPARE_ROOT/base_dir 1585 fi 1586 fi 1587 1588 if [ "$CMP_GENERAL" = "true" ]; then 1589 if [ -n "$THIS_JDK" ] && [ -n "$OTHER_JDK" ]; then 1590 echo -n "JDK " 1591 compare_general_files $THIS_JDK $OTHER_JDK $COMPARE_ROOT/jdk 1592 fi 1593 if [ -n "$THIS_JDK_BUNDLE" ] && [ -n "$OTHER_JDK_BUNDLE" ]; then 1594 echo -n "JDK Bundle " 1595 compare_general_files $THIS_JDK_BUNDLE $OTHER_JDK_BUNDLE $COMPARE_ROOT/jdk-bundle 1596 fi 1597 if [ -n "$THIS_DOCS" ] && [ -n "$OTHER_DOCS" ]; then 1598 echo -n "Docs " 1599 compare_general_files $THIS_DOCS $OTHER_DOCS $COMPARE_ROOT/docs 1600 fi 1601 if [ -n "$THIS_TEST" ] && [ -n "$OTHER_TEST" ]; then 1602 echo -n "Test " 1603 compare_general_files $THIS_TEST $OTHER_TEST $COMPARE_ROOT/test 1604 fi 1605 if [ -n "$THIS_BASE_DIR" ] && [ -n "$OTHER_BASE_DIR" ]; then 1606 compare_general_files $THIS_BASE_DIR $OTHER_BASE_DIR $COMPARE_ROOT/base_dir 1607 fi 1608 fi 1609 1610 if [ "$CMP_ZIPS" = "true" ]; then 1611 if [ -n "$THIS_JDK" ] && [ -n "$OTHER_JDK" ]; then 1612 echo -n "JDK " 1613 compare_all_zip_files $THIS_JDK $OTHER_JDK $COMPARE_ROOT/jdk 1614 fi 1615 if [ -n "$THIS_TEST" ] && [ -n "$OTHER_TEST" ]; then 1616 echo -n "Test " 1617 compare_all_zip_files $THIS_TEST $OTHER_TEST $COMPARE_ROOT/test 1618 fi 1619 if [ -n "$THIS_SEC_BIN" ] && [ -n "$OTHER_SEC_BIN" ]; then 1620 if [ -n "$(echo $THIS_SEC_BIN | $FILTER)" ]; then 1621 echo "sec-bin.zip..." 1622 compare_zip_file $THIS_SEC_DIR $OTHER_SEC_DIR $COMPARE_ROOT/sec-bin sec-bin.zip 1623 fi 1624 fi 1625 if [ -n "$THIS_SEC_WINDOWS_BIN" ] && [ -n "$OTHER_SEC_WINDOWS_BIN" ]; then 1626 if [ -n "$(echo $THIS_SEC_WINDOWS_BIN | $FILTER)" ]; then 1627 echo "sec-windows-bin.zip..." 1628 compare_zip_file $THIS_SEC_DIR $OTHER_SEC_DIR $COMPARE_ROOT/sec-bin sec-windows-bin.zip 1629 fi 1630 fi 1631 if [ -n "$THIS_JGSS_WINDOWS_BIN" ] && [ -n "$OTHER_JGSS_WINDOWS_BIN" ]; then 1632 if [ -n "$(echo $THIS_JGSS_WINDOWS_BIN | $FILTER)" ]; then 1633 echo "$JGSS_WINDOWS_BIN..." 1634 compare_zip_file $THIS_SEC_DIR $OTHER_SEC_DIR $COMPARE_ROOT/sec-bin $JGSS_WINDOWS_BIN 1635 fi 1636 fi 1637 if [ -n "$THIS_BASE_DIR" ] && [ -n "$OTHER_BASE_DIR" ]; then 1638 compare_all_zip_files $THIS_BASE_DIR $OTHER_BASE_DIR $COMPARE_ROOT/base_dir 1639 fi 1640 fi 1641 1642 if [ "$CMP_JARS" = "true" ]; then 1643 if [ -n "$THIS_JDK" ] && [ -n "$OTHER_JDK" ]; then 1644 echo -n "JDK " 1645 compare_all_jar_files $THIS_JDK $OTHER_JDK $COMPARE_ROOT/jdk 1646 fi 1647 if [ -n "$THIS_TEST" ] && [ -n "$OTHER_TEST" ]; then 1648 echo -n "Test " 1649 compare_all_jar_files $THIS_TEST $OTHER_TEST $COMPARE_ROOT/test 1650 fi 1651 if [ -n "$THIS_BASE_DIR" ] && [ -n "$OTHER_BASE_DIR" ]; then 1652 compare_all_jar_files $THIS_BASE_DIR $OTHER_BASE_DIR $COMPARE_ROOT/base_dir 1653 fi 1654 fi 1655 1656 if [ "$CMP_JMODS" = "true" ]; then 1657 if [ -n "$THIS_JDK" ] && [ -n "$OTHER_JDK" ]; then 1658 compare_all_jmod_files $THIS_JDK $OTHER_JDK $COMPARE_ROOT/jdk 1659 fi 1660 if [ -n "$THIS_BASE_DIR" ] && [ -n "$OTHER_BASE_DIR" ]; then 1661 compare_all_jmod_files $THIS_BASE_DIR $OTHER_BASE_DIR $COMPARE_ROOT/base_dir 1662 fi 1663 fi 1664 1665 if [ "$CMP_PERMS" = "true" ]; then 1666 if [ -n "$THIS_JDK" ] && [ -n "$OTHER_JDK" ]; then 1667 echo -n "JDK " 1668 compare_permissions $THIS_JDK $OTHER_JDK $COMPARE_ROOT/jdk 1669 fi 1670 if [ -n "$THIS_BASE_DIR" ] && [ -n "$OTHER_BASE_DIR" ]; then 1671 compare_permissions $THIS_BASE_DIR $OTHER_BASE_DIR $COMPARE_ROOT/base_dir 1672 fi 1673 fi 1674 1675 if [ "$CMP_TYPES" = "true" ]; then 1676 if [ -n "$THIS_JDK" ] && [ -n "$OTHER_JDK" ]; then 1677 echo -n "JDK " 1678 compare_file_types $THIS_JDK $OTHER_JDK $COMPARE_ROOT/jdk 1679 fi 1680 if [ -n "$THIS_JDK_BUNDLE" ] && [ -n "$OTHER_JDK_BUNDLE" ]; then 1681 echo -n "JDK Bundle " 1682 compare_file_types $THIS_JDK_BUNDLE $OTHER_JDK_BUNDLE $COMPARE_ROOT/jdk-bundle 1683 fi 1684 if [ -n "$THIS_TEST" ] && [ -n "$OTHER_TEST" ]; then 1685 echo -n "Test " 1686 compare_file_types $THIS_JDK $OTHER_JDK $COMPARE_ROOT/jdk 1687 fi 1688 if [ -n "$THIS_BASE_DIR" ] && [ -n "$OTHER_BASE_DIR" ]; then 1689 compare_file_types $THIS_BASE_DIR $OTHER_BASE_DIR $COMPARE_ROOT/base_dir 1690 fi 1691 fi 1692 1693 echo 1694 1695 if [ -n "$REGRESSIONS" ]; then 1696 echo "REGRESSIONS FOUND!" 1697 echo 1698 exit 1 1699 else 1700 echo "No regressions found" 1701 echo 1702 exit 0 1703 fi