Meson: Group all glib tests into a single dict
diff --git a/glib/tests/meson.build b/glib/tests/meson.build
index ebce3c6..e684af4 100644
--- a/glib/tests/meson.build
+++ b/glib/tests/meson.build
@@ -1,94 +1,130 @@
-glib_tests = [
-  'array-test',
-  'asyncqueue',
-  'base64',
-  'bitlock',
-  'bookmarkfile',
-  'bytes',
-  'cache',
-  'charset',
-  'checksum',
-  'collate',
-  'cond',
-  'convert',
-  'dataset',
-  'date',
-  'dir',
-  'environment',
-  'error',
-  'fileutils',
-  'gdatetime',
-  'guuid',
-  'gvariant',
-  'hash',
-  'hmac',
-  'hook',
-  'hostutils',
-  'keyfile',
-  'list',
-  'logging',
-  'mainloop',
-  'mappedfile',
-  'markup',
-  'markup-parse',
-  'markup-collect',
-  'markup-escape',
-  'markup-subparser',
-  'mem-overflow',
-  'mutex',
-  'node',
-  'once',
-  'option-context',
-  'option-argv0',
-  'overflow',
-  # overflow-fallback handled separately below
-  'pattern',
-  'private',
-  'protocol',
-  'queue',
-  'rand',
-  'rcbox',
-  'rec-mutex',
-  'refcount',
-  'refcount-macro',
-  'refstring',
-  'regex',
-  'rwlock',
-  'scannerapi',
-  'search-utils',
-  'sequence',
-  'shell',
-  'slice',
-  'slist',
-  'sort',
-  'spawn-multithreaded',
-  'spawn-singlethread',
-  'strfuncs',
-  'string',
-  'testing',
-  'test-printf',
-  'thread',
-  'timeout',
-  'timer',
-  'tree',
-  'utf8-performance',
-  'utf8-pointer',
-  'utf8-validate',
-  'utf8-misc',
-  'utils',
-  'unicode',
-  'uri',
-  '1bit-mutex',
-  '642026',
-]
-
-if host_machine.system() != 'windows'
-  glib_tests += [ 'unix', 'include' ]
-endif
-
-if cc.get_id() != 'msvc'
-  glib_tests += [ 'autoptr' ]
-endif
+glib_tests = {
+  'array-test' : {},
+  'asyncqueue' : {},
+  'atomic' : {
+    'c_args' : cc.get_id() == 'gcc' ? ['-Wstrict-aliasing=2'] : [],
+  },
+  'autoptr' : {
+    'skip' : cc.get_id() == 'msvc',
+  },
+  'base64' : {},
+  'bitlock' : {},
+  'bookmarkfile' : {},
+  'bytes' : {},
+  'cache' : {},
+  'charset' : {},
+  'checksum' : {},
+  'collate' : {},
+  'cond' : {},
+  'convert' : {},
+  'dataset' : {},
+  'date' : {},
+  'dir' : {},
+  'environment' : {},
+  'error' : {},
+  'fileutils' : {},
+  'gdatetime' : {},
+  'guuid' : {},
+  'gvariant' : {
+    'suite' : ['slow'],
+  },
+  'gwakeup' : {
+    'source' : ['gwakeuptest.c', '../gwakeup.c'],
+  },
+  'gwakeup-fallback' : {
+    'skip' : not glib_conf.has('HAVE_EVENTFD'),
+    'source' : ['gwakeuptest.c', '../gwakeup.c'],
+    'c_args' : ['-DTEST_EVENTFD_FALLBACK'],
+  },
+  'hash' : {},
+  'hmac' : {},
+  'hook' : {},
+  'hostutils' : {},
+  'include' : {
+    'skip' : host_machine.system() == 'windows',
+  },
+  'keyfile' : {},
+  'list' : {},
+  'logging' : {},
+  'mainloop' : {},
+  'mappedfile' : {},
+  'markup' : {},
+  'markup-parse' : {},
+  'markup-collect' : {},
+  'markup-escape' : {},
+  'markup-subparser' : {},
+  'mem-overflow' : {},
+  'mutex' : {},
+  'node' : {},
+  'once' : {},
+  'option-context' : {},
+  'option-argv0' : {},
+  'overflow' : {},
+  'overflow-fallback' : {
+    'source' : 'overflow.c',
+    'c_args' : ['-D_GLIB_TEST_OVERFLOW_FALLBACK'],
+  },
+  'pattern' : {},
+  'private' : {},
+  'protocol' : {},
+  'queue' : {},
+  'rand' : {},
+  'rcbox' : {},
+  'rec-mutex' : {},
+  'refcount' : {},
+  'refcount-macro' : {
+    'source' : 'refcount.c',
+    'c_args' : ['-DG_DISABLE_CHECKS'],
+  },
+  'refstring' : {},
+  'regex' : {
+    'dependencies' : [pcre],
+    'c_args' : use_pcre_static_flag ? ['-DPCRE_STATIC'] : [],
+  },
+  'rwlock' : {},
+  'scannerapi' : {},
+  'search-utils' : {},
+  'sequence' : {
+    'suite' : ['slow'],
+  },
+  'shell' : {},
+  'slice' : {},
+  'slist' : {},
+  'sort' : {},
+  'spawn-multithreaded' : {},
+  'spawn-singlethread' : {},
+  'strfuncs' : {},
+  'string' : {},
+  'testing' : {},
+  'test-printf' : {},
+  'thread' : {},
+  'timeout' : {},
+  'timer' : {},
+  'tree' : {},
+  'utf8-performance' : {},
+  'utf8-pointer' : {},
+  'utf8-validate' : {},
+  'utf8-misc' : {},
+  'utils' : {},
+  'unicode' : {},
+  'unix' : {
+    'skip' : host_machine.system() == 'windows',
+  },
+  'uri' : {},
+  '1bit-mutex' : {},
+  '1bit-emufutex' : {
+    'source' : '1bit-mutex.c',
+    'c_args' : ['-DTEST_EMULATED_FUTEX'],
+  },
+  '642026' : {
+    'suite' : ['slow'],
+  },
+  '642026-ec' : {
+    'source' : '642026.c',
+    'c_args' : ['-DG_ERRORCHECK_MUTEXES'],
+    'suite' : ['slow'],
+  },
+}
 
 # Not entirely random of course, but at least it changes over time
 random_number = minor_version + meson.version().split('.').get(1).to_int()
