check-shared-library-abi-compatibility.sh 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #!/usr/bin/env bash
  2. CURRENT_COMMIT=$(git rev-parse HEAD)
  3. PREVIOUS_VERSION=$(git describe --tags --abbrev=0 $CURRENT_COMMIT)
  4. BUILD_DIR=_build_for_is_abi_compatible
  5. # Make the build directory
  6. rm -rf $BUILD_DIR
  7. mkdir -p $BUILD_DIR/new
  8. mkdir -p $BUILD_DIR/old
  9. cd $BUILD_DIR
  10. # Build the current commit
  11. cd new
  12. cmake \
  13. -DCMAKE_BUILD_TYPE=Debug \
  14. -DCMAKE_CXX_FLAGS="-g -Og" \
  15. -DBUILD_SHARED_LIBS=ON \
  16. -DHTTPLIB_COMPILE=ON \
  17. -DCMAKE_INSTALL_PREFIX=./out \
  18. ../../.. > /dev/null
  19. cmake --build . --target install > /dev/null
  20. cmake --build . --target clean > /dev/null
  21. cd ..
  22. # Build the nearest vesion
  23. cd old
  24. cmake \
  25. -DCMAKE_BUILD_TYPE=Debug \
  26. -DCMAKE_CXX_FLAGS="-g -Og" \
  27. -DBUILD_SHARED_LIBS=ON \
  28. -DHTTPLIB_COMPILE=ON \
  29. -DCMAKE_INSTALL_PREFIX=./out \
  30. ../../.. > /dev/null
  31. git checkout -q "${PREVIOUS_VERSION}"
  32. cmake --build . --target install > /dev/null
  33. cmake --build . --target clean > /dev/null
  34. cd ..
  35. # Checkout the original commit
  36. if [ "$CURRENT_COMMIT" = "$(git rev-parse master)" ]; then
  37. git checkout -q master
  38. else
  39. git checkout -q "${CURRENT_COMMIT}"
  40. fi
  41. # ABI compatibility check
  42. ../check-abi-compatibility.sh ./old/out/lib/libcpp-httplib.so ./new/out/lib/libcpp-httplib.so
  43. # Clean the build directory
  44. cd ..
  45. rm -rf $BUILD_DIR