Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <campbell@blender.org>2022-07-05 07:49:36 +0300
committerCampbell Barton <campbell@blender.org>2022-07-06 08:30:47 +0300
commite58e023e1a3e10f4ff2557aedcd730b5dba23579 (patch)
tree6f4383d011e359b13add3dd7917a7e69b4231c0e /intern/wayland_dynload/extern/wayland_dynload_client.h
parentd9505831a4549e872bcef023ac082d002e8d8392 (diff)
GHOST/Wayland: support dynamic loading libraries for Wayland
Add intern/wayland_dynload which is used when WITH_GHOST_WAYLAND_DYNLOAD is enabled (off by default). When enabled, systems without Wayland installed will fall back to X11. This allows Blender to dynamically load: - libwayland-client - libwayland-cursor - libwayland-egl - libdecor-0 (when WITH_GHOST_WAYLAND_LIBDECOR is enabled).
Diffstat (limited to 'intern/wayland_dynload/extern/wayland_dynload_client.h')
-rw-r--r--intern/wayland_dynload/extern/wayland_dynload_client.h128
1 files changed, 128 insertions, 0 deletions
diff --git a/intern/wayland_dynload/extern/wayland_dynload_client.h b/intern/wayland_dynload/extern/wayland_dynload_client.h
new file mode 100644
index 00000000000..8e9dddd91a3
--- /dev/null
+++ b/intern/wayland_dynload/extern/wayland_dynload_client.h
@@ -0,0 +1,128 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+/** \file
+ * \ingroup intern_wayland_dynload
+ *
+ * Wrapper functions for `<wayland-client.h>`.
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef WAYLAND_DYNLOAD_FN
+WAYLAND_DYNLOAD_FN(wl_display_connect)
+WAYLAND_DYNLOAD_FN(wl_display_disconnect)
+WAYLAND_DYNLOAD_FN(wl_display_dispatch)
+WAYLAND_DYNLOAD_FN(wl_display_roundtrip)
+WAYLAND_DYNLOAD_FN(wl_display_flush)
+WAYLAND_DYNLOAD_FN(wl_log_set_handler_client)
+WAYLAND_DYNLOAD_FN(wl_proxy_add_listener)
+WAYLAND_DYNLOAD_FN(wl_proxy_destroy)
+WAYLAND_DYNLOAD_FN(wl_proxy_marshal_flags)
+WAYLAND_DYNLOAD_FN(wl_proxy_marshal_array_flags)
+WAYLAND_DYNLOAD_FN(wl_proxy_set_user_data)
+WAYLAND_DYNLOAD_FN(wl_proxy_get_user_data)
+WAYLAND_DYNLOAD_FN(wl_proxy_get_version)
+WAYLAND_DYNLOAD_FN(wl_proxy_get_tag)
+WAYLAND_DYNLOAD_FN(wl_proxy_set_tag)
+#elif defined(WAYLAND_DYNLOAD_IFACE)
+WAYLAND_DYNLOAD_IFACE(wl_buffer_interface)
+WAYLAND_DYNLOAD_IFACE(wl_compositor_interface)
+WAYLAND_DYNLOAD_IFACE(wl_data_device_interface)
+WAYLAND_DYNLOAD_IFACE(wl_data_device_manager_interface)
+WAYLAND_DYNLOAD_IFACE(wl_data_source_interface)
+WAYLAND_DYNLOAD_IFACE(wl_keyboard_interface)
+WAYLAND_DYNLOAD_IFACE(wl_output_interface)
+WAYLAND_DYNLOAD_IFACE(wl_pointer_interface)
+WAYLAND_DYNLOAD_IFACE(wl_region_interface)
+WAYLAND_DYNLOAD_IFACE(wl_registry_interface)
+WAYLAND_DYNLOAD_IFACE(wl_seat_interface)
+WAYLAND_DYNLOAD_IFACE(wl_shm_interface)
+WAYLAND_DYNLOAD_IFACE(wl_shm_pool_interface)
+WAYLAND_DYNLOAD_IFACE(wl_surface_interface)
+#else
+
+/* Header guard. */
+# if !defined(__WAYLAND_DYNLOAD_CLIENT_H__) && !defined(WAYLAND_DYNLOAD_VALIDATE)
+# define __WAYLAND_DYNLOAD_CLIENT_H__
+
+# ifndef WAYLAND_DYNLOAD_VALIDATE
+# include <wayland-client-core.h>
+extern struct WaylandDynload_Client wayland_dynload_client;
+# endif
+
+/* Support validating declarations against the header. */
+# ifndef WAYLAND_DYNLOAD_VALIDATE
+# define WL_DYN_FN(a) (*a)
+# else
+# define WL_DYN_FN(a) (a)
+# endif
+
+# ifndef WAYLAND_DYNLOAD_VALIDATE
+struct WaylandDynload_Client {
+# endif
+ struct wl_display *WL_DYN_FN(wl_display_connect)(const char *name);
+ void WL_DYN_FN(wl_display_disconnect)(struct wl_display *display);
+ int WL_DYN_FN(wl_display_dispatch)(struct wl_display *display);
+ int WL_DYN_FN(wl_display_roundtrip)(struct wl_display *display);
+ int WL_DYN_FN(wl_display_flush)(struct wl_display *display);
+ void WL_DYN_FN(wl_log_set_handler_client)(wl_log_func_t);
+ int WL_DYN_FN(wl_proxy_add_listener)(struct wl_proxy *proxy,
+ void (**implementation)(void),
+ void *data);
+ void WL_DYN_FN(wl_proxy_destroy)(struct wl_proxy *proxy);
+ struct wl_proxy *WL_DYN_FN(wl_proxy_marshal_flags)(struct wl_proxy *proxy,
+ uint32_t opcode,
+ const struct wl_interface *interface,
+ uint32_t version,
+ uint32_t flags,
+ ...);
+ struct wl_proxy *WL_DYN_FN(wl_proxy_marshal_array_flags)(struct wl_proxy *proxy,
+ uint32_t opcode,
+ const struct wl_interface *interface,
+ uint32_t version,
+ uint32_t flags,
+ union wl_argument *args);
+ void WL_DYN_FN(wl_proxy_set_user_data)(struct wl_proxy *proxy, void *user_data);
+ void *WL_DYN_FN(wl_proxy_get_user_data)(struct wl_proxy *proxy);
+ uint32_t WL_DYN_FN(wl_proxy_get_version)(struct wl_proxy *proxy);
+ const char *const *WL_DYN_FN(wl_proxy_get_tag)(struct wl_proxy *proxy);
+ void WL_DYN_FN(wl_proxy_set_tag)(struct wl_proxy *proxy, const char *const *tag);
+
+# ifndef WAYLAND_DYNLOAD_VALIDATE
+};
+# endif
+# undef WL_DYN_FN
+
+# ifndef WAYLAND_DYNLOAD_VALIDATE
+# define wl_display_connect(...) (*wayland_dynload_client.wl_display_connect)(__VA_ARGS__)
+# define wl_display_disconnect(...) \
+ (*wayland_dynload_client.wl_display_disconnect)(__VA_ARGS__)
+# define wl_display_dispatch(...) (*wayland_dynload_client.wl_display_dispatch)(__VA_ARGS__)
+# define wl_display_roundtrip(...) (*wayland_dynload_client.wl_display_roundtrip)(__VA_ARGS__)
+# define wl_display_flush(...) (*wayland_dynload_client.wl_display_flush)(__VA_ARGS__)
+# define wl_log_set_handler_client(...) \
+ (*wayland_dynload_client.wl_log_set_handler_client)(__VA_ARGS__)
+# define wl_proxy_add_listener(...) \
+ (*wayland_dynload_client.wl_proxy_add_listener)(__VA_ARGS__)
+# define wl_proxy_destroy(...) (*wayland_dynload_client.wl_proxy_destroy)(__VA_ARGS__)
+# define wl_proxy_marshal_flags(...) \
+ (*wayland_dynload_client.wl_proxy_marshal_flags)(__VA_ARGS__)
+# define wl_proxy_marshal_array_flags(...) \
+ (*wayland_dynload_client.wl_proxy_marshal_array_flags)(__VA_ARGS__)
+# define wl_proxy_set_user_data(...) \
+ (*wayland_dynload_client.wl_proxy_set_user_data)(__VA_ARGS__)
+# define wl_proxy_get_user_data(...) \
+ (*wayland_dynload_client.wl_proxy_get_user_data)(__VA_ARGS__)
+# define wl_proxy_get_version(...) (*wayland_dynload_client.wl_proxy_get_version)(__VA_ARGS__)
+# define wl_proxy_get_tag(...) (*wayland_dynload_client.wl_proxy_get_tag)(__VA_ARGS__)
+# define wl_proxy_set_tag(...) (*wayland_dynload_client.wl_proxy_set_tag)(__VA_ARGS__)
+
+# endif /* !WAYLAND_DYNLOAD_VALIDATE */
+# endif /* !defined(__WAYLAND_DYNLOAD_CLIENT_H__) && !defined(WAYLAND_DYNLOAD_VALIDATE) */
+#endif /* !defined(WAYLAND_DYNLOAD_FN) && !defined(WAYLAND_DYNLOAD_IFACE) */
+
+#ifdef __cplusplus
+}
+#endif