This is an automated email from the git hooks/post-receive script.

git pushed a commit to branch wl/real-browser
in repository enlightenment.

View the commit online.

commit 2f0d0bd54f34b0e6a9d353351df9ec2214ab7a0d
Author: Cedric BAIL <[email protected]>
AuthorDate: Sun Aug 16 19:59:21 2026 -0600

    wl_test - never install the back door, and move its protocol beside it
    
    The wl_test module is a back door: it reads E's internal state and synthesises
    input. It was already gated on -Dtests=true, which is off by default, and it is
    in no profile's module list - the harnesses pull it in with
    E_MODULE_FORCE_LOAD. So a release build cannot ship it.
    
    That leaves two things that read wrong.
    
    The suite runs against an *installed* tree, so anyone who has run the tests
    once has built with -Dtests=true and has the back door sitting in their install
    prefix. It is inert unless force-loaded, but "inert" is a weaker promise than
    "absent", and it is not the promise this module should be making. Add a
    per-module no_install flag to the module loop and set it here.
    
    And wl-test.xml sat in src/protocol/, alongside the four protocols a shipped
    compositor actually advertises. It is not one of those, and three meson files
    reached across the tree to find it. Move it next to the module that implements
    it; the two test dirs now reach into src/modules/wl_test/, which is the honest
    direction for consumers of a test back door.
    
    Not installing means E cannot find the module on any search path, so whoever
    starts a compositor has to put it somewhere E looks. The first entry in
    path_modules is the *user* one, $(e_user_dir)/modules, and e_user_dir is
    $E_HOME/e - which the harnesses already own, because they run E in a throwaway
    HOME. So run-nested.sh and e_wlcs.c stage a symlink at
    
        $E_HOME/e/modules/wl_test/$MODULE_ARCH/module.so
    
    and go on force-loading it by name. E_HOME is now set explicitly rather than
    left to fall out of HOME: the fallback is .e/e or .config/e depending on
    whether the tree was built with DOXDG, and the staged path has to match
    whichever E picked.
    
    By name, not by path, and that is not a detail. e_module_new() does accept an
    absolute .so, but then E_Module.name is that path, which does not match the
    "wl_test" entry in _e_module_whitelist_check - and E answers an unrecognised
    module with an "Unstable module tainting" dialog on a 1.5s timer. That dialog
    is an ordinary client and it takes the focus, which is exactly the breakage
    7f0fffc91 went and fixed.
    
    The build hands the two things staging needs - the built .so and MODULE_ARCH -
    to the harnesses: through the test environment for run-nested.sh, through
    -D defines for e_wlcs.so. Both fail loudly if they are missing, because a
    compositor without the back door comes up perfectly well and then answers
    nothing, which reads as a hang rather than as a missing file.
    
    Verified against a DESTDIR install of a -Dtests=true build: no wl_test
    anywhere under it, meson_modules.sh's argument list does not name it, the other
    wl_* modules install and get renamed as before. All seven wayland protocol
    tests pass against that install, including test_wl_test.c which is nothing but
    the back door, and e_wlcs_driver passes - it positions a window through
    wl_test, so it exercises the staging in the shim too. The wlcs runner itself is
    not on this machine to run.
    
    Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
---
 src/modules/meson.build                | 27 ++++++++--
 src/modules/wl_test/e_mod_main.c       |  2 +-
 src/modules/wl_test/meson.build        | 28 +++++++++--
 src/modules/wl_test/wl-test.xml        |  6 ++-
 src/tests/meson.build                  | 25 ++++++++++
 src/tests/wayland/meson.build          |  7 ++-
 src/tests/wayland/run-nested.sh        | 59 +++++++++++++++++++---
 src/tests/wayland/test_pointer_frame.c |  2 +-
 src/tests/wlcs/e_wlcs.c                | 91 ++++++++++++++++++++++++++++++++--
 src/tests/wlcs/meson.build             |  8 ++-
 10 files changed, 229 insertions(+), 26 deletions(-)

