##############################################################################
# GitHub Actions Workflow for Boost.Geometry to build minimal tests with Clang
#
# Copyright (c) 2020 Mateusz Loskot <mateusz@loskot.net>
# Copyright (c) 2020-2021 Adam Wulkiewicz, Lodz, Poland
#
# Copyright (c) 2022-2025 Oracle and/or its affiliates.
# Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
#
# Use, modification and distribution is subject to the Boost Software License,
# Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
##############################################################################
name: minimal

on: [push, pull_request]

jobs:
  ##############################################################################
  clang:
    name: ${{ matrix.b2_toolset }}
    runs-on: ${{ matrix.os }}

    strategy:
      fail-fast: false
      matrix:
        b2_toolset: [
          clang-6.0,
          clang-7,
          clang-8,
          clang-9,
          clang-10,
          clang-11,
          clang-12,
          clang-13,
          clang-14
        ]

        include:
          - b2_toolset: clang-6.0
            b2_cxxstd: 14
            version: "6.0"
            os: ubuntu-22.04
          - b2_toolset: clang-7
            b2_cxxstd: 14,17
            version: "7"
            os: ubuntu-22.04
          - b2_toolset: clang-8
            b2_cxxstd: 14,17
            version: "8"
            os: ubuntu-22.04
          - b2_toolset: clang-9
            # At some point compilation started to fail with 2a from unknown reason
            # It may have something to do with the std library
            #b2_cxxstd: 14,17,2a
            b2_cxxstd: 14,17
            version: "9"
            os: ubuntu-22.04
          - b2_toolset: clang-10
            b2_cxxstd: 14,17,2a
            version: "10"
            os: ubuntu-22.04
          - b2_toolset: clang-11
            b2_cxxstd: 14,17,2a
            version: "11"
            os: ubuntu-22.04
          - b2_toolset: clang-12
            b2_cxxstd: 14,17,2a
            version: "12"
            os: ubuntu-22.04
          - b2_toolset: clang-13
            b2_cxxstd: 14,17,2a
            version: "13"
            os: ubuntu-22.04
          - b2_toolset: clang-14
            b2_cxxstd: 14,17,2a
            version: "14"
            os: ubuntu-22.04
    steps:
      - name: Set up environment
        id: setenv
        run: |
          if [[ "$GITHUB_REF" == *master ]]; then
            echo "BOOST_BRANCH=master" >> $GITHUB_ENV
          else
            echo "BOOST_BRANCH=develop" >> $GITHUB_ENV
          fi
          echo "BOOST_SELF=$(basename $GITHUB_WORKSPACE)" >> $GITHUB_ENV
          echo "BOOST_ROOT=$GITHUB_WORKSPACE/boost-root" >> $GITHUB_ENV
          echo "boost_self=$(basename $GITHUB_WORKSPACE)" >> "$GITHUB_OUTPUT"
          echo "boost_root=$GITHUB_WORKSPACE/boost-root" >> "$GITHUB_OUTPUT"

      - name: Clone boostorg/boost
        run: |
          git clone -b $BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git $BOOST_ROOT
          cd $BOOST_ROOT
          git submodule update -q --init libs/headers
          git submodule update -q --init tools/boost_install
          git submodule update -q --init tools/boostdep
          git submodule update -q --init tools/build
          mkdir -p libs/$BOOST_SELF

      - uses: actions/checkout@v2
        with:
          path: ${{ steps.setenv.outputs.boost_root }}/libs/${{ steps.setenv.outputs.boost_self }}

      - name: Run tools/boostdep/depinst/depinst.py
        run: |
          cd $BOOST_ROOT
          python tools/boostdep/depinst/depinst.py --include benchmark --include example --include examples --include tools $BOOST_SELF

      - name: Install
        run: |
          # Required for compilers not available in ubuntu 22.04
          sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 40976EAF437D05B5
          sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32
          sudo add-apt-repository "deb http://dk.archive.ubuntu.com/ubuntu/ focal main"
          sudo add-apt-repository "deb http://dk.archive.ubuntu.com/ubuntu/ focal universe"
          sudo apt -q -y update
          sudo apt -q -y install clang-${{ matrix.version }} g++-multilib

      - name: Bootstrap boostorg/boost
        run: |
          gcc --version
          cd $BOOST_ROOT
          ./bootstrap.sh --with-toolset=gcc
          ./b2 headers
          test -f /usr/local/bin/b2 && rm -rf /usr/local/bin/b2
          test -f /usr/local/bin/bjam && rm -rf /usr/local/bin/bjam
          sudo cp $BOOST_ROOT/b2 /usr/local/bin/
          ls -l /usr/local/bin/b2
          b2 -v

      - name: Set up clang toolset in ~/user-config.jam
        run: |
          export CXX_NAME=clang++-${{ matrix.version }}
          echo ${CXX_NAME}
          echo "# $HOME/user-config.jam" > $HOME/user-config.jam
          echo "using clang : : $(which clang++-${{ matrix.version }}) ;" > ${HOME}/user-config.jam
          test -f $HOME/user-config.jam && cat $HOME/user-config.jam

      - name: Build libs/geometry/test//minimal
        run: |
          cd $BOOST_ROOT
          $BOOST_ROOT/b2 toolset=clang cxxstd=${{ matrix.b2_cxxstd }} variant=debug,release address-model=32,64 libs/geometry/test//minimal

  ##############################################################################
  gcc:
    name: ${{ matrix.b2_toolset }}
    runs-on: ${{ matrix.os }}

    strategy:
      fail-fast: false
      matrix:
        b2_toolset: [
          gcc-7,
          gcc-8,
          gcc-9,
          gcc-10,
          gcc-11
        ]

        include:
          - b2_toolset: gcc-7
            b2_cxxstd: 14,17
            version: "7"
            os: ubuntu-22.04
          - b2_toolset: gcc-8
            b2_cxxstd: 14,17
            version: "8"
            os: ubuntu-22.04
          - b2_toolset: gcc-9
            b2_cxxstd: 14,17,2a
            version: "9"
            os: ubuntu-22.04
          - b2_toolset: gcc-10
            b2_cxxstd: 14,17,2a
            version: "10"
            os: ubuntu-22.04
          - b2_toolset: gcc-11
            b2_cxxstd: 14,17,2a
            version: "11"
            os: ubuntu-22.04

    steps:
      - name: Set up environment
        id: setenv
        run: |
          if [[ "$GITHUB_REF" == *master ]]; then
            echo "BOOST_BRANCH=master" >> $GITHUB_ENV
          else
            echo "BOOST_BRANCH=develop" >> $GITHUB_ENV
          fi
          echo "BOOST_SELF=$(basename $GITHUB_WORKSPACE)" >> $GITHUB_ENV
          echo "BOOST_ROOT=$GITHUB_WORKSPACE/boost-root" >> $GITHUB_ENV
          echo "boost_self=$(basename $GITHUB_WORKSPACE)" >> "$GITHUB_OUTPUT"
          echo "boost_root=$GITHUB_WORKSPACE/boost-root" >> "$GITHUB_OUTPUT"

      - name: Clone boostorg/boost
        run: |
          git clone -b $BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git $BOOST_ROOT
          cd $BOOST_ROOT
          git submodule update -q --init libs/headers
          git submodule update -q --init tools/boost_install
          git submodule update -q --init tools/boostdep
          git submodule update -q --init tools/build
          mkdir -p libs/$BOOST_SELF

      - uses: actions/checkout@v2
        with:
          path: ${{ steps.setenv.outputs.boost_root }}/libs/${{ steps.setenv.outputs.boost_self }}

      - name: Run tools/boostdep/depinst/depinst.py
        run: |
          cd $BOOST_ROOT
          python tools/boostdep/depinst/depinst.py --include benchmark --include example --include examples --include tools $BOOST_SELF

      - name: Install
        run: |
          # Required for compilers not available in ubuntu 22.04
          sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 40976EAF437D05B5
          sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32
          sudo add-apt-repository "deb http://dk.archive.ubuntu.com/ubuntu/ focal main"
          sudo add-apt-repository "deb http://dk.archive.ubuntu.com/ubuntu/ focal universe"
          sudo apt -q -y update
          sudo apt -q -y install g++-${{ matrix.version }} g++-${{ matrix.version }}-multilib

      - name: Bootstrap boostorg/boost
        run: |
          gcc --version
          cd $BOOST_ROOT
          ./bootstrap.sh --with-toolset=gcc
          ./b2 headers
          test -f /usr/local/bin/b2 && rm -rf /usr/local/bin/b2
          test -f /usr/local/bin/bjam && rm -rf /usr/local/bin/bjam
          sudo cp $BOOST_ROOT/b2 /usr/local/bin/
          ls -l /usr/local/bin/b2
          b2 -v

      - name: Build libs/geometry/test//minimal
        run: |
          cd $BOOST_ROOT
          $BOOST_ROOT/b2 toolset=${{ matrix.b2_toolset }} cxxstd=${{ matrix.b2_cxxstd }} variant=debug,release address-model=32,64 libs/geometry/test//minimal

  ##############################################################################
  msvc:
    name: ${{ matrix.b2_toolset }}
    runs-on: ${{ matrix.os }}

    strategy:
      fail-fast: false
      matrix:
        b2_toolset: [
          msvc-14.3,
          msvc-14.4
        ]

        include:
          - b2_toolset: msvc-14.3
            b2_cxxstd: 14,17,2a
            os: windows-2022
          #- b2_toolset: msvc-14.4 # b2 cannot find command for this MSVC toolset
          #  b2_cxxstd: 14,17,2a
          #  os: windows-2025

    steps:
      - name: Set up environment
        id: setenv
        shell: pwsh
        run: |
          if ("$env:GITHUB_REF" -contains "master") {
            echo "BOOST_BRANCH=master" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
          } else {
            echo "BOOST_BRANCH=develop" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
          }
          echo "BOOST_SELF=$((Get-Item $env:GITHUB_WORKSPACE).BaseName)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
          echo "BOOST_ROOT=$env:GITHUB_WORKSPACE\boost-root" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
          echo "boost_self=$((Get-Item $env:GITHUB_WORKSPACE).BaseName)" | Out-File -FilePath $Env:GITHUB_OUTPUT -Encoding utf8 -Append
          echo "boost_root=$env:GITHUB_WORKSPACE\boost-root" | Out-File -FilePath $Env:GITHUB_OUTPUT -Encoding utf8 -Append

      - name: Clone boostorg/boost
        shell: pwsh
        run: |
          git clone -b $env:BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git $env:BOOST_ROOT
          cd $env:BOOST_ROOT
          git submodule update -q --init libs/headers
          git submodule update -q --init tools/boost_install
          git submodule update -q --init tools/boostdep
          git submodule update -q --init tools/build
          New-Item -Path libs\$env:BOOST_SELF -ItemType Directory -ErrorAction SilentlyContinue

      - uses: actions/checkout@v2
        with:
          path: ${{ steps.setenv.outputs.boost_root }}/libs/${{ steps.setenv.outputs.boost_self }}

      - name: Run tools/boostdep/depinst/depinst.py
        shell: pwsh
        run: |
          cd $env:BOOST_ROOT
          python tools/boostdep/depinst/depinst.py --include benchmark --include example --include examples --include tools $env:BOOST_SELF

      - name: Bootstrap boostorg/boost
        shell: pwsh
        run: |
          cd $env:BOOST_ROOT
          .\bootstrap.bat --with-toolset=${{ matrix.b2_toolset }}
          .\b2 headers
          .\b2 -v

      - name: Build libs/geometry/test//minimal
        shell: pwsh
        run: |
          cd $env:BOOST_ROOT
          .\b2 toolset=${{ matrix.b2_toolset }} cxxstd=${{ matrix.b2_cxxstd }} variant=debug,release address-model=32,64 libs/geometry/test//minimal
