Skip to content

Commit 18a5a86

Browse files
committed
Enable building and releasing on Windows
1 parent 096d06e commit 18a5a86

File tree

1 file changed

+49
-16
lines changed

1 file changed

+49
-16
lines changed

Makefile

Lines changed: 49 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,19 @@
1+
.SECONDEXPANSION:
2+
3+
ifeq ($(OS),Windows_NT)
4+
SHELL := powershell.exe
5+
.SHELLFLAGS := -NoProfile -Command
6+
MKDIR := $$null = New-Item -Type Directory
7+
COPY := Copy-Item -Force
8+
MOVE := Move-Item -Force
9+
RM := Remove-Item -Recurse -Force
10+
else
11+
MKDIR := mkdir -p
12+
COPY := cp -f
13+
MOVE := mv -f
14+
RM := rm -rf
15+
endif
16+
117
CMD_PATH := cmd/git-remote-https+iap
218
CMD_NAME := git-remote-https+iap
319
BUILD_TARGETS := \
@@ -11,34 +27,51 @@ RELEASE_PATH := $(DIST_PATH)releases/
1127

1228
version := $(shell git describe --match "v*.*" --abbrev=7 --tags --dirty)
1329
build_args := -ldflags "-X main.version=${version}"
14-
tar_xform_arg := $(shell tar --version | grep -q 'GNU tar' && echo '--xform' || echo '-s')
15-
tar_xform_cmd := $(shell tar --version | grep -q 'GNU tar' && echo 's')
1630

1731
.PHONY: all
1832
all: build
1933

20-
$(BIN_PATH) $(RELEASE_PATH):
21-
mkdir -p $@
34+
$(RELEASE_PATH) $(addprefix $(BIN_PATH), $(BUILD_TARGETS)):
35+
$(MKDIR) $@
36+
37+
$(BIN_PATH)%/$(CMD_NAME): export GOOS = $(word 1, $(subst -, ,$*))
38+
$(BIN_PATH)%/$(CMD_NAME): export GOARCH = $(word 2, $(subst -, ,$*))
39+
$(BIN_PATH)%/$(CMD_NAME): export CGO_ENABLED = 0
40+
$(BIN_PATH)%/$(CMD_NAME): $(wildcard $(CMD_PATH)/*.go internal/*/*.go) | $(BIN_PATH)%
41+
go build $(build_args) -o $@ $<
42+
43+
$(BIN_PATH)%/$(CMD_NAME).exe: $(BIN_PATH)%/$(CMD_NAME)
44+
$(MOVE) $< $@
45+
46+
BUILDS := $(foreach target, $(BUILD_TARGETS), $(BIN_PATH)$(target)/$(CMD_NAME)$(if $(filter windows%,$(target)),.exe))
2247

23-
BUILDS := $(foreach target, $(BUILD_TARGETS), $(BIN_PATH)$(CMD_NAME)-$(target))
24-
$(BUILDS): OS = $(word 1, $(subst -, ,$(subst $(CMD_NAME)-,,$(notdir $@))))
25-
$(BUILDS): ARCH = $(word 2, $(subst -, ,$(subst $(CMD_NAME)-,,$(notdir $@))))
26-
$(BUILDS): $(BIN_PATH)
27-
env CGO_ENABLED=0 GOOS=$(OS) GOARCH=$(ARCH) go build ${build_args} -o $(BIN_PATH)${CMD_NAME}-$(OS)-$(ARCH) ${CMD_PATH}/*.go
48+
.PHONY: build
2849
build: $(BUILDS)
2950

3051
RELEASE_INCLUDES = README.md
31-
RELEASE_TARGETS := $(foreach target, $(BUILDS), $(RELEASE_PATH)$(notdir $(target))-$(version).tar.gz)
32-
$(RELEASE_TARGETS): $(RELEASE_PATH)%-$(version).tar.gz: $(BIN_PATH)% $(RELEASE_INCLUDES)
33-
mkdir -p $(RELEASE_PATH)
34-
tar $(tar_xform_arg) '$(tar_xform_cmd)!$(BIN_PATH)$(CMD_NAME).*!$(CMD_NAME)!' -czf $@ $^
35-
cd $(RELEASE_PATH) && shasum -a 256 $(notdir $@) >$(notdir $@).sha256
36-
release: $(RELEASE_TARGETS)
52+
RELEASE_TARGETS := $(foreach target, $(BUILD_TARGETS), $(RELEASE_PATH)$(CMD_NAME)-$(target)-$(version).tar.gz)
53+
54+
$(RELEASE_PATH)$(CMD_NAME)-%-$(version).tar.gz: $(BIN_PATH)%/$(CMD_NAME).tar.gz | $(RELEASE_PATH)
55+
$(MOVE) $< $@
56+
57+
$(BIN_PATH)%/$(CMD_NAME).tar.gz: $(BIN_PATH)%/$(CMD_NAME)$$(if $$(filter windows%,$$*),.exe) $(RELEASE_INCLUDES)
58+
$(COPY) $(filter-out $<,$^) $(@D)
59+
cd $(@D); tar czf $(@F) $(^F)
60+
61+
%.sha256: %
62+
ifeq ($(OS),Windows_NT)
63+
$$env:PSModulePath = "$$PSHOME\\Modules"; "$$((Get-FileHash -Algorithm SHA256 $<).Hash.ToLower()) $(<F)" > $@
64+
else
65+
cd $(@D) && shasum -a 256 $(<F) > $(@F)
66+
endif
67+
68+
.PHONY: release
69+
release: $(RELEASE_TARGETS) $(addsuffix .sha256, $(RELEASE_TARGETS))
3770

3871
.PHONY: version
3972
version:
4073
@echo "$(version)"
4174

4275
.PHONY: clean
4376
clean:
44-
rm -rf $(DIST_PATH)
77+
-$(RM) $(DIST_PATH)

0 commit comments

Comments
 (0)