GNU Info

Info Node: (autoconf.info)Here-Documents

(autoconf.info)Here-Documents


Next: File Descriptors Prev: Shellology Up: Portable Shell
Enter node , (file) or (file)node

Here-Documents
==============

   Don't rely on `\' being preserved just because it has no special
meaning together with the next symbol.  in the native `/bin/sh' on
OpenBSD 2.7 `\"' expands to `"' in here-documents with unquoted
delimiter.  As a general rule, if `\\' expands to `\' use `\\' to get
`\'.

   With OpenBSD 2.7's `/bin/sh'

     $ cat <<EOF
     > \" \\
     > EOF
     " \

and with Bash:

     bash-2.04$ cat <<EOF
     > \" \\
     > EOF
     \" \

   Many older shells (including the Bourne shell) implement
here-documents inefficiently.  Users can generally speed things up by
using a faster shell, e.g., by using the command `bash ./configure'
rather than plain `./configure'.

   Some shells can be extremely inefficient when there are a lot of
here-documents inside a single statement.  For instance if your
`configure.ac' includes something like:

     if <cross_compiling>; then
       assume this and that
     else
       check this
       check that
       check something else
       ...
       on and on forever
       ...
     fi

   A shell parses the whole `if'/`fi' construct, creating temporary
files for each here document in it.  Some shells create links for such
here-documents on every `fork', so that the clean-up code they had
installed correctly removes them.  It is creating the links that the
shell can take forever.

   Moving the tests out of the `if'/`fi', or creating multiple
`if'/`fi' constructs, would improve the performance significantly.
Anyway, this kind of construct is not exactly the typical use of
Autoconf.  In fact, it's even not recommended, because M4 macros can't
look into shell conditionals, so we may fail to expand a macro when it
was expanded before in a conditional path, and the condition turned out
to be false at run-time, and we end up not executing the macro at all.


automatically generated by info2www version 1.2.2.9