From: Nick Bowler Date: Tue, 9 Mar 2021 03:36:50 +0000 (-0500) Subject: Fix DX_COMMAND_OUTPUT backslash-newline on heirloom-sh. X-Git-Url: https://git.draconx.ca/gitweb/dxcommon.git/commitdiff_plain/c01bc8e8ea99252f4249434e432896c8f2ae1199 Fix DX_COMMAND_OUTPUT backslash-newline on heirloom-sh. It seems that heirloom-sh (and presumably Solaris /bin/sh) read just silently eats backslash-newlines, and escaping the backslash does nothing useful, the shell just eats both backslashes and the newline. Attempt to avoid this problem by appending a magic string to troublesome lines, and stripping it after reading. This will obviously fail if the input _actually_ has this sequence but hopefully that will not be an issue in practice. --- diff --git a/m4/cmdout.m4 b/m4/cmdout.m4 index 90aa13e..c91aca1 100644 --- a/m4/cmdout.m4 +++ b/m4/cmdout.m4 @@ -22,12 +22,19 @@ AC_DEFUN_ONCE([_DX_COMMAND_OUTPUT_SETUP], [m4_divert_push([INIT_PREPARE])dnl dx_fn_cmdout_collect_output () { AS_UNSET([$][1]) # Double up backslashes as they will be stripped by read. - sed 's/\\/\\\\/g' conftest.do0 >conftest.do1 || return + # Heirloom sh read apparently just eats backslashes at EOL, so we compromise + # by adding a marker that can be stripped out afterwards. + _dx_eol='@%eol@%' + sed -e 's/\\/\\\\/g' -e 's/\\$/\\'"$_dx_eol/" conftest.do0 >conftest.do1 || + return exec 3