From 4b0959458c821ef26990fe1fe5931d552512526d Mon Sep 17 00:00:00 2001 From: Egor Tensin Date: Sat, 23 May 2020 23:20:31 +0000 Subject: makefile_escaping: set up CI --- makefile_escaping/env_vars.mk | 15 +++++++++++++++ makefile_escaping/prologue.mk | 6 ++++++ makefile_escaping/quotes.mk | 11 +++++++++++ makefile_escaping/quoting_args.mk | 8 ++++++++ makefile_escaping/shell.mk | 14 ++++++++++++++ 5 files changed, 54 insertions(+) create mode 100644 makefile_escaping/env_vars.mk create mode 100644 makefile_escaping/prologue.mk create mode 100644 makefile_escaping/quotes.mk create mode 100644 makefile_escaping/quoting_args.mk create mode 100644 makefile_escaping/shell.mk (limited to 'makefile_escaping') 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))' -- cgit v1.2.3