mirror of
https://github.com/jimeh/casecmp.git
synced 2026-02-19 10:26:40 +00:00
Update Makefile for easier building of cross-platform packages
This commit is contained in:
71
Makefile
71
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)"
|
||||
|
||||
Reference in New Issue
Block a user