From b7a6929276944496855796b2ea6ee374af96541d Mon Sep 17 00:00:00 2001 From: Daylin Morgan Date: Tue, 24 Jan 2023 15:03:05 -0600 Subject: [PATCH] fix(#2): use bash/zsh only --- src/builtins.mk | 3 --- src/runners.mk | 14 +++++++------- task.mk | 21 +++++++++------------ 3 files changed, 16 insertions(+), 22 deletions(-) diff --git a/src/builtins.mk b/src/builtins.mk index 3d88354..4115745 100644 --- a/src/builtins.mk +++ b/src/builtins.mk @@ -27,9 +27,6 @@ tconfirm = $(call py,confirm_py,$(1)) .PHONY: h help _help _print-ansi _update-task.mk TASK_MAKEFILE_LIST := $(filter-out $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)),$(MAKEFILE_LIST)) export MAKEFILE_LIST MAKE TASK_MAKEFILE_LIST -# ifndef INHERIT_SHELL -# SHELL := $(shell which bash) -# endif ifdef PHONIFY $(shell MAKEFILE_LIST='$(MAKEFILE_LIST)' $(call py-verbose,phonify_py)) endif diff --git a/src/runners.mk b/src/runners.mk index dafef23..286a44a 100644 --- a/src/runners.mk +++ b/src/runners.mk @@ -4,15 +4,15 @@ # possible posix process substitions solution: # https://unix.stackexchange.com/a/639752 # -### -SHELL_CHECK ?= $(shell /bin/sh --version | grep 'bash|zsh|ksh') -ifndef SHELL_CHECK -$(error task.mk requires a process substition compatible shell) +TASKMK_SHELL ?= $(shell cat /etc/shells | grep -E '/(bash|zsh)' | head -n 1) +ifndef TASKMK_SHELL +$(warning WARNING! task.mk features require bash or zsh) endif define _newline endef -_escape_shellstring = $(subst `,\`,$(subst ",\",$(subst $$,\$$,$(subst \,\\,$1)))) +_escape_shellstring = $(subst ','\'',$(subst `,\`,$(subst ",\",$(subst $$,\$$,$(subst \,\\,$1))))) _escape_printf = $(subst \,\\,$(subst %,%%,$1)) _create_string = $(subst $(_newline),\n,$(call _escape_shellstring,$(call _escape_printf,$1))) _printline = printf -- "<----------------------------------->\n" @@ -26,7 +26,7 @@ endef py = $(call _debug_runner,Python,python3,$($(1))) tbash = $(call _debug_runner,Bash,bash,$($(1))) else -py = @python3 <(printf "$(call _create_string,$($(1)))") -tbash = @bash <(printf "$(call _create_string,$($(1)))") +py = @$(TASKMK_SHELL) -c 'python3 <(printf "$(call _create_string,$($(1)))")' +tbash = @$(TASKMK_SHELL) -c '$(TASKMK_SHELL) <(printf "$(call _create_string,$($(1)))")' endif -py-verbose = python3 <(printf "$(call _create_string,$($(1)))") +py-verbose = $(TASKMK_SHELL) -c 'python3 <(printf "$(call _create_string,$($(1)))")' diff --git a/task.mk b/task.mk index 14f2879..50e0193 100644 --- a/task.mk +++ b/task.mk @@ -1,7 +1,7 @@ # }> [github.com/daylinmorgan/task.mk] <{ # # Copyright (c) 2022 Daylin Morgan # MIT License -TASKMK_VERSION ?= v23.1.1-8-gbddd2f3-dev +TASKMK_VERSION ?= v23.1.1-10-ge85d61c-dev # task.mk should be included at the bottom of your Makefile with `-include .task.mk` # See below for the standard configuration options that should be set prior to including this file. # You can update your .task.mk with `make _update-task.mk` @@ -391,15 +391,15 @@ def parseargs(argstring): endef # ---- [python/bash script runner] ---- # -SHELL_CHECK ?= $(shell /bin/sh --version | grep 'bash|zsh|ksh') -ifndef SHELL_CHECK -$(error task.mk requires a process substition compatible shell) +TASKMK_SHELL ?= $(shell cat /etc/shells | grep -E '/(bash|zsh)' | head -n 1) +ifndef TASKMK_SHELL +$(warning WARNING! task.mk features require bash or zsh) endif define _newline endef -_escape_shellstring = $(subst `,\`,$(subst ",\",$(subst $$,\$$,$(subst \,\\,$1)))) +_escape_shellstring = $(subst ','\'',$(subst `,\`,$(subst ",\",$(subst $$,\$$,$(subst \,\\,$1))))) _escape_printf = $(subst \,\\,$(subst %,%%,$1)) _create_string = $(subst $(_newline),\n,$(call _escape_shellstring,$(call _escape_printf,$1))) _printline = printf -- "<----------------------------------->\n" @@ -413,10 +413,10 @@ endef py = $(call _debug_runner,Python,python3,$($(1))) tbash = $(call _debug_runner,Bash,bash,$($(1))) else -py = @python3 <(printf "$(call _create_string,$($(1)))") -tbash = @bash <(printf "$(call _create_string,$($(1)))") +py = @$(TASKMK_SHELL) -c 'python3 <(printf "$(call _create_string,$($(1)))")' +tbash = @$(TASKMK_SHELL) -c '$(TASKMK_SHELL) <(printf "$(call _create_string,$($(1)))")' endif -py-verbose = python3 <(printf "$(call _create_string,$($(1)))") +py-verbose = $(TASKMK_SHELL) -c 'python3 <(printf "$(call _create_string,$($(1)))")' # ---- [builtin recipes] ---- # ifeq (help,$(firstword $(MAKECMDGOALS))) HELP_ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS)) @@ -444,11 +444,8 @@ tprint = $(call py,print_py,$(1)) tprint-verbose= $(call py-verbose,print_py,$(1)) tconfirm = $(call py,confirm_py,$(1)) .PHONY: h help _help _print-ansi _update-task.mk -TASK_MAKEFILE_LIST := $(filter-out $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)),$(MAKEFILE_LIST)) +TASK_MAKEFILE_LIST := $(filter-out .task.cfg.mk .task.mk,$(MAKEFILE_LIST)) export MAKEFILE_LIST MAKE TASK_MAKEFILE_LIST -# ifndef INHERIT_SHELL -# SHELL := $(shell which bash) -# endif ifdef PHONIFY $(shell MAKEFILE_LIST='$(MAKEFILE_LIST)' $(call py-verbose,phonify_py)) endif