Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
135 changes: 135 additions & 0 deletions .github/workflows/install.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
name: Install

on:
push:
branches:
- master
- main
pull_request:
branches:
- master
- main

permissions: read-all

jobs:
header-only-ubuntu:
name: Header-only / Ubuntu
runs-on: ubuntu-24.04

steps:
- uses: actions/checkout@v7

- name: Build and install header-only package
run: |
cmake -S . -B build-install \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX="${RUNNER_TEMP}/configured-install" \
-DMAGIC_ENUM_OPT_BUILD_EXAMPLES=OFF \
-DMAGIC_ENUM_OPT_BUILD_TESTS=OFF \
-DMAGIC_ENUM_OPT_VERIFY_INTERFACE_HEADER_SETS=ON
cmake --build build-install \
--target magic_enum_verify_interface_header_sets \
--parallel
cmake --install build-install --prefix "${RUNNER_TEMP}/magic_enum"

- name: Test installed CMake package
run: |
cmake -S . -B build-installed-cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_PREFIX_PATH="${RUNNER_TEMP}/magic_enum" \
-DMAGIC_ENUM_OPT_TEST_INSTALLED_VERSION=ON
cmake --build build-installed-cmake --parallel
ctest --test-dir build-installed-cmake --output-on-failure --no-tests=error

- name: Test installed pkg-config package
run: |
cmake -S . -B build-installed-pkgconfig \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_PREFIX_PATH="${RUNNER_TEMP}/magic_enum" \
-DMAGIC_ENUM_OPT_TEST_INSTALLED_VERSION_PKGCONFIG=ON
cmake --build build-installed-pkgconfig --parallel
ctest --test-dir build-installed-pkgconfig --output-on-failure --no-tests=error

module-macos-gcc:
name: Module / macOS / GCC 16 / fmt::fmt / C++20
runs-on: macos-15
env:
CC: gcc-16
CXX: g++-16

steps:
- uses: actions/checkout@v7

- name: Checkout fmt
uses: actions/checkout@v7
with:
repository: fmtlib/fmt
path: fmt-src

- name: Install toolchain and fmt
run: |
brew install gcc ninja
python3 -m pip install cmake==4.4.0 --break-system-packages
cmake -S fmt-src -B build-fmt -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CXX_COMPILER="${CXX}" \
-DCMAKE_CXX_STANDARD=20 \
-DCMAKE_CXX_STANDARD_REQUIRED=ON \
-DCMAKE_CXX_SCAN_FOR_MODULES=OFF \
-DCMAKE_INSTALL_PREFIX="${RUNNER_TEMP}/fmt" \
-DBUILD_SHARED_LIBS=OFF \
-DFMT_DOC=OFF \
-DFMT_MODULE=OFF \
-DFMT_TEST=OFF
cmake --build build-fmt --parallel
cmake --install build-fmt

- name: Build and test installed module package
run: |
fmt_prefix="${RUNNER_TEMP}/fmt"
cmake -S . -B build-module -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CXX_STANDARD=20 \
-DCMAKE_CXX_STANDARD_REQUIRED=ON \
-DCMAKE_CXX_EXTENSIONS=OFF \
-DCMAKE_PREFIX_PATH="${fmt_prefix}" \
-DMAGIC_ENUM_USE_MODULES=ON \
-DMAGIC_ENUM_MODULE_WITH_FMT=ON \
-DMAGIC_ENUM_OPT_BUILD_TESTS=ON \
-DMAGIC_ENUM_OPT_BUILD_EXAMPLES=ON
cmake --build build-module --parallel
cmake --build build-module \
--target magic_enum_verify_interface_header_sets \
--parallel
ctest --test-dir build-module \
--output-on-failure \
--no-tests=error \
-R '^(test_module(_aliases|_wchar_t)?-cpp20|installed-module-consumer)$'

module-windows-msvc:
name: Module / Windows / VS 2026 / C++20
runs-on: windows-2025-vs2026

steps:
- uses: actions/checkout@v7
- uses: ilammy/msvc-dev-cmd@v1

- name: Install pinned CMake
shell: pwsh
run: python -m pip install cmake==4.3.4

