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+
117CMD_PATH := cmd/git-remote-https+iap
218CMD_NAME := git-remote-https+iap
319BUILD_TARGETS := \
@@ -11,34 +27,51 @@ RELEASE_PATH := $(DIST_PATH)releases/
1127
1228version := $(shell git describe --match "v* .* " --abbrev=7 --tags --dirty)
1329build_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
1832all : 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
2849build : $(BUILDS )
2950
3051RELEASE_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
3972version :
4073 @echo " $( version) "
4174
4275.PHONY : clean
4376clean :
44- rm -rf $(DIST_PATH )
77+ - $( RM ) $(DIST_PATH )
0 commit comments