Date: Mon, 27 Apr 2026 00:03:05 +0000 From: Robert Clausecker <fuz@FreeBSD.org> To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org Cc: sambler <FreeBSD@ShaneWare.Biz> Subject: git: 1e35f99af460 - main - devel/godot: update to 4.6.1 Message-ID: <69eea7b9.1d9a1.279f4ee3@gitrepo.freebsd.org>
index | next in thread | raw e-mail
The branch main has been updated by fuz: URL: https://cgit.FreeBSD.org/ports/commit/?id=1e35f99af460410ec0d1687901363052c7b19978 commit 1e35f99af460410ec0d1687901363052c7b19978 Author: sambler <FreeBSD@ShaneWare.Biz> AuthorDate: 2026-03-02 01:20:33 +0000 Commit: Robert Clausecker <fuz@FreeBSD.org> CommitDate: 2026-04-27 00:01:05 +0000 devel/godot: update to 4.6.1 Changelog: https://godotengine.github.io/godot-interactive-changelog/ PR: 293178 Event: Wiesbaden Hackathon 202604 Reported by: Thibault Payet <monwarez@mailoo.org> --- devel/godot/Makefile | 82 +- devel/godot/distinfo | 10 +- .../patch-drivers_alsa_audio__driver__alsa.cpp | 11 + devel/godot/files/patch-drivers_sdl_SCsub | 34 + ...patch-drivers_sdl_SDL__build__config__private.h | 92 +++ devel/godot/files/patch-platform__methods.py | 9 +- .../godot/files/patch-platform_linuxbsd_detect.py | 69 +- .../patch-platform_linuxbsd_libudev-so__wrap.c | 11 - .../patch-platform_linuxbsd_platform__config.h | 31 + ...platform_linuxbsd_wayland_wayland__embedder.cpp | 65 ++ ...h-platform_linuxbsd_wayland_wayland__thread.cpp | 65 ++ ...patch-thirdparty_jolt__physics_Jolt_Core_Core.h | 4 +- ...tch-thirdparty_linuxbsd__headers_udev_libudev.h | 2 +- ...-thirdparty_sdl_joystick_bsd_SDL__bsdjoystick.c | 872 +++++++++++++++++++++ 14 files changed, 1288 insertions(+), 69 deletions(-) diff --git a/devel/godot/Makefile b/devel/godot/Makefile index ae3631015b8f..abf7bb803de6 100644 --- a/devel/godot/Makefile +++ b/devel/godot/Makefile @@ -1,7 +1,7 @@ PORTNAME= godot -DISTVERSION= 4.4.1 +DISTVERSION= 4.6.1 DISTVERSIONSUFFIX= -stable -PORTREVISION?= 3 +PORTREVISION?= 0 CATEGORIES= devel games MAINTAINER= FreeBSD@Shaneware.biz @@ -15,59 +15,61 @@ LICENSE_FILE_MIT= ${WRKSRC}/LICENSE.txt BUILD_DEPENDS= yasm:devel/yasm LIB_DEPENDS= libbrotlicommon.so:archivers/brotli \ - libbrotlidec.so:archivers/brotli \ + libfontconfig.so:x11-fonts/fontconfig \ libfreetype.so:print/freetype2 \ libgraphite2.so:graphics/graphite2 \ libharfbuzz-icu.so:print/harfbuzz-icu \ libharfbuzz.so:print/harfbuzz \ + libmbedtls.so:security/mbedtls3 \ + libminiupnpc.so:net/miniupnpc \ libogg.so:audio/libogg \ + libpcre2-32.so:devel/pcre2 \ libpng.so:graphics/png \ + libRecast.so:graphics/recastnavigation \ libtheora.so:multimedia/libtheora \ - libtheoradec.so:multimedia/libtheora \ libvorbis.so:audio/libvorbis \ - libvorbisfile.so:audio/libvorbis \ libwebp.so:graphics/webp \ - libminiupnpc.so:net/miniupnpc \ - libopenxr_loader.so:graphics/openxr \ - libpcre2-32.so:devel/pcre2 \ - libRecast.so:graphics/recastnavigation \ libwslay_shared.so:www/wslay \ - libzstd.so:archivers/zstd \ - libfontconfig.so:x11-fonts/fontconfig + libzstd.so:archivers/zstd RUN_DEPENDS= xdg-open:devel/xdg-utils \ xdg-user-dir:devel/xdg-user-dirs \ xmessage:x11/xmessage -USES= compiler:c++17-lang cpe gl pkgconfig scons +USES= compiler:c++17-lang cpe gl pkgconfig scons sdl + CPE_VENDOR= godotengine USE_GITHUB= yes GH_ACCOUNT= godotengine USE_GL= gl glew glu - -MAKE_ARGS+= platform=linuxbsd \ - dbus=True \ - brotli=True \ - builtin_brotli=False \ - builtin_freetype=False \ - builtin_graphite=False \ - builtin_harfbuzz=False \ - builtin_libogg=False \ - builtin_libpng=False \ - builtin_libtheora=False \ - builtin_libvorbis=False \ - builtin_libwebp=False \ - builtin_miniupnpc=False \ - builtin_openxr=False \ - builtin_pcre2=False \ - builtin_recastnavigation=False \ - builtin_wslay=False \ - builtin_zlib=False \ - builtin_zstd=False \ - fontconfig=True \ - opengl3=True \ - use_sowrap=True \ - verbose=True \ - ${MAKE_ARGS_${CHOSEN_COMPILER_TYPE}} +USE_SDL= sdl3 + +# enabling builtin_openxr results in an uncaught exception during init +MAKE_ARGS+= platform=linuxbsd \ + dbus=True \ + brotli=True \ + builtin_brotli=False \ + builtin_freetype=False \ + builtin_graphite=False \ + builtin_harfbuzz=False \ + builtin_libogg=False \ + builtin_libpng=False \ + builtin_libtheora=False \ + builtin_libvorbis=False \ + builtin_libwebp=False \ + builtin_mbedtls=False \ + builtin_miniupnpc=False \ + builtin_pcre2=False \ + builtin_recastnavigation=False \ + builtin_sdl=False \ + builtin_wslay=False \ + builtin_zlib=False \ + builtin_zstd=False \ + fontconfig=True \ + opengl3=True \ + use_sowrap=True \ + verbose=True \ + disable_path_overrides=False \ + ${MAKE_ARGS_${CHOSEN_COMPILER_TYPE}} MAKE_ARGS_clang= use_llvm=True CXXFLAGS_i386= ${CXXFLAGS_i386_${CHOSEN_COMPILER_TYPE}} @@ -92,8 +94,8 @@ ALSA_LIB_DEPENDS= libasound.so:audio/alsa-lib ALSA_MAKE_ARGS= alsa=True ALSA_MAKE_ARGS_OFF= alsa=False -# master head at 6/3 - no branch made for 4.4 yet -EXAMPLES_GH_TUPLE= godotengine:godot-demo-projects:fdb2f50a2088:DEMOS +# master head at 20/2 - no branch made for 4.6 yet +EXAMPLES_GH_TUPLE= godotengine:godot-demo-projects:f228ea632391:DEMOS EXAMPLES_PORTEXAMPLES= * MOLD_BUILD_DEPENDS= mold:devel/mold @@ -145,8 +147,6 @@ MAKE_ARGS+= module_embree_enabled=no \ post-patch: @${REINPLACE_CMD} -e 's|custom_build|${OPSYS}_Ports_build|' \ ${WRKSRC}/methods.py - @${REINPLACE_CMD} -e 's|/usr/include/recastnavigation|${LOCALBASE}/include/recastnavigation|' \ - ${WRKSRC}/platform/linuxbsd/detect.py # The official godot binary name reflects options used to compile # We just want a simple name matching the portname diff --git a/devel/godot/distinfo b/devel/godot/distinfo index fd408ab1b9a8..7f0ae7c99e85 100644 --- a/devel/godot/distinfo +++ b/devel/godot/distinfo @@ -1,5 +1,5 @@ -TIMESTAMP = 1744162984 -SHA256 (godotengine-godot-4.4.1-stable_GH0.tar.gz) = a486c523494e155b6912a607b5813577f8f39285f8ad43ac76cb9141edad9888 -SIZE (godotengine-godot-4.4.1-stable_GH0.tar.gz) = 55229702 -SHA256 (godotengine-godot-demo-projects-fdb2f50a2088_GH0.tar.gz) = 96faa3844742c9dc6ebc5354df5817c738855b9234931d7057d08ac3c20281f7 -SIZE (godotengine-godot-demo-projects-fdb2f50a2088_GH0.tar.gz) = 215650115 +TIMESTAMP = 1771988193 +SHA256 (godotengine-godot-4.6.1-stable_GH0.tar.gz) = f5d887cda2589fd2995b1cf7e74fe1ec54220f56d7fd6729a8a0865d794fb287 +SIZE (godotengine-godot-4.6.1-stable_GH0.tar.gz) = 66026623 +SHA256 (godotengine-godot-demo-projects-f228ea632391_GH0.tar.gz) = cc5f71e1e1522b612ccf900bcedf53d5280e10766a6d62a564a74de1e041be29 +SIZE (godotengine-godot-demo-projects-f228ea632391_GH0.tar.gz) = 244558016 diff --git a/devel/godot/files/patch-drivers_alsa_audio__driver__alsa.cpp b/devel/godot/files/patch-drivers_alsa_audio__driver__alsa.cpp new file mode 100644 index 000000000000..d02213a1d98d --- /dev/null +++ b/devel/godot/files/patch-drivers_alsa_audio__driver__alsa.cpp @@ -0,0 +1,11 @@ +--- drivers/alsa/audio_driver_alsa.cpp.orig 2024-04-14 15:55:55 UTC ++++ drivers/alsa/audio_driver_alsa.cpp +@@ -232,7 +232,7 @@ void AudioDriverALSA::thread_func(void *p_udata) { + ad->lock(); + ad->start_counting_ticks(); + } else { +- wrote = snd_pcm_recover(ad->pcm_handle, wrote, 0); ++ wrote = snd_pcm_recover(ad->pcm_handle, wrote, 1); // silence stdout + if (wrote < 0) { + ERR_PRINT("ALSA: Failed and can't recover: " + String(snd_strerror(wrote))); + ad->active.clear(); diff --git a/devel/godot/files/patch-drivers_sdl_SCsub b/devel/godot/files/patch-drivers_sdl_SCsub new file mode 100644 index 000000000000..3db25b424517 --- /dev/null +++ b/devel/godot/files/patch-drivers_sdl_SCsub @@ -0,0 +1,34 @@ +--- drivers/sdl/SCsub.orig 2025-10-13 19:05:40 UTC ++++ drivers/sdl/SCsub +@@ -1,5 +1,6 @@ from misc.utility.scons_hints import * + #!/usr/bin/env python + from misc.utility.scons_hints import * ++import sys + + Import("env") + +@@ -120,7 +121,15 @@ if env["builtin_sdl"]: + + if env["platform"] == "linuxbsd": + # TODO: Check support for BSD systems. +- env_sdl.Append(CPPDEFINES=["SDL_PLATFORM_LINUX"]) ++ if sys.platform.startswith("linux"): ++ env_sdl.Append(CPPDEFINES=["SDL_PLATFORM_LINUX"]) ++ elif sys.platform.startswith("freebsd") or sys.platform.startswith("dragonfly"): ++ env_sdl.Append(CPPDEFINES=["SDL_PLATFORM_FREEBSD"]) ++ elif sys.platform.startswith("openbsd"): ++ env_sdl.Append(CPPDEFINES=["SDL_PLATFORM_OPENBSD"]) ++ elif sys.platform.startswith("netbsd"): ++ env_sdl.Append(CPPDEFINES=["SDL_PLATFORM_NETBSD"]) ++ + thirdparty_sources += [ + "core/linux/SDL_dbus.c", + "core/linux/SDL_evdev.c", +@@ -132,6 +141,7 @@ if env["builtin_sdl"]: + "core/unix/SDL_poll.c", + "haptic/linux/SDL_syshaptic.c", + "joystick/linux/SDL_sysjoystick.c", ++ "joystick/bsd/SDL_bsdjoystick.c", + "loadso/dlopen/SDL_sysloadso.c", + "thread/pthread/SDL_syscond.c", + "thread/pthread/SDL_sysmutex.c", diff --git a/devel/godot/files/patch-drivers_sdl_SDL__build__config__private.h b/devel/godot/files/patch-drivers_sdl_SDL__build__config__private.h new file mode 100644 index 000000000000..9821a10d2440 --- /dev/null +++ b/devel/godot/files/patch-drivers_sdl_SDL__build__config__private.h @@ -0,0 +1,92 @@ +--- drivers/sdl/SDL_build_config_private.h.orig 2026-02-25 14:00:27 UTC ++++ drivers/sdl/SDL_build_config_private.h +@@ -75,26 +75,14 @@ + #define SDL_SENSOR_WINDOWS 1 + + // Linux defines +-#elif defined(SDL_PLATFORM_LINUX) ++#elif defined(SDL_PLATFORM_LINUX) || defined(SDL_PLATFORM_FREEBSD) || defined(SDL_PLATFORM_OPENBSD) || defined(SDL_PLATFORM_NETBSD) + +-#define SDL_PLATFORM_PRIVATE_NAME "Linux" + #define SDL_PLATFORM_UNIX 1 + + #define HAVE_STDIO_H 1 + #define HAVE_LIBC 1 +-#define HAVE_LINUX_INPUT_H 1 + #define HAVE_POLL 1 + +-#ifdef __linux__ +-#define HAVE_INOTIFY 1 +-#define HAVE_INOTIFY_INIT1 1 +-// Don't add these defines, for some reason they mess with C#'s ability +-// to use environment variables (see GH-109024) +-//#define HAVE_GETENV 1 +-//#define HAVE_SETENV 1 +-//#define HAVE_UNSETENV 1 +-#endif +- + #ifdef DBUS_ENABLED + #define HAVE_DBUS_DBUS_H 1 + #define SDL_USE_LIBDBUS 1 +@@ -105,17 +93,57 @@ + #define HAVE_LIBUDEV_H 1 + #define SDL_USE_LIBUDEV + #ifdef SOWRAP_ENABLED +-#define SDL_UDEV_DYNAMIC "libudev.so.1" ++#define SDL_UDEV_DYNAMIC "libudev.so.0" + #endif + #endif + + #define SDL_LOADSO_DLOPEN 1 +-#define SDL_HAPTIC_LINUX 1 + #define SDL_TIMER_UNIX 1 ++#define SDL_THREAD_PTHREAD 1 ++ ++#ifdef SDL_PLATFORM_LINUX ++#define SDL_PLATFORM_PRIVATE_NAME "Linux" ++ ++#define HAVE_LINUX_INPUT_H 1 ++#define SDL_HAPTIC_LINUX 1 + #define SDL_JOYSTICK_LINUX 1 +-#define SDL_JOYSTICK_HIDAPI 1 + #define SDL_INPUT_LINUXEV 1 +-#define SDL_THREAD_PTHREAD 1 ++ ++#define HAVE_INOTIFY 1 ++#define HAVE_INOTIFY_INIT1 1 ++ ++// Don't add these defines, for some reason they mess with C#'s ability ++// to use environment variables (see GH-109024) ++//#define HAVE_GETENV 1 ++//#define HAVE_SETENV 1 ++//#define HAVE_UNSETENV 1 ++ ++#else ++ ++#ifdef SDL_PLATFORM_FREEBSD ++#define SDL_PLATFORM_PRIVATE_NAME "FreeBSD" ++//#define HAVE_USBHID_H 1 // this needs more work ++#define HAVE_LINUX_INPUT_H 1 ++#define SDL_HAPTIC_LINUX 1 ++#define SDL_JOYSTICK_LINUX 1 ++#define SDL_INPUT_LINUXEV 1 ++#elif defined(SDL_PLATFORM_OPENBSD) ++#define SDL_PLATFORM_PRIVATE_NAME "OpenBSD" ++#define HAVE_USBHID_H 1 ++#define USBHID_NEW 1 ++#define USBHID_UCR_DATA 1 ++#elif defined(SDL_PLATFORM_NETBSD) ++#define SDL_PLATFORM_PRIVATE_NAME "NetBSD" ++#define HAVE_USBHID_H 1 ++#define USBHID_NEW 1 ++#define USBHID_UCR_DATA 1 ++#endif ++ ++#define SDL_HAPTIC_DISABLED 1 ++#define SDL_JOYSTICK_USBHID 1 ++ ++#endif ++ + + // MacOS defines + #elif defined(SDL_PLATFORM_MACOS) diff --git a/devel/godot/files/patch-platform__methods.py b/devel/godot/files/patch-platform__methods.py index daa296c2438a..4af720d58bd1 100644 --- a/devel/godot/files/patch-platform__methods.py +++ b/devel/godot/files/patch-platform__methods.py @@ -1,16 +1,15 @@ ---- platform_methods.py.orig 2025-03-25 23:11:16 UTC +--- platform_methods.py.orig 2026-01-25 23:11:41 UTC +++ platform_methods.py -@@ -28,6 +28,9 @@ architecture_aliases = { +@@ -29,13 +29,16 @@ architecture_aliases = { "rv": "rv64", "riscv": "rv64", "riscv64": "rv64", + "powerpc64le": "ppc64", + "powerpc64": "ppc64", + "powerpc": "ppc32", - "ppcle": "ppc32", - "ppc": "ppc32", "ppc64le": "ppc64", -@@ -36,7 +39,7 @@ def detect_arch(): + "loong64": "loongarch64", + } def detect_arch(): diff --git a/devel/godot/files/patch-platform_linuxbsd_detect.py b/devel/godot/files/patch-platform_linuxbsd_detect.py index 0deebc9387b2..bf95c86c74be 100644 --- a/devel/godot/files/patch-platform_linuxbsd_detect.py +++ b/devel/godot/files/patch-platform_linuxbsd_detect.py @@ -1,11 +1,72 @@ ---- platform/linuxbsd/detect.py.orig 2025-03-25 23:11:16 UTC +--- platform/linuxbsd/detect.py.orig 2025-10-13 19:05:40 UTC +++ platform/linuxbsd/detect.py -@@ -373,7 +373,7 @@ def configure(env: "SConsEnvironment"): +@@ -382,7 +382,7 @@ def configure(env: "SConsEnvironment"): else: env.Append(CPPDEFINES=["XKB_ENABLED"]) - if platform.system() == "Linux": -+ if platform.system() in ["Linux","FreeBSD"]: - env.Append(CPPDEFINES=["JOYDEV_ENABLED"]) ++ if platform.system() in ["Linux", "FreeBSD"]: if env["udev"]: if not env["use_sowrap"]: + if os.system("pkg-config --exists libudev") == 0: # 0 means found +@@ -395,13 +395,17 @@ def configure(env: "SConsEnvironment"): + env.Append(CPPDEFINES=["UDEV_ENABLED"]) + else: + env["udev"] = False # Linux specific +- ++ + if env["sdl"]: + if env["builtin_sdl"]: + env.Append(CPPDEFINES=["SDL_ENABLED"]) ++ if platform.system() in ["FreeBSD", "OpenBSD", "NetBSD"]: ++ env["LINKCOM"] += " -l:libusbhid.a" + elif os.system("pkg-config --exists sdl3") == 0: # 0 means found + env.ParseConfig("pkg-config sdl3 --cflags --libs") + env.Append(CPPDEFINES=["SDL_ENABLED"]) ++ if platform.system() in ["FreeBSD", "OpenBSD", "NetBSD"]: ++ env.Append(LIBS=["usbhid"]) + else: + print_warning( + "SDL3 development libraries not found, and `builtin_sdl` was explicitly disabled. Disabling SDL input driver support." +@@ -484,7 +488,9 @@ def configure(env: "SConsEnvironment"): + env.Append(CPPDEFINES=["LIBDECOR_ENABLED"]) + + env.Append(CPPDEFINES=["WAYLAND_ENABLED"]) +- env.Append(LIBS=["rt"]) # Needed by glibc, used by _allocate_shm_file ++ # FreeBSD and OpenBSD keep rt functionality in libc ++ if platform.system() in ["Linux", "NetBSD"]: ++ env.Append(LIBS=["rt"]) # Needed by glibc, used by _allocate_shm_file + + if env["accesskit"]: + if env["accesskit_sdk_path"] != "": +@@ -517,7 +523,7 @@ def configure(env: "SConsEnvironment"): + + env.Append(LIBS=["pthread"]) + +- if platform.system() == "Linux": ++ if platform.system() in ["Linux", "FreeBSD"]: + env.Append(LIBS=["dl"]) + + if platform.libc_ver()[0] != "glibc": +@@ -536,9 +542,17 @@ def configure(env: "SConsEnvironment"): + + # Link those statically for portability + if env["use_static_cpp"]: +- env.Append(LINKFLAGS=["-static-libgcc", "-static-libstdc++"]) +- if env["use_llvm"] and platform.system() != "FreeBSD": +- env["LINKCOM"] = env["LINKCOM"] + " -l:libatomic.a" ++ # TODO Test NetBSD clang, guessing that it also does not support -static-libstdc++? Does its libc++ have other deps? ++ if env["use_llvm"] and platform.system() in ["FreeBSD", "OpenBSD", "NetBSD"]: ++ env.Append(LINKFLAGS=["-nostdlib++"]) ++ env["LINKCOM"] += " -l:libc++.a" ++ if platform.system() == "OpenBSD": ++ env["LINKCOM"] += " -l:libc++abi.a" ++ else: ++ env.Append(LINKFLAGS=["-static-libgcc", "-static-libstdc++"]) ++ ++ if env["use_llvm"] and platform.system() not in ["FreeBSD", "OpenBSD", "NetBSD"]: ++ env["LINKCOM"] += " -l:libatomic.a" + else: +- if env["use_llvm"] and platform.system() != "FreeBSD": ++ if env["use_llvm"] and platform.system() not in ["FreeBSD", "OpenBSD", "NetBSD"]: + env.Append(LIBS=["atomic"]) diff --git a/devel/godot/files/patch-platform_linuxbsd_libudev-so__wrap.c b/devel/godot/files/patch-platform_linuxbsd_libudev-so__wrap.c deleted file mode 100644 index 6f50b34142d9..000000000000 --- a/devel/godot/files/patch-platform_linuxbsd_libudev-so__wrap.c +++ /dev/null @@ -1,11 +0,0 @@ ---- platform/linuxbsd/libudev-so_wrap.c.orig 2025-02-19 15:17:47 UTC -+++ platform/linuxbsd/libudev-so_wrap.c -@@ -281,7 +281,7 @@ - int initialize_libudev(int verbose) { - void *handle; - char *error; -- handle = dlopen("libudev.so.1", RTLD_LAZY); -+ handle = dlopen("libudev.so.0", RTLD_LAZY); - if (!handle) { - if (verbose) { - fprintf(stderr, "%s\n", dlerror()); diff --git a/devel/godot/files/patch-platform_linuxbsd_platform__config.h b/devel/godot/files/patch-platform_linuxbsd_platform__config.h new file mode 100644 index 000000000000..09278d411fb0 --- /dev/null +++ b/devel/godot/files/patch-platform_linuxbsd_platform__config.h @@ -0,0 +1,31 @@ +--- platform/linuxbsd/platform_config.h.orig 2025-10-13 19:05:40 UTC ++++ platform/linuxbsd/platform_config.h +@@ -30,18 +30,22 @@ + + #pragma once + ++// alloca + #ifdef __linux__ + #include <alloca.h> ++#elif defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) ++#ifdef __cplusplus ++#include <cstdlib> ++#else ++#include <stdio.h> + #endif ++#endif + +-#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) +-#include <cstdlib> // alloca ++#if defined(__FreeBSD__) || defined(__OpenBSD__) + // FreeBSD and OpenBSD use pthread_set_name_np, while other platforms, + // include NetBSD, use pthread_setname_np. NetBSD's version however requires + // a different format, we handle this directly in thread_posix. +-#ifdef __NetBSD__ +-#define PTHREAD_NETBSD_SET_NAME +-#else + #define PTHREAD_BSD_SET_NAME +-#endif ++#elif defined(__NetBSD__) ++#define PTHREAD_NETBSD_SET_NAME + #endif diff --git a/devel/godot/files/patch-platform_linuxbsd_wayland_wayland__embedder.cpp b/devel/godot/files/patch-platform_linuxbsd_wayland_wayland__embedder.cpp new file mode 100644 index 000000000000..77628d425520 --- /dev/null +++ b/devel/godot/files/patch-platform_linuxbsd_wayland_wayland__embedder.cpp @@ -0,0 +1,65 @@ +--- platform/linuxbsd/wayland/wayland_embedder.cpp.orig 2026-01-25 12:41:41 UTC ++++ platform/linuxbsd/wayland/wayland_embedder.cpp +@@ -38,6 +38,22 @@ + + #ifdef __FreeBSD__ + #include <dev/evdev/input-event-codes.h> ++#include <sys/param.h> ++#include <sys/ucred.h> ++#include <sys/types.h> ++#include <sys/socket.h> ++ ++/** if CMSG_ALIGN is not defined on this platform, a workaround */ ++#ifndef CMSG_ALIGN ++# ifdef __CMSG_ALIGN ++# define CMSG_ALIGN(n) __CMSG_ALIGN(n) ++# elif defined(CMSG_DATA_ALIGN) ++# define CMSG_ALIGN _CMSG_DATA_ALIGN ++# else ++# define CMSG_ALIGN(len) (((len)+sizeof(long)-1) & ~(sizeof(long)-1)) ++# endif ++#endif ++ + #else + // Assume Linux. + #include <linux/input-event-codes.h> +@@ -2869,15 +2885,27 @@ void WaylandEmbedder::handle_fd(int p_fd, int p_revent + int new_fd = accept(proxy_socket, nullptr, nullptr); + ERR_FAIL_COND_MSG(new_fd == -1, "Failed to accept client."); + ++#if defined(__FreeBSD__) ++ struct xucred cred = {}; ++#else + struct ucred cred = {}; ++#endif + socklen_t cred_size = sizeof cred; ++#if defined(__FreeBSD__) ++ getsockopt(new_fd, SOL_LOCAL, LOCAL_PEERCRED, &cred, &cred_size); ++#else + getsockopt(new_fd, SOL_SOCKET, SO_PEERCRED, &cred, &cred_size); ++#endif + + Client &client = clients.insert_new(new_fd, {})->value; + + client.embedder = this; + client.socket = new_fd; ++#if defined(__FreeBSD__) ++ client.pid = cred.cr_pid; ++#else + client.pid = cred.pid; ++#endif + + client.global_ids[DISPLAY_ID] = Client::GlobalIdInfo(DISPLAY_ID, nullptr); + client.local_ids[DISPLAY_ID] = DISPLAY_ID; +@@ -2900,7 +2928,11 @@ void WaylandEmbedder::handle_fd(int p_fd, int p_revent + main_client->new_fake_object(new_local_id, &godot_embedded_client_interface, 1, eclient_data); + + // godot_embedding_compositor::client(nu) ++#if defined(__FreeBSD__) ++ send_wayland_message(main_client->socket, local_id, 0, { new_local_id, (uint32_t)cred.cr_pid }); ++#else + send_wayland_message(main_client->socket, local_id, 0, { new_local_id, (uint32_t)cred.pid }); ++#endif + } + } + diff --git a/devel/godot/files/patch-platform_linuxbsd_wayland_wayland__thread.cpp b/devel/godot/files/patch-platform_linuxbsd_wayland_wayland__thread.cpp new file mode 100644 index 000000000000..9222403d3c82 --- /dev/null +++ b/devel/godot/files/patch-platform_linuxbsd_wayland_wayland__thread.cpp @@ -0,0 +1,65 @@ +--- platform/linuxbsd/wayland/wayland_thread.cpp.orig 2025-10-13 19:05:40 UTC ++++ platform/linuxbsd/wayland/wayland_thread.cpp +@@ -95,7 +95,7 @@ Vector<uint8_t> WaylandThread::_read_fd(int fd) { + break; + } + +- DEBUG_LOG_WAYLAND_THREAD(vformat("Read chunk of %d bytes.", last_bytes_read)); ++ DEBUG_LOG_WAYLAND_THREAD(vformat("Read chunk of %d bytes.", (uint64_t)last_bytes_read)); + + bytes_read += last_bytes_read; + +@@ -1197,7 +1197,7 @@ void WaylandThread::_wl_surface_on_enter(void *data, s + WindowState *ws = (WindowState *)data; + ERR_FAIL_NULL(ws); + +- DEBUG_LOG_WAYLAND_THREAD(vformat("Window entered output %x.", (size_t)wl_output)); ++ DEBUG_LOG_WAYLAND_THREAD(vformat("Window entered output %x.", (uint64_t)wl_output)); + + ws->wl_outputs.insert(wl_output); + +@@ -1248,7 +1248,7 @@ void WaylandThread::_wl_surface_on_leave(void *data, s + + ws->wl_outputs.erase(wl_output); + +- DEBUG_LOG_WAYLAND_THREAD(vformat("Window left output %x.\n", (size_t)wl_output)); ++ DEBUG_LOG_WAYLAND_THREAD(vformat("Window left output %x.\n", (uint64_t)wl_output)); + } + + // TODO: Add support to this event. +@@ -1310,7 +1310,7 @@ void WaylandThread::_wl_output_on_done(void *data, str + + ss->wayland_thread->_update_scale(ss->data.scale); + +- DEBUG_LOG_WAYLAND_THREAD(vformat("Output %x done.", (size_t)wl_output)); ++ DEBUG_LOG_WAYLAND_THREAD(vformat("Output %x done.", (uint64_t)wl_output)); + } + + void WaylandThread::_wl_output_on_scale(void *data, struct wl_output *wl_output, int32_t factor) { +@@ -1319,7 +1319,7 @@ void WaylandThread::_wl_output_on_scale(void *data, st + + ss->pending_data.scale = factor; + +- DEBUG_LOG_WAYLAND_THREAD(vformat("Output %x scale %d", (size_t)wl_output, factor)); ++ DEBUG_LOG_WAYLAND_THREAD(vformat("Output %x scale %d", (uint64_t)wl_output, factor)); + } + + void WaylandThread::_wl_output_on_name(void *data, struct wl_output *wl_output, const char *name) { +@@ -2509,7 +2509,7 @@ void WaylandThread::_wl_data_source_on_send(void *data + } + + if (written_bytes > 0) { +- DEBUG_LOG_WAYLAND_THREAD(vformat("Clipboard: sent %d bytes.", written_bytes)); ++ DEBUG_LOG_WAYLAND_THREAD(vformat("Clipboard: sent %d bytes.", (uint64_t)written_bytes)); + } else if (written_bytes == 0) { + DEBUG_LOG_WAYLAND_THREAD("Clipboard: no bytes sent."); + } else { +@@ -2697,7 +2697,7 @@ void WaylandThread::_wp_primary_selection_source_on_se + } + + if (written_bytes > 0) { +- DEBUG_LOG_WAYLAND_THREAD(vformat("Clipboard: sent %d bytes.", written_bytes)); ++ DEBUG_LOG_WAYLAND_THREAD(vformat("Clipboard: sent %d bytes.", (uint64_t)written_bytes)); + } else if (written_bytes == 0) { + DEBUG_LOG_WAYLAND_THREAD("Clipboard: no bytes sent."); + } else { diff --git a/devel/godot/files/patch-thirdparty_jolt__physics_Jolt_Core_Core.h b/devel/godot/files/patch-thirdparty_jolt__physics_Jolt_Core_Core.h index 41a7d11c20b0..cc435c7b4c70 100644 --- a/devel/godot/files/patch-thirdparty_jolt__physics_Jolt_Core_Core.h +++ b/devel/godot/files/patch-thirdparty_jolt__physics_Jolt_Core_Core.h @@ -1,6 +1,6 @@ ---- thirdparty/jolt_physics/Jolt/Core/Core.h.orig 2025-08-13 15:24:56 UTC +--- thirdparty/jolt_physics/Jolt/Core/Core.h.orig 2025-10-13 19:05:40 UTC +++ thirdparty/jolt_physics/Jolt/Core/Core.h -@@ -215,7 +215,7 @@ +@@ -219,7 +219,7 @@ #define JPH_CPU_BIG_ENDIAN #endif #define JPH_VECTOR_ALIGNMENT 16 diff --git a/devel/godot/files/patch-thirdparty_linuxbsd__headers_udev_libudev.h b/devel/godot/files/patch-thirdparty_linuxbsd__headers_udev_libudev.h index 5720c06187c2..25f688956637 100644 --- a/devel/godot/files/patch-thirdparty_linuxbsd__headers_udev_libudev.h +++ b/devel/godot/files/patch-thirdparty_linuxbsd__headers_udev_libudev.h @@ -1,4 +1,4 @@ ---- thirdparty/linuxbsd_headers/udev/libudev.h.orig 2025-02-15 07:16:26 UTC +--- thirdparty/linuxbsd_headers/udev/libudev.h.orig 2025-10-13 19:05:40 UTC +++ thirdparty/linuxbsd_headers/udev/libudev.h @@ -22,7 +22,7 @@ #define _LIBUDEV_H_ diff --git a/devel/godot/files/patch-thirdparty_sdl_joystick_bsd_SDL__bsdjoystick.c b/devel/godot/files/patch-thirdparty_sdl_joystick_bsd_SDL__bsdjoystick.c new file mode 100644 index 000000000000..6c24d1c685f4 --- /dev/null +++ b/devel/godot/files/patch-thirdparty_sdl_joystick_bsd_SDL__bsdjoystick.c @@ -0,0 +1,872 @@ +--- thirdparty/sdl/joystick/bsd/SDL_bsdjoystick.c.orig 2026-01-03 09:26:31 UTC ++++ thirdparty/sdl/joystick/bsd/SDL_bsdjoystick.c +@@ -0,0 +1,869 @@ ++/* ++ Simple DirectMedia Layer ++ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> ++ ++ This software is provided 'as-is', without any express or implied ++ warranty. In no event will the authors be held liable for any damages ++ arising from the use of this software. ++ ++ Permission is granted to anyone to use this software for any purpose, ++ including commercial applications, and to alter it and redistribute it ++ freely, subject to the following restrictions: ++ ++ 1. The origin of this software must not be misrepresented; you must not ++ claim that you wrote the original software. If you use this software ++ in a product, an acknowledgment in the product documentation would be ++ appreciated but is not required. ++ 2. Altered source versions must be plainly marked as such, and must not be ++ misrepresented as being the original software. ++ 3. This notice may not be removed or altered from any source distribution. ++*/ ++#include "SDL_internal.h" ++ ++#ifdef SDL_JOYSTICK_USBHID ++ ++/* ++ * Joystick driver for the uhid(4) / ujoy(4) interface found in OpenBSD, ++ * NetBSD and FreeBSD. ++ * ++ * Maintainer: <vedge at csoft.org> ++ */ ++ ++#include <sys/param.h> ++#include <sys/stat.h> ++ ++#include <unistd.h> ++#include <fcntl.h> ++#include <errno.h> ++ ++#ifndef __FreeBSD_kernel_version ++#define __FreeBSD_kernel_version __FreeBSD_version ++#endif ++ ++#ifdef HAVE_USB_H ++#include <usb.h> ++#endif ++#ifdef __DragonFly__ ++#include <bus/u4b/usb.h> ++#include <bus/u4b/usbhid.h> ++#else ++#include <dev/usb/usb.h> ++#include <dev/usb/usbhid.h> ++#endif ++ ++#ifdef HAVE_USBHID_H ++#include <usbhid.h> ++#elif defined(HAVE_LIBUSB_H) ++#include <libusb.h> ++#elif defined(HAVE_LIBUSBHID_H) ++#include <libusbhid.h> ++#endif ++ ++#if defined(SDL_PLATFORM_FREEBSD) ++#include <osreldate.h> ++#if __FreeBSD_kernel_version > 800063 ++#include <dev/usb/usb_ioctl.h> ++#elif defined(__DragonFly__) ++#include <bus/u4b/usb_ioctl.h> ++#endif ++#include <usbhid.h> ++#include <sys/joystick.h> ++#endif ++ ++#ifdef SDL_HAVE_MACHINE_JOYSTICK_H ++#include <machine/joystick.h> ++#endif ++ ++#include "../SDL_sysjoystick.h" ++#include "../SDL_joystick_c.h" ++#include "../hidapi/SDL_hidapijoystick_c.h" ++ ++#if defined(SDL_PLATFORM_FREEBSD) || defined(SDL_HAVE_MACHINE_JOYSTICK_H) || defined(__FreeBSD_kernel__) || defined(__DragonFly_) ++#define SUPPORT_JOY_GAMEPORT ++#endif ++ ++#define MAX_UHID_JOYS 64 ++#define MAX_JOY_JOYS 2 ++#define MAX_JOYS (MAX_UHID_JOYS + MAX_JOY_JOYS) ++ ++#ifdef SDL_PLATFORM_OPENBSD ++ ++#define HUG_DPAD_UP 0x90 ++#define HUG_DPAD_DOWN 0x91 ++#define HUG_DPAD_RIGHT 0x92 ++#define HUG_DPAD_LEFT 0x93 ++ ++#define HAT_UP 0x01 ++#define HAT_RIGHT 0x02 ++#define HAT_DOWN 0x04 ++#define HAT_LEFT 0x08 ++ ++#endif ++ ++struct report ++{ ++#if defined(SDL_PLATFORM_FREEBSD) && (__FreeBSD_kernel_version > 900000) || \ ++ defined(__DragonFly__) ++ void *buf; // Buffer ++#elif defined(SDL_PLATFORM_FREEBSD) && (__FreeBSD_kernel_version > 800063) ++ struct usb_gen_descriptor *buf; // Buffer ++#else ++ struct usb_ctl_report *buf; // Buffer ++#endif ++ size_t size; // Buffer size ++ int rid; // Report ID ++ enum ++ { ++ SREPORT_UNINIT, ++ SREPORT_CLEAN, ++ SREPORT_DIRTY ++ } status; ++}; ++ ++static struct ++{ ++ int uhid_report; ++ hid_kind_t kind; ++ const char *name; ++} const repinfo[] = { ++ { UHID_INPUT_REPORT, hid_input, "input" }, ++ { UHID_OUTPUT_REPORT, hid_output, "output" }, ++ { UHID_FEATURE_REPORT, hid_feature, "feature" } ++}; ++ ++enum ++{ ++ REPORT_INPUT = 0, ++ REPORT_OUTPUT = 1, ++ REPORT_FEATURE = 2 ++}; ++ ++enum ++{ ++ JOYAXE_X, ++ JOYAXE_Y, ++ JOYAXE_Z, ++ JOYAXE_SLIDER, ++ JOYAXE_WHEEL, ++ JOYAXE_RX, ++ JOYAXE_RY, ++ JOYAXE_RZ, ++ JOYAXE_count ++}; ++ ++struct joystick_hwdata ++{ ++ int fd; ++ enum ++ { ++ BSDJOY_UHID, // uhid(4) ++ BSDJOY_JOY // joy(4) ++ } type; ++ ++ int naxes; ++ int nbuttons; ++ int nhats; ++ struct report_desc *repdesc; ++ struct report inreport; ++ int axis_map[JOYAXE_count]; /* map present JOYAXE_* to 0,1,.. */ ++}; ++ ++// A linked list of available joysticks ++typedef struct SDL_joylist_item ++{ ++ SDL_JoystickID device_instance; ++ char *path; // "/dev/uhid0" or whatever ++ char *name; // "SideWinder 3D Pro" or whatever ++ SDL_GUID guid; ++ dev_t devnum; ++ struct SDL_joylist_item *next; ++} SDL_joylist_item; ++ ++static SDL_joylist_item *SDL_joylist = NULL; ++static SDL_joylist_item *SDL_joylist_tail = NULL; ++static int numjoysticks = 0; ++ ++static bool report_alloc(struct report *, struct report_desc *, int); ++static void report_free(struct report *); ++ ++#if defined(USBHID_UCR_DATA) || (defined(__FreeBSD_kernel__) && __FreeBSD_kernel_version <= 800063) ++#define REP_BUF_DATA(rep) ((rep)->buf->ucr_data) ++#elif (defined(SDL_PLATFORM_FREEBSD) && (__FreeBSD_kernel_version > 900000)) || \ ++ defined(__DragonFly__) ++#define REP_BUF_DATA(rep) ((rep)->buf) ++#elif (defined(SDL_PLATFORM_FREEBSD) && (__FreeBSD_kernel_version > 800063)) ++#define REP_BUF_DATA(rep) ((rep)->buf->ugd_data) ++#else ++#define REP_BUF_DATA(rep) ((rep)->buf->data) ++#endif ++ ++static int usage_to_joyaxe(int usage) ++{ ++ int joyaxe; ++ switch (usage) { ++ case HUG_X: ++ joyaxe = JOYAXE_X; ++ break; ++ case HUG_Y: ++ joyaxe = JOYAXE_Y; ++ break; ++ case HUG_Z: ++ joyaxe = JOYAXE_Z; ++ break; ++ case HUG_SLIDER: ++ joyaxe = JOYAXE_SLIDER; ++ break; ++ case HUG_WHEEL: ++ joyaxe = JOYAXE_WHEEL; ++ break; ++ case HUG_RX: ++ joyaxe = JOYAXE_RX; ++ break; ++ case HUG_RY: ++ joyaxe = JOYAXE_RY; ++ break; ++ case HUG_RZ: ++ joyaxe = JOYAXE_RZ; ++ break; ++ default: ++ joyaxe = -1; ++ } ++ return joyaxe; ++} ++ ++static void FreeJoylistItem(SDL_joylist_item *item) ++{ ++ SDL_free(item->path); ++ SDL_free(item->name); ++ SDL_free(item); ++} ++ ++static void FreeHwData(struct joystick_hwdata *hw) ++{ ++ if (hw->type == BSDJOY_UHID) { ++ report_free(&hw->inreport); ++ ++ if (hw->repdesc) { ++ hid_dispose_report_desc(hw->repdesc); ++ } ++ } ++ close(hw->fd); ++ SDL_free(hw); ++} ++ ++static struct joystick_hwdata *CreateHwData(const char *path) ++{ ++ struct joystick_hwdata *hw; ++ struct hid_item hitem; ++ struct hid_data *hdata; ++ struct report *rep = NULL; ++ int fd; ++ int i; ++ ++ fd = open(path, O_RDONLY | O_CLOEXEC); ++ if (fd == -1) { ++ SDL_SetError("%s: %s", path, strerror(errno)); ++ return NULL; ++ } ++ ++ hw = (struct joystick_hwdata *) ++ SDL_calloc(1, sizeof(struct joystick_hwdata)); ++ if (!hw) { ++ close(fd); ++ return NULL; ++ } ++ hw->fd = fd; ++ ++#ifdef SUPPORT_JOY_GAMEPORT ++ if (SDL_strncmp(path, "/dev/joy", 8) == 0) { ++ hw->type = BSDJOY_JOY; ++ hw->naxes = 2; ++ hw->nbuttons = 2; ++ } else ++#endif ++ { ++ hw->type = BSDJOY_UHID; ++ { ++ int ax; ++ for (ax = 0; ax < JOYAXE_count; ax++) { ++ hw->axis_map[ax] = -1; ++ } ++ } ++ hw->repdesc = hid_get_report_desc(fd); ++ if (!hw->repdesc) { ++ SDL_SetError("%s: USB_GET_REPORT_DESC: %s", path, ++ strerror(errno)); ++ goto usberr; ++ } ++ rep = &hw->inreport; ++#if defined(SDL_PLATFORM_FREEBSD) && (__FreeBSD_kernel_version > 800063) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) ++ rep->rid = hid_get_report_id(fd); ++ if (rep->rid < 0) { ++#else ++ if (ioctl(fd, USB_GET_REPORT_ID, &rep->rid) < 0) { ++#endif ++ rep->rid = -1; // XXX ++ } ++ if (!report_alloc(rep, hw->repdesc, REPORT_INPUT)) { ++ goto usberr; ++ } ++ if (rep->size <= 0) { ++ SDL_SetError("%s: Input report descriptor has invalid length", ++ path); ++ goto usberr; ++ } ++#if defined(USBHID_NEW) || (defined(SDL_PLATFORM_FREEBSD) && __FreeBSD_kernel_version >= 500111) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) ++ hdata = hid_start_parse(hw->repdesc, 1 << hid_input, rep->rid); ++#else *** 552 LINES SKIPPED ***home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69eea7b9.1d9a1.279f4ee3>