- name: Build and test installed module package
shell: pwsh
run: |
cmake -S . -B build-module -G Ninja `
-DCMAKE_BUILD_TYPE=Release `
-DCMAKE_CXX_STANDARD=20 `
-DCMAKE_CXX_STANDARD_REQUIRED=ON `
-DCMAKE_CXX_EXTENSIONS=OFF `
-DMAGIC_ENUM_USE_MODULES=ON `
-DMAGIC_ENUM_OPT_BUILD_TESTS=ON `
-DMAGIC_ENUM_OPT_BUILD_EXAMPLES=ON
cmake --build build-module --parallel
cmake --build build-module --parallel --target magic_enum_verify_interface_header_sets
ctest --test-dir build-module --output-on-failure --no-tests=error -R '^(test_module(_aliases|_wchar_t)?-cpp20|installed-module-consumer)$'
6 changes: 3 additions & 3 deletions .github/workflows/macos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ jobs:
fail-fast: false
matrix:
os:
- macos-14 # https://github.com/actions/runner-images/blob/main/images/macos/macos-14-Readme.md#xcode (Apple Silicon M1)
- macos-15 # https://github.com/actions/runner-images/blob/main/images/macos/macos-15-Readme.md#xcode (Apple Silicon M2)
- macos-15 # https://github.com/actions/runner-images/blob/main/images/macos/macos-15-Readme.md#xcode
- macos-26 # https://github.com/actions/runner-images/blob/main/images/macos/macos-26-Readme.md#xcode
build_type: [Release, Debug]

name: "${{ matrix.os }} / ${{ matrix.build_type }}"
Expand All @@ -27,4 +27,4 @@ jobs:
run: cmake --build build --parallel --config ${{ matrix.build_type }}

- name: Test
run: ctest --test-dir build --output-on-failure -C ${{ matrix.build_type }}
run: ctest --test-dir build --output-on-failure --no-tests=error -C ${{ matrix.build_type }}
44 changes: 24 additions & 20 deletions .github/workflows/ubuntu.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ jobs:
- { cc: "clang-17", cxx: "clang++-17", os: "ubuntu-24.04", nonascii: "FALSE", modules: "FALSE", import_std: "FALSE" }
- { cc: "clang-18", cxx: "clang++-18", os: "ubuntu-24.04", nonascii: "FALSE", modules: "FALSE", import_std: "FALSE" }
- { cc: "clang-19", cxx: "clang++-19", os: "ubuntu-24.04", nonascii: "FALSE", modules: "FALSE", import_std: "FALSE" }
- { cc: "clang-19", cxx: "clang++-19", os: "ubuntu-24.04", nonascii: "FALSE", modules: "TRUE", import_std: "FALSE" }
- { cc: "clang-19", cxx: "clang++-19", os: "ubuntu-24.04", nonascii: "FALSE", modules: "TRUE", import_std: "TRUE" }
- { cc: "clang-20", cxx: "clang++-20", os: "ubuntu-24.04", nonascii: "FALSE", modules: "FALSE", import_std: "FALSE" }
- { cc: "clang-20", cxx: "clang++-20", os: "ubuntu-24.04", nonascii: "FALSE", modules: "TRUE", import_std: "FALSE" }
Expand All @@ -49,8 +48,11 @@ jobs:
clang_version="${{ matrix.compiler.cc }}"
clang_version="${clang_version#clang-}"
ubuntu_codename="$(lsb_release -cs)"
llvm_repository="http://apt.llvm.org/${ubuntu_codename}/"
llvm_suite="llvm-toolchain-${ubuntu_codename}-${clang_version}"

echo "deb [signed-by=/etc/apt/keyrings/llvm-archive-keyring.gpg] http://apt.llvm.org/${ubuntu_codename}/ llvm-toolchain-${ubuntu_codename}-${clang_version} main" | sudo tee /etc/apt/sources.list.d/llvm.list
echo "deb [signed-by=/etc/apt/keyrings/llvm-archive-keyring.gpg] ${llvm_repository} ${llvm_suite} main" \
| sudo tee /etc/apt/sources.list.d/llvm.list
sudo apt update
sudo apt install -y ${{ matrix.compiler.cc }}

Expand All @@ -70,13 +72,14 @@ jobs:
sudo apt update
sudo apt install -y ${{ matrix.compiler.cxx }}

- name: Install fmt
if: ${{ matrix.compiler.cc == 'gcc-13' }}
run: sudo apt install -y libfmt-dev

- name: Install CMake (latest)
- name: Install pinned CMake
if: ${{ matrix.compiler.modules == 'TRUE' }}
run: pip install cmake --upgrade --break-system-packages
run: |
if [[ "${{ matrix.compiler.import_std }}" == "TRUE" ]]; then
pip install cmake==4.4.0 --break-system-packages
else
pip install cmake==4.3.4 --break-system-packages
fi

- name: Configure Release
run: |
Expand All @@ -90,7 +93,7 @@ jobs:
run: cmake --build build-release --parallel --config Release

- name: Test Release
run: ctest --test-dir build-release --output-on-failure -C Release
run: ctest --test-dir build-release --output-on-failure --no-tests=error -C Release

- name: Configure Debug
run: |
Expand All @@ -104,27 +107,28 @@ jobs:
run: cmake --build build-debug --parallel --config Debug

- name: Test Debug
run: ctest --test-dir build-debug --output-on-failure -C Debug
run: ctest --test-dir build-debug --output-on-failure --no-tests=error -C Debug

- name: Configure with `import std;`
if: ${{ matrix.compiler.import_std == 'TRUE' }}
run: |
stdlib_options=()
if [[ "${{ matrix.compiler.cc }}" == clang-* ]]; then
stdlib_options+=("-DCMAKE_CXX_FLAGS:STRING=-stdlib=libc++")
else
stdlib_options+=("-DCMAKE_CXX_STDLIB_MODULES_JSON=$("${CXX}" -print-file-name=libstdc++.modules.json)")
cxx_standard=23
stdlib_options=(-DCMAKE_CXX_FLAGS:STRING=-stdlib=libc++)
if [[ "${{ matrix.compiler.cc }}" == gcc-* ]]; then
cxx_standard=26
stdlib_options=(-DCMAKE_CXX_STDLIB_MODULES_JSON="$("${CXX}" -print-file-name=libstdc++.modules.json)")
fi

cmake -S . -B build-import-std \
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_EXPERIMENTAL_CXX_IMPORT_STD=f35a9ac6-8463-4d38-8eec-5d6008153e7d \
-DMAGIC_ENUM_USE_MODULES:BOOL=TRUE \
-GNinja \
-DCMAKE_CXX_MODULE_STD=ON \
-DCMAKE_CXX_STANDARD=23 \
-DCMAKE_CXX_STANDARD="${cxx_standard}" \
-DCMAKE_CXX_STANDARD_REQUIRED=ON \
-DCMAKE_CXX_EXTENSIONS=OFF \
-DMAGIC_ENUM_USE_MODULES:BOOL=TRUE \
-DMAGIC_ENUM_MODULE_IMPORT_STD:BOOL=TRUE \
-DMAGIC_ENUM_MODULE_WITH_FMT:BOOL=FALSE \
-GNinja \
"${stdlib_options[@]}"

- name: Build with `import std;`
Expand All @@ -133,7 +137,7 @@ jobs:

- name: Test with `import std;`
if: ${{ matrix.compiler.import_std == 'TRUE' }}
run: ctest --test-dir build-import-std --output-on-failure -C Debug
run: ctest --test-dir build-import-std --output-on-failure --no-tests=error -C Debug

bazel:
name: Bazel
Expand Down
94 changes: 0 additions & 94 deletions .github/workflows/ubuntu_test_installed_version.yml

This file was deleted.

2 changes: 1 addition & 1 deletion .github/workflows/windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,4 @@ jobs:
run: cmake --build build --parallel --config ${{ matrix.build_type }}

- name: Test
run: ctest --test-dir build --output-on-failure -C ${{ matrix.build_type }}
run: ctest --test-dir build --output-on-failure --no-tests=error -C ${{ matrix.build_type }}
Loading
Loading