3 Commits

Author SHA1 Message Date
dd731d9d19 add rust buildsystem. 2026-04-08 22:42:10 +08:00
4bf867d933 Merge pull request 'add makefile.' (#2) from yyjeqhc/rust-rpm-macros:make into master
Reviewed-on: openRuyi/rust-rpm-macros#2
Reviewed-by: Z572 <z572@z572.online>
2026-03-20 02:54:25 +00:00
e5cf2569a7 add makefile.
Signed-off-by: yyjeqhc <jialin.oerv@isrc.iscas.ac.cn>
2026-03-18 22:15:21 +08:00
4 changed files with 82 additions and 6 deletions

10
Makefile Normal file
View File

@@ -0,0 +1,10 @@
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.buildsystem.rust $(DESTDIR)$(RPMMACRODIR)/macros.buildsystem.rust
install -D -m644 macros.rust $(DESTDIR)$(RPMMACRODIR)/macros.rust
install -D -m755 rustcrates-gen-feature-specparts.sh $(DESTDIR)$(RPMSCRIPTDIR)/rustcrates-gen-feature-specparts.sh

22
macros.buildsystem.rust Normal file
View File

@@ -0,0 +1,22 @@
# Example buildsystem for rust crates
%buildsystem_rust_prep() %{expand:\
%autosetup -a -C -p1 %* \
mkdir -p ~/.cargo \
cat > ~/.cargo/config.toml <<EOF\
[source.crates-io]\
replace-with = "system-registry"\
\
[source.system-registry]\
directory = "/usr/share/cargo/registry"\
EOF\
rm -rf Cargo.lock \
}
%buildsystem_rust_conf() %nil
%buildsystem_rust_build() %{expand:\
cargo build --release \
}
%buildsystem_rust_install() %{expand:\
%{rust_install_crate} \
}
%buildsystem_rust_check() %nil

View File

@@ -1,10 +1,14 @@
%rustcrates_dynspec_helper %{_rpmconfigdir}/rust-rpm-macros/rustcrates-gen-feature-specparts.sh
# Example buildsystem for rust crates # Example buildsystem for rust crates
%buildsystem_rustcrates_prep() %{expand:\\\ %buildsystem_rustcrates_prep() %{expand:\
%autosetup -C -p1 %* \\\ %autosetup -C -p1 %* \
} }
%buildsystem_rustcrates_conf() %nil %buildsystem_rustcrates_conf() %nil
%buildsystem_rustcrates_build() %nil %buildsystem_rustcrates_build() %{expand:\
%buildsystem_rustcrates_install() %{expand:\\\ %{rustcrates_dynspec_helper} "%{_sourcedir}" \
%{rust_install_crate} \\\
} }
%buildsystem_rustcrates_check() %nil %buildsystem_rustcrates_install() %{expand:\
%{rust_install_crate} \
}
%buildsystem_rustcrates_check() %nil

View File

@@ -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