Prevent unwanted m4 macro expansion + -g GNU compatibility flag
Most of the included files are meant to be output literally, without any macro processing. Using `undivert` in place of `include` achieves that. This is a safety net against unsanitized input generated during the build. Also, developers editing the shell code stub shouldn't be constantly alert about triggering accidental macro expansion. In order that `undivert` mimics GNU behaviour on BSDs, the `-g` flag is used for the m4 invocation.
This commit is contained in:
parent
2e44fe9e90
commit
419817e656
@ -63,7 +63,7 @@ $(CMDOPTFILES)
|
||||
endef
|
||||
|
||||
hledger-completion.bash: $(M4DEPS)
|
||||
m4 hledger-completion.bash.m4 > $@
|
||||
m4 -g hledger-completion.bash.m4 > $@
|
||||
|
||||
commands.txt:
|
||||
printf "%s\n" $(COMMANDS) > $@
|
||||
|
||||
@ -1,19 +1,19 @@
|
||||
include(`hledger-completion.bash.stub')dnl
|
||||
undivert(`hledger-completion.bash.stub')dnl
|
||||
|
||||
# Include lists of commands and options generated by the Makefile using the
|
||||
# m4 macro processor.
|
||||
# Included files must have exactly one newline at EOF to prevent weired errors.
|
||||
|
||||
read -r -d "" _hledger_complist_commands <<TEXT
|
||||
include(`commands.txt')dnl
|
||||
undivert(`commands.txt')dnl
|
||||
TEXT
|
||||
|
||||
read -r -d "" _hledger_complist_query_filters <<TEXT
|
||||
include(`query-filters.txt')dnl
|
||||
undivert(`query-filters.txt')dnl
|
||||
TEXT
|
||||
|
||||
read -r -d "" _hledger_complist_generic_options <<TEXT
|
||||
include(`generic-options.txt')dnl
|
||||
undivert(`generic-options.txt')dnl
|
||||
TEXT
|
||||
|
||||
# Dashes are replaced by m4 with underscores to form valid identifiers
|
||||
@ -22,7 +22,7 @@ dnl
|
||||
include(`foreach2.m4')dnl
|
||||
foreach(`cmd', (include(`commands-list.txt')), `
|
||||
read -r -d "" _hledger_complist_options_`'translit(cmd, -, _) <<TEXT
|
||||
include(options-cmd.txt)dnl
|
||||
undivert(options-cmd.txt)dnl
|
||||
TEXT
|
||||
')dnl
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user