# This is a copy of ci-unix-shared-local.yml for building shared libraries
# with an additional build configuration (using installed deps and dav1d).

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

permissions:
  contents: read

# Cancel the workflow if a new one is triggered from the same PR, branch, or tag, except on main.
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}

jobs:
  build-shared-installed:
    strategy:
      fail-fast: false
      # Generate the configurations:
      # Ubuntu with gcc 14 with oldest-cmake set to true or false
      # OSX with default gcc and CMake (oldest-cmake is unused on OSX)
      matrix:
        os: [ubuntu-24.04, macos-latest]
        oldest-cmake: [false, true]
        include:
          # Add a gcc version on Ubuntu only
          - os: ubuntu-24.04
            compiler: gcc
            gcc: 14
        exclude:
          # Do not use the oldest CMake on OSX
          - os: macos-latest
            oldest-cmake: true
    runs-on: ${{ matrix.os }}

    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - uses: ./.github/actions/setup-linux
        if: runner.os == 'Linux'
        with:
          codec-aom: "SYSTEM"
          codec-dav1d: "SYSTEM"
          gcc-version: ${{ matrix.gcc }}
          gtest: "SYSTEM"
          libyuv: "SYSTEM"
          oldest-cmake: ${{ matrix.oldest-cmake }}
      - uses: ./.github/actions/setup-macos
        if: runner.os == 'macOS'
        with:
          codec-aom: "SYSTEM"
          codec-dav1d: "SYSTEM"
          gtest: "SYSTEM"
      - name: Disable libyuv on macOS
        # TODO(yguyon): Install libyuv (not available with brew).
        if: runner.os == 'macOS'
        run: echo "CMAKE_AVIF_FLAGS=\"-DAVIF_LIBYUV=OFF\""  >> $GITHUB_ENV

      - name: Prepare libavif (cmake)
        run: >
          cmake -G Ninja -S . -B build
          -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON
          -DAVIF_CODEC_AOM=SYSTEM
          -DAVIF_CODEC_AOM_DECODE=OFF -DAVIF_CODEC_AOM_ENCODE=ON
          -DAVIF_CODEC_DAV1D=SYSTEM
          -DAVIF_BUILD_EXAMPLES=ON -DAVIF_BUILD_APPS=ON
          -DAVIF_BUILD_TESTS=ON -DAVIF_GTEST=SYSTEM
          -DAVIF_BUILD_GDK_PIXBUF=ON -DCMAKE_INSTALL_PREFIX=./build/install
          -DAVIF_ENABLE_WERROR=ON ${{ env.CMAKE_AVIF_FLAGS }}
      - 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
      - name: Install AVIF
        working-directory: ./build
        run: ninja install
      - name: Test installed cmake
        working-directory: ./build
        run: >
          mkdir test && cd test

          echo "cmake_minimum_required(VERSION 3.13)
                project(FindPackageTest)
                message(STATUS ${CMAKE_PREFIX_PATH})
                find_package(libavif REQUIRED)
                if(TARGET avif)
                  message(STATUS "\""avif found"\"")
                else()
                  message(FATAL_ERROR "\""avif not found"\"")
                endif()" >> CMakeLists.txt

          cmake . -DCMAKE_PREFIX_PATH=../install
      - name: Prepare libavif with [[nodiscard]] (cmake)
        # CMake 3.21 is needed to force C23 for [[nodiscard]].
        if: runner.oldest-cmake == 'false'
        run: >
          cmake -G Ninja -S . -B build_nodiscard
          -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON
          -DAVIF_CODEC_AOM=SYSTEM
          -DAVIF_CODEC_AOM_DECODE=OFF -DAVIF_CODEC_AOM_ENCODE=ON
          -DAVIF_CODEC_DAV1D=SYSTEM
          -DAVIF_ENABLE_NODISCARD=ON -DAVIF_ENABLE_WERROR=ON
          -DAVIF_BUILD_EXAMPLES=ON -DAVIF_BUILD_APPS=ON
          -DAVIF_BUILD_TESTS=ON -DAVIF_GTEST=LOCAL
          -DAVIF_BUILD_GDK_PIXBUF=ON ${{ env.CMAKE_AVIF_FLAGS }}
      - name: Build libavif with [[nodiscard]] (ninja)
        if: runner.oldest-cmake == 'false'
        working-directory: ./build_nodiscard
        run: ninja
