name: CMake

on: [ push, pull_request ]

env:
  BUILD_TYPE: Release
  MSYS: D:\msys2

jobs:
  build:
    strategy:
      matrix:

        os: [ ubuntu, macos, windows ]
        qt: [ "5.15.2", "6.6.2" ]

        include:
        - os: ubuntu
          generator: Unix Makefiles
          openssl_root: /usr
          artifact: build/xca-*-Linux.tar.gz
          host: linux
          runs: ubuntu-latest

        - os: macos
          generator: Unix Makefiles
          openssl_root: /opt/homebrew/opt/openssl
          artifact: build/xca-*.dmg
          host: mac
          runs: macos-latest

        - os: windows
          generator: MinGW Makefiles
          openssl_root: D:\msys2\msys64\mingw64
          artifact: |
             build/xca-*.msi
             build/xca-portable-*.zip
          host: windows

        - os: windows
          qt: "5.15.2"
          winarch: win64_mingw81
          runs: windows-2019

        exclude:
        - os: windows
          qt: "6.6.2"

        - os: macos
          qt: "5.15.2"

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

    steps:
    - name: Install Python 3.10
      uses: actions/setup-python@v5
      with:
        python-version: "3.10"

    - name: Install Sphinx
      run: |
        python -m pip install --upgrade pip
        pip install sphinx

    - name: Install Qt
      uses: jurplel/install-qt-action@v3
      with:
        arch: ${{matrix.winarch}}
        version: ${{matrix.qt}}

    - name: Install MSYS2 and OpenSSL on Windows
      uses: msys2/setup-msys2@v2
      if: matrix.os == 'windows'
      with:
        location: ${{env.MSYS}}
        msystem: mingw64
        install: mingw-w64-x86_64-openssl openssl-devel base-devel mingw-w64-x86_64-gcc

    - name: Brew install OpenSSL
      if: matrix.os == 'macos'
      run: brew install openssl

    - name: Checkout XCA
      uses: actions/checkout@v4
      with:
        fetch-depth: 0

    - name: Configure
      # No YAML Multiline mechanism (>, |, \, >-, >+2 whatever) works as expected
      # Give up. Live with the long line
      run: cmake -B ${{github.workspace}}/build -G "${{matrix.generator}}" -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DOPENSSL_ROOT_DIR=${{matrix.openssl_root}} --warn-uninitialized -DCMAKE_OSX_ARCHITECTURES=arm64 -DCMAKE_OSX_DEPLOYMENT_TARGET="10.15"

    - name: Build
      run: cmake --build ${{github.workspace}}/build -j 5 -v

    - name: Fixup after WindeployQT and Install
      if: matrix.os == 'windows'
      run: |
        cd ${{env.MSYS}}\msys64\mingw64\bin
        cmake -E copy libgcc_s_seh-1.dll libstdc++-6.dll libwinpthread-1.dll ${{github.workspace}}\build
        cmake --build ${{github.workspace}}/build -t install

    - name: Test
      # Execute tests defined by the CMake configuration.
      # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail
      run: |
        cmake --build ${{github.workspace}}/build -t tests
        ctest --test-dir ${{github.workspace}}/build -L console

    - name: Install
      if: matrix.os != 'windows'
      run: DESTDIR=${{github.workspace}}/build/INSTALL cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} -t install

    - name: Pack
      run: |
        cd ${{github.workspace}}/build
        cpack -C ${{env.BUILD_TYPE}}

    - name: Deploy
      uses: actions/upload-artifact@v4
      with:
        path: ${{matrix.artifact}}
        name: ${{matrix.os}}-${{matrix.qt}}
