.ONESHELL: PACKAGE=zabbix-agent2-plugin-postgresql TOPDIR := $(CURDIR) ifeq ($(OS),Windows_NT) GOOS := windows SHELL := cmd TOPDIR := $(subst /,\,$(CURDIR)) PACKAGE:=$(PACKAGE).exe WINDRES = windres.exe ifneq ("$(shell findstr ZABBIX_RC_NUM $(TOPDIR)\windres\resource.h)","") ifeq ("$(WINDRES_FLAGS)","") WINDRES_FLAGS := \ -D ZABBIX_LICENSE_YEARS='\"$(word 4,$(shell findstr Copyright $(TOPDIR)\main.go | findstr 2001-20))\"' \ -D ZABBIX_VERSION_MAJOR=$(lastword $(shell findstr VERSION_MAJOR $(TOPDIR)\main.go | findstr =)) \ -D ZABBIX_VERSION_MINOR=$(lastword $(shell findstr VERSION_MINOR $(TOPDIR)\main.go | findstr =)) \ -D ZABBIX_VERSION_PATCH=$(lastword $(shell findstr VERSION_PATCH $(TOPDIR)\main.go | findstr =)) \ -D ZABBIX_VERSION_RC='\"$(lastword $(shell findstr VERSION_RC $(TOPDIR)\main.go | findstr =))\"' \ -D ZABBIX_VERSION_RC_NUM=1000 endif endif RFLAGS := $(RFLAGS) --input-format=rc -O coff ifeq ("$(ARCH)", "") ifdef PROCESSOR_ARCHITECTURE ARCH := $(PROCESSOR_ARCHITECTURE) else ARCH := x86 endif endif ifeq ($(ARCH), x86) RFLAGS := $(RFLAGS) --target=pe-i386 else ifeq ($(ARCH), AMD64) RFLAGS := $(RFLAGS) --target=pe-x86-64 else ifeq (,$(findstring ARM,$(ARCH))) ifneq ($(ARCH), $(PROCESSOR_ARCHITECTURE)) $(error Unsupported CPU architecture: $(ARCH)) endif endif endif ifeq ($(ARCH), x86) GOARCH := 386 else ifeq ($(ARCH), AMD64) GOARCH := amd64 else ifeq ($(ARCH), ARM) GOARCH := arm else ifeq ($(ARCH), ARM64) GOARCH := arm64 endif ifndef GOOS GOOS := $(shell go env GOOS) endif ifndef GOARCH GOARCH := $(shell go env GOARCH) endif DISTFILES = \ ChangeLog \ go.mod \ go.sum \ LICENSE \ main.go \ Makefile \ postgresql.conf \ README.md DIST_SUBDIRS = \ plugin \ windres \ vendor .build_rc: ifneq ("$(WINDRES)","") $(WINDRES) $(TOPDIR)\windres\resource.rc $(WINDRES_FLAGS) $(RFLAGS) \ -D VER_FILEDESCRIPTION_STR='\"$(PACKAGE)\"' \ -D _WINDOWS -o "$(TOPDIR)\$(PACKAGE).syso" endif build: .build_rc ifeq ($(OS),Windows_NT) set GOOS=$(GOOS) set GOARCH=$(GOARCH) go build -o "$(TOPDIR)/$(PACKAGE)" else GOOS="$(GOOS)" GOARCH="$(GOARCH)" go build -o "$(TOPDIR)/$(PACKAGE)" endif clean: ifeq ($(OS),Windows_NT) if exist "$(TOPDIR)\vendor" rmdir /S /Q "$(TOPDIR)\vendor" del /F "$(TOPDIR)\$(PACKAGE)*" else rm -rf "$(TOPDIR)/vendor" rm -rf "$(TOPDIR)/$(PACKAGE)"* endif go clean "$(TOPDIR)/..." check: go test -v -tags postgresql_tests "$(TOPDIR)/..." style: golangci-lint run --new-from-rev=$(NEW_FROM_REV) "$(TOPDIR)/..." format: go fmt "$(TOPDIR)/..." dist: ifneq ($(OS),Windows_NT) cd $(TOPDIR); \ go mod vendor; \ major_verison=$(lastword $(shell grep 'PLUGIN_VERSION_MAJOR =' ./main.go)); \ minor_verison=$(lastword $(shell grep 'PLUGIN_VERSION_MINOR =' ./main.go)); \ patch_verison=$(lastword $(shell grep 'PLUGIN_VERSION_PATCH =' ./main.go)); \ alphatag=$(lastword $(shell grep 'PLUGIN_VERSION_RC =' ./main.go)); \ lic_years=$(word 4, $(shell grep ' Copyright (C) 2001-' ./main.go)); \ distdir="$(PACKAGE)-$${major_verison}.$${minor_verison}.$${patch_verison}$${alphatag}"; \ dist_archive="$${distdir}.tar.gz"; \ mkdir -p ./$${distdir}; \ for distfile in '$(DISTFILES)'; do \ cp -fp ./$${distfile} ./$${distdir}/; \ done; \ for subdir in '$(DIST_SUBDIRS)'; do \ cp -fpR ./$${subdir} ./$${distdir}; \ done; \ # File revision number must be numeric (Git commit hash cannot be used). # Therefore to make it numeric and meaningful it is artificially composed from: # - branch (development or release), # - type (alpha, beta, rc or release), # - number of alpha, beta or rc. # 'branch' expression tries to find out is it a development branch or release branch. # Result is encoded as: 1 - dev branch, release branch or error occurred, 2 - tag. # 'type_name' expression tries to find out what type of release it is. # Expected result is: "alpha", "beta", "rc" or "" (empty string). # 'type_num' expression encodes 'type_name' as numeric value: # 1 - alpha, 2 - beta, 3 - rc, 4 - release, 0 - unknown. # 'type_count' expression tries to find out number of "alpha", "beta" or "rc" (e.g. 1 from "rc1"). branch=`(git symbolic-ref -q HEAD > /dev/null && echo 1) || (git tag -l --points-at HEAD| grep "."| grep -q -v "-" && echo 2) || echo 1`; \ type_name=`cat ./main.go| sed -n -e '/AGENT_VERSION_RC/s/.*"\([a-z]*\)[0-9]*"/\1/p'`; \ type_num=`(test "x$$type_name" = "xalpha" && echo "1") || echo ""`; \ type_num=`(test -z $$type_num && test "x$$type_name" = "xbeta" && echo "2") || echo "$$type_num"`; \ type_num=`(test -z $$type_num && test "x$$type_name" = "xrc" && echo "3") || echo "$$type_num"`; \ type_num=`(test -z $$type_num && test -z $$type_name && echo "4") || echo "$$type_num"`; \ type_num=`(test -z $$type_num && echo "0") || echo "$$type_num"`; \ type_count=`cat ./main.go|sed -n -e '/ZABBIX_VERSION_RC/s/.*"[a-z]*\([0-9]*\)"/\1/p'`; \ type_count=`printf '%02d' $$type_count`; \ cat ./$${distdir}/windres/resource.h|sed "s/{ZABBIX_VERSION_MAJOR}/$${major_verison}/g"| \ sed "s/{ZABBIX_VERSION_MINOR}/$${minor_verison}/g"| sed "s/{ZABBIX_VERSION_PATCH}/$${patch_verison}/g"| \ sed "s/{ZABBIX_VERSION_RC}/\"$${alphatag}\"/g"| sed "s/{ZABBIX_RC_NUM}/$$branch$$type_num$$type_count/g"| \ sed "s/{ZABBIX_LICENSE_YEARS}/\"$${lic_years}\"/g"| sed "s/{VER_FILEDESCRIPTION_STR}/$(PACKAGE)/g" \ > ./$${distdir}/windres/resource.h.new; mv ./$${distdir}/windres/resource.h.new ./$${distdir}/windres/resource.h; \ tar -czvf ./$${dist_archive} ./$${distdir}; \ rm -rf ./$${distdir} endif sbom.json: CGO_CFLAGS="${CGO_CFLAGS}" CGO_LDFLAGS="${CGO_LDFLAGS}" cyclonedx-gomod mod \ -output-version 1.4 \ -licenses -assert-licenses -json -output "$@" sbom.xml: CGO_CFLAGS="${CGO_CFLAGS}" CGO_LDFLAGS="${CGO_LDFLAGS}" cyclonedx-gomod mod \ -output-version 1.4 \ -licenses -assert-licenses -output "$@" sbom: sbom.json .PHONY: sbom