# ----------------------------------------
#
# Makefile for packaging
#
# ----------------------------------------
include Makefile.common

__PGSTROM_TGZ := pg_strom-$(PGSTROM_VERSION)
PGSTROM_TAR   := $(__PGSTROM_TGZ).tar
PGSTROM_TGZ   := $(__PGSTROM_TGZ).tar.gz
PGSTROM_TGZ_FULLPATH := $(shell realpath $(PGSTROM_TGZ))

SWDC ?= $(shell test -d ../swdc/.git && realpath ../swdc || echo /dev/null)
__SWDC_URL = git@github.com:heterodb/swdc.git

__ARCH = $(shell rpmbuild -E %{_arch})
__DIST = $(shell rpmbuild -E %{dist} | grep -o -E '\.el[0-9]+' | sed 's/\.el/rhel/g')
__SOURCEDIR = $(shell rpmbuild -E %{_sourcedir})
__SPECDIR = $(shell rpmbuild -E %{_specdir})
__RPMDIR = $(shell rpmbuild -E %{_rpmdir})/$(__ARCH)
__SRPMDIR = $(shell rpmbuild -E %{_srcrpmdir})
__SPECFILE = $(__SPECDIR)/pg_strom.spec
__RPMFILES = $(shell rpmspec --rpms -q $(__SPECFILE) | grep -vE 'debug(info|source)')
__RPMDEBUGS = $(shell rpmspec --rpms -q $(__SPECFILE) | grep -E 'debug(info|source)')
__SRPMFILE = $(shell rpmspec --srpm -q $(__SPECFILE) | sed s/\.$(__ARCH)/.src/g)
__SWDC_RPMS_DIR=docs/yum/$(__DIST)-$(__ARCH)
__SWDC_DEBUG_DIR=docs/yum/$(__DIST)-debuginfo
__SWDC_SRPM_DIR=docs/yum/$(__DIST)-source

rpm: rpm-pg_strom

all: rpm-pg_strom rpm-mysql2arrow rpm-pcap2arrow

__precheck_swdc:
	(cd $(SWDC);	\
	 test "`git remote get-url origin`" = "$(__SWDC_URL)" || exit 1; \
	 git pull || exit 1)
	pinentry -h >&/dev/null || (echo "dnf install pinentry"; exit 1)

swdc: __precheck_swdc rpm-pg_strom
	(cd $(SWDC);						\
	mkdir -p $(__SWDC_RPMS_DIR);				\
	for __file in $(addsuffix .rpm,$(__RPMFILES)); do	\
	  rpmsign --addsign $(__RPMDIR)/$${__file} &&		\
	  install -m 644 $(__RPMDIR)/$${__file} $(__SWDC_RPMS_DIR) && \
	  git add $(__SWDC_RPMS_DIR)/$${__file};			\
	done;							\
	mkdir -p $(__SWDC_DEBUG_DIR);				\
	for __file in $(addsuffix .rpm,$(__RPMDEBUGS)); do	\
	  rpmsign --addsign $(__RPMDIR)/$${__file} &&		\
	  install -m 644 $(__RPMDIR)/$${__file} $(__SWDC_DEBUG_DIR) && \
	  git add $(__SWDC_DEBUG_DIR)/$${__file};	\
	done;							\
	mkdir -p $(__SWDC_SRPM_DIR);				\
	for __file in $(addsuffix .rpm,$(__SRPMFILE)); do	\
	  rpmsign --addsign $(__SRPMDIR)/$${__file} &&		\
	  install -m 644 $(__SRPMDIR)/$${__file} $(__SWDC_SRPM_DIR) && \
	  git add $(__SWDC_SRPM_DIR)/$${__file};		\
	done;							\
	install -m 644 $(PGSTROM_TGZ_FULLPATH) docs/tgz &&	\
	git add docs/tgz/$(PGSTROM_TGZ);			\
	./update-index.sh)

