>From eb360dd0afa62b6865a9813f5a911dc02155d729 Mon Sep 17 00:00:00 2001 From: Lukas Slebodnik Date: Wed, 9 Jul 2014 14:29:45 +0200 Subject: [PATCH] CONTRIB: make_srpm.sh can prepare SRPM with patches Creating SRPM with patches is useful for some static analysers, which can do two builds. The first time without patches and the second with patches. Bash function add_patches is inspired by file rpm/add_patches.sh from project\ 389-ds-base. commit 2a92a6cccd1002f4fe976ee7a5b79d779b009f87 Author: Mark Reynolds Thanks. Resolves: https://fedorahosted.org/sssd/ticket/2149 --- contrib/fedora/make_srpm.sh | 62 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 54 insertions(+), 8 deletions(-) diff --git a/contrib/fedora/make_srpm.sh b/contrib/fedora/make_srpm.sh index 41bc6fa7dd29b029c92fb5c5715f3f1f73b91f5f..0e16617f0a1fec5d633c8b59ec36ff8cd25e4d6d 100755 --- a/contrib/fedora/make_srpm.sh +++ b/contrib/fedora/make_srpm.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # Authors: # Lukas Slebodnik @@ -21,27 +21,70 @@ PACKAGE_NAME="sssd" usage(){ - echo "$(basename $0) [OPTIONS]" - echo "\t-p, --prerelease Create prerelease SRPM" - echo "\t-d, --debug Enable debugging." - echo "\t-c, --clean Remove directory rpmbuild and exit." - echo "\t-h, --help Print this help and exit." - echo "\t-?, --usage" + echo "$(basename $0) [OPTIONS] [-P|--patches ...]" + echo -e "\t-p, --prerelease Create prerelease SRPM" + echo -e "\t-d, --debug Enable debugging." + echo -e "\t-c, --clean Remove directory rpmbuild and exit." + echo -e "\t-P, --patches Requires list of patches for SRPM." + echo -e "\t-h, --help Print this help and exit." + echo -e "\t-?, --usage" exit 1 } +add_patches(){ + spec_file=$1 + shift + source_dir=$1 + shift + + patches=("${@}") + + # These keep track of our spec file substitutions. + i=1 + prefix="Source0:" + prepprefix="%setup" + + # If no patches exist, just exit. + if [ -z "$patches" ]; then + echo Creating SRPM without extra patches. + return 0 + fi + + # Add the patches to the specfile. + for p in "${patches[@]}"; do + cp "$p" "$source_dir" + p=$(basename $p) + echo "Adding patch to spec file - $p" + sed -i -e "/${prefix}/a Patch${i}: ${p}" \ + -e "/$prepprefix/a %patch${i} -p1" \ + "$spec_file" + + prefix="Patch${i}:" + prepprefix="%patch${i}" + i=$(($i+1)) + done +} + for i in "$@" do case $i in -p|--prerelease) PRERELEASE=1 + shift ;; -d|--debug) set -x + shift ;; -c|--clean) CLEAN=1 + shift + ;; + -P|--patches) + shift + patches=("$@") + break ;; -h|--help|-\?|--usage) usage @@ -113,7 +156,10 @@ git archive --format=tar.gz --prefix="$NAME"/ \ --remote="file://$SRC_DIR" \ HEAD -cp "$SRC_DIR"/contrib/*.patch "$RPMBUILD/SOURCES" +cp "$SRC_DIR"/contrib/*.patch "$RPMBUILD/SOURCES" 2>/dev/null +add_patches "$RPMBUILD/SPECS/$PACKAGE_NAME.spec" \ + "$RPMBUILD/SOURCES" \ + "${patches[@]}" cd $RPMBUILD rpmbuild --define "_topdir $RPMBUILD" \ -- 1.9.3