lib/libbsd/ndmake.sh
$ cat ndmake.sh
#!/bin/sh -ue
NAME=libbsd
VERSION=0.12.2
RELEASE=1
SOURCE="https://gitlab.freedesktop.org/libbsd/libbsd/-/archive/${VERSION}/libbsd-${VERSION}.tar.gz"
BUILD_OPT="
	-DCOND_ABI_ARC4RANDOM=1
	-DCOND_ABI_BSD_GETOPT=1
	-DCOND_ABI_FREEZERO=1
	-DCOND_ABI_PROGNAME=1
	-DCOND_ABI_READPASSPHRASE=1
	-DDEF_LIBBSD_ABI_ARC4RANDOM=1
	-DDEF_LIBBSD_ABI_BSD_GETOPT=1
	-DDEF_LIBBSD_ABI_FREEZERO=1
	-DDEF_LIBBSD_ABI_PROGNAME=1
	-DDEF_LIBBSD_ABI_READPASSPHRASE=1
	-DUNDEF_HAVE___REGISTER_ATFORK=1
	-DEXTRA_LDLIBS=-pthread
"

build() {
	demiurge . || die "demiurge failed"

	msg "fixing demiurge AS_TR_CPP output..."
	: > .demiurge.tmp || die "failed to create .demiurge.tmp"
	while IFS= read -r line; do
		case "$line" in
		COND_AS_TR_CPP*)
			key=$(printf '%s\n' "$line" | sed -n 's/^COND_AS_TR_CPP(\[\([A-Za-z0-9_][A-Za-z0-9_]*\)\])=.*/\1/p') || die "failed to parse condition key"
			[ -n "$key" ] || { printf '%s\n' "$line" >> .demiurge.tmp || die "failed to write .demiurge.tmp"; continue; }
			val=${line#*=}
			key_upper=$(printf '%s' "$key" | tr '[:lower:]' '[:upper:]') || die "failed to uppercase key"
			printf 'COND_%s=%s\n' "$key_upper" "$val" >> .demiurge.tmp || die "failed to write .demiurge.tmp"
			;;
		DEF_AS_TR_CPP*)
			key=$(printf '%s\n' "$line" | sed -n 's/^DEF_AS_TR_CPP(\[\([A-Za-z0-9_][A-Za-z0-9_]*\)\])=.*/\1/p') || die "failed to parse define key"
			[ -n "$key" ] || { printf '%s\n' "$line" >> .demiurge.tmp || die "failed to write .demiurge.tmp"; continue; }
			val=${line#*=}
			key_upper=$(printf '%s' "$key" | tr '[:lower:]' '[:upper:]') || die "failed to uppercase key"
			printf 'DEF_%s=%s\n' "$key_upper" "$val" >> .demiurge.tmp || die "failed to write .demiurge.tmp"
			;;
		*)
			printf '%s\n' "$line" >> .demiurge.tmp || die "failed to write .demiurge.tmp"
			;;
		esac
	done < .demiurge || die "failed to read .demiurge"
	mv .demiurge.tmp .demiurge || die "failed to replace .demiurge"

	[ ! -f .satan ] && echo "LDFLAGS=${LDFLAGS}" > .satan
	satan gen ${BUILD_OPT} PREFIX="$PREFIX" DESTDIR="$PKG" . || die "satan gen failed"

	has_cmd samu || die "samu not found"
	samu || die "samu build failed"
	DESTDIR="$PKG" samu install || die "samu install failed"
}

postbuild() {
	msg "installing libbsd pkg-config file..."
	install -d "$PKG/$PREFIX/lib/pkgconfig" "$PKG/$PREFIX/include/bsd" || die "failed to create install dirs"
	install -m 644 include/bsd/readpassphrase.h "$PKG/$PREFIX/include/bsd/readpassphrase.h" || die "failed to install readpassphrase.h"
	cat > "$PKG/$PREFIX/lib/pkgconfig/libbsd.pc" <<-EOF
prefix=$PREFIX
exec_prefix=\${prefix}
libdir=\${exec_prefix}/lib
includedir=\${prefix}/include

Name: libbsd
Description: Utility functions from BSD systems
Version: $VERSION
URL: https://libbsd.freedesktop.org/
Libs: -L\${libdir} -lbsd
Libs.private: -pthread -lmd
Cflags: -I\${includedir}
EOF
	[ -f "$PKG/$PREFIX/lib/pkgconfig/libbsd.pc" ] || die "failed to write libbsd.pc"
	cat > "$PKG/$PREFIX/lib/pkgconfig/libbsd-overlay.pc" <<-EOF
prefix=$PREFIX
exec_prefix=\${prefix}
libdir=\${exec_prefix}/lib
includedir=\${prefix}/include

Name: libbsd
Description: Utility functions from BSD systems (overlay)
Version: $VERSION
URL: https://libbsd.freedesktop.org/
Libs: -L\${libdir} -lbsd
Libs.private: -pthread -lmd
# We use -isystem instead of -I due the overlay via #include_next usage.
Cflags: -isystem \${includedir}/bsd -DLIBBSD_OVERLAY
EOF
	[ -f "$PKG/$PREFIX/lib/pkgconfig/libbsd-overlay.pc" ] || die "failed to write libbsd-overlay.pc"
}

. ${0%/*}/../../libsh/libdmake.sh