tarball:
	git archive --format=tar			\
	            --prefix=$(__PGSTROM_TGZ)/		\
	            -o $(PGSTROM_TAR) $(GITHASH)	\
	            LICENSE README.md Makefile		\
	            src arrow-tools test/ssbm
	TARFILE=`realpath $(PGSTROM_TAR)` && 		\
	TEMP=`mktemp -d` &&				\
	mkdir -p $${TEMP}/$(__PGSTROM_TGZ) &&		\
	git show --format=raw $(GITHASH):Makefile.common \
	| awk '/^GITHASH_IF_NOT_GIVEN/{ print "GITHASH_IF_NOT_GIVEN := $(GITHASH)"; next } { print }' \
	> $${TEMP}/$(__PGSTROM_TGZ)/Makefile.common &&	\
	pushd $${TEMP} &&				\
	echo $${TARFILE} &&				\
	tar rf $${TARFILE} $(__PGSTROM_TGZ)/Makefile.common && \
	popd &&						\
	gzip -f $(PGSTROM_TAR)

rpm-pg_strom: tarball
	cp -f $(PGSTROM_TGZ) $(__SOURCEDIR) || exit 1
	git show --format=raw $(GITHASH):files/systemd-pg_strom.conf > \
		$(__SOURCEDIR)/systemd-pg_strom.conf || exit 1
	git show --format=raw $(GITHASH):files/pg_strom.spec.in |	\
		sed -e "s/@@STROM_VERSION@@/$(VERSION)/g"		\
		    -e "s/@@STROM_RELEASE@@/$(RELEASE)/g"		\
		    -e "s/@@STROM_TARBALL@@/$(__PGSTROM_TGZ)/g"		\
		    -e "s/@@PGSTROM_GITHASH@@/$(GITHASH)/g" > $(__SPECFILE)
	rpmbuild -ba $(__SPECFILE)

rpm-mysql2arrow: tarball
	cp -f $(PGSTROM_TGZ) $(__SOURCEDIR) || exit 1
	git show --format=raw $(GITHASH):files/mysql2arrow.spec.in |	\
		sed -e "s/@@STROM_VERSION@@/$(VERSION)/g"		\
		    -e "s/@@STROM_RELEASE@@/$(RELEASE)/g"		\
		    -e "s/@@STROM_TARBALL@@/$(__PGSTROM_TGZ)/g"		\
		    -e "s/@@PGSTROM_GITHASH@@/$(GITHASH)/g" >		\
		$(__SPECDIR)/mysql2arrow.spec
	git show --format=raw $(GITHASH):files/pg_strom.spec.in |	\
		awk 'BEGIN {flag=0;} /^%changelog$$/{flag=1; next;} { if (flag>0) print; }' >> \
		$(__SPECDIR)/mysql2arrow.spec
	rpmbuild -ba $(__SPECDIR)/mysql2arrow.spec

rpm-pcap2arrow: tarball
	cp -f $(PGSTROM_TGZ) $(__SOURCEDIR) || exit 1
	git show --format=raw $(GITHASH):files/pcap2arrow.spec.in |	\
		sed -e "s/@@STROM_VERSION@@/$(VERSION)/g"		\
		    -e "s/@@STROM_RELEASE@@/$(RELEASE)/g"		\
		    -e "s/@@STROM_TARBALL@@/$(__PGSTROM_TGZ)/g"		\
		    -e "s/@@PGSTROM_GITHASH@@/$(GITHASH)/g" >		\
		$(__SPECDIR)/pcap2arrow.spec
	git show --format=raw $(GITHASH):files/pg_strom.spec.in |	\
		awk 'BEGIN {flag=0;} /^%changelog$$/{flag=1; next;} { if (flag>0) print; }' >> \
		$(__SPECDIR)/mysql2arrow.spec
	rpmbuild -ba $(__SPECDIR)/pcap2arrow.spec

deb:
	@which fakeroot >&/dev/null || (echo "Run, sudo dnf install fakeroot"; exit 1)
	@which dpkg-deb >&/dev/null || (echo "Run, sudo dnf install dpkg"; exit 1)
	WORK=`mktemp -d` && mkdir -p $${WORK}/DEBIAN &&		\
	(cat files/pg-strom.control.in |			\
	 sed -e 's/@@PG_MAJORVERSION@@/$(PG_MAJORVERSION)/g'	\
	     -e 's/@@PG_MINORVERSION@@/$(PG_MINORVERSION)/g'	\
	     -e 's/@@PGSTROM_VERSION@@/$(PGSTROM_VERSION)/g'	\
	) > $${WORK}/DEBIAN/control &&				\
	make -C src DEST=$${WORK} clean &&			\
	make -C src DEST=$${WORK} -j 8  &&			\
	make -C src DEST=$${WORK} install &&			\
	fakeroot dpkg-deb --build $${WORK} .
