diff --git a/.github/.gitignore b/.github/.gitignore new file mode 100644 index 0000000000..4ff1f5df5b --- /dev/null +++ b/.github/.gitignore @@ -0,0 +1 @@ +toolchains/ diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0cca6873ef..643ec3657b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -51,11 +51,17 @@ jobs: if [ "${MATRIX}" ]; then echo "matrix=${MATRIX}" >> $GITHUB_OUTPUT else + echo "matrix=${MATRIX}" exit 1 fi + - uses: actions/upload-artifact@v4 + with: + name: toolchains + path: .github/toolchains + build: - name: ${{ matrix.example }} ${{ matrix.toolchain }} ${{ matrix.os }} + name: ${{ matrix.project }} ${{ matrix.toolchain }} ${{ matrix.os }} needs: set_matrix runs-on: ${{ matrix.os }} strategy: @@ -63,8 +69,9 @@ jobs: matrix: ${{ fromJson(needs.set_matrix.outputs.matrix) }} env: - TOOLCHAIN: ${{ matrix.toolchain }} - PROJECT_DIR: examples/${{ matrix.example }} + TOOLCHAIN: '${{ matrix.toolchain }}' + PROJECT_DIR: ${{ matrix.example }} + SCRIPT: ${{ matrix.script }} GITHUB_USER_PASSWORD: ${{ secrets.CPP_PM_BOT_TOKEN }} steps: @@ -74,6 +81,9 @@ jobs: with: submodules: true + - name: Download all workflow run artifacts + uses: actions/download-artifact@v4 + - name: Set up Python uses: actions/setup-python@v5.1.0 with: @@ -87,26 +97,31 @@ jobs: if: runner.os == 'Windows' run: echo "HUNTER_PYTHON_LOCATION=$env:pythonLocation" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8 - - name: Build hunter_tests Unix - if: runner.os != 'Windows' && matrix.toolchain == 'hunter_tests' - env: - PROJECT_DIR: ${{ matrix.example }} - run: | - bash ${{ matrix.script }} - - name: Build on Unix - if: runner.os != 'Windows' && matrix.toolchain != 'hunter_tests' + if: runner.os != 'Windows' env: BRANCH_NAME: ${{ github.ref_name }} run: | - bash ${{ matrix.script }} + python .github/workflows/ci/build.py - name: Build on Windows if: runner.os == 'Windows' && matrix.toolchain != 'hunter_tests' env: BRANCH_NAME: ${{ github.ref_name }} + VCVARSALL: ${{ matrix.VCVARSALL }} + VCVARSALL_ARGS: ${{ matrix.VCVARSALL_ARGS }} run: | - ${{ matrix.script }} + if ("$env:VCVARSALL") { + Write-Host "call VCVARSALL using command '${env:VCVARSALL}' and args '${env:VCVARSALL_ARGS}'" + cmd /c 'call "%VCVARSALL%" %VCVARSALL_ARGS% && set' | foreach { + if ($_ -match "=") { + #"processing line: '$_'" + $v = $_.split("="); + set-item -force -path "ENV:\$($v[0])" -value "$($v[1])"; + } + } + } + python .github/workflows/ci/build.py set_status: needs: [ set_matrix, build ] diff --git a/.github/workflows/ci/build.cmd b/.github/workflows/ci/build.cmd deleted file mode 100644 index 6d7c6c1071..0000000000 --- a/.github/workflows/ci/build.cmd +++ /dev/null @@ -1,46 +0,0 @@ -:: Set the correct Python PATH -set PATH=%HUNTER_PYTHON_LOCATION%;%PATH% - -:: Install Python package 'requests' -python -m pip install --upgrade pip -python -m pip install requests gitpython - -:: Install latest Polly toolchains and scripts -C:\msys64\usr\bin\wget.exe https://github.com/cpp-pm/polly/archive/master.zip -7z x master.zip -set POLLY_ROOT=%cd%\polly-master - -:: Install dependencies (CMake, Ninja) -python %POLLY_ROOT%\bin\install-ci-dependencies.py - -:: Tune locations -set PATH=%cd%\_ci\cmake\bin;%PATH% -set PATH=%cd%\_ci\ninja;%PATH% - -:: Remove entry with sh.exe from PATH to fix error with MinGW toolchain -:: (For MinGW make to work correctly sh.exe must NOT be in your path) -:: * http://stackoverflow.com/a/3870338/2288008 -set PATH=%PATH:C:\Program Files\Git\bin;=% -set PATH=%PATH:C:\Program Files\Git\usr\bin;=% - -:: Save git.exe in HUNTER_GIT_EXECUTABLE for upload -:: * https://docs.hunter.sh/en/latest/reference/user-variables.html#hunter-git-executable -:: Variable will be used in CMake so it's okay to use Unix style '/' -set HUNTER_GIT_EXECUTABLE=C:/Program Files/Git/bin/git.exe - -set MINGW_PATH=C:\mingw64\bin - -:: MSYS2 location -set MSYS_PATH=C:\msys64\usr\bin - -:: Visual Studio 16 2019: Mimic behavior of older versions -set VS160COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\Tools - -:: To fix "path too long" error -if not "%TOOLCHAIN:vs-=%"=="%TOOLCHAIN%" set HUNTER_BINARY_DIR=C:\__BIN - -set "UPLOAD=" -if "%BRANCH_NAME%" == "master" if not "%GITHUB_USER_PASSWORD%" == "" ( - set UPLOAD=--upload -) -python jenkins.py %UPLOAD% diff --git a/.github/workflows/ci/build.py b/.github/workflows/ci/build.py new file mode 100755 index 0000000000..783f3a0980 --- /dev/null +++ b/.github/workflows/ci/build.py @@ -0,0 +1,304 @@ +#!/usr/bin/env python3 + +# Copyright (c) 2014, Ruslan Baratov +# Copyright (c) 2025, NeroBurner +# All rights reserved. + +import argparse +import hashlib +import os +import pathlib +import shutil +import subprocess +import sys +import tarfile +import tempfile +import time + + +def clear_except_download(hunter_root: pathlib.Path): + base_dir = os.path.join(hunter_root, "_Base") + if os.path.exists(base_dir): + print("Clearing directory: {}".format(base_dir)) + hunter_download_dir = os.path.join(base_dir, "Download", "Hunter") + if os.path.exists(hunter_download_dir): + shutil.rmtree(hunter_download_dir) + for filename in os.listdir(base_dir): + if filename != "Download": + to_remove = os.path.join(base_dir, filename) + if os.name == "nt": + # Fix "path too long" error + subprocess.check_call(["cmd", "/c", "rmdir", to_remove, "/S", "/Q"]) + else: + shutil.rmtree(to_remove) + + +def run(): + parser = argparse.ArgumentParser("Testing script") + # disabled zip creation, see below + # parser.add_argument( + # "--nocreate", + # action="store_true", + # help="Do not create Hunter archive (reusing old)", + # ) + parser.add_argument( + "--clear", + action="store_true", + help="Remove old testing directories", + ) + parser.add_argument( + "--clear-except-download", + action="store_true", + help="Remove old testing directories except `Download` directory", + ) + parser.add_argument( + "--disable-builds", + action="store_true", + help="Disable building of package (useful for checking package can be loaded from cache)", + ) + parser.add_argument( + "--cmake-exe", + help="specify cmake executable", + default="cmake", + ) + parser.add_argument( + "--upload", + action="store_true", + help="Upload cache to server and run checks (clean up will be triggered, same as --clear-except-download)", + ) + + parsed_args = parser.parse_args() + + if parsed_args.upload: + password = os.getenv("GITHUB_USER_PASSWORD") + if password is None: + raise RuntimeError( + "Expected environment variable GITHUB_USER_PASSWORD on uploading" + ) + + cdir = pathlib.Path(os.getcwd()) + hunter_root = cdir + + project_dir = os.getenv("PROJECT_DIR") + if not project_dir: + raise RuntimeError("Expected environment variable PROJECT_DIR") + + verbose = False + env_verbose = os.getenv("VERBOSE") + if env_verbose: + if env_verbose == "0": + verbose = False + elif env_verbose == "1": + verbose = True + else: + raise RuntimeError( + 'Environment variable VERBOSE: expected 0 or 1, got "{}"'.format( + env_verbose + ) + ) + + env_branch_name = os.getenv("BRANCH_NAME") + if env_branch_name: + password = os.getenv("GITHUB_USER_PASSWORD") + if env_branch_name in ["master", "main"] and password: + print( + f"branch name is '{env_branch_name}' and GITHUB_USER_PASSWORD is set, uploading" + ) + parsed_args.upload = True + + toolchain = os.getenv("TOOLCHAIN") + if not toolchain: + raise RuntimeError("Environment variable TOOLCHAIN is empty") + if toolchain == "hunter_tests": + # no toolchain for hunter_tests, but verbose config + toolchain = None + verbose = True + else: + # relative of full path to toolchain file? Just use it + if pathlib.Path(toolchain).exists(): + toolchain = pathlib.Path(toolchain).absolute() + else: + # search for toolchain if different dirs + found = False + for toolchain_dir in [ + cdir / ".github" / "toolchains", # directory created by set_matrix.py + cdir / "toolchains", # .github downloads artifact directly to root + ]: + if (toolchain_dir / f"{toolchain}.cmake").exists(): + toolchain = toolchain_dir / f"{toolchain}.cmake" + found = True + if not found: + raise RuntimeError( + f"Environment variable TOOLCHAIN specified but specified TOOLCHAIN file not found: {toolchain}", + ) + if toolchain is not None and not toolchain.exists(): + raise RuntimeError( + f"Environment variable TOOLCHAIN specified but specified file not found: {toolchain}", + ) + + env_script = os.getenv("SCRIPT") + if env_script: + print(f"running specified SCRIPT before build: {env_script}") + subprocess.check_call(env_script) + + project_dir = cdir / project_dir + + testing_dir = cdir / "_testing" + if testing_dir.exists() and parsed_args.clear: + print(f"REMOVING: {testing_dir}") + shutil.rmtree(testing_dir) + testing_dir.mkdir(exist_ok=True) + + if os.name == "nt": + # path too long workaround + hunter_junctions = os.getenv("HUNTER_JUNCTIONS") + if hunter_junctions: + temp_dir = tempfile.mkdtemp(dir=hunter_junctions) + shutil.rmtree(temp_dir) + subprocess.check_output( + "cmd /c mklink /J {} {}".format(temp_dir, testing_dir) + ) + testing_dir = pathlib.Path(temp_dir) + + # disable zip creation as it somehow breaks Windows 10 Store builds + # examples/Eigen breaks with the message "Can't link to standard math library" + # no clue why, but PRs are welcome if the zip creation is needed for something + # hunter_url = testing_dir / "hunter.tar.gz" + # if parsed_args.nocreate: + # if not os.path.exists(hunter_url): + # raise RuntimeError("Option `--nocreate` but no archive") + # else: + # arch = tarfile.open(hunter_url, "w:gz") + # arch.add("cmake") + # arch.add("scripts") + # arch.close() + + # hunter_sha1 = hashlib.sha1(open(hunter_url, "rb").read()).hexdigest() + + # hunter_root = testing_dir / "Hunter" + + if parsed_args.clear_except_download: + clear_except_download(hunter_root) + + print("Testing in: {}".format(testing_dir)) + build_dir = testing_dir / "build" + if build_dir.exists(): + shutil.rmtree(build_dir) + + args = [ + parsed_args.cmake_exe, + "-S", + project_dir.as_posix(), + "-B", + build_dir.as_posix(), + "-DHUNTER_SUPPRESS_LIST_OF_FILES=ON", + "-DHUNTER_CONFIGURATION_TYPES=Release", + "-DCMAKE_BUILD_TYPE=Release", + ] + if toolchain: + args += [f"-DCMAKE_TOOLCHAIN_FILE={toolchain.as_posix()}"] + # disabled zip creation, see above + # args += [ + # f"-DHUNTER_ROOT={hunter_root.as_posix()}", + # f"-DTESTING_URL={hunter_url.as_posix()}", + # f"-DTESTING_SHA1={hunter_sha1}", + # ] + + # disabled zip creation, see above + # if not parsed_args.nocreate: + # args += ["-DHUNTER_RUN_INSTALL=ON"] + + if parsed_args.disable_builds: + args += ["-DHUNTER_DISABLE_BUILDS=ON"] + + if parsed_args.upload: + passwords = cdir / "maintenance" / "upload-password-template.cmake" + args += ["-DHUNTER_RUN_UPLOAD=ON"] + args += [f"-DHUNTER_PASSWORDS_PATH={passwords}"] + + if verbose: + args += ["-DCMAKE_VERBOSE_MAKEFILE=ON"] + args += ["-DHUNTER_STATUS_DEBUG=ON"] + + print("Execute command: [") + for i in args: + if " " in i: + print(f' "{i}"') + else: + print(f" {i}") + print("]") + + subprocess.check_call(args) + args_build = [ + parsed_args.cmake_exe, + "--build", + build_dir.as_posix(), + "--config", + "Release", + ] + print("Execute build command: [") + for i in args_build: + if " " in i: + print(f' "{i}"') + else: + print(f" {i}") + print("]") + subprocess.check_call(args_build) + + cache_retry_count = 0 + max_cache_retry_count = 5 + + if parsed_args.upload: + seconds = 60 + print("Wait for GitHub changes became visible ({} seconds)...".format(seconds)) + time.sleep(seconds) + + print("Run sanity build") + + clear_except_download(hunter_root) + + # Sanity check - run build again with disabled building from sources + args = [ + parsed_args.cmake_exe, + "-S", + project_dir.as_posix(), + "-B", + build_dir.as_posix(), + "-DHUNTER_DISABLE_BUILDS=ON", + "-DHUNTER_USE_CACHE_SERVERS=ONLY", + "-DHUNTER_CONFIGURATION_TYPES=Release", + "-DCMAKE_BUILD_TYPE=Release", + "-DHUNTER_SUPPRESS_LIST_OF_FILES=ON", + ] + if toolchain: + args += [f"-DCMAKE_TOOLCHAIN_FILE={toolchain.as_posix()}"] + + # disabled zip creation, see above + # args += [ + # f"-DHUNTER_ROOT={hunter_root.as_posix()}", + # f"-DTESTING_URL={hunter_url.as_posix()}", + # f"-DTESTING_SHA1={hunter_sha1}", + # ] + if verbose: + args += ["-DCMAKE_VERBOSE_MAKEFILE=ON"] + args += ["-DHUNTER_STATUS_DEBUG=ON"] + + print("Execute command: [") + for i in args: + if " " in i: + print(f' "{i}"') + else: + print(f" {i}") + print("]") + + while subprocess.call(args) and cache_retry_count < max_cache_retry_count: + print(f"Cache-only sanity check attempt {cache_retry_count} failed...") + time.sleep(seconds) + cache_retry_count += 1 + + if cache_retry_count >= max_cache_retry_count: + sys.exit(1) + + +if __name__ == "__main__": + run() diff --git a/.github/workflows/ci/build.sh b/.github/workflows/ci/build.sh deleted file mode 100644 index de25d41173..0000000000 --- a/.github/workflows/ci/build.sh +++ /dev/null @@ -1,37 +0,0 @@ -# Set the correct Python PATH -export PATH="${HUNTER_PYTHON_LOCATION}:${PATH}" - -# Install Python package 'requests' -python -m pip install --upgrade pip -python -m pip install requests gitpython - -# Install latest Polly toolchains and scripts -wget https://github.com/cpp-pm/polly/archive/master.zip -unzip master.zip -POLLY_ROOT="`pwd`/polly-master" -export PATH="${POLLY_ROOT}/bin:${PATH}" - -# Install dependencies (CMake, Android NDK) -install-ci-dependencies.py --prune-archives - -# Tune locations -export PATH="`pwd`/_ci/cmake/bin:${PATH}" - -# Installed if toolchain is Android (otherwise directory doesn't exist) -export ANDROID_NDK_r10e="`pwd`/_ci/android-ndk-r10e" -export ANDROID_NDK_r11c="`pwd`/_ci/android-ndk-r11c" -export ANDROID_NDK_r15c="`pwd`/_ci/android-ndk-r15c" -export ANDROID_NDK_r16b="`pwd`/_ci/android-ndk-r16b" -export ANDROID_NDK_r17="`pwd`/_ci/android-ndk-r17" - -# Use Xcode 13.4 for macOS 12.x and iOS 15.x toolchains -if [[ "$TOOLCHAIN" =~ "osx-12" || "$TOOLCHAIN" =~ "ios-nocodesign-15" ]]; then - export DEVELOPER_DIR="/Applications/Xcode_13.4.app/Contents/Developer" -fi - -# Run build script -if [[ "$BRANCH_NAME" == "master" && ! -z "$GITHUB_USER_PASSWORD" ]]; then - python jenkins.py --upload -else - python jenkins.py -fi diff --git a/.github/workflows/ci/build_hunter_tests.sh b/.github/workflows/ci/build_hunter_tests.sh deleted file mode 100644 index b3168e393e..0000000000 --- a/.github/workflows/ci/build_hunter_tests.sh +++ /dev/null @@ -1,12 +0,0 @@ -# Set the correct Python PATH -export PATH="${HUNTER_PYTHON_LOCATION}:${PATH}" - -# Tune locations -export PATH="${PWD}/_ci/cmake/bin:${PATH}" - -# we want to exit on the first error, and we want the run commands to be shown -set -ex - -# Run build -cmake -S "${PROJECT_DIR}" -B build_hunter_test -DHUNTER_ENABLED=ON -DHUNTER_STATUS_DEBUG=ON -cmake --build build_hunter_test diff --git a/.github/workflows/ci/matrix.json b/.github/workflows/ci/matrix.json index 5c4bc51d0a..9227dc2702 100644 --- a/.github/workflows/ci/matrix.json +++ b/.github/workflows/ci/matrix.json @@ -1,19 +1,18 @@ [ -{ "example": "foo", "toolchain": "clang-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "foo", "toolchain": "gcc-7-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "foo", "toolchain": "gcc-8-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "foo", "toolchain": "gcc-9-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "foo", "toolchain": "android-ndk-r17-api-24-arm64-v8a-clang-libcxx14", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "foo", "toolchain": "analyze-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "foo", "toolchain": "sanitize-address-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "foo", "toolchain": "sanitize-leak-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "foo", "toolchain": "sanitize-thread-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "foo", "toolchain": "osx-12-3-arch-universal2-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -{ "example": "foo", "toolchain": "ios-nocodesign-15-5-arm64-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -{ "example": "foo", "toolchain": "ninja-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "foo", "toolchain": "nmake-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "foo", "toolchain": "vs-16-2019-win64-sdk-10-0-18362-0-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "foo", "toolchain": "vs-16-2019-win64-store-10-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "foo", "toolchain": "mingw-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "foo", "toolchain": "msys-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" } +// optional entries: +// - python: override python version to setup/use +// - script: specify a per project build script running before build.py +{ "example": "foo", "toolchain": "clang-cxx17", "os": "ubuntu-24.04" }, +{ "example": "foo", "toolchain": "gcc-12-cxx17", "os": "ubuntu-24.04" }, +{ "example": "foo", "toolchain": "gcc-13-cxx17-fpic", "os": "ubuntu-24.04" }, +{ "example": "foo", "toolchain": "gcc-14-cxx17-fpic", "os": "ubuntu-24.04" }, +{ "example": "foo", "toolchain": "android-ndk-api-35-arm64-v8a-libcxx14", "os": "ubuntu-24.04" }, +{ "example": "foo", "toolchain": "osx-15-4-arch-universal2-cxx17", "os": "macos-15" }, +{ "example": "foo", "toolchain": "ios-nocodesign-17-5-arm64-cxx17", "os": "macos-15" }, +{ "example": "foo", "toolchain": "ninja-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +{ "example": "foo", "toolchain": "nmake-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +{ "example": "foo", "toolchain": "vs-17-2022-win64-sdk-10-0-22000-0-cxx17", "os": "windows-2022" }, +{ "example": "foo", "toolchain": "vs-17-2022-win64-store-10-cxx17", "os": "windows-2022" }, +{ "example": "foo", "toolchain": "mingw-cxx17", "os": "windows-2022" }, +{ "example": "foo", "toolchain": "msys-cxx17", "os": "windows-2022" } ] diff --git a/.github/workflows/ci/matrix_hunter_tests.json b/.github/workflows/ci/matrix_hunter_tests.json index 732749b21a..a8d498e427 100644 --- a/.github/workflows/ci/matrix_hunter_tests.json +++ b/.github/workflows/ci/matrix_hunter_tests.json @@ -1,26 +1,26 @@ [ -// { "example": "tests/simple", "toolchain": "hunter_tests", "os": "ubuntu-22.04", "python": "3.8", "script": "build_hunter_tests.sh" }, -// { "example": "tests/issue/22", "toolchain": "hunter_tests", "os": "ubuntu-22.04", "python": "3.8", "script": "build_hunter_tests.sh" }, -// { "example": "tests/issue/24/unit", "toolchain": "hunter_tests", "os": "ubuntu-22.04", "python": "3.8", "script": "build_hunter_tests.sh" }, -{ "example": "tests/issue/107", "toolchain": "hunter_tests", "os": "ubuntu-22.04", "python": "3.8", "script": "build_hunter_tests.sh" }, -// { "example": "tests/issue/109/unit", "toolchain": "hunter_tests", "os": "ubuntu-22.04", "python": "3.8", "script": "build_hunter_tests.sh" }, -{ "example": "tests/autotools-merge-lipo", "toolchain": "hunter_tests", "os": "ubuntu-22.04", "python": "3.8", "script": "build_hunter_tests.sh" }, -{ "example": "tests/hunter_create_args_file", "toolchain": "hunter_tests", "os": "ubuntu-22.04", "python": "3.8", "script": "build_hunter_tests.sh" }, -{ "example": "tests/hunter_create_dependency_entry", "toolchain": "hunter_tests", "os": "ubuntu-22.04", "python": "3.8", "script": "build_hunter_tests.sh" }, -{ "example": "tests/hunter_create_deps_info", "toolchain": "hunter_tests", "os": "ubuntu-22.04", "python": "3.8", "script": "build_hunter_tests.sh" }, +// { "example": "tests/simple", "toolchain": "hunter_tests", "os": "ubuntu-24.04" }, +// { "example": "tests/issue/22", "toolchain": "hunter_tests", "os": "ubuntu-24.04" }, +// { "example": "tests/issue/24/unit", "toolchain": "hunter_tests", "os": "ubuntu-24.04" }, +{ "example": "tests/issue/107", "toolchain": "hunter_tests", "os": "ubuntu-24.04" }, +// { "example": "tests/issue/109/unit", "toolchain": "hunter_tests", "os": "ubuntu-24.04" }, +{ "example": "tests/autotools-merge-lipo", "toolchain": "hunter_tests", "os": "ubuntu-24.04" }, +{ "example": "tests/hunter_create_args_file", "toolchain": "hunter_tests", "os": "ubuntu-24.04" }, +{ "example": "tests/hunter_create_dependency_entry", "toolchain": "hunter_tests", "os": "ubuntu-24.04" }, +{ "example": "tests/hunter_create_deps_info", "toolchain": "hunter_tests", "os": "ubuntu-24.04" }, // download cache tests disabled because upstream file missing -//{ "example": "tests/hunter_download_cache_meta_file", "toolchain": "hunter_tests", "os": "ubuntu-22.04", "python": "3.8", "script": "build_hunter_tests.sh" }, -//{ "example": "tests/hunter_download_cache_raw_file", "toolchain": "hunter_tests", "os": "ubuntu-22.04", "python": "3.8", "script": "build_hunter_tests.sh" }, -{ "example": "tests/hunter_generate_qt_info", "toolchain": "hunter_tests", "os": "ubuntu-22.04", "python": "3.8", "script": "build_hunter_tests.sh" }, -{ "example": "tests/hunter_get_package_deps", "toolchain": "hunter_tests", "os": "ubuntu-22.04", "python": "3.8", "script": "build_hunter_tests.sh" }, -{ "example": "tests/hunter_get_package_deps_recurse", "toolchain": "hunter_tests", "os": "ubuntu-22.04", "python": "3.8", "script": "build_hunter_tests.sh" }, -{ "example": "tests/hunter_pack_directory", "toolchain": "hunter_tests", "os": "ubuntu-22.04", "python": "3.8", "script": "build_hunter_tests.sh" }, -{ "example": "tests/hunter_register_dependency", "toolchain": "hunter_tests", "os": "ubuntu-22.04", "python": "3.8", "script": "build_hunter_tests.sh" }, -{ "example": "tests/hunter_setup_msvc", "toolchain": "hunter_tests", "os": "ubuntu-22.04", "python": "3.8", "script": "build_hunter_tests.sh" }, -{ "example": "tests/hunter_sleep_before_download", "toolchain": "hunter_tests", "os": "ubuntu-22.04", "python": "3.8", "script": "build_hunter_tests.sh" }, -{ "example": "tests/hunter_unpack_directory", "toolchain": "hunter_tests", "os": "ubuntu-22.04", "python": "3.8", "script": "build_hunter_tests.sh" }, -{ "example": "tests/hunter_init_not_found_counter", "toolchain": "hunter_tests", "os": "ubuntu-22.04", "python": "3.8", "script": "build_hunter_tests.sh" }, +//{ "example": "tests/hunter_download_cache_meta_file", "toolchain": "hunter_tests", "os": "ubuntu-24.04" }, +//{ "example": "tests/hunter_download_cache_raw_file", "toolchain": "hunter_tests", "os": "ubuntu-24.04" }, +{ "example": "tests/hunter_generate_qt_info", "toolchain": "hunter_tests", "os": "ubuntu-24.04" }, +{ "example": "tests/hunter_get_package_deps", "toolchain": "hunter_tests", "os": "ubuntu-24.04" }, +{ "example": "tests/hunter_get_package_deps_recurse", "toolchain": "hunter_tests", "os": "ubuntu-24.04" }, +{ "example": "tests/hunter_pack_directory", "toolchain": "hunter_tests", "os": "ubuntu-24.04" }, +{ "example": "tests/hunter_register_dependency", "toolchain": "hunter_tests", "os": "ubuntu-24.04" }, +{ "example": "tests/hunter_setup_msvc", "toolchain": "hunter_tests", "os": "ubuntu-24.04" }, +{ "example": "tests/hunter_sleep_before_download", "toolchain": "hunter_tests", "os": "ubuntu-24.04" }, +{ "example": "tests/hunter_unpack_directory", "toolchain": "hunter_tests", "os": "ubuntu-24.04" }, +{ "example": "tests/hunter_init_not_found_counter", "toolchain": "hunter_tests", "os": "ubuntu-24.04" }, // disabled because of 'Unexpected empty string' and I don't want to debug that test -//{ "example": "tests/hunter_check_toolchain_definition", "toolchain": "hunter_tests", "os": "ubuntu-22.04", "python": "3.8", "script": "build_hunter_tests.sh" }, -{ "example": "tests/hunter_standard_flag", "toolchain": "hunter_tests", "os": "ubuntu-22.04", "python": "3.8", "script": "build_hunter_tests.sh" } +//{ "example": "tests/hunter_check_toolchain_definition", "toolchain": "hunter_tests", "os": "ubuntu-24.04" }, +{ "example": "tests/hunter_standard_flag", "toolchain": "hunter_tests", "os": "ubuntu-24.04" } ] diff --git a/.github/workflows/set_matrix.py b/.github/workflows/set_matrix.py old mode 100644 new mode 100755 index 61f6a39371..e9bda1d56e --- a/.github/workflows/set_matrix.py +++ b/.github/workflows/set_matrix.py @@ -1,7 +1,13 @@ -import os -import sys +#!/usr/bin/env python3 +# # -*- coding: utf-8 -*- + +import argparse import json +import os +import pathlib import re +import sys + # simple helper to allow single-line-comments with `//` in json files # https://stackoverflow.com/a/57814048 @@ -16,59 +22,458 @@ def json_from_file_ignore_comments(filePath): json_data = json.loads(contents) return json_data -try: - with open(os.environ.get('HOME') + '/files.json') as json_files: - files = json.load(json_files) -except IOError: - sys.exit('Can\'t read changed files from files.json') - -projects = set() -run_hunter_tests : bool = False - -p = re.compile('cmake/projects/([^/]+)') -for file in files: - if p.match(file): - project = p.match(file).group(1) - if os.path.isdir('cmake/projects/' + project): - projects.add(project) - if file.startswith("cmake/modules/"): - run_hunter_tests = True - if file.startswith("cmake/schemes/"): - run_hunter_tests = True - if file.startswith("cmake/templates/"): - run_hunter_tests = True - if file.startswith("tests/"): - run_hunter_tests = True - -if projects or run_hunter_tests: - dafault_dir = '.github/workflows/ci/' - - default_matrix = json_from_file_ignore_comments(dafault_dir + 'matrix.json') - - include = [] - for project in projects: - project_dir = 'cmake/projects/' + project + '/ci/'; - - matrix_override = project_dir + 'matrix.json'; - if os.path.isfile(matrix_override): - project_matrix = json_from_file_ignore_comments(matrix_override) + +def create_toolchain( + toolchains_dir: str | pathlib.Path, toolchain: str, project_name: str +): + out = "" + cc = "" + cxx = "" + + parsed_toolchain = toolchain + m = re.match(r"^(ninja|nmake)[-]?", toolchain) + if m: + parsed_toolchain = toolchain[m.end() :] + out += f"""\ +# Generator handled outside toolchain file: {m.groups(1)[0]} +""" + + m = re.match(r"^(gcc|clang|mingw|msys)(-[\d]+)?", toolchain) + if m: + parsed_toolchain = toolchain[m.end() :] + if toolchain.startswith("clang"): + cc = "clang" + cxx = "clang++" + elif toolchain.startswith("gcc"): + cc = "gcc" + cxx = "g++" + elif toolchain.startswith(("mingw", "msys")): + # generator handled outside of toolchain + cc = "gcc" + cxx = "g++" + out += f"""\ +# Generator handled outside toolchain file: {m.groups(1)[0]} +""" + ext = m.group(2) + if ext: + cc += ext + cxx += ext + + m = re.match( + r"^android-ndk-api-([\d]+)-(armeabi|armeabi-v7a|arm64-v8a)", parsed_toolchain + ) + if m: + parsed_toolchain = parsed_toolchain[: m.start()] + parsed_toolchain[m.end() :] + # ANDROID_NDK provided by GitHub, just check if ANDROID_NDK variable is set + # android_ndk_version = m.group(1) + android_api = m.group(1) + android_arch_abi = m.group(2) + out += f"""\ +set(CMAKE_SYSTEM_NAME "Android") +set(CMAKE_SYSTEM_VERSION "{android_api}") # API level +set(CMAKE_ANDROID_ARCH_ABI "{android_arch_abi}") +set(CMAKE_ANDROID_NDK "$ENV{{ANDROID_NDK}}") # provided by GitHub + +string(COMPARE EQUAL "${{CMAKE_ANDROID_NDK}}" "" _is_empty) +if(_is_empty) + message(FATAL_ERROR + "Environment variable 'ANDROID_NDK' not set" + ) +endif() + +# ANDROID macro is not defined by CMake 3.7+, however it is used by +# some packages like OpenCV +# (https://gitlab.kitware.com/cmake/cmake/merge_requests/62) +add_definitions("-DANDROID") +""" + + if "libcxx" in toolchain: + # for android if we have libcxx in toolchain assume static runtime + out += f"""\ +set(CMAKE_ANDROID_STL_TYPE "c++_static") # LLVM libc++ static +""" + + m = re.match(r"^osx-([\d]+)-([\d]+)", parsed_toolchain) + if m: + parsed_toolchain = parsed_toolchain[: m.start()] + parsed_toolchain[m.end() :] + if not m.group(1) or not m.group(2): + raise RuntimeError( + f"project: {project_name}: error while parsing osx toolchain SDK verison: {toolchain}" + ) + osx_sdk = f"{m.group(1)}.{m.group(2)}" + out += f"""\ +set(CMAKE_OSX_DEPLOYMENT_TARGET "{osx_sdk}" CACHE STRING "Minimum OS X deployment version" FORCE) +""" + # always use clang and clang++ for xcode + cc = "clang" + cxx = "clang++" + m = re.match(r"^-arch-universal2", parsed_toolchain) + if m: + parsed_toolchain = ( + parsed_toolchain[: m.start()] + parsed_toolchain[m.end() :] + ) + out += """\ +set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64" CACHE STRING "OS X Target Architectures" FORCE) +""" + + m = re.match(r"^ios-nocodesign-([\d]+)-([\d]+)", parsed_toolchain) + if m: + parsed_toolchain = parsed_toolchain[: m.start()] + parsed_toolchain[m.end() :] + if not m.group(1) or not m.group(2): + raise RuntimeError( + f"project: {project_name}: error while parsing osx toolchain SDK verison: {toolchain}" + ) + osx_sdk = f"{m.group(1)}.{m.group(2)}" + out += f"""\ +set(CMAKE_OSX_DEPLOYMENT_TARGET "{osx_sdk}" CACHE STRING "Minimum OS X deployment version" FORCE) +set(CMAKE_OSX_SYSROOT "iphoneos" CACHE STRING "System root for iOS" FORCE) +set(CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphoneos;-iphonesimulator") +""" + # no code signing + out += f"""\ +set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED NO CACHE STRING "" FORCE) +set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "" CACHE STRING "" FORCE) +set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED NO CACHE STRING "" FORCE) +set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "" CACHE STRING "" FORCE) +""" + # always use clang and clang++ for xcode + cc = "clang" + cxx = "clang++" + out += """\ +set(CMAKE_MACOSX_BUNDLE YES) +""" + m = re.match(r"^-arm64", parsed_toolchain) + if m: + parsed_toolchain = ( + parsed_toolchain[: m.start()] + parsed_toolchain[m.end() :] + ) + out += """\ +set(IPHONEOS_ARCHS arm64) +set(IPHONESIMULATOR_ARCHS "") +""" + + m = re.match(r"^vs-([\d]+)-([\d]+)(-win64)?", parsed_toolchain) + if m: + parsed_toolchain = parsed_toolchain[: m.start()] + parsed_toolchain[m.end() :] + out += f"""\ +# VS compiler selection handled toolchain file: {m.groups(0)} +""" + cc = "cl" + cxx = "cl" + + m = re.match(r"^-sdk(-[\d]+)+", parsed_toolchain) + if m: + parsed_toolchain = ( + parsed_toolchain[: m.start()] + parsed_toolchain[m.end() :] + ) + sdk_version_str = m.group(0).replace("-sdk-", "") + sdk_version = sdk_version_str.replace("-", ".") + out += f"""\ +set(CMAKE_SYSTEM_VERSION {sdk_version}) +""" + + m = re.match(r"^-store-10", parsed_toolchain) + if m: + parsed_toolchain = ( + parsed_toolchain[: m.start()] + parsed_toolchain[m.end() :] + ) + out += f"""\ +set(CMAKE_SYSTEM_NAME WindowsStore) +set(CMAKE_SYSTEM_VERSION 10.0) +""" + + if cc: + out += f"""\ +set(CMAKE_C_COMPILER "{cc}" CACHE STRING "C compiler" FORCE) +""" + if cxx: + out += f"""\ +set(CMAKE_CXX_COMPILER "{cxx}" CACHE STRING "C++ compiler" FORCE) +""" + + cxx_standard = None + m = re.match(r"^-libcxx([\d]+)?", parsed_toolchain) + if m: + parsed_toolchain = parsed_toolchain[: m.start()] + parsed_toolchain[m.end() :] + out += """\ +set(CMAKE_CXX_FLAGS_INIT "${CMAKE_CXX_FLAGS_INIT} -stdlib=libc++") +""" + cxx_standard = m.group(1) + + m = re.match(r"^-cxx([\d]+)", parsed_toolchain) + if m: + parsed_toolchain = parsed_toolchain[: m.start()] + parsed_toolchain[m.end() :] + cxx_standard = m.group(1) + + if cxx_standard: + out += f"set(CMAKE_CXX_STANDARD {cxx_standard})\n" + out += f"set(CMAKE_CXX_STANDARD_REQUIRED ON)\n" + out += f"set(CMAKE_CXX_EXTENSIONS OFF)\n" + + m = re.match(r"^-c([\d]+)", parsed_toolchain) + if m: + parsed_toolchain = parsed_toolchain[: m.start()] + parsed_toolchain[m.end() :] + c_standard = m.group(1) + if not c_standard: + raise RuntimeError( + f"project: {project_name}: encountered unhandled '-c' flag in toolchain: '{toolchain}'" + ) + out += f"""\ +set(CMAKE_C_STANDARD {c_standard}) +set(CMAKE_C_STANDARD_REQUIRED ON) +set(CMAKE_C_EXTENSIONS OFF) +# Hunter doesn't run toolchain-id calculation for C compiler +list(APPEND HUNTER_TOOLCHAIN_UNDETECTABLE_ID "c{c_standard}") +""" + + if parsed_toolchain.startswith("-fpic"): + parsed_toolchain = parsed_toolchain[len("-fpic") :] + out += """\ +set(CMAKE_POSITION_INDEPENDENT_CODE TRUE CACHE BOOL "Position independent code" FORCE) + +# Linux, GCC 7.3.0 same results with and without '-fPIC' flag for code: +# +# #include +# int main() { +# #if defined(__PIC__) +# std::cout << "PIC: " << __PIC__ << std::endl; +# #else +# std::cout << "PIC not defined" << std::endl; +# #endif +# } +list(APPEND HUNTER_TOOLCHAIN_UNDETECTABLE_ID "pic") +""" + if parsed_toolchain != "": + raise RuntimeError( + f"project: {project_name}: toolchain not handled completely: '{toolchain}': unparsed string: '{parsed_toolchain}'" + ) + + if out == "": + raise RuntimeError(f"project: {project_name}: unhandled toolchain: {toolchain}") + + toolchain_file = toolchains_dir / ( + toolchain if toolchain.endswith(".cmake") else f"{toolchain}.cmake" + ) + with open(toolchain_file, "w", encoding="utf-8") as f: + f.write("# toolchain file generated by set_matrix.py, do not modify!\n") + f.write(out) + + +def generator_and_runscript(leg: dict): + toolchain = leg["toolchain"] + project_name = leg["example"] + + generator = None + + parsed_toolchain = toolchain + m = re.match(r"^(ninja|nmake|mingw|msys)[-]?", toolchain) + if m: + parsed_toolchain = parsed_toolchain[m.end() :] + if m.group(1).startswith("ninja"): + generator = "Ninja" + elif m.group(1).startswith("nmake"): + generator = "NMake Makefiles" + elif m.group(1).startswith("mingw"): + generator = "MinGW Makefiles" + elif m.group(1).startswith("msys"): + generator = "MSYS Makefiles" + else: + raise RuntimeError( + f"project: {project_name}: unhandled generator: {m.group()} in toolchain: {toolchain}" + ) + + m = re.match(r"^vs-([\d]+)-([\d]+)(-win64)?", parsed_toolchain) + if m: + parsed_toolchain = parsed_toolchain[: m.start()] + parsed_toolchain[m.end() :] + vs_version = m.group(1) + vs_year = m.group(2) + vs_win64 = True if m.group(3) else False + generator_str = None + if vs_version == "16": + if vs_year != "2019": + raise RuntimeError( + f"project: {project_name}: VS 16 expected to have year 2019" + ) + # The Windows 2019 Actions runner image will begin deprecation on 2025-06-01 and will be fully unsupported by 2025-06-30 + # https://github.com/actions/runner-images/issues/12045 + generator_str = "Visual Studio 16 2019" + VCVARSALL = "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Enterprise\\Common7\\Tools\\VsDevCmd.bat" + elif vs_version == "17": + if vs_year != "2022": + raise RuntimeError( + f"project: {project_name}: VS 17 expected to have year 2022" + ) + generator_str = "Visual Studio 17 2022" + VCVARSALL = "C:\\Program Files\\Microsoft Visual Studio\\2022\\Enterprise\\Common7\\Tools\\VsDevCmd.bat" + else: + raise RuntimeError( + f"project: {project_name}: unhandled vs-generator: {m.group()} in toolchain: {toolchain}" + ) + if not generator and generator_str: + generator = generator_str + if vs_win64: + VCVARSALL_ARGS = "-arch=amd64 -host_arch=amd64" + else: + VCVARSALL_ARGS = "" + leg["VCVARSALL"] = VCVARSALL + leg["VCVARSALL_ARGS"] = VCVARSALL_ARGS + + if generator: + leg["generator"] = generator + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument( + "projects", + help="project names to process, used for local debugging", + nargs="*", + ) + parser.add_argument( + "-o", + "--output", + help="specify file to write to, default write to stdout", + type=str, + default="", + ) + args = parser.parse_args() + + repo_root = pathlib.Path(__file__).parent.parent.parent + projects_dir = repo_root / "cmake" / "projects" + toolchains_dir = repo_root / ".github" / "toolchains" + if not projects_dir.is_dir(): + raise RuntimeError(f"missing projects dir expected to be at {projects_dir}") + + projects = set() + run_hunter_tests: bool = False + if args.projects: + for project in args.projects: + if project == "hunter_tests": + run_hunter_tests = True + else: + if (projects_dir / project).is_dir(): + projects.add(project) + else: + raise RuntimeError(f"provided project doesn't exist: {project}") else: - project_matrix = [ dict(leg, example = project) for leg in default_matrix ] + try: + with open(os.environ.get("HOME") + "/files.json") as json_files: + files = json.load(json_files) + except IOError: + raise RuntimeError("Can't read changed files from files.json") + + p = re.compile("cmake/projects/([^/]+)") + for file in files: + if p.match(file): + project = p.match(file).group(1) + if (projects_dir / project).is_dir(): + projects.add(project) + if file.startswith("cmake/modules/"): + run_hunter_tests = True + if file.startswith("cmake/schemes/"): + run_hunter_tests = True + if file.startswith("cmake/templates/"): + run_hunter_tests = True + if file.startswith("tests/"): + run_hunter_tests = True + + if projects or run_hunter_tests: + dafault_dir = repo_root / ".github/workflows/ci" + + default_matrix = json_from_file_ignore_comments(dafault_dir / "matrix.json") + + if projects: + toolchains_dir.mkdir(exist_ok=True) + + include = [] + for project in projects: + project_dir = projects_dir / project / "ci" - for leg in project_matrix: - if (os.path.isfile(project_dir + leg['script'])): - leg['script'] = project_dir + leg['script'] - else: - leg['script'] = dafault_dir + leg['script'] + matrix_override = project_dir / "matrix.json" + if matrix_override.is_file(): + project_matrix = json_from_file_ignore_comments(matrix_override) + else: + project_matrix = [dict(leg, example=project) for leg in default_matrix] - include += project_matrix + for leg in project_matrix: + leg["project"] = project + if "script" in leg: + # script file provided, it MUST exist in project dir + proj_script_file = project_dir / leg["script"] + if not proj_script_file.is_file(): + raise RuntimeError( + f"project: {project}: specified script file missing, expected path: {proj_script_file.as_posix()}" + ) + + leg["script"] = proj_script_file.relative_to(repo_root).as_posix() + else: + # try to find os specific install script (build.sh/build.cmd) + if leg["os"].startswith(("ubuntu", "macos")): + proj_script_file = project_dir / "build.sh" + if proj_script_file.is_file(): + leg["script"] = proj_script_file.relative_to( + repo_root + ).as_posix() + elif leg["os"].startswith("windows"): + proj_script_file = project_dir / "build.cmd" + if proj_script_file.is_file(): + leg["script"] = proj_script_file.relative_to( + repo_root + ).as_posix() + else: + raise RuntimeError( + f"project: {project}: unhandled os: {leg['os']}" + ) + if "script" not in leg: + # explicitly set empty script + leg["script"] = "" + if not (repo_root / "examples" / project).is_dir(): + raise RuntimeError( + f"project: {project}: missing examples/{project} dir" + ) + example_dir_entry = f"examples/{leg['example']}" + example_dir = repo_root / example_dir_entry + if not example_dir.is_dir(): + raise RuntimeError( + f"project: {project}: missing {example_dir_entry} dir" + ) + leg["example"] = example_dir_entry + leg["project"] = example_dir.name + # create toolchain file + create_toolchain( + toolchains_dir=toolchains_dir, + toolchain=leg["toolchain"], + project_name=project, + ) + # handle vs-xx-xxxx/mingw/etc generator string + generator_and_runscript(leg) + + include += project_matrix + + if run_hunter_tests: + hunter_tests_matrix = json_from_file_ignore_comments( + dafault_dir / "matrix_hunter_tests.json" + ) + for leg in hunter_tests_matrix: + leg["project"] = leg["example"] + leg["script"] = "" + include += hunter_tests_matrix + + for leg in include: + if "python" not in leg: + # default Python version to use + leg["python"] = "3.12" + + json_output = {"include": include} + if args.output: + with open(args.output, "w", encoding="utf-8") as f: + json.dump(json_output, f, indent=2) + else: + print(json.dumps(json_output)) + else: + print("No projects found") + return 1 - if run_hunter_tests: - hunter_tests_matrix = json_from_file_ignore_comments(dafault_dir + 'matrix_hunter_tests.json') - for leg in hunter_tests_matrix: - leg['script'] = dafault_dir + leg['script'] - include += hunter_tests_matrix - print(json.dumps({'include': include})) -else: - sys.exit('No projects found') \ No newline at end of file +if __name__ == "__main__": + sys.exit(main()) diff --git a/cmake/projects/Boost/ci/matrix.json b/cmake/projects/Boost/ci/matrix.json index 7dae762b83..d713c69c6d 100644 --- a/cmake/projects/Boost/ci/matrix.json +++ b/cmake/projects/Boost/ci/matrix.json @@ -1,300 +1,284 @@ [ -{ "example": "Boost", "toolchain": "clang-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost", "toolchain": "gcc-7-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost", "toolchain": "gcc-8-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost", "toolchain": "gcc-9-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost", "toolchain": "android-ndk-r17-api-24-arm64-v8a-clang-libcxx14", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost", "toolchain": "analyze-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost", "toolchain": "sanitize-address-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost", "toolchain": "sanitize-leak-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost", "toolchain": "sanitize-thread-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost", "toolchain": "osx-12-3-arch-universal2-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost", "toolchain": "ios-nocodesign-15-5-arm64-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost", "toolchain": "ninja-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost", "toolchain": "nmake-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost", "toolchain": "vs-16-2019-win64-sdk-10-0-18362-0-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost", "toolchain": "mingw-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost", "toolchain": "msys-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, +{ "example": "Boost", "toolchain": "clang-cxx17", "os": "ubuntu-24.04" }, +{ "example": "Boost", "toolchain": "gcc-12-cxx17", "os": "ubuntu-24.04" }, +{ "example": "Boost", "toolchain": "gcc-13-cxx17-fpic", "os": "ubuntu-24.04" }, +{ "example": "Boost", "toolchain": "gcc-14-cxx17-fpic", "os": "ubuntu-24.04" }, +{ "example": "Boost", "toolchain": "android-ndk-api-35-arm64-v8a-libcxx14", "os": "ubuntu-24.04" }, +{ "example": "Boost", "toolchain": "osx-15-4-arch-universal2-cxx17", "os": "macos-15" }, +{ "example": "Boost", "toolchain": "ios-nocodesign-17-5-arm64-cxx17", "os": "macos-15" }, +{ "example": "Boost", "toolchain": "ninja-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +{ "example": "Boost", "toolchain": "nmake-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +{ "example": "Boost", "toolchain": "vs-17-2022-win64-sdk-10-0-22000-0-cxx17", "os": "windows-2022" }, +{ "example": "Boost", "toolchain": "vs-17-2022-win64-store-10-cxx17", "os": "windows-2022" }, +{ "example": "Boost", "toolchain": "mingw-cxx17", "os": "windows-2022" }, +{ "example": "Boost", "toolchain": "msys-cxx17", "os": "windows-2022" }, -{ "example": "Boost-useBoostConfig", "toolchain": "clang-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-useBoostConfig", "toolchain": "gcc-7-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-useBoostConfig", "toolchain": "gcc-8-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-useBoostConfig", "toolchain": "gcc-9-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-useBoostConfig", "toolchain": "android-ndk-r17-api-24-arm64-v8a-clang-libcxx14", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-useBoostConfig", "toolchain": "analyze-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-useBoostConfig", "toolchain": "sanitize-address-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-useBoostConfig", "toolchain": "sanitize-leak-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-useBoostConfig", "toolchain": "sanitize-thread-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-useBoostConfig", "toolchain": "osx-12-3-arch-universal2-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-useBoostConfig", "toolchain": "ios-nocodesign-13-2-dep-9-3", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-useBoostConfig", "toolchain": "ninja-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-useBoostConfig", "toolchain": "nmake-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-useBoostConfig", "toolchain": "vs-16-2019-win64-sdk-10-0-18362-0-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-useBoostConfig", "toolchain": "mingw-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-useBoostConfig", "toolchain": "msys-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, +{ "example": "Boost-useBoostConfig", "toolchain": "clang-cxx17", "os": "ubuntu-24.04" }, +{ "example": "Boost-useBoostConfig", "toolchain": "gcc-12-cxx17", "os": "ubuntu-24.04" }, +{ "example": "Boost-useBoostConfig", "toolchain": "gcc-13-cxx17-fpic", "os": "ubuntu-24.04" }, +{ "example": "Boost-useBoostConfig", "toolchain": "gcc-14-cxx17-fpic", "os": "ubuntu-24.04" }, +{ "example": "Boost-useBoostConfig", "toolchain": "android-ndk-api-35-arm64-v8a-libcxx14", "os": "ubuntu-24.04" }, +{ "example": "Boost-useBoostConfig", "toolchain": "osx-15-4-arch-universal2-cxx17", "os": "macos-15" }, +{ "example": "Boost-useBoostConfig", "toolchain": "ios-nocodesign-17-5-arm64-cxx17", "os": "macos-15" }, +{ "example": "Boost-useBoostConfig", "toolchain": "ninja-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +{ "example": "Boost-useBoostConfig", "toolchain": "nmake-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +{ "example": "Boost-useBoostConfig", "toolchain": "vs-17-2022-win64-sdk-10-0-22000-0-cxx17", "os": "windows-2022" }, +{ "example": "Boost-useBoostConfig", "toolchain": "vs-17-2022-win64-store-10-cxx17", "os": "windows-2022" }, +{ "example": "Boost-useBoostConfig", "toolchain": "mingw-cxx17", "os": "windows-2022" }, +{ "example": "Boost-useBoostConfig", "toolchain": "msys-cxx17", "os": "windows-2022" }, -{ "example": "Boost-chrono-useBoostConfig", "toolchain": "clang-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-chrono-useBoostConfig", "toolchain": "gcc-7-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-chrono-useBoostConfig", "toolchain": "gcc-8-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-chrono-useBoostConfig", "toolchain": "gcc-9-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-chrono-useBoostConfig", "toolchain": "android-ndk-r17-api-24-arm64-v8a-clang-libcxx14", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-chrono-useBoostConfig", "toolchain": "osx-12-3-arch-universal2-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-chrono-useBoostConfig", "toolchain": "ios-nocodesign-15-5-arm64-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-chrono-useBoostConfig", "toolchain": "ninja-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -// { "example": "Boost-chrono-useBoostConfig", "toolchain": "nmake-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-chrono-useBoostConfig", "toolchain": "vs-16-2019-win64-sdk-10-0-18362-0-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-chrono-useBoostConfig", "toolchain": "mingw-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-chrono-useBoostConfig", "toolchain": "msys-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, +{ "example": "Boost-chrono-useBoostConfig", "toolchain": "clang-cxx17", "os": "ubuntu-24.04" }, +{ "example": "Boost-chrono-useBoostConfig", "toolchain": "gcc-12-cxx17", "os": "ubuntu-24.04" }, +{ "example": "Boost-chrono-useBoostConfig", "toolchain": "gcc-13-cxx17-fpic", "os": "ubuntu-24.04" }, +{ "example": "Boost-chrono-useBoostConfig", "toolchain": "gcc-14-cxx17-fpic", "os": "ubuntu-24.04" }, +{ "example": "Boost-chrono-useBoostConfig", "toolchain": "android-ndk-api-35-arm64-v8a-libcxx14", "os": "ubuntu-24.04" }, +// { "example": "Boost-chrono-useBoostConfig", "toolchain": "osx-15-4-arch-universal2-cxx17", "os": "macos-15" }, +{ "example": "Boost-chrono-useBoostConfig", "toolchain": "ios-nocodesign-17-5-arm64-cxx17", "os": "macos-15" }, +{ "example": "Boost-chrono-useBoostConfig", "toolchain": "ninja-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +// { "example": "Boost-chrono-useBoostConfig", "toolchain": "nmake-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +{ "example": "Boost-chrono-useBoostConfig", "toolchain": "vs-17-2022-win64-sdk-10-0-22000-0-cxx17", "os": "windows-2022" }, +{ "example": "Boost-chrono-useBoostConfig", "toolchain": "vs-17-2022-win64-store-10-cxx17", "os": "windows-2022" }, +{ "example": "Boost-chrono-useBoostConfig", "toolchain": "mingw-cxx17", "os": "windows-2022" }, +{ "example": "Boost-chrono-useBoostConfig", "toolchain": "msys-cxx17", "os": "windows-2022" }, -// { "example": "Boost-charconv", "toolchain": "clang-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-charconv", "toolchain": "gcc-7-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-charconv", "toolchain": "gcc-8-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-charconv", "toolchain": "gcc-9-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-charconv", "toolchain": "android-ndk-r17-api-24-arm64-v8a-clang-libcxx14", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-charconv", "toolchain": "osx-12-3-arch-universal2-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-charconv", "toolchain": "ios-nocodesign-15-5-arm64-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-charconv", "toolchain": "ninja-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -//{ "example": "Boost-charconv", "toolchain": "nmake-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -// { "example": "Boost-charconv", "toolchain": "vs-16-2019-win64-sdk-10-0-18362-0-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -//{ "example": "Boost-charconv", "toolchain": "mingw-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -//{ "example": "Boost-charconv", "toolchain": "msys-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, +// { "example": "Boost-charconv", "toolchain": "clang-cxx17", "os": "ubuntu-24.04" }, +{ "example": "Boost-charconv", "toolchain": "gcc-12-cxx17", "os": "ubuntu-24.04" }, +{ "example": "Boost-charconv", "toolchain": "gcc-13-cxx17-fpic", "os": "ubuntu-24.04" }, +{ "example": "Boost-charconv", "toolchain": "gcc-14-cxx17-fpic", "os": "ubuntu-24.04" }, +{ "example": "Boost-charconv", "toolchain": "android-ndk-api-35-arm64-v8a-libcxx14", "os": "ubuntu-24.04" }, +// { "example": "Boost-charconv", "toolchain": "osx-15-4-arch-universal2-cxx17", "os": "macos-15" }, +{ "example": "Boost-charconv", "toolchain": "ios-nocodesign-17-5-arm64-cxx17", "os": "macos-15" }, +{ "example": "Boost-charconv", "toolchain": "ninja-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +{ "example": "Boost-charconv", "toolchain": "nmake-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +// { "example": "Boost-charconv", "toolchain": "vs-17-2022-win64-sdk-10-0-22000-0-cxx17", "os": "windows-2022" }, +// { "example": "Boost-charconv", "toolchain": "vs-17-2022-win64-store-10-cxx17", "os": "windows-2022" }, +// { "example": "Boost-charconv", "toolchain": "mingw-cxx17", "os": "windows-2022" }, +// { "example": "Boost-charconv", "toolchain": "msys-cxx17", "os": "windows-2022" }, -{ "example": "Boost-cobalt", "toolchain": "clang-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -//{ "example": "Boost-cobalt", "toolchain": "gcc-7-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-cobalt", "toolchain": "gcc-8-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-cobalt", "toolchain": "gcc-9-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -//{ "example": "Boost-cobalt", "toolchain": "android-ndk-r17-api-24-arm64-v8a-clang-libcxx14", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-cobalt", "toolchain": "osx-12-3-arch-universal2-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -//{ "example": "Boost-cobalt", "toolchain": "ios-nocodesign-15-5-arm64-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-cobalt", "toolchain": "ninja-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -//{ "example": "Boost-cobalt", "toolchain": "nmake-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -// { "example": "Boost-cobalt", "toolchain": "vs-16-2019-win64-sdk-10-0-18362-0-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -//{ "example": "Boost-cobalt", "toolchain": "mingw-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -//{ "example": "Boost-cobalt", "toolchain": "msys-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, +{ "example": "Boost-charconv", "toolchain": "clang-cxx17", "os": "ubuntu-24.04" }, +// { "example": "Boost-charconv", "toolchain": "gcc-12-cxx17", "os": "ubuntu-24.04" }, +// { "example": "Boost-charconv", "toolchain": "gcc-13-cxx17-fpic", "os": "ubuntu-24.04" }, +// { "example": "Boost-charconv", "toolchain": "gcc-14-cxx17-fpic", "os": "ubuntu-24.04" }, +// { "example": "Boost-charconv", "toolchain": "android-ndk-api-35-arm64-v8a-libcxx14", "os": "ubuntu-24.04" }, +// { "example": "Boost-charconv", "toolchain": "osx-15-4-arch-universal2-cxx17", "os": "macos-15" }, +// { "example": "Boost-charconv", "toolchain": "ios-nocodesign-17-5-arm64-cxx17", "os": "macos-15" }, +// { "example": "Boost-charconv", "toolchain": "ninja-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +// { "example": "Boost-charconv", "toolchain": "nmake-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +// { "example": "Boost-charconv", "toolchain": "vs-17-2022-win64-sdk-10-0-22000-0-cxx17", "os": "windows-2022" }, +// { "example": "Boost-charconv", "toolchain": "vs-17-2022-win64-store-10-cxx17", "os": "windows-2022" }, +// { "example": "Boost-charconv", "toolchain": "mingw-cxx17", "os": "windows-2022" }, +// { "example": "Boost-charconv", "toolchain": "msys-cxx17", "os": "windows-2022" }, -// { "example": "Boost-container", "toolchain": "clang-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-container", "toolchain": "gcc-7-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-container", "toolchain": "gcc-8-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-container", "toolchain": "gcc-9-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-container", "toolchain": "android-ndk-r17-api-24-arm64-v8a-clang-libcxx14", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-container", "toolchain": "osx-12-3-arch-universal2-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-container", "toolchain": "ios-nocodesign-15-5-arm64-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-container", "toolchain": "ninja-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-container", "toolchain": "nmake-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -// { "example": "Boost-container", "toolchain": "vs-16-2019-win64-sdk-10-0-18362-0-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-container", "toolchain": "mingw-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-container", "toolchain": "msys-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, +// { "example": "Boost-container", "toolchain": "clang-cxx17", "os": "ubuntu-24.04" }, +{ "example": "Boost-container", "toolchain": "gcc-12-cxx17", "os": "ubuntu-24.04" }, +// { "example": "Boost-container", "toolchain": "gcc-13-cxx17-fpic", "os": "ubuntu-24.04" }, +// { "example": "Boost-container", "toolchain": "gcc-14-cxx17-fpic", "os": "ubuntu-24.04" }, +{ "example": "Boost-container", "toolchain": "android-ndk-api-35-arm64-v8a-libcxx14", "os": "ubuntu-24.04" }, +// { "example": "Boost-container", "toolchain": "osx-15-4-arch-universal2-cxx17", "os": "macos-15" }, +{ "example": "Boost-container", "toolchain": "ios-nocodesign-17-5-arm64-cxx17", "os": "macos-15" }, +// { "example": "Boost-container", "toolchain": "ninja-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +{ "example": "Boost-container", "toolchain": "nmake-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +// { "example": "Boost-container", "toolchain": "vs-17-2022-win64-sdk-10-0-22000-0-cxx17", "os": "windows-2022" }, +// { "example": "Boost-container", "toolchain": "vs-17-2022-win64-store-10-cxx17", "os": "windows-2022" }, +{ "example": "Boost-container", "toolchain": "mingw-cxx17", "os": "windows-2022" }, +{ "example": "Boost-container", "toolchain": "msys-cxx17", "os": "windows-2022" }, -// { "example": "Boost-contract", "toolchain": "clang-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-contract", "toolchain": "gcc-7-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-contract", "toolchain": "gcc-8-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-contract", "toolchain": "gcc-9-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-contract", "toolchain": "android-ndk-r17-api-24-arm64-v8a-clang-libcxx14", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-contract", "toolchain": "osx-12-3-arch-universal2-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-contract", "toolchain": "ios-nocodesign-15-5-arm64-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-contract", "toolchain": "ninja-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -// { "example": "Boost-contract", "toolchain": "nmake-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -// { "example": "Boost-contract", "toolchain": "vs-16-2019-win64-sdk-10-0-18362-0-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-contract", "toolchain": "mingw-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-contract", "toolchain": "msys-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, +// { "example": "Boost-contract", "toolchain": "clang-cxx17", "os": "ubuntu-24.04" }, +// { "example": "Boost-contract", "toolchain": "gcc-12-cxx17", "os": "ubuntu-24.04" }, +{ "example": "Boost-contract", "toolchain": "gcc-13-cxx17-fpic", "os": "ubuntu-24.04" }, +// { "example": "Boost-contract", "toolchain": "gcc-14-cxx17-fpic", "os": "ubuntu-24.04" }, +{ "example": "Boost-contract", "toolchain": "android-ndk-api-35-arm64-v8a-libcxx14", "os": "ubuntu-24.04" }, +// { "example": "Boost-contract", "toolchain": "osx-15-4-arch-universal2-cxx17", "os": "macos-15" }, +{ "example": "Boost-contract", "toolchain": "ios-nocodesign-17-5-arm64-cxx17", "os": "macos-15" }, +{ "example": "Boost-contract", "toolchain": "ninja-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +// { "example": "Boost-contract", "toolchain": "nmake-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +// { "example": "Boost-contract", "toolchain": "vs-17-2022-win64-sdk-10-0-22000-0-cxx17", "os": "windows-2022" }, +// { "example": "Boost-contract", "toolchain": "vs-17-2022-win64-store-10-cxx17", "os": "windows-2022" }, +{ "example": "Boost-contract", "toolchain": "mingw-cxx17", "os": "windows-2022" }, +{ "example": "Boost-contract", "toolchain": "msys-cxx17", "os": "windows-2022" }, -// { "example": "Boost-fiber", "toolchain": "clang-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-fiber", "toolchain": "gcc-7-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-fiber", "toolchain": "gcc-8-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-fiber", "toolchain": "gcc-9-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-fiber", "toolchain": "android-ndk-r17-api-24-arm64-v8a-clang-libcxx14", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-fiber", "toolchain": "osx-12-3-arch-universal2-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-fiber", "toolchain": "ios-nocodesign-15-5-arm64-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-fiber", "toolchain": "ninja-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-fiber", "toolchain": "nmake-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-fiber", "toolchain": "vs-16-2019-win64-sdk-10-0-18362-0-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-fiber", "toolchain": "mingw-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-fiber", "toolchain": "msys-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, +// { "example": "Boost-fiber", "toolchain": "clang-cxx17", "os": "ubuntu-24.04" }, +// { "example": "Boost-fiber", "toolchain": "gcc-12-cxx17", "os": "ubuntu-24.04" }, +// { "example": "Boost-fiber", "toolchain": "gcc-13-cxx17-fpic", "os": "ubuntu-24.04" }, +{ "example": "Boost-fiber", "toolchain": "gcc-14-cxx17-fpic", "os": "ubuntu-24.04" }, +{ "example": "Boost-fiber", "toolchain": "android-ndk-api-35-arm64-v8a-libcxx14", "os": "ubuntu-24.04" }, +{ "example": "Boost-fiber", "toolchain": "osx-15-4-arch-universal2-cxx17", "os": "macos-15" }, +{ "example": "Boost-fiber", "toolchain": "ios-nocodesign-17-5-arm64-cxx17", "os": "macos-15" }, +// { "example": "Boost-fiber", "toolchain": "ninja-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +{ "example": "Boost-fiber", "toolchain": "nmake-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +{ "example": "Boost-fiber", "toolchain": "vs-17-2022-win64-sdk-10-0-22000-0-cxx17", "os": "windows-2022" }, +{ "example": "Boost-fiber", "toolchain": "vs-17-2022-win64-store-10-cxx17", "os": "windows-2022" }, +{ "example": "Boost-fiber", "toolchain": "mingw-cxx17", "os": "windows-2022" }, +{ "example": "Boost-fiber", "toolchain": "msys-cxx17", "os": "windows-2022" }, -{ "example": "Boost-filesystem-useBoostConfig", "toolchain": "clang-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-filesystem-useBoostConfig", "toolchain": "gcc-7-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-filesystem-useBoostConfig", "toolchain": "gcc-8-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-filesystem-useBoostConfig", "toolchain": "gcc-9-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-filesystem-useBoostConfig", "toolchain": "android-ndk-r17-api-24-arm64-v8a-clang-libcxx14", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-filesystem-useBoostConfig", "toolchain": "osx-12-3-arch-universal2-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-filesystem-useBoostConfig", "toolchain": "ios-nocodesign-15-5-arm64-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-filesystem-useBoostConfig", "toolchain": "ninja-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -// { "example": "Boost-filesystem-useBoostConfig", "toolchain": "nmake-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -// { "example": "Boost-filesystem-useBoostConfig", "toolchain": "vs-16-2019-win64-sdk-10-0-18362-0-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-filesystem-useBoostConfig", "toolchain": "mingw-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-filesystem-useBoostConfig", "toolchain": "msys-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, +{ "example": "Boost-filesystem-useBoostConfig", "toolchain": "clang-cxx17", "os": "ubuntu-24.04" }, +// { "example": "Boost-filesystem-useBoostConfig", "toolchain": "gcc-12-cxx17", "os": "ubuntu-24.04" }, +// { "example": "Boost-filesystem-useBoostConfig", "toolchain": "gcc-13-cxx17-fpic", "os": "ubuntu-24.04" }, +// { "example": "Boost-filesystem-useBoostConfig", "toolchain": "gcc-14-cxx17-fpic", "os": "ubuntu-24.04" }, +{ "example": "Boost-filesystem-useBoostConfig", "toolchain": "android-ndk-api-35-arm64-v8a-libcxx14", "os": "ubuntu-24.04" }, +// { "example": "Boost-filesystem-useBoostConfig", "toolchain": "osx-15-4-arch-universal2-cxx17", "os": "macos-15" }, +{ "example": "Boost-filesystem-useBoostConfig", "toolchain": "ios-nocodesign-17-5-arm64-cxx17", "os": "macos-15" }, +// { "example": "Boost-filesystem-useBoostConfig", "toolchain": "ninja-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +// { "example": "Boost-filesystem-useBoostConfig", "toolchain": "nmake-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +// { "example": "Boost-filesystem-useBoostConfig", "toolchain": "vs-17-2022-win64-sdk-10-0-22000-0-cxx17", "os": "windows-2022" }, +// { "example": "Boost-filesystem-useBoostConfig", "toolchain": "vs-17-2022-win64-store-10-cxx17", "os": "windows-2022" }, +{ "example": "Boost-filesystem-useBoostConfig", "toolchain": "mingw-cxx17", "os": "windows-2022" }, +{ "example": "Boost-filesystem-useBoostConfig", "toolchain": "msys-cxx17", "os": "windows-2022" }, -// { "example": "Boost-json", "toolchain": "clang-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-json", "toolchain": "gcc-7-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-json", "toolchain": "gcc-8-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-json", "toolchain": "gcc-9-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-json", "toolchain": "android-ndk-r17-api-24-arm64-v8a-clang-libcxx14", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-json", "toolchain": "osx-12-3-arch-universal2-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-json", "toolchain": "ios-nocodesign-15-5-arm64-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-json", "toolchain": "ninja-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-json", "toolchain": "nmake-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -// { "example": "Boost-json", "toolchain": "vs-16-2019-win64-sdk-10-0-18362-0-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-json", "toolchain": "mingw-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-json", "toolchain": "msys-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, +// { "example": "Boost-json", "toolchain": "clang-cxx17", "os": "ubuntu-24.04" }, +{ "example": "Boost-json", "toolchain": "gcc-12-cxx17", "os": "ubuntu-24.04" }, +// { "example": "Boost-json", "toolchain": "gcc-13-cxx17-fpic", "os": "ubuntu-24.04" }, +// { "example": "Boost-json", "toolchain": "gcc-14-cxx17-fpic", "os": "ubuntu-24.04" }, +{ "example": "Boost-json", "toolchain": "android-ndk-api-35-arm64-v8a-libcxx14", "os": "ubuntu-24.04" }, +// { "example": "Boost-json", "toolchain": "osx-15-4-arch-universal2-cxx17", "os": "macos-15" }, +{ "example": "Boost-json", "toolchain": "ios-nocodesign-17-5-arm64-cxx17", "os": "macos-15" }, +// { "example": "Boost-json", "toolchain": "ninja-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +{ "example": "Boost-json", "toolchain": "nmake-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +// { "example": "Boost-json", "toolchain": "vs-17-2022-win64-sdk-10-0-22000-0-cxx17", "os": "windows-2022" }, +// { "example": "Boost-json", "toolchain": "vs-17-2022-win64-store-10-cxx17", "os": "windows-2022" }, +{ "example": "Boost-json", "toolchain": "mingw-cxx17", "os": "windows-2022" }, +{ "example": "Boost-json", "toolchain": "msys-cxx17", "os": "windows-2022" }, -// { "example": "Boost-log-useBoostConfig", "toolchain": "clang-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-log-useBoostConfig", "toolchain": "gcc-7-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-log-useBoostConfig", "toolchain": "gcc-8-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-log-useBoostConfig", "toolchain": "gcc-9-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-log-useBoostConfig", "toolchain": "android-ndk-r17-api-24-arm64-v8a-clang-libcxx14", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-log-useBoostConfig", "toolchain": "analyze-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-log-useBoostConfig", "toolchain": "sanitize-address-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-log-useBoostConfig", "toolchain": "sanitize-leak-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-log-useBoostConfig", "toolchain": "sanitize-thread-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-log-useBoostConfig", "toolchain": "osx-12-3-arch-universal2-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-log-useBoostConfig", "toolchain": "ios-nocodesign-15-5-arm64-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-log-useBoostConfig", "toolchain": "ninja-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -// { "example": "Boost-log-useBoostConfig", "toolchain": "nmake-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-log-useBoostConfig", "toolchain": "vs-16-2019-win64-sdk-10-0-18362-0-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-log-useBoostConfig", "toolchain": "mingw-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-log-useBoostConfig", "toolchain": "msys-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, +// { "example": "Boost-log-useBoostConfig", "toolchain": "clang-cxx17", "os": "ubuntu-24.04" }, +// { "example": "Boost-log-useBoostConfig", "toolchain": "gcc-12-cxx17", "os": "ubuntu-24.04" }, +{ "example": "Boost-log-useBoostConfig", "toolchain": "gcc-13-cxx17-fpic", "os": "ubuntu-24.04" }, +// { "example": "Boost-log-useBoostConfig", "toolchain": "gcc-14-cxx17-fpic", "os": "ubuntu-24.04" }, +{ "example": "Boost-log-useBoostConfig", "toolchain": "android-ndk-api-35-arm64-v8a-libcxx14", "os": "ubuntu-24.04" }, +// { "example": "Boost-log-useBoostConfig", "toolchain": "osx-15-4-arch-universal2-cxx17", "os": "macos-15" }, +{ "example": "Boost-log-useBoostConfig", "toolchain": "ios-nocodesign-17-5-arm64-cxx17", "os": "macos-15" }, +{ "example": "Boost-log-useBoostConfig", "toolchain": "ninja-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +// { "example": "Boost-log-useBoostConfig", "toolchain": "nmake-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +{ "example": "Boost-log-useBoostConfig", "toolchain": "vs-17-2022-win64-sdk-10-0-22000-0-cxx17", "os": "windows-2022" }, +// { "example": "Boost-log-useBoostConfig", "toolchain": "vs-17-2022-win64-store-10-cxx17", "os": "windows-2022" }, +{ "example": "Boost-log-useBoostConfig", "toolchain": "mingw-cxx17", "os": "windows-2022" }, +{ "example": "Boost-log-useBoostConfig", "toolchain": "msys-cxx17", "os": "windows-2022" }, -// { "example": "Boost-math", "toolchain": "clang-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-math", "toolchain": "gcc-7-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-math", "toolchain": "gcc-8-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-math", "toolchain": "gcc-9-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-math", "toolchain": "android-ndk-r17-api-24-arm64-v8a-clang-libcxx14", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-math", "toolchain": "osx-12-3-arch-universal2-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-math", "toolchain": "ios-nocodesign-15-5-arm64-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-math", "toolchain": "ninja-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-math", "toolchain": "nmake-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -// { "example": "Boost-math", "toolchain": "vs-16-2019-win64-sdk-10-0-18362-0-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-math", "toolchain": "mingw-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-math", "toolchain": "msys-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, +// { "example": "Boost-math", "toolchain": "clang-cxx17", "os": "ubuntu-24.04" }, +// { "example": "Boost-math", "toolchain": "gcc-12-cxx17", "os": "ubuntu-24.04" }, +// { "example": "Boost-math", "toolchain": "gcc-13-cxx17-fpic", "os": "ubuntu-24.04" }, +{ "example": "Boost-math", "toolchain": "gcc-14-cxx17-fpic", "os": "ubuntu-24.04" }, +{ "example": "Boost-math", "toolchain": "android-ndk-api-35-arm64-v8a-libcxx14", "os": "ubuntu-24.04" }, +{ "example": "Boost-math", "toolchain": "osx-15-4-arch-universal2-cxx17", "os": "macos-15" }, +{ "example": "Boost-math", "toolchain": "ios-nocodesign-17-5-arm64-cxx17", "os": "macos-15" }, +// { "example": "Boost-math", "toolchain": "ninja-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +{ "example": "Boost-math", "toolchain": "nmake-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +// { "example": "Boost-math", "toolchain": "vs-17-2022-win64-sdk-10-0-22000-0-cxx17", "os": "windows-2022" }, +// { "example": "Boost-math", "toolchain": "vs-17-2022-win64-store-10-cxx17", "os": "windows-2022" }, +{ "example": "Boost-math", "toolchain": "mingw-cxx17", "os": "windows-2022" }, +{ "example": "Boost-math", "toolchain": "msys-cxx17", "os": "windows-2022" }, -{ "example": "Boost-predef", "toolchain": "clang-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-predef", "toolchain": "gcc-7-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-predef", "toolchain": "gcc-8-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-predef", "toolchain": "gcc-9-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-predef", "toolchain": "android-ndk-r17-api-24-arm64-v8a-clang-libcxx14", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-predef", "toolchain": "osx-12-3-arch-universal2-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-predef", "toolchain": "ios-nocodesign-15-5-arm64-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-predef", "toolchain": "ninja-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -// { "example": "Boost-predef", "toolchain": "nmake-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -// { "example": "Boost-predef", "toolchain": "vs-16-2019-win64-sdk-10-0-18362-0-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-predef", "toolchain": "mingw-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-predef", "toolchain": "msys-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, +{ "example": "Boost-predef", "toolchain": "clang-cxx17", "os": "ubuntu-24.04" }, +// { "example": "Boost-predef", "toolchain": "gcc-12-cxx17", "os": "ubuntu-24.04" }, +// { "example": "Boost-predef", "toolchain": "gcc-13-cxx17-fpic", "os": "ubuntu-24.04" }, +// { "example": "Boost-predef", "toolchain": "gcc-14-cxx17-fpic", "os": "ubuntu-24.04" }, +{ "example": "Boost-predef", "toolchain": "android-ndk-api-35-arm64-v8a-libcxx14", "os": "ubuntu-24.04" }, +// { "example": "Boost-predef", "toolchain": "osx-15-4-arch-universal2-cxx17", "os": "macos-15" }, +{ "example": "Boost-predef", "toolchain": "ios-nocodesign-17-5-arm64-cxx17", "os": "macos-15" }, +// { "example": "Boost-predef", "toolchain": "ninja-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +// { "example": "Boost-predef", "toolchain": "nmake-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +// { "example": "Boost-predef", "toolchain": "vs-17-2022-win64-sdk-10-0-22000-0-cxx17", "os": "windows-2022" }, +// { "example": "Boost-predef", "toolchain": "vs-17-2022-win64-store-10-cxx17", "os": "windows-2022" }, +{ "example": "Boost-predef", "toolchain": "mingw-cxx17", "os": "windows-2022" }, +{ "example": "Boost-predef", "toolchain": "msys-cxx17", "os": "windows-2022" }, -//{ "example": "Boost-process", "toolchain": "clang-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-process", "toolchain": "gcc-7-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-process", "toolchain": "gcc-8-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-process", "toolchain": "gcc-9-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -//{ "example": "Boost-process", "toolchain": "android-ndk-r17-api-24-arm64-v8a-clang-libcxx14", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-process", "toolchain": "osx-12-3-arch-universal2-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -//{ "example": "Boost-process", "toolchain": "ios-nocodesign-15-5-arm64-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -//{ "example": "Boost-process", "toolchain": "ninja-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -// { "example": "Boost-process", "toolchain": "nmake-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -// { "example": "Boost-process", "toolchain": "vs-16-2019-win64-sdk-10-0-18362-0-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -//{ "example": "Boost-process", "toolchain": "mingw-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -//{ "example": "Boost-process", "toolchain": "msys-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, +{ "example": "BoostProcess", "toolchain": "clang-cxx17", "os": "ubuntu-24.04" }, +// { "example": "BoostProcess", "toolchain": "gcc-12-cxx17", "os": "ubuntu-24.04" }, +// { "example": "BoostProcess", "toolchain": "gcc-13-cxx17-fpic", "os": "ubuntu-24.04" }, +// { "example": "BoostProcess", "toolchain": "gcc-14-cxx17-fpic", "os": "ubuntu-24.04" }, +{ "example": "BoostProcess", "toolchain": "android-ndk-api-35-arm64-v8a-libcxx14", "os": "ubuntu-24.04" }, +// { "example": "BoostProcess", "toolchain": "osx-15-4-arch-universal2-cxx17", "os": "macos-15" }, +{ "example": "BoostProcess", "toolchain": "ios-nocodesign-17-5-arm64-cxx17", "os": "macos-15" }, +{ "example": "BoostProcess", "toolchain": "ninja-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +// { "example": "BoostProcess", "toolchain": "nmake-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +// { "example": "BoostProcess", "toolchain": "vs-17-2022-win64-sdk-10-0-22000-0-cxx17", "os": "windows-2022" }, +// { "example": "BoostProcess", "toolchain": "vs-17-2022-win64-store-10-cxx17", "os": "windows-2022" }, +{ "example": "BoostProcess", "toolchain": "mingw-cxx17", "os": "windows-2022" }, +{ "example": "BoostProcess", "toolchain": "msys-cxx17", "os": "windows-2022" }, -{ "example": "BoostProcess", "toolchain": "clang-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "BoostProcess", "toolchain": "gcc-7-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "BoostProcess", "toolchain": "gcc-8-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "BoostProcess", "toolchain": "gcc-9-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "BoostProcess", "toolchain": "android-ndk-r17-api-24-arm64-v8a-clang-libcxx14", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "BoostProcess", "toolchain": "osx-12-3-arch-universal2-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -{ "example": "BoostProcess", "toolchain": "ios-nocodesign-15-5-arm64-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -{ "example": "BoostProcess", "toolchain": "ninja-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -// { "example": "BoostProcess", "toolchain": "nmake-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -// { "example": "BoostProcess", "toolchain": "vs-16-2019-win64-sdk-10-0-18362-0-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "BoostProcess", "toolchain": "mingw-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "BoostProcess", "toolchain": "msys-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, +// { "example": "Boost-program-options", "toolchain": "clang-cxx17", "os": "ubuntu-24.04" }, +{ "example": "Boost-program-options", "toolchain": "gcc-12-cxx17", "os": "ubuntu-24.04" }, +// { "example": "Boost-program-options", "toolchain": "gcc-13-cxx17-fpic", "os": "ubuntu-24.04" }, +// { "example": "Boost-program-options", "toolchain": "gcc-14-cxx17-fpic", "os": "ubuntu-24.04" }, +{ "example": "Boost-program-options", "toolchain": "android-ndk-api-35-arm64-v8a-libcxx14", "os": "ubuntu-24.04" }, +// { "example": "Boost-program-options", "toolchain": "osx-15-4-arch-universal2-cxx17", "os": "macos-15" }, +{ "example": "Boost-program-options", "toolchain": "ios-nocodesign-17-5-arm64-cxx17", "os": "macos-15" }, +// { "example": "Boost-program-options", "toolchain": "ninja-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +{ "example": "Boost-program-options", "toolchain": "nmake-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +{ "example": "Boost-program-options", "toolchain": "vs-17-2022-win64-sdk-10-0-22000-0-cxx17", "os": "windows-2022" }, +// { "example": "Boost-program-options", "toolchain": "vs-17-2022-win64-store-10-cxx17", "os": "windows-2022" }, +{ "example": "Boost-program-options", "toolchain": "mingw-cxx17", "os": "windows-2022" }, +{ "example": "Boost-program-options", "toolchain": "msys-cxx17", "os": "windows-2022" }, -// { "example": "Boost-program-options", "toolchain": "clang-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-program-options", "toolchain": "gcc-7-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-program-options", "toolchain": "gcc-8-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-program-options", "toolchain": "gcc-9-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-program-options", "toolchain": "android-ndk-r17-api-24-arm64-v8a-clang-libcxx14", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-program-options", "toolchain": "osx-12-3-arch-universal2-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-program-options", "toolchain": "ios-nocodesign-15-5-arm64-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-program-options", "toolchain": "ninja-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-program-options", "toolchain": "nmake-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-program-options", "toolchain": "vs-16-2019-win64-sdk-10-0-18362-0-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-program-options", "toolchain": "mingw-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-program-options", "toolchain": "msys-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, +// { "example": "Boost-random", "toolchain": "clang-cxx17", "os": "ubuntu-24.04" }, +// { "example": "Boost-random", "toolchain": "gcc-12-cxx17", "os": "ubuntu-24.04" }, +{ "example": "Boost-random", "toolchain": "gcc-13-cxx17-fpic", "os": "ubuntu-24.04" }, +// { "example": "Boost-random", "toolchain": "gcc-14-cxx17-fpic", "os": "ubuntu-24.04" }, +{ "example": "Boost-random", "toolchain": "android-ndk-api-35-arm64-v8a-libcxx14", "os": "ubuntu-24.04" }, +// { "example": "Boost-random", "toolchain": "osx-15-4-arch-universal2-cxx17", "os": "macos-15" }, +{ "example": "Boost-random", "toolchain": "ios-nocodesign-17-5-arm64-cxx17", "os": "macos-15" }, +{ "example": "Boost-random", "toolchain": "ninja-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +// { "example": "Boost-random", "toolchain": "nmake-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +// { "example": "Boost-random", "toolchain": "vs-17-2022-win64-sdk-10-0-22000-0-cxx17", "os": "windows-2022" }, +// { "example": "Boost-random", "toolchain": "vs-17-2022-win64-store-10-cxx17", "os": "windows-2022" }, +{ "example": "Boost-random", "toolchain": "mingw-cxx17", "os": "windows-2022" }, +{ "example": "Boost-random", "toolchain": "msys-cxx17", "os": "windows-2022" }, -// { "example": "Boost-random", "toolchain": "clang-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-random", "toolchain": "gcc-7-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-random", "toolchain": "gcc-8-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-random", "toolchain": "gcc-9-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-random", "toolchain": "android-ndk-r17-api-24-arm64-v8a-clang-libcxx14", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-random", "toolchain": "osx-12-3-arch-universal2-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-random", "toolchain": "ios-nocodesign-15-5-arm64-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-random", "toolchain": "ninja-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -// { "example": "Boost-random", "toolchain": "nmake-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -// { "example": "Boost-random", "toolchain": "vs-16-2019-win64-sdk-10-0-18362-0-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-random", "toolchain": "mingw-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-random", "toolchain": "msys-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, +// Boost-redis all disabled -//{ "example": "Boost-redis", "toolchain": "clang-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-redis", "toolchain": "gcc-7-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-redis", "toolchain": "gcc-8-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-redis", "toolchain": "gcc-9-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -//{ "example": "Boost-redis", "toolchain": "android-ndk-r17-api-24-arm64-v8a-clang-libcxx14", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-redis", "toolchain": "osx-12-3-arch-universal2-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -//{ "example": "Boost-redis", "toolchain": "ios-nocodesign-15-5-arm64-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -//{ "example": "Boost-redis", "toolchain": "ninja-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -// { "example": "Boost-redis", "toolchain": "nmake-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -//{ "example": "Boost-redis", "toolchain": "vs-16-2019-win64-sdk-10-0-18362-0-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -//{ "example": "Boost-redis", "toolchain": "mingw-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -//{ "example": "Boost-redis", "toolchain": "msys-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, +// { "example": "Boost-serialization", "toolchain": "clang-cxx17", "os": "ubuntu-24.04" }, +// { "example": "Boost-serialization", "toolchain": "gcc-12-cxx17", "os": "ubuntu-24.04" }, +// { "example": "Boost-serialization", "toolchain": "gcc-13-cxx17-fpic", "os": "ubuntu-24.04" }, +{ "example": "Boost-serialization", "toolchain": "gcc-14-cxx17-fpic", "os": "ubuntu-24.04" }, +{ "example": "Boost-serialization", "toolchain": "android-ndk-api-35-arm64-v8a-libcxx14", "os": "ubuntu-24.04" }, +{ "example": "Boost-serialization", "toolchain": "osx-15-4-arch-universal2-cxx17", "os": "macos-15" }, +{ "example": "Boost-serialization", "toolchain": "ios-nocodesign-17-5-arm64-cxx17", "os": "macos-15" }, +// { "example": "Boost-serialization", "toolchain": "ninja-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +{ "example": "Boost-serialization", "toolchain": "nmake-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +// { "example": "Boost-serialization", "toolchain": "vs-17-2022-win64-sdk-10-0-22000-0-cxx17", "os": "windows-2022" }, +// { "example": "Boost-serialization", "toolchain": "vs-17-2022-win64-store-10-cxx17", "os": "windows-2022" }, +{ "example": "Boost-serialization", "toolchain": "mingw-cxx17", "os": "windows-2022" }, +{ "example": "Boost-serialization", "toolchain": "msys-cxx17", "os": "windows-2022" }, -// { "example": "Boost-serialization", "toolchain": "clang-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-serialization", "toolchain": "gcc-7-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-serialization", "toolchain": "gcc-8-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-serialization", "toolchain": "gcc-9-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-serialization", "toolchain": "android-ndk-r17-api-24-arm64-v8a-clang-libcxx14", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-serialization", "toolchain": "osx-12-3-arch-universal2-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-serialization", "toolchain": "ios-nocodesign-15-5-arm64-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-serialization", "toolchain": "ninja-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-serialization", "toolchain": "nmake-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -// { "example": "Boost-serialization", "toolchain": "vs-16-2019-win64-sdk-10-0-18362-0-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-serialization", "toolchain": "mingw-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-serialization", "toolchain": "msys-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, +{ "example": "Boost-stacktrace", "toolchain": "clang-cxx17", "os": "ubuntu-24.04" }, +// { "example": "Boost-stacktrace", "toolchain": "gcc-12-cxx17", "os": "ubuntu-24.04" }, +// { "example": "Boost-stacktrace", "toolchain": "gcc-13-cxx17-fpic", "os": "ubuntu-24.04" }, +// { "example": "Boost-stacktrace", "toolchain": "gcc-14-cxx17-fpic", "os": "ubuntu-24.04" }, +{ "example": "Boost-stacktrace", "toolchain": "android-ndk-api-35-arm64-v8a-libcxx14", "os": "ubuntu-24.04" }, +// { "example": "Boost-stacktrace", "toolchain": "osx-15-4-arch-universal2-cxx17", "os": "macos-15" }, +{ "example": "Boost-stacktrace", "toolchain": "ios-nocodesign-17-5-arm64-cxx17", "os": "macos-15" }, +{ "example": "Boost-stacktrace", "toolchain": "ninja-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +// { "example": "Boost-stacktrace", "toolchain": "nmake-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +{ "example": "Boost-stacktrace", "toolchain": "vs-17-2022-win64-sdk-10-0-22000-0-cxx17", "os": "windows-2022" }, +// { "example": "Boost-stacktrace", "toolchain": "vs-17-2022-win64-store-10-cxx17", "os": "windows-2022" }, +{ "example": "Boost-stacktrace", "toolchain": "mingw-cxx17", "os": "windows-2022" }, +{ "example": "Boost-stacktrace", "toolchain": "msys-cxx17", "os": "windows-2022" }, -{ "example": "Boost-stacktrace", "toolchain": "clang-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-stacktrace", "toolchain": "gcc-7-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-stacktrace", "toolchain": "gcc-8-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-stacktrace", "toolchain": "gcc-9-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-stacktrace", "toolchain": "android-ndk-r17-api-24-arm64-v8a-clang-libcxx14", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-stacktrace", "toolchain": "osx-12-3-arch-universal2-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-stacktrace", "toolchain": "ios-nocodesign-15-5-arm64-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-stacktrace", "toolchain": "ninja-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -// { "example": "Boost-stacktrace", "toolchain": "nmake-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-stacktrace", "toolchain": "vs-16-2019-win64-sdk-10-0-18362-0-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-stacktrace", "toolchain": "mingw-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-stacktrace", "toolchain": "msys-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, +// { "example": "Boost-thread", "toolchain": "clang-cxx17", "os": "ubuntu-24.04" }, +{ "example": "Boost-thread", "toolchain": "gcc-12-cxx17", "os": "ubuntu-24.04" }, +// { "example": "Boost-thread", "toolchain": "gcc-13-cxx17-fpic", "os": "ubuntu-24.04" }, +// { "example": "Boost-thread", "toolchain": "gcc-14-cxx17-fpic", "os": "ubuntu-24.04" }, +{ "example": "Boost-thread", "toolchain": "android-ndk-api-35-arm64-v8a-libcxx14", "os": "ubuntu-24.04" }, +// { "example": "Boost-thread", "toolchain": "osx-15-4-arch-universal2-cxx17", "os": "macos-15" }, +{ "example": "Boost-thread", "toolchain": "ios-nocodesign-17-5-arm64-cxx17", "os": "macos-15" }, +// { "example": "Boost-thread", "toolchain": "ninja-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +{ "example": "Boost-thread", "toolchain": "nmake-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +// { "example": "Boost-thread", "toolchain": "vs-17-2022-win64-sdk-10-0-22000-0-cxx17", "os": "windows-2022" }, +// { "example": "Boost-thread", "toolchain": "vs-17-2022-win64-store-10-cxx17", "os": "windows-2022" }, +{ "example": "Boost-thread", "toolchain": "mingw-cxx17", "os": "windows-2022" }, +{ "example": "Boost-thread", "toolchain": "msys-cxx17", "os": "windows-2022" }, -// { "example": "Boost-thread", "toolchain": "clang-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-thread", "toolchain": "gcc-7-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-thread", "toolchain": "gcc-8-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-thread", "toolchain": "gcc-9-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-thread", "toolchain": "android-ndk-r17-api-24-arm64-v8a-clang-libcxx14", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-thread", "toolchain": "osx-12-3-arch-universal2-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-thread", "toolchain": "ios-nocodesign-15-5-arm64-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-thread", "toolchain": "ninja-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-thread", "toolchain": "nmake-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -// { "example": "Boost-thread", "toolchain": "vs-16-2019-win64-sdk-10-0-18362-0-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-thread", "toolchain": "mingw-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-thread", "toolchain": "msys-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, - -// { "example": "Boost-url", "toolchain": "clang-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-url", "toolchain": "gcc-7-cxx17", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-url", "toolchain": "gcc-8-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-url", "toolchain": "gcc-9-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-url", "toolchain": "android-ndk-r17-api-24-arm64-v8a-clang-libcxx14", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-url", "toolchain": "osx-12-3-arch-universal2-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -{ "example": "Boost-url", "toolchain": "ios-nocodesign-15-5-arm64-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, -// { "example": "Boost-url", "toolchain": "ninja-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-url", "toolchain": "nmake-vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -// { "example": "Boost-url", "toolchain": "vs-16-2019-win64-sdk-10-0-18362-0-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-url", "toolchain": "mingw-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, -{ "example": "Boost-url", "toolchain": "msys-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" } +// { "example": "Boost-url", "toolchain": "clang-cxx17", "os": "ubuntu-24.04" }, +{ "example": "Boost-url", "toolchain": "gcc-12-cxx17", "os": "ubuntu-24.04" }, +// { "example": "Boost-url", "toolchain": "gcc-13-cxx17-fpic", "os": "ubuntu-24.04" }, +// { "example": "Boost-url", "toolchain": "gcc-14-cxx17-fpic", "os": "ubuntu-24.04" }, +{ "example": "Boost-url", "toolchain": "android-ndk-api-35-arm64-v8a-libcxx14", "os": "ubuntu-24.04" }, +// { "example": "Boost-url", "toolchain": "osx-15-4-arch-universal2-cxx17", "os": "macos-15" }, +{ "example": "Boost-url", "toolchain": "ios-nocodesign-17-5-arm64-cxx17", "os": "macos-15" }, +// { "example": "Boost-url", "toolchain": "ninja-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +{ "example": "Boost-url", "toolchain": "nmake-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +// { "example": "Boost-url", "toolchain": "vs-17-2022-win64-sdk-10-0-22000-0-cxx17", "os": "windows-2022" }, +// { "example": "Boost-url", "toolchain": "vs-17-2022-win64-store-10-cxx17", "os": "windows-2022" }, +{ "example": "Boost-url", "toolchain": "mingw-cxx17", "os": "windows-2022" }, +{ "example": "Boost-url", "toolchain": "msys-cxx17", "os": "windows-2022" } ] diff --git a/cmake/projects/filament/ci/build.sh b/cmake/projects/filament/ci/build.sh old mode 100644 new mode 100755 index 0ea8a11abc..a23fb691df --- a/cmake/projects/filament/ci/build.sh +++ b/cmake/projects/filament/ci/build.sh @@ -1,4 +1,3 @@ +#!/bin/sh # Install packages sudo apt-get install -y libgl1-mesa-dev - -bash .github/workflows/ci/build.sh diff --git a/cmake/projects/filament/ci/matrix.json b/cmake/projects/filament/ci/matrix.json index f08eee2b58..d5c96e41dc 100644 --- a/cmake/projects/filament/ci/matrix.json +++ b/cmake/projects/filament/ci/matrix.json @@ -1,6 +1,6 @@ [ - { "example": "filament", "toolchain": "clang-libcxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, - { "example": "filament", "toolchain": "osx-12-3-arch-universal2-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, - { "example": "filament", "toolchain": "ios-nocodesign-15-5-arm64-cxx17", "os": "macos-12", "python": "3.8", "script": "build.sh" }, - { "example": "filament", "toolchain": "vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" } +{ "example": "filament", "toolchain": "clang-libcxx17-fpic", "os": "ubuntu-24.04" }, +{ "example": "filament", "toolchain": "osx-15-4-arch-universal2-cxx17", "os": "macos-15" }, +{ "example": "filament", "toolchain": "ios-nocodesign-17-5-arm64-cxx17", "os": "macos-15" }, +{ "example": "filament", "toolchain": "ninja-vs-17-2022-win64-cxx17", "os": "windows-2022" } ] diff --git a/cmake/projects/freetype-gl/ci/build.sh b/cmake/projects/freetype-gl/ci/build.sh old mode 100644 new mode 100755 index 0ea8a11abc..a23fb691df --- a/cmake/projects/freetype-gl/ci/build.sh +++ b/cmake/projects/freetype-gl/ci/build.sh @@ -1,4 +1,3 @@ +#!/bin/sh # Install packages sudo apt-get install -y libgl1-mesa-dev - -bash .github/workflows/ci/build.sh diff --git a/cmake/projects/freetype-gl/ci/matrix.json b/cmake/projects/freetype-gl/ci/matrix.json deleted file mode 100644 index b42717ef57..0000000000 --- a/cmake/projects/freetype-gl/ci/matrix.json +++ /dev/null @@ -1,16 +0,0 @@ -[ - { "example": "freetype-gl", "toolchain": "clang-cxx17", "os": "ubuntu-16.04", "python": "3.8", "script": "build.sh" }, - { "example": "freetype-gl", "toolchain": "gcc-7-cxx17", "os": "ubuntu-16.04", "python": "3.8", "script": "build.sh" }, - { "example": "freetype-gl", "toolchain": "gcc-8-cxx17-fpic", "os": "ubuntu-18.04", "python": "3.8", "script": "build.sh" }, - { "example": "freetype-gl", "toolchain": "gcc-9-cxx17-fpic", "os": "ubuntu-20.04", "python": "3.8", "script": "build.sh" }, - { "example": "freetype-gl", "toolchain": "sanitize-address-cxx17", "os": "ubuntu-16.04", "python": "3.8", "script": "build.sh" }, - { "example": "freetype-gl", "toolchain": "sanitize-leak-cxx17", "os": "ubuntu-16.04", "python": "3.8", "script": "build.sh" }, - { "example": "freetype-gl", "toolchain": "sanitize-thread-cxx17", "os": "ubuntu-16.04", "python": "3.8", "script": "build.sh" }, - { "example": "freetype-gl", "toolchain": "ninja-vs-15-2017-win64-cxx17", "os": "windows-2016", "python": "3.8", "script": "build.cmd" }, - { "example": "freetype-gl", "toolchain": "nmake-vs-15-2017-win64-cxx17", "os": "windows-2016", "python": "3.8", "script": "build.cmd" }, - { "example": "freetype-gl", "toolchain": "vs-16-2019-win64-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, - { "example": "freetype-gl", "toolchain": "vs-15-2017-win64-cxx17", "os": "windows-2016", "python": "3.8", "script": "build.cmd" }, - { "example": "freetype-gl", "toolchain": "vs-14-2015-sdk-8-1", "os": "windows-2016", "python": "3.8", "script": "build.cmd" }, - { "example": "freetype-gl", "toolchain": "mingw-cxx17", "os": "windows-2016", "python": "3.8", "script": "build.cmd" }, - { "example": "freetype-gl", "toolchain": "msys-cxx17", "os": "windows-2016", "python": "3.8", "script": "build.cmd" } -] diff --git a/cmake/projects/occt/ci/build.sh b/cmake/projects/occt/ci/build.sh old mode 100644 new mode 100755 index 3440f03de6..eceb99b867 --- a/cmake/projects/occt/ci/build.sh +++ b/cmake/projects/occt/ci/build.sh @@ -1,7 +1,8 @@ +#!/bin/sh # Install additional dependencies: if [ "$(uname)" == "Darwin" ]; then - # OSX + # OSX : elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then # GNU/Linux @@ -14,7 +15,3 @@ elif [ "$(expr substr $(uname -s) 1 10)" == "MINGW64_NT" ]; then # Windows x64 : fi - - -# Run normal build script: -source ./.github/workflows/ci/build.sh diff --git a/cmake/projects/pthreads-win32/ci/matrix.json b/cmake/projects/pthreads-win32/ci/matrix.json index b81053482c..6ca3700498 100644 --- a/cmake/projects/pthreads-win32/ci/matrix.json +++ b/cmake/projects/pthreads-win32/ci/matrix.json @@ -1,7 +1,5 @@ [ - { "example": "pthreads-win32", "toolchain": "ninja-vs-15-2017-win64-cxx17", "os": "windows-2016", "python": "3.8", "script": "build.cmd" }, - { "example": "pthreads-win32", "toolchain": "nmake-vs-15-2017-win64-cxx17", "os": "windows-2016", "python": "3.8", "script": "build.cmd" }, - { "example": "pthreads-win32", "toolchain": "vs-16-2019-win64-sdk-10-0-18362-0-cxx17", "os": "windows-2019", "python": "3.8", "script": "build.cmd" }, - { "example": "pthreads-win32", "toolchain": "vs-15-2017-win64-cxx17", "os": "windows-2016", "python": "3.8", "script": "build.cmd" }, - { "example": "pthreads-win32", "toolchain": "vs-14-2015-sdk-8-1", "os": "windows-2016", "python": "3.8", "script": "build.cmd" } +{ "example": "pthreads-win32", "toolchain": "ninja-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +{ "example": "pthreads-win32", "toolchain": "nmake-vs-17-2022-win64-cxx17", "os": "windows-2022" }, +{ "example": "pthreads-win32", "toolchain": "vs-17-2022-win64-sdk-10-0-22000-0-cxx17", "os": "windows-2022" } ] diff --git a/docs/creating-new/test/ci.rst b/docs/creating-new/test/ci.rst index 9b5ad595ab..282818cab3 100644 --- a/docs/creating-new/test/ci.rst +++ b/docs/creating-new/test/ci.rst @@ -91,11 +91,13 @@ Each line defines parameters for a job that will run on `GitHub-hosted runner `__ toolchain * **os** - `Supported GitHub-hosted runner `__. Set this according to toolchain. -* **python** - Python version installed on the runner. +* **python** - Override Python version used for job. Change this if your project uses Python scripts (that require specific Python version) for testing. -* **script** - Build script executed on the runner. - The path of the script is relative to directory where ``matrix.json`` is located. - If the script with defined name was not found in this path, default path ``.github/workflows/ci`` will be used. +* **script** - Script executed before ``build.py`` calls ``cmake`` on the runner. + The path of the script is relative to the directory where ``matrix.json`` is located. + If the script with defined name was not found in this path ``set_matrix.py`` raises an exception. + If no script override is specified a ``build.sh`` (Ubuntu and macOS) or ``build.cmd`` (Windows) + is used when located next to the projects ``matrix.json``. **Example matrix override:** @@ -104,12 +106,12 @@ A part of ``cmake/projects/Boost/ci/matrix.json``: .. code-block:: json [ - { "example": "Boost", "toolchain": "clang-cxx17", "os": "ubuntu-16.04", "python": "3.8", "script": "build.sh" }, - { "example": "Boost-python", "toolchain": "gcc-7-cxx17", "os": "ubuntu-16.04", "python": "3.5", "script": "build.sh" }, - { "example": "Boost-python-numpy", "toolchain": "gcc-7-cxx17", "os": "ubuntu-16.04", "python": "3.5", "script": "build-add-virtualenv.sh" }, - { "example": "Boost", "toolchain": "vs-15-2017-win64-cxx17", "os": "windows-2016", "python": "3.8", "script": "build.cmd" }, - { "example": "Boost-python", "toolchain": "vs-14-2015-win64-sdk-8-1", "os": "windows-2016", "python": "3.5", "script": "build.cmd" }, - { "example": "Boost-python-numpy", "toolchain": "vs-14-2015-win64-sdk-8-1", "os": "windows-2016", "python": "3.5", "script": "build-add-virtualenv.cmd" } + { "example": "Boost", "toolchain": "clang-cxx17", "os": "ubuntu-24.04" }, + { "example": "Boost-python", "toolchain": "gcc-13-cxx17", "os": "ubuntu-24.04", "script": "build.sh" }, + { "example": "Boost-python-numpy", "toolchain": "gcc-13-cxx17", "os": "ubuntu-24.04", "python": "3.12", "script": "build-add-virtualenv.sh" }, + { "example": "Boost", "toolchain": "vs-17-2022-win64-cxx17", "os": "windows-2022" }, + { "example": "Boost-python", "toolchain": "vs-17-2022-win64-sdk-10", "os": "windows-2022" }, + { "example": "Boost-python-numpy", "toolchain": "vs-17-2022-win64-sdk-10", "os": "windows-2022", "python": "3.12", "script": "build-add-virtualenv.cmd" } ] Build scripts @@ -123,22 +125,12 @@ Environment variables: * **TOOLCHAIN** - build matrix's **toolchain** parameter * **PROJECT_DIR** - **example** parameter +* **SCRIPT** - full path to file defined by **script** parameter, called by ``build.py`` before build -Default build script for Ubuntu and macOS runners is ``.github/workflows/ci/build.sh`` (bash script) +Default build script for all runners is ``.github/workflows/ci/build.py`` (python script) -.. literalinclude:: ../../../.github/workflows/ci/build.sh - :language: BASH - -Default build script for Windows runner - ``.github/workflows/ci/build.cmd`` (batch file) is similar. - -* installs `Polly `__ and all necessary dependencies -* defines default environment variables -* runs ``jenkins.py`` script to :ref:`test building of a project `. - -.. warning:: - If you don't need to alter Polly installation or predefined environment variables, - don't copy and modify default script. Instead call the default script from your custom script, - see example. +.. literalinclude:: ../../../.github/workflows/ci/build.py + :language: PYTHON **Examples of override build scripts:** @@ -153,8 +145,6 @@ for Ubuntu runner ``cmake/projects//ci/build-ubuntu.sh``: pip install virtualenv sudo apt-get install libgl1-mesa-dev - bash .github/workflows/ci/build.sh - for macOS ``cmake/projects//ci/build-macos.sh`` .. code-block:: bash @@ -162,13 +152,9 @@ for macOS ``cmake/projects//ci/build-macos.sh`` export HUNTER_JOBS_NUMBER=1 pip install virtualenv - bash .github/workflows/ci/build.sh - for Windows ``cmake/projects//ci/build.cmd``: .. code-block:: batch set HUNTER_JOBS_NUMBER=1 pip install virtualenv - - .github/workflows/ci/build.cmd diff --git a/jenkins.py b/jenkins.py deleted file mode 100755 index 7f9eec415a..0000000000 --- a/jenkins.py +++ /dev/null @@ -1,262 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright (c) 2014, Ruslan Baratov -# All rights reserved. - -# https://github.com/cpp-pm/polly/wiki/Jenkins - -import argparse -import hashlib -import os -import shutil -import subprocess -import sys -import tarfile -import tempfile -import time - -def clear_except_download(hunter_root): - base_dir = os.path.join(hunter_root, '_Base') - if os.path.exists(base_dir): - print('Clearing directory: {}'.format(base_dir)) - hunter_download_dir = os.path.join(base_dir, 'Download', 'Hunter') - if os.path.exists(hunter_download_dir): - shutil.rmtree(hunter_download_dir) - for filename in os.listdir(base_dir): - if filename != 'Download': - to_remove = os.path.join(base_dir, filename) - if os.name == 'nt': - # Fix "path too long" error - subprocess.check_call(['cmd', '/c', 'rmdir', to_remove, '/S', '/Q']) - else: - shutil.rmtree(to_remove) - -def run(): - parser = argparse.ArgumentParser("Testing script") - parser.add_argument( - '--nocreate', - action='store_true', - help='Do not create Hunter archive (reusing old)' - ) - parser.add_argument( - '--all-release', - action='store_true', - help='Release build type for all 3rd party packages' - ) - parser.add_argument( - '--clear', - action='store_true', - help='Remove old testing directories' - ) - parser.add_argument( - '--clear-except-download', - action='store_true', - help='Remove old testing directories except `Download` directory' - ) - parser.add_argument( - '--disable-builds', - action='store_true', - help='Disable building of package (useful for checking package can be loaded from cache)' - ) - parser.add_argument( - '--upload', - action='store_true', - help='Upload cache to server and run checks (clean up will be triggered, same as --clear-except-download)' - ) - - parsed_args = parser.parse_args() - - if parsed_args.upload: - password = os.getenv('GITHUB_USER_PASSWORD') - if password is None: - sys.exit('Expected environment variable GITHUB_USER_PASSWORD on uploading') - - cdir = os.getcwd() - hunter_root = cdir - - toolchain = os.getenv('TOOLCHAIN') - if not toolchain: - sys.exit('Environment variable TOOLCHAIN is empty') - - project_dir = os.getenv('PROJECT_DIR') - if not project_dir: - sys.exit('Expected environment variable PROJECT_DIR') - - ci = os.getenv('TRAVIS') or os.getenv('APPVEYOR') - if (ci and toolchain == 'dummy'): - print('Skip build: CI dummy (workaround)') - sys.exit(0) - - verbose = True - env_verbose = os.getenv('VERBOSE') - if env_verbose: - if env_verbose == '0': - verbose = False - elif env_verbose == '1': - verbose = True - else: - sys.exit( - 'Environment variable VERBOSE: expected 0 or 1, got "{}"'.format( - env_verbose - ) - ) - - project_dir = os.path.join(cdir, project_dir) - project_dir = os.path.normpath(project_dir) - - testing_dir = os.path.join(os.getcwd(), '_testing') - if os.path.exists(testing_dir) and parsed_args.clear: - print('REMOVING: {}'.format(testing_dir)) - shutil.rmtree(testing_dir) - os.makedirs(testing_dir, exist_ok=True) - - if os.name == 'nt': - # path too long workaround - hunter_junctions = os.getenv('HUNTER_JUNCTIONS') - if hunter_junctions: - temp_dir = tempfile.mkdtemp(dir=hunter_junctions) - shutil.rmtree(temp_dir) - subprocess.check_output( - "cmd /c mklink /J {} {}".format(temp_dir, testing_dir) - ) - testing_dir = temp_dir - - hunter_url = os.path.join(testing_dir, 'hunter.tar.gz') - - if parsed_args.nocreate: - if not os.path.exists(hunter_url): - sys.exit('Option `--nocreate` but no archive') - else: - arch = tarfile.open(hunter_url, 'w:gz') - arch.add('cmake') - arch.add('scripts') - arch.close() - - hunter_sha1 = hashlib.sha1(open(hunter_url, 'rb').read()).hexdigest() - - hunter_root = os.path.join(testing_dir, 'Hunter') - - if parsed_args.clear_except_download: - clear_except_download(hunter_root) - - if os.name == 'nt': - which = 'where' - else: - which = 'which' - - polly_root = os.getenv('POLLY_ROOT') - if polly_root: - polly_root = os.path.abspath(polly_root) - print('Using POLLY_ROOT: {}'.format(polly_root)) - build_script = os.path.join(polly_root, 'bin', 'build.py') - else: - build_script = subprocess.check_output( - [which, 'build.py'], universal_newlines=True - ).split('\n')[0] - - if not os.path.exists(build_script): - sys.exit('Script not found: {}'.format(build_script)) - - print('Testing in: {}'.format(testing_dir)) - os.chdir(testing_dir) - - args = [ - sys.executable, - build_script, - '--clear', - '--config', - 'Release', - '--toolchain', - toolchain, - '--home', - project_dir, - '--fwd', - 'CMAKE_POLICY_DEFAULT_CMP0069=NEW', - 'HUNTER_SUPPRESS_LIST_OF_FILES=ON', - 'HUNTER_ROOT={}'.format(hunter_root), - 'TESTING_URL={}'.format(hunter_url), - 'TESTING_SHA1={}'.format(hunter_sha1) - ] - - if not parsed_args.nocreate: - args += ['HUNTER_RUN_INSTALL=ON'] - - if parsed_args.disable_builds: - args += ['HUNTER_DISABLE_BUILDS=ON'] - - if parsed_args.all_release: - args += ['HUNTER_CONFIGURATION_TYPES=Release'] - - if parsed_args.upload: - passwords = os.path.join( - cdir, 'maintenance', 'upload-password-template.cmake' - ) - args += ['HUNTER_RUN_UPLOAD=ON'] - args += ['HUNTER_PASSWORDS_PATH={}'.format(passwords)] - - args += ['--verbose'] - if not verbose: - args += ['--discard', '10'] - args += ['--tail', '200'] - - print('Execute command: [') - for i in args: - print(' `{}`'.format(i)) - print(']') - - subprocess.check_call(args) - - cache_retry_count = 0 - max_cache_retry_count = 5 - - if parsed_args.upload: - seconds = 60 - print( - 'Wait for GitHub changes became visible ({} seconds)...'.format(seconds) - ) - time.sleep(seconds) - - print('Run sanity build') - - clear_except_download(hunter_root) - - # Sanity check - run build again with disabled building from sources - args = [ - sys.executable, - build_script, - '--clear', - '--verbose', - '--config', - 'Release', - '--toolchain', - toolchain, - '--home', - project_dir, - '--fwd', - 'HUNTER_DISABLE_BUILDS=ON', - 'HUNTER_USE_CACHE_SERVERS=ONLY', - 'CMAKE_POLICY_DEFAULT_CMP0069=NEW', - 'HUNTER_SUPPRESS_LIST_OF_FILES=ON', - 'HUNTER_ROOT={}'.format(hunter_root), - 'TESTING_URL={}'.format(hunter_url), - 'TESTING_SHA1={}'.format(hunter_sha1) - ] - if not verbose: - args += ['--discard', '10'] - args += ['--tail', '200'] - - print('Execute command: [') - for i in args: - print(' `{}`'.format(i)) - print(']') - - while subprocess.call(args) and cache_retry_count < max_cache_retry_count: - print('Cache-only sanity check attempt {} failed...'.format(cache_retry_count)) - time.sleep(seconds) - cache_retry_count += 1 - - if cache_retry_count >= max_cache_retry_count: - exit(1) - -if __name__ == "__main__": - run()