diff options
author | Peter Hutterer <peter.hutterer@who-t.net> | 2020-11-26 10:41:27 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2020-11-30 09:42:33 +1000 |
commit | 7121e323de32405a67bcad43e77431145240b9de (patch) | |
tree | 32a98ea4736e1f36a75247fa6832a06adccd34c6 | |
parent | 8fe2af535c6f0fc4f39444b81b1c5f631ef199c0 (diff) |
Add support for meson
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r-- | README | 40 | ||||
-rw-r--r-- | meson.build | 148 | ||||
-rw-r--r-- | meson_options.txt | 2 |
3 files changed, 188 insertions, 2 deletions
@@ -10,8 +10,44 @@ Moreover, a custom main() function that takes care of setting up the environment is provided in xorg-gtest_main.cpp. This can be used as a replacement for libgtest_main.a -Using X.org GTest in a project -============================== +Using X.org GTest in a meson project +========================================= + +First, initialize xorg-gtest in the `subprojects/` folder of your project, +ideally as git submodule: +``` +$ mkdir subprojects && cd subprojects +$ git submodule add https://gitlab.freedesktop.org/xorg/test/xorg-gtest/ +$ git submodule init +``` + +Then use this as subproject in `meson.build`: + +``` +xorg_gtest = subproject('xorg-gtest') + +my_dependencies = [ + dependency('somelibrary'), + dependency('other_library'), + ... other dependencies ... + xorg_gtest.get_variable('xorg_gtest_dependency') +] + +my_includes = [ + include_directories('src'), + ... other includes ... + xorg_gtest.get_variable('xorg_gtest_includes') +] + +executable('mytest', + 'test.cpp', + dependencies: my_dependencies, + include_directories: my_includes) +``` + + +Using X.org GTest in an autotools project +========================================= The X.org GTest does not provide precompiled libraries. Each project must build the X.org GTest sources. To facilitate this, aclocal and automake include files diff --git a/meson.build b/meson.build new file mode 100644 index 0000000..d410046 --- /dev/null +++ b/meson.build @@ -0,0 +1,148 @@ +# Note: this project is to be used as a *source* dependency and as +# subproject in a parent project. +# see the PUBLIC API comment at the bottom for which variables may be used +# +project('xorg-gtest', 'cpp', + version: '0.7.1', + license: 'MIT/Expat', + default_options: ['warning_level=2']) + +pkgconfig = import('pkgconfig') +dep_x11 = dependency('x11') +dep_xi = dependency('xi') +dep_evemu = dependency('evemu') + +dummy_conf = join_paths(meson.current_source_dir(), 'data', 'xorg', 'gtest', 'dummy.conf') + +# +# build gtest itself as static library +# +gtest_sources = files( + 'gtest/include/gtest/gtest.h', + 'gtest/include/gtest/gtest-spi.h', + 'gtest/src/gtest-all.cc', +) +gtest_includes = [ + include_directories('gtest/include'), + include_directories('gtest/'), +] +gtest_deps = [ + dependency('threads'), +] +libgtest = static_library('gtest', + gtest_sources, + dependencies: gtest_deps, + include_directories: gtest_includes) +dep_gtest = declare_dependency(link_with: libgtest) + +xorg_gtest_sources = files( + 'include/xorg/gtest/xorg-gtest-environment.h', + 'include/xorg/gtest/xorg-gtest-process.h', + 'include/xorg/gtest/xorg-gtest-test.h', + 'include/xorg/gtest/xorg-gtest-xserver.h', + 'include/xorg/gtest/evemu/xorg-gtest-device.h', + 'include/xorg/gtest/xorg-gtest.h', + + 'src/defines.h', + 'src/xorg-gtest_main.cpp', + 'src/environment.cpp', + 'src/device.cpp', + 'src/process.cpp', + 'src/test.cpp', + 'src/xserver.cpp', + 'src/xorg-gtest-all.cpp', +) + +xorg_gtest_incs = [ + gtest_includes, + include_directories('include'), +] +xorg_gtest_dependencies = [ + dep_gtest, + dep_evemu, + dep_x11, + dep_xi, +] +lib_xorg_gtest = static_library('xorg-gtest', + xorg_gtest_sources, + include_directories: xorg_gtest_incs, + dependencies: xorg_gtest_dependencies, + cpp_args: [ + '-DDUMMY_CONF_PATH="@0@"'.format(dummy_conf), + '-DLOGFILE_DIR="@0@"'.format(get_option('logpath')), + ], + ) + +dep_xorg_gtest = declare_dependency(link_with: lib_xorg_gtest, + include_directories: [gtest_includes, xorg_gtest_incs]) + + +# +# tests +# + +recordings = [ + 'test/SynPS2-Synaptics-TouchPad.desc', + 'test/PIXART-USB-OPTICAL-MOUSE.desc' +] +foreach r: recordings + configure_file(input: r, output: '@PLAINNAME@', copy: true, install: false) +endforeach + +executable('process-test-helper', + 'test/process-test-helper.cpp', + install: false) +test('test-process', + executable('test-process', + 'test/process-test.cpp', + dependencies: dep_xorg_gtest, + cpp_args: [ + '-DTEST_ROOT_DIR="@0@/test/"'.format(meson.current_source_dir()), + '-DTEST_BUILD_DIR="@0@/"'.format(meson.current_build_dir()), + ], + install: false, + ), + is_parallel: false, +) +test('test-device', + executable('test-device', + 'test/device-test.cpp', + dependencies: dep_xorg_gtest, + cpp_args: [ + '-DTEST_ROOT_DIR="@0@/test/"'.format(meson.current_source_dir()), + ], + install: false, + ), + is_parallel: false, +) +executable('xserver-test-helper', + 'test/xserver-test-helper.cpp', + install: false) +test('test-xserver', + executable('test-xserver', + 'test/xserver-test.cpp', + dependencies: dep_xorg_gtest, + cpp_args: [ + '-DTEST_ROOT_DIR="@0@/test/"'.format(meson.current_source_dir()), + '-DTEST_BUILD_DIR="@0@/"'.format(meson.current_build_dir()), + '-DDUMMY_CONF_PATH="@0@"'.format(dummy_conf), + '-DLOGFILE_DIR="@0@"'.format(get_option('logpath')), + ], + install: false, + ), + is_parallel: false, +) + +# +# PUBLIC API: +# The variables below are the ones that may be used by any parent +# projects. +# +# Use with: +# xorg_gest = subproject('xorg-gtest') +# executable('foo', +# dependencies: xorg_gtest.get_variable('xorg_gtest_dependency'), +# include_directories: xorg_gtest.get_variable('xorg_gtest_includes')) +# +xorg_gtest_dependency = dep_xorg_gtest +xorg_gtest_includes = xorg_gtest_incs diff --git a/meson_options.txt b/meson_options.txt new file mode 100644 index 0000000..9a2ecc0 --- /dev/null +++ b/meson_options.txt @@ -0,0 +1,2 @@ +option('logpath', type: 'string', value: '/tmp', + description: 'Base path for server log and config files (default: /tmp)') |