# 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@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
    - name: Setup Visual Studio shell
      if: runner.os == 'Windows'
      uses: egor-tensin/vs-shell@9a932a62d05192eae18ca370155cf877eecc2202 # v2.1
    - uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.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@704facf57e6136b1bc63b828d79edcd491f0ee84 # v3.3.2
      with:
        path: ext
        key: ${{ runner.os }}-${{ hashFiles('ext/*.cmd') }}-alldeps
    - name: Print cmake version
      run: cmake --version
    - uses: ilammy/setup-nasm@13cbeb366c45c4379d3478cdcbadd8295feb5028 # v1.5.1
      with:
        version: 2.15.05
    - uses: seanmiddleditch/gha-setup-ninja@8b297075da4cd2a5f1fd21fe011b499edf06e9d2 # v4
    - 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=LOCAL -DAVIF_CODEC_DAV1D=LOCAL
        -DAVIF_CODEC_RAV1E=LOCAL -DAVIF_CODEC_SVT=LOCAL
        -DAVIF_CODEC_LIBGAV1=LOCAL -DAVIF_LIBYUV=LOCAL
        -DAVIF_LOCAL_JPEG=ON -DAVIF_LIBSHARPYUV=LOCAL
        -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 .\third_party\iccjpeg\iccjpeg.c /nologo
        /DWIN32 /D_WINDOWS /MD /O2 /Ob2
        -I.\apps\shared -I.\include -I.\third_party\iccjpeg
        -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
        ws2_32.lib ntdll.lib userenv.lib bcrypt.lib advapi32.lib
        /out:avifenc.exe

        .\avifenc.exe --help
