#!/usr/bin/env gmake -f # Делаем бинарник с минимальным количеством всякой дополнительной метаинформации BUILDOPTS=-ldflags="-s -w" -a -gcflags=all=-l -trimpath FILELIST=config.go collection.go types.go globals.go lib.go event_parser.go commands.go redis.go settings-db-util.go \ main.go BINARY=aleesa-jabber-go # На windows имя бинарника может зависеть не только от платформы, но и от выранной цели, для linux-а суффикс .exe # не нужен ifeq ($(OS),Windows_NT) ifeq ($(strip $(GOOS)),) BINARY=aleesa-jabber-go.exe endif endif # Если мы собраем бинарь под windows не на windows, то надо сделать бинарь с суффиксом .exe ifeq ($(strip $(GOOS)),windows) BINARY=aleesa-jabber-go.exe endif # Явно определяем символ новой строки, чтобы избежать неоднозначности на windows define IFS endef # Используем классические таргеты, где первый встречаемый является таргетом по-умолчанию all: clean build build: # Делаем из config.in файл config.go, путём замены v4 на содержимое файла version.txt # nlinit=`echo 'IFS="'; echo '"'`; eval "$$nlinit"; $(file > config.go,$(subst v4,$(file < version.txt),$(file < config.in))) # GNU Make видимо может вносить какие-то невидимые глазу коррективы в файл, когда читает его в переменную, а затем пишет # его из этой переменной и поэтому полученный файл надо прогнать через gofmt, чтобы golagci-lint не выёбывался и не # падал с неизвестной ошибкой gofmt -s -w config.go # Ну и дальше просто билдим бинарник средствами гошки ifeq ($(OS),Windows_NT) # вариант с powershell на windows ifeq ($(SHELL),sh.exe) SET CGO_ENABLED=0 go build ${BUILDOPTS} -o ${BINARY} ${FILELIST} else # вариант с jetbrains golang на windows CGO_ENABLED=0 go build ${BUILDOPTS} -o ${BINARY} ${FILELIST} endif # вариант с bash/git (windows) и bash (linux) else CGO_ENABLED=0 go build ${BUILDOPTS} -o ${BINARY} ${FILELIST} endif # Удаляем автогенерённый config.go и бинарник clean: ifeq ($(OS),Windows_NT) # вариант с jetbrains golang на windows, powershell на windows ifeq ($(SHELL),sh.exe) if exist config.go del /F /S /Q config.go >nul # git/bash на windows else $(RM) config.go endif # bash на linux else $(RM) config.go endif # удаляем бинарник средствами go go clean # Служебный таргет, для целей разработки. Обновляет завендоренные либы, брутальным образом. upgrade: ifeq ($(OS),Windows_NT) # вариант с jetbrains golang на windows или powershell на windows ifeq ($(SHELL),sh.exe) if exist vendor del /F /S /Q vendor >nul # вариант с git/bash на windows else $(RM) -r vendor endif # вариант с bash на linux else $(RM) -r vendor endif go get -d -u -t ./... go mod tidy go mod vendor # vim: set ft=make noet ai ts=4 sw=4 sts=4: