rdp 0.12.8

An FFI wrapper for the Ramer–Douglas–Peucker and Visvalingam-Whyatt algorithms
Documentation
on: [push, pull_request]

defaults:
  run:
    shell: bash

env:
  cratename: rdp
  rustflags: -C rpath

name: Test and Build

jobs:
  test:
    if: github.event_name == 'push' && !contains(github.ref, 'refs/tags/')
    name: Test on ${{ matrix.os }} (${{ matrix.target }})
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        include:
        - build: linux
          os: ubuntu-latest
          rust: stable
          target: x86_64-unknown-linux-gnu
          use-cross: false
        - build: macos
          os: macos-latest
          rust: stable
          target: x86_64-apple-darwin
          use-cross: false
          deptarget: 10.9
        - build: windows
          os: windows-latest
          rust: stable
          target: x86_64-pc-windows-msvc
          use-cross: false
    steps:
      - uses: actions/checkout@v3
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          target: ${{ matrix.target }}
      - uses: actions-rs/cargo@v1
        env:
          MACOSX_DEPLOYMENT_TARGET: ${{ matrix.deptarget }}
        with:
          use-cross: ${{ matrix.use-cross }}
          command: test
          args: --target=${{ matrix.target }}

  build:
    if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
    name: Build and release on ${{ matrix.os }} (${{ matrix.target }})
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        include:
        - build: linux
          os: ubuntu-latest
          rust: stable
          target: x86_64-unknown-linux-gnu
          use-cross: true
        - build: linux
          os: ubuntu-latest
          rust: stable
          target: aarch64-unknown-linux-gnu
          use-cross: true
        - build: macos
          os: macos-latest
          rust: stable
          target: x86_64-apple-darwin
          use-cross: false
          deptarget: 10.9
        - build: macos
          os: macos-latest
          rust: stable
          target: aarch64-apple-darwin
          use-cross: false
          deptarget: 11.0
        - build: windows
          os: windows-latest
          rust: stable
          target: x86_64-pc-windows-msvc
          use-cross: false
    steps:
      - name: Switch to macOS 13.x SDK
        if: matrix.target == 'aarch64-apple-darwin'
        run: |
          xcodebuild -showsdks
          SDKROOT=$(xcrun -sdk macosx13.1 --show-sdk-path)
      - uses: actions/checkout@v3
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          target: ${{ matrix.target }}
      - uses: actions-rs/cargo@v1
        env:
          MACOSX_DEPLOYMENT_TARGET: ${{ matrix.deptarget }}
        with:
          use-cross: ${{ matrix.use-cross }}
          command: build
          args: --release --target=${{ matrix.target }} --features headers
      - name: Install aarch64 related packages
        if: matrix.os == 'ubuntu-latest' && matrix.target == 'aarch64-unknown-linux-gnu'
        run: sudo apt-get update && sudo apt-get install gcc-aarch64-linux-gnu qemu-system-arm
      - name: Gather Assets
        run: |
          src=$(pwd)
          stage=
          case $RUNNER_OS in
              Linux)
                  stage=$(mktemp -d)
                  ;;
              macOS)
                  stage=$(mktemp -d -t tmp)
                  ;;
              Windows)
                  stage=$(mktemp -d)
                  ;;
          esac
          mkdir zipped
          cp include/header.h $stage
          RELEASE_VERSION=${GITHUB_REF#refs/tags/}
          ASSET_NAME="${{ env.cratename }}-$RELEASE_VERSION-${{ matrix.target }}"
          echo "Release name is $ASSET_NAME"
          echo "STAGE=$stage" >> $GITHUB_ENV
          echo "ASSET_NAME=$ASSET_NAME" >> $GITHUB_ENV
          if [ "$RUNNER_OS" == "Linux" ]; then
            echo "TYPE=tar" >> $GITHUB_ENV
            echo "EXTENSION=tar.gz" >> $GITHUB_ENV
            for lib in target/${{ matrix.target }}/release/*.so; do
                if [ "${{ matrix.target }}" == "aarch64-unknown-linux-gnu" ]; then
                    aarch64-linux-gnu-strip -s $lib
                else
                    strip -s $lib
                fi
            done
            cp target/${{ matrix.target }}/release/*.so $stage/
          fi
          if [ "$RUNNER_OS" == "macOS" ]; then
            echo "TYPE=tar" >> $GITHUB_ENV
            echo "EXTENSION=tar.gz" >> $GITHUB_ENV
            for lib in target/${{ matrix.target }}/release/*.dylib; do
                install_name_tool -id "@rpath/lib${{ env.cratename }}.dylib" $lib
                otool -L $lib
                strip -ur $lib
            done
            cp target/${{ matrix.target }}/release/*.dylib $stage/
          fi
          if [ "$RUNNER_OS" == "Windows" ]; then
            echo "TYPE=tar" >> $GITHUB_ENV
            echo "EXTENSION=tar.gz" >> $GITHUB_ENV
            cp target/${{ matrix.target }}/release/deps/${{ env.cratename }}.dll.lib target/${{ matrix.target }}/release/deps/${{ env.cratename }}.lib
            cp target/${{ matrix.target }}/release/${{ env.cratename }}* $stage/
            cp target/${{ matrix.target }}/release/deps/${{ env.cratename }}* $stage/
            rm $stage/*.pdb
          fi
          ls $stage
          cd $src

      - name: Create archive
        run: |
          pushd ${{ env.STAGE }}
          tar -czf "${{ env.ASSET_NAME }}.${{ env.EXTENSION }}" *
          popd
          cp "${{ env.STAGE }}/${{ env.ASSET_NAME }}.${{ env.EXTENSION }}" zipped/

      - name: Release
        uses: softprops/action-gh-release@v1
        with:
          files: |
            zipped/${{ env.ASSET_NAME }}.${{ env.EXTENSION }}
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}