git: a5afd7920d50 - main - pkgbase: Create a FreeBSD-dtb package

From: Emmanuel Vadot <manu_at_FreeBSD.org>
Date: Mon, 29 Jan 2024 18:25:12 UTC
The branch main has been updated by manu:

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

commit a5afd7920d50ff23f91bdbabb1f0fd7ba028ba9e
Author:     Emmanuel Vadot <manu@FreeBSD.org>
AuthorDate: 2024-01-27 12:20:49 +0000
Commit:     Emmanuel Vadot <manu@FreeBSD.org>
CommitDate: 2024-01-29 18:24:25 +0000

    pkgbase: Create a FreeBSD-dtb package
    
    Before that dtbs where included in each kernel packages which prevents
    us to install multiple kernels.
    
    Differential Revision:  https://reviews.freebsd.org/D43632
    Reviewed by:    bapt
    Sponsored by:   Beckhoff Automation GmbH & Co. KG
---
 Makefile.inc1                      | 28 +++++++++++++++++++++++++++-
 release/packages/dtb.ucl           | 16 ++++++++++++++++
 release/scripts/mtree-to-plist.awk | 20 ++++++++++++++------
 3 files changed, 57 insertions(+), 7 deletions(-)

diff --git a/Makefile.inc1 b/Makefile.inc1
index 1e86cda657dd..7a9917fd8a74 100644
--- a/Makefile.inc1
+++ b/Makefile.inc1
@@ -2178,9 +2178,35 @@ _default_flavor=	-default
 . if ${MK_DEBUG_FILES} != "no"
 _debug=-dbg
 . endif
+
+create-dtb-package:
+	@if [ -f ${KSTAGEDIR}/${DISTDIR}/dtb.plist ]; then \
+	sed -e "s/%VERSION%/${PKG_VERSION}/" \
+		-e "s/%PKGNAME%/dtb/" \
+		-e "s/%COMMENT%/FreeBSD Devicetree Blobs/" \
+		-e "s/%DESC%/FreeBSD Devicetree Blobs/" \
+		-e "s/ %VCS_REVISION%/${VCS_REVISION}/" \
+		-e "s/%PKG_NAME_PREFIX%/${PKG_NAME_PREFIX}/" \
+		-e "s/%PKG_MAINTAINER%/${PKG_MAINTAINER}/" \
+		-e "s|%PKG_WWW%|${PKG_WWW}|" \
+		${SRCDIR}/release/packages/dtb.ucl \
+		> ${KSTAGEDIR}/${DISTDIR}/dtb.ucl ; \
+	awk -F\" ' \
+		/name/ { printf("===> Creating %s-", $$2); next } \
+		/version/ {print $$2; next } ' \
+		${KSTAGEDIR}/${DISTDIR}/dtb.ucl ; \
+	${PKG_CMD} -o ABI=${PKG_ABI} -o ALLOW_BASE_SHLIBS=yes \
+		-o OSVERSION="${SRCRELDATE}" \
+		create -f ${PKG_FORMAT} \
+		-M ${KSTAGEDIR}/${DISTDIR}/dtb.ucl \
+		-p ${KSTAGEDIR}/${DISTDIR}/dtb.plist \
+		-r ${KSTAGEDIR}/${DISTDIR} \
+		-o ${REPODIR}/${PKG_ABI}/${PKG_OUTPUT_DIR} ; \
+	fi
+
 create-kernel-packages:	.PHONY
 . for flavor in "" ${_debug}
-create-kernel-packages: create-kernel-packages-flavor${flavor:C,^""$,${_default_flavor},}
+create-kernel-packages: create-kernel-packages-flavor${flavor:C,^""$,${_default_flavor},} create-dtb-package
 create-kernel-packages-flavor${flavor:C,^""$,${_default_flavor},}: _pkgbootstrap .PHONY
 	@cd ${KSTAGEDIR}/${DISTDIR} ; \
 	${METALOG_SORT_CMD} ${KSTAGEDIR}/kernel.meta | \
diff --git a/release/packages/dtb.ucl b/release/packages/dtb.ucl
new file mode 100644
index 000000000000..e4717b9054a2
--- /dev/null
+++ b/release/packages/dtb.ucl
@@ -0,0 +1,16 @@
+#
+#
+
+name = "%PKG_NAME_PREFIX%-%PKGNAME%"
+origin = "base"
+version = "%VERSION%"
+comment = "%COMMENT%"
+categories = [ base ]
+maintainer = "%PKG_MAINTAINER%"
+www = "%PKG_WWW%"
+prefix = "/"
+licenselogic = "single"
+licenses = [ BSD2CLAUSE ]
+desc = <<EOD
+%DESC%
+EOD
diff --git a/release/scripts/mtree-to-plist.awk b/release/scripts/mtree-to-plist.awk
index 7fcac9b92a81..e51f3c8bfe1a 100644
--- a/release/scripts/mtree-to-plist.awk
+++ b/release/scripts/mtree-to-plist.awk
@@ -23,9 +23,13 @@
 		}
 	}
 	if (kernel != "") {
-		tags="package=kernel"
-		if (_kernconf != "") {
-			tags=tags""_kernconf
+		if ($1 ~ /^\/boot\/dtb\//) {
+			tags="package=dtb"
+		} else {
+			tags="package=kernel"
+			if (_kernconf != "") {
+				tags=tags""_kernconf
+			}
 		}
 	}
 	if (length(tags) == 0)
@@ -36,8 +40,12 @@
 		for (i in a) {
 			if (a[i] ~ /^package=/) {
 				pkgname=a[i]
-				if ($1 ~ /^\/boot\//)
-					pkgname="bootloader"
+				if ($1 ~ /^\/boot\//) {
+					if ($1 ~ /^\/boot\/dtb\//)
+						pkgname="dtb"
+					else
+						pkgname="bootloader"
+				}
 				gsub(/package=/, "", pkgname)
 			} else if (a[i] == "config") {
 				type="config"
@@ -64,7 +72,7 @@
 		print "No packages specified in line: $0"
 		next
 	}
-	if (kernel != "") {
+	if (kernel != "" && pkgname != "dtb") {
 		output="kernel"
 		if (_kernconf != "") {
 			output=output"."_kernconf