diff --git a/src/modules/meson.build b/src/modules/meson.build
index b711fe49f..3727abadc 100644
--- a/src/modules/meson.build
+++ b/src/modules/meson.build
@@ -1,5 +1,11 @@
 module_files     = []
 module_ldflags   = '-module -avoid-version'
+# Modules built but deliberately left out of the install, by name and by the
+# path they landed at in the build tree. A module that is not installed cannot
+# be found on any of E's module search paths, so the build has to hand the
+# location to whoever loads it -- see src/tests/meson.build.
+uninstalled_module_names = []
+uninstalled_module_paths = []
 module_includes  = [ '../../..', '../../bin', '../../bin/efx' ]
 module_includes2 = [ '../..'   , '../bin'   , '../bin/efx'  ]
 module_deps      = [ deps_e, dep_dl ]
@@ -81,6 +87,7 @@ mods = [
 foreach m: mods
   disable      = false
   no_icon      = false
+  no_install   = false
   cargs        = ''
   data         = ""
   deps         = deps_e
@@ -106,7 +113,12 @@ foreach m: mods
                                         join_paths('.', m),
                                         _inc2)
     _conf         = 'USE_MODULE_' + m.underscorify().to_upper()
-    module_files += join_paths(_dir_bin, m + '.so')
+    # module_files is the list meson_modules.sh renames to module.so after
+    # install. Naming a module that was never installed would make that script
+    # fail on a missing file, so an uninstalled module stays out of it.
+    if no_install == false
+      module_files += join_paths(_dir_bin, m + '.so')
+    endif
 
     if no_icon == true
       _data = []
@@ -126,24 +138,29 @@ foreach m: mods
 
     config_h.set(_conf, '1')
     if cargs == ''
