common/bin/difflib.sh

Print this page




  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