From fa9e9502229862c13ad8d654088ac05a5aec1d60 Mon Sep 17 00:00:00 2001 From: Jan Palus Date: Mon, 5 Apr 2021 14:47:52 +0200 Subject: [PATCH] new --- create-crates.sh | 69 ++++++++++++++++++++++++++++++++++++++++++++++++ ripgrep.spec | 66 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 135 insertions(+) create mode 100755 create-crates.sh create mode 100644 ripgrep.spec diff --git a/create-crates.sh b/create-crates.sh new file mode 100755 index 0000000..297913a --- /dev/null +++ b/create-crates.sh @@ -0,0 +1,69 @@ +#!/bin/sh + +for cmd in bsdtar rpm-specdump cargo perl; do + if ! command -v $cmd > /dev/null 2> /dev/null; then + not_installed="$not_installed$cmd " + fi +done + +if [ -n "$not_installed" ]; then + echo "ERROR: required commands not found: $not_installed" >&2 + exit 1 +fi + +pkg_dir=$(readlink -f $(dirname "$0")) +pkg_name=$(basename "$pkg_dir") + +if [ ! -f "$pkg_dir/$pkg_name.spec" ]; then + echo "ERROR: unable to determine package name" >&2 + exit 1 +fi + +spec_dump=$(rpm-specdump "$pkg_dir/$pkg_name.spec") +pkg_version=$(echo "$spec_dump" | grep PACKAGE_VERSION | cut -f3 -d' ') +pkg_src=$(basename $(echo "$spec_dump" | grep SOURCEURL0 | cut -f3- -d' ')) +crates_file="$pkg_name-crates-$pkg_version.tar.xz" +cargo_package=${force_cargo_package:-$pkg_name} + +if [ -e "$pkg_dir/$crates_file" ]; then + echo "ERROR: crates file $crates_file already exists" >&2 + exit 1 +fi + +if [ ! -f "$pkg_dir/$pkg_src" ]; then + echo "ERROR: source file $pkg_src not found" >&2 + exit 1 +fi + +tmpdir=$(mktemp -d) + +rm_tmpdir() { + if [ -n "$tmpdir" -a -d "$tmpdir" ]; then + rm -rf "$tmpdir" + fi +} + +trap rm_tmpdir EXIT INT HUP + +cd "$tmpdir" +bsdtar xf "$pkg_dir/$pkg_src" +src_dir=$(ls) +if [ $(echo "$src_dir" | wc -l) -ne 1 ]; then + echo "ERROR: unexpected source structure:\n$src_dir" >&2 + exit 1 +fi + +cd "$src_dir" +cargo vendor +if [ $? -ne 0 ]; then + echo "ERROR: cargo vendor failed" >&2 + exit 1 +fi + +# replace cargo package version with @@VERSION@@ +perl -pi -e 'BEGIN { undef $/;} s/(\[\[package\]\]\nname\s*=\s*"'"$cargo_package"'"\nversion\s*=\s*")[^"]+/$1\@\@VERSION\@\@/m' Cargo.lock + +cd .. +tar cJf "$pkg_dir/$crates_file" "$src_dir"/{Cargo.lock,vendor} + +# vim: expandtab shiftwidth=2 tabstop=2 diff --git a/ripgrep.spec b/ripgrep.spec new file mode 100644 index 0000000..3cef49e --- /dev/null +++ b/ripgrep.spec @@ -0,0 +1,66 @@ +%define crates_ver 12.1.1 + +Summary: Line oriented search tool using Rust's regex library +Name: ripgrep +Version: 12.1.1 +Release: 1 +License: MIT or Unlicense +Group: Applications +Source0: https://github.com/BurntSushi/ripgrep/archive/%{version}/%{name}-%{version}.tar.gz +# Source0-md5: d3190853d47d51ad077a65aadbf55448 +# ./create-crates.sh +Source1: %{name}-crates-%{crates_ver}.tar.xz +# Source1-md5: 9edecedd92d2a028eff4d41fb3d8a800 +URL: https://github.com/BurntSushi/ripgrep +BuildRequires: cargo +BuildRequires: rpmbuild(macros) >= 2.004 +BuildRequires: rust +BuildRequires: tar >= 1:1.22 +BuildRequires: xz +ExclusiveArch: %{rust_arches} +BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n) + +%description +ripgrep is a line-oriented search tool that recursively searches your +current directory for a regex pattern. By default, ripgrep will +respect your .gitignore and automatically skip hidden +files/directories and binary files. + +%prep +%setup -q -a1 + +%{__mv} %{name}-%{crates_ver}/* . +sed -i -e 's/@@VERSION@@/%{version}/' Cargo.lock + +# use our offline registry +export CARGO_HOME="$(pwd)/.cargo" + +mkdir -p "$CARGO_HOME" +cat >.cargo/config <