# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
name: log4cxx

on: push

jobs:
  job:
    name: ${{ matrix.os }}-${{ matrix.cxx }}-build-and-test
    runs-on: ${{ matrix.os }}
    timeout-minutes: 38
    strategy:
      fail-fast: false
      matrix:
        name: [ubuntu18-gcc, ubuntu18-clang, osx, windows-2019]
        include:
          - name: windows-2019
            os: windows-2019
            cxx: cl.exe
            cc: cl.exe
          - name: ubuntu18-gcc
            os: ubuntu-18.04
            cxx: g++
            cc: gcc
          - name: ubuntu18-clang
            os: ubuntu-18.04
            cxx: clang++
            cc: clang
          - name: osx
            os: macos-latest
            cxx: clang++
            cc: clang

    steps:
    - uses: actions/checkout@v2

    - uses: lukka/set-shell-env@v1
      with:
        CXX: ${{ matrix.cxx }}
        CC: ${{ matrix.cc }}

    - name: 'Configure Dependencies - Ubuntu'
      if: matrix.name == 'ubuntu18-gcc' || matrix.name == 'ubuntu18-clang'
      run: |
        sudo apt-get install -y libapr1-dev libaprutil1-dev
        # note: sqlext.h exists on github VM, purge for now as we don't link correctly...
        sudo apt-get purge unixodbc-dev

    - name: 'Restore Prebuilt Dependencies - Windows'
      id: restore-vcpkg-cache
      if: matrix.name == 'windows-2019' || matrix.name == 'windows-2016'
      uses: actions/cache@v2
      with:
        path: ${{ runner.workspace }}/vcpkg
        key: ${{ runner.os }}-${{ matrix.name }}-cache

    - name: 'Configure Dependencies - Windows'
      if: matrix.name == 'windows-2019' || matrix.name == 'windows-2016'
      uses: lukka/run-vcpkg@v2
      id: runvcpkg
      with:
        vcpkgArguments: apr apr-util
        vcpkgDirectory: ${{ runner.workspace }}/vcpkg/
        vcpkgGitCommitId: ffa7fd27cfa29f206d1fd2ccfc722cad4aaeef3d
        vcpkgTriplet: x64-windows

    - name: 'run cmake'
      uses: lukka/run-cmake@v2
      with:
        cmakeListsOrSettingsJson: CMakeListsTxtAdvanced
        buildDirectory: ${{ runner.workspace }}/build
        useVcpkgToolchainFile: true
        cmakeAppendedArgs: '-DLOG4CXX_TEST_PROGRAM_PATH=C:\msys64\usr\bin'

    - name: run unit tests
      shell: pwsh
      run: |
        cd ${{ runner.workspace }}/build
        ctest -C Debug --output-on-failure -V
