diff options
Diffstat (limited to 'makefile_escaping')
-rw-r--r-- | makefile_escaping/env_vars.mk | 15 | ||||
-rw-r--r-- | makefile_escaping/prologue.mk | 6 | ||||
-rw-r--r-- | makefile_escaping/quotes.mk | 11 | ||||
-rw-r--r-- | makefile_escaping/quoting_args.mk | 8 | ||||
-rw-r--r-- | makefile_escaping/shell.mk | 14 |
5 files changed, 54 insertions, 0 deletions
diff --git a/makefile_escaping/env_vars.mk b/makefile_escaping/env_vars.mk new file mode 100644 index 0000000..47c1647 --- /dev/null +++ b/makefile_escaping/env_vars.mk @@ -0,0 +1,15 @@ +escape = $(subst ','\'',$(1)) +escape_var = $(call escape,$(value $(1))) + +test_var ?= This is safe. +export test_var + +echo_test_var := printf '%s\n' '$(call escape_var,test_var)' +bash_test_var := bash -c '$(call escape_var,echo_test_var)' + +.PHONY: test +test: + @printf '%s\n' '$(call escape_var,test_var)' + @printf '%s\n' "$$test_var" + @bash -c '$(call escape_var,echo_test_var)' + @bash -c '$(call escape_var,bash_test_var)' diff --git a/makefile_escaping/prologue.mk b/makefile_escaping/prologue.mk new file mode 100644 index 0000000..1c12914 --- /dev/null +++ b/makefile_escaping/prologue.mk @@ -0,0 +1,6 @@ +MAKEFLAGS += --warn-undefined-variables +.DEFAULT_GOAL := all +.DELETE_ON_ERROR: +.SUFFIXES: +SHELL := bash +.SHELLFLAGS := -e -o pipefail -c diff --git a/makefile_escaping/quotes.mk b/makefile_escaping/quotes.mk new file mode 100644 index 0000000..2d953f8 --- /dev/null +++ b/makefile_escaping/quotes.mk @@ -0,0 +1,11 @@ +escape = $(subst ','\'',$(1)) + +test_var := Includes ' quote + +echo_test_var := printf '%s\n' '$(call escape,$(test_var))' +bash_test_var := bash -c '$(call escape,$(echo_test_var))' + +test: + printf '%s\n' '$(call escape,$(test_var))' + bash -c '$(call escape,$(echo_test_var))' + bash -c '$(call escape,$(bash_test_var))' diff --git a/makefile_escaping/quoting_args.mk b/makefile_escaping/quoting_args.mk new file mode 100644 index 0000000..d27c81d --- /dev/null +++ b/makefile_escaping/quoting_args.mk @@ -0,0 +1,8 @@ +test_var := Same line? +export test_var + +test: + printf '%s\n' $(test_var) + printf '%s\n' '$(test_var)' + printf '%s\n' $$test_var + printf '%s\n' "$$test_var" diff --git a/makefile_escaping/shell.mk b/makefile_escaping/shell.mk new file mode 100644 index 0000000..36db8d8 --- /dev/null +++ b/makefile_escaping/shell.mk @@ -0,0 +1,14 @@ +escape = $(subst ','\'',$(1)) + +cwd := $(shell basename -- "$$( pwd )") +export cwd + +echo_cwd := printf '%s\n' '$(call escape,$(cwd))' +bash_cwd := bash -c '$(call escape,$(echo_cwd))' + +.PHONY: test +test: + @printf '%s\n' '$(call escape,$(cwd))' + @printf '%s\n' "$$cwd" + @bash -c '$(call escape,$(echo_cwd))' + @bash -c '$(call escape,$(bash_cwd))' |