---
name: macos

on:
  pull_request:
    types: [opened, synchronize]
    paths-ignore:
      - '**.md'
      - '.mailmap'
      - 'ChangeLog*'
      - 'whatsnew*'
      - 'LICENSE'
  push:
    paths-ignore:
      - '**.md'
      - '.mailmap'
      - 'ChangeLog*'
      - 'whatsnew*'
      - 'LICENSE'

jobs:
  cmake:
    runs-on: ${{ matrix.os }}
    if: "!contains(github.event.head_commit.message, 'ci skip')"
    strategy:
      fail-fast: false
      matrix:
        os: [macos-latest]
        EVENT_MATRIX:
          - NONE
          - DISABLE_OPENSSL
          - DISABLE_THREAD_SUPPORT
          - DISABLE_DEBUG_MODE
          - DISABLE_MM_REPLACEMENT
          - TEST_EXPORT_STATIC
          - TEST_EXPORT_SHARED
          - OPENSSL_1_1

    steps:
      - uses: actions/checkout@v2.0.0

      - name: Cache Build
        uses: actions/cache@v1.1.0
        with:
          path: build
          key: macos-10.15-cmake-${{ matrix.EVENT_MATRIX }}-v2

      - name: Build And Test
        shell: bash
        run: |
          if [ "${{ matrix.EVENT_MATRIX }}" == "OPENSSL_1_1" ]; then
            export OPENSSL_ROOT_DIR=/usr/local/opt/openssl@1.1
          else
            export OPENSSL_ROOT_DIR=/usr/local/opt/openssl
          fi

          if [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_OPENSSL" ]; then
            EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_OPENSSL=ON"

          elif [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_THREAD_SUPPORT" ]; then
            EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_THREAD_SUPPORT=ON"

          elif [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_DEBUG_MODE" ]; then
            EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_DEBUG_MODE=ON"

          elif [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_MM_REPLACEMENT" ]; then
            EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_MM_REPLACEMENT=ON"

          elif [ "${{ matrix.EVENT_MATRIX }}" == "TEST_EXPORT_STATIC" ]; then
            EVENT_CMAKE_OPTIONS="-DEVENT__LIBRARY_TYPE=STATIC -DEVENT__DISABLE_TESTS=ON -DEVENT__DISABLE_SAMPLES=ON"

          elif [ "${{ matrix.EVENT_MATRIX }}" == "TEST_EXPORT_SHARED" ]; then
            EVENT_CMAKE_OPTIONS="-DEVENT__LIBRARY_TYPE=SHARED -DEVENT__DISABLE_TESTS=ON -DEVENT__DISABLE_SAMPLES=ON"

          else
            EVENT_CMAKE_OPTIONS=""
          fi

          #run build and test
          JOBS=1
          export CTEST_PARALLEL_LEVEL=$JOBS
          export CTEST_OUTPUT_ON_FAILURE=1
          mkdir -p build
          cd build
          echo [cmake]: cmake .. $EVENT_CMAKE_OPTIONS
          cmake .. $EVENT_CMAKE_OPTIONS || (rm -rf * && cmake .. $EVENT_CMAKE_OPTIONS)
          cmake --build .
          if [ "${{ matrix.EVENT_MATRIX }}" == "TEST_EXPORT_STATIC" ]; then
            sudo python3 ../test-export/test-export.py static
          elif [ "${{ matrix.EVENT_MATRIX }}" == "TEST_EXPORT_SHARED" ]; then
            sudo python3 ../test-export/test-export.py shared
          else
            cmake --build . --target verify
          fi

      - uses: actions/upload-artifact@v1
        if: failure()
        with:
          name: ${{ matrix.os }}-cmake-${{ matrix.EVENT_MATRIX }}-build
          path: build

  autotools:
    runs-on: ${{ matrix.os }}
    if: "!contains(github.event.head_commit.message, 'ci skip')"
    strategy:
      fail-fast: false
      matrix:
        os: [macos-latest]
        EVENT_MATRIX:
          - NONE
          - DISABLE_OPENSSL
          - DISABLE_THREAD_SUPPORT
          - DISABLE_DEBUG_MODE
          - DISABLE_MM_REPLACEMENT
          - OPENSSL_1_1

    steps:
      - uses: actions/checkout@v2.0.0

      - name: Cache Build
        uses: actions/cache@v1.1.0
        with:
          path: build
          key: ${{ matrix.os }}-autotools-${{ matrix.EVENT_MATRIX }}-v2

      - name: Install Depends
        run: brew install autoconf automake libtool pkg-config

      - name: Build And Test
        shell: bash
        run: |
          if [ "${{ matrix.EVENT_MATRIX }}" == "OPENSSL_1_1" ]; then
            export PKG_CONFIG_PATH="/usr/local/opt/openssl@1.1/lib/pkgconfig:$PKG_CONFIG_PATH"
          else
            export PKG_CONFIG_PATH="/usr/local/opt/openssl/lib/pkgconfig:$PKG_CONFIG_PATH"
          fi

          if [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_OPENSSL" ]; then
            EVENT_CONFIGURE_OPTIONS="--disable-openssl"

          elif [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_THREAD_SUPPORT" ]; then
            EVENT_CONFIGURE_OPTIONS="--disable-thread-support"

          elif [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_DEBUG_MODE" ]; then
            EVENT_CONFIGURE_OPTIONS="--disable-debug-mode"

          elif [ "${{ matrix.EVENT_MATRIX }}" == "DISABLE_MM_REPLACEMENT" ]; then
            EVENT_CONFIGURE_OPTIONS="--disable-malloc-replacement"

          else
            EVENT_CONFIGURE_OPTIONS=""
          fi

          #run build and test
          JOBS=1
          ./autogen.sh
          mkdir -p build
          cd build
          echo [configure]: ../configure $EVENT_CONFIGURE_OPTIONS
          ../configure $EVENT_CONFIGURE_OPTIONS
          make
          make -j $JOBS verify

      - uses: actions/upload-artifact@v1
        if: failure()
        with:
          name: ${{ matrix.os }}-autotools-${{ matrix.EVENT_MATRIX }}-build
          path: build
