mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-08-26 02:48:54 +02:00
Certain libraries want to provide types that are derivable for internal users, but final for any external consumer of the API. Other languages use the term "protected" to refer to this kind of type visibility attribute. Since we're providing macros to declare derivable and final types, we should also provide a macro for declaring protected types. The mechanism is the same as the other G_DECLARE macros; protected types: - define an opaque type for the instance, like G_DEFINE_FINAL_TYPE - define an opaque type for the class - define cast and type check functions for instance pointers, for public consumers, and cast and type check functions for class pointers, for internal consumers - omit an accessor for retrieving the class structure from the instance structure, as it would be pointless to do so
279 lines
7.1 KiB
Meson
279 lines
7.1 KiB
Meson
subdir('performance')
|
|
|
|
marshalers_h = custom_target('marshalers_h',
|
|
output : 'marshalers.h',
|
|
input : 'marshalers.list',
|
|
command : [
|
|
python, glib_genmarshal,
|
|
'--prefix=test',
|
|
'--valist-marshallers',
|
|
'--output=@OUTPUT@',
|
|
'--quiet',
|
|
'--header',
|
|
'@INPUT@',
|
|
],
|
|
)
|
|
marshalers_c = custom_target('marshalers_c',
|
|
output : 'marshalers.c',
|
|
input : 'marshalers.list',
|
|
command : [
|
|
python, glib_genmarshal,
|
|
'--prefix=test',
|
|
'--valist-marshallers',
|
|
'--include-header=marshalers.h',
|
|
'--output=@OUTPUT@',
|
|
'--quiet',
|
|
'--body',
|
|
'@INPUT@',
|
|
],
|
|
)
|
|
|
|
# We must embed custom-dispatch.exe with an application
|
|
# manifest to pacify UAC in order to run on 32-bit Windows
|
|
# builds, otherwise the test will not run as UAC will kill it.
|
|
extra_custom_dispatch_objs = []
|
|
if embed_uac_manifest
|
|
uac_exe_pkg = 'gobject'
|
|
uac_exe_name = 'custom-dispatch'
|
|
|
|
# Well, we have to forgo the xxx.exe.manifest in the output listing, since
|
|
# compile_resources doesn't like to consume targets with multiple outputs,
|
|
# and the xxx.exe.manifest and xxx.rc are tied together
|
|
uac_rc = custom_target(
|
|
'@0@.rc'.format(uac_exe_name),
|
|
output: ['@0@.rc'.format(uac_exe_name)],
|
|
command: [gen_uac_manifest,
|
|
'-p=@0@'.format(uac_exe_pkg),
|
|
'-n=@0@'.format(uac_exe_name),
|
|
'--pkg-version=@0@'.format(meson.project_version()),
|
|
'--output-dir=@OUTDIR@'],
|
|
)
|
|
extra_custom_dispatch_objs = import('windows').compile_resources(uac_rc)
|
|
endif
|
|
|
|
gobject_tests = {
|
|
'notify-init' : {},
|
|
'notify-init2' : {},
|
|
'custom-dispatch' : {
|
|
'extra_objs' : extra_custom_dispatch_objs,
|
|
},
|
|
'qdata' : {},
|
|
'accumulator' : {
|
|
'source' : ['accumulator.c', marshalers_h, marshalers_c],
|
|
},
|
|
'basics-gobject' : {},
|
|
'boxed' : {},
|
|
'defaultiface' : {
|
|
'source' : ['defaultiface.c', 'testmodule.c'],
|
|
},
|
|
'deftype' : { 'protocol': 'exitcode' },
|
|
'deprecated-properties' : {},
|
|
'dynamictype' : {
|
|
'source' : ['dynamictype.c', 'testmodule.c'],
|
|
},
|
|
'enums' : {},
|
|
'max-version' : {'install': false},
|
|
'override' : {},
|
|
'param' : {},
|
|
'references' : {},
|
|
'basic-signals' : {},
|
|
'singleton' : {},
|
|
'threadtests' : {},
|
|
'dynamictests' : {},
|
|
'binding' : {},
|
|
'bindinggroup' : {},
|
|
'properties' : {},
|
|
'properties-introspection' : {},
|
|
'reference' : {
|
|
# FIXME: https://gitlab.gnome.org/GNOME/glib/-/issues/3148
|
|
'can_fail' : host_system == 'gnu',
|
|
},
|
|
'flags' : {},
|
|
'value' : {},
|
|
'type' : {},
|
|
'gobject-private' : {
|
|
'source' : 'private.c',
|
|
},
|
|
'closure' : {},
|
|
'closure-refcount' : { 'suite': ['slow'] },
|
|
'object' : {},
|
|
'internal-type': {},
|
|
'signal-handler' : {},
|
|
'ifaceproperties' : {},
|
|
'signals' : {
|
|
'source' : ['signals.c', marshalers_h, marshalers_c],
|
|
},
|
|
'signalgroup' : {},
|
|
'testing' : {},
|
|
'type-flags' : {},
|
|
'objects-refcount1' : {
|
|
'c_args': cc.get_supported_arguments([
|
|
'-DG_DISABLE_CAST_CHECKS',
|
|
'-Werror',
|
|
'-Wcast-align=strict',
|
|
]),
|
|
},
|
|
'objects-refcount2' : {'suite' : ['slow']},
|
|
'properties-refcount1' : {},
|
|
'properties-refcount2' : {'suite' : ['slow']},
|
|
'properties-refcount3' : {'suite' : ['slow']},
|
|
'properties-refcount4' : {},
|
|
'signals-refcount1' : {
|
|
'source' : 'signals-refcount.c',
|
|
'c_args' : ['-DTESTNUM=1'],
|
|
},
|
|
'signals-refcount2' : {
|
|
'source' : 'signals-refcount.c',
|
|
'c_args' : ['-DTESTNUM=2'],
|
|
},
|
|
'signals-refcount3' : {
|
|
'source' : 'signals-refcount.c',
|
|
'c_args' : ['-DTESTNUM=3'],
|
|
},
|
|
'signals-refcount4' : {
|
|
'source' : 'signals-refcount.c',
|
|
'c_args' : ['-DTESTNUM=4'],
|
|
},
|
|
}
|
|
|
|
if have_cxx
|
|
gobject_tests += {
|
|
'cxx' : {
|
|
'protocol': 'exitcode',
|
|
'source' : ['cxx.cpp'],
|
|
'suite' : ['cpp'],
|
|
},
|
|
}
|
|
|
|
foreach std, arg: cxx_standards
|
|
gobject_tests += {
|
|
'cxx-@0@'.format(std) : {
|
|
'protocol': 'exitcode',
|
|
'source' : ['cxx.cpp'],
|
|
'suite' : ['cpp'],
|
|
'cpp_args' : [arg],
|
|
},
|
|
}
|
|
endforeach
|
|
endif
|
|
|
|
if cc.get_id() != 'msvc'
|
|
gobject_tests += {'autoptr' : {}}
|
|
endif
|
|
|
|
python_tests = {
|
|
'genmarshal.py' : {},
|
|
'gobject-query.py' : {
|
|
'depends' : gobject_query,
|
|
'can_fail' : host_system == 'windows',
|
|
},
|
|
'mkenums.py' : {},
|
|
}
|
|
|
|
test_env = environment()
|
|
test_env.set('G_TEST_SRCDIR', meson.current_source_dir())
|
|
test_env.set('G_TEST_BUILDDIR', meson.current_build_dir())
|
|
|
|
test_deps = [libm, thread_dep, libglib_dep, libgobject_dep]
|
|
test_cargs = ['-DG_LOG_DOMAIN="GLib-GObject"', '-UG_DISABLE_ASSERT']
|
|
test_cpp_args = test_cargs
|
|
|
|
foreach test_name, extra_args : gobject_tests
|
|
source = extra_args.get('source', test_name + '.c')
|
|
extra_objs = extra_args.get('extra_objs', [])
|
|
install = installed_tests_enabled and extra_args.get('install', true)
|
|
|
|
if install
|
|
test_conf = configuration_data()
|
|
test_conf.set('installed_tests_dir', installed_tests_execdir)
|
|
test_conf.set('program', test_name)
|
|
test_conf.set('env', '')
|
|
configure_file(
|
|
input: installed_tests_template_tap,
|
|
output: test_name + '.test',
|
|
install_dir: installed_tests_metadir,
|
|
install_tag: 'tests',
|
|
configuration: test_conf
|
|
)
|
|
endif
|
|
|
|
exe = executable(test_name, source, extra_objs,
|
|
c_args : test_cargs + extra_args.get('c_args', []),
|
|
cpp_args : test_cpp_args + extra_args.get('cpp_args', []),
|
|
dependencies : test_deps + extra_args.get('dependencies', []),
|
|
install_dir: installed_tests_execdir,
|
|
install_tag: 'tests',
|
|
install: install,
|
|
)
|
|
|
|
suite = ['gobject'] + extra_args.get('suite', [])
|
|
timeout = suite.contains('slow') ? test_timeout_slow : test_timeout
|
|
|
|
if extra_args.get('can_fail', false)
|
|
suite += 'failing'
|
|
endif
|
|
|
|
# FIXME: https://gitlab.gnome.org/GNOME/glib/issues/1316
|
|
# aka https://bugs.debian.org/880883
|
|
if test_name == 'closure-refcount' and ['arm', 'aarch64'].contains(host_machine.cpu_family())
|
|
timeout = timeout * 10
|
|
endif
|
|
|
|
test(test_name,
|
|
exe,
|
|
protocol : extra_args.get('protocol', test_protocol),
|
|
env : test_env,
|
|
timeout : timeout,
|
|
suite : suite,
|
|
)
|
|
endforeach
|
|
|
|
foreach test_name, extra_args : python_tests
|
|
depends = [extra_args.get('depends', [])]
|
|
suite = ['gobject', 'no-valgrind']
|
|
|
|
if extra_args.get('can_fail', false)
|
|
suite += 'failing'
|
|
endif
|
|
|
|
test(
|
|
test_name,
|
|
python,
|
|
protocol : extra_args.get('protocol', test_protocol),
|
|
depends: depends,
|
|
args: ['-B', files(test_name)],
|
|
env: test_env,
|
|
suite: suite,
|
|
)
|
|
|
|
if installed_tests_enabled
|
|
install_data(
|
|
files(test_name),
|
|
install_dir: installed_tests_execdir,
|
|
install_tag: 'tests',
|
|
install_mode: 'rwxr-xr-x',
|
|
)
|
|
|
|
test_conf = configuration_data()
|
|
test_conf.set('installed_tests_dir', installed_tests_execdir)
|
|
test_conf.set('program', test_name)
|
|
test_conf.set('env', '')
|
|
configure_file(
|
|
input: installed_tests_template_tap,
|
|
output: test_name + '.test',
|
|
install_dir: installed_tests_metadir,
|
|
install_tag: 'tests',
|
|
configuration: test_conf,
|
|
)
|
|
endif
|
|
endforeach
|
|
|
|
# TAP test runner for Python tests
|
|
if installed_tests_enabled
|
|
install_data(
|
|
files('taptestrunner.py'),
|
|
install_dir: installed_tests_execdir,
|
|
install_tag: 'tests',
|
|
)
|
|
endif
|