mirror of
https://github.com/daylinmorgan/task.mk.git
synced 2024-12-22 18:00:44 -06:00
Compare commits
4 commits
bddd2f3bd2
...
b0f7493dc0
Author | SHA1 | Date | |
---|---|---|---|
b0f7493dc0 | |||
b7a6929276 | |||
e85d61c6e1 | |||
535118d27a |
7 changed files with 32 additions and 35 deletions
|
@ -9,3 +9,7 @@ EPILOG = \nfor more info: gh.dayl.in/task.mk
|
||||||
PRINT_VARS := VERSION SHELL
|
PRINT_VARS := VERSION SHELL
|
||||||
PHONIFY = 1
|
PHONIFY = 1
|
||||||
|
|
||||||
|
-include .task.mk
|
||||||
|
.task.mk: $(TEMPLATES) generate.py
|
||||||
|
$(call msg,re-jinjaing the local {a.b_cyan}.task.mk{a.end})
|
||||||
|
@./generate.py $(VERSION) > .task.mk || (echo "generator failed!!" && rm .task.mk)
|
||||||
|
|
5
Makefile
5
Makefile
|
@ -64,7 +64,4 @@ info: ## demonstrate usage of tprint
|
||||||
task.mk: $(TEMPLATES) generate.py
|
task.mk: $(TEMPLATES) generate.py
|
||||||
./generate.py $(VERSION) > task.mk
|
./generate.py $(VERSION) > task.mk
|
||||||
|
|
||||||
-include .task.cfg.dev.mk .task.cfg.mk .task.mk
|
-include .task.cfg.dev.mk .task.cfg.mk
|
||||||
.task.mk: $(TEMPLATES) generate.py
|
|
||||||
$(call msg,re-jinjaing the local {a.b_cyan}.task.mk{a.end})
|
|
||||||
@./generate.py $(VERSION) > .task.mk || (echo "generator failed!!" && rm .task.mk)
|
|
||||||
|
|
|
@ -25,11 +25,8 @@ tprint = $(call py,print_py,$(1))
|
||||||
tprint-verbose= $(call py-verbose,print_py,$(1))
|
tprint-verbose= $(call py-verbose,print_py,$(1))
|
||||||
tconfirm = $(call py,confirm_py,$(1))
|
tconfirm = $(call py,confirm_py,$(1))
|
||||||
.PHONY: h help _help _print-ansi _update-task.mk
|
.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
|
export MAKEFILE_LIST MAKE TASK_MAKEFILE_LIST
|
||||||
# ifndef INHERIT_SHELL
|
|
||||||
# SHELL := $(shell which bash)
|
|
||||||
# endif
|
|
||||||
ifdef PHONIFY
|
ifdef PHONIFY
|
||||||
$(shell $(call py-verbose,phonify_py))
|
$(shell MAKEFILE_LIST='$(MAKEFILE_LIST)' $(call py-verbose,phonify_py))
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -42,7 +42,7 @@ def gen_makefile():
|
||||||
return makefile
|
return makefile
|
||||||
|
|
||||||
|
|
||||||
def parse_help(file, hidden=False):
|
def parse_help(file, hidden=False, require_msg=True):
|
||||||
for line in file.splitlines():
|
for line in file.splitlines():
|
||||||
match = pattern.search(line)
|
match = pattern.search(line)
|
||||||
if match:
|
if match:
|
||||||
|
@ -53,7 +53,8 @@ def parse_help(file, hidden=False):
|
||||||
):
|
):
|
||||||
pass
|
pass
|
||||||
elif not any(match.groupdict().get(k) for k in ("msg", "msgargs")):
|
elif not any(match.groupdict().get(k) for k in ("msg", "msgargs")):
|
||||||
pass
|
if not require_msg:
|
||||||
|
yield {k: v for k, v in match.groupdict().items() if v is not None}
|
||||||
else:
|
else:
|
||||||
yield {k: v for k, v in match.groupdict().items() if v is not None}
|
yield {k: v for k, v in match.groupdict().items() if v is not None}
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ def check_item(item):
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
items = " ".join((i["goal"] for i in parse_help(gen_makefile()) if check_item(i)))
|
items = " ".join((i["goal"] for i in parse_help(gen_makefile(),require_msg=False) if check_item(i)))
|
||||||
sys.stdout.write(".PHONY: " + items)
|
sys.stdout.write(".PHONY: " + items)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -4,15 +4,15 @@
|
||||||
# possible posix process substitions solution:
|
# possible posix process substitions solution:
|
||||||
# https://unix.stackexchange.com/a/639752
|
# https://unix.stackexchange.com/a/639752
|
||||||
# -###
|
# -###
|
||||||
SHELL_CHECK ?= $(shell /bin/sh --version | grep 'bash|zsh|ksh')
|
TASKMK_SHELL ?= $(shell cat /etc/shells | grep -E '/(bash|zsh)' | head -n 1)
|
||||||
ifndef SHELL_CHECK
|
ifndef TASKMK_SHELL
|
||||||
$(error task.mk requires a process substition compatible shell)
|
$(warning WARNING! task.mk features require bash or zsh)
|
||||||
endif
|
endif
|
||||||
define _newline
|
define _newline
|
||||||
|
|
||||||
|
|
||||||
endef
|
endef
|
||||||
_escape_shellstring = $(subst `,\`,$(subst ",\",$(subst $$,\$$,$(subst \,\\,$1))))
|
_escape_shellstring = $(subst ','\'',$(subst `,\`,$(subst ",\",$(subst $$,\$$,$(subst \,\\,$1)))))
|
||||||
_escape_printf = $(subst \,\\,$(subst %,%%,$1))
|
_escape_printf = $(subst \,\\,$(subst %,%%,$1))
|
||||||
_create_string = $(subst $(_newline),\n,$(call _escape_shellstring,$(call _escape_printf,$1)))
|
_create_string = $(subst $(_newline),\n,$(call _escape_shellstring,$(call _escape_printf,$1)))
|
||||||
_printline = printf -- "<----------------------------------->\n"
|
_printline = printf -- "<----------------------------------->\n"
|
||||||
|
@ -26,7 +26,7 @@ endef
|
||||||
py = $(call _debug_runner,Python,python3,$($(1)))
|
py = $(call _debug_runner,Python,python3,$($(1)))
|
||||||
tbash = $(call _debug_runner,Bash,bash,$($(1)))
|
tbash = $(call _debug_runner,Bash,bash,$($(1)))
|
||||||
else
|
else
|
||||||
py = @python3 <(printf "$(call _create_string,$($(1)))")
|
py = @$(TASKMK_SHELL) -c 'python3 <(printf "$(call _create_string,$($(1)))")'
|
||||||
tbash = @bash <(printf "$(call _create_string,$($(1)))")
|
tbash = @$(TASKMK_SHELL) -c '$(TASKMK_SHELL) <(printf "$(call _create_string,$($(1)))")'
|
||||||
endif
|
endif
|
||||||
py-verbose = python3 <(printf "$(call _create_string,$($(1)))")
|
py-verbose = $(TASKMK_SHELL) -c 'python3 <(printf "$(call _create_string,$($(1)))")'
|
||||||
|
|
30
task.mk
30
task.mk
|
@ -1,7 +1,7 @@
|
||||||
# }> [github.com/daylinmorgan/task.mk] <{ #
|
# }> [github.com/daylinmorgan/task.mk] <{ #
|
||||||
# Copyright (c) 2022 Daylin Morgan
|
# Copyright (c) 2022 Daylin Morgan
|
||||||
# MIT License
|
# MIT License
|
||||||
TASKMK_VERSION ?= v23.1.1-7-gb411303-dev
|
TASKMK_VERSION ?= v23.1.1-10-ge85d61c-dev
|
||||||
# task.mk should be included at the bottom of your Makefile with `-include .task.mk`
|
# 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.
|
# 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`
|
# You can update your .task.mk with `make _update-task.mk`
|
||||||
|
@ -330,7 +330,7 @@ def check_item(item):
|
||||||
args = parseargs(item.get("msgargs", ""))
|
args = parseargs(item.get("msgargs", ""))
|
||||||
return not args.not_phony
|
return not args.not_phony
|
||||||
def main():
|
def main():
|
||||||
items = " ".join((i["goal"] for i in parse_help(gen_makefile()) if check_item(i)))
|
items = " ".join((i["goal"] for i in parse_help(gen_makefile(),require_msg=False) if check_item(i)))
|
||||||
sys.stdout.write(".PHONY: " + items)
|
sys.stdout.write(".PHONY: " + items)
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
@ -363,7 +363,7 @@ def gen_makefile():
|
||||||
with open(file, "r") as f:
|
with open(file, "r") as f:
|
||||||
makefile += f.read() + "\n\n"
|
makefile += f.read() + "\n\n"
|
||||||
return makefile
|
return makefile
|
||||||
def parse_help(file, hidden=False):
|
def parse_help(file, hidden=False, require_msg=True):
|
||||||
for line in file.splitlines():
|
for line in file.splitlines():
|
||||||
match = pattern.search(line)
|
match = pattern.search(line)
|
||||||
if match:
|
if match:
|
||||||
|
@ -374,7 +374,8 @@ def parse_help(file, hidden=False):
|
||||||
):
|
):
|
||||||
pass
|
pass
|
||||||
elif not any(match.groupdict().get(k) for k in ("msg", "msgargs")):
|
elif not any(match.groupdict().get(k) for k in ("msg", "msgargs")):
|
||||||
pass
|
if not require_msg:
|
||||||
|
yield {k: v for k, v in match.groupdict().items() if v is not None}
|
||||||
else:
|
else:
|
||||||
yield {k: v for k, v in match.groupdict().items() if v is not None}
|
yield {k: v for k, v in match.groupdict().items() if v is not None}
|
||||||
def parseargs(argstring):
|
def parseargs(argstring):
|
||||||
|
@ -390,15 +391,15 @@ def parseargs(argstring):
|
||||||
endef
|
endef
|
||||||
# ---- [python/bash script runner] ---- #
|
# ---- [python/bash script runner] ---- #
|
||||||
|
|
||||||
SHELL_CHECK ?= $(shell /bin/sh --version | grep 'bash|zsh|ksh')
|
TASKMK_SHELL ?= $(shell cat /etc/shells | grep -E '/(bash|zsh)' | head -n 1)
|
||||||
ifndef SHELL_CHECK
|
ifndef TASKMK_SHELL
|
||||||
$(error task.mk requires a process substition compatible shell)
|
$(warning WARNING! task.mk features require bash or zsh)
|
||||||
endif
|
endif
|
||||||
define _newline
|
define _newline
|
||||||
|
|
||||||
|
|
||||||
endef
|
endef
|
||||||
_escape_shellstring = $(subst `,\`,$(subst ",\",$(subst $$,\$$,$(subst \,\\,$1))))
|
_escape_shellstring = $(subst ','\'',$(subst `,\`,$(subst ",\",$(subst $$,\$$,$(subst \,\\,$1)))))
|
||||||
_escape_printf = $(subst \,\\,$(subst %,%%,$1))
|
_escape_printf = $(subst \,\\,$(subst %,%%,$1))
|
||||||
_create_string = $(subst $(_newline),\n,$(call _escape_shellstring,$(call _escape_printf,$1)))
|
_create_string = $(subst $(_newline),\n,$(call _escape_shellstring,$(call _escape_printf,$1)))
|
||||||
_printline = printf -- "<----------------------------------->\n"
|
_printline = printf -- "<----------------------------------->\n"
|
||||||
|
@ -412,10 +413,10 @@ endef
|
||||||
py = $(call _debug_runner,Python,python3,$($(1)))
|
py = $(call _debug_runner,Python,python3,$($(1)))
|
||||||
tbash = $(call _debug_runner,Bash,bash,$($(1)))
|
tbash = $(call _debug_runner,Bash,bash,$($(1)))
|
||||||
else
|
else
|
||||||
py = @python3 <(printf "$(call _create_string,$($(1)))")
|
py = @$(TASKMK_SHELL) -c 'python3 <(printf "$(call _create_string,$($(1)))")'
|
||||||
tbash = @bash <(printf "$(call _create_string,$($(1)))")
|
tbash = @$(TASKMK_SHELL) -c '$(TASKMK_SHELL) <(printf "$(call _create_string,$($(1)))")'
|
||||||
endif
|
endif
|
||||||
py-verbose = python3 <(printf "$(call _create_string,$($(1)))")
|
py-verbose = $(TASKMK_SHELL) -c 'python3 <(printf "$(call _create_string,$($(1)))")'
|
||||||
# ---- [builtin recipes] ---- #
|
# ---- [builtin recipes] ---- #
|
||||||
ifeq (help,$(firstword $(MAKECMDGOALS)))
|
ifeq (help,$(firstword $(MAKECMDGOALS)))
|
||||||
HELP_ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
|
HELP_ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
|
||||||
|
@ -443,11 +444,8 @@ tprint = $(call py,print_py,$(1))
|
||||||
tprint-verbose= $(call py-verbose,print_py,$(1))
|
tprint-verbose= $(call py-verbose,print_py,$(1))
|
||||||
tconfirm = $(call py,confirm_py,$(1))
|
tconfirm = $(call py,confirm_py,$(1))
|
||||||
.PHONY: h help _help _print-ansi _update-task.mk
|
.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
|
export MAKEFILE_LIST MAKE TASK_MAKEFILE_LIST
|
||||||
# ifndef INHERIT_SHELL
|
|
||||||
# SHELL := $(shell which bash)
|
|
||||||
# endif
|
|
||||||
ifdef PHONIFY
|
ifdef PHONIFY
|
||||||
$(shell $(call py-verbose,phonify_py))
|
$(shell MAKEFILE_LIST='$(MAKEFILE_LIST)' $(call py-verbose,phonify_py))
|
||||||
endif
|
endif
|
||||||
|
|
Loading…
Reference in a new issue