Skip to content

Commit

Permalink
Add support for building with Meson (#2530)
Browse files Browse the repository at this point in the history
The Meson[1] build system makes it easier incorporate third-party
libaries into a project if they also build using Meson.

Let's add a minimal Meson build that's compatible with the CMake build,
along with a GitHub workflow to check that it builds and that at least
the simplest SelfTest runs.

The handling of catch_user_config.hpp is inspired by BUILD.bazel and
doesn't attempt to support any configuratons options. Such features
could be added later.

Meson strongly discourages using wildcards to specify sources, so the
source and header lists are copied from CMakeLists.txt.

Add a new test workflow to test the Meson builds. I was unable to get
these tests to pass with Ubuntu 20.04, so they use Ubuntu 22.04.

I'm neither a CMake nor a Meson expert, but the results seem to work for
me.

[1] https://mesonbuild.com/

Co-authored-by: Mike Crowe <[email protected]>
  • Loading branch information
mikecrowe and mikecrowe authored Oct 1, 2022
1 parent 4a7cefe commit 4db8b50
Show file tree
Hide file tree
Showing 6 changed files with 501 additions and 0 deletions.
43 changes: 43 additions & 0 deletions .github/workflows/linux-meson-builds.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
name: Linux builds (basic) using meson build system

on: [push, pull_request]

jobs:
build:
name: meson ${{matrix.cxx}}, C++${{matrix.std}}, ${{matrix.build_type}}
runs-on: ubuntu-22.04
strategy:
matrix:
cxx:
- g++-11
- clang++-11
build_type: [debug, release]
std: [14, 17]
include:
- cxx: clang++-11
other_pkgs: clang-11

steps:
- uses: actions/checkout@v2

- name: Prepare environment
run: sudo apt-get install -y meson ninja-build ${{matrix.other_pkgs}}

- name: Configure build
env:
CXX: ${{matrix.cxx}}
CXXFLAGS: -std=c++${{matrix.std}} ${{matrix.cxxflags}}
# Note: $GITHUB_WORKSPACE is distinct from ${{runner.workspace}}.
# This is important
run: |
meson -Dbuildtype=${{matrix.build_type}} ${{runner.workspace}}/meson-build
- name: Build tests + lib
working-directory: ${{runner.workspace}}/meson-build
run: ninja

- name: Run tests
working-directory: ${{runner.workspace}}/meson-build
# Hardcode 2 cores we know are there
run: |
meson test --verbose
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
*.build
!meson.build
*.pbxuser
*.mode1v3
*.ncb
Expand Down
17 changes: 17 additions & 0 deletions meson.build
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Copyright Catch2 Authors
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# https://www.boost.org/LICENSE_1_0.txt)

# SPDX-License-Identifier: BSL-1.0

project(
'catch2',
'cpp',
version : '3.1.0', # CML version placeholder, don't delete
license: 'BSL-1.0',
meson_version: '>=0.49.0'
)

subdir('src/catch2')
subdir('tests')
Loading

0 comments on commit 4db8b50

Please sign in to comment.