From d0b9ebbaacb5f69aaaad30829e04cd3a88f084cb Mon Sep 17 00:00:00 2001 From: James Hilliard Date: Fri, 15 Jul 2022 00:23:37 -0600 Subject: [PATCH] meson: fix build without cpp toolchain We don't need a cpp toolchain for building glib so lets just automatically disable tests requiring one when not available. Signed-off-by: James Hilliard --- fuzzing/meson.build | 10 +++++++--- gio/tests/meson.build | 11 ++++++++--- glib/tests/meson.build | 11 ++++++++--- gmodule/tests/meson.build | 11 ++++++++--- gobject/tests/meson.build | 11 ++++++++--- meson.build | 29 ++++++++++++++++++----------- 6 files changed, 57 insertions(+), 26 deletions(-) diff --git a/fuzzing/meson.build b/fuzzing/meson.build index f7d94eac0..e87abc7ec 100644 --- a/fuzzing/meson.build +++ b/fuzzing/meson.build @@ -45,8 +45,12 @@ extra_c_args = cc.get_supported_arguments('-Werror=unused-function') # Links in a static library provided by oss-fuzz, else a standalone driver. # https://google.github.io/oss-fuzz/getting-started/new-project-guide/#buildsh-script-environment -fuzzing_engine = cxx.find_library('FuzzingEngine', required : get_option('oss_fuzz')) -if fuzzing_engine.found() +have_fuzzing_engine = false +if have_cxx + fuzzing_engine = cxx.find_library('FuzzingEngine', required : get_option('oss_fuzz')) + have_fuzzing_engine = fuzzing_engine.found() +endif +if have_fuzzing_engine deps += fuzzing_engine else extra_sources += 'driver.c' @@ -61,7 +65,7 @@ foreach target_name : fuzz_targets # If the FuzzingEngine isn’t available, build some unit tests to check that # the fuzzing files do basically work. This doesn’t do any actual fuzzing though. # Pass in the README as an arbitrary fuzzing input, just so we have something. - if not fuzzing_engine.found() + if not have_fuzzing_engine test(target_name, exe, args : files('README.md'), suite : 'fuzzing', diff --git a/gio/tests/meson.build b/gio/tests/meson.build index 1cb5e30ee..fce3def34 100644 --- a/gio/tests/meson.build +++ b/gio/tests/meson.build @@ -58,9 +58,6 @@ gio_tests = { }, 'converter-stream' : {}, 'credentials' : {}, - 'cxx' : { - 'source' : ['cxx.cpp'], - }, 'data-input-stream' : {}, 'data-output-stream' : {}, 'error': {}, @@ -127,6 +124,14 @@ gio_tests = { 'win32-appinfo' : {}, } +if have_cxx + gio_tests += { + 'cxx' : { + 'source' : ['cxx.cpp'], + }, + } +endif + test_extra_programs = { 'gdbus-connection-flush-helper' : {}, 'gdbus-testserver' : {}, diff --git a/glib/tests/meson.build b/glib/tests/meson.build index 193224d86..d74617823 100644 --- a/glib/tests/meson.build +++ b/glib/tests/meson.build @@ -15,9 +15,6 @@ glib_tests = { 'completion' : {}, 'cond' : {}, 'convert' : {}, - 'cxx' : { - 'source' : ['cxx.cpp'], - }, 'dataset' : {}, 'date' : { # FIXME: https://gitlab.gnome.org/GNOME/glib/-/issues/1392 @@ -158,6 +155,14 @@ glib_tests = { }, } +if have_cxx + glib_tests += { + 'cxx' : { + 'source' : ['cxx.cpp'], + } + } +endif + if cc.get_id() != 'msvc' glib_tests += {'autoptr' : {}} endif diff --git a/gmodule/tests/meson.build b/gmodule/tests/meson.build index ad1893b90..cc8125eda 100644 --- a/gmodule/tests/meson.build +++ b/gmodule/tests/meson.build @@ -1,7 +1,4 @@ gmodule_tests = { - 'cxx' : { - 'source' : ['cxx.cpp'], - }, 'module-test-library' : { 'export_dynamic' : true, 'source': 'module-test.c', @@ -14,6 +11,14 @@ gmodule_tests = { }, } +if have_cxx + gmodule_tests += { + 'cxx' : { + 'source' : ['cxx.cpp'], + } + } +endif + module_suffix = [] # Keep the autotools convention for shared module suffix because GModule # depends on it: https://gitlab.gnome.org/GNOME/glib/issues/520 diff --git a/gobject/tests/meson.build b/gobject/tests/meson.build index 8e834ca3d..58cf4ab1f 100644 --- a/gobject/tests/meson.build +++ b/gobject/tests/meson.build @@ -38,9 +38,6 @@ gobject_tests = { }, 'basics-gobject' : {}, 'boxed' : {}, - 'cxx' : { - 'source' : ['cxx.cpp'], - }, 'defaultiface' : { 'source' : ['defaultiface.c', 'testmodule.c'], }, @@ -101,6 +98,14 @@ gobject_tests = { }, } +if have_cxx + gobject_tests += { + 'cxx' : { + 'source' : ['cxx.cpp'], + }, + } +endif + if cc.get_id() != 'msvc' gobject_tests += {'autoptr' : {}} endif diff --git a/meson.build b/meson.build index b3dea2ea1..3339d8f99 100644 --- a/meson.build +++ b/meson.build @@ -1,4 +1,4 @@ -project('glib', 'c', 'cpp', +project('glib', 'c', version : '2.73.2', # NOTE: See the policy in docs/meson-version.md before changing the Meson dependency meson_version : '>= 0.60.0', @@ -10,7 +10,10 @@ project('glib', 'c', 'cpp', ) cc = meson.get_compiler('c') -cxx = meson.get_compiler('cpp') +have_cxx = add_languages('cpp', native: false, required: get_option('oss_fuzz').enabled()) +if have_cxx + cxx = meson.get_compiler('cpp') +endif cc_can_run = meson.can_run_host_binaries() @@ -529,7 +532,9 @@ else endif add_project_arguments(cc.get_supported_arguments(warning_c_args), language: 'c') -add_project_arguments(cxx.get_supported_arguments(warning_cxx_args), language: 'cpp') +if have_cxx + add_project_arguments(cxx.get_supported_arguments(warning_cxx_args), language: 'cpp') +endif # FIXME: We cannot build some of the GResource tests with -z nodelete, which # means we cannot use that flag in add_project_link_arguments(), and must add @@ -1735,15 +1740,17 @@ if not g_have_iso_c_varargs error('GLib requires a C compiler with support for C99 __VA_ARG__ in macros.') endif -g_have_iso_cxx_varargs = cxx.compiles(''' - void some_func (void) { - int a(int p1, int p2, int p3); - #define call_a(...) a(1,__VA_ARGS__) - call_a(2,3); - }''', name : 'ISO C99 varargs macros in C++') +if have_cxx + g_have_iso_cxx_varargs = cxx.compiles(''' + void some_func (void) { + int a(int p1, int p2, int p3); + #define call_a(...) a(1,__VA_ARGS__) + call_a(2,3); + }''', name : 'ISO C99 varargs macros in C++') -if not g_have_iso_cxx_varargs - error('GLib requires a C++ compiler with support for C99 __VA_ARG__ in macros.') + if not g_have_iso_cxx_varargs + error('GLib requires a C++ compiler with support for C99 __VA_ARG__ in macros.') + endif endif g_have_gnuc_varargs = cc.compiles('''