|
| 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 | + |
1 | 17 | CMD_PATH := cmd/git-remote-https+iap |
2 | 18 | CMD_NAME := git-remote-https+iap |
3 | 19 | BUILD_TARGETS := \ |
4 | 20 | darwin-amd64 \ |
5 | | - linux-amd64 |
| 21 | + linux-amd64 \ |
| 22 | + windows-amd64 |
6 | 23 |
|
7 | 24 | DIST_PATH := dist/ |
8 | 25 | BIN_PATH := $(DIST_PATH)bin/ |
9 | 26 | RELEASE_PATH := $(DIST_PATH)releases/ |
10 | 27 |
|
11 | 28 | version := $(shell git describe --match "v*.*" --abbrev=7 --tags --dirty) |
12 | 29 | build_args := -ldflags "-X main.version=${version}" |
13 | | -tar_xform_arg := $(shell tar --version | grep -q 'GNU tar' && echo '--xform' || echo '-s') |
14 | | -tar_xform_cmd := $(shell tar --version | grep -q 'GNU tar' && echo 's') |
15 | 30 |
|
16 | 31 | .PHONY: all |
17 | 32 | all: build |
18 | 33 |
|
19 | | -$(BIN_PATH) $(RELEASE_PATH): |
20 | | - 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)) |
21 | 47 |
|
22 | | -BUILDS := $(foreach target, $(BUILD_TARGETS), $(BIN_PATH)$(CMD_NAME)-$(target)) |
23 | | -$(BUILDS): OS = $(word 1, $(subst -, ,$(subst $(CMD_NAME)-,,$(notdir $@)))) |
24 | | -$(BUILDS): ARCH = $(word 2, $(subst -, ,$(subst $(CMD_NAME)-,,$(notdir $@)))) |
25 | | -$(BUILDS): $(BIN_PATH) |
26 | | - 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 |
27 | 49 | build: $(BUILDS) |
28 | 50 |
|
29 | 51 | RELEASE_INCLUDES = README.md |
30 | | -RELEASE_TARGETS := $(foreach target, $(BUILDS), $(RELEASE_PATH)$(notdir $(target))-$(version).tar.gz) |
31 | | -$(RELEASE_TARGETS): $(RELEASE_PATH)%-$(version).tar.gz: $(BIN_PATH)% $(RELEASE_INCLUDES) |
32 | | - mkdir -p $(RELEASE_PATH) |
33 | | - tar $(tar_xform_arg) '$(tar_xform_cmd)!$(BIN_PATH)$(CMD_NAME).*!$(CMD_NAME)!' -czf $@ $^ |
34 | | - cd $(RELEASE_PATH) && shasum -a 256 $(notdir $@) >$(notdir $@).sha256 |
35 | | -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)) |
36 | 70 |
|
37 | 71 | .PHONY: version |
38 | 72 | version: |
39 | 73 | @echo "$(version)" |
40 | 74 |
|
41 | 75 | .PHONY: clean |
42 | 76 | clean: |
43 | | - rm -rf $(DIST_PATH) |
| 77 | + -$(RM) $(DIST_PATH) |
0 commit comments