#!/bin/sh
# $Log: create_rpm,v $
# Revision 1.19  2024-05-09 23:03:54+05:30  Cprogrammer
# use x.y for release
#
# Revision 1.18  2022-10-04 23:40:14+05:30  Cprogrammer
# use rpmlintrc from $HOME/.config
#
# Revision 1.17  2022-01-30 08:30:11+05:30  Cprogrammer
# added --clean argument
#
# Revision 1.16  2021-07-09 22:04:49+05:30  Cprogrammer
# added qmta
#
# Revision 1.15  2021-03-26 18:15:02+05:30  Cprogrammer
# fixed missing catChangeLog in debian builds
#
# Revision 1.14  2020-10-21 20:33:00+05:30  Cprogrammer
# removed ucspi-tcp
#
# Revision 1.13  2020-09-24 16:11:42+05:30  Cprogrammer
# Makefile split into three Makefiles (variables, main, system specific)
#
# Revision 1.12  2020-09-13 01:33:07+05:30  Cprogrammer
# added --release option to specify release on command line
#
# Revision 1.11  2020-08-04 22:13:07+05:30  Cprogrammer
# libsrs2, libdkim made as independent packages and moved out of indimail-mta
#
# Revision 1.10  2020-07-11 22:07:21+05:30  Cprogrammer
# fixed return status of rpmbuild getting clobbered
#
# Revision 1.9  2020-07-05 14:14:34+05:30  Cprogrammer
# added command line option to set verbose rpmbuild
#
# Revision 1.8  2020-07-04 23:57:51+05:30  Cprogrammer
# do silent rpm builds
#
# Revision 1.7  2020-07-01 21:35:03+05:30  Cprogrammer
# added option to skip copying source files
#
# Revision 1.6  2020-05-31 10:54:53+05:30  Cprogrammer
# removed version numbers from directory names of libdkim, libsrs2, ucspi-tcp
#
# Revision 1.5  2020-05-27 12:39:18+05:30  Cprogrammer
# build spec file before rpm build
#
# Revision 1.4  2020-05-26 09:38:40+05:30  Cprogrammer
# added option to specify release number on command line
#
# Revision 1.3  2020-05-25 23:12:35+05:30  Cprogrammer
# fixed release number in changelog
#
# Revision 1.2  2020-05-24 23:52:46+05:30  Cprogrammer
# reset release to 1.1 on OS distribution change
#
# Revision 1.1  2020-05-24 11:55:44+05:30  Cprogrammer
# Initial revision
#
#
# $Id: create_rpm,v 1.19 2024-05-09 23:03:54+05:30 Cprogrammer Exp mbhangui $
#
version=$(head -1 conf-version)

get_tar_files()
{
(
for i in `grep "^Source" indimail-mta-x/indimail-mta.spec.in | awk '{print $2}' | grep "\.tar"`
do
	i=`basename $i`
	echo $i
done
) | uniq | sed \
	-e 's/%{name}/indimail-mta/g' \
	-e "s/%{version}/$version/g"
}

get_non_tar_files()
{
(
for i in `grep "^Source" $1 | grep -v "\.tar" | awk '{print $2}'`
do
	i=`basename $i`
	echo $i
done
) | sort -u | sed \
	-e 's/%{name}/indimail-mta/g' \
	-e "s/%{version}/$version/g"
}

get_dirname()
{
	echo $1 | sed \
		-e 's}.tar.gz}}g' \
		-e 's}.tar.bz2}}g' \
		-e 's}.tar.xz}}g'
}

if [ -f /etc/debian_version ] ; then
	echo "you can't do rpmbuild on an insane system" 1>&2
	exit 1
fi

verbose=0
clean=""
while test $# -gt 0; do
    case "$1" in
    -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'`
    ;;
    *) optarg=
    ;;
    esac

    case "$1" in
    --verbose)
    verbose=1
    ;;
    --clean)
    clean="--clean"
    ;;
    --release=*)
    release=$optarg
    ;;
    *)
    echo "invalid option [$1]"
    read key
    exit 1
    ;;
    esac

    shift
done

if test -f $HOME/.rpmmacros
then
	topdir=`grep ^%_topdir $HOME/.rpmmacros | awk '{print $2}'`
	if test -n "$topdir"
	then
		rpmbuild=$topdir
	else
		rpmbuild=$HOME/rpmbuild
	fi
else
	rpmbuild=$HOME/rpmbuild
fi

copy_src=0
echo -n "Copy Source Files - "
read key
if [ " $key" = " y" -o " $key" = " Y" ] ; then
	copy_src=1
fi

SYSTEM=`uname -s | tr "[:lower:]" "[:upper:]"`
if [ $copy_src -eq 1 ] ; then
make SYSTEM=$SYSTEM -s indimail-mta.spec
if [ $? -ne 0 ] ; then
	echo "make failed" 1>&2
	exit 1
fi
if [ -d ../stage ] ; then
	/bin/rm -rf ../stage
