diff --git a/app-emulation/open-vm-tools/files/open-vm-tools-13.0.10-glib-with-glibc-2.43-c23.patch b/app-emulation/open-vm-tools/files/open-vm-tools-13.0.10-glib-with-glibc-2.43-c23.patch new file mode 100644 index 0000000000000..f49d9248f13a7 --- /dev/null +++ b/app-emulation/open-vm-tools/files/open-vm-tools-13.0.10-glib-with-glibc-2.43-c23.patch @@ -0,0 +1,37 @@ +glib changes how it provides g_free depending on the glibc version. + +https://bugs.gentoo.org/969697 +https://github.com/vmware/open-vm-tools/pull/779 + +From bfd12cf73d81919843383598e4a9e64c6e5fd97a Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Fri, 21 Nov 2025 00:29:10 -0800 +Subject: [PATCH] glib_stubs: avoid GLib g_free macro redefinition error + +glib 2.78+ defines g_free as an object-size checking macro. +open-vm-tools overrides g_free(), leading to preprocessor expansion +inside the function signature and breaking the build. + +Undefine the macro before defining the stub. + +Upstream-Status: Pending +Signed-off-by: Khem Raj +--- + open-vm-tools/lib/rpcChannel/glib_stubs.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/lib/rpcChannel/glib_stubs.c b/lib/rpcChannel/glib_stubs.c +index c32deb073..cb89c6a87 100644 +--- a/lib/rpcChannel/glib_stubs.c ++++ b/lib/rpcChannel/glib_stubs.c +@@ -35,6 +35,9 @@ + + void *g_malloc0(size_t s) { return Util_SafeCalloc(1, s); } + void *g_malloc0_n(size_t n, size_t s) { return Util_SafeCalloc(n, s); } ++/* GLib defines g_free as a macro, so undefine it before providing ++ * our own stub implementation. */ ++#undef g_free + void g_free(void *p) { free(p); } + + void g_mutex_init(GMutex *mutex) { } + diff --git a/app-emulation/open-vm-tools/files/open-vm-tools-13.0.10-glibc-2.43-c23.patch b/app-emulation/open-vm-tools/files/open-vm-tools-13.0.10-glibc-2.43-c23.patch new file mode 100644 index 0000000000000..89589d9e45cff --- /dev/null +++ b/app-emulation/open-vm-tools/files/open-vm-tools-13.0.10-glibc-2.43-c23.patch @@ -0,0 +1,145 @@ +https://bugs.gentoo.org/969697 +https://github.com/vmware/open-vm-tools/pull/779 + +From b309f5d40619f033bbddef5c95682beed31659ac Mon Sep 17 00:00:00 2001 +From: Rudi Heitbaum +Date: Mon, 26 Jan 2026 11:55:03 +0000 +Subject: [PATCH] fix initialization discards 'const' qualifier from pointer + target type + +Since glibc-2.43: + +For ISO C23, the functions bsearch, memchr, strchr, strpbrk, strrchr, +strstr, wcschr, wcspbrk, wcsrchr, wcsstr and wmemchr that return +pointers into their input arrays now have definitions as macros that +return a pointer to a const-qualified type when the input argument is +a pointer to a const-qualified type. + +https://lists.gnu.org/archive/html/info-gnu/2026-01/msg00005.html + +Signed-off-by: Rudi Heitbaum +--- + open-vm-tools/lib/hgfs/hgfsEscape.c | 6 +++--- + open-vm-tools/lib/hgfsServer/hgfsServerLinux.c | 2 +- + open-vm-tools/lib/misc/strutil.c | 7 ++++--- + open-vm-tools/lib/nicInfo/nicInfoPosix.c | 2 +- + open-vm-tools/libvmtools/i18n.c | 2 +- + open-vm-tools/services/plugins/vix/vixTools.c | 2 +- + 6 files changed, 11 insertions(+), 10 deletions(-) + +diff --git a/lib/hgfs/hgfsEscape.c b/lib/hgfs/hgfsEscape.c +index c4d39b12d..212ea1c79 100644 +--- a/lib/hgfs/hgfsEscape.c ++++ b/lib/hgfs/hgfsEscape.c +@@ -175,7 +175,7 @@ HgfsAddEscapeCharacter(char const * bufIn, // IN: input name + HgfsEscapeContext *escapeContext = (HgfsEscapeContext *)context; + uint32 charactersToCopy; + uint32 outputSpace; +- char* illegal; ++ const char* illegal; + Bool result = TRUE; + + ASSERT(offset >= escapeContext->processedOffset); // Scanning forward +@@ -573,7 +573,7 @@ HgfsIsEscapeSequence(char const *bufIn, // IN: input name + uint32 length) // IN: length of the name in characters + { + if (bufIn[offset] == HGFS_ESCAPE_CHAR && offset > 0) { +- char *substitute; ++ const char *substitute; + if (bufIn[offset - 1] == HGFS_ESCAPE_SUBSTITUE_CHAR && offset > 1) { + /* + * Possibly a valid sequence, check it must be preceded with a substitute +@@ -887,7 +887,7 @@ HgfsEscapeUndoComponent(char *bufIn, // IN: Characters to be unesc + size_t offset = escapePointer - bufIn; + + if (HgfsIsEscapeSequence(bufIn, offset, sizeIn)) { +- char* substitute = strchr(HGFS_SUBSTITUTE_CHARS, bufIn[offset - 1]); ++ const char* substitute = strchr(HGFS_SUBSTITUTE_CHARS, bufIn[offset - 1]); + if (substitute != NULL) { + bufIn[offset - 1] = HGFS_ILLEGAL_CHARS[substitute - HGFS_SUBSTITUTE_CHARS]; + } else if (bufIn[offset - 1] == HGFS_ESCAPE_SUBSTITUE_CHAR) { +diff --git a/lib/hgfsServer/hgfsServerLinux.c b/lib/hgfsServer/hgfsServerLinux.c +index 4a0bc9378..fd1db4a29 100644 +--- a/lib/hgfsServer/hgfsServerLinux.c ++++ b/lib/hgfsServer/hgfsServerLinux.c +@@ -1364,7 +1364,7 @@ static void + HgfsGetHiddenAttr(char const *fileName, // IN: Input filename + HgfsFileAttrInfo *attr) // OUT: Struct to copy into + { +- char *baseName; ++ const char *baseName; + + ASSERT(fileName); + ASSERT(attr); +diff --git a/lib/misc/strutil.c b/lib/misc/strutil.c +index 4fc6502e4..4be63b7b8 100644 +--- a/lib/misc/strutil.c ++++ b/lib/misc/strutil.c +@@ -1454,6 +1454,7 @@ StrUtil_ReplaceAll(const char *orig, // IN + char *result; + const char *current; + char *tmp; ++ const char *tmp2; + size_t lenWhat; + size_t lenWith; + size_t occurrences = 0; +@@ -1467,8 +1468,8 @@ StrUtil_ReplaceAll(const char *orig, // IN + lenWith = strlen(with); + + current = orig; +- while ((tmp = strstr(current, what)) != NULL) { +- current = tmp + lenWhat; ++ while ((tmp2 = strstr(current, what)) != NULL) { ++ current = tmp2 + lenWhat; + ++occurrences; + } + +@@ -1695,7 +1696,7 @@ StrUtilHasListItem(char const *list, // IN: + char const *item, // IN: + int (*ncmp)(char const *, char const*, size_t)) // IN: + { +- char *foundDelim; ++ const char *foundDelim; + int itemLen = strlen(item); + + if (list == NULL) { +diff --git a/lib/nicInfo/nicInfoPosix.c b/lib/nicInfo/nicInfoPosix.c +index 0135e6a09..922b4efe2 100644 +--- a/lib/nicInfo/nicInfoPosix.c ++++ b/lib/nicInfo/nicInfoPosix.c +@@ -263,7 +263,7 @@ static Bool + IpEntryMatchesDevice(const char *devName, + const char *label) + { +- char *p; ++ const char *p; + size_t n; + + if ((p = strchr(label, ':')) != NULL) { +diff --git a/libvmtools/i18n.c b/libvmtools/i18n.c +index 3085f72d7..f61406d14 100644 +--- a/libvmtools/i18n.c ++++ b/libvmtools/i18n.c +@@ -698,7 +698,7 @@ VMTools_BindTextDomain(const char *domain, + * If we couldn't find the catalog file for the user's language, see if + * we can find a more generic language (e.g., for "en_US", also try "en"). + */ +- char *sep = Str_Strrchr(lang, '_'); ++ const char *sep = Str_Strrchr(lang, '_'); + if (sep != NULL) { + if (usrlang == NULL) { + usrlang = Util_SafeStrdup(lang); +diff --git a/services/plugins/vix/vixTools.c b/services/plugins/vix/vixTools.c +index 654512c5e..5c79ca12a 100644 +--- a/services/plugins/vix/vixTools.c ++++ b/services/plugins/vix/vixTools.c +@@ -930,7 +930,7 @@ VixToolsBuildUserEnvironmentTable(const char * const *envp) // IN: optional + for (; NULL != *envp; envp++) { + char *name; + char *value; +- char *whereToSplit; ++ const char *whereToSplit; + size_t nameLen; + + whereToSplit = strchr(*envp, '='); + diff --git a/app-emulation/open-vm-tools/open-vm-tools-13.0.10-r1.ebuild b/app-emulation/open-vm-tools/open-vm-tools-13.0.10-r1.ebuild new file mode 100644 index 0000000000000..cd95a034149a8 --- /dev/null +++ b/app-emulation/open-vm-tools/open-vm-tools-13.0.10-r1.ebuild @@ -0,0 +1,170 @@ +# Copyright 2007-2026 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +inherit autotools linux-info pam systemd udev + +MY_P="${P}-25056151" + +DESCRIPTION="Tools for VMware guests" +HOMEPAGE="https://github.com/vmware/open-vm-tools" +SRC_URI="https://github.com/vmware/open-vm-tools/releases/download/stable-${PV}/${MY_P}.tar.gz" +S="${WORKDIR}/${MY_P}" + +LICENSE="LGPL-2.1" +SLOT="0" +KEYWORDS="~amd64 ~arm64 ~x86" +IUSE="X +deploypkg +dnet doc +fuse gtkmm +icu multimon pam +resolutionkms +ssl +vgauth" +REQUIRED_USE=" + multimon? ( X ) + vgauth? ( ssl )" + +RDEPEND=" + dev-libs/glib + net-libs/libtirpc + deploypkg? ( dev-libs/libmspack ) + fuse? ( sys-fs/fuse:3= ) + pam? ( sys-libs/pam ) + !pam? ( virtual/libcrypt:= ) + ssl? ( dev-libs/openssl:= ) + vgauth? ( + dev-libs/libxml2:= + dev-libs/xmlsec:= + ) + X? ( + x11-libs/gtk+:3[X] + x11-libs/libSM + x11-libs/libXcomposite + x11-libs/libXext + x11-libs/libXi + x11-libs/libXrandr + x11-libs/libXrender + x11-libs/libXtst + gtkmm? ( + dev-cpp/gtkmm:3.0 + dev-libs/libsigc++:2 + ) + multimon? ( x11-libs/libXinerama ) + ) + dnet? ( dev-libs/libdnet ) + icu? ( dev-libs/icu:= ) + resolutionkms? ( + virtual/libudev + || ( + ( + >=media-libs/mesa-25.2[-video_cards_vmware] + x11-base/xorg-server[xorg] + x11-libs/libdrm[-video_cards_vmware] + ) + ( + =media-libs/mesa-25.2" && has_version "x11-drivers/xf86-video-vmware"; then + elog "You need to remove x11-drivers/xf86-video-vmware to use the modesetting video driver." + fi +} + +pkg_postrm() { + udev_reload +}