diff --git a/Makefile b/Makefile index 861ff92..f16bf9b 100644 --- a/Makefile +++ b/Makefile @@ -1,15 +1,23 @@ -DEV_DEPS = github.com/kardianos/govendor \ -github.com/mitchellh/gox +DEV_DEPS = github.com/kardianos/govendor -BINNAME = casecmp -BINARY = bin/${BINNAME} -DOCKERREPO = jimeh/casecmp -BINDIR = $(shell dirname ${BINARY}) -SOURCES = $(shell find . -name '*.go' -o -name 'VERSION') +NAME = casecmp +BINARY = bin/${NAME} +SOURCES = $(shell find . -name '*.go' -o -name 'VERSION' -o -name 'README.md') VERSION = $(shell cat VERSION) -OSARCH = "darwin/386 darwin/amd64 linux/386 linux/amd64 linux/arm " \ - "windows/386 windows/amd64" -RELEASEDIR = releases +RELEASE_DIR = releases +RELEASE_TARGETS = \ + $(RELEASE_DIR)/$(NAME)-$(VERSION)_darwin_386.tar.gz \ + $(RELEASE_DIR)/$(NAME)-$(VERSION)_darwin_amd64.tar.gz \ + $(RELEASE_DIR)/$(NAME)-$(VERSION)_freebsd_386.tar.gz \ + $(RELEASE_DIR)/$(NAME)-$(VERSION)_freebsd_amd64.tar.gz \ + $(RELEASE_DIR)/$(NAME)-$(VERSION)_freebsd_arm.tar.gz \ + $(RELEASE_DIR)/$(NAME)-$(VERSION)_linux_386.tar.gz \ + $(RELEASE_DIR)/$(NAME)-$(VERSION)_linux_amd64.tar.gz \ + $(RELEASE_DIR)/$(NAME)-$(VERSION)_linux_arm.tar.gz \ + $(RELEASE_DIR)/$(NAME)-$(VERSION)_windows_386.zip \ + $(RELEASE_DIR)/$(NAME)-$(VERSION)_windows_amd64.zip +RELEASE_ASSETS = \ + README.md $(BINARY): $(SOURCES) go build -o ${BINARY} -ldflags "-X main.Version=${VERSION}" @@ -19,8 +27,9 @@ build: $(BINARY) .PHONY: clean clean: + $(eval BIN_DIR := $(shell dirname ${BINARY})) if [ -f ${BINARY} ]; then rm ${BINARY}; fi; \ - if [ -d ${BINDIR} ]; then rmdir ${BINDIR}; fi + if [ -d ${BIN_DIR} ]; then rmdir ${BIN_DIR}; fi .PHONY: run run: $(BINARY) @@ -38,21 +47,33 @@ dev-deps: update-dev-deps: @$(foreach DEP,$(DEV_DEPS),go get -u $(DEP);) -.PHONY: release-build -release-build: deps - gox -output "${RELEASEDIR}/${BINNAME}_${VERSION}_{{.OS}}_{{.Arch}}" \ - -osarch=${OSARCH} \ - -ldflags "-X main.Version=${VERSION}" - -.SILENT: release .PHONY: release -release: release-build - $(eval BINS := $(shell cd ${RELEASEDIR} && find . \ - -name "${BINNAME}_${VERSION}_*" -not -name "*.tar.gz")) - cd $(RELEASEDIR); \ - $(foreach BIN,$(BINS),tar -cvzf $(BIN).tar.gz $(BIN) && rm $(BIN);) +release: $(RELEASE_TARGETS) + +$(RELEASE_DIR)/$(NAME)-$(VERSION)_%.tar.gz: $(SOURCES) + $(eval OS := $(word 1, $(subst _, ,$*))) + $(eval ARCH := $(word 2, $(subst _, ,$*))) + $(eval TARGET := $(NAME)-$(VERSION)_$*) + mkdir -p "$(TARGET)" \ + && env GOOS=$(OS) GOARCH=$(ARCH) CGO_ENABLED=0 go build -a \ + -o "$(TARGET)/$(NAME)" -ldflags "-X main.Version=$(VERSION)" \ + && cp $(RELEASE_ASSETS) "$(TARGET)/" \ + && tar -cvzf "$@" "$(TARGET)" \ + && cd "$(TARGET)" && rm "$(NAME)" $(RELEASE_ASSETS) && cd .. \ + && rmdir "$(TARGET)" + +$(RELEASE_DIR)/$(NAME)-$(VERSION)_windows_%.zip: $(SOURCES) + $(eval TARGET := $(NAME)-$(VERSION)_windows_$*) + mkdir -p "$(TARGET)" \ + && env GOOS=windows GOARCH=$* CGO_ENABLED=0 go build -a \ + -o "$(TARGET)/$(NAME).exe" -ldflags "-X main.Version=$(VERSION)" \ + && cp $(RELEASE_ASSETS) "$(TARGET)/" \ + && zip -r "$@" "$(TARGET)" \ + && cd "$(TARGET)" && rm "$(NAME).exe" $(RELEASE_ASSETS) && cd .. \ + && rmdir "$(TARGET)" .PHONY: docker docker: clean deps - docker build -t "${DOCKERREPO}:latest" . \ - && docker tag "${DOCKERREPO}:latest" "${DOCKERREPO}:${VERSION}" + $(eval REPO := $(shell whoami)/$(NAME)) + docker build -t "$(REPO):latest" . \ + && docker tag "$(REPO):latest" "$(REPO):$(VERSION)"