fi
mkdir ../stage
cd ..
list=`get_tar_files`
for i in $list
do
	dir=`get_dirname $i`
	case "$dir" in
		indimail-mta-$version)
		if [ ! -d indimail-mta-x ] ; then
			echo "$i: No such file or directory" 1>&2
			exit 1
		fi
		echo "Preparing indimail-mta-"$version""
		/bin/cp -rp indimail-mta-x stage/indimail-mta-"$version"
		/bin/rm -f stage/indimail-mta-"$version"/catChangeLog
		/bin/cp indimail-mta-x/catChangeLog stage/indimail-mta-"$version"
		cd stage/indimail-mta-"$version"
		echo "Cleaning indimail-mta"
		make SYSTEM=$SYSTEM -s clean > /dev/null
		make SYSTEM=$SYSTEM -s distclean > /dev/null
		/bin/rm -rf autom4te.cache .deps
		cd ..
		tar \
			--exclude="indimail-mta-$version/.git" \
			--exclude="indimail-mta-$version/debian" \
			--exclude="indimail-mta-$version/RCS" \
			-cf - indimail-mta-"$version" \
			| gzip -c > $rpmbuild/SOURCES/indimail-mta-"$version".tar.gz
		SRC="$rpmbuild/SOURCES/indimail-mta-"$version".tar.gz $SRC"
		cd ..
		continue
		;;
	esac
done
echo "Copying permissions files and rpmlintrc"
for i in `get_non_tar_files indimail-mta-x/indimail-mta.spec.in`
do
	/bin/cp -p stage/indimail-mta-"$version"/$i $rpmbuild/SOURCES
	SRC="$rpmbuild/SOURCES/$i $SRC"
done
echo "Clearing stage directory"
/bin/rm -rf stage
else
	cd ..
fi
dist=`uname -r |cut -d . -f4`
if [ -z "$release" ] ; then
	if [ -f /usr/sbin/qmail-smtpd ] ; then
		iversion=$(rpm -qf /usr/sbin/qmail-smtpd|cut -d- -f3)
		if [ "$iversion" = "$version" ] ; then
			t1=$(rpm -qf /usr/sbin/qmail-smtpd | cut -d- -f4 | cut -d. -f1)
			t2=$(rpm -qf /usr/sbin/qmail-smtpd | cut -d- -f4 | cut -d. -f2)
			t2=$(expr $t2 + 1)
			release="$t1.$t2"
		else
			release=0.1
		fi
	else
		release=0.1
	fi
fi
echo -n "Build RPM for indimail-mta-"$version"-"$release" (Y/N) - "
read key
if [ " $key" = " Y" -o " $key" = " y" ] ; then
	tmprel=`cat indimail-mta-x/conf-release 2>/dev/null`
	if [ ! " $tmprel" = " $release" ] ; then
		echo $release > indimail-mta-x/conf-release
		cd indimail-mta-x
		make SYSTEM=$SYSTEM indimail-mta.spec
		cp indimail-mta.spec /tmp
		cd debian
		make
		cd ../..
	else
		cp indimail-mta-x/indimail-mta.spec /tmp
	fi
	build_arch=`rpmbuild --showrc|grep "^build arch" | awk '{print $4}'`
	if [ $verbose -eq 0 ] ; then
		echo "rpmbuild -ba $clean --quiet /tmp/indimail-mta.spec"
		rpmbuild -ba $clean --quiet /tmp/indimail-mta.spec
	else
		echo "rpmbuild -ba $clean /tmp/indimail-mta.spec"
		rpmbuild -ba $clean /tmp/indimail-mta.spec
	fi
	if [ $? -eq 0 ] ; then
		/bin/rm -f /tmp/indimail-mta.spec
		for i in indimail-mta indimail-mini qmta
		do
			rpm --addsign $rpmbuild/RPMS/$build_arch/$i-"$version"-"$release".$dist.$build_arch.rpm
		done
		rpm --addsign $rpmbuild/SRPMS/indimail-mta-"$version"-"$release".$dist.src.rpm
		echo -n "RPM lint for indimail-mta-"$version"-"$release" (Y/N) - "
		read key
		if [ " $key" = " Y" -o " $key" = " y" ] ; then
			(
			for i in indimail-mta indimail-mini qmta
			do
				echo $i
				if [ -f $HOME/.config/$i.rpmlintrc ] ; then
					rpmlint -r $HOME/.config/$i.rpmlintrc $rpmbuild/RPMS/$build_arch/$i-"$version"-"$release".$dist.$build_arch.rpm
				else
					rpmlint $rpmbuild/RPMS/$build_arch/$i-"$version"-"$release".$dist.$build_arch.rpm
				fi
				echo ------------------------
			done
			echo indimail-mta-"$version"-"$release".$dist.src.rpm
			rpmlint $rpmbuild/SRPMS/indimail-mta-"$version"-"$release".$dist.src.rpm
			echo ------------------------
			) 2>&1 | less
		fi
	else
		/bin/rm -f /tmp/indimail-mta.spec
	fi
fi
if [ $copy_src -eq 1 ] ; then
	echo -n "Remove Source (Y/N) - "
	read key
	if [ " $key" = " Y" -o " $key" = " y" ] ; then
		for i in $SRC
		do
			echo "/bin/rm -f $i"
			/bin/rm -f $i
		done
	fi
fi
