SHELL=/bin/bash

DEFAULT: clean direct
all: force-clean direct repos
co: svn_checkout
sw: svn_switch
rlog: release_log

REPOS_DIR = /opt/ppc-data/repos
DEBS_DIR = $(REPOS_DIR)/debian/debs

SRC_ROOT ?= ../
SVN_REVISION ?= HEAD
JOBS ?= 8
QUASI_MAKE_PATH ?= /usr/local/bin/

END ?= BASE

SVN_ROOT = $(PWD)/$(SRC_ROOT)
START_DIR = $(PWD)

SVN_URL = `svn info | grep '^URL: ' | sed 's/^URL: //' |sed 's!/packages$$!!'`/

ifdef SKIP_SIGN
	# -us 	- Do not sign the source package
	# -uc 	- Do not sign the .changes file
	BUILDPACKAGE_PARAMS= -uc -us
else
	BUILDPACKAGE_PARAMS=
endif

# helpers for work with svnroot directory
svn_checkout:
	true

# main target which build packages
direct:
	$(eval start_time:=$(shell date +%s))

	if [ -z $(CI) ]; then dh-svn-release $(SVN_ROOT) yandex-direct/debian; fi

	# сборка bem находится здесь, а не в debian/rules, потому что она делает svn checkout adv-blocks, который
	# внутри fakeroot-окружения просит пароль от ssh root@svn.yandex.ru.
	#
	# перенести хочется, но можно будет после изменений от clientside:
	# * либо adv-blocks переедут в git (который может анонимный checkout),
	# * либо все зависимости можно будет записать в svn:externals (не хочется, доступ к git через svn неидеален)
	#   - записать только adv-blocks не нравится, потому что тогда зависимости будут там и в .bem/make.js (два места)
	# * либо bem make разобьётся на две части (подгрузка зависимостей и компиляция), и тогда
	#   в debian/rules можно будет перенести компиляцию, чтобы самая долгая часть сборки
	#   выполнялась параллельно с другими задачами

	cd $(SVN_ROOT) && \
	$(QUASI_MAKE_PATH)/quasi-make.pl \
		-f $(SVN_ROOT)/etc/quasi-make/General.pm \
		-f $(SVN_ROOT)/etc/quasi-make/Beta.pm \
		bem_make_production

	$(SVN_ROOT)/protected/maintenance/create_rules_vars_file.pl -o yandex-direct/debian/rules-vars.tmp
	cd yandex-direct; SVN_ROOT=$(SVN_ROOT) JOBS=$(JOBS) dpkg-buildpackage -rfakeroot $(BUILDPACKAGE_PARAMS)

	$(eval finish_time:=`date +%s`)
	@echo Build time: $$(( ($(finish_time) - $(start_time)) / 60 ))m$$(( ($(finish_time) - $(start_time)) % 60 ))s
	@# не самый надежный способ отсчета времени, но работает

# targets for deb repository
repos-full-clean:
	if [ $(DIRECT_HANDLE_LOCAL_REPOSITORY) ]; then rm -f $(DEBS_DIR)/yandex-direct*.deb; fi

repos-clean:
	if [ $(DIRECT_HANDLE_LOCAL_REPOSITORY) ]; then \
		cleanup-repos --max-age 21 --prefix yandex-direct --subminor-cnt 3 /opt/ppc-data/repos/debian/debs; \
	fi

# Пакеты загружаем: на dist + если выставлена переменная окружения DIRECT_HANDLE_LOCAL_REPOSITORY -- в запасной локальный репозиторий
repos-add:
	if [ $(DIRECT_HANDLE_LOCAL_REPOSITORY) ]; then \
		cp *.deb $(DEBS_DIR); \
		make -f $(REPOS_DIR)/Makefile; \
	fi
	dupload -to direct-trusty --nomail

repos: repos-clean repos-add

# delete all build files
clean:
	if [ -z $(CI) ]; then \
		rm -f yandex-direct/debian/{changelog,version,rules-vars.tmp}; \
		rm -f yandex-direct*.{deb,changes,dsc,tar.gz,upload}; \
		cd yandex-direct; \
		dh_clean; \
	fi

# удаляем неверсионированные файлы (например, генерируемые postinst, оставшиеся от предыдущей сборки)
force-clean: clean
	svn st |grep '^?' |awk '{print $$2}' |xargs rm || true

# not deleting versioning file and changelog
dirty-clean:
	rm -f yandex-direct*.{deb,changes,dsc,tar.gz,upload}
	cd yandex-direct; dh_clean

# helper to create packager with content of parent directory
dirty: 
	SRC_ROOT=../ DH_SVN_RELEASE_NO_CHECK=1 make dirty-clean direct

# helper for pretty format svn log
release_log:
	svn log -r ${START}:${END} $(SVN_ROOT) | perl -pe 's/^----+.*\n//;s/^\s+$$//;s/^(r\d+\s)/\n$$1/;'

