name: build xo-callback + xo dependencies

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

env:
  # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.)
  BUILD_TYPE: Release

jobs:
  build:
    # The CMake configure and build commands are platform agnostic and should work equally well on Windows or Mac.
    # You can convert this to a matrix build if you need cross-platform coverage.
    # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
    runs-on: ubuntu-latest

    steps:
    - name: checkout source
      uses: actions/checkout@v3

    - name: Install catch2
      # install catch2.  see [[https://stackoverflow.com/questions/57982945/how-to-apt-get-install-in-a-github-actions-workflow]]
      run: sudo apt-get install -y catch2

    - name: Install libjsoncpp (dep of libwebsockets)
      # install jsoncpp
      run: sudo apt-get install -y libjsoncpp-dev

    - name: Install libwebsockets
      # install libwebsockets.
      run: sudo apt-get install -y libwebsockets-dev

    # ----------------------------------------------------------------

    - name: Clone xo-cmake
      uses: actions/checkout@v3
      with:
        repository: Rconybea/xo-cmake
        path: repo/xo-cmake

    - name: Configure xo-cmake
      run: cmake -B ${{github.workspace}}/build_xo-cmake -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/local repo/xo-cmake

    - name: Build xo-cmake (trivial)
      run: cmake --build ${{github.workspace}}/build_xo-cmake --config ${{env.BUILD_TYPE}}

    - name: Install xo-cmake
      run: cmake --install ${{github.workspace}}/build_xo-cmake

    # ----------------------------------------------------------------

    - name: Clone indentlog
      uses: actions/checkout@v3
      with:
        repository: Rconybea/indentlog
        path: repo/indentlog

    - name: Configure indentlog
      # configure cmake for indentlog in dedicated build directory.
      run: cmake -B ${{github.workspace}}/build_indentlog -DCMAKE_MODULE_PATH=${{github.workspace}}/local/share/cmake -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/local repo/indentlog

    - name: Build indentlog
      run: cmake --build ${{github.workspace}}/build_indentlog --config ${{env.BUILD_TYPE}}

    - name: Install indentlog
      # install into ${{github.workspace}}/local
      run: cmake --install ${{github.workspace}}/build_indentlog

    # ----------------------------------------------------------------

    - name: Clone refcnt
      uses: actions/checkout@v3
      with:
        repository: Rconybea/refcnt
        path: repo/refcnt

    - name: Configure refcnt
      # configure cmake for refcnt in dedicated build directory.
      run: cmake -B ${{github.workspace}}/build_refcnt -DCMAKE_MODULE_PATH=${{github.workspace}}/local/share/cmake -DCMAKE_PREFIX_PATH=${{github.workspace}}/local -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/local repo/refcnt

    - name: Build refcnt
      run: cmake --build ${{github.workspace}}/build_refcnt --config ${{env.BUILD_TYPE}}

    - name: Install refcnt
      # install into ${{github.workspace}}/local
      run: cmake --install ${{github.workspace}}/build_refcnt

    # ----------------------------------------------------------------

    - name: Clone subsys
      uses: actions/checkout@v3
      with:
        repository: Rconybea/subsys
        path: repo/subsys

    - name: Configure subsys
      # configure cmake for subsys in dedicated build directory.
      run: cmake -B ${{github.workspace}}/build_subsys -DCMAKE_MODULE_PATH=${{github.workspace}}/local/share/cmake -DCMAKE_PREFIX_PATH=${{github.workspace}}/local -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/local repo/subsys

    - name: Build subsys
      run: cmake --build ${{github.workspace}}/build_subsys --config ${{env.BUILD_TYPE}}

    - name: Install subsys
      # install into ${{github.workspace}}/local
      run: cmake --install ${{github.workspace}}/build_subsys

    # ----------------------------------------------------------------

    - name: Clone reflect
      uses: actions/checkout@v3
      with:
        repository: Rconybea/reflect
        path: repo/reflect

    - name: Configure reflect
      # configure cmake for reflect in dedicated build directory.
      run: cmake -B ${{github.workspace}}/build_reflect -DCMAKE_MODULE_PATH=${{github.workspace}}/local/share/cmake -DCMAKE_PREFIX_PATH=${{github.workspace}}/local -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/local repo/reflect

    - name: Build reflect
      run: cmake --build ${{github.workspace}}/build_reflect --config ${{env.BUILD_TYPE}}

    - name: Install reflect
      # install into ${{github.workspace}}/local
      run: cmake --install ${{github.workspace}}/build_reflect

    # ----------------------------------------------------------------

    - name: Clone callback
      uses: actions/checkout@v3
      with:
        repository: Rconybea/xo-callback
        path: repo/callback

    - name: Configure callback
      # configure cmake for callback in dedicated build directory.
      run: cmake -B ${{github.workspace}}/build_callback -DCMAKE_MODULE_PATH=${{github.workspace}}/local/share/cmake -DCMAKE_PREFIX_PATH=${{github.workspace}}/local -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/local repo/callback

    - name: Build callback
      run: cmake --build ${{github.workspace}}/build_callback --config ${{env.BUILD_TYPE}}

    - name: Install callback
      # install into ${{github.workspace}}/local
      run: cmake --install ${{github.workspace}}/build_callback

    # ----------------------------------------------------------------

    - name: Clone webutil
      uses: actions/checkout@v3
      with:
        repository: Rconybea/xo-webutil
        path: repo/webutil

    - name: Configure webutil
      # configure cmake for webutil in dedicated build directory.
      run: cmake -B ${{github.workspace}}/build_webutil -DCMAKE_MODULE_PATH=${{github.workspace}}/local/share/cmake -DCMAKE_PREFIX_PATH=${{github.workspace}}/local -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/local repo/webutil

    - name: Build webutil
      run: cmake --build ${{github.workspace}}/build_webutil --config ${{env.BUILD_TYPE}}

    - name: Install webutil
      # install into ${{github.workspace}}/local
      run: cmake --install ${{github.workspace}}/build_webutil

    # ----------------------------------------------------------------

    - name: Clone printjson
      uses: actions/checkout@v3
      with:
        repository: Rconybea/xo-printjson
        path: repo/printjson

    - name: Configure printjson
      # configure cmake for printjson in dedicated build directory.
      run: cmake -B ${{github.workspace}}/build_printjson -DCMAKE_MODULE_PATH=${{github.workspace}}/local/share/cmake -DCMAKE_PREFIX_PATH=${{github.workspace}}/local -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/local repo/printjson

    - name: Build printjson
      run: cmake --build ${{github.workspace}}/build_printjson --config ${{env.BUILD_TYPE}}

    - name: Install printjson
      # install into ${{github.workspace}}/local
      run: cmake --install ${{github.workspace}}/build_printjson

    # ----------------------------------------------------------------

    - name: Clone randomgen
      uses: actions/checkout@v3
      with:
        repository: Rconybea/randomgen
        path: repo/randomgen

    - name: Configure randomgen
      # configure cmake for randomgen in dedicated build directory.
      run: cmake -B ${{github.workspace}}/build_randomgen -DCMAKE_MODULE_PATH=${{github.workspace}}/local/share/cmake -DCMAKE_PREFIX_PATH=${{github.workspace}}/local -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/local repo/randomgen

    - name: Build randomgen
      run: cmake --build ${{github.workspace}}/build_randomgen --config ${{env.BUILD_TYPE}}

    - name: Install randomgen
      # install into ${{github.workspace}}/local
      run: cmake --install ${{github.workspace}}/build_randomgen

    # ----------------------------------------------------------------

    - name: Clone ordinaltree
      uses: actions/checkout@v3
      with:
        repository: Rconybea/xo-ordinaltree
        path: repo/ordinaltree

    - name: Configure ordinaltree
      # configure cmake for ordinaltree in dedicated build directory.
      run: cmake -B ${{github.workspace}}/build_ordinaltree -DCMAKE_MODULE_PATH=${{github.workspace}}/local/share/cmake -DCMAKE_PREFIX_PATH=${{github.workspace}}/local -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/local repo/ordinaltree

    - name: Build ordinaltree
      run: cmake --build ${{github.workspace}}/build_ordinaltree --config ${{env.BUILD_TYPE}}

    - name: Install ordinaltree
      # install into ${{github.workspace}}/local
      run: cmake --install ${{github.workspace}}/build_ordinaltree

    # ----------------------------------------------------------------

    - name: Clone reactor
      uses: actions/checkout@v3
      with:
        repository: Rconybea/xo-reactor
        path: repo/reactor

    - name: Configure reactor
      # configure cmake for reactor in dedicated build directory.
      run: cmake -B ${{github.workspace}}/build_reactor -DCMAKE_MODULE_PATH=${{github.workspace}}/local/share/cmake -DCMAKE_PREFIX_PATH=${{github.workspace}}/local -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/local repo/reactor

    - name: Build reactor
      run: cmake --build ${{github.workspace}}/build_reactor --config ${{env.BUILD_TYPE}}

    - name: Install reactor
      # install into ${{github.workspace}}/local
      run: cmake --install ${{github.workspace}}/build_reactor

    # ----------------------------------------------------------------

    - name: check cmake-supporting packages
      run: ls /usr/lib/x86_64-linux-gnu/cmake

    - name: Configure self (websock)
      # 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_websock -DCMAKE_MODULE_PATH=${{github.workspace}}/local/share/cmake "-DCMAKE_PREFIX_PATH=${{github.workspace}}/local;/usr/lib/x86_64-linux-gnu/cmake" -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/local -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}}

    - name: Build self (websock)
      # Build your program with the given configuration
      run: cmake --build ${{github.workspace}}/build_websock --config ${{env.BUILD_TYPE}}

    - name: Test self (websock)
      working-directory: ${{github.workspace}}/build_websock
      # Execute tests defined by the CMake configuration.
      # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail
      run: ctest -C ${{env.BUILD_TYPE}}
