github.com/ethereum/go-ethereum@v1.16.1/crypto/secp256k1/libsecp256k1/tools/check-abi.sh (about)

     1  #!/bin/sh
     2  
     3  set -eu
     4  
     5  default_base_version="$(git describe --match "v*.*.*" --abbrev=0)"
     6  default_new_version="HEAD"
     7  
     8  display_help_and_exit() {
     9      echo "Usage: $0 [<base_ver> [<new_ver>]]"
    10      echo ""
    11      echo "Description: This script uses the ABI Compliance Checker tool to determine if the ABI"
    12      echo "             of a new version of libsecp256k1 has changed in a backward-incompatible way."
    13      echo ""
    14      echo "Options:"
    15      echo "  base_ver      Specify the base version as a git commit-ish"
    16      echo "                  (default: most recent reachable tag matching \"v.*.*\", currently \"$default_base_version\")"
    17      echo "  new_ver       Specify the new version as a git commit-ish"
    18      echo "                  (default: $default_new_version)"
    19      echo "  -h, --help    Display this help message"
    20      exit 0
    21  }
    22  
    23  if [ "$#" -eq 0 ]; then
    24      base_version="$default_base_version"
    25      new_version="$default_new_version"
    26  elif [ "$#" -eq 1 ] && { [ "$1" = "-h" ] || [ "$1" = "--help" ]; }; then
    27      display_help_and_exit
    28  elif [ "$#" -eq 1 ] || [ "$#" -eq 2 ]; then
    29      base_version="$1"
    30      if [ "$#" -eq 2 ]; then
    31          new_version="$2"
    32      fi
    33  else
    34      echo "Invalid usage. See help:"
    35      echo ""
    36      display_help_and_exit
    37  fi
    38  
    39  checkout_and_build() {
    40      _orig_dir="$(pwd)"
    41      git worktree add --detach "$1" "$2"
    42      cd "$1"
    43      mkdir build && cd build
    44      cmake -S .. --preset dev-mode \
    45          -DCMAKE_C_COMPILER=gcc -DCMAKE_BUILD_TYPE=None -DCMAKE_C_FLAGS="-g -Og -gdwarf-4" \
    46          -DSECP256K1_BUILD_BENCHMARK=OFF \
    47          -DSECP256K1_BUILD_TESTS=OFF \
    48          -DSECP256K1_BUILD_EXHAUSTIVE_TESTS=OFF \
    49          -DSECP256K1_BUILD_CTIME_TESTS=OFF \
    50          -DSECP256K1_BUILD_EXAMPLES=OFF
    51      cmake --build . -j "$(nproc)"
    52      # FIXME: Just set LIBPATH to lib/libsecp256k1.so once version 0.6.0 is
    53      # released.
    54      if [ -f "src/libsecp256k1.so" ]; then
    55          LIBPATH="src/libsecp256k1.so"
    56      else
    57          LIBPATH="lib/libsecp256k1.so"
    58      fi
    59      abi-dumper $LIBPATH -o ABI.dump -lver "$2" -public-headers ../include/
    60      cd "$_orig_dir"
    61  }
    62  
    63  echo "Comparing $base_version (base version) to $new_version (new version)"
    64  echo
    65  
    66  base_source_dir="$(mktemp -d)"
    67  checkout_and_build "$base_source_dir" "$base_version"
    68  
    69  new_source_dir="$(mktemp -d)"
    70  checkout_and_build "$new_source_dir" "$new_version"
    71  
    72  abi-compliance-checker -lib libsecp256k1 -old "${base_source_dir}/build/ABI.dump" -new "${new_source_dir}/build/ABI.dump"
    73  git worktree remove "$base_source_dir"
    74  git worktree remove "$new_source_dir"