name: Build

on: [ push, pull_request ]

jobs:
  build:
    name: ${{ matrix.config.name }} SCALAR_DOUBLE=${{ matrix.scalar_double }}
    runs-on: ${{ matrix.config.os }}
    if: "!contains(github.event.head_commit.message, '[skip ci]')"

    strategy:
      fail-fast: false
      matrix:
        scalar_double: ["OFF", "ON"]
        config:
          - {
              name: "Windows MSVC",
              os: windows-latest,
              generator: "Ninja",
              conda_library_dir: "Library"
            }
          - {
                name: "macOS Clang",
                os: macos-latest,
                generator: "Ninja",
                conda_library_dir: "."
            }

    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          submodules: recursive

      - name: Install Dependencies
        uses: conda-incubator/setup-miniconda@v3
        with:
          activate-environment: CCCoreLib
          auto-activate-base: false
          environment-file: .ci/conda.yml
          mamba-version: '*'

      - name: Configure MSVC console (Windows)
        if: matrix.config.os == 'windows-latest'
        uses: ilammy/msvc-dev-cmd@v1

      - name: Set environment for MSVC (Windows)
        if: matrix.config.os == 'windows-latest'
        run: |
          # Set these env vars so cmake picks the correct compiler
          # https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-commands-for-github-actions#environment-files
          echo "CXX=cl.exe" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
          echo "CC=cl.exe" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append

      - name: Configure (macOS)
        if: matrix.config.os == 'macos-latest'
        shell: bash -l {0}
        run: |
          mkdir cccorelib-build

          export CONDA_LIB_DIR="$CONDA_PREFIX/${{ matrix.config.conda_library_dir }}"

          cmake \
          -B cccorelib-build \
          -G "${{ matrix.config.generator }}" \
          -DCMAKE_BUILD_TYPE=Release \
          -DCMAKE_PREFIX_PATH="$CONDA_LIB_DIR" \
          -DCCCORELIB_SCALAR_DOUBLE=${{ matrix.scalar_double }} \
          -DCCCORELIB_USE_CGAL=FALSE \
          -DCCCORELIB_USES_TBB=TRUE \
          .

      - name: Configure (Windows)
        if:  matrix.config.os == 'windows-latest'
        shell: bash -l {0}
        run: |
          mkdir build

          # DGM: without caching, using conda takes too long.
          # Therefore we can't set -DCCCORELIB_USE_CGAL=TRUE
          cmake \
          -B cccorelib-build \
          -G "${{ matrix.config.generator }}" \
          -DCMAKE_BUILD_TYPE=Release \
            -DCMAKE_PREFIX_PATH="$CONDA_LIB_DIR" \
          -DCCCORELIB_SCALAR_DOUBLE=${{ matrix.scalar_double }} \
          -DCCCORELIB_USE_CGAL=FALSE \
          -DCCCORELIB_USES_TBB=TRUE \
          .

      - name: Build
        run: cmake --build cccorelib-build --parallel

  ubuntu-build:
    name: Ubuntu ${{ matrix.compiler }} SCALAR_DOUBLE=${{ matrix.scalar_double }}
    runs-on: ubuntu-22.04
    if: "!contains(github.event.head_commit.message, '[skip ci]')"

    strategy:
      fail-fast: false
      matrix:
        scalar_double: [ "OFF", "ON" ]
        compiler: ["GCC", "Clang"]

    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          submodules: recursive

      - name: Install Dependencies
        run: >
          sudo apt-get update -qq

          sudo apt-get install -qy cmake ninja-build
          qtbase5-dev qttools5-dev qttools5-dev-tools
          libtbb-dev
          libcgal-dev libcgal-qt5-dev

      - name: Setup GCC
        if: matrix.compiler == 'GCC'
        run: |
          echo "CC=gcc" >> $GITHUB_ENV
          echo "CXX=g++" >> $GITHUB_ENV

      - name: Setup Clang
        if: matrix.compiler == 'Clang'
        run: |
          echo "CC=clang" >> $GITHUB_ENV
          echo "CXX=clang++" >> $GITHUB_ENV

      - name: Configure cmake
        run: >
          mkdir cccorelib-build

          cmake
          -B cccorelib-build
          -S .
          -G Ninja
          -DCMAKE_BUILD_TYPE=Release
          -DCCCORELIB_SCALAR_DOUBLE=${{ matrix.scalar_double }}
          -DCCCORELIB_USE_CGAL=TRUE
          -DCCCORELIB_USES_TBB=TRUE
          .

      - name: Build
        run: cmake --build cccorelib-build --parallel