# Конфиги - start
FRAMEWORK_GIT=ssh://git@pi-stash.yandex.ru:7999/qbit/framework.git
FRAMEWORK_REV=dev

FRAMEWORK_YNDX_GIT=ssh://git@pi-stash.yandex.ru:7999/qbit/yandex.git
FRAMEWORK_YNDX_REV=dev

#ifeq ($(wildcard framework_yndx),)
#    QBIT_YANDEX_FRAMEWORK_PATH=/usr/share/perl5/
#else
#    QBIT_YANDEX_FRAMEWORK_PATH=framework_yndx/lib
#endif
QBIT_YANDEX_FRAMEWORK_PATH=lib

LEGO_PATH=/var/lib/yandex/lego/2.10.21
LEGO_BLOCKS=${LEGO_PATH}/bem-bl/blocks-common ${LEGO_PATH}/bem-bl/blocks-desktop ${LEGO_PATH}/blocks-common ${LEGO_PATH}/blocks-desktop blocks
LEGO_BUILD_BLOCKS=-l ${LEGO_PATH}/bem-bl/blocks-common -l ${LEGO_PATH}/bem-bl/blocks-desktop -l ${LEGO_PATH}/blocks-common -l ${LEGO_PATH}/blocks-desktop -l blocks

COMPRESSED?=yes
# Конфиги - end

export BEM_I18N_LANGS=ru en uk tr
export PERL5LIB=framework:lib
export XJST_ENGINE=sort-group
export NODE_PATH=/usr/lib/node_modules:
export PATH=./bin:/usr/local/bin:/usr/sbin:/usr/bin:/bin:/sbin

all: tanker_download lego

clean: lego_clean

.SECONDEXPANSION:

# Code utils
perltidy:
	find ./ -name '*.p[lm]' | grep -v '/lego/' | xargs -n1 -t -P8 perltidy -w --backup-file-extension=.~tidybkp~
	find ./ -name '*.~tidybkp~' -delete

# LEGO - start
lego: common.priv.js css js lego_images lego_html

ALL_BLOCKS_IMAGES=$(foreach f,$(shell find ./blocks -name "*.png" -or -name "*.gif" -or -name "*.jpg" -or -name "*.jpeg"), data/i/$f)
lego_images: ${ALL_BLOCKS_IMAGES}

data/i/%: $$*
	@mkdir -p `dirname $@`
	cp $< $@

lego_html: data/lego/blocks-common/i-social/closer/i-social__closer.html

data/lego/blocks-common/i-social/closer/i-social__closer.html: ${LEGO_PATH}/blocks-common/i-social/closer/i-social__closer.html
	@mkdir -p data/lego/blocks-common/i-social/closer/
	cp $< $@

lego_clean:
	@rm -rf common.priv.js data/css/_common.*css .tmp data/js/_common.*.js blocks/i-form-render/i-form-render.js data/i/./blocks data/lego/

# PRIV.JS
ALL_BEMHTML_FILES=$(shell find ${LEGO_BLOCKS} -name "*.bemhtml")
common.priv.js: .tmp/bundles/project/_project.priv.bemhtml.js
	@echo Building $@
	@cp $< $@

.tmp/bundles/project/_project.priv.bemhtml.js: .tmp/bundles/project/project.priv.bemhtml.js
	@echo Building $@
	@ycssjs $< --once=yes --minimize=${COMPRESSED}

.tmp/bundles/project/project.priv.bemhtml.js: .tmp/bundles/project/project.priv.js .tmp/bundles/project/project.bemhtml.js
	@echo Building $@
	@cat .tmp/bundles/project/project.priv.js .tmp/bundles/project/project.bemhtml.js > $@

.tmp/bundles/project/project.priv.js: .tmp/bundles/project/project.deps.js .tmp/bundles/project/project.i18n/all.js
	@echo Building $@
	@bem build -d $< -o .tmp/bundles/project -n project -t ${LEGO_PATH}/tools/bem/techs/nodejs/i18n.priv.js.js -L . ${LEGO_BUILD_BLOCKS}

.tmp/bundles/project/project.bemhtml.js: .tmp/bundles/project/project.deps.js ${ALL_BEMHTML_FILES}
	@echo Building $@
	@bem build -d $< -o .tmp/bundles/project -n project -t ${LEGO_PATH}/tools/bem/techs/nodejs/bemhtml.js ${LEGO_BUILD_BLOCKS} -l .tmp/bundles/project