-      shared_module(m, src,
+      _mod = shared_module(m, src,
                     include_directories: _inc,
                     name_prefix        : '',
                     dependencies       : [ module_deps, deps ],
                     install_dir        : _dir_bin,
-                    install            : true,
+                    install            : no_install == false,
                     link_args          : '-Wl,--unresolved-symbols=ignore-all'
                    )
     else
-      shared_module(m, src,
+      _mod = shared_module(m, src,
                     include_directories: _inc,
                     c_args             : cargs,
                     name_prefix        : '',
                     dependencies       : [ module_deps, deps ],
                     install_dir        : _dir_bin,
-                    install            : true,
+                    install            : no_install == false,
                     link_args          : '-Wl,--unresolved-symbols=ignore-all'
                    )
     endif
+
+    if no_install == true
+      uninstalled_module_names += m
+      uninstalled_module_paths += _mod.full_path()
+    endif
   endif
 endforeach
diff --git a/src/modules/wl_test/e_mod_main.c b/src/modules/wl_test/e_mod_main.c
index 790e04f04..d0212122d 100644
--- a/src/modules/wl_test/e_mod_main.c
+++ b/src/modules/wl_test/e_mod_main.c
@@ -1,7 +1,7 @@
 /* Test-only back door into the compositor.
  *
  * Built only with -Dtests=true and never installed in a release build. See
- * src/protocol/e-test.xml for what it exposes and why.
+ * wl-test.xml next to this file for what it exposes and why.
  *
  * Everything here runs inside E's process, which is the whole point: it can
  * answer what E *believes* about a surface, not merely what E put on the
diff --git a/src/modules/wl_test/meson.build b/src/modules/wl_test/meson.build
index f54e77136..51e8de9fc 100644
--- a/src/modules/wl_test/meson.build
+++ b/src/modules/wl_test/meson.build
@@ -1,5 +1,22 @@
-# Test-only module. Never built unless -Dtests=true, so a release build
-# cannot ship the back door even by accident.
+# Test-only module: a back door into a running compositor.
+#
+# Two gates, and they answer different questions.
+#
+#   * Never built unless -Dtests=true, so a release build cannot ship the back
+#     door even by accident.
+#
+#   * Never installed, even when it is built. The suite requires an installed
+#     tree to run against, so without this every developer who has run the
+#     tests once has the back door sitting in their install prefix. It is
+#     inert unless force-loaded, but "inert" is a weaker promise than "absent".
+#
+# Not installing means E cannot find it on any of its module search paths, so
+# whoever loads it has to put it somewhere E looks. The harnesses stage it into
+# the throwaway HOME they already create -- see run-nested.sh.
+#
+# wl-test.xml lives here rather than in src/protocol/ because it is not part of
+# the protocol surface E offers: everything in src/protocol/ is advertised by a
+# shipped compositor, and this is not.
 if get_option('wl') != true or get_option('tests') != true
   disable = true
 else
@@ -7,8 +24,9 @@ else
     'e_mod_main.c'
   )
 
-  src += gen_scanner_server.process('../../protocol/wl-test.xml')
-  src += gen_scanner_impl.process('../../protocol/wl-test.xml')
+  src += gen_scanner_server.process('wl-test.xml')
+  src += gen_scanner_impl.process('wl-test.xml')
 
-  no_icon = true
+  no_icon    = true
+  no_install = true
 endif
diff --git a/src/modules/wl_test/wl-test.xml b/src/modules/wl_test/wl-test.xml
index 36c52206b..1b0fab907 100644
--- a/src/modules/wl_test/wl-test.xml
+++ b/src/modules/wl_test/wl-test.xml
@@ -27,7 +27,11 @@
     <description summary="private interface for the compositor test suite">
       A back door into the compositor for its own test suite. It exposes
       internal state and synthesises input, so it is deliberately NOT built
-      unless -Dtests=true and it is never installed in a release build.
+      unless -Dtests=true, and never installed even then - the harnesses stage
+      it into the throwaway HOME they create. This file lives beside the module
+      that implements it rather than in src/protocol/, because everything in
+      src/protocol/ is protocol a shipped compositor advertises and this is
+      not.
 
       Enlightenment is a single large main() rather than a library, so tests
       cannot construct a compositor per case and reach into it the way KWin's
diff --git a/src/tests/meson.build b/src/tests/meson.build
index cc20842b6..651537174 100644
--- a/src/tests/meson.build
+++ b/src/tests/meson.build
@@ -7,6 +7,31 @@
 executable('timeout', 'timeout.c')
 
 if get_option('wl') == true
+  # Where the wl_test back door landed in the build tree.
+  #
+  # It is deliberately not installed (src/modules/wl_test/meson.build), so E
+  # cannot find it by name on any search path. Every harness below has to stage
+  # it into the throwaway HOME it creates, and this is where it learns the two
+  # things it needs to do that: the file, and the arch directory E expects to
+  # find it under.
+  #
+  # Resolved once here rather than in each suite, and hard-failing rather than
+  # producing an empty path: a suite that silently starts a compositor without
+  # the back door does not fail, it hangs on the first question it asks.
+  wl_test_module_so = ''
+  i = 0
+  foreach n: uninstalled_module_names
+    if n == 'wl_test'
+      wl_test_module_so = uninstalled_module_paths[i]
+    endif
+    i += 1
+  endforeach
+
+  if wl_test_module_so == ''
+    error('tests are enabled but the wl_test module was not built; ' +
+          '-Dwl-test=true is required with -Dtests=true')
+  endif
+
   subdir('wayland')
   subdir('wlcs')
 endif
diff --git a/src/tests/wayland/meson.build b/src/tests/wayland/meson.build
index 5a1700eee..8befa0ff1 100644
--- a/src/tests/wayland/meson.build
+++ b/src/tests/wayland/meson.build
@@ -18,6 +18,11 @@ check_globals = files('check-globals.sh')
 
 wl_test_env = environment()
 wl_test_env.set('E_TEST_BIN', e_test_bin)
+# The back door is not installed, so run-nested.sh stages it into the private
+# HOME it makes. It needs the built file and the arch directory name E derives
+# its module search path from.
+wl_test_env.set('E_TEST_MODULE_SO', wl_test_module_so)
+wl_test_env.set('E_TEST_MODULE_ARCH', module_arch)
 
 e_test_globals = executable('e_test_globals',
   'e_test_globals.c',
@@ -28,7 +33,7 @@ e_test_globals = executable('e_test_globals',
 # a test needs to map a surface before the compositor has an E_Client for it.
 test_proto_src = []
 foreach p: [
-  '../../protocol/wl-test.xml',
+  '../../modules/wl_test/wl-test.xml',
   '@0@/stable/xdg-shell/xdg-shell.xml'.format(dir_wayland_protocols),
   '@0@/staging/xdg-activation/xdg-activation-v1.xml'.format(dir_wayland_protocols),
 ]
diff --git a/src/tests/wayland/run-nested.sh b/src/tests/wayland/run-nested.sh
index 41bef09a7..f379a97d4 100755
--- a/src/tests/wayland/run-nested.sh
+++ b/src/tests/wayland/run-nested.sh
@@ -4,11 +4,17 @@
 #   run-nested.sh <client> [args...]
 #
 # Environment:
-#   E_TEST_BIN       path to the installed enlightenment binary (required)
-#   E_TEST_BACKEND   buffer (default) | x11 | wl        -- see E_WL_FORCE
-#   E_TEST_TIMEOUT   seconds to wait for E's socket (default 20)
-#   E_TEST_KEEP      set to 1 to keep the temp dir and print E's log path
-#   WAYLAND_DEBUG    passed through to the client
+#   E_TEST_BIN         path to the installed enlightenment binary (required)
+#   E_TEST_MODULE_SO   path to the built wl_test.so (required; see below)
+#   E_TEST_MODULE_ARCH E's MODULE_ARCH string (required; see below)
+#   E_TEST_BACKEND     buffer (default) | x11 | wl      -- see E_WL_FORCE
+#   E_TEST_TIMEOUT     seconds to wait for E's socket (default 20)
+#   E_TEST_KEEP        set to 1 to keep the temp dir and print E's log path
+#   WAYLAND_DEBUG      passed through to the client
+#
+# Meson supplies the three required ones, so 'meson test' needs no setup. Run
+# by hand, they have to be set: the paths are build-tree paths and this script
+# has no way to guess where the build tree is.
 #
 # Exits with the client's exit status, or 1 if the compositor never came up.
 #
@@ -43,6 +49,22 @@ if [ -z "$E_BIN" ] || [ ! -x "$E_BIN" ]; then
     exit 1
 fi
 
+MODULE_SO=${E_TEST_MODULE_SO:-}
+if [ -z "$MODULE_SO" ] || [ ! -f "$MODULE_SO" ]; then
+    echo "run-nested.sh: E_TEST_MODULE_SO is unset or missing: '${MODULE_SO}'" >&2
+    echo "run-nested.sh: it is the wl_test back door, built by -Dtests=true" >&2
+    echo "run-nested.sh: and deliberately never installed." >&2
+    exit 1
+fi
+
+MODULE_ARCH=${E_TEST_MODULE_ARCH:-}
+if [ -z "$MODULE_ARCH" ]; then
+    echo "run-nested.sh: E_TEST_MODULE_ARCH is unset" >&2
+    echo "run-nested.sh: it is MODULE_ARCH from config.h, e.g." >&2
+    echo "run-nested.sh:   linux-gnu-x86_64-dev-0.27.99" >&2
+    exit 1
+fi
+
 BACKEND=${E_TEST_BACKEND:-buffer}
 TIMEOUT=${E_TEST_TIMEOUT:-20}
 
@@ -65,6 +87,28 @@ fi
 RUNDIR=$(mktemp -d "${TMPDIR:-/tmp}/e-wl-test.XXXXXX")
 chmod 0700 "$RUNDIR"
 
+# Stage the back door where E will look for it.
+#
+# wl_test is built but never installed, so e_module_new("wl_test") finds
+# nothing on the default search paths. The *first* of those paths is the user
+# one -- e_main.c appends "$(e_user_dir)/modules" before either prefix path --
+# and e_user_dir is $E_HOME/e, which is ours. So a correctly named symlink
+# under it is the whole trick. E_HOME is set explicitly rather than left to
+# fall out of HOME because the fallback is .e/e or .config/e depending on
+# whether the tree was built with DOXDG, and the staged path has to match
+# whichever E picked.
+#
+# Force-loading by absolute path would also work -- e_module_new accepts one --
+# and is the wrong answer. E_Module.name would then be that path, which does
+# not match the "wl_test" entry in _e_module_whitelist_check, and E answers an
+# unrecognised module with an "Unstable module tainting" dialog on a 1.5s
+# timer. That dialog is an ordinary client and it takes the focus, which
+# silently breaks every test that cares where the focus is.
+E_HOME="$RUNDIR/.e"
+MODULE_DIR="$E_HOME/e/modules/wl_test/$MODULE_ARCH"
+mkdir -p "$MODULE_DIR"
+ln -s "$MODULE_SO" "$MODULE_DIR/module.so"
+
 E_PID=""
 E_LOG="$RUNDIR/enlightenment.log"
 
@@ -134,8 +178,8 @@ trap cleanup EXIT INT TERM
 
 # The test back door is deliberately not in the wltest profile's module list:
 # pulling it in by env var keeps the profile a description of the compositor
-# under test rather than of the harness. E_MODULE_FORCE_LOAD also accepts an
-# absolute .so path, which e_module_new() has always handled.
+# under test rather than of the harness. By name, not by path -- see the
+# staging note above for why the distinction matters.
 E_TEST_MODULE=${E_TEST_MODULE:-wl_test}
 
 # Off here: our own tests follow xdg-shell properly, so they have no need of
@@ -155,6 +199,7 @@ E_LOCALE_DIR="$E_PREFIX/share/locale" \
 E_WL_FORCE="$BACKEND" \
 E_CONF_PROFILE=wltest \
 E_CONF_PROFILE_NOSAVE=1 \
+E_HOME="$E_HOME" \
 HOME="$RUNDIR" \
     "$E_BIN" >"$E_LOG" 2>&1 &
 E_PID=$!
diff --git a/src/tests/wayland/test_pointer_frame.c b/src/tests/wayland/test_pointer_frame.c
index 1b0cbee95..79efdfad8 100644
--- a/src/tests/wayland/test_pointer_frame.c
+++ b/src/tests/wayland/test_pointer_frame.c
@@ -432,7 +432,7 @@ main(void)
     * Touch id 1, never 0: Evas reserves multi-touch device 0 for the mouse
     * pointer and drops MULTI_DOWN/MOVE/UP for it silently. Passing 0 here
     * produces no wl_touch events whatever the compositor does, which is
-    * indistinguishable from a compositor bug. See src/protocol/wl-test.xml. */
+    * indistinguishable from a compositor bug. See src/modules/wl_test/wl-test.xml. */
    _log_reset();
    wl_test_touch_down(tester, 1, SX + (W / 2), SY + (H / 2));
    if (tester_sync() < 0) FAIL("sync failed after touch down");
diff --git a/src/tests/wlcs/e_wlcs.c b/src/tests/wlcs/e_wlcs.c
index 7f9d55b77..ea9286f08 100644
--- a/src/tests/wlcs/e_wlcs.c
+++ b/src/tests/wlcs/e_wlcs.c
@@ -28,7 +28,7 @@
  * cannot look that up from here. Instead we bind the private wl_test interface
  * on that same client's wl_display - so the object is valid on the connection
  * we send it over - and let the compositor resolve it. See
- * src/protocol/wl-test.xml.
+ * src/modules/wl_test/wl-test.xml.
  */
 #include <dirent.h>
 #include <errno.h>
@@ -57,6 +57,16 @@
 # define E_WLCS_DEFAULT_BIN "enlightenment"
 #endif
 
+/* Where the build put the wl_test back door, and the arch directory name E
+ * expects to find a module under. Both come from the build; there is no
+ * sensible default, because the module is deliberately never installed. */
+#ifndef E_WLCS_TEST_MODULE_SO
+# define E_WLCS_TEST_MODULE_SO ""
+#endif
+#ifndef E_WLCS_TEST_MODULE_ARCH
+# define E_WLCS_TEST_MODULE_ARCH ""
+#endif
+
 #define STARTUP_TIMEOUT_MS 20000
 
 typedef struct
@@ -186,12 +196,82 @@ _wait_for_socket(E_Server *s)
    return -1;
 }
 
+/* Stage the back door where E will look for it.
+ *
+ * wl_test is built but never installed, so e_module_new("wl_test") finds
+ * nothing on the default search paths. The *first* of those paths is the user
+ * one - e_main.c appends "$(e_user_dir)/modules" before either prefix path -
+ * and e_user_dir is $E_HOME/e, which is ours for the lifetime of this
+ * compositor. A correctly named symlink under it is the whole trick.
+ *
+ * E_HOME is set explicitly rather than left to fall out of HOME because the
+ * fallback is .e/e or .config/e depending on whether the tree was built with
+ * DOXDG, and the staged path has to match whichever E picked.
+ *
+ * Force-loading by absolute path would also work - e_module_new accepts one -
+ * and is the wrong answer. E_Module.name would then be that path, which does
+ * not match the "wl_test" entry in _e_module_whitelist_check, and E answers an
+ * unrecognised module with an "Unstable module tainting" dialog on a 1.5s
+ * timer. That dialog is an ordinary client and it takes the focus; every wlcs
+ * test runs about two seconds, so it lands inside nearly all of them.
+ *
+ * Returns 0 on success. Failing here is fatal to the run rather than merely
+ * slow: without the module the compositor comes up fine and every question we
+ * ask it goes unanswered, which reads as a hang and not as a missing file.
+ */
+static int
+_stage_test_module(const char *home, char *e_home, size_t e_home_size)
+{
+   char dir[PATH_MAX], link[PATH_MAX];
+   char *p;
+
+   if (!E_WLCS_TEST_MODULE_SO[0] || !E_WLCS_TEST_MODULE_ARCH[0])
+     {
+        fprintf(stderr, "e_wlcs: built without the wl_test module path; "
+                        "reconfigure with -Dtests=true -Dwl-test=true\n");
+        return -1;
+     }
+
+   snprintf(e_home, e_home_size, "%s/.e", home);
+   snprintf(dir, sizeof(dir), "%s/e/modules/wl_test/%s",
+            e_home, E_WLCS_TEST_MODULE_ARCH);
+
+   /* mkdir -p, in place: walk the string turning each '/' into a NUL, make
+    * that prefix, put it back. */
+   for (p = dir + 1; *p; p++)
+     {
+        if (*p != '/') continue;
+        *p = '\0';
+        if ((mkdir(dir, 0700) < 0) && (errno != EEXIST))
+          {
+             fprintf(stderr, "e_wlcs: mkdir %s: %s\n", dir, strerror(errno));
+             return -1;
+          }
+        *p = '/';
+     }
+   if ((mkdir(dir, 0700) < 0) && (errno != EEXIST))
+     {
+        fprintf(stderr, "e_wlcs: mkdir %s: %s\n", dir, strerror(errno));
+        return -1;
+     }
+
+   snprintf(link, sizeof(link), "%s/module.so", dir);
+   if (symlink(E_WLCS_TEST_MODULE_SO, link) < 0)
+     {
+        fprintf(stderr, "e_wlcs: symlink %s -> %s: %s\n",
+                link, E_WLCS_TEST_MODULE_SO, strerror(errno));
+        return -1;
+     }
+
+   return 0;
+}
+
 static void
 _server_start(WlcsDisplayServer *server)
 {
    E_Server *s = (E_Server *)server;
    const char *bin = getenv("E_WLCS_BIN") ?: E_WLCS_DEFAULT_BIN;
-   char prefix[PATH_MAX], buf[PATH_MAX];
+   char prefix[PATH_MAX], buf[PATH_MAX], e_home[PATH_MAX];
    const char *slash;
    pid_t pid;
 
@@ -204,6 +284,10 @@ _server_start(WlcsDisplayServer *server)
      }
    chmod(s->runtime_dir, 0700);
 
+   /* HOME is the runtime dir too, so the back door goes under it and is
+    * removed with it. */
+   if (_stage_test_module(s->runtime_dir, e_home, sizeof(e_home)) < 0) return;
+
    /* A private XDG_RUNTIME_DIR means the compositor under test owns the only
     * socket in it, so we know its name without having to discover it: E picks
     * its own via ecore_wl2_display_create(NULL) and never exports
@@ -247,6 +331,7 @@ _server_start(WlcsDisplayServer *server)
 
         setenv("XDG_RUNTIME_DIR", s->runtime_dir, 1);
         setenv("HOME", s->runtime_dir, 1);
+        setenv("E_HOME", e_home, 1);
         setenv("E_WL_FORCE", "buffer", 1);
         setenv("E_CONF_PROFILE", "wltest", 1);
         setenv("E_CONF_PROFILE_NOSAVE", "1", 1);
@@ -593,7 +678,7 @@ _server_create_pointer(WlcsDisplayServer *server)
 /* Not 0. Evas reserves multi-touch device 0 for the mouse pointer and drops
  * MULTI_DOWN/MOVE/UP for it without a word, so every touch test run through
  * this shim before 2026-08-09 was injecting into a black hole and measuring
- * nothing. See src/protocol/wl-test.xml, touch_down. wlcs only ever drives one
+ * nothing. See src/modules/wl_test/wl-test.xml, touch_down. wlcs only ever drives one
  * touch point and matches down to up by the id the compositor reports, so
  * which non-zero number this is does not matter to it. */
 #define E_WLCS_TOUCH_ID 1
diff --git a/src/tests/wlcs/meson.build b/src/tests/wlcs/meson.build
index c4a1ec30f..7139491e6 100644
--- a/src/tests/wlcs/meson.build
+++ b/src/tests/wlcs/meson.build
@@ -2,7 +2,7 @@ dep_wlcs = dependency('wlcs', required: false)
 
 if dep_wlcs.found()
   wlcs_proto_src = []
-  foreach p: ['../../protocol/wl-test.xml',
+  foreach p: ['../../modules/wl_test/wl-test.xml',
               '@0@/stable/xdg-shell/xdg-shell.xml'.format(dir_wayland_protocols)]
     wlcs_proto_src += gen_scanner_client.process(p)
     wlcs_proto_src += gen_scanner_impl.process(p)
@@ -17,7 +17,11 @@ if dep_wlcs.found()
     ['e_wlcs.c', wlcs_proto_src],
     name_prefix : '',
     dependencies: [dep_wlcs, dependency('wayland-client')],
-    c_args      : ['-DE_WLCS_DEFAULT_BIN="@0@"'.format(e_bin_path)],
+    c_args      : ['-DE_WLCS_DEFAULT_BIN="@0@"'.format(e_bin_path),
+                   # The back door is not installed; the shim stages it into
+                   # the private HOME it makes, exactly as run-nested.sh does.
+                   '-DE_WLCS_TEST_MODULE_SO="@0@"'.format(wl_test_module_so),
+                   '-DE_WLCS_TEST_MODULE_ARCH="@0@"'.format(module_arch)],
   )
 
   # Drives the integration's own hooks, without the wlcs runner.

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.

Reply via email to