compare.sh.in revision 476:2ba6f4da4bf3
1#!/bin/bash 2# 3# Copyright (c) 2012, 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# Substitutions from autoconf 31 32LEGACY_BUILD_DIR=@OPENJDK_TARGET_OS@-@OPENJDK_TARGET_CPU_LEGACY@ 33 34OPENJDK_TARGET_OS="@OPENJDK_TARGET_OS@" 35OPENJDK_TARGET_CPU="@OPENJDK_TARGET_CPU@" 36 37AWK="@AWK@" 38CAT="@CAT@" 39CMP="@CMP@" 40CP="@CP@" 41CUT="@CUT@" 42DIFF="@DIFF@" 43DUMPBIN="@UNCYGDRIVE@ @DUMPBIN@" 44EXPR="@EXPR@" 45FILE="@FILE@" 46FIND="@FIND@" 47GREP="@GREP@" 48JAVAP="@UNCYGDRIVE@ @BOOT_JDK@/bin/javap" 49LDD="@LDD@" 50MKDIR="@MKDIR@" 51NM="@NM@" 52OBJDUMP="@OBJDUMP@" 53OTOOL="@OTOOL@" 54PRINTF="@PRINTF@" 55READELF="@READELF@" 56RM="@RM@" 57SED="@SED@" 58SORT="@SORT@" 59STRIP="@POST_STRIP_CMD@" 60TEE="@TEE@" 61UNIQ="@UNIQ@" 62UNZIP="@UNZIP@" 63 64SRC_ROOT="@SRC_ROOT@" 65 66if [ "$OPENJDK_TARGET_OS" = "macosx" ]; then 67 READELF_CMD="otool -v -V -h -X -t -d" 68elif [ -n "$READELF" ] && [ "$OPENJDK_TARGET_OS" != "windows" ]; then 69 READELF_CMD="$READELF -a" 70fi 71 72if [ "$OPENJDK_TARGET_OS" = "macosx" ]; then 73 LDD_CMD="$OTOOL -L" 74elif [ -n "$LDD" ]; then 75 LDD_CMD="$LDD" 76fi 77 78########################################################################################## 79# Diff exceptions 80 81if [ "$OPENJDK_TARGET_OS" = "linux" ] && [ "$OPENJDK_TARGET_CPU" = "x86_64" ]; then 82STRIP_BEFORE_COMPARE=" 83./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so 84./demo/jvmti/gctest/lib/libgctest.so 85./demo/jvmti/heapTracker/lib/libheapTracker.so 86./demo/jvmti/heapViewer/lib/libheapViewer.so 87./demo/jvmti/hprof/lib/libhprof.so 88./demo/jvmti/minst/lib/libminst.so 89./demo/jvmti/mtrace/lib/libmtrace.so 90./demo/jvmti/versionCheck/lib/libversionCheck.so 91./demo/jvmti/waiters/lib/libwaiters.so 92" 93 94KNOWN_BIN_DIFF=" 95" 96 97ACCEPTED_BIN_DIFF=" 98./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so 99./demo/jvmti/gctest/lib/libgctest.so 100./demo/jvmti/heapTracker/lib/libheapTracker.so 101./demo/jvmti/heapViewer/lib/libheapViewer.so 102./demo/jvmti/hprof/lib/libhprof.so 103./demo/jvmti/minst/lib/libminst.so 104./demo/jvmti/mtrace/lib/libmtrace.so 105./demo/jvmti/versionCheck/lib/libversionCheck.so 106./demo/jvmti/waiters/lib/libwaiters.so 107./jre/lib/amd64/libattach.so 108./jre/lib/amd64/libdt_socket.so 109./jre/lib/amd64/libhprof.so 110./jre/lib/amd64/libinstrument.so 111./jre/lib/amd64/libjava_crw_demo.so 112./jre/lib/amd64/libjsdt.so 113./jre/lib/amd64/libjsig.so 114./jre/lib/amd64/libmanagement.so 115./jre/lib/amd64/libnpt.so 116./jre/lib/amd64/libsaproc.so 117./jre/lib/amd64/libverify.so 118./jre/lib/amd64/server/libjsig.so 119./jre/lib/amd64/server/libjvm.so 120./bin/appletviewer 121./bin/extcheck 122./bin/idlj 123./bin/jar 124./bin/jarsigner 125./bin/java 126./bin/javac 127./bin/javadoc 128./bin/javah 129./bin/javap 130./bin/jcmd 131./bin/jconsole 132./bin/jdb 133./bin/jhat 134./bin/jinfo 135./bin/jmap 136./bin/jps 137./bin/jrunscript 138./bin/jsadebugd 139./bin/jstack 140./bin/jstat 141./bin/jstatd 142./bin/keytool 143./bin/native2ascii 144./bin/orbd 145./bin/pack200 146./bin/policytool 147./bin/rmic 148./bin/rmid 149./bin/rmiregistry 150./bin/schemagen 151./bin/serialver 152./bin/servertool 153./bin/tnameserv 154./bin/wsgen 155./bin/wsimport 156./bin/xjc 157./jre/bin/java 158./jre/bin/keytool 159./jre/bin/orbd 160./jre/bin/pack200 161./jre/bin/policytool 162./jre/bin/rmid 163./jre/bin/rmiregistry 164./jre/bin/servertool 165./jre/bin/tnameserv 166" 167 168KNOWN_SIZE_DIFF=" 169" 170 171KNOWN_SYM_DIFF=" 172" 173 174KNOWN_ELF_DIFF=" 175./demo/jvmti/heapTracker/lib/libheapTracker.so 176./demo/jvmti/hprof/lib/libhprof.so 177./demo/jvmti/waiters/lib/libwaiters.so 178" 179fi 180 181if [ "$OPENJDK_TARGET_OS" = "solaris" ] && [ "$OPENJDK_TARGET_CPU" = "x86" ]; then 182 183STRIP_BEFORE_COMPARE=" 184./demo/jni/Poller/lib/libPoller.so 185./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so 186./demo/jvmti/gctest/lib/libgctest.so 187./demo/jvmti/heapTracker/lib/libheapTracker.so 188./demo/jvmti/heapViewer/lib/libheapViewer.so 189./demo/jvmti/hprof/lib/libhprof.so 190./demo/jvmti/minst/lib/libminst.so 191./demo/jvmti/mtrace/lib/libmtrace.so 192./demo/jvmti/versionCheck/lib/libversionCheck.so 193./demo/jvmti/waiters/lib/libwaiters.so 194./jre/lib/i386/jexec 195" 196 197SORT_SYMBOLS=" 198./jre/lib/i386/client/libjvm.so 199./jre/lib/i386/server/libjvm.so 200" 201 202SKIP_BIN_DIFF="true" 203 204ACCEPTED_SMALL_SIZE_DIFF=" 205./demo/jni/Poller/lib/libPoller.so 206./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so 207./demo/jvmti/gctest/lib/libgctest.so 208./demo/jvmti/heapTracker/lib/libheapTracker.so 209./demo/jvmti/heapViewer/lib/libheapViewer.so 210./demo/jvmti/hprof/lib/libhprof.so 211./demo/jvmti/minst/lib/libminst.so 212./demo/jvmti/mtrace/lib/libmtrace.so 213./demo/jvmti/versionCheck/lib/libversionCheck.so 214./demo/jvmti/waiters/lib/libwaiters.so 215./jre/lib/i386/client/libjvm.so 216./jre/lib/i386/jli/libjli.so 217./jre/lib/i386/libJdbcOdbc.so 218./jre/lib/i386/libattach.so 219./jre/lib/i386/libawt.so 220./jre/lib/i386/libawt_headless.so 221./jre/lib/i386/libawt_xawt.so 222./jre/lib/i386/libdcpr.so 223./jre/lib/i386/libdt_socket.so 224./jre/lib/i386/libfontmanager.so 225./jre/lib/i386/libhprof.so 226./jre/lib/i386/libinstrument.so 227./jre/lib/i386/libj2gss.so 228./jre/lib/i386/libj2pcsc.so 229./jre/lib/i386/libj2pkcs11.so 230./jre/lib/i386/libj2ucrypto.so 231./jre/lib/i386/libjaas_unix.so 232./jre/lib/i386/libjava.so 233./jre/lib/i386/libjava_crw_demo.so 234./jre/lib/i386/libjawt.so 235./jre/lib/i386/libjdwp.so 236./jre/lib/i386/libjfr.so 237./jre/lib/i386/libjpeg.so 238./jre/lib/i386/libjsdt.so 239./jre/lib/i386/libjsound.so 240./jre/lib/i386/libkcms.so 241./jre/lib/i386/libmanagement.so 242./jre/lib/i386/libmlib_image.so 243./jre/lib/i386/libnet.so 244./jre/lib/i386/libnio.so 245./jre/lib/i386/libnpt.so 246./jre/lib/i386/libsctp.so 247./jre/lib/i386/libsplashscreen.so 248./jre/lib/i386/libsunec.so 249./jre/lib/i386/libsunwjdga.so 250./jre/lib/i386/libt2k.so 251./jre/lib/i386/libunpack.so 252./jre/lib/i386/libverify.so 253./jre/lib/i386/libzip.so 254./jre/lib/i386/server/libjvm.so 255./bin/appletviewer 256./bin/extcheck 257./bin/idlj 258./bin/jar 259./bin/jarsigner 260./bin/java 261./bin/javac 262./bin/javadoc 263./bin/javah 264./bin/javap 265./bin/jcmd 266./bin/jconsole 267./bin/jdb 268./bin/jhat 269./bin/jinfo 270./bin/jmap 271./bin/jps 272./bin/jrunscript 273./bin/jsadebugd 274./bin/jstack 275./bin/jstat 276./bin/jstatd 277./bin/keytool 278./bin/native2ascii 279./bin/orbd 280./bin/pack200 281./bin/policytool 282./bin/rmic 283./bin/rmid 284./bin/rmiregistry 285./bin/schemagen 286./bin/serialver 287./bin/servertool 288./bin/tnameserv 289./bin/unpack200 290./bin/wsgen 291./bin/wsimport 292./bin/xjc 293./jre/bin/java 294./jre/bin/keytool 295./jre/bin/orbd 296./jre/bin/pack200 297./jre/bin/policytool 298./jre/bin/rmid 299./jre/bin/rmiregistry 300./jre/bin/servertool 301./jre/bin/tnameserv 302./jre/bin/unpack200 303./jre/lib/i386/jexec 304" 305 306SKIP_ELF_DIFF="true" 307 308# libjvm.so differs in the random 15 char prefix on some symbols. 309ACCEPTED_DIS_DIFF=" 310./jre/lib/i386/client/libjvm.so 311./jre/lib/i386/server/libjvm.so 312" 313 314fi 315 316if [ "$OPENJDK_TARGET_OS" = "solaris" ] && [ "$OPENJDK_TARGET_CPU" = "x86_64" ]; then 317 318STRIP_BEFORE_COMPARE=" 319./demo/jni/Poller/lib/amd64/libPoller.so 320./demo/jvmti/compiledMethodLoad/lib/amd64/libcompiledMethodLoad.so 321./demo/jvmti/gctest/lib/amd64/libgctest.so 322./demo/jvmti/heapTracker/lib/amd64/libheapTracker.so 323./demo/jvmti/heapViewer/lib/amd64/libheapViewer.so 324./demo/jvmti/hprof/lib/amd64/libhprof.so 325./demo/jvmti/minst/lib/amd64/libminst.so 326./demo/jvmti/mtrace/lib/amd64/libmtrace.so 327./demo/jvmti/versionCheck/lib/amd64/libversionCheck.so 328./demo/jvmti/waiters/lib/amd64/libwaiters.so 329" 330 331SORT_SYMBOLS=" 332./jre/lib/amd64/server/libjvm.so 333" 334 335SKIP_BIN_DIFF="true" 336 337ACCEPTED_SMALL_SIZE_DIFF=" 338./demo/jni/Poller/lib/amd64/libPoller.so 339./demo/jvmti/compiledMethodLoad/lib/amd64/libcompiledMethodLoad.so 340./demo/jvmti/gctest/lib/amd64/libgctest.so 341./demo/jvmti/heapTracker/lib/amd64/libheapTracker.so 342./demo/jvmti/heapViewer/lib/amd64/libheapViewer.so 343./demo/jvmti/hprof/lib/amd64/libhprof.so 344./demo/jvmti/minst/lib/amd64/libminst.so 345./demo/jvmti/mtrace/lib/amd64/libmtrace.so 346./demo/jvmti/versionCheck/lib/amd64/libversionCheck.so 347./demo/jvmti/waiters/lib/amd64/libwaiters.so 348./jre/lib/amd64/jli/libjli.so 349./jre/lib/amd64/libJdbcOdbc.so 350./jre/lib/amd64/libattach.so 351./jre/lib/amd64/libawt.so 352./jre/lib/amd64/libawt_headless.so 353./jre/lib/amd64/libawt_xawt.so 354./jre/lib/amd64/libdcpr.so 355./jre/lib/amd64/libdt_socket.so 356./jre/lib/amd64/libfontmanager.so 357./jre/lib/amd64/libhprof.so 358./jre/lib/amd64/libinstrument.so 359./jre/lib/amd64/libj2gss.so 360./jre/lib/amd64/libj2pcsc.so 361./jre/lib/amd64/libj2pkcs11.so 362./jre/lib/amd64/libj2ucrypto.so 363./jre/lib/amd64/libjaas_unix.so 364./jre/lib/amd64/libjava.so 365./jre/lib/amd64/libjava_crw_demo.so 366./jre/lib/amd64/libjawt.so 367./jre/lib/amd64/libjdwp.so 368./jre/lib/amd64/libjfr.so 369./jre/lib/amd64/libjpeg.so 370./jre/lib/amd64/libjsdt.so 371./jre/lib/amd64/libjsound.so 372./jre/lib/amd64/libkcms.so 373./jre/lib/amd64/libmanagement.so 374./jre/lib/amd64/libmlib_image.so 375./jre/lib/amd64/libnet.so 376./jre/lib/amd64/libnio.so 377./jre/lib/amd64/libnpt.so 378./jre/lib/amd64/libsctp.so 379./jre/lib/amd64/libsplashscreen.so 380./jre/lib/amd64/libsunec.so 381./jre/lib/amd64/libsunwjdga.so 382./jre/lib/amd64/libt2k.so 383./jre/lib/amd64/libunpack.so 384./jre/lib/amd64/libverify.so 385./jre/lib/amd64/libzip.so 386./jre/lib/amd64/server/64/libjvm_db.so 387./jre/lib/amd64/server/64/libjvm_dtrace.so 388./bin/amd64/appletviewer 389./bin/amd64/extcheck 390./bin/amd64/idlj 391./bin/amd64/jar 392./bin/amd64/jarsigner 393./bin/amd64/java 394./bin/amd64/javac 395./bin/amd64/javadoc 396./bin/amd64/javah 397./bin/amd64/javap 398./bin/amd64/jcmd 399./bin/amd64/jconsole 400./bin/amd64/jdb 401./bin/amd64/jhat 402./bin/amd64/jinfo 403./bin/amd64/jmap 404./bin/amd64/jps 405./bin/amd64/jrunscript 406./bin/amd64/jsadebugd 407./bin/amd64/jstack 408./bin/amd64/jstat 409./bin/amd64/jstatd 410./bin/amd64/keytool 411./bin/amd64/native2ascii 412./bin/amd64/orbd 413./bin/amd64/pack200 414./bin/amd64/policytool 415./bin/amd64/rmic 416./bin/amd64/rmid 417./bin/amd64/rmiregistry 418./bin/amd64/schemagen 419./bin/amd64/serialver 420./bin/amd64/servertool 421./bin/amd64/tnameserv 422./bin/amd64/unpack200 423./bin/amd64/wsgen 424./bin/amd64/wsimport 425./bin/amd64/xjc 426./jre/bin/amd64/java 427./jre/bin/amd64/keytool 428./jre/bin/amd64/orbd 429./jre/bin/amd64/pack200 430./jre/bin/amd64/policytool 431./jre/bin/amd64/rmid 432./jre/bin/amd64/rmiregistry 433./jre/bin/amd64/servertool 434./jre/bin/amd64/tnameserv 435./jre/bin/amd64/unpack200 436./jre/lib/amd64/jexec 437" 438 439SKIP_ELF_DIFF="true" 440 441# Can't find an explaination for the diff in libmlib_image.so. 442KNOWN_DIS_DIFF=" 443./jre/lib/amd64/libmlib_image.so 444" 445# libjvm.so differs in the random 15 char prefix on some symbols. 446ACCEPTED_DIS_DIFF=" 447./jre/lib/amd64/server/libjvm.so 448" 449 450fi 451 452if [ "$OPENJDK_TARGET_OS" = "windows" ] && [ "$OPENJDK_TARGET_CPU" = "x86_64" ]; then 453 454ACCEPTED_BIN_DIFF=" 455./bin/jli.dll 456./demo/jvmti/compiledMethodLoad/lib/compiledMethodLoad.dll 457./demo/jvmti/gctest/lib/gctest.dll 458./demo/jvmti/heapTracker/lib/heapTracker.dll 459./demo/jvmti/heapViewer/lib/heapViewer.dll 460./demo/jvmti/hprof/lib/hprof.dll 461./demo/jvmti/minst/lib/minst.dll 462./demo/jvmti/mtrace/lib/mtrace.dll 463./demo/jvmti/versionCheck/lib/versionCheck.dll 464./demo/jvmti/waiters/lib/waiters.dll 465./jre/bin/attach.dll 466./jre/bin/awt.dll 467./jre/bin/dcpr.dll 468./jre/bin/dt_shmem.dll 469./jre/bin/dt_socket.dll 470./jre/bin/fontmanager.dll 471./jre/bin/hprof.dll 472./jre/bin/instrument.dll 473./jre/bin/j2pcsc.dll 474./jre/bin/j2pkcs11.dll 475./jre/bin/jaas_nt.dll 476./jre/bin/java.dll 477./jre/bin/java_crw_demo.dll 478./jre/bin/jawt.dll 479./jre/bin/JdbcOdbc.dll 480./jre/bin/jdwp.dll 481./jre/bin/jfr.dll 482./jre/bin/jli.dll 483./jre/bin/jpeg.dll 484./jre/bin/jsdt.dll 485./jre/bin/jsound.dll 486./jre/bin/jsoundds.dll 487./jre/bin/kcms.dll 488./jre/bin/management.dll 489./jre/bin/mlib_image.dll 490./jre/bin/net.dll 491./jre/bin/nio.dll 492./jre/bin/npt.dll 493./jre/bin/sawindbg.dll 494./jre/bin/server/jvm.dll 495./jre/bin/splashscreen.dll 496./jre/bin/sunec.dll 497./jre/bin/sunmscapi.dll 498./jre/bin/t2k.dll 499./jre/bin/unpack.dll 500./jre/bin/verify.dll 501./jre/bin/w2k_lsa_auth.dll 502./jre/bin/zip.dll 503./bin/appletviewer.exe 504./bin/extcheck.exe 505./bin/idlj.exe 506./bin/jar.exe 507./bin/jarsigner.exe 508./bin/java.exe 509./bin/javac.exe 510./bin/javadoc.exe 511./bin/javah.exe 512./bin/javap.exe 513./bin/java-rmi.exe 514./bin/javaw.exe 515./bin/jcmd.exe 516./bin/jconsole.exe 517./bin/jdb.exe 518./bin/jhat.exe 519./bin/jinfo.exe 520./bin/jmap.exe 521./bin/jps.exe 522./bin/jrunscript.exe 523./bin/jsadebugd.exe 524./bin/jstack.exe 525./bin/jstat.exe 526./bin/jstatd.exe 527./bin/keytool.exe 528./bin/kinit.exe 529./bin/klist.exe 530./bin/ktab.exe 531./bin/native2ascii.exe 532./bin/orbd.exe 533./bin/pack200.exe 534./bin/policytool.exe 535./bin/rmic.exe 536./bin/rmid.exe 537./bin/rmiregistry.exe 538./bin/schemagen.exe 539./bin/serialver.exe 540./bin/servertool.exe 541./bin/tnameserv.exe 542./bin/unpack200.exe 543./bin/wsgen.exe 544./bin/wsimport.exe 545./bin/xjc.exe 546./jre/bin/java.exe 547./jre/bin/java-rmi.exe 548./jre/bin/javaw.exe 549./jre/bin/keytool.exe 550./jre/bin/kinit.exe 551./jre/bin/klist.exe 552./jre/bin/ktab.exe 553./jre/bin/orbd.exe 554./jre/bin/pack200.exe 555./jre/bin/policytool.exe 556./jre/bin/rmid.exe 557./jre/bin/rmiregistry.exe 558./jre/bin/servertool.exe 559./jre/bin/tnameserv.exe 560./jre/bin/unpack200.exe 561" 562 563KNOWN_SIZE_DIFF=" 564./demo/jvmti/heapTracker/lib/heapTracker.dll 565./demo/jvmti/minst/lib/minst.dll 566./jre/bin/awt.dll 567./jre/bin/java_crw_demo.dll 568./bin/java.exe 569./bin/javaw.exe 570./bin/unpack200.exe 571./jre/bin/java.exe 572./jre/bin/javaw.exe 573./jre/bin/unpack200.exe 574" 575 576KNOWN_SYM_DIFF=" 577./jre/bin/awt.dll 578./jre/bin/java_crw_demo.dll 579" 580fi 581 582 583 584if [ "$OPENJDK_TARGET_OS" = "macosx" ]; then 585ACCEPTED_JARZIP_CONTENTS=" 586/META-INF/INDEX.LIST 587" 588 589KNOWN_BIN_DIFF=" 590./jre/lib/libJObjC.dylib 591./jre/lib/libsaproc.dylib 592./jre/lib/server/libjvm.dylib 593" 594 595ACCEPTED_BIN_DIFF=" 596./bin/appletviewer 597./bin/extcheck 598./bin/idlj 599./bin/jar 600./bin/jarsigner 601./bin/java 602./bin/javac 603./bin/javadoc 604./bin/javah 605./bin/javap 606./bin/jcmd 607./bin/jconsole 608./bin/jdb 609./bin/jhat 610./bin/jinfo 611./bin/jmap 612./bin/jps 613./bin/jrunscript 614./bin/jsadebugd 615./bin/jstack 616./bin/jstat 617./bin/jstatd 618./bin/keytool 619./bin/native2ascii 620./bin/orbd 621./bin/pack200 622./bin/policytool 623./bin/rmic 624./bin/rmid 625./bin/rmiregistry 626./bin/schemagen 627./bin/serialver 628./bin/servertool 629./bin/tnameserv 630./bin/wsgen 631./bin/wsimport 632./bin/xjc 633./jre/bin/java 634./jre/bin/keytool 635./jre/bin/orbd 636./jre/bin/pack200 637./jre/bin/policytool 638./jre/bin/rmid 639./jre/bin/rmiregistry 640./jre/bin/servertool 641./jre/bin/tnameserv 642" 643 644KNOWN_SIZE_DIFF=" 645./jre/lib/libJObjC.dylib 646./jre/lib/server/libjvm.dylib 647" 648 649KNOWN_SYM_DIFF=" 650./jre/lib/libJObjC.dylib 651./jre/lib/server/libjvm.dylib 652" 653 654KNOWN_ELF_DIFF=" 655./jre/lib/libJObjC.dylib 656./jre/lib/server/libjvm.dylib 657" 658 659SKIP_DIS_DIFF="true" 660 661fi 662 663########################################################################################## 664# Compare text files and ignore specific differences: 665# 666# * Timestamps in Java sources generated by idl2java 667# * Sorting order and cleanup style in .properties files 668 669diff_text() { 670 OTHER_FILE=$1 671 THIS_FILE=$2 672 673 SUFFIX="${THIS_FILE##*.}" 674 675 TMP=1 676 677 if [[ "$THIS_FILE" = *"META-INF/MANIFEST.MF" ]]; then 678 TMP=$(LANG=C $DIFF $OTHER_FILE $THIS_FILE | \ 679 $GREP '^[<>]' | \ 680 $SED -e '/[<>] Ant-Version: Apache Ant .*/d' \ 681 -e '/[<>] Created-By: .* (Oracle Corporation).*/d') 682 fi 683 if test "x$SUFFIX" = "xjava"; then 684 TMP=$(LANG=C $DIFF $OTHER_FILE $THIS_FILE | \ 685 $GREP '^[<>]' | \ 686 $SED -e '/[<>] \* from.*\.idl/d' \ 687 -e '/[<>] \*.*[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}-b[0-9]\{2\}.*/d' \ 688 -e '/[<>] \*.*[0-9]\{4\} [0-9][0-9]*:[0-9]\{2\}:[0-9]\{2\}.*/d' \ 689 -e '/\/\/ Generated from input file.*/d' \ 690 -e '/\/\/ This file was generated AUTOMATICALLY from a template file.*/d' \ 691 -e '/\/\/ java GenerateCharacter.*/d') 692 fi 693 # Ignore date strings in class files. 694 # On Macosx the system sources for generated java classes produce different output on 695 # consequtive invokations seemingly randomly. 696 # For example a method parameter randomly named "thePoint" or "aPoint". Ignore this. 697 if test "x$SUFFIX" = "xclass"; then 698 $JAVAP -c -constants -l -p ${OTHER_FILE} > ${OTHER_FILE}.javap 699 $JAVAP -c -constants -l -p ${THIS_FILE} > ${THIS_FILE}.javap 700 TMP=$($DIFF ${OTHER_FILE}.javap ${THIS_FILE}.javap | \ 701 $GREP '^[<>]' | \ 702 $SED -e '/[<>].*[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}-b[0-9]\{2\}.*/d' \ 703 -e '/[<>].*Point Lcom\/apple\/jobjc\/foundation\/NSPoint;/d' \ 704 -e '/[<>].*public com\.apple\.jobjc\.Pointer<com\.apple\.jobjc\..*itemsPtr();/d' \ 705 -e '/[<>].*public void setItemsPtr(com\.apple\.jobjc\.Pointer<com\.apple\.jobjc\..*);/d') 706 fi 707 if test "x$SUFFIX" = "xproperties"; then 708 $CAT $OTHER_FILE | $SED -e 's/\([^\\]\):/\1\\:/g' -e 's/\([^\\]\)=/\1\\=/g' -e 's/#.*/#/g' \ 709 | $SED -f "$SRC_ROOT/common/bin/unicode2x.sed" \ 710 | $SED -e '/^#/d' -e '/^$/d' \ 711 -e :a -e '/\\$/N; s/\\\n//; ta' \ 712 -e 's/^[ \t]*//;s/[ \t]*$//' \ 713 -e 's/\\=/=/' | LANG=C $SORT > $OTHER_FILE.cleaned 714 TMP=$(LANG=C $DIFF $OTHER_FILE.cleaned $THIS_FILE) 715 fi 716 if test -n "$TMP"; then 717 echo Files $OTHER_FILE and $THIS_FILE differ 718 return 1 719 fi 720 721 return 0 722} 723 724########################################################################################## 725# Compare directory structure 726 727compare_dirs() { 728 THIS_DIR=$1 729 OTHER_DIR=$2 730 WORK_DIR=$3 731 732 mkdir -p $WORK_DIR 733 734 (cd $OTHER_DIR && $FIND . -type d | $SORT > $WORK_DIR/other_dirs) 735 (cd $THIS_DIR && $FIND . -type d | $SORT > $WORK_DIR/this_dirs) 736 737 echo -n Directory structure... 738 if $DIFF $WORK_DIR/other_dirs $WORK_DIR/this_dirs > /dev/null; then 739 echo Identical! 740 else 741 echo Differences found. 742 REGRESSIONS=true 743 # Differences in directories found. 744 ONLY_OTHER=$($DIFF $WORK_DIR/other_dirs $WORK_DIR/this_dirs | $GREP '<') 745 if [ "$ONLY_OTHER" ]; then 746 echo Only in $OTHER 747 echo $ONLY_OTHER | $SED 's|< ./|\t|g' | $SED 's/ /\n/g' 748 fi 749 # Differences in directories found. 750 ONLY_THIS=$($DIFF $WORK_DIR/other_dirs $WORK_DIR/this_dirs | $GREP '>') 751 if [ "$ONLY_THIS" ]; then 752 echo Only in $THIS 753 echo $ONLY_THIS | $SED 's|> ./|\t|g' | $SED 's/ /\n/g' 754 fi 755 fi 756} 757 758 759########################################################################################## 760# Compare file structure 761 762compare_files() { 763 THIS_DIR=$1 764 OTHER_DIR=$2 765 WORK_DIR=$3 766 767 mkdir -p $WORK_DIR 768 769 (cd $OTHER_DIR && $FIND . -type f | $SORT > $WORK_DIR/other_files) 770 (cd $THIS_DIR && $FIND . -type f | $SORT > $WORK_DIR/this_files) 771 772 echo -n File names... 773 if diff $WORK_DIR/other_files $WORK_DIR/this_files > /dev/null; then 774 echo Identical! 775 else 776 echo Differences found. 777 REGRESSIONS=true 778 # Differences in directories found. 779 ONLY_OTHER=$(diff $WORK_DIR/other_files $WORK_DIR/this_files | $GREP '<') 780 if [ "$ONLY_OTHER" ]; then 781 echo Only in $OTHER 782 echo "$ONLY_OTHER" | sed 's|< ./| |g' 783 fi 784 # Differences in directories found. 785 ONLY_THIS=$(diff $WORK_DIR/other_files $WORK_DIR/this_files | $GREP '>') 786 if [ "$ONLY_THIS" ]; then 787 echo Only in $THIS 788 echo "$ONLY_THIS" | sed 's|> ./| |g' 789 fi 790 fi 791} 792 793 794########################################################################################## 795# Compare permissions 796 797compare_permissions() { 798 THIS_DIR=$1 799 OTHER_DIR=$2 800 WORK_DIR=$3 801 802 mkdir -p $WORK_DIR 803 804 echo -n Permissions... 805 found="" 806 for f in `cd $OTHER_DIR && $FIND . -type f` 807 do 808 if [ ! -f ${OTHER_DIR}/$f ]; then continue; fi 809 if [ ! -f ${THIS_DIR}/$f ]; then continue; fi 810 OP=`ls -l ${OTHER_DIR}/$f | awk '{printf("%.10s\n", $1);}'` 811 TP=`ls -l ${THIS_DIR}/$f | awk '{printf("%.10s\n", $1);}'` 812 if [ "$OP" != "$TP" ] 813 then 814 if [ -z "$found" ]; then echo ; found="yes"; fi 815 $PRINTF "\told: ${OP} new: ${TP}\t$f\n" 816 fi 817 done 818 if [ -z "$found" ]; then 819 echo "Identical!" 820 else 821 REGRESSIONS=true 822 fi 823} 824 825########################################################################################## 826# Compare file command output 827 828compare_file_types() { 829 THIS_DIR=$1 830 OTHER_DIR=$2 831 WORK_DIR=$3 832 833 $MKDIR -p $WORK_DIR 834 835 echo -n File types... 836 found="" 837 for f in `cd $OTHER_DIR && $FIND . -type f` 838 do 839 if [ ! -f ${OTHER_DIR}/$f ]; then continue; fi 840 if [ ! -f ${THIS_DIR}/$f ]; then continue; fi 841 OF=`cd ${OTHER_DIR} && $FILE $f` 842 TF=`cd ${THIS_DIR} && $FILE $f` 843 if [ "$f" = "./src.zip" ] || [ "$f" = "./jre/lib/JObjC.jar" ] || [ "$f" = "./lib/JObjC.jar" ] 844 then 845 if [ "`echo $OF | $GREP -ic zip`" -gt 0 -a "`echo $TF | $GREP -ic zip`" -gt 0 ] 846 then 847 # the way we produces zip-files make it so that directories are stored in old file 848 # but not in new (only files with full-path) 849 # this makes file-5.09 report them as different 850 continue; 851 fi 852 fi 853 854 if [ "$OF" != "$TF" ] 855 then 856 if [ -z "$found" ]; then echo ; found="yes"; fi 857 $PRINTF "\tother: ${OF}\n\tthis : ${TF}\n" 858 fi 859 done 860 if [ -z "$found" ]; then 861 echo "Identical!" 862 else 863 REGRESSIONS=true 864 fi 865} 866 867########################################################################################## 868# Compare the rest of the files 869 870compare_general_files() { 871 THIS_DIR=$1 872 OTHER_DIR=$2 873 WORK_DIR=$3 874 875 GENERAL_FILES=$(cd $THIS_DIR && $FIND . -type f ! -name "*.so" ! -name "*.jar" ! -name "*.zip" \ 876 ! -name "*.debuginfo" ! -name "*.dylib" ! -name "jexec" \ 877 ! -name "ct.sym" ! -name "*.diz" ! -name "*.dll" \ 878 ! -name "*.pdb" ! -name "*.exp" ! -name "*.ilk" \ 879 ! -name "*.lib" \ 880 | $GREP -v "./bin/" | $SORT | $FILTER) 881 882 echo General files... 883 for f in $GENERAL_FILES 884 do 885 if [ -e $OTHER_DIR/$f ]; then 886 DIFF_OUT=$($DIFF $OTHER_DIR/$f $THIS_DIR/$f 2>&1) 887 if [ -n "$DIFF_OUT" ]; then 888 echo $f 889 REGRESSIONS=true 890 if [ "$SHOW_DIFFS" = "true" ]; then 891 echo "$DIFF_OUT" 892 fi 893 fi 894 fi 895 done 896 897 898} 899 900########################################################################################## 901# Compare zip file 902 903compare_zip_file() { 904 THIS_DIR=$1 905 OTHER_DIR=$2 906 WORK_DIR=$3 907 ZIP_FILE=$4 908 909 THIS_ZIP=$THIS_DIR/$ZIP_FILE 910 OTHER_ZIP=$OTHER_DIR/$ZIP_FILE 911 912 THIS_SUFFIX="${THIS_ZIP##*.}" 913 OTHER_SUFFIX="${OTHER_ZIP##*.}" 914 if [ "$THIS_SUFFIX" != "$OTHER_SUFFIX" ]; then 915 echo The files do not have the same suffix type! 916 return 2 917 fi 918 919 UNARCHIVE="$UNZIP -q" 920 921 TYPE="$THIS_SUFFIX" 922 923 if $CMP $OTHER_ZIP $THIS_ZIP > /dev/null 924 then 925 return 0 926 fi 927 # Not quite identical, the might still contain the same data. 928 # Unpack the jar/zip files in temp dirs 929 930 THIS_UNZIPDIR=$WORK_DIR/$ZIP_FILE.this 931 OTHER_UNZIPDIR=$WORK_DIR/$ZIP_FILE.other 932 $RM -rf $THIS_UNZIPDIR $OTHER_UNZIPDIR 933 $MKDIR -p $THIS_UNZIPDIR 934 $MKDIR -p $OTHER_UNZIPDIR 935 (cd $THIS_UNZIPDIR && $UNARCHIVE $THIS_ZIP) 936 (cd $OTHER_UNZIPDIR && $UNARCHIVE $OTHER_ZIP) 937 938 CONTENTS_DIFF_FILE=$WORK_DIR/$ZIP_FILE.diff 939 LANG=C $DIFF -rq $OTHER_UNZIPDIR $THIS_UNZIPDIR > $CONTENTS_DIFF_FILE 940 941 ONLY_OTHER=$($GREP "^Only in $OTHER_UNZIPDIR" $CONTENTS_DIFF_FILE) 942 ONLY_THIS=$($GREP "^Only in $THIS_UNZIPDIR" $CONTENTS_DIFF_FILE) 943 944 return_value=0 945 946 if [ -n "$ONLY_OTHER" ]; then 947 echo " Only OTHER $ZIP_FILE contains:" 948 echo "$ONLY_OTHER" | sed "s|Only in $OTHER_UNZIPDIR| |"g | sed 's|: |/|g' 949 return_value=1 950 fi 951 952 if [ -n "$ONLY_THIS" ]; then 953 echo " Only THIS $ZIP_FILE contains:" 954 echo "$ONLY_THIS" | sed "s|Only in $THIS_UNZIPDIR| |"g | sed 's|: |/|g' 955 return_value=1 956 fi 957 958 DIFFING_FILES=$($GREP differ $CONTENTS_DIFF_FILE | $CUT -f 2 -d ' ' | $SED "s|$OTHER_UNZIPDIR/||g") 959 960 $RM -f $WORK_DIR/$ZIP_FILE.diffs 961 for file in $DIFFING_FILES; do 962 if [[ "$ACCEPTED_JARZIP_CONTENTS" != *"$file"* ]]; then 963 diff_text $OTHER_UNZIPDIR/$file $THIS_UNZIPDIR/$file >> $WORK_DIR/$ZIP_FILE.diffs 964 fi 965 done 966 967 if [ -s "$WORK_DIR/$ZIP_FILE.diffs" ]; then 968 return_value=1 969 echo " Differing files in $ZIP_FILE" 970 $CAT $WORK_DIR/$ZIP_FILE.diffs | $GREP differ | cut -f 2 -d ' ' | \ 971 $SED "s|$OTHER_UNZIPDIR| |g" > $WORK_DIR/$ZIP_FILE.difflist 972 $CAT $WORK_DIR/$ZIP_FILE.difflist 973 974 if [ -n "$SHOW_DIFFS" ]; then 975 for i in $(cat $WORK_DIR/$ZIP_FILE.difflist) ; do 976 if [ -f "${OTHER_UNZIPDIR}/$i.javap" ]; then 977 LANG=C $DIFF ${OTHER_UNZIPDIR}/$i.javap ${THIS_UNZIPDIR}/$i.javap 978 elif [ -f "${OTHER_UNZIPDIR}/$i.cleaned" ]; then 979 LANG=C $DIFF ${OTHER_UNZIPDIR}/$i.cleaned ${THIS_UNZIPDIR}/$i 980 else 981 LANG=C $DIFF ${OTHER_UNZIPDIR}/$i ${THIS_UNZIPDIR}/$i 982 fi 983 done 984 fi 985 fi 986 987 return $return_value 988} 989 990 991########################################################################################## 992# Compare all zip files 993 994compare_all_zip_files() { 995 THIS_DIR=$1 996 OTHER_DIR=$2 997 WORK_DIR=$3 998 999 ZIPS=$(cd $THIS_DIR && $FIND . -type f -name "*.zip" | $SORT | $FILTER ) 1000 1001 if [ -n "$ZIPS" ]; then 1002 echo Zip files... 1003 1004 return_value=0 1005 for f in $ZIPS; do 1006 if [ -f "$OTHER_DIR/$f" ]; then 1007 compare_zip_file $THIS_DIR $OTHER_DIR $WORK_DIR $f 1008 if [ "$?" != "0" ]; then 1009 return_value=1 1010 REGRESSIONS=true 1011 fi 1012 fi 1013 done 1014 fi 1015 1016 return $return_value 1017} 1018 1019########################################################################################## 1020# Compare all jar files 1021 1022compare_all_jar_files() { 1023 THIS_DIR=$1 1024 OTHER_DIR=$2 1025 WORK_DIR=$3 1026 1027 # TODO filter? 1028 ZIPS=$(cd $THIS_DIR && $FIND . -type f -name "*.jar" | $SORT | $FILTER) 1029 1030 if [ -n "$ZIPS" ]; then 1031 echo Jar files... 1032 1033 return_value=0 1034 for f in $ZIPS; do 1035 if [ -f "$OTHER_DIR/$f" ]; then 1036 compare_zip_file $THIS_DIR $OTHER_DIR $WORK_DIR $f 1037 if [ "$?" != "0" ]; then 1038 return_value=1 1039 REGRESSIONS=true 1040 fi 1041 fi 1042 done 1043 fi 1044 1045 return $return_value 1046} 1047 1048########################################################################################## 1049# Compare binary (executable/library) file 1050 1051compare_bin_file() { 1052 THIS_DIR=$1 1053 OTHER_DIR=$2 1054 WORK_DIR=$3 1055 BIN_FILE=$4 1056 1057 THIS_FILE=$THIS_DIR/$BIN_FILE 1058 OTHER_FILE=$OTHER_DIR/$BIN_FILE 1059 NAME=$(basename $BIN_FILE) 1060 WORK_FILE_BASE=$WORK_DIR/$BIN_FILE 1061 FILE_WORK_DIR=$(dirname $WORK_FILE_BASE) 1062 1063 $MKDIR -p $FILE_WORK_DIR 1064 1065 ORIG_THIS_FILE="$THIS_FILE" 1066 ORIG_OTHER_FILE="$OTHER_FILE" 1067 1068 if [[ "$STRIP_BEFORE_COMPARE" = *"$BIN_FILE"* ]]; then 1069 THIS_STRIPPED_FILE=$FILE_WORK_DIR/this/$NAME 1070 OTHER_STRIPPED_FILE=$FILE_WORK_DIR/other/$NAME 1071 $MKDIR -p $FILE_WORK_DIR/this $FILE_WORK_DIR/other 1072 $CP $THIS_FILE $THIS_STRIPPED_FILE 1073 $CP $OTHER_FILE $OTHER_STRIPPED_FILE 1074 $STRIP $THIS_STRIPPED_FILE 1075 $STRIP $OTHER_STRIPPED_FILE 1076 THIS_FILE="$THIS_STRIPPED_FILE" 1077 OTHER_FILE="$OTHER_STRIPPED_FILE" 1078 fi 1079 1080 if [ -z "$SKIP_BIN_DIFF" ]; then 1081 if cmp $OTHER_FILE $THIS_FILE > /dev/null; then 1082 # The files were bytewise identical. 1083 if [ -n "$VERBOSE" ]; then 1084 echo " : : : : : $BIN_FILE" 1085 fi 1086 return 0 1087 fi 1088 BIN_MSG=" diff " 1089 if [[ "$ACCEPTED_BIN_DIFF" != *"$BIN_FILE"* ]]; then 1090 DIFF_BIN=true 1091 if [[ "$KNOWN_BIN_DIFF" != *"$BIN_FILE"* ]]; then 1092 BIN_MSG="*$BIN_MSG*" 1093 REGRESSIONS=true 1094 else 1095 BIN_MSG=" $BIN_MSG " 1096 fi 1097 else 1098 BIN_MSG="($BIN_MSG)" 1099 DIFF_BIN= 1100 fi 1101 fi 1102 1103 THIS_SIZE=$(ls -l "$THIS_FILE" | awk '{ print $5 }') 1104 OTHER_SIZE=$(ls -l "$OTHER_FILE" | awk '{ print $5 }') 1105 if [ $THIS_SIZE -ne $OTHER_SIZE ]; then 1106 DIFF_SIZE_NUM=$($EXPR $THIS_SIZE - $OTHER_SIZE) 1107 DIFF_SIZE_REL=$($EXPR $THIS_SIZE \* 100 / $OTHER_SIZE) 1108 SIZE_MSG=$($PRINTF "%3d%% %4d" $DIFF_SIZE_REL $DIFF_SIZE_NUM) 1109 if [[ "$ACCEPTED_SMALL_SIZE_DIFF" = *"$BIN_FILE"* ]] && [ "$DIFF_SIZE_REL" -gt 98 ] && [ "$DIFF_SIZE_REL" -lt 102 ]; then 1110 SIZE_MSG="($SIZE_MSG)" 1111 DIFF_SIZE= 1112 else 1113 if [[ "$ACCEPTED_SIZE_DIFF" != *"$BIN_FILE"* ]]; then 1114 DIFF_SIZE=true 1115 if [[ "$KNOWN_SIZE_DIFF" != *"$BIN_FILE"* ]]; then 1116 SIZE_MSG="*$SIZE_MSG*" 1117 REGRESSIONS=true 1118 else 1119 SIZE_MSG=" $SIZE_MSG " 1120 fi 1121 else 1122 SIZE_MSG="($SIZE_MSG)" 1123 DIFF_SIZE= 1124 fi 1125 fi 1126 else 1127 SIZE_MSG=" " 1128 DIFF_SIZE= 1129 if [[ "$KNOWN_SIZE_DIFF $ACCEPTED_SIZE_DIFF" = *"$BIN_FILE"* ]]; then 1130 SIZE_MSG=" ! " 1131 fi 1132 fi 1133 1134 if [[ "$SORT_SYMBOLS" = *"$BIN_FILE"* ]]; then 1135 SYM_SORT_CMD="sort" 1136 else 1137 SYM_SORT_CMD="cat" 1138 fi 1139 1140 # Check symbols 1141 if [ "$OPENJDK_TARGET_OS" = "windows" ]; then 1142 $DUMPBIN -exports $OTHER_FILE | $GREP " = " | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.other 1143 $DUMPBIN -exports $THIS_FILE | $GREP " = " | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.this 1144 elif [ "$OPENJDK_TARGET_OS" = "solaris" ]; then 1145 # Some symbols get seemingly random 15 character prefixes. Filter them out. 1146 $NM -a $ORIG_OTHER_FILE | $GREP -v $NAME | $AWK '{print $2, $3, $4, $5}' | $SED 's/^\([a-zA-Z] \.\)[a-zA-Z0-9_\$]\{15,15\}\./\1./g' | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.other 1147 $NM -a $ORIG_THIS_FILE | $GREP -v $NAME | $AWK '{print $2, $3, $4, $5}' | $SED 's/^\([a-zA-Z] \.\)[a-zA-Z0-9_\$]\{15,15\}\./\1./g' | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.this 1148 else 1149 $NM -a $ORIG_OTHER_FILE | $GREP -v $NAME | $AWK '{print $2, $3, $4, $5}' | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.other 1150 $NM -a $ORIG_THIS_FILE | $GREP -v $NAME | $AWK '{print $2, $3, $4, $5}' | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.this 1151 fi 1152 1153 LANG=C $DIFF $WORK_FILE_BASE.symbols.other $WORK_FILE_BASE.symbols.this > $WORK_FILE_BASE.symbols.diff 1154 if [ -s $WORK_FILE_BASE.symbols.diff ]; then 1155 SYM_MSG=" diff " 1156 if [[ "$ACCEPTED_SYM_DIFF" != *"$BIN_FILE"* ]]; then 1157 DIFF_SYM=true 1158 if [[ "$KNOWN_SYM_DIFF" != *"$BIN_FILE"* ]]; then 1159 SYM_MSG="*$SYM_MSG*" 1160 REGRESSIONS=true 1161 else 1162 SYM_MSG=" $SYM_MSG " 1163 fi 1164 else 1165 SYM_MSG="($SYM_MSG)" 1166 DIFF_SYM= 1167 fi 1168 else 1169 SYM_MSG=" " 1170 DIFF_SYM= 1171 if [[ "$KNOWN_SYM_DIFF $ACCEPTED_SYM_DIFF" = *"$BIN_FILE"* ]]; then 1172 SYM_MSG=" ! " 1173 fi 1174 fi 1175 1176 # Check dependencies 1177 if [ -n "$LDD_CMD" ];then 1178 (cd $FILE_WORK_DIR && $CP $OTHER_FILE . && $LDD_CMD $NAME | $AWK '{ print $1;}' | $SORT | $TEE $WORK_FILE_BASE.deps.other | $UNIQ > $WORK_FILE_BASE.deps.other.uniq) 1179 (cd $FILE_WORK_DIR && $CP $THIS_FILE . && $LDD_CMD $NAME | $AWK '{ print $1;}' | $SORT | $TEE $WORK_FILE_BASE.deps.this | $UNIQ > $WORK_FILE_BASE.deps.this.uniq) 1180 (cd $FILE_WORK_DIR && $RM -f $NAME) 1181 1182 LANG=C $DIFF $WORK_FILE_BASE.deps.other $WORK_FILE_BASE.deps.this > $WORK_FILE_BASE.deps.diff 1183 LANG=C $DIFF $WORK_FILE_BASE.deps.other.uniq $WORK_FILE_BASE.deps.this.uniq > $WORK_FILE_BASE.deps.diff.uniq 1184 1185 if [ -s $WORK_FILE_BASE.deps.diff ]; then 1186 if [ -s $WORK_FILE_BASE.deps.diff.uniq ]; then 1187 DEP_MSG=" diff " 1188 else 1189 DEP_MSG=" redun " 1190 fi 1191 if [[ "$ACCEPTED_DEP_DIFF" != *"$BIN_FILE"* ]]; then 1192 DIFF_DEP=true 1193 if [[ "$KNOWN_DEP_DIFF" != *"$BIN_FILE"* ]]; then 1194 DEP_MSG="*$DEP_MSG*" 1195 REGRESSIONS=true 1196 else 1197 DEP_MSG=" $DEP_MSG " 1198 fi 1199 else 1200 DEP_MSG="($DEP_MSG)" 1201 DIFF_DEP= 1202 fi 1203 else 1204 DEP_MSG=" " 1205 DIFF_DEP= 1206 if [[ "$KNOWN_DEP_DIFF $ACCEPTED_DEP_DIFF" = *"$BIN_FILE"* ]]; then 1207 DEP_MSG=" ! " 1208 fi 1209 fi 1210 fi 1211 1212 # Compare readelf output 1213 if [ -n "$READELF_CMD" ] && [ -z "$SKIP_ELF_DIFF" ]; then 1214 $READELF_CMD $OTHER_FILE > $WORK_FILE_BASE.readelf.other 2>&1 1215 $READELF_CMD $THIS_FILE > $WORK_FILE_BASE.readelf.this 2>&1 1216 1217 LANG=C $DIFF $WORK_FILE_BASE.readelf.other $WORK_FILE_BASE.readelf.this > $WORK_FILE_BASE.readelf.diff 1218 1219 if [ -s $WORK_FILE_BASE.readelf.diff ]; then 1220 ELF_DIFF_SIZE=$(ls -n $WORK_FILE_BASE.readelf.diff | awk '{print $5}') 1221 ELF_MSG=$($PRINTF "%8d" $ELF_DIFF_SIZE) 1222 if [[ "$ACCEPTED_ELF_DIFF" != *"$BIN_FILE"* ]]; then 1223 DIFF_ELF=true 1224 if [[ "$KNOWN_ELF_DIFF" != *"$BIN_FILE"* ]]; then 1225 ELF_MSG="*$ELF_MSG*" 1226 REGRESSIONS=true 1227 else 1228 ELF_MSG=" $ELF_MSG " 1229 fi 1230 else 1231 ELF_MSG="($ELF_MSG)" 1232 DIFF_ELF= 1233 fi 1234 else 1235 ELF_MSG=" " 1236 DIFF_ELF= 1237 if [[ "$KNOWN_DEP_DIFF $ACCEPTED_DEP_DIFF" = *"$BIN_FILE"* ]]; then 1238 ELF_MSG=" ! " 1239 fi 1240 fi 1241 fi 1242 1243 # Compare disassemble output 1244 if [ -f "$OBJDUMP" ] && [ -z "$SKIP_DIS_DIFF" ]; then 1245 $OBJDUMP -d $OTHER_FILE | $GREP -v $NAME > $WORK_FILE_BASE.dis.other 2>&1 1246 $OBJDUMP -d $THIS_FILE | $GREP -v $NAME > $WORK_FILE_BASE.dis.this 2>&1 1247 1248 LANG=C $DIFF $WORK_FILE_BASE.dis.other $WORK_FILE_BASE.dis.this > $WORK_FILE_BASE.dis.diff 1249 1250 if [ -s $WORK_FILE_BASE.dis.diff ]; then 1251 DIS_DIFF_SIZE=$(ls -n $WORK_FILE_BASE.dis.diff | awk '{print $5}') 1252 DIS_MSG=$($PRINTF "%8d" $DIS_DIFF_SIZE) 1253 if [[ "$ACCEPTED_DIS_DIFF" != *"$BIN_FILE"* ]]; then 1254 DIFF_DIS=true 1255 if [[ "$KNOWN_DIS_DIFF" != *"$BIN_FILE"* ]]; then 1256 DIS_MSG="*$DIS_MSG*" 1257 REGRESSIONS=true 1258 else 1259 DIS_MSG=" $DIS_MSG " 1260 fi 1261 else 1262 DIS_MSG="($DIS_MSG)" 1263 DIFF_DIS= 1264 fi 1265 else 1266 DIS_MSG=" " 1267 DIFF_DIS= 1268 if [[ "$KNOWN_DEP_DIFF $ACCEPTED_DEP_DIFF" = *"$BIN_FILE"* ]]; then 1269 DIS_MSG=" ! " 1270 fi 1271 fi 1272 fi 1273 1274 1275 if [ -n "$DIFF_BIN$DIFF_SIZE$DIFF_SYM$DIFF_DEP$DIFF_ELF$DIFF_DIS" ] || [ -n "$VERBOSE" ]; then 1276 if [ -n "$BIN_MSG" ]; then echo -n "$BIN_MSG:"; fi 1277 if [ -n "$SIZE_MSG" ]; then echo -n "$SIZE_MSG:"; fi 1278 if [ -n "$SYM_MSG" ]; then echo -n "$SYM_MSG:"; fi 1279 if [ -n "$DEP_MSG" ]; then echo -n "$DEP_MSG:"; fi 1280 if [ -n "$ELF_MSG" ]; then echo -n "$ELF_MSG:"; fi 1281 if [ -n "$DIS_MSG" ]; then echo -n "$DIS_MSG:"; fi 1282 echo " $BIN_FILE" 1283 if [ "$SHOW_DIFFS" = "true" ]; then 1284 if [ -s "$WORK_FILE_BASE.symbols.diff" ]; then 1285 echo "Symbols diff:" 1286 $CAT $WORK_FILE_BASE.symbols.diff 1287 fi 1288 if [ -s "$WORK_FILE_BASE.deps.diff" ]; then 1289 echo "Deps diff:" 1290 $CAT $WORK_FILE_BASE.deps.diff 1291 fi 1292 if [ -s "$WORK_FILE_BASE.readelf.diff" ]; then 1293 echo "Readelf diff:" 1294 $CAT $WORK_FILE_BASE.readelf.diff 1295 fi 1296 if [ -s "$WORK_FILE_BASE.dis.diff" ]; then 1297 echo "Disassembly diff:" 1298 $CAT $WORK_FILE_BASE.dis.diff 1299 fi 1300 fi 1301 return 1 1302 fi 1303 return 0 1304} 1305 1306########################################################################################## 1307# Print binary diff header 1308 1309print_binary_diff_header() { 1310 if [ -z "$SKIP_BIN_DIFF" ]; then echo -n " Binary :"; fi 1311 if [ -z "$SKIP_SIZE_DIFF" ]; then echo -n " Size :"; fi 1312 if [ -z "$SKIP_SYM_DIFF" ]; then echo -n " Symbols :"; fi 1313 if [ -z "$SKIP_DEP_DIFF" ]; then echo -n " Deps :"; fi 1314 if [ -z "$SKIP_ELF_DIFF" ]; then echo -n " Readelf :"; fi 1315 if [ -z "$SKIP_DIS_DIFF" ]; then echo -n " Disass :"; fi 1316 echo 1317} 1318 1319########################################################################################## 1320# Compare all libraries 1321 1322compare_all_libs() { 1323 THIS_DIR=$1 1324 OTHER_DIR=$2 1325 WORK_DIR=$3 1326 1327 LIBS=$(cd $THIS_DIR && $FIND . -name 'lib*.so' -o -name '*.dylib' -o -name '*.dll' | $SORT | $FILTER) 1328 1329 if [ -n "$LIBS" ]; then 1330 echo Libraries... 1331 print_binary_diff_header 1332 for l in $LIBS; do 1333 if [ -f "$OTHER_DIR/$l" ]; then 1334 compare_bin_file $THIS_DIR $OTHER_DIR $WORK_DIR $l 1335 if [ "$?" != "0" ]; then 1336 return_value=1 1337 fi 1338 fi 1339 done 1340 fi 1341 1342 return $return_value 1343} 1344 1345########################################################################################## 1346# Compare all executables 1347 1348compare_all_execs() { 1349 THIS_DIR=$1 1350 OTHER_DIR=$2 1351 WORK_DIR=$3 1352 1353 if [ "$OPENJDK_TARGET_OS" = "windows" ]; then 1354 EXECS=$(cd $THIS_DIR && $FIND . -type f -name '*.exe' | $SORT | $FILTER) 1355 else 1356 EXECS=$(cd $THIS_DIR && $FIND . -name db -prune -o -type f -perm -100 \! \( -name '*.so' -o -name '*.dylib' -o -name '*.dll' -o -name '*.cgi' \) | $SORT | $FILTER) 1357 fi 1358 1359 if [ -n "$EXECS" ]; then 1360 echo Executables... 1361 print_binary_diff_header 1362 for e in $EXECS; do 1363 if [ -f "$OTHER_DIR/$e" ]; then 1364 compare_bin_file $THIS_DIR $OTHER_DIR $WORK_DIR $e 1365 if [ "$?" != "0" ]; then 1366 return_value=1 1367 fi 1368 fi 1369 done 1370 fi 1371 1372 return $return_value 1373} 1374 1375########################################################################################## 1376# Initiate configuration 1377 1378COMPARE_ROOT=/tmp/cimages.$USER 1379$MKDIR -p $COMPARE_ROOT 1380if [ "$OPENJDK_TARGET_OS" = "windows" ]; then 1381 if [ "$(uname -o)" = "Cygwin" ]; then 1382 COMPARE_ROOT=$(cygpath -msa $COMPARE_ROOT) 1383 fi 1384fi 1385 1386THIS="$( cd "$( dirname "$0" )" && pwd )" 1387echo "$THIS" 1388THIS_SCRIPT="$0" 1389 1390if [ -z "$1" ] || [ "$1" = "-h" ] || [ "$1" = "-?" ] || [ "$1" = "/h" ] || [ "$1" = "/?" ] || [ "$1" = "-help" ] || [ "$1" = "--help" ]; then 1391 echo "bash ./compare.sh [OPTIONS] [FILTER]" 1392 echo "" 1393 echo "-all Compare all files in all known ways" 1394 echo "-names Compare the file names and directory structure" 1395 echo "-perms Compare the permission bits on all files and directories" 1396 echo "-types Compare the output of the file command on all files" 1397 echo "-general Compare the files not convered by the specialized comparisons" 1398 echo "-zips Compare the contents of all zip files" 1399 echo "-jars Compare the contents of all jar files" 1400 echo "-libs Compare all native libraries" 1401 echo "-execs Compare all executables" 1402 echo "-v Verbose output, does not hide known differences" 1403 echo "-vv More verbose output, shows diff output of all comparisons" 1404 echo "-o [OTHER] Compare with build in other directory. Will default to the old build directory" 1405 echo "" 1406 echo "[FILTER] List filenames in the image to compare, works for jars, zips, libs and execs" 1407 echo "Example:" 1408 echo "bash ./common/bin/compareimages.sh CodePointIM.jar" 1409 exit 10 1410fi 1411 1412CMP_NAMES=false 1413CMP_PERMS=false 1414CMP_TYPES=false 1415CMP_GENERAL=false 1416CMP_ZIPS=false 1417CMP_JARS=false 1418CMP_LIBS=false 1419CMP_EXECS=false 1420 1421while [ -n "$1" ]; do 1422 case "$1" in 1423 -v) 1424 VERBOSE=true 1425 ;; 1426 -vv) 1427 VERBOSE=true 1428 SHOW_DIFFS=true 1429 ;; 1430 -o) 1431 OTHER=$2 1432 shift 1433 ;; 1434 -all) 1435 CMP_NAMES=true 1436 if [ "$OPENJDK_TARGET_OS" != "windows" ]; then 1437 CMP_PERMS=true 1438 fi 1439 CMP_TYPES=true 1440 CMP_GENERAL=true 1441 CMP_ZIPS=true 1442 CMP_JARS=true 1443 CMP_LIBS=true 1444 CMP_EXECS=true 1445 ;; 1446 -names) 1447 CMP_NAMES=true 1448 ;; 1449 -perms) 1450 CMP_PERMS=true 1451 ;; 1452 -types) 1453 CMP_TYPES=true 1454 ;; 1455 -general) 1456 CMP_GENERAL=true 1457 ;; 1458 -zips) 1459 CMP_ZIPS=true 1460 ;; 1461 -jars) 1462 CMP_JARS=true 1463 ;; 1464 -libs) 1465 CMP_LIBS=true 1466 ;; 1467 -execs) 1468 CMP_EXECS=true 1469 ;; 1470 *) 1471 CMP_NAMES=false 1472 CMP_PERMS=false 1473 CMP_TYPES=false 1474 CMP_ZIPS=true 1475 CMP_JARS=true 1476 CMP_LIBS=true 1477 CMP_EXECS=true 1478 1479 if [ -z "$FILTER" ]; then 1480 FILTER="$GREP" 1481 fi 1482 FILTER="$FILTER -e $1" 1483 ;; 1484 esac 1485 shift 1486done 1487 1488if [ "$CMP_NAMES" = "false" ] && [ "$CMP_TYPES" = "false" ] && [ "$CMP_PERMS" = "false" ] && [ "$CMP_GENERAL" = "false" ] && [ "$CMP_ZIPS" = "false" ] && [ "$CMP_JARS" = "false" ] && [ "$CMP_LIBS" = "false" ] && [ "$CMP_EXECS" = "false" ]; then 1489 CMP_NAMES=true 1490 CMP_PERMS=true 1491 CMP_TYPES=true 1492 CMP_GENERAL=true 1493 CMP_ZIPS=true 1494 CMP_JARS=true 1495 CMP_LIBS=true 1496 CMP_EXECS=true 1497fi 1498 1499if [ -z "$FILTER" ]; then 1500 FILTER="$CAT" 1501fi 1502 1503if [ -z "$OTHER" ]; then 1504 OTHER="$THIS/../$LEGACY_BUILD_DIR" 1505 if [ -d "$OTHER" ]; then 1506 OTHER="$( cd "$OTHER" && pwd )" 1507 else 1508 echo "Default old build directory does not exist:" 1509 echo "$OTHER" 1510 fi 1511 echo "Comparing to default old build:" 1512 echo "$OTHER" 1513 echo 1514else 1515 echo "Comparing to:" 1516 echo "$OTHER" 1517 echo 1518fi 1519 1520if [ ! -d "$OTHER" ]; then 1521 echo "Other build directory does not exist:" 1522 echo "$OTHER" 1523 exit 1; 1524fi 1525 1526# Figure out the layout of the new build. Which kinds of images have been produced 1527if [ -d "$THIS/images/j2sdk-image" ]; then 1528 THIS_J2SDK="$THIS/images/j2sdk-image" 1529 THIS_J2RE="$THIS/images/j2re-image" 1530fi 1531if [ -d "$THIS/images/j2sdk-overlay-image" ]; then 1532 THIS_J2SDK_OVERLAY="$THIS/images/j2sdk-overlay-image" 1533 THIS_J2RE_OVERLAY="$THIS/images/j2re-overlay-image" 1534fi 1535 1536# Figure out the layout of the other build (old or new, normal or overlay image) 1537if [ -d "$OTHER/j2sdk-image" ]; then 1538 if [ -f "$OTHER/j2sdk-image/LICENSE" ]; then 1539 OTHER_J2SDK="$OTHER/j2sdk-image" 1540 OTHER_J2RE="$OTHER/j2re-image" 1541 else 1542 OTHER_J2SDK_OVERLAY="$OTHER/j2sdk-image" 1543 OTHER_J2RE_OVERLAY="$OTHER/j2re-image" 1544 fi 1545 1546fi 1547 1548if [ -z "$OTHER_J2SDK" ] && [ -n "$OTHER_J2SDK_OVERLAY" ] && [ -z "$THIS_J2SDK_OVERLAY" ]; then 1549 echo "OTHER build only has an overlay image while this build does not. Nothing to compare!" 1550 exit 1 1551fi 1552 1553 1554########################################################################################## 1555# Do the work 1556 1557if [ "$CMP_NAMES" = "true" ]; then 1558 if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then 1559 echo -n "J2SDK " 1560 compare_dirs $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk 1561 echo -n "J2RE " 1562 compare_dirs $THIS_J2RE $OTHER_J2RE $COMPARE_ROOT/j2re 1563 1564 echo -n "J2SDK " 1565 compare_files $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk 1566 echo -n "J2RE " 1567 compare_files $THIS_J2RE $OTHER_J2RE $COMPARE_ROOT/j2re 1568 fi 1569 if [ -n "$THIS_J2SDK_OVERLAY" ] && [ -n "$OTHER_J2SDK_OVERLAY" ]; then 1570 echo -n "J2SDK Overlay " 1571 compare_dirs $THIS_J2SDK_OVERLAY $OTHER_J2SDK_OVERLAY $COMPARE_ROOT/j2sdk-overlay 1572 echo -n "J2RE Overlay " 1573 compare_dirs $THIS_J2RE_OVERLAY $OTHER_J2RE_OVERLAY $COMPARE_ROOT/j2re-overlay 1574 1575 echo -n "J2SDK Overlay " 1576 compare_files $THIS_J2SDK_OVERLAY $OTHER_J2SDK_OVERLAY $COMPARE_ROOT/j2sdk-overlay 1577 echo -n "J2RE Overlay " 1578 compare_files $THIS_J2RE_OVERLAY $OTHER_J2RE_OVERLAY $COMPARE_ROOT/j2re-overlay 1579 fi 1580fi 1581 1582if [ "$CMP_PERMS" = "true" ]; then 1583 if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then 1584 echo -n "J2SDK " 1585 compare_permissions $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk 1586 echo -n "J2RE " 1587 compare_permissions $THIS_J2RE $OTHER_J2RE $COMPARE_ROOT/j2re 1588 fi 1589 if [ -n "$THIS_J2SDK_OVERLAY" ] && [ -n "$OTHER_J2SDK_OVERLAY" ]; then 1590 echo -n "J2SDK Overlay " 1591 compare_permissions $THIS_J2SDK_OVERLAY $OTHER_J2SDK_OVERLAY $COMPARE_ROOT/j2sdk-overlay 1592 echo -n "J2RE Overlay " 1593 compare_permissions $THIS_J2RE_OVERLAY $OTHER_J2RE_OVERLAY $COMPARE_ROOT/j2re-overlay 1594 fi 1595fi 1596 1597if [ "$CMP_TYPES" = "true" ]; then 1598 if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then 1599 echo -n "J2SDK " 1600 compare_file_types $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk 1601 echo -n "J2RE " 1602 compare_file_types $THIS_J2RE $OTHER_J2RE $COMPARE_ROOT/j2re 1603 fi 1604 if [ -n "$THIS_J2SDK_OVERLAY" ] && [ -n "$OTHER_J2SDK_OVERLAY" ]; then 1605 echo -n "J2SDK Overlay " 1606 compare_file_types $THIS_J2SDK_OVERLAY $OTHER_J2SDK_OVERLAY $COMPARE_ROOT/j2sdk-overlay 1607 echo -n "J2RE Overlay " 1608 compare_file_types $THIS_J2RE_OVERLAY $OTHER_J2RE_OVERLAY $COMPARE_ROOT/j2re-overlay 1609 fi 1610fi 1611 1612if [ "$CMP_GENERAL" = "true" ]; then 1613 if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then 1614 echo -n "J2SDK " 1615 compare_general_files $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk 1616 echo -n "J2RE " 1617 compare_general_files $THIS_J2RE $OTHER_J2RE $COMPARE_ROOT/j2re 1618 fi 1619 if [ -n "$THIS_J2SDK_OVERLAY" ] && [ -n "$OTHER_J2SDK_OVERLAY" ]; then 1620 echo -n "J2SDK Overlay " 1621 compare_general_files $THIS_J2SDK_OVERLAY $OTHER_J2SDK_OVERLAY $COMPARE_ROOT/j2sdk-overlay 1622 echo -n "J2RE Overlay " 1623 compare_general_files $THIS_J2RE_OVERLAY $OTHER_J2RE_OVERLAY $COMPARE_ROOT/j2re-overlay 1624 fi 1625fi 1626 1627if [ "$CMP_ZIPS" = "true" ]; then 1628 if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then 1629 compare_all_zip_files $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk 1630 fi 1631fi 1632 1633if [ "$CMP_JARS" = "true" ]; then 1634 if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then 1635 compare_all_jar_files $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk 1636 fi 1637fi 1638 1639if [ "$CMP_LIBS" = "true" ]; then 1640 if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then 1641 compare_all_libs $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk 1642 fi 1643 if [ -n "$THIS_J2SDK_OVERLAY" ] && [ -n "$OTHER_J2SDK_OVERLAY" ]; then 1644 echo -n "Overlay " 1645 compare_all_libs $THIS_J2SDK_OVERLAY $OTHER_J2SDK_OVERLAY $COMPARE_ROOT/j2sdk-overlay 1646 fi 1647fi 1648 1649if [ "$CMP_EXECS" = "true" ]; then 1650 if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then 1651 compare_all_execs $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk 1652 fi 1653 if [ -n "$THIS_J2SDK_OVERLAY" ] && [ -n "$OTHER_J2SDK_OVERLAY" ]; then 1654 echo -n "Overlay " 1655 compare_all_execs $THIS_J2SDK_OVERLAY $OTHER_J2SDK_OVERLAY $COMPARE_ROOT/j2sdk-overlay 1656 fi 1657fi 1658 1659echo 1660 1661if [ -n "$REGRESSIONS" ]; then 1662 echo "REGRESSIONS FOUND!" 1663 echo 1664 exit 1 1665else 1666 echo "No regressions found" 1667 echo 1668 exit 0 1669fi 1670