aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/makefile_escaping
diff options
context:
space:
mode:
Diffstat (limited to 'makefile_escaping')
-rw-r--r--makefile_escaping/env_vars.mk15
-rw-r--r--makefile_escaping/prologue.mk6
-rw-r--r--makefile_escaping/quotes.mk11
-rw-r--r--makefile_escaping/quoting_args.mk8
-rw-r--r--makefile_escaping/shell.mk14
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))'