tools/build: Support building with glibc 2.38

Ubuntu 23.10 uses glibc 2.38. This adds strlcpy and strlcmp so we need
to remove them from the cross build environment.

Reviewed by:	jrtc27 (earlier version), arichardson
Sponsored by:	Arm Ltd
Differential Revision:	https://reviews.freebsd.org/D42303
This commit is contained in:
Andrew Turner 2023-10-20 16:45:06 +01:00
parent f39010b139
commit ceefd491c7
2 changed files with 11 additions and 2 deletions

View file

@ -196,9 +196,15 @@ SRCS+= strtonum.c merge.c heapsort.c reallocf.c
SRCS+= rpmatch.c
.if ${.MAKE.OS} == "Linux"
# On Linux, glibc does not provide strlcpy,strlcat or strmode.
# On Linux, glibc does not provide strmode. It only provides strlcpy
# and strlcat from glibc 2.38.
.PATH: ${LIBC_SRCTOP}/string
SRCS+= strlcpy.c strlcat.c strmode.c
SRCS+= strmode.c
# Assume if strlcpy exists so does strlcat
_WITH_EXPLICIT_STRLCPY!= cat ${HOST_INCLUDE_ROOT}/strings.h ${HOST_INCLUDE_ROOT}/string.h | grep -c strlcpy || true
.if ${_WITH_EXPLICIT_STRLCPY} == 0
SRCS+= strlcpy.c strlcat.c
.endif
# On Linux, glibc provides ffs* but not fls*
SRCS+= fls.c flsl.c flsll.c
# Compile the fgetln/fgetwln/closefrom fallback code from libbsd:

View file

@ -47,8 +47,11 @@
#include <sys/cdefs.h>
__BEGIN_DECLS
#if !defined(__GLIBC__) || \
(defined(__GLIBC__) && (!__GLIBC_PREREQ(2, 38) || !defined(_GNU_SOURCE)))
size_t strlcpy(char *dst, const char *src, size_t siz);
size_t strlcat(char *dst, const char *src, size_t siz);
#endif
char *strnstr(const char *str, const char *find, size_t str_len);
void strmode(mode_t mode, char *str);