From bc7534763e60bce8ac7506e5b1625fcd082ebfe2 Mon Sep 17 00:00:00 2001 From: Tronje Krop Date: Wed, 30 Oct 2024 16:48:54 +0100 Subject: [PATCH] fix: macos compatibility (#111) Signed-off-by: Tronje Krop --- .github/workflows/build.yaml | 37 +++++++++++++++++++++++++++++++----- Makefile | 2 +- VERSION | 2 +- config/Makefile | 2 +- config/Makefile.base | 26 ++++++++++++++++--------- 5 files changed, 52 insertions(+), 17 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index fea9c11..332fdee 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -1,5 +1,6 @@ name: Go Build on: [push] + jobs: build: runs-on: ubuntu-latest @@ -17,13 +18,14 @@ jobs: env: CODACY_PROJECT_TOKEN: ${{ secrets.CODACY_PROJECT_TOKEN }} LANG: en_US.UTF-8 - run: make --file=config/Makefile.base --trace all + run: make --file=config/Makefile.base --trace all; - name: Send coverage report uses: shogo82148/actions-goveralls@v1 with: path-to-profile: ./build/test-all.cover + bash: runs-on: ubuntu-latest steps: @@ -43,7 +45,8 @@ jobs: - name: Run Bash compatibility tests env: BASH_COMPAT: 3.2 - run: make --file=config/Makefile.base --trace test-self + run: make --file=config/Makefile.base --trace test-self; + linux: runs-on: ubuntu-latest @@ -63,8 +66,9 @@ jobs: - name: Run Bash compatibility tests run: |- - make --version - make --file=config/Makefile.base --trace test-self + make --version; + make --file=config/Makefile.base --trace test-self; + macos: runs-on: macos-latest @@ -72,6 +76,28 @@ jobs: # - name: Set up Docker # uses: crazy-max/ghaction-setup-docker@v3 + - name: Set up Go + uses: actions/setup-go@v5 + with: + go-version: 1.23.2 + + - name: Checkout code + uses: actions/checkout@v4 + + - name: Run MacOS compatibility tests + env: + BASH_COMPAT: 3.2 + run: |- + make --version; + make --file=config/Makefile.base test-self; + + + macos-brewed: + runs-on: macos-latest + steps: + # - name: Set up Docker + # uses: crazy-max/ghaction-setup-docker@v3 + - name: Set up Go uses: actions/setup-go@v5 with: @@ -87,7 +113,8 @@ jobs: brew install make; export PATH="/opt/homebrew/opt/make/libexec/gnubin:${PATH}"; make --version; - make --file=config/Makefile.base --trace test-self + make --file=config/Makefile.base --trace test-self; + release: runs-on: ubuntu-latest diff --git a/Makefile b/Makefile index 7298c60..0d6ac91 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,7 @@ export GOPATH ?= $(shell $(GO) env GOPATH) export GOBIN ?= $(GOPATH)/bin # Setup go-make version to use desired build and config scripts. -GOMAKE_DEP ?= github.com/tkrop/go-make@v0.0.107 +GOMAKE_DEP ?= github.com/tkrop/go-make@v0.0.108 INSTALL_FLAGS ?= -mod=readonly -buildvcs=auto # Request targets from go-make targets target. TARGETS := $(shell command -v $(GOBIN)/go-make >/dev/null || \ diff --git a/VERSION b/VERSION index fbad1dd..48c15ef 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.0.107 +0.0.108 diff --git a/config/Makefile b/config/Makefile index 7298c60..0d6ac91 100644 --- a/config/Makefile +++ b/config/Makefile @@ -12,7 +12,7 @@ export GOPATH ?= $(shell $(GO) env GOPATH) export GOBIN ?= $(GOPATH)/bin # Setup go-make version to use desired build and config scripts. -GOMAKE_DEP ?= github.com/tkrop/go-make@v0.0.107 +GOMAKE_DEP ?= github.com/tkrop/go-make@v0.0.108 INSTALL_FLAGS ?= -mod=readonly -buildvcs=auto # Request targets from go-make targets target. TARGETS := $(shell command -v $(GOBIN)/go-make >/dev/null || \ diff --git a/config/Makefile.base b/config/Makefile.base index 26ec690..54f0149 100644 --- a/config/Makefile.base +++ b/config/Makefile.base @@ -46,14 +46,14 @@ endif # System depdendent helper functions. ifeq ("$(shell uname)","Linux") - MAKESHELL := PATH=$(PATH) /bin/bash else ifeq ($(shell uname),Darwin) path-setup = $(shell \ if [ "$(1)" == "opt" ]; then \ XPATH="$(shell brew --prefix)/$(1)/$(2)/libexec/gnubin"; \ else XPATH="$(shell brew --prefix)/$(1)"; fi; \ test ! -e "$${XPATH}/$(3)" && brew install $(2) >&2; \ - echo -n "$${XPATH}:$(4)") + if [ -n "$(4)" ]; then echo -n "$${XPATH}:$(4)"; \ + else echo -n "$${XPATH}"; fi) export PATH := $(call path-setup,opt,coreutils,ls,$(PATH)) export PATH := $(call path-setup,opt,findutils,find,$(PATH)) export PATH := $(call path-setup,bin,bash,bash,$(PATH)) @@ -62,15 +62,21 @@ else ifeq ($(shell uname),Darwin) export PATH := $(call path-setup,opt,gsed,sed,$(PATH)) export PATH := $(call path-setup,opt,make,make,$(PATH)) # Ensure export of path to $(shell ...) in gmake 3.81. - MAKESHELL := PATH=$(PATH) /bin/bash + ifneq ($(shell echo $(MAKE_VERSION) | grep -E "^3\.[0-9]+"),) + export SHELL := PATH="$(PATH)" $(shell brew --prefix)/bin/bash + else + export SHELL := $(shell brew --prefix)/bin/bash + endif else $(call cerror,unsupported operating system [$(shell uname --all)]) endif # Log execution environment for debugging. $(call cdebug,$(shell uname --all)) +$(call cdebug,using PATH [$${PATH}]) +$(call cdebug,using SHELL [$${SHELL}]) $(call cdebug,using BASH [$${0} - $${BASH_VERSION}]) -$(call cdebug,using PATH [$(shell echo -n "$${PATH}")]) +$(call cdebug,using AWK [$(shell awk --version | head -n 1)]) # Helper function to find and remove source files. find-all = find $(1) ! -path "./run/*" ! -path "./build/*" \( $(2) \) 2>/dev/null | \ @@ -130,9 +136,11 @@ INSTALL_FLAGS ?= $(strip $(mod-readonly) -buildvcs=auto $(INSTALLFLAGS)) # Function to ensure compatibility of gawk and mawk. -ifneq ($(shell echo "false" | \ - awk '{ print gensub("false","true","g") }' 2>/dev/null),true) - awk-gensub := function gensub(r, s, h, t) { \ +awk-gensub = $(shell echo "false" | \ + awk '{ print gensub("false","true","g") }' 2>/dev/null) +$(call cdebug,using GENSUB [$(awk-gensub)]) +ifeq ($(awk-gensub),false) + awk-gensub = function gensub(r, s, h, t) { \ if (t == 0) { t = $$0 } \ if (h ~ "^[gG]") { gsub(r, s, t) } \ else if (int(h) != 0) { \ @@ -145,7 +153,7 @@ ifneq ($(shell echo "false" | \ return t \ } else - awk-gensub := + awk-gensub = endif @@ -240,7 +248,7 @@ go-pkg = $(shell awk -v mode="$(2)" -v filter="$(3)" \ # Setup go-make to use desired build and config scripts. -GOMAKE_DEP := github.com/tkrop/go-make@v0.0.107 +GOMAKE_DEP := github.com/tkrop/go-make@v0.0.108 GOMAKE_MAKEFILE := $(realpath $(firstword $(MAKEFILE_LIST))) GOMAKE_MAKEFILES := $(GOMAKE_MAKEFILE) \ $(wildcard Makefile.vars) $(wildcard Makefile.ext)