# Go parameters
goCmd=go
version=$(shell cat VERSION)
goBuild=$(goCmd) build -ldflags "-X jiacrontab/pkg/version.Binary=$(version)"
goClean=$(goCmd) clean
goTest=$(goCmd) test
goGet=$(goCmd) get
sourceAdmDir=./app/jiacrontab_admin
sourceNodeDir=./app/jiacrontabd
binAdm=$(sourceAdmDir)/jiacrontab_admin
binNode=$(sourceNodeDir)/jiacrontabd


buildDir=./build
buildAdmDir=$(buildDir)/jiacrontab/jiacrontab_admin
buildNodeDir=$(buildDir)/jiacrontab/jiacrontabd

admCfg=$(sourceAdmDir)/jiacrontab_admin.ini
nodeCfg=$(sourceNodeDir)/jiacrontabd.ini
staticDir=./jiacrontab_admin/static/build
staticSourceDir=./jiacrontab_admin/static
workDir=$(shell pwd)


.PHONY: all build test clean build-linux build-windows
all: test build
build:
	$(call checkStatic)
	$(call init)
	$(goBuild) -o $(binAdm) -v $(sourceAdmDir)
	$(goBuild) -o $(binNode) -v $(sourceNodeDir)
	mv $(binAdm) $(buildAdmDir)
	mv $(binNode) $(buildNodeDir)
build2:
	$(call init)
	$(goBuild) -o $(binAdm) -v $(sourceAdmDir)
	$(goBuild) -o $(binNode) -v $(sourceNodeDir)
	mv $(binAdm) $(buildAdmDir)
	mv $(binNode) $(buildNodeDir)
docker:
	docker build \
		-t iwannay/jiacrontab:$(version) \
		-f Dockerfile \
		.
test:
	$(goTest) -v -race -coverprofile=coverage.txt -covermode=atomic $(sourceAdmDir)
	$(goTest) -v -race -coverprofile=coverage.txt -covermode=atomic $(sourceNodeDir)
clean:
	rm -f $(binAdm)
	rm -f $(binNode)
	rm -rf $(buildDir)
	

# Cross compilation
build-linux:
	$(call checkStatic)
	$(call init)
	GOOS=linux GOARCH=amd64 $(goBuild) -o $(binAdm) -v $(sourceAdmDir)
	GOOS=linux GOARCH=amd64 $(goBuild) -o $(binNode) -v $(sourceNodeDir)
	mv $(binAdm) $(buildAdmDir)
	mv $(binNode) $(buildNodeDir)

build-windows:
	$(call checkStatic)
	$(call init)
	CGO_ENABLED=1 GOOS=windows GOARCH=amd64 CC="x86_64-w64-mingw32-gcc -fno-stack-protector -D_FORTIFY_SOURCE=0 -lssp" $(goBuild) -o $(binAdm).exe -v $(sourceAdmDir)
	CGO_ENABLED=1 GOOS=windows GOARCH=amd64 CC="x86_64-w64-mingw32-gcc -fno-stack-protector -D_FORTIFY_SOURCE=0 -lssp" $(goBuild) -o $(binNode).exe -v $(sourceNodeDir)

	mv $(binAdm).exe $(buildAdmDir)
	mv $(binNode).exe $(buildNodeDir)

define checkStatic
@if [ "$(assets)" = ""  ]; then  echo "no assets, see https://github.com/jiacrontab/jiacrontab-frontend"; exit -1;else echo "build release"; fi
	go-bindata -pkg admin -prefix $(assets) -o jiacrontab_admin/bindata_gzip.go -fs $(assets)/...
endef

define init
	rm -rf $(buildDir)
	mkdir $(buildDir)
	mkdir -p $(buildAdmDir)
	mkdir -p $(buildNodeDir)
	cp $(admCfg) $(buildAdmDir)
	cp $(nodeCfg) $(buildNodeDir)
endef