The binary takes an argument to check whether we expect the builddir to be detected or not. Then it's executed once as normal test and once after being copied to /tmp.
Signed-off-by: Peter Hutterer <[email protected]> --- that was easier than expected... :) meson.build | 16 +++++++++ tools/helper-copy-and-exec-from-tmp.sh | 18 ++++++++++ tools/test-builddir-lookup.c | 47 ++++++++++++++++++++++++++ 3 files changed, 81 insertions(+) create mode 100755 tools/helper-copy-and-exec-from-tmp.sh create mode 100644 tools/test-builddir-lookup.c diff --git a/meson.build b/meson.build index 826b4fd0..45786d9f 100644 --- a/meson.build +++ b/meson.build @@ -679,6 +679,22 @@ executable('ptraccel-debug', install : false ) +# the libinput tools check whether we execute from the builddir, this is +# the test to verify that lookup. We test twice, once as normal test +# run from the builddir, once after copying to /tmp +test_builddir_lookup = executable('test-builddir-lookup', + 'tools/test-builddir-lookup.c', + dependencies : [ dep_tools_shared], + include_directories : [includes_src, includes_include], + install : false) +test('tools-builddir-lookup', + test_builddir_lookup, + args : ['--builddir-is-set']) +test('tools-builddir-lookup-installed', + find_program('tools/helper-copy-and-exec-from-tmp.sh'), + args : [test_builddir_lookup.full_path(), '--builddir-is-null'], + workdir : '/tmp') + ############ tests ############ test_symbols_leak = find_program('test/symbols-leak-test.in') diff --git a/tools/helper-copy-and-exec-from-tmp.sh b/tools/helper-copy-and-exec-from-tmp.sh new file mode 100755 index 00000000..46182c42 --- /dev/null +++ b/tools/helper-copy-and-exec-from-tmp.sh @@ -0,0 +1,18 @@ +#!/bin/bash -x +# +# Usage: helper-copy-and-exec-from-tmp.sh /path/to/binary [args] +# +# Copies the given binary into a unique file in /tmp and executes it with +# [args]. Exits with the same return code as the binary did. + +executable="$1" +shift + +target_name=$(mktemp) +cp "$executable" "$target_name" +chmod +x "$target_name" + +$target_name "$@" +rc=$? +rm $target_name +exit $rc diff --git a/tools/test-builddir-lookup.c b/tools/test-builddir-lookup.c new file mode 100644 index 00000000..457ed8cb --- /dev/null +++ b/tools/test-builddir-lookup.c @@ -0,0 +1,47 @@ +/* + * Copyright © 2018 Red Hat, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#include "config.h" +#include "libinput-util.h" +#include "shared.h" + + +int main(int argc, char **argv) { + char *builddir; + char *mode; + + assert(argc == 2); + mode = argv[1]; + + builddir = tools_execdir_is_builddir(); + if (streq(mode, "--builddir-is-null")) { + assert(builddir == NULL); + } else if (streq(mode, "--builddir-is-set")) { + assert(builddir != NULL); + assert(streq(MESON_BUILD_ROOT, builddir)); + } else { + abort(); + } + + return 0; +} -- 2.17.1 _______________________________________________ wayland-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/wayland-devel
