#!/bin/bash
set -e
pkgname=$1

if [ "x$pkgname" = "x" ]; then
	echo "Usage:" 1>&2
	echo "  $0 <pkgname>" 1>&2
	exit 1
fi

basedir=$(cd `dirname $0` && pwd)
pkgdir=$basedir/$pkgname

if [ ! -d $basedir ]; then
	echo Package $pkgname does not exist in $basedir. 1>&2
fi

RPMBUILD=$basedir/rpmbuild
SRCPATH=$pkgdir
DISTPATH=$basedir/dist
SRCDISTPATH=$basedir/dist/Source
RPMOPTS=(-ba --define "_topdir ${RPMBUILD}" --define "_sourcedir ${SRCPATH}" --define "debug_package %{nil}")

# 引数からRPMOPTSにdefineを追加
args=(${@:2})
for ((i = 0; i< ${#args[@]}; i+=2)) {
  RPMOPTS+=(--define "${args[$i]} ${args[$i+1]}")
}

if [ -z "$SPEC" ]; then
	SPEC=$(basename $(find $pkgdir -name "${pkgname}*.spec" | sort | head -1))
fi
SPEC=${SPEC:-$pkgname.spec}
echo Use SPEC: $SPEC

# $pkgdir/defineファイルがあれば設定を読み込む
if [ -f $pkgdir/define ]; then
	echo "Additional definition from $pkgdir/define ..."
	while read line; do
		echo "- RPMOPTS: Define $line"
		[ -n "$line" ] && RPMOPTS+=(--define "$line")
	done < $pkgdir/define
fi

mkdir -p $RPMBUILD

cd $pkgdir

# rootの場合はbuilddepする
if [ ${EUID:-${UID}} = 0 ]; then
	echo "Resolving BuildRequires for $SPEC ..."
	yum-builddep -y $SPEC
fi

# sources.txtが存在する場合はダウンロードする
if [ -f setup-src.sh ]; then
	./setup-src.sh
else
	if [ -f sources.txt ]; then
		while read line; do
			[ -z "$line" ] && continue
			a=($line)
			if [ "${a[0]}" = "github:" ]; then
				# GITHUB_TOKENが指定されていない場合はスキップ
				[ -z "$GITHUB_TOKEN" ] && continue
				$basedir/tools/archive-get ${a[1]} ${a[2]} .
			else
				if [ -z "${a[1]}" ]; then
					[ -f $(basename $line | head -1) ] || curl -O $line
				else
					[ -f ${a[1]} ] || wget -O ${a[1]} ${a[0]}
				fi
			fi
		done < sources.txt
	fi
fi

rpmbuild "${RPMOPTS[@]}" $SPEC

if [ "$?" = "0" ]; then
	mkdir -p $DISTPATH
	mkdir -p $SRCDISTPATH
	find $RPMBUILD/RPMS -name "*.rpm" -exec mv {} $DISTPATH \;
	find $RPMBUILD/SRPMS -name "*.rpm" -exec mv {} $SRCDISTPATH \;
	rm -rf $RPMBUILD
else
	echo Error has been occured. 1>&2
fi

