Previous: Improved capitalize, Up: Answers [Contents][Index]
fatal_error
The fatal_error
macro (see M4exit) is not robust to versions
of GNU M4 earlier than 1.4.8, where invoking
__file__
(see Location) inside m4wrap
would result
in an empty string, and __line__
resulted in ‘0’ even
though all files start at line 1. Furthermore, versions earlier than
1.4.6 did not support the __program__
macro. If you want
fatal_error
to work across the entire 1.4.x release series, a
better implementation would be:
define(`fatal_error', `errprint(ifdef(`__program__', `__program__', ``m4'')'dnl `:ifelse(__line__, `0', `', `__file__:__line__:')` fatal error: $* ')m4exit(`1')') ⇒ m4wrap(`divnum(`demo of internal message') fatal_error(`inside wrapped text')') ⇒ ^D error→m4:stdin:6: Warning: excess arguments to builtin `divnum' ignored ⇒0 error→m4:stdin:6: fatal error: inside wrapped text