# This is a copy of ci-unix-static.yml for building shared libraries. It differs from ci-unix-static.yml as follows:
#
#   * The os matrix consists of ubuntu-latest only.
#   * Does not build rav1e, SVT-AV1 nor libgav1.

name: CI Unix Shared Local
on: [push, pull_request]

permissions:
  contents: read

jobs:
  build-shared-local:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, macos-latest]

    steps:
    - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0
    - name: Set GCC & G++ 10 compiler (on Linux)
      if: runner.os == 'Linux'
      run: echo "CC=gcc-10" >> $GITHUB_ENV && echo "CXX=g++-10" >> $GITHUB_ENV
    - uses: actions/setup-python@61a6322f88396a6271a6ee3565807d608ecaddd1 # v4.7.0
      with:
        python-version: '3.x'

    - name: Cache external dependencies
      id: cache-ext
      uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1
      with:
        path: ext
        key: ${{ runner.os }}-shared-local-${{ hashFiles('ext/*.cmd') }}
    - name: Setup cmake
      uses: jwlawson/actions-setup-cmake@187efd9581ed20ee4e03c0dfb9ac2cd5896c4835 # v1.14.1
      with:
        # CMake version 3.17 is required to build libwebp (which libsharpyuv is part of) on macOS.
        cmake-version: '3.17.x'
    - name: Print cmake version
      run: cmake --version
    - uses: ilammy/setup-nasm@321e6ed62a1fc77024a3bd853deb33645e8b22c4 # v1.4.0
      with:
        version: 2.15.05
    - uses: seanmiddleditch/gha-setup-ninja@16b940825621068d98711680b6c3ff92201f8fc0 # v3
    - run: pip install meson
    - name: Print ImageMagick version
      run: convert --version
    - name: Set shared libs
      if: steps.cache-ext.outputs.cache-hit != 'true'
      working-directory: ./ext
      run: >
        sed -i'' -e 's/-DBUILD_SHARED_LIBS=OFF/-DBUILD_SHARED_LIBS=ON/' *.cmd

        sed -i'' -e 's/--default-library=static/--default-library=shared/' dav1d.cmd

        sed -i'' -e 's/ninja yuv/ninja yuv_shared/' libyuv.cmd
    - name: Build aom
      if: steps.cache-ext.outputs.cache-hit != 'true'
      working-directory: ./ext
      run: bash -e aom.cmd
    - name: Build dav1d
      if: steps.cache-ext.outputs.cache-hit != 'true'
      working-directory: ./ext
      run: bash -e dav1d.cmd
    - name: Build libyuv
      if: steps.cache-ext.outputs.cache-hit != 'true'
      working-directory: ./ext
      run: bash -e libyuv.cmd
    - name: Build libsharpyuv
      if: steps.cache-ext.outputs.cache-hit != 'true'
      working-directory: ./ext
      run: bash -e libsharpyuv.cmd
    - name: Build GoogleTest
      if: steps.cache-ext.outputs.cache-hit != 'true'
      working-directory: ./ext
      run: bash -e googletest.cmd

    - name: Prepare libavif (cmake)
      run: >
        mkdir build && cd build

        cmake .. -G Ninja
        -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON
        -DAVIF_CODEC_AOM=ON -DAVIF_LOCAL_AOM=ON
        -DAVIF_CODEC_DAV1D=ON -DAVIF_LOCAL_DAV1D=ON
        -DAVIF_LOCAL_LIBYUV=ON
        -DAVIF_LOCAL_LIBSHARPYUV=ON
        -DAVIF_BUILD_EXAMPLES=ON -DAVIF_BUILD_APPS=ON
        -DAVIF_BUILD_TESTS=ON -DAVIF_ENABLE_GTEST=ON -DAVIF_LOCAL_GTEST=ON
    - name: Build libavif (ninja)
      working-directory: ./build
      run: ninja
    - name: Run AVIF Tests
      working-directory: ./build
      run: ctest -j $(getconf _NPROCESSORS_ONLN) --output-on-failure
