tests: allow running make check without make install
desktop shell and weston keyboard both refer to themselves prefixed by
LIBEXECDIR, however this is only valid once installed. make check will
currently either fail or run pre-existing versions.
This patch adds a way to override that location by setting the env var
WESTON_BUILD_DIR - which is then set by the test env script so make check
will test the versions in the build directory regardless of whether they're
installed or not.
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c
index 20536d7..99f3343 100644
--- a/desktop-shell/shell.c
+++ b/desktop-shell/shell.c
@@ -567,7 +567,7 @@
{
struct weston_config_section *section;
int duration;
- char *s;
+ char *s, *client;
section = weston_config_get_section(shell->compositor->config,
"screensaver", NULL, NULL);
@@ -578,8 +578,11 @@
section = weston_config_get_section(shell->compositor->config,
"shell", NULL, NULL);
+ asprintf(&client, "%s/%s", weston_config_get_libexec_dir(),
+ WESTON_SHELL_CLIENT);
weston_config_section_get_string(section,
- "client", &s, LIBEXECDIR "/" WESTON_SHELL_CLIENT);
+ "client", &s, client);
+ free(client);
shell->client = s;
weston_config_section_get_string(section,
"binding-modifier", &s, "super");
diff --git a/shared/config-parser.c b/shared/config-parser.c
index 8defbbb..4542ca6 100644
--- a/shared/config-parser.c
+++ b/shared/config-parser.c
@@ -282,6 +282,18 @@
return 0;
}
+WL_EXPORT
+const char *
+weston_config_get_libexec_dir(void)
+{
+ const char *path = getenv("WESTON_BUILD_DIR");
+
+ if (path)
+ return path;
+
+ return LIBEXECDIR;
+}
+
static struct weston_config_section *
config_add_section(struct weston_config *config, const char *name)
{
diff --git a/shared/config-parser.h b/shared/config-parser.h
index 745562b..1ecc8cc 100644
--- a/shared/config-parser.h
+++ b/shared/config-parser.h
@@ -92,6 +92,9 @@
weston_config_section_get_bool(struct weston_config_section *section,
const char *key,
int *value, int default_value);
+const char *
+weston_config_get_libexec_dir(void);
+
struct weston_config *
weston_config_parse(const char *name);
diff --git a/src/screenshooter.c b/src/screenshooter.c
index 4403933..af2c754 100644
--- a/src/screenshooter.c
+++ b/src/screenshooter.c
@@ -286,12 +286,16 @@
void *data)
{
struct screenshooter *shooter = data;
- const char *screenshooter_exe = LIBEXECDIR "/weston-screenshooter";
+ char *screenshooter_exe;
+
+ asprintf(&screenshooter_exe, "%s/%s", weston_config_get_libexec_dir(),
+ "/weston-screenshooter");
if (!shooter->client)
shooter->client = weston_client_launch(shooter->ec,
&shooter->process,
screenshooter_exe, screenshooter_sigchld);
+ free(screenshooter_exe);
}
struct weston_recorder {
diff --git a/src/text-backend.c b/src/text-backend.c
index 1d549d4..7d2a064 100644
--- a/src/text-backend.c
+++ b/src/text-backend.c
@@ -937,12 +937,16 @@
text_backend_configuration(struct text_backend *text_backend)
{
struct weston_config_section *section;
+ char *client;
section = weston_config_get_section(text_backend->compositor->config,
"input-method", NULL, NULL);
+ asprintf(&client, "%s/weston-keyboard",
+ weston_config_get_libexec_dir());
weston_config_section_get_string(section, "path",
&text_backend->input_method.path,
- LIBEXECDIR "/weston-keyboard");
+ client);
+ free(client);
}
static void
diff --git a/tests/weston-tests-env b/tests/weston-tests-env
index 473e092..e332354 100755
--- a/tests/weston-tests-env
+++ b/tests/weston-tests-env
@@ -28,6 +28,7 @@
case $TESTNAME in
*.la|*.so)
+ WESTON_BUILD_DIR=$abs_builddir \
$WESTON --backend=$BACKEND \
--no-config \
--shell=$SHELL_PLUGIN \
@@ -37,6 +38,7 @@
&> "$OUTLOG"
;;
*)
+ WESTON_BUILD_DIR=$abs_builddir \
WESTON_TEST_CLIENT_PATH=$abs_builddir/$TESTNAME $WESTON \
--socket=test-$(basename $TESTNAME) \
--backend=$BACKEND \