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"