name: Build

on:
  push:
    branches: [ "**" ]
  pull_request:
    branches: [ "**" ]

jobs:
  macOS-premake:
    strategy:
      matrix:
        conf:
          - Debug
          - Release

    runs-on: macos-latest
    
    steps:
    - uses: actions/checkout@v3

    - name: Download & install SDL
      run: |
        curl -L -o SDL2.dmg https://github.com/libsdl-org/SDL/releases/download/release-2.24.2/SDL2-2.24.2.dmg
        hdiutil attach SDL2.dmg
        cp -r /Volumes/SDL2/SDL2.framework RecastDemo/Bin
        hdiutil detach /Volumes/SDL2
        rm SDL2.dmg

    - name: Download & install premake
      working-directory: RecastDemo
      run: |
        curl -L -o premake.tar.gz https://github.com/premake/premake-core/releases/download/v5.0.0-beta2/premake-5.0.0-beta2-macosx.tar.gz
        tar -xzf premake.tar.gz
        rm premake.tar.gz

    - name: Run premake
      working-directory: RecastDemo
      run: ./premake5 xcode4

    - name: Build With Xcode
      working-directory: RecastDemo/Build/xcode4/
      run: xcodebuild -scheme RecastDemo -configuration ${{matrix.conf}} -project RecastDemo.xcodeproj build
    
    - name: Build Unit Tests With Xcode
      working-directory: RecastDemo/Build/xcode4/
      run: xcodebuild -scheme Tests -configuration ${{matrix.conf}} -project Tests.xcodeproj build
  
  macos-cmake:
    strategy:
      matrix:
        conf:
          - Debug
          - Release

    runs-on: macos-latest
    
    steps:
    - uses: actions/checkout@v3
    - name: Download & install SDL
      run: |
        curl -L -o SDL2.dmg https://github.com/libsdl-org/SDL/releases/download/release-2.24.2/SDL2-2.24.2.dmg
        hdiutil attach SDL2.dmg
        cp -r /Volumes/SDL2/SDL2.framework ${{github.workspace}}/RecastDemo/Bin/
        hdiutil detach /Volumes/SDL2
        rm SDL2.dmg

    - name: Configure CMake
      # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make.
      # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type
      run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{matrix.conf}} -DSDL2_LIBRARY=${{github.workspace}}/RecastDemo/Bin/SDL2.framework

    - name: Build
      run: cmake --build ${{github.workspace}}/build --config ${{matrix.conf}}
  
  linux-premake:
    strategy:
      matrix:
        conf:
          - debug
          - release
        compiler:
          - clang
          - gcc

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3

    - name: Install opengl and SDL
      run: |
        sudo apt-get update
        sudo apt-get install -y libgl1-mesa-dev libsdl2-dev

    - name: Download & Install premake
      working-directory: RecastDemo
      run: |
        curl -L -o premake.tar.gz https://github.com/premake/premake-core/releases/download/v5.0.0-beta2/premake-5.0.0-beta2-linux.tar.gz
        tar -xzf premake.tar.gz
        rm premake.tar.gz
    
    - name: Run premake
      working-directory: RecastDemo
      run: ./premake5 --cc=${{matrix.compiler}} gmake2
    
    - name: Build
      working-directory: RecastDemo/Build/gmake2
      run: make config=${{matrix.conf}} verbose=true
    
  linux-cmake:
    strategy:
      matrix:
        conf:
          - Debug
          - Release

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3

    - name: Install opengl and SDL
      run: |
        sudo apt-get update
        sudo apt-get install -y libgl1-mesa-dev libsdl2-dev

    - name: Configure CMake
      run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{matrix.conf}}

    - name: Build
      run: cmake --build ${{github.workspace}}/build --config ${{matrix.conf}}
  
  windows-premake:
    strategy:
      matrix:
        conf:
          - Debug
          - Release
        vs-version:
          - vs2019
          - vs2022
        include:
          - vs-version: vs2019
            version-range: '16.0'
            runner: windows-2019
          - vs-version: vs2022
            version-range: '17.0'
            runner: windows-2022

    runs-on: ${{matrix.runner}}

    steps:
    - uses: actions/checkout@v3

    - name: Add msbuild to PATH
      uses: microsoft/setup-msbuild@v1.1
      with:
        vs-version: ${{matrix.version-range}}

    - name: Download and Install SDL
      working-directory: RecastDemo/Contrib
      shell: pwsh
      run: |
        (new-object System.Net.WebClient).DownloadFile("https://github.com/libsdl-org/SDL/releases/download/release-2.24.2/SDL2-devel-2.24.2-VC.zip","${{github.workspace}}/RecastDemo/Contrib/SDL.zip")
        tar -xf SDL.zip
        ren SDL2-2.24.2 SDL
        del SDL.zip

    - name: Download and Install Premake
      working-directory: RecastDemo
      shell: pwsh
      run: |
        (new-object System.Net.WebClient).DownloadFile("https://github.com/premake/premake-core/releases/download/v5.0.0-beta2/premake-5.0.0-beta2-windows.zip","${{github.workspace}}/RecastDemo/premake.zip")
        tar -xf premake.zip
        del premake.zip

    - name: Run Premake
      working-directory: RecastDemo
      run: ./premake5.exe ${{matrix.vs-version}}

    - name: Build
      working-directory: RecastDemo/Build/${{matrix.vs-version}}
      run: msbuild RecastDemo.vcxproj -property:Configuration=${{matrix.conf}}

  windows-cmake:
    strategy:
      matrix:
        conf:
          - Debug
          - Release
        vs-version:
          - vs2019
          - vs2022
        include:
          - vs-version: vs2019
            cmake-generator: Visual Studio 16 2019
            runner: windows-2019
          - vs-version: vs2022
            cmake-generator: Visual Studio 17 2022
            runner: windows-2022

    runs-on: ${{matrix.runner}}

    steps:
    - uses: actions/checkout@v3

    - name: Download and Install SDL
      working-directory: RecastDemo/Contrib
      shell: pwsh
      run: |
        (new-object System.Net.WebClient).DownloadFile("https://github.com/libsdl-org/SDL/releases/download/release-2.24.2/SDL2-devel-2.24.2-VC.zip","${{github.workspace}}/RecastDemo/Contrib/SDL.zip")
        tar -xf SDL.zip
        ren SDL2-2.24.2 SDL
        del SDL.zip

    - name: Configure CMake
      run: cmake -G "${{matrix.cmake-generator}}" -B ${{github.workspace}}/build -D CMAKE_BUILD_TYPE=${{matrix.conf}} -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/build

    - name: Build with CMake
      run: cmake --build ${{github.workspace}}/build --config ${{matrix.conf}}
