Allow |#_!!_#| on a line of its own in files processed by config.status

Demetrios Obenour <[email protected]>
Newsgroups gmane.comp.sysutils.autoconf.patches
Message-ID <[email protected]>
This patch removes the prohibition against using |#_!!_#| in files that
have variables substituted into them by config.status. The patch works
by checking to see if the here document in an awk-generated shell script
is accidentally closed, and reopens it when this happens (after echoing
the heredoc delimiter). All tests pass, even when modified so that awk's
built-in getline is never used.

diff --git a/doc/autoconf.texi b/doc/autoconf.texi
index ace1675..84d611e 100644
--- a/doc/autoconf.texi
+++ b/doc/autoconf.texi
@@ -9786,9 +9786,7 @@ not contain @samp{@@@var{var1}@@@var{var2}@@} if
@var{var1} and @var{var2}
 are variable names.
 The substituted value is not rescanned for more output variables;
 occurrences of @samp{@@@var{variable}@@} in the value are inserted
-literally into the output file.  (The algorithm uses the special marker
-@code{|#_!!_#|} internally, so neither the substituted value nor the
-output file may contain @code{|#_!!_#|}.)
+literally into the output file.
 
 If @var{value} is given, in addition assign it to @var{variable}.
 
diff --git a/lib/autoconf/status.m4 b/lib/autoconf/status.m4
index 9386891..99d0805 100644
--- a/lib/autoconf/status.m4
+++ b/lib/autoconf/status.m4
@@ -342,10 +342,18 @@ m4_ifdef([_AC_SUBST_FILES],
       while ((getline aline < (F[key])) > 0)
 	print(aline)
       close(F[key])'
+  ac_cs_awk_escape=
   ac_cs_awk_pipe_fini=
 else
   ac_cs_awk_getline=false
   ac_cs_awk_pipe_init="print \"cat <<'|#_!!_#|' &&\""
+  ac_cs_awk_escape='
+  if (line == "|#_!!_#|") {
+    # We just closed the here document!
+    # Echo the line and reopen the heredoc
+    print "echo \"|#_!!_#|\" &&"
+    '"$ac_cs_awk_pipe_init
+  }"
   ac_cs_awk_read_file='
       print "|#_!!_#|"
       print "cat " F[key] " &&"
@@ -525,6 +533,7 @@ cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
     }
   }]])[
   print line
+]m4_ifdef([_AC_SUBST_FILES],[[\$ac_cs_awk_escape]])[
 }
 ]dnl end of double-quoted part
 m4_ifdef([_AC_SUBST_FILES],
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.