SHELL=/bin/bash
CWD=$(shell pwd)
OLDGOPATH=${GOPATH}
NEWGOPATH:=${CWD}:${OLDGOPATH}
export GOPATH=$(NEWGOPATH)
PATH := $(PATH):$(GOPATH)/bin


build: clean config
	go build  -o bin/esm

tar: build
	tar cfz bin/esm.tar.gz bin/esm

cross-build-all-platform: clean config
	go test
	GOOS=windows GOARCH=amd64     go build -o bin/windows64/esm.exe
	GOOS=windows GOARCH=386       go build -o bin/windows32/esm.exe
	GOOS=darwin  GOARCH=amd64     go build -o bin/darwin64/esm
	GOOS=darwin  GOARCH=386       go build -o bin/darwin32/esm
	GOOS=linux  GOARCH=amd64      go build -o bin/linux64/esm
	GOOS=linux  GOARCH=386        go build -o bin/linux32/esm
	GOOS=linux  GOARCH=arm        go build -o bin/linux_arm/esm
	GOOS=freebsd  GOARCH=amd64    go build -o bin/freebsd64/esm
	GOOS=freebsd  GOARCH=386      go build -o bin/freebsd32/esm
	GOOS=netbsd  GOARCH=amd64     go build -o bin/netbsd64/esm
	GOOS=netbsd  GOARCH=386       go build -o bin/netbsd32/esm
	GOOS=openbsd  GOARCH=amd64    go build -o bin/openbsd64/esm
	GOOS=openbsd  GOARCH=386      go build -o bin/openbsd32/esm


gox-cross-build-all-platform: clean config
	go get github.com/mitchellh/gox
	go test
	gox -output="bin/esm_{{.OS}}_{{.Arch}}"

cross-gox-build-all-platform: clean config
	go get github.com/mitchellh/gox
	go test
	gox -os=windows -arch=amd64  -output="bin/windows64/esm"
	gox -os=windows -arch=386       -output=bin/windows32/esm
	gox -os=darwin  -arch=amd64     -output=bin/darwin64/esm
	gox -os=darwin  -arch=386       -output=bin/darwin32/esm
	gox -os=linux  -arch=amd64      -output=bin/linux64/esm
	gox -os=linux  -arch=386        -output=bin/linux32/esm
	gox -os=linux  -arch=arm        -output=bin/linux_arm/esm
	gox -os=freebsd  -arch=amd64    -output=bin/freebsd64/esm
	gox -os=freebsd  -arch=386      -output=bin/freebsd32/esm
	gox -os=netbsd  -arch=amd64     -output=bin/netbsd64/esm
	gox -os=netbsd  -arch=386       -output=bin/netbsd32/esm
	gox -os=openbsd  -arch=amd64    -output=bin/openbsd64/esm
	gox -os=openbsd  -arch=386      -output=bin/openbsd32/esm

cross-build: clean config
	go test
	GOOS=windows GOARCH=amd64     go build -o bin/windows64/esm.exe
	GOOS=darwin  GOARCH=amd64     go build -o bin/darwin64/esm
	GOOS=linux  GOARCH=amd64      go build -o bin/linux64/esm

all: clean config cross-build

all-platform: clean config cross-build-all-platform

format:
	gofmt -s -w -tabs=false -tabwidth=4 main.go

clean:
	rm -rif bin
	mkdir bin

config:
	@echo "get Dependencies"
	go env
	go get gopkg.in/cheggaaa/pb.v1
	go get github.com/jessevdk/go-flags
	go get github.com/olekukonko/ts
	go get github.com/cihub/seelog
	go get github.com/parnurzeal/gorequest

dist: cross-build package

dist-all: all package

dist-all-platform: all-platform package-all-platform

package:
	@echo "Packaging"
	tar cfz 	 bin/windows64.tar.gz    bin/windows64/esm.exe
	tar cfz 	 bin/darwin64.tar.gz      bin/darwin64/esm
	tar cfz 	 bin/linux64.tar.gz      bin/linux64/esm

package-all-platform:
	@echo "Packaging"
	tar cfz 	 bin/windows64.tar.gz    bin/windows64/esm.exe
	tar cfz 	 bin/windows32.tar.gz    bin/windows32/esm.exe
	tar cfz 	 bin/darwin64.tar.gz      bin/darwin64/esm
	tar cfz 	 bin/darwin32.tar.gz      bin/darwin32/esm
	tar cfz 	 bin/linux64.tar.gz      bin/linux64/esm
	tar cfz 	 bin/linux32.tar.gz      bin/linux32/esm
	tar cfz 	 bin/linux_arm.tar.gz     bin/linux_arm/esm
	tar cfz 	 bin/freebsd64.tar.gz    bin/freebsd64/esm
	tar cfz 	 bin/freebsd32.tar.gz    bin/freebsd32/esm
	tar cfz 	 bin/netbsd64.tar.gz     bin/netbsd64/esm
	tar cfz 	 bin/netbsd32.tar.gz     bin/netbsd32/esm
	tar cfz 	 bin/openbsd64.tar.gz     bin/openbsd64/esm
	tar cfz 	 bin/openbsd32.tar.gz     bin/openbsd32/esm


cross-compile:
	@echo "Prepare Cross Compiling"
	cd $(GOROOT)/src && GOOS=windows GOARCH=amd64 ./make.bash --no-clean
	cd $(GOROOT)/src && GOOS=darwin  GOARCH=amd64 ./make.bash --no-clean 2> /dev/null 1> /dev/null
	cd $(GOROOT)/src && GOOS=linux  GOARCH=amd64 ./make.bash --no-clean 2> /dev/null 1> /dev/null

	cd $(CWD)


