+struct {
+ char *name;
+ enum weston_renderer_type renderer;
+} renderer_name_map[] = {
+ { "auto", WESTON_RENDERER_AUTO },
+ { "gl", WESTON_RENDERER_GL },
+ { "noop", WESTON_RENDERER_NOOP },
+ { "pixman", WESTON_RENDERER_PIXMAN },
+};
+
+struct {
+ char *short_name;
+ char *long_name;
+ enum weston_compositor_backend backend;
+} backend_name_map[] = {
+ { "drm", "drm-backend.so", WESTON_BACKEND_DRM },
+ { "headless", "headless-backend.so", WESTON_BACKEND_HEADLESS },
+ { "pipewire", "pipewire-backend.so", WESTON_BACKEND_PIPEWIRE },
+ { "rdp", "rdp-backend.so", WESTON_BACKEND_RDP },
+ { "vnc", "vnc-backend.so", WESTON_BACKEND_VNC },
+ { "wayland", "wayland-backend.so", WESTON_BACKEND_WAYLAND },
+ { "x11", "x11-backend.so", WESTON_BACKEND_X11 },
+};
+
+bool
+get_backend_from_string(const char *name,
+ enum weston_compositor_backend *backend)
+{
+ size_t i;
+
+ for (i = 0; i < ARRAY_LENGTH(backend_name_map); i++) {
+ if (strcmp(name, backend_name_map[i].short_name) == 0 ||
+ strcmp(name, backend_name_map[i].long_name) == 0) {
+ *backend = backend_name_map[i].backend;
+ return true;
+ }
+ }
+
+ return false;
+}
+
+
+bool
+get_renderer_from_string(const char *name, enum weston_renderer_type *renderer)
+{
+ size_t i;
+
+ if (!name)
+ name = "auto";
+
+ for (i = 0; i < ARRAY_LENGTH(renderer_name_map); i++) {
+ if (strcmp(name, renderer_name_map[i].name) == 0) {
+ *renderer = renderer_name_map[i].renderer;
+ return true;
+ }
+ }
+
+ return false;
+}
+
+