app-emulation/open-vm-tools: fix glibc-2.43 compat

Closes: https://bugs.gentoo.org/969697
Signed-off-by: Sam James <sam@gentoo.org>
This commit is contained in:
Sam James
2026-05-10 22:46:52 +01:00
parent 0ae8973959
commit c817c8773b
3 changed files with 352 additions and 0 deletions

View File

@@ -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 <raj.khem@gmail.com>
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 <raj.khem@gmail.com>
---
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) { }

View File

@@ -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 <rudi@heitbaum.com>
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 <rudi@heitbaum.com>
---
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, '=');

View File

@@ -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[video_cards_vmware,xa]
x11-libs/libdrm[video_cards_vmware]
)
)
)"
DEPEND="${RDEPEND}
net-libs/rpcsvc-proto"
BDEPEND="
dev-util/glib-utils
virtual/pkgconfig
doc? ( app-text/doxygen )"
PATCHES=(
"${FILESDIR}"/${PN}-12.4.5-Werror.patch
"${FILESDIR}"/${PN}-12.4.5-icu.patch
"${FILESDIR}"/${PN}-13.0.10-glibc-2.43-c23.patch
"${FILESDIR}"/${PN}-13.0.10-glib-with-glibc-2.43-c23.patch
)
pkg_setup() {
local CONFIG_CHECK="~VMWARE_BALLOON ~VMWARE_PVSCSI ~VMXNET3 ~VMWARE_VMCI ~VMWARE_VMCI_VSOCKETS ~FUSE_FS"
use X && CONFIG_CHECK+=" ~DRM_VMWGFX"
kernel_is -lt 5 5 || CONFIG_CHECK+=" ~X86_IOPL_IOPERM"
linux-info_pkg_setup
}
src_prepare() {
default
eautoreconf
}
src_configure() {
local myeconfargs=(
--disable-glibc-check
--disable-tests
--without-root-privileges
$(use_enable multimon)
$(use_with X x)
$(use_with X gtk3)
$(use_with gtkmm gtkmm3)
$(use_enable doc docs)
$(use_enable resolutionkms)
$(use_enable deploypkg)
$(use_with pam)
$(use_enable vgauth)
$(use_with dnet)
$(use_with icu)
--with-udev-rules-dir="$(get_udevdir)"/rules.d
$(use_with fuse fuse 3)
# Disable it explicitly, we do not yet list the
# containerinfo dependencies in the ebuild
--disable-containerinfo
# Disable it explicitly, gtk2 is obsolete
--without-gtk2
# Possibly add a separate USE flag for the utility, or
# merge it into resolutionkms
--disable-vmwgfxctrl
)
# Avoid a bug in configure.ac
use ssl || myeconfargs+=( --without-ssl )
# Avoid relying on dnet-config script, which breaks cross-compiling. This
# library has no pkg-config file.
export CUSTOM_DNET_LIBS="-ldnet"
econf "${myeconfargs[@]}"
}
src_install() {
default
find "${ED}" -name '*.la' -delete || die
if use pam; then
rm "${ED}"/etc/pam.d/vmtoolsd || die
pamd_mimic_system vmtoolsd auth account
fi
newinitd "${FILESDIR}/open-vm-tools.initd" vmware-tools
newconfd "${FILESDIR}/open-vm-tools.confd" vmware-tools
if use vgauth; then
systemd_newunit "${FILESDIR}"/vmtoolsd.vgauth.service vmtoolsd.service
systemd_dounit "${FILESDIR}"/vgauthd.service
else
systemd_dounit "${FILESDIR}"/vmtoolsd.service
fi
# vmhgfs-fuse is built only when fuse is enabled
if use fuse; then
# Make fstype = vmhgfs-fuse work in fstab
dosym vmhgfs-fuse /usr/bin/mount.vmhgfs-fuse
fi
if use X; then
fperms 4711 /usr/bin/vmware-user-suid-wrapper
dobin scripts/common/vmware-xdg-detect-de
fi
}
pkg_postinst() {
udev_reload
if has_version ">=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
}