From e5cf2569a7258e6ff850f2b8bed664e83d3a6862 Mon Sep 17 00:00:00 2001 From: yyjeqhc Date: Thu, 5 Feb 2026 12:57:47 +0800 Subject: [PATCH] add makefile. Signed-off-by: yyjeqhc --- Makefile | 9 +++++++ macros.buildsystem.rustcrates | 16 +++++++----- rustcrates-gen-feature-specparts.sh | 40 +++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 6 deletions(-) create mode 100644 Makefile create mode 100644 rustcrates-gen-feature-specparts.sh diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..c9b951f --- /dev/null +++ b/Makefile @@ -0,0 +1,9 @@ +PREFIX ?= /usr +RPMMACRODIR ?= $(PREFIX)/lib/rpm/macros.d +RPMSCRIPTDIR ?= $(PREFIX)/lib/rpm/rust-rpm-macros + +.PHONY: install +install: + install -D -m644 macros.buildsystem.rustcrates $(DESTDIR)$(RPMMACRODIR)/macros.buildsystem.rustcrates + install -D -m644 macros.rust $(DESTDIR)$(RPMMACRODIR)/macros.rust + install -D -m755 rustcrates-gen-feature-specparts.sh $(DESTDIR)$(RPMSCRIPTDIR)/rustcrates-gen-feature-specparts.sh diff --git a/macros.buildsystem.rustcrates b/macros.buildsystem.rustcrates index 3f9d9d9..0e43379 100644 --- a/macros.buildsystem.rustcrates +++ b/macros.buildsystem.rustcrates @@ -1,10 +1,14 @@ +%rustcrates_dynspec_helper %{_rpmconfigdir}/rust-rpm-macros/rustcrates-gen-feature-specparts.sh + # Example buildsystem for rust crates -%buildsystem_rustcrates_prep() %{expand:\\\ - %autosetup -C -p1 %* \\\ +%buildsystem_rustcrates_prep() %{expand:\ + %autosetup -C -p1 %* \ } %buildsystem_rustcrates_conf() %nil -%buildsystem_rustcrates_build() %nil -%buildsystem_rustcrates_install() %{expand:\\\ - %{rust_install_crate} \\\ +%buildsystem_rustcrates_build() %{expand:\ + %{rustcrates_dynspec_helper} "%{_sourcedir}" \ } -%buildsystem_rustcrates_check() %nil \ No newline at end of file +%buildsystem_rustcrates_install() %{expand:\ + %{rust_install_crate} \ +} +%buildsystem_rustcrates_check() %nil diff --git a/rustcrates-gen-feature-specparts.sh b/rustcrates-gen-feature-specparts.sh new file mode 100644 index 0000000..6cbad5d --- /dev/null +++ b/rustcrates-gen-feature-specparts.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +set -euo pipefail + +SOURCEDIR="${1:-}" +if [[ -z "$SOURCEDIR" ]]; then + echo "usage: $0 SOURCEDIR" >&2 + exit 2 +fi + +if [[ -z "${RPM_SPECPARTS_DIR:-}" || ! -d "$RPM_SPECPARTS_DIR" ]]; then + echo "error: dynamic spec generation is not supported by this RPM version (missing RPM_SPECPARTS_DIR)" >&2 + exit 1 +fi + +set -- "$SOURCEDIR"/*.spec +SPEC_SELF="$1" +SPECPART="$RPM_SPECPARTS_DIR/50-feature-files.specpart" + +: > "$SPECPART" + +if [[ ! -f "$SPEC_SELF" ]]; then + echo "warning: no spec file found in $SOURCEDIR" >&2 + exit 0 +fi + +if ! awk ' + /^[[:space:]]*%package[[:space:]]+/ { + if (match($0, /-n[[:space:]]+%\{name\}\+([A-Za-z0-9_.-]+)/, m) && !seen[m[1]]++) { + print "%files -n %{name}+" m[1] + print "" + found = 1 + } + } + END { + exit(found ? 0 : 2) + } +' "$SPEC_SELF" > "$SPECPART"; then + echo "warning: no feature subpackages parsed from $SPEC_SELF" >&2 +fi