# This is a copy of ci-unix-static.yml for Windows. It differs from ci-unix-static.yml as follows:
#
#   * The os matrix consists of windows-latest only.
#   * Installs Visual Studio in the os image.
#   * Doesn't install cmake 3.17.x, because only cmake 3.18 or later, with the
#     following bug fix, detects Visual Studio compilers correctly:
#     https://gitlab.kitware.com/cmake/cmake/-/issues/20585
#   * Runs ext/*.cmd as Windows batch files rather than using bash. This is
#     important for ext/svt.cmd, to prevent it from running ext/svt.sh.
#   * Builds with local libjpeg (-DAVIF_LOCAL_JPEG=ON).
#   * Builds with local zlib and libpng (-DAVIF_LOCAL_ZLIBPNG=ON).

name: CI Windows
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-static:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [windows-latest]

    steps:
    - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0
    - name: Setup Visual Studio shell
      if: runner.os == 'Windows'
      uses: egor-tensin/vs-shell@v2
    - uses: actions/setup-python@61a6322f88396a6271a6ee3565807d608ecaddd1 # v4.7.0
      with:
        python-version: '3.x'
    - uses: actions-rs/toolchain@16499b5e05bf2e26879000db0c1d13f7e13fa3af # v1.0.7
      with:
        profile: minimal
        toolchain: stable
        override: true

    - name: Cache external dependencies
      id: cache-ext
      uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1
      with:
        path: ext
        key: ${{ runner.os }}-${{ hashFiles('ext/*.cmd') }}
    - 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: magick --version
    - name: Build aom
      if: steps.cache-ext.outputs.cache-hit != 'true'
      working-directory: ./ext
      run: ./aom.cmd
    - name: Build dav1d
      if: steps.cache-ext.outputs.cache-hit != 'true'
      working-directory: ./ext
      run: ./dav1d.cmd
    - name: Build rav1e
      if: steps.cache-ext.outputs.cache-hit != 'true'
      working-directory: ./ext
      run: ./rav1e.cmd
    - name: Build SVT-AV1
      if: steps.cache-ext.outputs.cache-hit != 'true'
      working-directory: ./ext
      run: ./svt.cmd
    - name: Build libgav1
      if: steps.cache-ext.outputs.cache-hit != 'true'
      working-directory: ./ext
      run: ./libgav1.cmd
    - name: Build libyuv
      if: steps.cache-ext.outputs.cache-hit != 'true'
      working-directory: ./ext
      run: ./libyuv.cmd
    - name: Build libjpeg
      if: steps.cache-ext.outputs.cache-hit != 'true'
      working-directory: ./ext
      run: ./libjpeg.cmd
    - name: Build libsharpyuv
      if: steps.cache-ext.outputs.cache-hit != 'true'
      working-directory: ./ext
      run: ./libsharpyuv.cmd
    - name: Build zlib and libpng
      if: steps.cache-ext.outputs.cache-hit != 'true'
      working-directory: ./ext
      run: ./zlibpng.cmd
    - name: Build GoogleTest
      if: steps.cache-ext.outputs.cache-hit != 'true'
      working-directory: ./ext
      run: ./googletest.cmd

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

        cmake .. -G Ninja
        -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF
        -DAVIF_CODEC_AOM=ON -DAVIF_LOCAL_AOM=ON
        -DAVIF_CODEC_DAV1D=ON -DAVIF_LOCAL_DAV1D=ON
        -DAVIF_CODEC_RAV1E=ON -DAVIF_LOCAL_RAV1E=ON
        -DAVIF_CODEC_SVT=ON -DAVIF_LOCAL_SVT=ON
        -DAVIF_CODEC_LIBGAV1=ON -DAVIF_LOCAL_LIBGAV1=ON
        -DAVIF_LOCAL_LIBYUV=ON -DAVIF_LOCAL_JPEG=ON
        -DAVIF_LOCAL_LIBSHARPYUV=ON
        -DAVIF_LOCAL_ZLIBPNG=ON
        -DAVIF_BUILD_EXAMPLES=ON -DAVIF_BUILD_APPS=ON
        -DAVIF_BUILD_TESTS=ON -DAVIF_ENABLE_GTEST=ON -DAVIF_LOCAL_GTEST=ON
        -DAVIF_ENABLE_EXPERIMENTAL_YCGCO_R=ON
        -DAVIF_ENABLE_EXPERIMENTAL_GAIN_MAP=ON
        -DAVIF_ENABLE_EXPERIMENTAL_AVIR=ON
    - name: Build libavif (ninja)
      working-directory: ./build
      run: ninja
    - name: Run AVIF Tests
      working-directory: ./build
      run: ctest -j $Env:NUMBER_OF_PROCESSORS --output-on-failure
    - name: Check static link bundling
      run: >
        cl .\apps\avifenc.c .\apps\shared\*.c /nologo
        /DWIN32 /D_WINDOWS /MD /O2 /Ob2
        -I.\apps\shared -I.\include
        -external:W0
        -external:I.\ext\libpng
        -external:I.\ext\libjpeg
        -external:I.\ext\zlib
        -external:I.\build\ext\libpng
        -external:I.\build\ext\zlib
        /link
        build\ext\libjpeg\jpeg.lib
        build\ext\libpng\libpng16_static.lib
        build\ext\zlib\zlibstatic.lib
        build\avif.lib
        /out:avifenc.exe

        .\avifenc.exe --help