@@ -100,99 +136,32 @@
 test_env.set('MALLOC_CHECK_', '2')
 test_env.set('MALLOC_PERTURB_', '@0@'.format(random_number % 256))
 
+test_deps = [libm, thread_dep, libglib_dep]
 test_cargs = ['-DG_LOG_DOMAIN="GLib"']
 
-# Tests that consistently time out on the CI infrastructure
-slow_tests = [
-  'gvariant',
-  'sequence',
-  '642026',
-]
+foreach test_name, extra_args : glib_tests
+  # FIXME: This condition is ugly, meson should either have 'continue'
+  # keyword (https://github.com/mesonbuild/meson/issues/3601), or support
+  # mutable to dictionaries (https://github.com/mesonbuild/meson/pull/3820).
+  if not extra_args.get('skip', false)
+    source = extra_args.get('source', test_name + '.c')
 
-foreach test_name : glib_tests
-  deps = [libm, thread_dep, libglib_dep]
-  source = test_name + '.c'
-  c_args = test_cargs + ['-DPCRE_STATIC']
-  if test_name == 'regex'
-    deps += [pcre]
-  endif
-  if test_name == 'gdatetime'
-    deps += [libintl]
-  endif
-  # We build the refcount test twice: one to test the function-based API,
-  # and the other to test the macro-based API that is used when disabling
-  # checks
-  if test_name == 'refcount-macro'
-    source = 'refcount.c'
-    c_args += ['-DG_DISABLE_CHECKS']
-  endif
-  exe = executable(test_name, source,
-    c_args : c_args,
-    dependencies : deps,
-    install : false,
-  )
-  # These tests may take more than 30 seconds to run on the CI infrastructure
-  if slow_tests.contains(test_name)
-    test(test_name, exe, env : test_env, timeout : 120, suite : ['glib', 'slow'])
-  else
-    test(test_name, exe, env : test_env, suite : ['glib'])
+    exe = executable(test_name, source,
+      c_args : test_cargs + extra_args.get('c_args', []),
+      dependencies : test_deps + extra_args.get('dependencies', []),
+      install: false,
+    )
+
+    suite = ['glib'] + extra_args.get('suite', [])
+    timeout = suite.contains('slow') ? 120 : 30
+    test(test_name, exe, env : test_env, timeout : timeout, suite : suite)
   endif
 endforeach
 
-c_args_atomic = []
-if cc.get_id() == 'gcc'
-  c_args_atomic += ['-Wstrict-aliasing=2']
-endif
-
-deps = [libm, thread_dep, libglib_dep]
-
-exe = executable('atomic', 'atomic.c',
-  c_args : test_cargs + c_args_atomic,
-  dependencies : deps,
-)
-test('atomic', exe, env : test_env, suite : ['glib'])
-
-# FIXME: consolidate all of these into the array
-exe = executable('overflow-fallback', 'overflow.c',
-  c_args : test_cargs + ['-D_GLIB_TEST_OVERFLOW_FALLBACK'],
-  dependencies : deps,
-  install : false,
-)
-test('overflow-fallback', exe, env : test_env, suite : ['glib'])
-
-exe = executable('642026-ec', '642026.c',
-  c_args : test_cargs + ['-DG_ERRORCHECK_MUTEXES'],
-  dependencies : deps,
-  install : false,
-)
-test('642026-ec', exe, env : test_env, timeout : 90, suite : ['glib', 'slow'])
-
-exe = executable('1bit-emufutex', '1bit-mutex.c',
-  c_args : test_cargs + ['-DTEST_EMULATED_FUTEX'],
-  dependencies : deps,
-  install : false,
-)
-test('1bit-emufutex', exe, env : test_env, suite : ['glib'])
-
-exe = executable('gwakeup', 'gwakeuptest.c', '../gwakeup.c',
-  c_args : test_cargs,
-  dependencies : deps,
-  install : false)
-test('gwakeup', exe, env : test_env, suite : ['glib'])
-
-if glib_conf.has('HAVE_EVENTFD')
-  exe = executable('gwakeup-fallback', 'gwakeuptest.c', '../gwakeup.c',
-    c_args : test_cargs + ['-DTEST_EVENTFD_FALLBACK'],
-    dependencies : deps,
-    install : false,
-  )
-  test('gwakeup-fallback', exe, env : test_env, suite : ['glib'])
-endif
-
 # test-spawn-echo helper binary required by the spawn tests above
 executable('test-spawn-echo', 'test-spawn-echo.c',
   c_args : test_cargs,
-  dependencies : deps,
+  dependencies : test_deps,
   install : false,
 )