[glib: 1/2] meson: fix build without cpp toolchain




commit d0b9ebbaacb5f69aaaad30829e04cd3a88f084cb
Author: James Hilliard <james hilliard1 gmail com>
Date:   Fri Jul 15 00:23:37 2022 -0600

    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 <james hilliard1 gmail com>

 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 f7d94eac01..e87abc7ec4 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 1cb5e30ee2..fce3def341 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 193224d86d..d746178233 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 ad1893b900..cc8125eda4 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 8e834ca3d6..58cf4ab1f7 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 b3dea2ea19..3339d8f992 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('''


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]