name: build

on:
  push:
    branches:
      - master
      - ci
      - 'release/**'
  pull_request:
    branches: [master]

jobs:
  mingw:
    runs-on: ubuntu-22.04
    strategy:
      matrix:
        target: [i686-w64-mingw32, x86_64-w64-mingw32]
    steps:
      - uses: actions/checkout@v3

      # Increase -N suffix here to force full rebuild after changes
      - uses: actions/cache@v3
        with:
          path: mingw_prefix/
          key: "${{ matrix.target }}-6"

      - name: Install dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -y autoconf automake pkg-config g++-mingw-w64 gcc-multilib meson nasm
          ./bootstrap.py

      - name: Build libraries
        run: |
          ./ci/build-mingw64.sh
        env:
          TARGET: ${{ matrix.target }}

      - name: Build with meson
        run: |
          ./ci/build-mingw64.sh meson pack
        env:
          TARGET: ${{ matrix.target }}

      - name: Print meson log
        if: ${{ failure() }}
        run: |
          cat ./build/meson-logs/meson-log.txt

      - name: Build with waf
        run: |
          ./ci/build-mingw64.sh waf
        env:
          TARGET: ${{ matrix.target }}

      - name: Print waf log
        if: ${{ failure() }}
        run: |
          cat ./build/config.log

      - uses: actions/upload-artifact@v3
        with:
          name: mpv-${{ matrix.target }}
          path: mpv-git-*.zip

  macos:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        cc:
          - "clang"
        os:
          - "macos-11"
          - "macos-12"
    steps:
      - uses: actions/checkout@v3

      - name: Remove stray upstream python binary symlinks under /usr/local
        run: |
          find /usr/local/bin -lname '*/Library/Frameworks/Python.framework/*' -delete -print
          brew unlink python && brew link --overwrite python

      - name: Install dependencies
        run: |
          brew update
          brew install autoconf automake pkg-config libtool python freetype fribidi little-cms2 lua@5.1 libass ffmpeg meson

      - name: Build with meson
        run: |
          ./ci/build-macos.sh meson
        env:
          CC: "${{ matrix.cc }}"
          TRAVIS_OS_NAME: "${{ matrix.os }}"

      - name: Print meson log
        if: ${{ failure() }}
        run: |
          cat ./build/meson-logs/meson-log.txt

      - name: Build with waf
        run: |
          ./ci/build-macos.sh waf
        env:
          CC: "${{ matrix.cc }}"
          TRAVIS_OS_NAME: "${{ matrix.os }}"

      - name: Print waf log
        if: ${{ failure() }}
        run: |
          cat ./build/config.log

  linux:
    runs-on: "ubuntu-22.04"
    container:
      image: "registry.opensuse.org/home/mia/images/images/mpv-ci:stable-deps"
      env:
        CC: "${{ matrix.cc }}"
    strategy:
      matrix:
        cc:
          - "gcc"
          - "clang"
    steps:
      - uses: actions/checkout@v3

      - name: Install dependencies
        run: |
          ./bootstrap.py
          # workaround to avoid "fatal: unsafe repository" error
          git config --global --add safe.directory "$GITHUB_WORKSPACE"

      - name: Build with meson
        run: |
          ./ci/build-tumbleweed.sh meson

      - name: Print meson log
        if: ${{ failure() }}
        run: |
          cat ./build/meson-logs/meson-log.txt

      - name: Build with waf
        run: |
          ./ci/build-tumbleweed.sh waf

      - name: Print waf log
        if: ${{ failure() }}
        run: |
          cat ./build/config.log

  freebsd:
    runs-on: macos-12 # until https://github.com/actions/runner/issues/385
    steps:
    - uses: actions/checkout@v3
    - name: Test in FreeBSD VM
      uses: vmactions/freebsd-vm@v0
      with:
        usesh: true
        prepare: |
            # Requested in ci/build-freebsd.sh
            pkg install -y \
                cmake \
                evdev-proto \
                ffmpeg \
                libplacebo \
                libxkbcommon \
                libXinerama \
                libxpresent \
                luajit \
                meson \
                openal-soft \
                pkgconf \
                python3 \
                sdl2 \
                sndio \
                vulkan-headers \
                wayland-protocols \
                #
            # Optionally auto-enabled
            pkg install -y \
                alsa-lib \
                jackit \
                libXv \
                libarchive \
                libbluray \
                libcaca \
                libcdio-paranoia \
                libdvdnav \
                mujs \
                pipewire \
                pulseaudio \
                rubberband \
                sekrit-twc-zimg \
                uchardet \
                v4l_compat \
                #
        run: |
          ./ci/build-freebsd.sh

    - name: Print meson log
      if: ${{ failure() }}
      run: |
        cat ./build/meson-logs/meson-log.txt

    - name: Print waf log
      if: ${{ failure() }}
      run: |
        cat ./build/config.log

  msys2:
    runs-on: windows-latest
    strategy:
      fail-fast: false
      matrix:
        sys:
          - clang32
          - clang64
          - mingw32
          - mingw64
          - ucrt64
    defaults:
      run:
        shell: msys2 {0}
    steps:
      - uses: actions/checkout@v3
      - uses: msys2/setup-msys2@v2
        with:
          msystem: ${{ matrix.sys }}
          update: true
          install: git
          pacboy: >-
            angleproject:p
            cc:p
            diffutils:p
            ffmpeg:p
            lcms2:p
            libarchive:p
            libass:p
            libcdio-paranoia:p
            libdvdnav:p
            libjpeg-turbo:p
            libplacebo:p
            luajit:p
            meson:p
            ninja:p
            pkgconf:p
            python:p
            rst2pdf:p
            rubberband:p
            shaderc:p
            spirv-cross:p
            uchardet:p
            vapoursynth:p
            vulkan:p

      - name: Build with meson
        run: |
          ./ci/build-msys2.sh meson

      - name: Print meson log
        if: ${{ failure() }}
        run: |
          cat ./build_meson/meson-logs/meson-log.txt

      - name: Build with waf
        run: |
          ./ci/build-msys2.sh waf

      - name: Print waf log
        if: ${{ failure() }}
        run: |
          cat ./build/config.log
