Commit e8265f910271466de5becabde45ce8a218029607
Committed by
GitHub
1 parent
25655940
meson: add support for testsuite (#701)
* meson: add support for testsuite * meson: fix deprecation warning for run_command with unchecked return code This would implicitly default to false, so if something bizarre happened and the command errored out, meson would consider that fine. Now meson emits a warning about this deprecated legacy behavior, suggests that it will eventually change, and, most importantly, prevents a warning-free build. Suppress the warning by manually specifying the sensible behavior, which is to fail on errors. * meson: download catch2 on demand if a system version is unavailable Produced by running `meson wrap install catch2` and checking the results into git. No modifications to the build files are expected; this makes use of https://mesonbuild.com/Wrap-dependency-system-manual.html#provide-section * style: pre-commit.ci fixes * ci: add meson build to the CI * ci: meson doesn't depend on ninja or or have a ninja extra * ci: minor cleanup to Meson job Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Henry Schreiner <henryschreineriii@gmail.com>
Showing
5 changed files
with
122 additions
and
2 deletions
.github/workflows/tests.yml
| @@ -45,6 +45,24 @@ jobs: | @@ -45,6 +45,24 @@ jobs: | ||
| 45 | run: ctest --output-on-failure | 45 | run: ctest --output-on-failure |
| 46 | working-directory: build | 46 | working-directory: build |
| 47 | 47 | ||
| 48 | + meson-build: | ||
| 49 | + name: Meson build | ||
| 50 | + runs-on: ubuntu-latest | ||
| 51 | + steps: | ||
| 52 | + - uses: actions/checkout@v2 | ||
| 53 | + | ||
| 54 | + - name: Prepare commands | ||
| 55 | + run: | | ||
| 56 | + pipx install meson | ||
| 57 | + pipx install ninja | ||
| 58 | + | ||
| 59 | + - name: Configure | ||
| 60 | + run: meson setup build-meson . -Dtests=true | ||
| 61 | + | ||
| 62 | + - name: Build | ||
| 63 | + run: meson compile -C build-meson | ||
| 64 | + | ||
| 65 | + | ||
| 48 | cmake-config: | 66 | cmake-config: |
| 49 | name: CMake config check | 67 | name: CMake config check |
| 50 | runs-on: ubuntu-latest | 68 | runs-on: ubuntu-latest |
meson.build
| 1 | project('CLI11', ['cpp'], | 1 | project('CLI11', ['cpp'], |
| 2 | - version : run_command(find_program('scripts/ExtractVersion.py')).stdout().strip(), | ||
| 3 | - default_options : ['cpp_std=c++11'] | 2 | + version : run_command(find_program('scripts/ExtractVersion.py'), check: true).stdout().strip(), |
| 3 | + default_options : ['cpp_std=c++11', 'warning_level=3'] | ||
| 4 | ) | 4 | ) |
| 5 | 5 | ||
| 6 | +cxx = meson.get_compiler('cpp') | ||
| 7 | + | ||
| 6 | CLI11_inc = include_directories(['include']) | 8 | CLI11_inc = include_directories(['include']) |
| 7 | 9 | ||
| 8 | CLI11_dep = declare_dependency( | 10 | CLI11_dep = declare_dependency( |
| 9 | include_directories : CLI11_inc, | 11 | include_directories : CLI11_inc, |
| 10 | version : meson.project_version(), | 12 | version : meson.project_version(), |
| 11 | ) | 13 | ) |
| 14 | + | ||
| 15 | +if get_option('tests') | ||
| 16 | + warnings = ['-Wshadow', '-Wsign-conversion', '-Wswitch-enum'] | ||
| 17 | + if cxx.get_id() == 'gcc' and cxx.version().version_compare('>=4.9') | ||
| 18 | + warnings += '-Weffc++' | ||
| 19 | + endif | ||
| 20 | + add_project_arguments(cxx.get_supported_arguments(warnings), language: 'cpp') | ||
| 21 | + | ||
| 22 | + subdir('tests') | ||
| 23 | +endif |
meson_options.txt
0 โ 100644
| 1 | +option('tests', type: 'boolean', value: false, description: 'Build CLI11 tests') |
subprojects/catch2.wrap
0 โ 100644
| 1 | +[wrap-file] | ||
| 2 | +directory = Catch2-2.13.7 | ||
| 3 | +source_url = https://github.com/catchorg/Catch2/archive/v2.13.7.zip | ||
| 4 | +source_filename = Catch2-2.13.7.zip | ||
| 5 | +source_hash = 3f3ccd90ad3a8fbb1beeb15e6db440ccdcbebe378dfd125d07a1f9a587a927e9 | ||
| 6 | +patch_filename = catch2_2.13.7-1_patch.zip | ||
| 7 | +patch_url = https://wrapdb.mesonbuild.com/v2/catch2_2.13.7-1/get_patch | ||
| 8 | +patch_hash = 2f7369645d747e5bd866317ac1dd4c3d04dc97d3aad4fc6b864bdf75d3b57158 | ||
| 9 | + | ||
| 10 | +[provide] | ||
| 11 | +catch2 = catch2_dep |
tests/meson.build
0 โ 100644
| 1 | +catch2 = dependency('catch2') | ||
| 2 | + | ||
| 3 | +testmain = static_library( | ||
| 4 | + 'catch_main', | ||
| 5 | + 'main.cpp', 'catch.hpp', | ||
| 6 | + dependencies: catch2, | ||
| 7 | +) | ||
| 8 | +testdep = declare_dependency( | ||
| 9 | + link_with: testmain, | ||
| 10 | + dependencies: [catch2, CLI11_dep] | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +link_test_lib = library( | ||
| 14 | + 'link_test_1', | ||
| 15 | + 'link_test_1.cpp', | ||
| 16 | + dependencies: CLI11_dep, | ||
| 17 | +) | ||
| 18 | + | ||
| 19 | +if cxx.get_id() == 'msvc' | ||
| 20 | + nodeprecated = ['/wd4996'] | ||
| 21 | +else | ||
| 22 | + nodeprecated = ['-Wno-deprecated-declarations'] | ||
| 23 | +endif | ||
| 24 | + | ||
| 25 | +boost = dependency('boost', required: false) | ||
| 26 | +if boost.found() | ||
| 27 | + boost_dep = declare_dependency( | ||
| 28 | + dependencies: boost, | ||
| 29 | + compile_args: '-DCLI11_BOOST_OPTIONAL', | ||
| 30 | + ) | ||
| 31 | +else | ||
| 32 | + boost_dep = declare_dependency() | ||
| 33 | +endif | ||
| 34 | + | ||
| 35 | +testnames = [ | ||
| 36 | + ['HelpersTest', {}], | ||
| 37 | + ['ConfigFileTest', {}], | ||
| 38 | + ['OptionTypeTest', {}], | ||
| 39 | + ['SimpleTest', {}], | ||
| 40 | + ['AppTest', {}], | ||
| 41 | + ['SetTest', {}], | ||
| 42 | + ['TransformTest', {}], | ||
| 43 | + ['CreationTest', {}], | ||
| 44 | + ['SubcommandTest', {}], | ||
| 45 | + ['HelpTest', {}], | ||
| 46 | + ['FormatterTest', {}], | ||
| 47 | + ['NewParseTest', {}], | ||
| 48 | + ['OptionalTest', {'dependencies': boost_dep}], | ||
| 49 | + ['DeprecatedTest', {'cpp_args': nodeprecated}], | ||
| 50 | + ['StringParseTest', {}], | ||
| 51 | + ['ComplexTypeTest', {}], | ||
| 52 | + ['TrueFalseTest', {}], | ||
| 53 | + ['OptionGroupTest', {}], | ||
| 54 | + # multi-only | ||
| 55 | + ['TimerTest', {}], | ||
| 56 | + # link_test | ||
| 57 | + ['link_test_2', {'link_with': link_test_lib}], | ||
| 58 | +] | ||
| 59 | + | ||
| 60 | +if host_machine.system() == 'windows' | ||
| 61 | + testnames += [['WindowsTest', {}]] | ||
| 62 | +endif | ||
| 63 | + | ||
| 64 | +if boost.found() | ||
| 65 | + testnames += [['BoostOptionTypeTest', {'dependencies': boost_dep}]] | ||
| 66 | +endif | ||
| 67 | + | ||
| 68 | +foreach n: testnames | ||
| 69 | + name = n[0] | ||
| 70 | + kwargs = n[1] | ||
| 71 | + t = executable(name, name + '.cpp', | ||
| 72 | + cpp_args: kwargs.get('cpp_args', []), | ||
| 73 | + build_by_default: false, | ||
| 74 | + dependencies: [testdep] + kwargs.get('dependencies', []), | ||
| 75 | + link_with: kwargs.get('link_with', []) | ||
| 76 | + ) | ||
| 77 | + test(name, t) | ||
| 78 | +endforeach |