This file is indexed.

/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> &nbsp; [<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
&rArr;#line 3 &quot;stdin&quot;
&rArr;0
^D
&rArr;#line 2 &quot;stdin&quot;
&rArr;1
&rArr;#line 1 &quot;stdin&quot;
&rArr;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')
&rArr;
define(`x', `x ')
&rArr;
</pre></div>

<a name="index-rescanning-4"></a>
<p>There is nothing inherently wrong with defining &lsquo;<samp>x</samp>&rsquo; to
return &lsquo;<samp>x</samp>&rsquo;.  The wrong thing is to expand &lsquo;<samp>x</samp>&rsquo; 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>', &hellip;)
</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> &nbsp; [<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>