.tmp/bundles/project/project.i18n/all.js: .tmp/bundles/project/project.deps.js
	@echo Building $@
	@bem build -d $< -o .tmp/bundles/project -n project -t ${LEGO_PATH}/tools/bem/techs/nodejs/i18n.js -L . ${LEGO_BUILD_BLOCKS} -l .tmp/bundles/project

# CSS
ALL_CSS_FILES=$(shell find ${LEGO_BLOCKS} -name "*.css")
css: data/css/_common.css data/css/_common.ie.css

data/css/_common.css: .tmp/bundles/project/_project.css
	@echo Building $@
	@cp $< $@

data/css/_common.ie.css: .tmp/bundles/project/_project.ie.css
	@echo Building $@
	@cp $< $@

.tmp/bundles/project/_project.css: .tmp/bundles/project/project.css
	@echo Building $@
	@ycssjs $< --once=yes --minimize=${COMPRESSED}

.tmp/bundles/project/_project.ie.css: .tmp/bundles/project/project.ie.css
	@echo Building $@
	@ycssjs $< --once=yes --minimize=${COMPRESSED}

.tmp/bundles/project/project.css: .tmp/bundles/project/project.deps.js ${ALL_CSS_FILES} .ycssjs
	@echo Building $@
	@bem build -d $< -o .tmp/bundles/project -n project -t css ${LEGO_BUILD_BLOCKS}

.tmp/bundles/project/project.ie.css: .tmp/bundles/project/project.deps.js ${ALL_CSS_FILES} .ycssjs
	@echo Building $@
	@bem build -d $< -o .tmp/bundles/project -n project -t ie.css ${LEGO_BUILD_BLOCKS}

# JS
ALL_JS_FILES=$(shell find ${LEGO_BLOCKS} -name "*.js" -and -not -name "*.deps.js" -and -not -name "*.bemjson.js" -and -not -name "*.orig.js" -and -not -name "*.test.js" -and -not -name "level.js")
js: $(foreach l,${BEM_I18N_LANGS}, data/js/_common.$l.js)

data/js/_common.%.js: .tmp/bundles/project/_project.$$*.js
	@echo Building $@
	@cp $< $@

.tmp/bundles/project/_project.%.js: .tmp/bundles/project/project.$$*.js
	@echo Building $@
	@ycssjs $< --once=yes --minimize=${COMPRESSED}

.tmp/bundles/project/project.%.js: .tmp/bundles/project/project.deps.js .tmp/bundles/project/project.i18n/all.js blocks/i-form-render/i-form-render.js ${ALL_JS_FILES}
	@echo Building $@
	@bem build -d $< -o .tmp/bundles/project -n project -t ${LEGO_PATH}/tools/bem/techs/nodejs/i18n.js.js -L . ${LEGO_BUILD_BLOCKS}

#	blocks/i-form-render/i-form-render.js
blocks/i-form-render/i-form-render.js: .tmp/bundles/client/client.bemhtml.js
	@echo Building $@
	@mkdir -p blocks/i-form-render
	@cp $< $@

.tmp/bundles/client/client.bemhtml.js: .tmp/bundles/client/client.deps.js ${ALL_BEMHTML_FILES}
	@echo Building $@
	@XJST_ASYNCIFY=yes XJST=node_modules/xjst/bin/xjst bem build -d $< -o .tmp/bundles/client -n client -t ${LEGO_PATH}/tools/bem/techs/nodejs/bemhtml.js ${LEGO_BUILD_BLOCKS}

# Bundles
#   PROJECT
ALL_DEPSJS_FILES=$(shell find ${LEGO_BLOCKS} -name "*.deps.js")

.tmp/bundles/project/project.deps.js: .tmp/bundles/project/project.bemdecl.js ${ALL_DEPSJS_FILES}
	@echo Building $@
	@bem build -d $< -o .tmp/bundles/project -n project -t deps.js ${LEGO_BUILD_BLOCKS}

BEM_TEMPLATE_DECLS=$(shell find ./  ${QBIT_YANDEX_FRAMEWORK_PATH}/QBit/templates -name "*.bem.tt2" -exec perl -le '$$ARGV[0] =~ s/\.bem\.tt2$$/.bemdecl.js/; print ".tmp/lego/$$ARGV[0]"' {} \;)
.tmp/bundles/project/project.bemdecl.js: ${BEM_TEMPLATE_DECLS}
	@echo Building $@
	@mkdir -p `dirname $@`
	@bem decl merge -o $@ $(foreach d,${BEM_TEMPLATE_DECLS},-d $d)

#	CLIENT
.tmp/bundles/client/client.deps.js: .tmp/lego/templates/common/client_blocks.bemdecl.js ${ALL_DEPSJS_FILES}
	@echo Building $@
	@mkdir -p `dirname $@`
	bem build -d $< -o .tmp/bundles/client -n client -t deps.js ${LEGO_BUILD_BLOCKS}

