36 echo "4 - Differences, content AND size" 37 echo "10 - Could not perform diff" 38 echo "Use 'quiet' to disable any output." 39 echo "Syntax: $0 file1 file2 [quiet]" 40 exit 10 41 fi 42 43 if [ ! -f $1 ] 44 then 45 echo $1 does not exist 46 exit 10 47 fi 48 49 if [ ! -f $2 ] 50 then 51 echo $2 does not exist 52 exit 10 53 fi 54 55 if [ "`uname`" == "SunOS" ]; then 56 NM=gnm 57 STAT="gstat -c%s" 58 LDD=ldd 59 elif [ $OSTYPE == "cygwin" ]; then 60 NM="$VS100COMNTOOLS/../../VC/bin/amd64/dumpbin.exe" 61 NM_ARGS=/exports 62 STAT="stat -c%s" 63 LDD= 64 elif [ "`uname`" == "Darwin" ]; then 65 NM=nm 66 STAT="stat -f%z" 67 LDD="otool -L" 68 else 69 NM=nm 70 STAT="stat -c%s" 71 LDD=ldd 72 fi 73 74 # Should the differences be viewed? 75 VIEW= 76 # You can do export DIFF=meld to view 77 # any differences using meld instead. 78 if [ -n "$DIFF" ]; then 79 DIFF="$DIFF" 80 else 81 DIFF=diff 82 fi 83 OLD=$(cd $(dirname $1) && pwd)/$(basename $1) 84 NEW=$(cd $(dirname $2) && pwd)/$(basename $2) 85 86 OLD_SIZE=$($STAT "$OLD") 87 NEW_SIZE=$($STAT "$NEW") 88 89 if [ $# -gt 3 ] 90 then 91 ROOT1=$(cd $3 && pwd) 92 ROOT2=$(cd $4 && pwd) 93 OLD_NAME=$(echo $OLD | sed "s|$ROOT1/||") 94 NEW_NAME=$(echo $NEW | sed "s|$ROOT2/||") 95 if [ "x$5" == "xview" ]; then VIEW=view; fi 96 else 97 ROOT1=$(dirname $OLD)/ 98 ROOT2=$(dirname $NEW)/ 99 OLD_NAME=$OLD 100 NEW_NAME=$NEW 101 if [ "x$3" == "xview" ]; then VIEW=view; fi 102 fi 103 104 OLD_SUFFIX="${OLD##*.}" 105 NEW_SUFFIX="${NEW##*.}" 106 if [ "$OLD_SUFFIX" != "$NEW_SUFFIX" ]; then 107 echo The files do not have the same suffix type! 108 exit 10 109 fi 110 111 if [ "$OLD_SUFFIX" != "so" ] && [ "$OLD_SUFFIX" != "dylib" ] && [ "$OLD_SUFFIX" != "dll" ]; then 112 echo The files have to be .so, .dylib or .dll! They are $OLD_SUFFIX 113 exit 10 114 fi 115 116 TYPE="$OLD_SUFFIX" 117 118 if cmp $OLD $NEW > /dev/null 119 then 120 # The files were bytewise identical. 121 echo Identical: $OLD_NAME 122 exit 0 123 fi 124 125 OLD_SYMBOLS=$COMPARE_ROOT/$OLD_NAME.old 126 NEW_SYMBOLS=$COMPARE_ROOT/$NEW_NAME.new 127 128 mkdir -p $(dirname $OLD_SYMBOLS) 129 mkdir -p $(dirname $NEW_SYMBOLS) 130 131 if [ $OSTYPE == "cygwin" ]; then 132 "$NM" $NM_ARGS $OLD | grep " = " > $OLD_SYMBOLS 133 "$NM" $NM_ARGS $NEW | grep " = " > $NEW_SYMBOLS 134 "$NM" $NM_ARGS $OLD > $OLD_SYMBOLS.full 135 "$NM" $NM_ARGS $NEW > $NEW_SYMBOLS.full 136 else 137 # Strip the addresses, just compare the ordering of the symbols. 138 $NM $OLD | cut -f 2- -d ' ' > $OLD_SYMBOLS 139 $NM $NEW | cut -f 2- -d ' ' > $NEW_SYMBOLS 140 # But store the full information for easy diff access. 141 $NM $OLD > $OLD_SYMBOLS.full 142 $NM $NEW > $NEW_SYMBOLS.full 143 fi 144 145 DIFFS=$(LANG=C diff $OLD_SYMBOLS $NEW_SYMBOLS) 146 | 36 echo "4 - Differences, content AND size" 37 echo "10 - Could not perform diff" 38 echo "Use 'quiet' to disable any output." 39 echo "Syntax: $0 file1 file2 [quiet]" 40 exit 10 41 fi 42 43 if [ ! -f $1 ] 44 then 45 echo $1 does not exist 46 exit 10 47 fi 48 49 if [ ! -f $2 ] 50 then 51 echo $2 does not exist 52 exit 10 53 fi 54 55 if [ "`uname`" == "SunOS" ]; then 56 if [ -f "`which gnm`" ]; then 57 NM=gnm 58 # Jonas 2012-05-29: solaris native nm produces radically different output than gnm 59 # so if using that...we need different filter than "cut -f 2-" 60 # 61 elif [ -f "`which nm`" ]; then 62 NM=nm 63 else 64 echo "No nm command found" 65 exit 10 66 fi 67 LDD=ldd 68 elif [ $OSTYPE == "cygwin" ]; then 69 NM="$VS100COMNTOOLS/../../VC/bin/amd64/dumpbin.exe" 70 NM_ARGS=/exports 71 LDD= 72 elif [ "`uname`" == "Darwin" ]; then 73 NM=nm 74 LDD="otool -L" 75 else 76 NM=nm 77 LDD=ldd 78 fi 79 80 # Should the differences be viewed? 81 VIEW= 82 # You can do export DIFF=meld to view 83 # any differences using meld instead. 84 if [ -n "$DIFF" ]; then 85 DIFF="$DIFF" 86 else 87 DIFF=diff 88 fi 89 OLD=$(cd $(dirname $1) && pwd)/$(basename $1) 90 NEW=$(cd $(dirname $2) && pwd)/$(basename $2) 91 92 OLD_SIZE=$(ls -l "$OLD" | awk '{ print $5 }') 93 NEW_SIZE=$(ls -l "$NEW" | awk '{ print $5 }') 94 95 if [ $# -gt 3 ] 96 then 97 ROOT1=$(cd $3 && pwd) 98 ROOT2=$(cd $4 && pwd) 99 OLD_NAME=$(echo $OLD | sed "s|$ROOT1/||") 100 NEW_NAME=$(echo $NEW | sed "s|$ROOT2/||") 101 if [ "x$5" == "xview" ]; then VIEW=view; fi 102 else 103 ROOT1=$(dirname $OLD)/ 104 ROOT2=$(dirname $NEW)/ 105 OLD_NAME=$OLD 106 NEW_NAME=$NEW 107 if [ "x$3" == "xview" ]; then VIEW=view; fi 108 fi 109 110 OLD_SUFFIX="${OLD##*.}" 111 NEW_SUFFIX="${NEW##*.}" 112 if [ "$OLD_SUFFIX" != "$NEW_SUFFIX" ]; then 113 echo The files do not have the same suffix type! 114 exit 10 115 fi 116 117 if [ "$OLD_SUFFIX" != "so" ] && [ "$OLD_SUFFIX" != "dylib" ] && [ "$OLD_SUFFIX" != "dll" ]; then 118 echo The files have to be .so, .dylib or .dll! They are $OLD_SUFFIX 119 exit 10 120 fi 121 122 TYPE="$OLD_SUFFIX" 123 124 if cmp $OLD $NEW > /dev/null 125 then 126 # The files were bytewise identical. 127 echo Identical: $OLD_NAME 128 exit 0 129 fi 130 131 OLD_SYMBOLS=$COMPARE_ROOT/nm.$OLD_NAME.old 132 NEW_SYMBOLS=$COMPARE_ROOT/nm.$NEW_NAME.new 133 134 mkdir -p $(dirname $OLD_SYMBOLS) 135 mkdir -p $(dirname $NEW_SYMBOLS) 136 137 if [ $OSTYPE == "cygwin" ]; then 138 "$NM" $NM_ARGS $OLD | grep " = " > $OLD_SYMBOLS 139 "$NM" $NM_ARGS $NEW | grep " = " > $NEW_SYMBOLS 140 "$NM" $NM_ARGS $OLD > $OLD_SYMBOLS.full 141 "$NM" $NM_ARGS $NEW > $NEW_SYMBOLS.full 142 else 143 # Strip the addresses, just compare the ordering of the symbols. 144 $NM $OLD | cut -f 2- -d ' ' > $OLD_SYMBOLS 145 $NM $NEW | cut -f 2- -d ' ' > $NEW_SYMBOLS 146 # But store the full information for easy diff access. 147 $NM $OLD > $OLD_SYMBOLS.full 148 $NM $NEW > $NEW_SYMBOLS.full 149 fi 150 151 DIFFS=$(LANG=C diff $OLD_SYMBOLS $NEW_SYMBOLS) 152 |