git: 5e0a749cf132 - main - Makefile.inc1: Set LC_COLLATE in distributeworld for glibc compatibility

From: Jessica Clarke <jrtc27_at_FreeBSD.org>
Date: Fri, 15 Jul 2022 22:18:04 UTC
The branch main has been updated by jrtc27:

URL: https://cgit.FreeBSD.org/src/commit/?id=5e0a749cf132fba11825f827c63f8ba5e09e7a5b

commit 5e0a749cf132fba11825f827c63f8ba5e09e7a5b
Author:     Jessica Clarke <jrtc27@FreeBSD.org>
AuthorDate: 2022-07-15 22:04:26 +0000
Commit:     Jessica Clarke <jrtc27@FreeBSD.org>
CommitDate: 2022-07-15 22:04:26 +0000

    Makefile.inc1: Set LC_COLLATE in distributeworld for glibc compatibility
    
    distributeworld relies on "foo" sorting directly before "foo type=...",
    but with glibc both en_US and en_GB have "fooa" sort between "foo" and
    "foo z", resulting in some files (in particular, id due to "ident"
    sorting before "id type=" but after "id") not being included in the meta
    files and thus not included in the dist tarballs. Forcing use of the C
    locale ensures this does not occur.
    
    Reviewed by:    brooks
    Obtained from:  CheriBSD
    Differential Revision:  https://reviews.freebsd.org/D35812
---
 Makefile.inc1 | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/Makefile.inc1 b/Makefile.inc1
index 43cd3c3344c8..b9691017a1ab 100644
--- a/Makefile.inc1
+++ b/Makefile.inc1
@@ -975,6 +975,8 @@ DISTR_MTREE=	${DISTR_MTREECMD} ${DISTR_MTREEFLAGS}
 WORLDTMP_MTREE=	${DISTR_MTREECMD} ${WORLDTMP_MTREEFLAGS}
 DESTDIR_MTREE=	${DISTR_MTREECMD} ${DESTDIR_MTREEFLAGS}
 
+METALOG_SORT_CMD=	env -i LC_COLLATE=C sort
+
 # kernel stage
 KMAKEENV=	${WMAKEENV:NSYSROOT=*}
 KMAKE=		${TIME_ENV} ${KMAKEENV} ${MAKE} ${.MAKEFLAGS} ${KERNEL_FLAGS} KERNEL=${INSTKERNNAME}
@@ -1468,7 +1470,7 @@ distributeworld installworld stageworld: _installcheck_world .PHONY
 	@# a line containing only the filename will sort immediately before
 	@# the relevant mtree line.
 	cd ${DESTDIR}/${DISTDIR}; \
-	find ./${dist} | sort -u ${METALOG} - | \
+	find ./${dist} | ${METALOG_SORT_CMD} -u ${METALOG} - | \
 	awk 'BEGIN { print "#${MTREE_MAGIC}" } !/ type=/ { file = $$1 } / type=/ { if ($$1 == file) { sub(/^\.\/${dist}\//, "./"); print } }' > \
 	${DESTDIR}/${DISTDIR}/${dist}.meta
 .endfor
@@ -1478,7 +1480,7 @@ distributeworld installworld stageworld: _installcheck_world .PHONY
 	@# a line containing only the filename will sort immediately before
 	@# the relevant mtree line.
 	cd ${DESTDIR}/${DISTDIR}; \
-	find ./${dist}/usr/lib/debug | sort -u ${METALOG} - | \
+	find ./${dist}/usr/lib/debug | ${METALOG_SORT_CMD} -u ${METALOG} - | \
 	awk 'BEGIN { print "#${MTREE_MAGIC}" } !/ type=/ { file = $$1 } / type=/ { if ($$1 == file) { sub(/^\.\/${dist}\//, "./"); print } }' > \
 	${DESTDIR}/${DISTDIR}/${dist}.debug.meta
 .endfor
@@ -1999,7 +2001,7 @@ create-packages: .PHONY create-packages-world create-packages-kernel
 create-world-packages:	_pkgbootstrap .PHONY
 	@rm -f ${WSTAGEDIR}/*.plist 2>/dev/null || :
 	@cd ${WSTAGEDIR} ; \
-		env -i LC_COLLATE=C sort ${WSTAGEDIR}/${DISTDIR}/METALOG | \
+		${METALOG_SORT_CMD} ${WSTAGEDIR}/${DISTDIR}/METALOG | \
 		awk -f ${SRCDIR}/release/scripts/mtree-to-plist.awk
 	@for plist in ${WSTAGEDIR}/*.plist; do \
 	  plist=$${plist##*/} ; \
@@ -2045,7 +2047,7 @@ create-kernel-packages:	.PHONY
 create-kernel-packages: create-kernel-packages-flavor${flavor:C,^""$,${_default_flavor},}
 create-kernel-packages-flavor${flavor:C,^""$,${_default_flavor},}: _pkgbootstrap .PHONY
 	@cd ${KSTAGEDIR}/${DISTDIR} ; \
-	env -i LC_COLLATE=C sort ${KSTAGEDIR}/kernel.meta | \
+	${METALOG_SORT_CMD} ${KSTAGEDIR}/kernel.meta | \
 	awk -f ${SRCDIR}/release/scripts/mtree-to-plist.awk \
 		-v kernel=yes -v _kernconf=${INSTALLKERNEL} ; \
 	sed -e "s/%VERSION%/${PKG_VERSION}/" \
@@ -2081,7 +2083,7 @@ _debug=-dbg
 create-kernel-packages: create-kernel-packages-extra-flavor${flavor:C,^""$,${_default_flavor},}-${_kernel}
 create-kernel-packages-extra-flavor${flavor:C,^""$,${_default_flavor},}-${_kernel}: _pkgbootstrap .PHONY
 	@cd ${KSTAGEDIR}/kernel.${_kernel} ; \
-	env -i LC_COLLATE=C sort ${KSTAGEDIR}/kernel.${_kernel}.meta | \
+	${METALOG_SORT_CMD} ${KSTAGEDIR}/kernel.${_kernel}.meta | \
 	awk -f ${SRCDIR}/release/scripts/mtree-to-plist.awk \
 		-v kernel=yes -v _kernconf=${_kernel} ; \
 	sed -e "s/%VERSION%/${PKG_VERSION}/" \