# DO NOT EDIT - GENERATED FROM .github/workflows-in/gcc.ys

name: gcc
defaults:
  run:
    shell: bash -e -x {0}
'on':
  workflow_dispatch: null
  push:
    branches:
    - master
  pull_request:
    branches:
    - '*'
env:
  PROJ_PKG_NAME: rapidyaml-
  PROJ_PFX_TARGET: ryml-
  PROJ_PFX_CMAKE: RYML_
  CMAKE_FLAGS: -DRYML_TEST_SUITE=ON
  NUM_JOBS_BUILD: null
jobs:
  canary:
    if: always()
    continue-on-error: false
    name: canary/${{matrix.cxx}}/c++${{matrix.std}}/${{matrix.bt}}
    runs-on: ubuntu-24.04
    container: ghcr.io/biojppm/c4core/ubuntu${{matrix.img}}:latest
    strategy:
      fail-fast: false
      matrix:
        include:
        - std: 11
          cxx: g++-13
          bt: Debug
          bitlinks: shared64 static32
          img: '22.04'
        - std: 11
          cxx: g++-13
          bt: Release
          bitlinks: shared64 static32
          img: '22.04'
        - std: 20
          cxx: g++-13
          bt: Debug
          bitlinks: shared64 static32
          img: '22.04'
        - std: 20
          cxx: g++-13
          bt: Release
          bitlinks: shared64 static32
          img: '22.04'
        - std: 11
          cxx: g++-5
          bt: Debug
          bitlinks: shared64 static32
          img: '18.04'
        - std: 11
          cxx: g++-5
          bt: Release
          bitlinks: shared64 static32
          img: '18.04'
        - std: 11
          cxx: g++-4.8
          bt: Debug
          bitlinks: shared64 static32
          img: '18.04'
        - std: 11
          cxx: g++-4.8
          bt: Release
          bitlinks: shared64 static32
          img: '18.04'
    env:
      STD: ${{matrix.std}}
      CXX_: ${{matrix.cxx}}
      BT: ${{matrix.bt}}
      BITLINKS: ${{matrix.bitlinks}}
      VG: ${{matrix.vg}}
      SAN: ${{matrix.san}}
      LINT: ${{matrix.lint}}
      OS: ${{matrix.os}}
    steps:
    - name: checkout (manually)
      run: |
        set -xeo pipefail
        env | sort
        echo GITHUB_SERVER_URL=$GITHUB_SERVER_URL
        echo GITHUB_REPOSITORY=$GITHUB_REPOSITORY
        echo GITHUB_REF=$GITHUB_REF
        echo GITHUB_REF_NAME=$GITHUB_REF_NAME
        echo GITHUB_HEAD_REF=$GITHUB_HEAD_REF
        repo=$GITHUB_SERVER_URL/$GITHUB_REPOSITORY
        # check the branch
        # https://stackoverflow.com/questions/58033366
        branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}
        echo branch=$branch
        # does the branch exist in the repo?
        if [ -z "$(git ls-remote $repo | grep $branch)" ] ; then
            echo "branch $branch does not exist on $repo"
            # refs/pull/485/merge -> pull/485/head
            branch=`echo ${GITHUB_REF#refs/} | sed -e 's:merge:head:g'`
            echo "... falling back to $branch"
            # does the fallback exist?
            if [ -z "(git ls-remote $repo | grep $branch)" ] ; then
                echo "branch $branch does not exist on $repo"
                exit 1
            else
                echo "branch $branch exists on $repo"
                localbranch=$(echo $branch | sed -e 's@[/:]@_@g')
                branch=$branch:$localbranch
                echo "naming locally as $branch"
            fi
        fi
        # finally, create the local repo
        git init -q .
        # needed for running in the docker image.
        # see https://github.com/actions/checkout/issues/1169
        git config --system --add safe.directory '*'
        # finally, do it!
        git remote add origin $repo
        git fetch origin $branch
        git reset --hard FETCH_HEAD
        git submodule update --init --recursive
        # show the log
        git log --graph --date=relative --date-order --color=always \
                --pretty='%C(yellow)%h %C(cyan)%cd %Cblue%aN%C(auto)%d %Creset%s' \
            | head -30 \
            || echo -n
        # show the last commit
        git log --name-status HEAD^..HEAD
    - run: c4core-install ${{matrix.cxx}}
    - name: show info
      run: source .github/setenv.sh && c4_show_info
    - name: shared64-configure---------------------------------------------------
      run: source .github/setenv.sh && c4_cfg_test shared64
    - name: shared64-build
      run: source .github/setenv.sh && c4_build_test shared64
    - name: shared64-run
      run: source .github/setenv.sh && c4_run_test shared64
    - name: shared64-pack
      run: source .github/setenv.sh && c4_package shared64
    - name: static64-configure---------------------------------------------------
      run: source .github/setenv.sh && c4_cfg_test static64
    - name: static64-build
      run: source .github/setenv.sh && c4_build_test static64
    - name: static64-run
      run: source .github/setenv.sh && c4_run_test static64
    - name: static64-pack
      run: source .github/setenv.sh && c4_package static64
    - name: static32-configure---------------------------------------------------
      run: source .github/setenv.sh && c4_cfg_test static32
    - name: static32-build
      run: source .github/setenv.sh && c4_build_test static32
    - name: static32-run
      run: source .github/setenv.sh && c4_run_test static32
    - name: static32-pack
      run: source .github/setenv.sh && c4_package static32
    - name: shared32-configure---------------------------------------------------
      run: source .github/setenv.sh && c4_cfg_test shared32
    - name: shared32-build
      run: source .github/setenv.sh && c4_build_test shared32
    - name: shared32-run
      run: source .github/setenv.sh && c4_run_test shared32
    - name: shared32-pack
      run: source .github/setenv.sh && c4_package shared32
  tabtokens:
    if: always()
    continue-on-error: false
    name: tabtokens/${{matrix.cxx}}/c++${{matrix.std}}/${{matrix.bt}}
    runs-on: ubuntu-24.04
    container: ghcr.io/biojppm/c4core/ubuntu${{matrix.img}}:latest
    needs: canary
    strategy:
      fail-fast: false
      matrix:
        include:
        - std: 11
          cxx: g++-13
          bt: Debug
          bitlinks: shared64 static32
          img: '22.04'
        - std: 11
          cxx: g++-13
          bt: Release
          bitlinks: shared64 static32
          img: '22.04'
        - std: 20
          cxx: g++-13
          bt: Debug
          bitlinks: shared64 static32
          img: '22.04'
        - std: 20
          cxx: g++-13
          bt: Release
          bitlinks: shared64 static32
          img: '22.04'
        - std: 11
          cxx: g++-5
          bt: Debug
          bitlinks: shared64 static32
          img: '18.04'
        - std: 11
          cxx: g++-5
          bt: Release
          bitlinks: shared64 static32
          img: '18.04'
        - std: 11
          cxx: g++-4.8
          bt: Debug
          bitlinks: shared64 static32
          img: '18.04'
        - std: 11
          cxx: g++-4.8
          bt: Release
          bitlinks: shared64 static32
          img: '18.04'
    env:
      STD: ${{matrix.std}}
      CXX_: ${{matrix.cxx}}
      BT: ${{matrix.bt}}
      BITLINKS: ${{matrix.bitlinks}}
      VG: ${{matrix.vg}}
      SAN: ${{matrix.san}}
      LINT: ${{matrix.lint}}
      OS: ${{matrix.os}}
      CMAKE_FLAGS: -DRYML_WITH_TAB_TOKENS=ON
    steps:
    - name: checkout (manually)
      run: |
        set -xeo pipefail
        env | sort
        echo GITHUB_SERVER_URL=$GITHUB_SERVER_URL
        echo GITHUB_REPOSITORY=$GITHUB_REPOSITORY
        echo GITHUB_REF=$GITHUB_REF
        echo GITHUB_REF_NAME=$GITHUB_REF_NAME
        echo GITHUB_HEAD_REF=$GITHUB_HEAD_REF
        repo=$GITHUB_SERVER_URL/$GITHUB_REPOSITORY
        # check the branch
        # https://stackoverflow.com/questions/58033366
        branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}
        echo branch=$branch
        # does the branch exist in the repo?
        if [ -z "$(git ls-remote $repo | grep $branch)" ] ; then
            echo "branch $branch does not exist on $repo"
            # refs/pull/485/merge -> pull/485/head
            branch=`echo ${GITHUB_REF#refs/} | sed -e 's:merge:head:g'`
            echo "... falling back to $branch"
            # does the fallback exist?
            if [ -z "(git ls-remote $repo | grep $branch)" ] ; then
                echo "branch $branch does not exist on $repo"
                exit 1
            else
                echo "branch $branch exists on $repo"
                localbranch=$(echo $branch | sed -e 's@[/:]@_@g')
                branch=$branch:$localbranch
                echo "naming locally as $branch"
            fi
        fi
        # finally, create the local repo
        git init -q .
        # needed for running in the docker image.
        # see https://github.com/actions/checkout/issues/1169
        git config --system --add safe.directory '*'
        # finally, do it!
        git remote add origin $repo
        git fetch origin $branch
        git reset --hard FETCH_HEAD
        git submodule update --init --recursive
        # show the log
        git log --graph --date=relative --date-order --color=always \
                --pretty='%C(yellow)%h %C(cyan)%cd %Cblue%aN%C(auto)%d %Creset%s' \
            | head -30 \
            || echo -n
        # show the last commit
        git log --name-status HEAD^..HEAD
    - run: c4core-install ${{matrix.cxx}}
    - name: show info
      run: source .github/setenv.sh && c4_show_info
    - name: shared64-configure---------------------------------------------------
      run: source .github/setenv.sh && c4_cfg_test shared64
    - name: shared64-build
      run: source .github/setenv.sh && c4_build_test shared64
    - name: shared64-run
      run: source .github/setenv.sh && c4_run_test shared64
    - name: shared64-pack
      run: source .github/setenv.sh && c4_package shared64
    - name: static64-configure---------------------------------------------------
      run: source .github/setenv.sh && c4_cfg_test static64
    - name: static64-build
      run: source .github/setenv.sh && c4_build_test static64
    - name: static64-run
      run: source .github/setenv.sh && c4_run_test static64
    - name: static64-pack
      run: source .github/setenv.sh && c4_package static64
    - name: static32-configure---------------------------------------------------
      run: source .github/setenv.sh && c4_cfg_test static32
    - name: static32-build
      run: source .github/setenv.sh && c4_build_test static32
    - name: static32-run
      run: source .github/setenv.sh && c4_run_test static32
    - name: static32-pack
      run: source .github/setenv.sh && c4_package static32
    - name: shared32-configure---------------------------------------------------
      run: source .github/setenv.sh && c4_cfg_test shared32
    - name: shared32-build
      run: source .github/setenv.sh && c4_build_test shared32
    - name: shared32-run
      run: source .github/setenv.sh && c4_run_test shared32
    - name: shared32-pack
      run: source .github/setenv.sh && c4_package shared32
  noexceptions:
    if: always()
    continue-on-error: false
    name: noexceptions/${{matrix.cxx}}/c++${{matrix.std}}/${{matrix.bt}}
    runs-on: ubuntu-24.04
    container: ghcr.io/biojppm/c4core/ubuntu${{matrix.img}}:latest
    needs: canary
    strategy:
      fail-fast: false
      matrix:
        include:
        - std: 11
          cxx: g++-13
          bt: Debug
          bitlinks: shared64 static32
          img: '22.04'
        - std: 11
          cxx: g++-13
          bt: Release
          bitlinks: shared64 static32
          img: '22.04'
        - std: 20
          cxx: g++-13
          bt: Debug
          bitlinks: shared64 static32
          img: '22.04'
        - std: 20
          cxx: g++-13
          bt: Release
          bitlinks: shared64 static32
          img: '22.04'
        - std: 11
          cxx: g++-5
          bt: Debug
          bitlinks: shared64 static32
          img: '18.04'
        - std: 11
          cxx: g++-5
          bt: Release
          bitlinks: shared64 static32
          img: '18.04'
        - std: 11
          cxx: g++-4.8
          bt: Debug
          bitlinks: shared64 static32
          img: '18.04'
        - std: 11
          cxx: g++-4.8
          bt: Release
          bitlinks: shared64 static32
          img: '18.04'
    env:
      STD: ${{matrix.std}}
      CXX_: ${{matrix.cxx}}
      BT: ${{matrix.bt}}
      BITLINKS: ${{matrix.bitlinks}}
      VG: ${{matrix.vg}}
      SAN: ${{matrix.san}}
      LINT: ${{matrix.lint}}
      OS: ${{matrix.os}}
      CXXFLAGS: -fno-exceptions -fno-rtti
    steps:
    - name: checkout (manually)
      run: |
        set -xeo pipefail
        env | sort
        echo GITHUB_SERVER_URL=$GITHUB_SERVER_URL
        echo GITHUB_REPOSITORY=$GITHUB_REPOSITORY
        echo GITHUB_REF=$GITHUB_REF
        echo GITHUB_REF_NAME=$GITHUB_REF_NAME
        echo GITHUB_HEAD_REF=$GITHUB_HEAD_REF
        repo=$GITHUB_SERVER_URL/$GITHUB_REPOSITORY
        # check the branch
        # https://stackoverflow.com/questions/58033366
        branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}
        echo branch=$branch
        # does the branch exist in the repo?
        if [ -z "$(git ls-remote $repo | grep $branch)" ] ; then
            echo "branch $branch does not exist on $repo"
            # refs/pull/485/merge -> pull/485/head
            branch=`echo ${GITHUB_REF#refs/} | sed -e 's:merge:head:g'`
            echo "... falling back to $branch"
            # does the fallback exist?
            if [ -z "(git ls-remote $repo | grep $branch)" ] ; then
                echo "branch $branch does not exist on $repo"
                exit 1
            else
                echo "branch $branch exists on $repo"
                localbranch=$(echo $branch | sed -e 's@[/:]@_@g')
                branch=$branch:$localbranch
                echo "naming locally as $branch"
            fi
        fi
        # finally, create the local repo
        git init -q .
        # needed for running in the docker image.
        # see https://github.com/actions/checkout/issues/1169
        git config --system --add safe.directory '*'
        # finally, do it!
        git remote add origin $repo
        git fetch origin $branch
        git reset --hard FETCH_HEAD
        git submodule update --init --recursive
        # show the log
        git log --graph --date=relative --date-order --color=always \
                --pretty='%C(yellow)%h %C(cyan)%cd %Cblue%aN%C(auto)%d %Creset%s' \
            | head -30 \
            || echo -n
        # show the last commit
        git log --name-status HEAD^..HEAD
    - run: c4core-install ${{matrix.cxx}}
    - name: show info
      run: source .github/setenv.sh && c4_show_info
    - name: shared64-configure---------------------------------------------------
      run: source .github/setenv.sh && c4_cfg_test shared64
    - name: shared64-build
      run: source .github/setenv.sh && c4_build_test shared64
    - name: shared64-run
      run: source .github/setenv.sh && c4_run_test shared64
    - name: shared64-pack
      run: source .github/setenv.sh && c4_package shared64
    - name: static64-configure---------------------------------------------------
      run: source .github/setenv.sh && c4_cfg_test static64
    - name: static64-build
      run: source .github/setenv.sh && c4_build_test static64
    - name: static64-run
      run: source .github/setenv.sh && c4_run_test static64
    - name: static64-pack
      run: source .github/setenv.sh && c4_package static64
    - name: static32-configure---------------------------------------------------
      run: source .github/setenv.sh && c4_cfg_test static32
    - name: static32-build
      run: source .github/setenv.sh && c4_build_test static32
    - name: static32-run
      run: source .github/setenv.sh && c4_run_test static32
    - name: static32-pack
      run: source .github/setenv.sh && c4_package static32
    - name: shared32-configure---------------------------------------------------
      run: source .github/setenv.sh && c4_cfg_test shared32
    - name: shared32-build
      run: source .github/setenv.sh && c4_build_test shared32
    - name: shared32-run
      run: source .github/setenv.sh && c4_run_test shared32
    - name: shared32-pack
      run: source .github/setenv.sh && c4_package shared32
  misbuild:
    if: always()
    continue-on-error: false
    name: misbuild#${{matrix.issue}}/gcc${{matrix.gcc}}/c++${{matrix.std}}
    runs-on: ubuntu-24.04
    container: ghcr.io/biojppm/c4core/ubuntu${{matrix.img}}:latest
    needs: canary
    strategy:
      fail-fast: false
      matrix:
        include:
        - issue: 440
          std: 11
          gcc: 12
          bt: Release
          img: 22.04
          cxxflags: -O2 -DNDEBUG -g
        - issue: 486
          std: 11
          gcc: 11
          bt: Release
          img: 22.04
          cxxflags: -O3 -DNDEBUG
    env:
      STD: ${{matrix.std}}
      CXX_: ${{matrix.gcc}}
      BT: ${{matrix.bt}}
      BITLINKS: ${{matrix.bitlinks}}
      VG: ${{matrix.vg}}
      SAN: ${{matrix.san}}
      LINT: ${{matrix.lint}}
      OS: ${{matrix.os}}
    steps:
    - name: checkout (action + docker)
      uses: actions/checkout@v4
      with:
        submodules: recursive
        fetch-depth: 0
    - run: git config --system --add safe.directory '*'
    - run: c4core-install g++-${{matrix.gcc}}
    - name: show info
      run: source .github/setenv.sh && c4_show_info
    - name: configure (issue \#${{matrix.issue}})
      run: |
        cmake -S . -B build \
          -DCMAKE_CXX_COMPILER=g++-${{matrix.gcc}} \
          -DCMAKE_C_COMPILER=gcc-${{matrix.gcc}} \
          -DCMAKE_BUILD_TYPE=Release \
          -DCMAKE_CXX_FLAGS_RELEASE="${{matrix.cxxflags}}" \
          -DRYML_BUILD_TESTS=ON \
          -DRYML_DBG=OFF
    - name: build (issue \#${{matrix.issue}})
      run: cmake --build build --target ryml-test-build --parallel --verbose
    - name: run (issue \#${{matrix.issue}})
      run: |
        source .github/setenv.sh
        export CTEST_PARALLEL_LEVEL=`_c4getnumcores`
        cmake --build build --target ryml-test-run
  vg1:
    if: always()
    continue-on-error: false
    name: extended/${{matrix.cxx}}/${{matrix.bits}}bit/c++${{matrix.std}}/vg/D_O1_O2
    runs-on: ubuntu-24.04
    container: ghcr.io/biojppm/c4core/ubuntu${{matrix.img}}:latest
    needs: canary
    strategy:
      fail-fast: false
      matrix:
        include:
        - std: 20
          cxx: 14
          bits: 64
          vg: 'ON'
          img: 22.04
        - std: 20
          cxx: 14
          bits: 32
          vg: 'ON'
          img: 22.04
        - std: 17
          cxx: 14
          bits: 64
          vg: 'ON'
          img: 22.04
        - std: 17
          cxx: 14
          bits: 32
          vg: 'ON'
          img: 22.04
        - std: 14
          cxx: 14
          bits: 64
          vg: 'ON'
          img: 22.04
        - std: 14
          cxx: 14
          bits: 32
          vg: 'ON'
          img: 22.04
        - std: 11
          cxx: 14
          bits: 64
          vg: 'ON'
          img: 22.04
        - std: 11
          cxx: 14
          bits: 32
          vg: 'ON'
          img: 22.04
    env:
      STD: ${{matrix.std}}
      CXX_: ${{matrix.cxx}}
      BT: ${{matrix.bt}}
      BITLINKS: ${{matrix.bitlinks}}
      VG: ${{matrix.vg}}
      SAN: ${{matrix.san}}
      LINT: ${{matrix.lint}}
      OS: ${{matrix.os}}
    steps:
    - name: checkout (manually)
      run: |
        set -xeo pipefail
        env | sort
        echo GITHUB_SERVER_URL=$GITHUB_SERVER_URL
        echo GITHUB_REPOSITORY=$GITHUB_REPOSITORY
        echo GITHUB_REF=$GITHUB_REF
        echo GITHUB_REF_NAME=$GITHUB_REF_NAME
        echo GITHUB_HEAD_REF=$GITHUB_HEAD_REF
        repo=$GITHUB_SERVER_URL/$GITHUB_REPOSITORY
        # check the branch
        # https://stackoverflow.com/questions/58033366
        branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}
        echo branch=$branch
        # does the branch exist in the repo?
        if [ -z "$(git ls-remote $repo | grep $branch)" ] ; then
            echo "branch $branch does not exist on $repo"
            # refs/pull/485/merge -> pull/485/head
            branch=`echo ${GITHUB_REF#refs/} | sed -e 's:merge:head:g'`
            echo "... falling back to $branch"
            # does the fallback exist?
            if [ -z "(git ls-remote $repo | grep $branch)" ] ; then
                echo "branch $branch does not exist on $repo"
                exit 1
            else
                echo "branch $branch exists on $repo"
                localbranch=$(echo $branch | sed -e 's@[/:]@_@g')
                branch=$branch:$localbranch
                echo "naming locally as $branch"
            fi
        fi
        # finally, create the local repo
        git init -q .
        # needed for running in the docker image.
        # see https://github.com/actions/checkout/issues/1169
        git config --system --add safe.directory '*'
        # finally, do it!
        git remote add origin $repo
        git fetch origin $branch
        git reset --hard FETCH_HEAD
        git submodule update --init --recursive
        # show the log
        git log --graph --date=relative --date-order --color=always \
                --pretty='%C(yellow)%h %C(cyan)%cd %Cblue%aN%C(auto)%d %Creset%s' \
            | head -30 \
            || echo -n
        # show the last commit
        git log --name-status HEAD^..HEAD
    - name: install
      run: c4core-install g++-${{matrix.cxx}}
    - name: '---------------------------------------------------------'
      run: |
        echo "Debug ::: -m${{matrix.bits}}"
    - name: 'configure Debug ::: -m${{matrix.bits}}'
      run: |
        rm -rf build/Debug
        export C4_EXTERN_DIR=`pwd`/build/extern
        cmake -S . -B build/Debug \
          -DCMAKE_CXX_COMPILER=g++-${{matrix.cxx}} \
          -DCMAKE_C_COMPILER=gcc-${{matrix.cxx}} \
          -DCMAKE_BUILD_TYPE=Debug \
          -DCMAKE_CXX_FLAGS_DEBUG="-m${{matrix.bits}}" \
          -DCMAKE_C_FLAGS_DEBUG="-m${{matrix.bits}}" \
          -DC4_CXX_STANDARD=${{matrix.std}} \
          -DRYML_CXX_STANDARD=${{matrix.std}} \
          -DRYML_BUILD_TESTS=ON \
          -DRYML_VALGRIND=${{matrix.vg}} \
          -DRYML_DEV=ON \
          -DRYML_BUILD_BENCHMARKS=OFF \
          -DRYML_DBG=OFF
    - name: 'build Debug ::: -m${{matrix.bits}}'
      run: |
        cmake --build build/Debug --target ryml-test-build --parallel --verbose
    - name: 'run Debug ::: -m${{matrix.bits}}'
      run: |
        source .github/setenv.sh
        export CTEST_PARALLEL_LEVEL=`_c4getnumcores`
        cmake --build build/Debug --target ryml-test-run
    - name: '---------------------------------------------------------'
      run: |
        echo "Release ::: -O1 -DNDEBUG -m${{matrix.bits}}"
    - name: 'configure Release ::: -O1 -DNDEBUG -m${{matrix.bits}}'
      run: |
        rm -rf build/Release
        export C4_EXTERN_DIR=`pwd`/build/extern
        cmake -S . -B build/Release \
          -DCMAKE_CXX_COMPILER=g++-${{matrix.cxx}} \
          -DCMAKE_C_COMPILER=gcc-${{matrix.cxx}} \
          -DCMAKE_BUILD_TYPE=Release \
          -DCMAKE_CXX_FLAGS_RELEASE="-O1 -DNDEBUG -m${{matrix.bits}}" \
          -DCMAKE_C_FLAGS_RELEASE="-O1 -DNDEBUG -m${{matrix.bits}}" \
          -DC4_CXX_STANDARD=${{matrix.std}} \
          -DRYML_CXX_STANDARD=${{matrix.std}} \
          -DRYML_BUILD_TESTS=ON \
          -DRYML_VALGRIND=${{matrix.vg}} \
          -DRYML_DEV=ON \
          -DRYML_BUILD_BENCHMARKS=OFF \
          -DRYML_DBG=OFF
    - name: 'build Release ::: -O1 -DNDEBUG -m${{matrix.bits}}'
      run: |
        cmake --build build/Release --target ryml-test-build --parallel --verbose
    - name: 'run Release ::: -O1 -DNDEBUG -m${{matrix.bits}}'
      run: |
        source .github/setenv.sh
        export CTEST_PARALLEL_LEVEL=`_c4getnumcores`
        cmake --build build/Release --target ryml-test-run
    - name: '---------------------------------------------------------'
      run: |
        echo "Release ::: -O2 -DNDEBUG -m${{matrix.bits}}"
    - name: 'configure Release ::: -O2 -DNDEBUG -m${{matrix.bits}}'
      run: |
        rm -rf build/Release
        export C4_EXTERN_DIR=`pwd`/build/extern
        cmake -S . -B build/Release \
          -DCMAKE_CXX_COMPILER=g++-${{matrix.cxx}} \
          -DCMAKE_C_COMPILER=gcc-${{matrix.cxx}} \
          -DCMAKE_BUILD_TYPE=Release \
          -DCMAKE_CXX_FLAGS_RELEASE="-O2 -DNDEBUG -m${{matrix.bits}}" \
          -DCMAKE_C_FLAGS_RELEASE="-O2 -DNDEBUG -m${{matrix.bits}}" \
          -DC4_CXX_STANDARD=${{matrix.std}} \
          -DRYML_CXX_STANDARD=${{matrix.std}} \
          -DRYML_BUILD_TESTS=ON \
          -DRYML_VALGRIND=${{matrix.vg}} \
          -DRYML_DEV=ON \
          -DRYML_BUILD_BENCHMARKS=OFF \
          -DRYML_DBG=OFF
    - name: 'build Release ::: -O2 -DNDEBUG -m${{matrix.bits}}'
      run: |
        cmake --build build/Release --target ryml-test-build --parallel --verbose
    - name: 'run Release ::: -O2 -DNDEBUG -m${{matrix.bits}}'
      run: |
        source .github/setenv.sh
        export CTEST_PARALLEL_LEVEL=`_c4getnumcores`
        cmake --build build/Release --target ryml-test-run
  vg2:
    if: always()
    continue-on-error: false
    name: extended/${{matrix.cxx}}/${{matrix.bits}}bit/c++${{matrix.std}}/vg/O3_Os
    runs-on: ubuntu-24.04
    container: ghcr.io/biojppm/c4core/ubuntu${{matrix.img}}:latest
    needs: canary
    strategy:
      fail-fast: false
      matrix:
        include:
        - std: 20
          cxx: 14
          bits: 64
          vg: 'ON'
          img: 22.04
        - std: 20
          cxx: 14
          bits: 32
          vg: 'ON'
          img: 22.04
        - std: 17
          cxx: 14
          bits: 64
          vg: 'ON'
          img: 22.04
        - std: 17
          cxx: 14
          bits: 32
          vg: 'ON'
          img: 22.04
        - std: 14
          cxx: 14
          bits: 64
          vg: 'ON'
          img: 22.04
        - std: 14
          cxx: 14
          bits: 32
          vg: 'ON'
          img: 22.04
        - std: 11
          cxx: 14
          bits: 64
          vg: 'ON'
          img: 22.04
        - std: 11
          cxx: 14
          bits: 32
          vg: 'ON'
          img: 22.04
    env:
      STD: ${{matrix.std}}
      CXX_: ${{matrix.cxx}}
      BT: ${{matrix.bt}}
      BITLINKS: ${{matrix.bitlinks}}
      VG: ${{matrix.vg}}
      SAN: ${{matrix.san}}
      LINT: ${{matrix.lint}}
      OS: ${{matrix.os}}
    steps:
    - name: checkout (manually)
      run: |
        set -xeo pipefail
        env | sort
        echo GITHUB_SERVER_URL=$GITHUB_SERVER_URL
        echo GITHUB_REPOSITORY=$GITHUB_REPOSITORY
        echo GITHUB_REF=$GITHUB_REF
        echo GITHUB_REF_NAME=$GITHUB_REF_NAME
        echo GITHUB_HEAD_REF=$GITHUB_HEAD_REF
        repo=$GITHUB_SERVER_URL/$GITHUB_REPOSITORY
        # check the branch
        # https://stackoverflow.com/questions/58033366
        branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}
        echo branch=$branch
        # does the branch exist in the repo?
        if [ -z "$(git ls-remote $repo | grep $branch)" ] ; then
            echo "branch $branch does not exist on $repo"
            # refs/pull/485/merge -> pull/485/head
            branch=`echo ${GITHUB_REF#refs/} | sed -e 's:merge:head:g'`
            echo "... falling back to $branch"
            # does the fallback exist?
            if [ -z "(git ls-remote $repo | grep $branch)" ] ; then
                echo "branch $branch does not exist on $repo"
                exit 1
            else
                echo "branch $branch exists on $repo"
                localbranch=$(echo $branch | sed -e 's@[/:]@_@g')
                branch=$branch:$localbranch
                echo "naming locally as $branch"
            fi
        fi
        # finally, create the local repo
        git init -q .
        # needed for running in the docker image.
        # see https://github.com/actions/checkout/issues/1169
        git config --system --add safe.directory '*'
        # finally, do it!
        git remote add origin $repo
        git fetch origin $branch
        git reset --hard FETCH_HEAD
        git submodule update --init --recursive
        # show the log
        git log --graph --date=relative --date-order --color=always \
                --pretty='%C(yellow)%h %C(cyan)%cd %Cblue%aN%C(auto)%d %Creset%s' \
            | head -30 \
            || echo -n
        # show the last commit
        git log --name-status HEAD^..HEAD
    - name: install
      run: c4core-install g++-${{matrix.cxx}}
    - name: '---------------------------------------------------------'
      run: |
        echo "Release ::: -O3 -DNDEBUG -m${{matrix.bits}}"
    - name: 'configure Release ::: -O3 -DNDEBUG -m${{matrix.bits}}'
      run: |
        rm -rf build/Release
        export C4_EXTERN_DIR=`pwd`/build/extern
        cmake -S . -B build/Release \
          -DCMAKE_CXX_COMPILER=g++-${{matrix.cxx}} \
          -DCMAKE_C_COMPILER=gcc-${{matrix.cxx}} \
          -DCMAKE_BUILD_TYPE=Release \
          -DCMAKE_CXX_FLAGS_RELEASE="-O3 -DNDEBUG -m${{matrix.bits}}" \
          -DCMAKE_C_FLAGS_RELEASE="-O3 -DNDEBUG -m${{matrix.bits}}" \
          -DC4_CXX_STANDARD=${{matrix.std}} \
          -DRYML_CXX_STANDARD=${{matrix.std}} \
          -DRYML_BUILD_TESTS=ON \
          -DRYML_VALGRIND=${{matrix.vg}} \
          -DRYML_DEV=ON \
          -DRYML_BUILD_BENCHMARKS=OFF \
          -DRYML_DBG=OFF
    - name: 'build Release ::: -O3 -DNDEBUG -m${{matrix.bits}}'
      run: |
        cmake --build build/Release --target ryml-test-build --parallel --verbose
    - name: 'run Release ::: -O3 -DNDEBUG -m${{matrix.bits}}'
      run: |
        source .github/setenv.sh
        export CTEST_PARALLEL_LEVEL=`_c4getnumcores`
        cmake --build build/Release --target ryml-test-run
    - name: '---------------------------------------------------------'
      run: |
        echo "Release ::: -Os -DNDEBUG -m${{matrix.bits}}"
    - name: 'configure Release ::: -Os -DNDEBUG -m${{matrix.bits}}'
      run: |
        rm -rf build/Release
        export C4_EXTERN_DIR=`pwd`/build/extern
        cmake -S . -B build/Release \
          -DCMAKE_CXX_COMPILER=g++-${{matrix.cxx}} \
          -DCMAKE_C_COMPILER=gcc-${{matrix.cxx}} \
          -DCMAKE_BUILD_TYPE=Release \
          -DCMAKE_CXX_FLAGS_RELEASE="-Os -DNDEBUG -m${{matrix.bits}}" \
          -DCMAKE_C_FLAGS_RELEASE="-Os -DNDEBUG -m${{matrix.bits}}" \
          -DC4_CXX_STANDARD=${{matrix.std}} \
          -DRYML_CXX_STANDARD=${{matrix.std}} \
          -DRYML_BUILD_TESTS=ON \
          -DRYML_VALGRIND=${{matrix.vg}} \
          -DRYML_DEV=ON \
          -DRYML_BUILD_BENCHMARKS=OFF \
          -DRYML_DBG=OFF
    - name: 'build Release ::: -Os -DNDEBUG -m${{matrix.bits}}'
      run: |
        cmake --build build/Release --target ryml-test-build --parallel --verbose
    - name: 'run Release ::: -Os -DNDEBUG -m${{matrix.bits}}'
      run: |
        source .github/setenv.sh
        export CTEST_PARALLEL_LEVEL=`_c4getnumcores`
        cmake --build build/Release --target ryml-test-run
  extended:
    if: always()
    continue-on-error: false
    name: extended/${{matrix.cxx}}/${{matrix.bits}}bit/c++${{matrix.std}}
    runs-on: ubuntu-24.04
    container: ghcr.io/biojppm/c4core/ubuntu${{matrix.img}}:latest
    needs: canary
    strategy:
      fail-fast: false
      matrix:
        include:
        - std: 11
          cxx: 13
          bits: 64
          vg: 'OFF'
          img: 22.04
        - std: 11
          cxx: 13
          bits: 32
          vg: 'OFF'
          img: 22.04
        - std: 11
          cxx: 12
          bits: 64
          vg: 'OFF'
          img: 22.04
        - std: 11
          cxx: 12
          bits: 32
          vg: 'OFF'
          img: 22.04
        - std: 11
          cxx: 11
          bits: 64
          vg: 'OFF'
          img: 22.04
        - std: 11
          cxx: 11
          bits: 32
          vg: 'OFF'
          img: 22.04
        - std: 11
          cxx: 10
          bits: 64
          vg: 'OFF'
          img: 22.04
        - std: 11
          cxx: 10
          bits: 32
          vg: 'OFF'
          img: 22.04
        - std: 11
          cxx: 9
          bits: 64
          vg: 'OFF'
          img: 22.04
        - std: 11
          cxx: 9
          bits: 32
          vg: 'OFF'
          img: 22.04
        - std: 11
          cxx: 8
          bits: 64
          vg: 'OFF'
          img: 18.04
        - std: 11
          cxx: 8
          bits: 32
          vg: 'OFF'
          img: 18.04
        - std: 11
          cxx: 7
          bits: 64
          vg: 'OFF'
          img: 18.04
        - std: 11
          cxx: 7
          bits: 32
          vg: 'OFF'
          img: 18.04
        - std: 11
          cxx: 6
          bits: 64
          vg: 'OFF'
          img: 18.04
        - std: 11
          cxx: 6
          bits: 32
          vg: 'OFF'
          img: 18.04
        - std: 11
          cxx: 5
          bits: 64
          vg: 'OFF'
          img: 18.04
        - std: 11
          cxx: 5
          bits: 32
          vg: 'OFF'
          img: 18.04
        - std: 11
          cxx: 4.9
          bits: 64
          vg: 'OFF'
          img: 18.04
        - std: 11
          cxx: 4.9
          bits: 32
          vg: 'OFF'
          img: 18.04
        - std: 11
          cxx: 4.8
          bits: 64
          vg: 'OFF'
          img: 18.04
        - std: 11
          cxx: 4.8
          bits: 32
          vg: 'OFF'
          img: 18.04
    env:
      STD: ${{matrix.std}}
      CXX_: ${{matrix.cxx}}
      BT: ${{matrix.bt}}
      BITLINKS: ${{matrix.bitlinks}}
      VG: ${{matrix.vg}}
      SAN: ${{matrix.san}}
      LINT: ${{matrix.lint}}
      OS: ${{matrix.os}}
    steps:
    - name: checkout (manually)
      run: |
        set -xeo pipefail
        env | sort
        echo GITHUB_SERVER_URL=$GITHUB_SERVER_URL
        echo GITHUB_REPOSITORY=$GITHUB_REPOSITORY
        echo GITHUB_REF=$GITHUB_REF
        echo GITHUB_REF_NAME=$GITHUB_REF_NAME
        echo GITHUB_HEAD_REF=$GITHUB_HEAD_REF
        repo=$GITHUB_SERVER_URL/$GITHUB_REPOSITORY
        # check the branch
        # https://stackoverflow.com/questions/58033366
        branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}
        echo branch=$branch
        # does the branch exist in the repo?
        if [ -z "$(git ls-remote $repo | grep $branch)" ] ; then
            echo "branch $branch does not exist on $repo"
            # refs/pull/485/merge -> pull/485/head
            branch=`echo ${GITHUB_REF#refs/} | sed -e 's:merge:head:g'`
            echo "... falling back to $branch"
            # does the fallback exist?
            if [ -z "(git ls-remote $repo | grep $branch)" ] ; then
                echo "branch $branch does not exist on $repo"
                exit 1
            else
                echo "branch $branch exists on $repo"
                localbranch=$(echo $branch | sed -e 's@[/:]@_@g')
                branch=$branch:$localbranch
                echo "naming locally as $branch"
            fi
        fi
        # finally, create the local repo
        git init -q .
        # needed for running in the docker image.
        # see https://github.com/actions/checkout/issues/1169
        git config --system --add safe.directory '*'
        # finally, do it!
        git remote add origin $repo
        git fetch origin $branch
        git reset --hard FETCH_HEAD
        git submodule update --init --recursive
        # show the log
        git log --graph --date=relative --date-order --color=always \
                --pretty='%C(yellow)%h %C(cyan)%cd %Cblue%aN%C(auto)%d %Creset%s' \
            | head -30 \
            || echo -n
        # show the last commit
        git log --name-status HEAD^..HEAD
    - name: install
      run: c4core-install g++-${{matrix.cxx}}
    - name: '---------------------------------------------------------'
      run: |
        echo "Debug ::: -m${{matrix.bits}}"
    - name: 'configure Debug ::: -m${{matrix.bits}}'
      run: |
        rm -rf build/Debug
        export C4_EXTERN_DIR=`pwd`/build/extern
        cmake -S . -B build/Debug \
          -DCMAKE_CXX_COMPILER=g++-${{matrix.cxx}} \
          -DCMAKE_C_COMPILER=gcc-${{matrix.cxx}} \
          -DCMAKE_BUILD_TYPE=Debug \
          -DCMAKE_CXX_FLAGS_DEBUG="-m${{matrix.bits}}" \
          -DCMAKE_C_FLAGS_DEBUG="-m${{matrix.bits}}" \
          -DC4_CXX_STANDARD=${{matrix.std}} \
          -DRYML_CXX_STANDARD=${{matrix.std}} \
          -DRYML_BUILD_TESTS=ON \
          -DRYML_VALGRIND=${{matrix.vg}} \
          -DRYML_DEV=ON \
          -DRYML_BUILD_BENCHMARKS=OFF \
          -DRYML_DBG=OFF
    - name: 'build Debug ::: -m${{matrix.bits}}'
      run: |
        cmake --build build/Debug --target ryml-test-build --parallel --verbose
    - name: 'run Debug ::: -m${{matrix.bits}}'
      run: |
        source .github/setenv.sh
        export CTEST_PARALLEL_LEVEL=`_c4getnumcores`
        cmake --build build/Debug --target ryml-test-run
    - name: '---------------------------------------------------------'
      run: |
        echo "Release ::: -O1 -DNDEBUG -m${{matrix.bits}}"
    - name: 'configure Release ::: -O1 -DNDEBUG -m${{matrix.bits}}'
      run: |
        rm -rf build/Release
        export C4_EXTERN_DIR=`pwd`/build/extern
        cmake -S . -B build/Release \
          -DCMAKE_CXX_COMPILER=g++-${{matrix.cxx}} \
          -DCMAKE_C_COMPILER=gcc-${{matrix.cxx}} \
          -DCMAKE_BUILD_TYPE=Release \
          -DCMAKE_CXX_FLAGS_RELEASE="-O1 -DNDEBUG -m${{matrix.bits}}" \
          -DCMAKE_C_FLAGS_RELEASE="-O1 -DNDEBUG -m${{matrix.bits}}" \
          -DC4_CXX_STANDARD=${{matrix.std}} \
          -DRYML_CXX_STANDARD=${{matrix.std}} \
          -DRYML_BUILD_TESTS=ON \
          -DRYML_VALGRIND=${{matrix.vg}} \
          -DRYML_DEV=ON \
          -DRYML_BUILD_BENCHMARKS=OFF \
          -DRYML_DBG=OFF
    - name: 'build Release ::: -O1 -DNDEBUG -m${{matrix.bits}}'
      run: |
        cmake --build build/Release --target ryml-test-build --parallel --verbose
    - name: 'run Release ::: -O1 -DNDEBUG -m${{matrix.bits}}'
      run: |
        source .github/setenv.sh
        export CTEST_PARALLEL_LEVEL=`_c4getnumcores`
        cmake --build build/Release --target ryml-test-run
    - name: '---------------------------------------------------------'
      run: |
        echo "Release ::: -O2 -DNDEBUG -m${{matrix.bits}}"
    - name: 'configure Release ::: -O2 -DNDEBUG -m${{matrix.bits}}'
      run: |
        rm -rf build/Release
        export C4_EXTERN_DIR=`pwd`/build/extern
        cmake -S . -B build/Release \
          -DCMAKE_CXX_COMPILER=g++-${{matrix.cxx}} \
          -DCMAKE_C_COMPILER=gcc-${{matrix.cxx}} \
          -DCMAKE_BUILD_TYPE=Release \
          -DCMAKE_CXX_FLAGS_RELEASE="-O2 -DNDEBUG -m${{matrix.bits}}" \
          -DCMAKE_C_FLAGS_RELEASE="-O2 -DNDEBUG -m${{matrix.bits}}" \
          -DC4_CXX_STANDARD=${{matrix.std}} \
          -DRYML_CXX_STANDARD=${{matrix.std}} \
          -DRYML_BUILD_TESTS=ON \
          -DRYML_VALGRIND=${{matrix.vg}} \
          -DRYML_DEV=ON \
          -DRYML_BUILD_BENCHMARKS=OFF \
          -DRYML_DBG=OFF
    - name: 'build Release ::: -O2 -DNDEBUG -m${{matrix.bits}}'
      run: |
        cmake --build build/Release --target ryml-test-build --parallel --verbose
    - name: 'run Release ::: -O2 -DNDEBUG -m${{matrix.bits}}'
      run: |
        source .github/setenv.sh
        export CTEST_PARALLEL_LEVEL=`_c4getnumcores`
        cmake --build build/Release --target ryml-test-run
    - name: '---------------------------------------------------------'
      run: |
        echo "Release ::: -O3 -DNDEBUG -m${{matrix.bits}}"
    - name: 'configure Release ::: -O3 -DNDEBUG -m${{matrix.bits}}'
      run: |
        rm -rf build/Release
        export C4_EXTERN_DIR=`pwd`/build/extern
        cmake -S . -B build/Release \
          -DCMAKE_CXX_COMPILER=g++-${{matrix.cxx}} \
          -DCMAKE_C_COMPILER=gcc-${{matrix.cxx}} \
          -DCMAKE_BUILD_TYPE=Release \
          -DCMAKE_CXX_FLAGS_RELEASE="-O3 -DNDEBUG -m${{matrix.bits}}" \
          -DCMAKE_C_FLAGS_RELEASE="-O3 -DNDEBUG -m${{matrix.bits}}" \
          -DC4_CXX_STANDARD=${{matrix.std}} \
          -DRYML_CXX_STANDARD=${{matrix.std}} \
          -DRYML_BUILD_TESTS=ON \
          -DRYML_VALGRIND=${{matrix.vg}} \
          -DRYML_DEV=ON \
          -DRYML_BUILD_BENCHMARKS=OFF \
          -DRYML_DBG=OFF
    - name: 'build Release ::: -O3 -DNDEBUG -m${{matrix.bits}}'
      run: |
        cmake --build build/Release --target ryml-test-build --parallel --verbose
    - name: 'run Release ::: -O3 -DNDEBUG -m${{matrix.bits}}'
      run: |
        source .github/setenv.sh
        export CTEST_PARALLEL_LEVEL=`_c4getnumcores`
        cmake --build build/Release --target ryml-test-run
    - name: '---------------------------------------------------------'
      run: |
        echo "Release ::: -Os -DNDEBUG -m${{matrix.bits}}"
    - name: 'configure Release ::: -Os -DNDEBUG -m${{matrix.bits}}'
      run: |
        rm -rf build/Release
        export C4_EXTERN_DIR=`pwd`/build/extern
        cmake -S . -B build/Release \
          -DCMAKE_CXX_COMPILER=g++-${{matrix.cxx}} \
          -DCMAKE_C_COMPILER=gcc-${{matrix.cxx}} \
          -DCMAKE_BUILD_TYPE=Release \
          -DCMAKE_CXX_FLAGS_RELEASE="-Os -DNDEBUG -m${{matrix.bits}}" \
          -DCMAKE_C_FLAGS_RELEASE="-Os -DNDEBUG -m${{matrix.bits}}" \
          -DC4_CXX_STANDARD=${{matrix.std}} \
          -DRYML_CXX_STANDARD=${{matrix.std}} \
          -DRYML_BUILD_TESTS=ON \
          -DRYML_VALGRIND=${{matrix.vg}} \
          -DRYML_DEV=ON \
          -DRYML_BUILD_BENCHMARKS=OFF \
          -DRYML_DBG=OFF
    - name: 'build Release ::: -Os -DNDEBUG -m${{matrix.bits}}'
      run: |
        cmake --build build/Release --target ryml-test-build --parallel --verbose
    - name: 'run Release ::: -Os -DNDEBUG -m${{matrix.bits}}'
      run: |
        source .github/setenv.sh
        export CTEST_PARALLEL_LEVEL=`_c4getnumcores`
        cmake --build build/Release --target ryml-test-run
  gccsan:
    if: always()
    continue-on-error: false
    name: gccsan/${{matrix.bt}}/${{matrix.cxx}}/c++${{matrix.std}}
    runs-on: ubuntu-24.04
    container: ghcr.io/biojppm/c4core/ubuntu22.04:latest
    needs: canary
    strategy:
      fail-fast: false
      matrix:
        include:
        - std: 11
          cxx: g++-14
          bt: asan
          bitlinks: static64
        - std: 14
          cxx: g++-14
          bt: asan
          bitlinks: static64
        - std: 17
          cxx: g++-14
          bt: asan
          bitlinks: static64
        - std: 20
          cxx: g++-14
          bt: asan
          bitlinks: static64
        - std: 11
          cxx: g++-14
          bt: lsan
          bitlinks: static64
        - std: 14
          cxx: g++-14
          bt: lsan
          bitlinks: static64
        - std: 17
          cxx: g++-14
          bt: lsan
          bitlinks: static64
        - std: 20
          cxx: g++-14
          bt: lsan
          bitlinks: static64
        - std: 11
          cxx: g++-14
          bt: tsan
          bitlinks: static64
        - std: 14
          cxx: g++-14
          bt: tsan
          bitlinks: static64
        - std: 17
          cxx: g++-14
          bt: tsan
          bitlinks: static64
        - std: 20
          cxx: g++-14
          bt: tsan
          bitlinks: static64
        - std: 11
          cxx: g++-14
          bt: ubsan
          bitlinks: static64
        - std: 14
          cxx: g++-14
          bt: ubsan
          bitlinks: static64
        - std: 17
          cxx: g++-14
          bt: ubsan
          bitlinks: static64
        - std: 20
          cxx: g++-14
          bt: ubsan
          bitlinks: static64
    env:
      STD: ${{matrix.std}}
      CXX_: ${{matrix.cxx}}
      BT: ${{matrix.bt}}
      BITLINKS: ${{matrix.bitlinks}}
      VG: ${{matrix.vg}}
      SAN: ${{matrix.san}}
      LINT: ${{matrix.lint}}
      OS: ${{matrix.os}}
    steps:
    - name: checkout (action + docker)
      uses: actions/checkout@v4
      with:
        submodules: recursive
        fetch-depth: 0
    - run: git config --system --add safe.directory '*'
    - run: c4core-install ${{matrix.cxx}}
    - name: show info
      run: source .github/setenv.sh && c4_show_info
    - name: shared64-configure---------------------------------------------------
      run: source .github/setenv.sh && c4_cfg_test shared64
    - name: shared64-build
      run: source .github/setenv.sh && c4_build_test shared64
    - name: shared64-run
      run: source .github/setenv.sh && c4_run_test shared64
    - name: shared64-pack
      run: source .github/setenv.sh && c4_package shared64
    - name: static64-configure---------------------------------------------------
      run: source .github/setenv.sh && c4_cfg_test static64
    - name: static64-build
      run: source .github/setenv.sh && c4_build_test static64
    - name: static64-run
      run: source .github/setenv.sh && c4_run_test static64
    - name: static64-pack
      run: source .github/setenv.sh && c4_package static64
    - name: static32-configure---------------------------------------------------
      run: source .github/setenv.sh && c4_cfg_test static32
    - name: static32-build
      run: source .github/setenv.sh && c4_build_test static32
    - name: static32-run
      run: source .github/setenv.sh && c4_run_test static32
    - name: static32-pack
      run: source .github/setenv.sh && c4_package static32
    - name: shared32-configure---------------------------------------------------
      run: source .github/setenv.sh && c4_cfg_test shared32
    - name: shared32-build
      run: source .github/setenv.sh && c4_build_test shared32
    - name: shared32-run
      run: source .github/setenv.sh && c4_run_test shared32
    - name: shared32-pack
      run: source .github/setenv.sh && c4_package shared32
  arm:
    if: always()
    continue-on-error: false
    runs-on: ubuntu-24.04
    container: ghcr.io/biojppm/c4core/ubuntu18.04:latest
    name: arm/c++${{matrix.std}}/${{matrix.bt}}
    needs: canary
    strategy:
      fail-fast: false
      matrix:
        include:
        - std: 11
          bt: Debug
          cxx: arm-linux-gnueabihf-gcc
          toolchain: ext/c4core/cmake/Toolchain-Arm-ubuntu.cmake
        - std: 11
          bt: Release
          cxx: arm-linux-gnueabihf-gcc
          toolchain: ext/c4core/cmake/Toolchain-Arm-ubuntu.cmake
        - std: 14
          bt: Debug
          cxx: arm-linux-gnueabihf-gcc
          toolchain: ext/c4core/cmake/Toolchain-Arm-ubuntu.cmake
        - std: 14
          bt: Release
          cxx: arm-linux-gnueabihf-gcc
          toolchain: ext/c4core/cmake/Toolchain-Arm-ubuntu.cmake
        - std: 17
          bt: Debug
          cxx: arm-linux-gnueabihf-gcc
          toolchain: ext/c4core/cmake/Toolchain-Arm-ubuntu.cmake
        - std: 17
          bt: Release
          cxx: arm-linux-gnueabihf-gcc
          toolchain: ext/c4core/cmake/Toolchain-Arm-ubuntu.cmake
    env:
      TOOLCHAIN: ${{matrix.toolchain}}
      STD: ${{matrix.std}}
      CXX_: ${{matrix.cxx}}
      BT: ${{matrix.bt}}
      BITLINKS: ${{matrix.bitlinks}}
      VG: ${{matrix.vg}}
      SAN: ${{matrix.san}}
      LINT: ${{matrix.lint}}
      OS: ${{matrix.os}}
    steps:
    - name: checkout (manually)
      run: |
        set -xeo pipefail
        env | sort
        echo GITHUB_SERVER_URL=$GITHUB_SERVER_URL
        echo GITHUB_REPOSITORY=$GITHUB_REPOSITORY
        echo GITHUB_REF=$GITHUB_REF
        echo GITHUB_REF_NAME=$GITHUB_REF_NAME
        echo GITHUB_HEAD_REF=$GITHUB_HEAD_REF
        repo=$GITHUB_SERVER_URL/$GITHUB_REPOSITORY
        # check the branch
        # https://stackoverflow.com/questions/58033366
        branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}
        echo branch=$branch
        # does the branch exist in the repo?
        if [ -z "$(git ls-remote $repo | grep $branch)" ] ; then
            echo "branch $branch does not exist on $repo"
            # refs/pull/485/merge -> pull/485/head
            branch=`echo ${GITHUB_REF#refs/} | sed -e 's:merge:head:g'`
            echo "... falling back to $branch"
            # does the fallback exist?
            if [ -z "(git ls-remote $repo | grep $branch)" ] ; then
                echo "branch $branch does not exist on $repo"
                exit 1
            else
                echo "branch $branch exists on $repo"
                localbranch=$(echo $branch | sed -e 's@[/:]@_@g')
                branch=$branch:$localbranch
                echo "naming locally as $branch"
            fi
        fi
        # finally, create the local repo
        git init -q .
        # needed for running in the docker image.
        # see https://github.com/actions/checkout/issues/1169
        git config --system --add safe.directory '*'
        # finally, do it!
        git remote add origin $repo
        git fetch origin $branch
        git reset --hard FETCH_HEAD
        git submodule update --init --recursive
        # show the log
        git log --graph --date=relative --date-order --color=always \
                --pretty='%C(yellow)%h %C(cyan)%cd %Cblue%aN%C(auto)%d %Creset%s' \
            | head -30 \
            || echo -n
        # show the last commit
        git log --name-status HEAD^..HEAD
    - name: install gcc-arm-linux-gnueabihf
      run: c4core-install arm-linux-gnueabihf; c4core-install qemu
    - name: show info
      run: source .github/setenv.sh && c4_show_info
    - name: configure---------------------------------------------------
      run: source .github/setenv.sh && c4_cfg_test arm
    - name: build
      run: source .github/setenv.sh && c4_build_test arm
    - name: run
      run: source .github/setenv.sh && c4_run_test arm
    - name: pack
      run: source .github/setenv.sh && c4_package arm
