git: 528376ec4687 - main - Tools/scripts: add script to generate the compat*x distfiles

From: Baptiste Daroussin <bapt_at_FreeBSD.org>
Date: Tue, 18 Mar 2025 09:35:07 UTC
The branch main has been updated by bapt:

URL: https://cgit.FreeBSD.org/ports/commit/?id=528376ec4687e4221fd13b16dd98cf6daeffebee

commit 528376ec4687e4221fd13b16dd98cf6daeffebee
Author:     Baptiste Daroussin <bapt@FreeBSD.org>
AuthorDate: 2025-03-18 09:27:54 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2025-03-18 09:34:47 +0000

    Tools/scripts: add script to generate the compat*x distfiles
---
 Tools/scripts/gen-compat.sh | 64 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 64 insertions(+)

diff --git a/Tools/scripts/gen-compat.sh b/Tools/scripts/gen-compat.sh
new file mode 100644
index 000000000000..55f93173ef8d
--- /dev/null
+++ b/Tools/scripts/gen-compat.sh
@@ -0,0 +1,64 @@
+#!/bin/sh
+
+set -eu
+set -o pipefail
+
+prog=${0##*/}
+
+usage()
+{
+	echo "Usage $prog <version> <arch> <filelist>" >&2
+	exit 1
+}
+
+if [ $# -ne 3 ]; then
+	usage
+fi
+
+version=${1}
+arch=${2}
+filelist=${3}
+
+if [ ! -f ${filelist} ]; then
+	echo "filelist if not a file" >&2
+	usage
+fi
+
+case $arch in
+amd64)
+	sets="base lib32" ;;
+*)
+	sets="base" ;;
+esac
+
+flist=""
+while read l ; do
+	flist="$flist */$l"
+done <$filelist
+
+tmpdir=$(mktemp -d)
+trap "rm -rf $tmpdir" 0 1 2 3 15
+mkdir -p ${tmpdir}/base
+set -o noglob
+for s in $sets; do
+	echo "Fetching $s for ${version}"
+	extract_list="$flist"
+	if [ $s = "base" ]; then
+		extract_list="${extract_list} */sys/param.h"
+	fi
+	fetch -o - https://download.freebsd.org/releases/${arch}/${version}-RELEASE/${s}.txz | tar -C ${tmpdir}/base -x -f - $extract_list
+done
+set +o noglob
+fbsd_version=$(awk '/#define __FreeBSD_version/ { print $3 }' ${tmpdir}/base/usr/include/sys/param.h)
+maj_version=${version%%.*}
+date=$(date "+%Y%m%d")
+compatdir="compat${maj_version}x-${arch}-${version}.${fbsd_version}.${date}"
+mkdir -p ${tmpdir}/${compatdir}/lib/compat
+case $sets in
+*lib32*)
+	mkdir -p ${tmpdir}/${compatdir}/lib32/compat
+	find ${tmpdir}/base/usr/lib32/ -name "*.so.*" -exec mv -v {} ${tmpdir}/${compatdir}/lib32/compat/ \;
+	;;
+esac
+find ${tmpdir}/base -name "*.so.*" -exec mv -v {} ${tmpdir}/${compatdir}/lib/compat/ \;
+tar -cvJf ${compatdir}.tar.xz ${tmpdir}/${compatdir}