mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-08-04 00:13:40 +02:00
In order to use the new posix_spawn gspawn codepath, for more robust app launching when available memory is low, we need to meet some conditions. child_setup needs to be NULL for this optimization to work, so drop the internal child_setup that is used here. Replace it with a lightweight wrapper binary (gio-launch-desktop) that sets GIO_LAUNCHED_DESKTOP_FILE_PID before executing the app. Adjust PATH for gio tests so that it can execute the new binary from the build directory.
440 lines
14 KiB
Meson
440 lines
14 KiB
Meson
common_gio_tests_deps = [
|
|
libglib_dep,
|
|
libgmodule_dep,
|
|
libgobject_dep,
|
|
libgio_dep,
|
|
]
|
|
|
|
subdir('gdbus-object-manager-example')
|
|
|
|
gengiotypefuncs_prog = find_program('gengiotypefuncs.py')
|
|
giotypefuncs_inc = custom_target(
|
|
'giotypefuncs.inc',
|
|
output : 'giotypefuncs.inc',
|
|
input : gio_headers + [gioenumtypes_h] + gobject_install_headers,
|
|
command: [gengiotypefuncs_prog, '@OUTPUT@', '@INPUT@'])
|
|
|
|
# Test programs buildable on all platforms
|
|
gio_tests = [
|
|
'appmonitor',
|
|
'async-close-output-stream',
|
|
'async-splice-output-stream',
|
|
'buffered-input-stream',
|
|
'buffered-output-stream',
|
|
'cancellable',
|
|
'contexts',
|
|
'contenttype',
|
|
'converter-stream',
|
|
'credentials',
|
|
'data-input-stream',
|
|
'data-output-stream',
|
|
'defaultvalue',
|
|
'fileattributematcher',
|
|
'filter-streams',
|
|
'giomodule',
|
|
'gsubprocess',
|
|
'g-file',
|
|
'g-file-info',
|
|
'g-icon',
|
|
'gdbus-addresses',
|
|
'gdbus-message',
|
|
'inet-address',
|
|
'io-stream',
|
|
'memory-input-stream',
|
|
'memory-output-stream',
|
|
'monitor',
|
|
'network-address',
|
|
'network-monitor',
|
|
'network-monitor-race',
|
|
'permission',
|
|
'pollable',
|
|
'proxy-test',
|
|
'readwrite',
|
|
'simple-async-result',
|
|
'simple-proxy',
|
|
'sleepy-stream',
|
|
'socket',
|
|
'socket-listener',
|
|
'socket-service',
|
|
'srvtarget',
|
|
'task',
|
|
'vfs',
|
|
'volumemonitor',
|
|
'glistmodel',
|
|
'testfilemonitor',
|
|
'thumbnail-verification',
|
|
]
|
|
|
|
test_extra_programs = [
|
|
['gdbus-connection-flush-helper'],
|
|
['gdbus-testserver'],
|
|
]
|
|
|
|
test_env = [
|
|
'G_TEST_SRCDIR=' + meson.current_source_dir(),
|
|
'G_TEST_BUILDDIR=' + meson.current_build_dir(),
|
|
'GIO_MODULE_DIR=',
|
|
'GIO_LAUNCH_DESKTOP=' + meson.build_root() + '/gio/gio-launch-desktop',
|
|
]
|
|
|
|
test_c_args = [
|
|
'-DG_LOG_DOMAIN="GLib-GIO"',
|
|
'-DTEST_SERVICES="@0@/gio/tests/services"'.format(meson.build_root()),
|
|
'-DGLIB_MKENUMS="@0@"'.format(glib_mkenums),
|
|
'-DGLIB_COMPILE_SCHEMAS="@0@"'.format(glib_compile_schemas.full_path()),
|
|
]
|
|
|
|
# Check for libdbus1 - Optional - is only used in the GDBus test cases
|
|
# 1.2.14 required for dbus_message_set_serial
|
|
dbus1_dep = dependency('dbus-1', required : false, version : '>= 1.2.14')
|
|
if not dbus1_dep.found()
|
|
if cc.get_id() == 'msvc'
|
|
# MSVC: Search for the DBus library by the configuration, which corresponds
|
|
# to the output of CMake builds of DBus. Note that debugoptimized
|
|
# is really a Release build with .PDB files.
|
|
if buildtype == 'debug'
|
|
dbus1_dep = cc.find_library('dbus-1d', required : false)
|
|
else
|
|
dbus1_dep = cc.find_library('dbus-1', required : false)
|
|
endif
|
|
endif
|
|
endif
|
|
if dbus1_dep.found()
|
|
glib_conf.set('HAVE_DBUS1', 1)
|
|
|
|
exe = executable('gdbus-serialization',
|
|
'gdbus-serialization.c', 'gdbus-tests.c',
|
|
install : false,
|
|
c_args : test_c_args,
|
|
dependencies : common_gio_tests_deps + [dbus1_dep])
|
|
test('gdbus-serialization', exe, env : test_env, suite : ['gio'])
|
|
endif
|
|
|
|
# Test programs buildable on UNIX only
|
|
if host_machine.system() != 'windows'
|
|
gio_tests += [
|
|
'file',
|
|
'gdbus-peer',
|
|
'gdbus-peer-object-manager',
|
|
'live-g-file',
|
|
'socket-address',
|
|
'stream-rw_all',
|
|
'unix-fd',
|
|
'unix-mounts',
|
|
'unix-streams',
|
|
'g-file-info-filesystem-readonly',
|
|
'gschema-compile',
|
|
'trash',
|
|
]
|
|
|
|
# Uninstalled because of the check-for-executable logic in DesktopAppInfo
|
|
# unable to find the installed executable
|
|
if not glib_have_cocoa
|
|
gio_tests += [
|
|
'appinfo',
|
|
'desktop-app-info',
|
|
]
|
|
endif
|
|
|
|
test_extra_programs += [
|
|
['basic-application'],
|
|
['dbus-launch'],
|
|
['appinfo-test'],
|
|
]
|
|
|
|
if not glib_have_cocoa
|
|
test_extra_programs += [['apps']]
|
|
gio_tests += ['mimeapps']
|
|
endif
|
|
|
|
# Test programs that need to bring up a session bus (requires dbus-daemon)
|
|
have_dbus_daemon = find_program('dbus-daemon', required : false).found()
|
|
if have_dbus_daemon
|
|
# Generate gdbus-test-codegen-generated.{c,h}
|
|
gdbus_test_codegen_generated = custom_target('gdbus-test-codegen-generated',
|
|
input : ['test-codegen.xml'],
|
|
output : ['gdbus-test-codegen-generated.h',
|
|
'gdbus-test-codegen-generated.c'],
|
|
depend_files : gdbus_codegen_built_files,
|
|
command : [python, gdbus_codegen,
|
|
'--interface-prefix', 'org.project.',
|
|
'--output-directory', '@OUTDIR@',
|
|
'--generate-c-code', 'gdbus-test-codegen-generated',
|
|
'--c-generate-object-manager',
|
|
'--c-namespace', 'Foo_iGen',
|
|
'--generate-docbook', 'gdbus-test-codegen-generated-doc',
|
|
'--annotate', 'org.project.Bar', 'Key1', 'Value1',
|
|
'--annotate', 'org.project.Bar', 'org.gtk.GDBus.Internal', 'Value2',
|
|
'--annotate', 'org.project.Bar.HelloWorld()', 'Key3', 'Value3',
|
|
'--annotate', 'org.project.Bar::TestSignal', 'Key4', 'Value4',
|
|
'--annotate', 'org.project.Bar:ay', 'Key5', 'Value5',
|
|
'--annotate', 'org.project.Bar.TestPrimitiveTypes()[val_int32]', 'Key6', 'Value6',
|
|
'--annotate', 'org.project.Bar.TestPrimitiveTypes()[ret_uint32]', 'Key7', 'Value7',
|
|
'--annotate', 'org.project.Bar::TestSignal[array_of_strings]', 'Key8', 'Value8',
|
|
'@INPUT@'])
|
|
|
|
gio_dbus_tests = [
|
|
['actions', [], []],
|
|
['gdbus-auth', [], []],
|
|
['gdbus-bz627724', [], []],
|
|
['gdbus-close-pending', [], []],
|
|
['gdbus-connection', [], []],
|
|
['gdbus-connection-loss', [], []],
|
|
['gdbus-connection-slow', [], []],
|
|
['gdbus-error', [], []],
|
|
['gdbus-exit-on-close', [], []],
|
|
['gdbus-export', [], []],
|
|
['gdbus-introspection', [], []],
|
|
['gdbus-names', [], []],
|
|
['gdbus-proxy', [], []],
|
|
['gdbus-proxy-threads', [], [dbus1_dep]],
|
|
['gdbus-proxy-well-known-name', [], []],
|
|
['gdbus-test-codegen', [gdbus_test_codegen_generated], []],
|
|
['gdbus-threading', [], []],
|
|
['gmenumodel', [], []],
|
|
['gnotification', ['gnotification-server.c'], []],
|
|
]
|
|
|
|
if not glib_have_cocoa
|
|
gio_dbus_tests = [['dbus-appinfo', [], []]]
|
|
endif
|
|
|
|
# separate loop because extra source files for each test
|
|
foreach dbus_test : gio_dbus_tests
|
|
test_name = dbus_test[0]
|
|
extra_src = dbus_test[1]
|
|
extra_deps = dbus_test[2]
|
|
exe = executable(test_name, '@0@.c'.format(test_name),
|
|
'gdbus-sessionbus.c', 'gdbus-tests.c', extra_src,
|
|
install : false,
|
|
c_args : test_c_args,
|
|
dependencies : common_gio_tests_deps + extra_deps)
|
|
test(test_name, exe, env : test_env, suite : ['gio'])
|
|
endforeach
|
|
|
|
exe = executable('gdbus-test-codegen-old', 'gdbus-test-codegen.c',
|
|
'gdbus-sessionbus.c', 'gdbus-tests.c', gdbus_test_codegen_generated,
|
|
install : false,
|
|
c_args : test_c_args + ['-DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_36', '-DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_36'],
|
|
dependencies : common_gio_tests_deps)
|
|
test('gdbus-test-codegen-old', exe, env : test_env, suite : ['gio'])
|
|
|
|
# There is already a gapplication exe target in gio so need to use a
|
|
# different name for the unit test executable, since we can't have two
|
|
# targets of the same name even if in different directories
|
|
# (FIXME: just rename source file to gapplication-test.c)
|
|
if not glib_have_cocoa
|
|
exe = executable('gapplication-test', 'gapplication.c',
|
|
'gdbus-sessionbus.c', 'gdbus-tests.c',
|
|
install : false,
|
|
c_args : test_c_args,
|
|
dependencies : common_gio_tests_deps)
|
|
endif
|
|
test('gapplication', exe, env : test_env, suite : ['gio'])
|
|
|
|
gio_tests += ['gdbus-unix-addresses']
|
|
endif # have_dbus_daemon
|
|
|
|
# This test is currently unreliable
|
|
executable('gdbus-overflow', 'gdbus-overflow.c',
|
|
install : false,
|
|
c_args : test_c_args,
|
|
dependencies : common_gio_tests_deps)
|
|
|
|
exe = executable('gdbus-connection-flush', 'gdbus-connection-flush.c',
|
|
'test-io-stream.c', 'test-pipe-unix.c',
|
|
install : false,
|
|
c_args : test_c_args,
|
|
dependencies : common_gio_tests_deps)
|
|
test('gdbus-connection-flush', exe, env : test_env, suite : ['gio'])
|
|
|
|
exe = executable('gdbus-non-socket', 'gdbus-non-socket.c',
|
|
'gdbus-tests.c', 'test-io-stream.c', 'test-pipe-unix.c',
|
|
install : false,
|
|
c_args : test_c_args,
|
|
dependencies : common_gio_tests_deps)
|
|
test('gdbus-non-socket', exe, env : test_env, suite : ['gio'])
|
|
|
|
# Generate test.mo from de.po using msgfmt
|
|
msgfmt = find_program('msgfmt', required : false)
|
|
if msgfmt.found()
|
|
subdir('de/LC_MESSAGES')
|
|
# gsettings target exe already exists in gio directory
|
|
exe = executable('gsettings-test', 'gsettings.c', test_mo,
|
|
install : false,
|
|
c_args : test_c_args + [
|
|
'-DSRCDIR="@0@"'.format(meson.current_source_dir()),
|
|
'-DTEST_LOCALE_PATH="@0@"'.format(test_mo_dir),
|
|
],
|
|
dependencies : common_gio_tests_deps)
|
|
test('gsettings', exe, env : test_env, suite : ['gio'])
|
|
endif
|
|
endif # unix
|
|
|
|
# Test programs buildable on Windows only
|
|
if host_machine.system() == 'windows'
|
|
gio_tests += ['win32-streams']
|
|
endif
|
|
|
|
if cc.get_id() != 'msvc'
|
|
gio_tests += [ 'autoptr' ]
|
|
endif
|
|
|
|
foreach test_name : gio_tests
|
|
extra_deps = []
|
|
srcs = ['@0@.c'.format(test_name)]
|
|
# conflicts with glib/tests/autoptr, can't have two targets with same name
|
|
if test_name == 'autoptr'
|
|
test_name = 'autoptr-gio'
|
|
elif test_name == 'defaultvalue'
|
|
srcs += [giotypefuncs_inc]
|
|
elif test_name == 'gdbus-peer'
|
|
# This is peer to peer so it doesn't need a session bus, so we can run
|
|
# it automatically as a test by default
|
|
extra_deps = [libgdbus_example_objectmanager_dep]
|
|
endif
|
|
exe = executable(test_name, srcs,
|
|
install : false,
|
|
c_args : test_c_args,
|
|
dependencies : common_gio_tests_deps + extra_deps)
|
|
if test_name == 'testfilemonitor'
|
|
test(test_name, exe, env : test_env, timeout : 45, suite : ['gio', 'slow'])
|
|
else
|
|
test(test_name, exe, env : test_env, suite : ['gio'])
|
|
endif
|
|
endforeach
|
|
|
|
uninstalled_test_extra_programs = [
|
|
['gio-du'],
|
|
['echo-server'],
|
|
['filter-cat'],
|
|
['gapplication-example-actions'],
|
|
['gapplication-example-cmdline'],
|
|
['gapplication-example-cmdline2'],
|
|
['gapplication-example-cmdline3'],
|
|
['gapplication-example-cmdline4'],
|
|
['gapplication-example-dbushooks'],
|
|
['gapplication-example-open'],
|
|
['gdbus-daemon', gdbus_daemon_sources],
|
|
['gdbus-example-export'],
|
|
['gdbus-example-own-name'],
|
|
['gdbus-example-peer'],
|
|
['gdbus-example-proxy-subclass'],
|
|
['gdbus-example-server'],
|
|
['gdbus-example-subtree'],
|
|
['gdbus-example-watch-name'],
|
|
['gdbus-example-watch-proxy'],
|
|
['gsubprocess-testprog'],
|
|
['httpd'],
|
|
['proxy'],
|
|
['resolver'],
|
|
['send-data'],
|
|
['socket-server'],
|
|
['socket-client', ['gtlsconsoleinteraction.c']],
|
|
['tls-certificate', ['gtesttlsbackend.c']],
|
|
['tls-interaction', ['gtesttlsbackend.c']],
|
|
# These three are manual-run tests because they need a session bus but don't bring one up themselves
|
|
# FIXME: these build but don't seem to work!
|
|
['gdbus-example-objectmanager-client', [], [libgdbus_example_objectmanager_dep]],
|
|
['gdbus-example-objectmanager-server', [], [libgdbus_example_objectmanager_dep]],
|
|
['gdbus-test-fixture', [], [libgdbus_example_objectmanager_dep]],
|
|
]
|
|
|
|
if host_machine.system() != 'windows'
|
|
uninstalled_test_extra_programs += [['gdbus-example-unix-fd-client']]
|
|
endif
|
|
|
|
foreach extra_program : uninstalled_test_extra_programs + test_extra_programs
|
|
srcs = ['@0@.c'.format(extra_program[0])]
|
|
if extra_program.length() > 1
|
|
srcs += extra_program[1]
|
|
endif
|
|
extra_deps = []
|
|
if extra_program.length() > 2
|
|
extra_deps = extra_program[2]
|
|
endif
|
|
executable(extra_program[0], srcs,
|
|
install : false,
|
|
c_args : test_c_args,
|
|
dependencies : common_gio_tests_deps + extra_deps)
|
|
endforeach
|
|
|
|
if not meson.is_cross_build() or meson.has_exe_wrapper()
|
|
|
|
plugin_resources_c = custom_target('plugin-resources.c',
|
|
input : 'test4.gresource.xml',
|
|
output : 'plugin-resources.c',
|
|
command : [glib_compile_resources,
|
|
'--target=@OUTPUT@',
|
|
'--sourcedir=' + meson.current_source_dir(),
|
|
'--generate-source',
|
|
'--c-name', '_g_plugin',
|
|
'@INPUT@'])
|
|
|
|
if host_system == 'windows'
|
|
resource_plugin_platform_link_args = ['-no-undefined']
|
|
else
|
|
resource_plugin_platform_link_args = []
|
|
endif
|
|
shared_module ('resourceplugin', 'resourceplugin.c', plugin_resources_c,
|
|
link_args : export_dynamic_ldflags + resource_plugin_platform_link_args,
|
|
dependencies : common_gio_tests_deps)
|
|
|
|
test_gresource = custom_target('test.gresource',
|
|
input : 'test.gresource.xml',
|
|
output : 'test.gresource',
|
|
command : [glib_compile_resources,
|
|
'--target=@OUTPUT@',
|
|
'--sourcedir=' + meson.current_source_dir(),
|
|
'--sourcedir=' + meson.current_build_dir(),
|
|
'@INPUT@'])
|
|
|
|
test_resources2_c = custom_target('test_resources2.c',
|
|
input : 'test3.gresource.xml',
|
|
output : 'test_resources2.c',
|
|
command : [glib_compile_resources,
|
|
'--target=@OUTPUT@',
|
|
'--sourcedir=' + meson.current_source_dir(),
|
|
'--generate',
|
|
'--c-name', '_g_test2',
|
|
'--manual-register',
|
|
'@INPUT@'])
|
|
|
|
test_resources2_h = custom_target('test_resources2.h',
|
|
input : 'test3.gresource.xml',
|
|
output : 'test_resources2.h',
|
|
command : [glib_compile_resources,
|
|
'--target=@OUTPUT@',
|
|
'--sourcedir=' + meson.current_source_dir(),
|
|
'--generate',
|
|
'--c-name', '_g_test2',
|
|
'--manual-register',
|
|
'@INPUT@'])
|
|
|
|
test_resources_c = custom_target('test_resources.c',
|
|
input : 'test2.gresource.xml',
|
|
output : 'test_resources.c',
|
|
command : [glib_compile_resources,
|
|
'--target=@OUTPUT@',
|
|
'--sourcedir=' + meson.current_source_dir(),
|
|
'--generate-source',
|
|
'--c-name', '_g_test1',
|
|
'@INPUT@'])
|
|
|
|
# referenced by test.gresource.xml
|
|
test_generated_txt = configure_file(input : 'test1.txt',
|
|
output : 'test-generated.txt',
|
|
configuration : configuration_data(),
|
|
install : false)
|
|
|
|
exe = executable('resources', 'resources.c', test_gresource,
|
|
test_resources_c, test_resources2_c, test_resources2_h,
|
|
install : false,
|
|
c_args : test_c_args,
|
|
dependencies : common_gio_tests_deps)
|
|
test('resources', exe, env : test_env, suite : ['gio'])
|
|
endif
|
|
|
|
# FIXME: subdir('services')
|
|
subdir('modules')
|