#	helpers
.tmp/lego/%.bemdecl.js: .tmp/lego/$$*.bemjson.js
	@${LEGO_PATH}/tools/bemjson2bemdecl.js $< $@

.tmp/lego/%.bemjson.js: $$*.bem.tt2
	@mkdir -p `dirname $@`
	@./bin/bem_tt2_to_bem.pl $< > $@

# LEGO - end

# Внутрение цели - start
# (Цели не предназанченный для отдельного запуска - нужно использовать цели из
# следующего раздела)

create_and_copy_configs:
	@if test \! -d nginx; then \
		mkdir nginx; \
	fi
	@perl beta/create_init_and_config.pl
	@cp beta/init.sh beta/nginx.conf nginx/
	@chmod a+x nginx/init.sh
	@cp beta/*.pem nginx/
	@cp beta/Application.cfg beta/WebInterface.cfg lib/

framework_checkout:
	@git clone ${FRAMEWORK_GIT} framework;
	@git --work-tree=framework --git-dir=framework/.git checkout ${FRAMEWORK_REV}

framework_update:
	@git --work-tree=framework --git-dir=framework/.git fetch
	@git --work-tree=framework --git-dir=framework/.git checkout ${FRAMEWORK_REV}

framework_yndx_checkout:
	@git clone ${FRAMEWORK_YNDX_GIT} framework_yndx;
	@git --work-tree=framework_yndx --git-dir=framework_yndx/.git checkout ${FRAMEWORK_YNDX_REV}

framework_yndx_update:
	@git --work-tree=framework_yndx --git-dir=framework_yndx/.git fetch
	@git --work-tree=framework_yndx --git-dir=framework_yndx/.git checkout ${FRAMEWORK_YNDX_REV}

save_configs:
	@rm -rf ./.beta_saved
	@mkdir ./.beta_saved
	@cp beta/init.sh beta/nginx.conf beta/Application.cfg beta/WebInterface.cfg .beta_saved/
	@rm beta/init.sh beta/nginx.conf

tanker_download:
	@echo Dowloading translations
	@./bin/qbit_tanker_download --tanker_branch=master
# Внутрение цели - end


# Цели которые нужно использовать - start
# beta_create: framework_yndx_checkout create_and_copy_configs save_configs tanker_download
beta_create: create_and_copy_configs save_configs tanker_download
	@$(MAKE) lego
	@echo lego build finished
	# @ln -f ./hooks/pre-commit .git/hooks/pre-commit
	# @ln -f /usr/bin/qbit-prepare-commit-msg .git/hooks/prepare-commit-msg
	# @ln -f ./framework_yndx/hooks/pre-commit ./framework_yndx/.git/hooks/pre-commit
	# @ln -f /usr/bin/qbit-prepare-commit-msg ./framework_yndx/.git/hooks/prepare-commit-msg
	@make --no-print-directory -C ./ -f ./bin/build/01_fetch_regions.mk build
	@./nginx/init.sh restart

beta_update:
	@if test \! -d .beta_saved; then \
         echo "Create beta with \"make beta_create\""; \
         exit 1; \
     fi
	@perl beta/create_init_and_config.pl
	@diff -c .beta_saved/init.sh           beta/init.sh           | patch --no-backup-if-mismatch ./nginx/init.sh
	@diff -c .beta_saved/nginx.conf        beta/nginx.conf        | patch --no-backup-if-mismatch ./nginx/nginx.conf
	@diff -c .beta_saved/Application.cfg   beta/Application.cfg   | patch --no-backup-if-mismatch ./lib/Application.cfg
	@diff -c .beta_saved/WebInterface.cfg  beta/WebInterface.cfg  | patch --no-backup-if-mismatch ./lib/WebInterface.cfg
	@$(MAKE) --no-print-directory save_configs
	#@$(MAKE) --no-print-directory framework_yndx_update
	@./bin/qbit_tanker_download --tanker_branch=master
	@$(MAKE) lego
	# @ln -f ./hooks/pre-commit .git/hooks/pre-commit
	# @ln -f /usr/bin/qbit-prepare-commit-msg .git/hooks/prepare-commit-msg
	#@ln -f ./framework_yndx/hooks/pre-commit ./framework_yndx/.git/hooks/pre-commit
	#@ln -f /usr/bin/qbit-prepare-commit-msg ./framework_yndx/.git/hooks/prepare-commit-msg
	@./nginx/init.sh restart
# Цели которые нужно использовать - end

test:
#	prove
