/usr/share/doc/m4-doc/Other-Incompatibilities.html is in m4-doc 1.4.18-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!--
This manual (31 December 2016) is for GNU M4 (version
1.4.18), a package containing an implementation of the m4 macro
language.
Copyright (C) 1989-1994, 2004-2014, 2016 Free Software
Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License,
Version 1.3 or any later version published by the Free Software
Foundation; with no Invariant Sections, no Front-Cover Texts, and no
Back-Cover Texts. A copy of the license is included in the section
entitled "GNU Free Documentation License." -->
<!-- Created by GNU Texinfo 6.3, http://www.gnu.org/software/texinfo/ -->
<head>
<title>GNU M4 1.4.18 macro processor: Other Incompatibilities</title>
<meta name="description" content="GNU M4 1.4.18 macro processor: Other Incompatibilities">
<meta name="keywords" content="GNU M4 1.4.18 macro processor: Other Incompatibilities">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Indices.html#Indices" rel="index" title="Indices">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Compatibility.html#Compatibility" rel="up" title="Compatibility">
<link href="Answers.html#Answers" rel="next" title="Answers">
<link href="Incompatibilities.html#Incompatibilities" rel="prev" title="Incompatibilities">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.indentedblock {margin-right: 0em}
blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smalllisp {margin-left: 3.2em}
kbd {font-style: oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nolinebreak {white-space: nowrap}
span.roman {font-family: initial; font-weight: normal}
span.sansserif {font-family: sans-serif; font-weight: normal}
ul.no-bullet {list-style: none}
-->
</style>
</head>
<body lang="en">
<a name="Other-Incompatibilities"></a>
<div class="header">
<p>
Previous: <a href="Incompatibilities.html#Incompatibilities" accesskey="p" rel="prev">Incompatibilities</a>, Up: <a href="Compatibility.html#Compatibility" accesskey="u" rel="up">Compatibility</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Indices.html#Indices" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Other-incompatibilities"></a>
<h3 class="section">16.3 Other incompatibilities</h3>
<p>There are a few other incompatibilities between this implementation of
<code>m4</code>, and the System V version.
</p>
<ul>
<li> GNU <code>m4</code> implements sync lines differently from System V
<code>m4</code>, when text is being diverted. GNU <code>m4</code> outputs
the sync lines when the text is being diverted, and System V <code>m4</code>
when the diverted text is being brought back.
<p>The problem is which lines and file names should be attached to text
that is being, or has been, diverted. System V <code>m4</code> regards all
the diverted text as being generated by the source line containing the
<code>undivert</code> call, whereas GNU <code>m4</code> regards the
diverted text as being generated at the time it is diverted.
</p>
<p>The sync line option is used mostly when using <code>m4</code> as
a front end to a compiler. If a diverted line causes a compiler error,
the error messages should most probably refer to the place where the
diversion was made, and not where it was inserted again.
</p>
<div class="example">
<pre class="example">divert(2)2
divert(1)1
divert`'0
⇒#line 3 "stdin"
⇒0
^D
⇒#line 2 "stdin"
⇒1
⇒#line 1 "stdin"
⇒2
</pre></div>
<p>The current <code>m4</code> implementation has a limitation that the syncline
output at the start of each diversion occurs no matter what, even if the
previous diversion did not end with a newline. This goes contrary to
the claim that synclines appear on a line by themselves, so this
limitation may be corrected in a future version of <code>m4</code>. In the
meantime, when using <samp>-s</samp>, it is wisest to make sure all
diversions end with newline.
</p>
</li><li> GNU <code>m4</code> makes no attempt at prohibiting self-referential
definitions like:
<div class="example">
<pre class="example">define(`x', `x')
⇒
define(`x', `x ')
⇒
</pre></div>
<a name="index-rescanning-4"></a>
<p>There is nothing inherently wrong with defining ‘<samp>x</samp>’ to
return ‘<samp>x</samp>’. The wrong thing is to expand ‘<samp>x</samp>’ unquoted,
because that would cause an infinite rescan loop.
In <code>m4</code>, one might use macros to hold strings, as we do for
variables in other programming languages, further checking them with:
</p>
<div class="example">
<pre class="example">ifelse(defn(`<var>holder</var>'), `<var>value</var>', …)
</pre></div>
<p>In cases like this one, an interdiction for a macro to hold its own name
would be a useless limitation. Of course, this leaves more rope for the
GNU <code>m4</code> user to hang himself! Rescanning hangs may be
avoided through careful programming, a little like for endless loops in
traditional programming languages.
</p></li></ul>
<hr>
<div class="header">
<p>
Previous: <a href="Incompatibilities.html#Incompatibilities" accesskey="p" rel="prev">Incompatibilities</a>, Up: <a href="Compatibility.html#Compatibility" accesskey="u" rel="up">Compatibility</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Indices.html#Indices" title="Index" rel="index">Index</a>]</p>
</div>
</body>
</html>
|