diff --git a/Makefile b/Makefile index 9388694..369ada9 100644 --- a/Makefile +++ b/Makefile @@ -1,23 +1,147 @@ #!/usr/bin/env gmake -f -BUILDOPTS=-ldflags='-s -w' -a -gcflags=all=-l -trimpath +GOOPTS=CGO_ENABLED=0 +BUILDOPTS=-ldflags="-s -w" -a -gcflags=all=-l -trimpath -buildvcs=false + +MYNAME=aleesa-webapp-go +BINARY=${MYNAME} +UNIX_BINARY=${MYNAME} +WINDOWS_BINARY=${MYNAME}.exe + +MYNAME2=flickr_init +BINARY2=${MYNAME2} +UNIX_BINARY2=${MYNAME2} +WINDOWS_BINARY2=${MYNAME2}.exe + +MYNAME3=flickr_populate +BINARY3=${MYNAME3} +UNIX_BINARY3=${MYNAME3} +WINDOWS_BINARY3=${MYNAME3}.exe + +MYNAME4=flickr_test +BINARY4=${MYNAME4} +UNIX_BINARY4=${MYNAME4} +WINDOWS_BINARY4=${MYNAME4}.exe + +RMCMD=rm -rf + +# На windows имя бинарника может зависеть не только от платформы, но и от выбранной цели, для linux-а суффикс .exe +# не нужен +ifeq ($(OS),Windows_NT) +ifdef GOOS +ifeq ($(GOOS),windows) +BINARY=${WINDOWS_BINARY} +BINARY2=${WINDOWS_BINARY2} +BINARY3=${WINDOWS_BINARY3} +BINARY4=${WINDOWS_BINARY4} +else # not ifeq ($(GOOS),windows) +BINARY=${MYNAME} +BINARY2=${MYNAME2} +BINARY3=${MYNAME3} +BINARY4=${MYNAME4} +endif # ifeq ($(GOOS),windows) +else # not ifdef GOOS +BINARY=${WINDOWS_BINARY} +BINARY2=${WINDOWS_BINARY} +BINARY3=${WINDOWS_BINARY} +BINARY4=${WINDOWS_BINARY} +endif # ifdef GOOS +ifeq ($(SHELL), sh.exe) +RMCMD=DEL /Q /F +endif +endif + +# Явно определяем символ новой строки, чтобы избежать неоднозначности на windows +define IFS + +endef + all: clean build + build: - CGO_ENABLED=0 go build ${BUILDOPTS} -o aleesa-webapp-go ./cmd/aleesa-webapp-go +ifeq ($(OS),Windows_NT) +# Looks like on windows gnu make explicitly set SHELL to sh.exe, if it was not set. +ifeq ($(SHELL), sh.exe) +# # Vanilla cmd.exe / powershell. + SET "CGO_ENABLED=0" + go build ${BUILDOPTS} -o ${BINARY} ./cmd/${MYNAME} +else ifeq (,$(findstring(Git/usr/bin/sh.exe, $(SHELL)))) +# # git-bash + CGO_ENABLED=0 go build ${BUILDOPTS} -o ${BINARY} ./cmd/${MYNAME} +else # not ifeq (,$(findstring(Git/usr/bin/sh.exe, $(SHELL)))) +# # Some other shell. +# # TODO: handle it. + $(info "-- Dunno how to handle this shell: ${SHELL}") +endif # ifeq (,$(findstring(Git/usr/bin/sh.exe, $(SHELL)))) +else # not ($(OS),Windows_NT) + CGO_ENABLED=0 go build ${BUILDOPTS} -o ${BINARY} ./cmd/${MYNAME} +endif # ifeq ($(OS),Windows_NT) buildutils: - CGO_ENABLED=0 go build ${BUILDOPTS} -o flickr_init ./cmd/flickr_init - CGO_ENABLED=0 go build ${BUILDOPTS} -o flickr_populate ./cmd/flickr_populate - CGO_ENABLED=0 go build ${BUILDOPTS} -o flickr_test ./cmd/flickr_test +ifeq ($(OS),Windows_NT) +# Looks like on windows gnu make explicitly set SHELL to sh.exe, if it was not set. +ifeq ($(SHELL), sh.exe) +# # Vanilla cmd.exe / powershell. + SET "CGO_ENABLED=0" + go build ${BUILDOPTS} -o ${BINARY2} ./cmd/${MYNAME2} + go build ${BUILDOPTS} -o ${BINARY3} ./cmd/${MYNAME3} + go build ${BUILDOPTS} -o ${BINARY4} ./cmd/${MYNAME4} +else ifeq (,$(findstring(Git/usr/bin/sh.exe, $(SHELL)))) +# # git-bash + CGO_ENABLED=0 go build ${BUILDOPTS} -o ${BINARY2} ./cmd/${MYNAME2} + CGO_ENABLED=0 go build ${BUILDOPTS} -o ${BINARY3} ./cmd/${MYNAME3} + CGO_ENABLED=0 go build ${BUILDOPTS} -o ${BINARY4} ./cmd/${MYNAME4} +else # not ifeq (,$(findstring(Git/usr/bin/sh.exe, $(SHELL)))) +# # Some other shell. +# # TODO: handle it. + $(info "-- Dunno how to handle this shell: ${SHELL}") +endif # ifeq (,$(findstring(Git/usr/bin/sh.exe, $(SHELL)))) +else # not ($(OS),Windows_NT) + CGO_ENABLED=0 go build ${BUILDOPTS} -o ${BINARY2} ./cmd/${MYNAME2} + CGO_ENABLED=0 go build ${BUILDOPTS} -o ${BINARY3} ./cmd/${MYNAME3} + CGO_ENABLED=0 go build ${BUILDOPTS} -o ${BINARY4} ./cmd/${MYNAME4} +endif # ifeq ($(OS),Windows_NT) + clean: - $(RM) -rf aleesa-webapp-go flickr_init flickr_populate flickr_test +ifeq ($(OS),Windows_NT) +ifeq ($(SHELL),sh.exe) +# # Vanilla cmd.exe / powershell. + if exist ${WINDOWS_BINARY} ${RMCMD} ${WINDOWS_BINARY} + if exist ${UNIX_BINARY} ${RMCMD} ${UNIX_BINARY} + + if exist ${WINDOWS_BINARY2} ${RMCMD} ${WINDOWS_BINARY2} + if exist ${UNIX_BINARY2} ${RMCMD} ${UNIX_BINARY2} + + if exist ${WINDOWS_BINARY3} ${RMCMD} ${WINDOWS_BINARY3} + if exist ${UNIX_BINARY3} ${RMCMD} ${UNIX_BINARY3} + + if exist ${WINDOWS_BINARY4} ${RMCMD} ${WINDOWS_BINARY4} + if exist ${UNIX_BINARY4} ${RMCMD} ${UNIX_BINARY4} +else # not ifeq ($(SHELL),sh.exe) + ${RMCMD} ./${WINDOWS_BINARY} + ${RMCMD} ./${UNIX_BINARY} + + ${RMCMD} ./${WINDOWS_BINARY2} + ${RMCMD} ./${UNIX_BINARY2} + + ${RMCMD} ./${WINDOWS_BINARY3} + ${RMCMD} ./${UNIX_BINARY3} + + ${RMCMD} ./${WINDOWS_BINARY4} + ${RMCMD} ./${UNIX_BINARY4} +endif # ifeq ($(SHELL),sh.exe) +else # not ifeq ($(OS),Windows_NT) + ${RMCMD} ./${BINARY} + ${RMCMD} ./${BINARY2} + ${RMCMD} ./${BINARY3} + ${RMCMD} ./${BINARY4} +endif upgrade: - $(RM) -rf vendor - go get -d -u -t ./... + go get -u ./... go mod tidy go mod vendor