annotate man/standards.texi @ 981:0205cafe98ff

[xemacs-hg @ 2002-08-30 08:25:48 by youngs] Don't look now, but 21.5.9 is on its way out the door! Don't forget what good 'ol Ma used to say... "Eat your brussels sprouts, little Johnny, so you can grow up big and strong."
author youngs
date Fri, 30 Aug 2002 08:26:22 +0000
parents 0784d089fdc9
children bac3173b2665
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 \input texinfo @c -*-texinfo-*-
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 @c %**start of header
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3 @setfilename ../info/standards.info
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4 @settitle GNU Coding Standards
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5 @c This date is automagically updated when you save this file:
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
6 @set lastupdate February 21, 2001
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 @c %**end of header
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 @ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10 @format
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11 START-INFO-DIR-ENTRY
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 * Standards: (standards). GNU coding standards.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 END-INFO-DIR-ENTRY
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 @end format
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 @end ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17 @c @setchapternewpage odd
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 @setchapternewpage off
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
20 @c Put everything in one index (arbitrarily chosen to be the concept index).
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
21 @syncodeindex fn cp
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
22 @syncodeindex ky cp
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
23 @syncodeindex pg cp
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
24 @syncodeindex vr cp
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
25
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26 @c This is used by a cross ref in make-stds.texi
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27 @set CODESTD 1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28 @iftex
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29 @set CHAPTER chapter
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 @end iftex
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 @ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 @set CHAPTER node
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33 @end ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 @ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36 GNU Coding Standards
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
37 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 Permission is granted to make and distribute verbatim copies of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 this manual provided the copyright notice and this permission notice
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 are preserved on all copies.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 @ignore
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 Permission is granted to process this file through TeX and print the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45 results, provided the printed document carries copying permission
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 notice identical to this one except for the removal of this paragraph
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 (this paragraph not being relevant to the printed manual).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 @end ignore
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 Permission is granted to copy and distribute modified versions of this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 manual under the conditions for verbatim copying, provided that the entire
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 resulting derived work is distributed under the terms of a permission
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53 notice identical to this one.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 Permission is granted to copy and distribute translations of this manual
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 into another language, under the above conditions for modified versions,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 except that this permission notice may be stated in a translation approved
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 by the Free Software Foundation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 @end ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 @titlepage
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62 @title GNU Coding Standards
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 @author Richard Stallman
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 @author last updated @value{lastupdate}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 @page
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 @vskip 0pt plus 1filll
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
68 Copyright @copyright{} 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 Permission is granted to make and distribute verbatim copies of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 this manual provided the copyright notice and this permission notice
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 are preserved on all copies.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 Permission is granted to copy and distribute modified versions of this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 manual under the conditions for verbatim copying, provided that the entire
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 resulting derived work is distributed under the terms of a permission
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 notice identical to this one.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 Permission is granted to copy and distribute translations of this manual
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 into another language, under the above conditions for modified versions,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 except that this permission notice may be stated in a translation approved
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 by the Free Software Foundation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 @end titlepage
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85 @ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 @node Top, Preface, (dir), (dir)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 @top Version
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 Last updated @value{lastupdate}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 @end ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93 * Preface:: About the GNU Coding Standards
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 * Legal Issues:: Keeping Free Software Free
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 * Design Advice:: General Program Design
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 * Program Behavior:: Program Behavior for All Programs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 * Writing C:: Making The Best Use of C
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 * Documentation:: Documenting Programs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 * Managing Releases:: The Release Process
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 * References:: References to Non-Free Software or Documentation
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
101 * Index::
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 @node Preface
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105 @chapter About the GNU Coding Standards
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 The GNU Coding Standards were written by Richard Stallman and other GNU
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108 Project volunteers. Their purpose is to make the GNU system clean,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 consistent, and easy to install. This document can also be read as a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 guide to writing portable, robust and reliable programs. It focuses on
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 programs written in C, but many of the rules and principles are useful
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112 even if you write in another programming language. The rules often
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113 state reasons for writing in a certain way.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 Corrections or suggestions for this document should be sent to
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
116 @email{bug-standards@@gnu.org}. If you make a suggestion, please include a
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117 suggested new wording for it; our time is limited. We prefer a context
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 diff to the @file{standards.texi} or @file{make-stds.texi} files, but if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119 you don't have those files, please mail your suggestion anyway.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121 This release of the GNU Coding Standards was last updated
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122 @value{lastupdate}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
124 @cindex where to obtain @code{standards.texi}
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
125 @cindex downloading this manual
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
126 If you did not obtain this file directly from the GNU project and
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
127 recently, please check for a newer version. You can ftp the GNU Coding
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
128 Standards from any GNU FTP host in the directory
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
129 @file{/pub/gnu/standards/}. The GNU Coding Standards are available
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
130 there in several different formats: @file{standards.text},
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
131 @file{standards.texi}, @file{standards.info}, and @file{standards.dvi}.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
132 The GNU Coding Standards are also available on the GNU World Wide Web
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
133 server: @uref{http://www.gnu.org/prep/standards_toc.html}.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
134
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
135 @node Legal Issues
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136 @chapter Keeping Free Software Free
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
137 @cindex legal aspects
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 This @value{CHAPTER} discusses how you can make sure that GNU software
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
140 avoids legal difficulties, and other related issues.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
142 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143 * Reading Non-Free Code:: Referring to Proprietary Programs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144 * Contributions:: Accepting Contributions
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
145 * Trademarks:: How We Deal with Trademark Issues
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148 @node Reading Non-Free Code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149 @section Referring to Proprietary Programs
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
150 @cindex proprietary programs
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
151 @cindex avoiding proprietary code
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
153 Don't in any circumstances refer to Unix source code for or during
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154 your work on GNU! (Or to any other proprietary programs.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156 If you have a vague recollection of the internals of a Unix program,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 this does not absolutely mean you can't write an imitation of it, but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158 do try to organize the imitation internally along different lines,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 because this is likely to make the details of the Unix version
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 irrelevant and dissimilar to your results.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162 For example, Unix utilities were generally optimized to minimize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163 memory use; if you go for speed instead, your program will be very
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 different. You could keep the entire input file in core and scan it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 there instead of using stdio. Use a smarter algorithm discovered more
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166 recently than the Unix program. Eliminate use of temporary files. Do
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 it in one pass instead of two (we did this in the assembler).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169 Or, on the contrary, emphasize simplicity instead of speed. For some
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 applications, the speed of today's computers makes simpler algorithms
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 adequate.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173 Or go for generality. For example, Unix programs often have static
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 tables or fixed-size strings, which make for arbitrary limits; use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 dynamic allocation instead. Make sure your program handles NULs and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176 other funny characters in the input files. Add a programming language
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177 for extensibility and write part of the program in that language.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 Or turn some parts of the program into independently usable libraries.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 Or use a simple garbage collector instead of tracking precisely when
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181 to free memory, or use a new GNU facility such as obstacks.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183 @node Contributions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 @section Accepting Contributions
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
185 @cindex legal papers
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
186 @cindex accepting contributions
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 If the program you are working on is copyrighted by the Free Software
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 Foundation, then when someone else sends you a piece of code to add to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 the program, we need legal papers to use it---just as we asked you to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191 sign papers initially. @emph{Each} person who makes a nontrivial
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 contribution to a program must sign some sort of legal papers in order
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 for us to have clear title to the program; the main author alone is not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 enough.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 So, before adding in any contributions from other people, please tell
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 us, so we can arrange to get the papers. Then wait until we tell you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 that we have received the signed papers, before you actually use the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199 contribution.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201 This applies both before you release the program and afterward. If
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 you receive diffs to fix a bug, and they make significant changes, we
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 need legal papers for that change.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 This also applies to comments and documentation files. For copyright
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 law, comments and code are just text. Copyright applies to all kinds of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 text, so we need legal papers for all kinds.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209 We know it is frustrating to ask for legal papers; it's frustrating for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 us as well. But if you don't wait, you are going out on a limb---for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211 example, what if the contributor's employer won't sign a disclaimer?
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212 You might have to take that code out again!
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
213
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 You don't need papers for changes of a few lines here or there, since
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 they are not significant for copyright purposes. Also, you don't need
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216 papers if all you get from the suggestion is some ideas, not actual code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217 which you use. For example, if someone send you one implementation, but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 you write a different implementation of the same idea, you don't need to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 get papers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221 The very worst thing is if you forget to tell us about the other
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 contributor. We could be very embarrassed in court some day as a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223 result.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225 We have more detailed advice for maintainers of programs; if you have
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 reached the stage of actually maintaining a program for GNU (whether
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227 released or not), please ask us for a copy.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
229 @node Trademarks
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
230 @section Trademarks
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
231 @cindex trademarks
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
232
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
233 Please do not include any trademark acknowledgements in GNU software
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
234 packages or documentation.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
235
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
236 Trademark acknowledgements are the statements that such-and-such is a
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
237 trademark of so-and-so. The GNU Project has no objection to the basic
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
238 idea of trademarks, but these acknowledgements feel like kowtowing, so
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
239 we don't use them. There is no legal requirement for them.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
240
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
241 What is legally required, as regards other people's trademarks, is to
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
242 avoid using them in ways which a reader might read as naming or labeling
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
243 our own programs or activities. For example, since ``Objective C'' is
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
244 (or at least was) a trademark, we made sure to say that we provide a
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
245 ``compiler for the Objective C language'' rather than an ``Objective C
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
246 compiler''. The latter is meant to be short for the former, but it does
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
247 not explicitly state the relationship, so it could be misinterpreted as
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
248 using ``Objective C'' as a label for the compiler rather than for the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
249 language.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
250
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251 @node Design Advice
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252 @chapter General Program Design
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
253 @cindex program design
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255 This @value{CHAPTER} discusses some of the issues you should take into
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 account when designing your program.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
258 @c Standard or ANSI C
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
259 @c
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
260 @c In 1989 the American National Standards Institute (ANSI) standardized
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
261 @c C as standard X3.159-1989. In December of that year the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
262 @c International Standards Organization ISO adopted the ANSI C standard
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
263 @c making minor changes. In 1990 ANSI then re-adopted ISO standard
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
264 @c C. This version of C is known as either ANSI C or Standard C.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
265
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
266 @c A major revision of the C Standard appeared in 1999.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
267
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 @menu
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
269 * Source Language:: Which languges to use.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270 * Compatibility:: Compatibility with other implementations
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271 * Using Extensions:: Using non-standard features
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
272 * Standard C:: Using Standard C features
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
275 @node Source Language
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
276 @section Which Languages to Use
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
277 @cindex programming languges
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
278
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
279 When you want to use a language that gets compiled and runs at high
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
280 speed, the best language to use is C. Using another language is like
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
281 using a non-standard feature: it will cause trouble for users. Even if
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
282 GCC supports the other language, users may find it inconvenient to have
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
283 to install the compiler for that other language in order to build your
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
284 program. For example, if you write your program in C++, people will
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
285 have to install the GNU C++ compiler in order to compile your program.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
286
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
287 C has one other advantage over C++ and other compiled languages: more
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
288 people know C, so more people will find it easy to read and modify the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
289 program if it is written in C.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
290
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
291 So in general it is much better to use C, rather than the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
292 comparable alternatives.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
293
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
294 But there are two exceptions to that conclusion:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
295
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
296 @itemize @bullet
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
297 @item
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
298 It is no problem to use another language to write a tool specifically
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
299 intended for use with that language. That is because the only people
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
300 who want to build the tool will be those who have installed the other
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
301 language anyway.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
302
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
303 @item
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
304 If an application is of interest only to a narrow part of the community,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
305 then the question of which language it is written in has less effect on
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
306 other people, so you may as well please yourself.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
307 @end itemize
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
308
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
309 Many programs are designed to be extensible: they include an interpreter
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
310 for a language that is higher level than C. Often much of the program
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
311 is written in that language, too. The Emacs editor pioneered this
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
312 technique.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
313
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
314 @cindex GUILE
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
315 The standard extensibility interpreter for GNU software is GUILE, which
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
316 implements the language Scheme (an especially clean and simple dialect
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
317 of Lisp). @uref{http://www.gnu.org/software/guile/}. We don't reject
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
318 programs written in other ``scripting languages'' such as Perl and
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
319 Python, but using GUILE is very important for the overall consistency of
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
320 the GNU system.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
321
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
322 @node Compatibility
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
323 @section Compatibility with Other Implementations
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
324 @cindex compatibility with C and @sc{posix} standards
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
325 @cindex @sc{posix} compatibility
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327 With occasional exceptions, utility programs and libraries for GNU
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328 should be upward compatible with those in Berkeley Unix, and upward
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
329 compatible with Standard C if Standard C specifies their
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
330 behavior, and upward compatible with @sc{posix} if @sc{posix} specifies
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
331 their behavior.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
333 When these standards conflict, it is useful to offer compatibility
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
334 modes for each of them.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
336 @cindex options for compatibility
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
337 Standard C and @sc{posix} prohibit many kinds of extensions. Feel
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
338 free to make the extensions anyway, and include a @samp{--ansi},
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339 @samp{--posix}, or @samp{--compatible} option to turn them off.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340 However, if the extension has a significant chance of breaking any real
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
341 programs or scripts, then it is not really upward compatible. So you
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
342 should try to redesign its interface to make it upward compatible.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
343
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
344 @cindex @code{POSIXLY_CORRECT}, environment variable
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
345 Many GNU programs suppress extensions that conflict with @sc{posix} if the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
346 environment variable @code{POSIXLY_CORRECT} is defined (even if it is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
347 defined with a null value). Please make your program recognize this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348 variable if appropriate.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350 When a feature is used only by users (not by programs or command
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351 files), and it is done poorly in Unix, feel free to replace it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352 completely with something totally different and better. (For example,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353 @code{vi} is replaced with Emacs.) But it is nice to offer a compatible
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354 feature as well. (There is a free @code{vi} clone, so we offer it.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
356 Additional useful features are welcome regardless of whether
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
357 there is any precedent for them.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
358
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
359 @node Using Extensions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360 @section Using Non-standard Features
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
361 @cindex non-standard extensions
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
362
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363 Many GNU facilities that already exist support a number of convenient
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364 extensions over the comparable Unix facilities. Whether to use these
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365 extensions in implementing your program is a difficult question.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367 On the one hand, using the extensions can make a cleaner program.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368 On the other hand, people will not be able to build the program
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
369 unless the other GNU tools are available. This might cause the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370 program to work on fewer kinds of machines.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
371
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
372 With some extensions, it might be easy to provide both alternatives.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373 For example, you can define functions with a ``keyword'' @code{INLINE}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374 and define that as a macro to expand into either @code{inline} or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
375 nothing, depending on the compiler.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
377 In general, perhaps it is best not to use the extensions if you can
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
378 straightforwardly do without them, but to use the extensions if they
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379 are a big improvement.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
380
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
381 An exception to this rule are the large, established programs (such as
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
382 Emacs) which run on a great variety of systems. Using GNU extensions in
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
383 such programs would make many users unhappy, so we don't do that.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
384
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
385 Another exception is for programs that are used as part of compilation:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
386 anything that must be compiled with other compilers in order to
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
387 bootstrap the GNU compilation facilities. If these require the GNU
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
388 compiler, then no one can compile them without having them installed
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
389 already. That would be extremely troublesome in certain cases.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
390
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
391 @node Standard C
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
392 @section Standard C and Pre-Standard C
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
393 @cindex @sc{ansi} C standard
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
394
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
395 1989 Standard C is widespread enough now that it is ok to use its
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
396 features in new programs. There is one exception: do not ever use the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
397 ``trigraph'' feature of Standard C.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
398
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
399 1999 Standard C is not widespread yet, so please do not require its
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
400 features in programs. It is ok to use its features if they are present.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
401
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
402 However, it is easy to support pre-standard compilers in most programs,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
403 so if you know how to do that, feel free. If a program you are
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
404 maintaining has such support, you should try to keep it working.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
405
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
406 @cindex function prototypes
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
407 To support pre-standard C, instead of writing function definitions in
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
408 standard prototype form,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
409
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
410 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
411 int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
412 foo (int x, int y)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
413 @dots{}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
414 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
415
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
416 @noindent
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
417 write the definition in pre-standard style like this,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
418
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
419 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
420 int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
421 foo (x, y)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
422 int x, y;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
423 @dots{}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
424 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
425
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
426 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
427 and use a separate declaration to specify the argument prototype:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
429 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
430 int foo (int, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
431 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
432
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
433 You need such a declaration anyway, in a header file, to get the benefit
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
434 of prototypes in all the files where the function is called. And once
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
435 you have the declaration, you normally lose nothing by writing the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
436 function definition in the pre-standard style.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
437
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
438 This technique does not work for integer types narrower than @code{int}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
439 If you think of an argument as being of a type narrower than @code{int},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
440 declare it as @code{int} instead.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
441
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
442 There are a few special cases where this technique is hard to use. For
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
443 example, if a function argument needs to hold the system type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
444 @code{dev_t}, you run into trouble, because @code{dev_t} is shorter than
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
445 @code{int} on some machines; but you cannot use @code{int} instead,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
446 because @code{dev_t} is wider than @code{int} on some machines. There
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
447 is no type you can safely use on all machines in a non-standard
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
448 definition. The only way to support non-standard C and pass such an
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
449 argument is to check the width of @code{dev_t} using Autoconf and choose
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
450 the argument type accordingly. This may not be worth the trouble.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
451
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
452 In order to support pre-standard compilers that do not recognize
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
453 prototypes, you may want to use a preprocessor macro like this:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
454
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
455 @example
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
456 /* Declare the prototype for a general external function. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
457 #if defined (__STDC__) || defined (WINDOWSNT)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
458 #define P_(proto) proto
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
459 #else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
460 #define P_(proto) ()
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
461 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
462 @end example
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
463
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
464 @node Program Behavior
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
465 @chapter Program Behavior for All Programs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
466
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
467 This @value{CHAPTER} describes conventions for writing robust
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
468 software. It also describes general standards for error messages, the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
469 command line interface, and how libraries should behave.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
470
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
471 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
472 * Semantics:: Writing robust programs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
473 * Libraries:: Library behavior
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
474 * Errors:: Formatting error messages
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
475 * User Interfaces:: Standards about interfaces generally
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
476 * Graphical Interfaces:: Standards for graphical interfaces
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
477 * Command-Line Interfaces:: Standards for command line interfaces
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
478 * Option Table:: Table of long options
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
479 * Memory Usage:: When and how to care about memory needs
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
480 * File Usage:: Which files to use, and where
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
481 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
482
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
483 @node Semantics
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
484 @section Writing Robust Programs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
485
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
486 @cindex arbitrary limits on data
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
487 Avoid arbitrary limits on the length or number of @emph{any} data
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
488 structure, including file names, lines, files, and symbols, by allocating
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
489 all data structures dynamically. In most Unix utilities, ``long lines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
490 are silently truncated''. This is not acceptable in a GNU utility.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
491
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
492 @cindex @code{NUL} characters
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
493 Utilities reading files should not drop NUL characters, or any other
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
494 nonprinting characters @emph{including those with codes above 0177}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
495 The only sensible exceptions would be utilities specifically intended
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
496 for interface to certain types of terminals or printers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
497 that can't handle those characters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
498 Whenever possible, try to make programs work properly with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
499 sequences of bytes that represent multibyte characters, using encodings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
500 such as UTF-8 and others.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
501
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
502 @cindex error messages
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
503 Check every system call for an error return, unless you know you wish to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
504 ignore errors. Include the system error text (from @code{perror} or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
505 equivalent) in @emph{every} error message resulting from a failing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
506 system call, as well as the name of the file if any and the name of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
507 utility. Just ``cannot open foo.c'' or ``stat failed'' is not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
508 sufficient.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
509
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
510 @cindex @code{malloc} return value
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
511 @cindex memory allocation failure
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
512 Check every call to @code{malloc} or @code{realloc} to see if it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
513 returned zero. Check @code{realloc} even if you are making the block
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
514 smaller; in a system that rounds block sizes to a power of 2,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
515 @code{realloc} may get a different block if you ask for less space.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
516
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
517 In Unix, @code{realloc} can destroy the storage block if it returns
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
518 zero. GNU @code{realloc} does not have this bug: if it fails, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
519 original block is unchanged. Feel free to assume the bug is fixed. If
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
520 you wish to run your program on Unix, and wish to avoid lossage in this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
521 case, you can use the GNU @code{malloc}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
522
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
523 You must expect @code{free} to alter the contents of the block that was
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
524 freed. Anything you want to fetch from the block, you must fetch before
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
525 calling @code{free}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
526
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
527 If @code{malloc} fails in a noninteractive program, make that a fatal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
528 error. In an interactive program (one that reads commands from the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
529 user), it is better to abort the command and return to the command
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
530 reader loop. This allows the user to kill other processes to free up
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
531 virtual memory, and then try the command again.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
532
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
533 @cindex command-line arguments, decoding
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
534 Use @code{getopt_long} to decode arguments, unless the argument syntax
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
535 makes this unreasonable.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
536
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
537 When static storage is to be written in during program execution, use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
538 explicit C code to initialize it. Reserve C initialized declarations
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
539 for data that will not be changed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
540 @c ADR: why?
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
541
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
542 Try to avoid low-level interfaces to obscure Unix data structures (such
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
543 as file directories, utmp, or the layout of kernel memory), since these
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
544 are less likely to work compatibly. If you need to find all the files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
545 in a directory, use @code{readdir} or some other high-level interface.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
546 These are supported compatibly by GNU.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
547
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
548 @cindex signal handling
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
549 The preferred signal handling facilities are the BSD variant of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
550 @code{signal}, and the @sc{posix} @code{sigaction} function; the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
551 alternative USG @code{signal} interface is an inferior design.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
552
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
553 Nowadays, using the @sc{posix} signal functions may be the easiest way
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
554 to make a program portable. If you use @code{signal}, then on GNU/Linux
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
555 systems running GNU libc version 1, you should include
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
556 @file{bsd/signal.h} instead of @file{signal.h}, so as to get BSD
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
557 behavior. It is up to you whether to support systems where
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
558 @code{signal} has only the USG behavior, or give up on them.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
559
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
560 @cindex impossible conditions
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
561 In error checks that detect ``impossible'' conditions, just abort.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
562 There is usually no point in printing any message. These checks
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
563 indicate the existence of bugs. Whoever wants to fix the bugs will have
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
564 to read the source code and run a debugger. So explain the problem with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
565 comments in the source. The relevant data will be in variables, which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
566 are easy to examine with the debugger, so there is no point moving them
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
567 elsewhere.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
568
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
569 Do not use a count of errors as the exit status for a program.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
570 @emph{That does not work}, because exit status values are limited to 8
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
571 bits (0 through 255). A single run of the program might have 256
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
572 errors; if you try to return 256 as the exit status, the parent process
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
573 will see 0 as the status, and it will appear that the program succeeded.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
574
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
575 @cindex temporary files
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
576 @cindex @code{TMPDIR} environment variable
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
577 If you make temporary files, check the @code{TMPDIR} environment
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
578 variable; if that variable is defined, use the specified directory
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
579 instead of @file{/tmp}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
580
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
581 In addition, be aware that there is a possible security problem when
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
582 creating temporary files in world-writable directories. In C, you can
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
583 avoid this problem by creating temporary files in this manner:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
584
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
585 @example
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
586 fd = open(filename, O_WRONLY | O_CREAT | O_EXCL, 0600);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
587 @end example
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
588
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
589 @noindent
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
590 or by using the @code{mkstemps} function from libiberty.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
591
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
592 In bash, use @code{set -C} to avoid this problem.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
593
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
594 @node Libraries
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
595 @section Library Behavior
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
596 @cindex libraries
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
597
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
598 Try to make library functions reentrant. If they need to do dynamic
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
599 storage allocation, at least try to avoid any nonreentrancy aside from
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
600 that of @code{malloc} itself.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
601
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
602 Here are certain name conventions for libraries, to avoid name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
603 conflicts.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
604
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
605 Choose a name prefix for the library, more than two characters long.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
606 All external function and variable names should start with this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
607 prefix. In addition, there should only be one of these in any given
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
608 library member. This usually means putting each one in a separate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
609 source file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
610
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
611 An exception can be made when two external symbols are always used
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
612 together, so that no reasonable program could use one without the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
613 other; then they can both go in the same file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
614
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
615 External symbols that are not documented entry points for the user
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
616 should have names beginning with @samp{_}. The @samp{_} should be
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
617 followed by the chosen name prefix for the library, to prevent
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
618 collisions with other libraries. These can go in the same files with
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
619 user entry points if you like.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
620
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
621 Static functions and variables can be used as you like and need not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
622 fit any naming convention.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
623
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
624 @node Errors
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
625 @section Formatting Error Messages
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
626 @cindex formatting error messages
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
627 @cindex error messages, formatting
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
628
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
629 Error messages from compilers should look like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
630
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
631 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
632 @var{source-file-name}:@var{lineno}: @var{message}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
633 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
634
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
635 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
636 If you want to mention the column number, use this format:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
637
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
638 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
639 @var{source-file-name}:@var{lineno}:@var{column}: @var{message}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
640 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
641
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
642 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
643 Line numbers should start from 1 at the beginning of the file, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
644 column numbers should start from 1 at the beginning of the line. (Both
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
645 of these conventions are chosen for compatibility.) Calculate column
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
646 numbers assuming that space and all ASCII printing characters have
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
647 equal width, and assuming tab stops every 8 columns.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
648
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
649 Error messages from other noninteractive programs should look like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
650
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
651 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
652 @var{program}:@var{source-file-name}:@var{lineno}: @var{message}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
653 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
654
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
655 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
656 when there is an appropriate source file, or like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
657
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
658 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
659 @var{program}: @var{message}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
660 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
661
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
662 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
663 when there is no relevant source file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
664
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
665 If you want to mention the column number, use this format:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
666
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
667 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
668 @var{program}:@var{source-file-name}:@var{lineno}:@var{column}: @var{message}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
669 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
670
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
671 In an interactive program (one that is reading commands from a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
672 terminal), it is better not to include the program name in an error
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
673 message. The place to indicate which program is running is in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
674 prompt or with the screen layout. (When the same program runs with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
675 input from a source other than a terminal, it is not interactive and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
676 would do best to print error messages using the noninteractive style.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
677
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
678 The string @var{message} should not begin with a capital letter when
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
679 it follows a program name and/or file name. Also, it should not end
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
680 with a period.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
681
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
682 Error messages from interactive programs, and other messages such as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
683 usage messages, should start with a capital letter. But they should not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
684 end with a period.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
685
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
686 @node User Interfaces
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
687 @section Standards for Interfaces Generally
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
688
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
689 @cindex program name and its behavior
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
690 @cindex behavior, dependent on program's name
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
691 Please don't make the behavior of a utility depend on the name used
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
692 to invoke it. It is useful sometimes to make a link to a utility
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
693 with a different name, and that should not change what it does.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
694
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
695 Instead, use a run time option or a compilation switch or both
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
696 to select among the alternate behaviors.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
697
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
698 @cindex output device and program's behavior
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
699 Likewise, please don't make the behavior of the program depend on the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
700 type of output device it is used with. Device independence is an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
701 important principle of the system's design; do not compromise it merely
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
702 to save someone from typing an option now and then. (Variation in error
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
703 message syntax when using a terminal is ok, because that is a side issue
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
704 that people do not depend on.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
705
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
706 If you think one behavior is most useful when the output is to a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
707 terminal, and another is most useful when the output is a file or a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
708 pipe, then it is usually best to make the default behavior the one that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
709 is useful with output to a terminal, and have an option for the other
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
710 behavior.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
711
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
712 Compatibility requires certain programs to depend on the type of output
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
713 device. It would be disastrous if @code{ls} or @code{sh} did not do so
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
714 in the way all users expect. In some of these cases, we supplement the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
715 program with a preferred alternate version that does not depend on the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
716 output device type. For example, we provide a @code{dir} program much
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
717 like @code{ls} except that its default output format is always
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
718 multi-column format.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
719
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
720 @node Graphical Interfaces
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
721 @section Standards for Graphical Interfaces
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
722 @cindex graphical user interface
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
723
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
724 @cindex gtk
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
725 When you write a program that provides a graphical user interface,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
726 please make it work with X Windows and the GTK toolkit unless the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
727 functionality specifically requires some alternative (for example,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
728 ``displaying jpeg images while in console mode'').
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
729
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
730 In addition, please provide a command-line interface to control the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
731 functionality. (In many cases, the graphical user interface can be a
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
732 separate program which invokes the command-line program.) This is
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
733 so that the same jobs can be done from scripts.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
734
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
735 @cindex corba
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
736 @cindex gnome
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
737 Please also consider providing a CORBA interface (for use from GNOME), a
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
738 library interface (for use from C), and perhaps a keyboard-driven
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
739 console interface (for use by users from console mode). Once you are
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
740 doing the work to provide the functionality and the graphical interface,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
741 these won't be much extra work.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
742
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
743 @node Command-Line Interfaces
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
744 @section Standards for Command Line Interfaces
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
745 @cindex command-line interface
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
746
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
747 @findex getopt
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
748 It is a good idea to follow the @sc{posix} guidelines for the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
749 command-line options of a program. The easiest way to do this is to use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
750 @code{getopt} to parse them. Note that the GNU version of @code{getopt}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
751 will normally permit options anywhere among the arguments unless the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
752 special argument @samp{--} is used. This is not what @sc{posix}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
753 specifies; it is a GNU extension.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
754
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
755 @cindex long-named options
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
756 Please define long-named options that are equivalent to the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
757 single-letter Unix-style options. We hope to make GNU more user
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
758 friendly this way. This is easy to do with the GNU function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
759 @code{getopt_long}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
760
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
761 One of the advantages of long-named options is that they can be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
762 consistent from program to program. For example, users should be able
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
763 to expect the ``verbose'' option of any GNU program which has one, to be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
764 spelled precisely @samp{--verbose}. To achieve this uniformity, look at
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
765 the table of common long-option names when you choose the option names
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
766 for your program (@pxref{Option Table}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
767
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
768 It is usually a good idea for file names given as ordinary arguments to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
769 be input files only; any output files would be specified using options
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
770 (preferably @samp{-o} or @samp{--output}). Even if you allow an output
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
771 file name as an ordinary argument for compatibility, try to provide an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
772 option as another way to specify it. This will lead to more consistency
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
773 among GNU utilities, and fewer idiosyncracies for users to remember.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
774
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
775 @cindex standard command-line options
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
776 All programs should support two standard options: @samp{--version}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
777 and @samp{--help}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
778
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
779 @table @code
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
780 @cindex @samp{--version} option
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
781 @item --version
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
782 This option should direct the program to print information about its name,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
783 version, origin and legal status, all on standard output, and then exit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
784 successfully. Other options and arguments should be ignored once this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
785 is seen, and the program should not perform its normal function.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
786
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
787 @cindex canonical name of a program
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
788 @cindex program's canonical name
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
789 The first line is meant to be easy for a program to parse; the version
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
790 number proper starts after the last space. In addition, it contains
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
791 the canonical name for this program, in this format:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
792
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
793 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
794 GNU Emacs 19.30
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
795 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
796
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
797 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
798 The program's name should be a constant string; @emph{don't} compute it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
799 from @code{argv[0]}. The idea is to state the standard or canonical
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
800 name for the program, not its file name. There are other ways to find
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
801 out the precise file name where a command is found in @code{PATH}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
802
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
803 If the program is a subsidiary part of a larger package, mention the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
804 package name in parentheses, like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
805
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
806 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
807 emacsserver (GNU Emacs) 19.30
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
808 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
809
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
810 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
811 If the package has a version number which is different from this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
812 program's version number, you can mention the package version number
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
813 just before the close-parenthesis.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
814
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
815 If you @strong{need} to mention the version numbers of libraries which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
816 are distributed separately from the package which contains this program,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
817 you can do so by printing an additional line of version info for each
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
818 library you want to mention. Use the same format for these lines as for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
819 the first line.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
820
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
821 Please do not mention all of the libraries that the program uses ``just
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
822 for completeness''---that would produce a lot of unhelpful clutter.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
823 Please mention library version numbers only if you find in practice that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
824 they are very important to you in debugging.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
825
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
826 The following line, after the version number line or lines, should be a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
827 copyright notice. If more than one copyright notice is called for, put
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
828 each on a separate line.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
829
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
830 Next should follow a brief statement that the program is free software,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
831 and that users are free to copy and change it on certain conditions. If
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
832 the program is covered by the GNU GPL, say so here. Also mention that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
833 there is no warranty, to the extent permitted by law.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
834
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
835 It is ok to finish the output with a list of the major authors of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
836 program, as a way of giving credit.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
837
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
838 Here's an example of output that follows these rules:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
839
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
840 @smallexample
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
841 GNU Emacs 19.34.5
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
842 Copyright (C) 1996 Free Software Foundation, Inc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
843 GNU Emacs comes with NO WARRANTY,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
844 to the extent permitted by law.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
845 You may redistribute copies of GNU Emacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
846 under the terms of the GNU General Public License.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
847 For more information about these matters,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
848 see the files named COPYING.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
849 @end smallexample
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
850
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
851 You should adapt this to your program, of course, filling in the proper
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
852 year, copyright holder, name of program, and the references to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
853 distribution terms, and changing the rest of the wording as necessary.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
854
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
855 This copyright notice only needs to mention the most recent year in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
856 which changes were made---there's no need to list the years for previous
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
857 versions' changes. You don't have to mention the name of the program in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
858 these notices, if that is inconvenient, since it appeared in the first
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
859 line.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
860
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
861 @cindex @samp{--help} option
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
862 @item --help
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
863 This option should output brief documentation for how to invoke the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
864 program, on standard output, then exit successfully. Other options and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
865 arguments should be ignored once this is seen, and the program should
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
866 not perform its normal function.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
867
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
868 @cindex address for bug reports
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
869 @cindex bug reports
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
870 Near the end of the @samp{--help} option's output there should be a line
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
871 that says where to mail bug reports. It should have this format:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
872
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
873 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
874 Report bugs to @var{mailing-address}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
875 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
876 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
877
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
878 @node Option Table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
879 @section Table of Long Options
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
880 @cindex long option names
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
881 @cindex table of long options
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
882
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
883 Here is a table of long options used by GNU programs. It is surely
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
884 incomplete, but we aim to list all the options that a new program might
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
885 want to be compatible with. If you use names not already in the table,
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
886 please send @email{bug-standards@@gnu.org} a list of them, with their
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
887 meanings, so we can update the table.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
888
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
889 @c Please leave newlines between items in this table; it's much easier
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
890 @c to update when it isn't completely squashed together and unreadable.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
891 @c When there is more than one short option for a long option name, put
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
892 @c a semicolon between the lists of the programs that use them, not a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
893 @c period. --friedman
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
894
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
895 @table @samp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
896 @item after-date
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
897 @samp{-N} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
898
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
899 @item all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
900 @samp{-a} in @code{du}, @code{ls}, @code{nm}, @code{stty}, @code{uname},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
901 and @code{unexpand}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
902
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
903 @item all-text
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
904 @samp{-a} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
905
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
906 @item almost-all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
907 @samp{-A} in @code{ls}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
908
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
909 @item append
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
910 @samp{-a} in @code{etags}, @code{tee}, @code{time};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
911 @samp{-r} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
912
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
913 @item archive
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
914 @samp{-a} in @code{cp}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
915
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
916 @item archive-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
917 @samp{-n} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
918
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
919 @item arglength
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
920 @samp{-l} in @code{m4}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
921
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
922 @item ascii
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
923 @samp{-a} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
924
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
925 @item assign
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
926 @samp{-v} in @code{gawk}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
927
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
928 @item assume-new
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
929 @samp{-W} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
930
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
931 @item assume-old
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
932 @samp{-o} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
933
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
934 @item auto-check
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
935 @samp{-a} in @code{recode}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
936
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
937 @item auto-pager
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
938 @samp{-a} in @code{wdiff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
939
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
940 @item auto-reference
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
941 @samp{-A} in @code{ptx}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
942
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
943 @item avoid-wraps
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
944 @samp{-n} in @code{wdiff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
945
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
946 @item background
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
947 For server programs, run in the background.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
948
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
949 @item backward-search
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
950 @samp{-B} in @code{ctags}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
951
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
952 @item basename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
953 @samp{-f} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
954
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
955 @item batch
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
956 Used in GDB.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
957
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
958 @item baud
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
959 Used in GDB.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
960
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
961 @item before
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
962 @samp{-b} in @code{tac}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
963
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
964 @item binary
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
965 @samp{-b} in @code{cpio} and @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
966
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
967 @item bits-per-code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
968 @samp{-b} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
969
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
970 @item block-size
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
971 Used in @code{cpio} and @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
972
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
973 @item blocks
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
974 @samp{-b} in @code{head} and @code{tail}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
975
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
976 @item break-file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
977 @samp{-b} in @code{ptx}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
978
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
979 @item brief
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
980 Used in various programs to make output shorter.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
981
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
982 @item bytes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
983 @samp{-c} in @code{head}, @code{split}, and @code{tail}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
984
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
985 @item c@t{++}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
986 @samp{-C} in @code{etags}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
987
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
988 @item catenate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
989 @samp{-A} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
990
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
991 @item cd
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
992 Used in various programs to specify the directory to use.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
993
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
994 @item changes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
995 @samp{-c} in @code{chgrp} and @code{chown}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
996
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
997 @item classify
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
998 @samp{-F} in @code{ls}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
999
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1000 @item colons
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1001 @samp{-c} in @code{recode}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1002
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1003 @item command
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1004 @samp{-c} in @code{su};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1005 @samp{-x} in GDB.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1006
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1007 @item compare
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1008 @samp{-d} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1009
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1010 @item compat
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1011 Used in @code{gawk}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1012
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1013 @item compress
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1014 @samp{-Z} in @code{tar} and @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1015
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1016 @item concatenate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1017 @samp{-A} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1018
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1019 @item confirmation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1020 @samp{-w} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1021
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1022 @item context
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1023 Used in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1024
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1025 @item copyleft
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1026 @samp{-W copyleft} in @code{gawk}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1027
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1028 @item copyright
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1029 @samp{-C} in @code{ptx}, @code{recode}, and @code{wdiff};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1030 @samp{-W copyright} in @code{gawk}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1031
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1032 @item core
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1033 Used in GDB.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1034
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1035 @item count
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1036 @samp{-q} in @code{who}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1037
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1038 @item count-links
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1039 @samp{-l} in @code{du}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1040
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1041 @item create
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1042 Used in @code{tar} and @code{cpio}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1043
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1044 @item cut-mark
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1045 @samp{-c} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1046
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1047 @item cxref
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1048 @samp{-x} in @code{ctags}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1049
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1050 @item date
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1051 @samp{-d} in @code{touch}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1052
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1053 @item debug
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1054 @samp{-d} in Make and @code{m4};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1055 @samp{-t} in Bison.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1056
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1057 @item define
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1058 @samp{-D} in @code{m4}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1059
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1060 @item defines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1061 @samp{-d} in Bison and @code{ctags}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1062
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1063 @item delete
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1064 @samp{-D} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1065
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1066 @item dereference
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1067 @samp{-L} in @code{chgrp}, @code{chown}, @code{cpio}, @code{du},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1068 @code{ls}, and @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1069
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1070 @item dereference-args
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1071 @samp{-D} in @code{du}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1072
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1073 @item device
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1074 Specify an I/O device (special file name).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1075
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1076 @item diacritics
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1077 @samp{-d} in @code{recode}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1078
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1079 @item dictionary-order
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1080 @samp{-d} in @code{look}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1081
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1082 @item diff
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1083 @samp{-d} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1084
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1085 @item digits
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1086 @samp{-n} in @code{csplit}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1087
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1088 @item directory
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1089 Specify the directory to use, in various programs. In @code{ls}, it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1090 means to show directories themselves rather than their contents. In
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1091 @code{rm} and @code{ln}, it means to not treat links to directories
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1092 specially.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1093
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1094 @item discard-all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1095 @samp{-x} in @code{strip}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1096
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1097 @item discard-locals
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1098 @samp{-X} in @code{strip}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1099
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1100 @item dry-run
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1101 @samp{-n} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1102
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1103 @item ed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1104 @samp{-e} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1105
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1106 @item elide-empty-files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1107 @samp{-z} in @code{csplit}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1108
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1109 @item end-delete
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1110 @samp{-x} in @code{wdiff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1111
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1112 @item end-insert
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1113 @samp{-z} in @code{wdiff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1114
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1115 @item entire-new-file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1116 @samp{-N} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1117
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1118 @item environment-overrides
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1119 @samp{-e} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1120
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1121 @item eof
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1122 @samp{-e} in @code{xargs}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1123
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1124 @item epoch
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1125 Used in GDB.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1126
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1127 @item error-limit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1128 Used in @code{makeinfo}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1129
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1130 @item error-output
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1131 @samp{-o} in @code{m4}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1132
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1133 @item escape
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1134 @samp{-b} in @code{ls}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1135
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1136 @item exclude-from
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1137 @samp{-X} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1138
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1139 @item exec
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1140 Used in GDB.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1141
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1142 @item exit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1143 @samp{-x} in @code{xargs}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1144
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1145 @item exit-0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1146 @samp{-e} in @code{unshar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1147
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1148 @item expand-tabs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1149 @samp{-t} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1150
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1151 @item expression
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1152 @samp{-e} in @code{sed}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1153
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1154 @item extern-only
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1155 @samp{-g} in @code{nm}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1156
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1157 @item extract
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1158 @samp{-i} in @code{cpio};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1159 @samp{-x} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1160
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1161 @item faces
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1162 @samp{-f} in @code{finger}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1163
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1164 @item fast
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1165 @samp{-f} in @code{su}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1166
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1167 @item fatal-warnings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1168 @samp{-E} in @code{m4}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1169
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1170 @item file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1171 @samp{-f} in @code{info}, @code{gawk}, Make, @code{mt}, and @code{tar};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1172 @samp{-n} in @code{sed};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1173 @samp{-r} in @code{touch}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1174
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1175 @item field-separator
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1176 @samp{-F} in @code{gawk}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1177
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1178 @item file-prefix
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1179 @samp{-b} in Bison.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1180
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1181 @item file-type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1182 @samp{-F} in @code{ls}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1183
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1184 @item files-from
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1185 @samp{-T} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1186
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1187 @item fill-column
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1188 Used in @code{makeinfo}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1189
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1190 @item flag-truncation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1191 @samp{-F} in @code{ptx}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1192
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1193 @item fixed-output-files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1194 @samp{-y} in Bison.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1195
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1196 @item follow
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1197 @samp{-f} in @code{tail}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1198
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1199 @item footnote-style
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1200 Used in @code{makeinfo}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1201
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1202 @item force
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1203 @samp{-f} in @code{cp}, @code{ln}, @code{mv}, and @code{rm}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1204
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1205 @item force-prefix
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1206 @samp{-F} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1207
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1208 @item foreground
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1209 For server programs, run in the foreground;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1210 in other words, don't do anything special to run the server
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1211 in the background.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1212
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1213 @item format
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1214 Used in @code{ls}, @code{time}, and @code{ptx}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1215
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1216 @item freeze-state
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1217 @samp{-F} in @code{m4}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1218
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1219 @item fullname
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1220 Used in GDB.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1221
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1222 @item gap-size
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1223 @samp{-g} in @code{ptx}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1224
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1225 @item get
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1226 @samp{-x} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1227
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1228 @item graphic
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1229 @samp{-i} in @code{ul}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1230
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1231 @item graphics
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1232 @samp{-g} in @code{recode}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1233
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1234 @item group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1235 @samp{-g} in @code{install}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1236
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1237 @item gzip
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1238 @samp{-z} in @code{tar} and @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1239
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1240 @item hashsize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1241 @samp{-H} in @code{m4}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1242
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1243 @item header
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1244 @samp{-h} in @code{objdump} and @code{recode}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1245
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1246 @item heading
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1247 @samp{-H} in @code{who}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1248
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1249 @item help
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1250 Used to ask for brief usage information.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1251
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1252 @item here-delimiter
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1253 @samp{-d} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1254
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1255 @item hide-control-chars
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1256 @samp{-q} in @code{ls}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1257
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
1258 @item html
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
1259 In @code{makeinfo}, output HTML.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
1260
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1261 @item idle
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1262 @samp{-u} in @code{who}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1263
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1264 @item ifdef
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1265 @samp{-D} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1266
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1267 @item ignore
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1268 @samp{-I} in @code{ls};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1269 @samp{-x} in @code{recode}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1270
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1271 @item ignore-all-space
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1272 @samp{-w} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1273
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1274 @item ignore-backups
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1275 @samp{-B} in @code{ls}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1276
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1277 @item ignore-blank-lines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1278 @samp{-B} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1279
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1280 @item ignore-case
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1281 @samp{-f} in @code{look} and @code{ptx};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1282 @samp{-i} in @code{diff} and @code{wdiff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1283
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1284 @item ignore-errors
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1285 @samp{-i} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1286
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1287 @item ignore-file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1288 @samp{-i} in @code{ptx}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1289
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1290 @item ignore-indentation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1291 @samp{-I} in @code{etags}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1292
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1293 @item ignore-init-file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1294 @samp{-f} in Oleo.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1295
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1296 @item ignore-interrupts
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1297 @samp{-i} in @code{tee}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1298
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1299 @item ignore-matching-lines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1300 @samp{-I} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1301
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1302 @item ignore-space-change
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1303 @samp{-b} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1304
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1305 @item ignore-zeros
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1306 @samp{-i} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1307
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1308 @item include
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1309 @samp{-i} in @code{etags};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1310 @samp{-I} in @code{m4}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1311
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1312 @item include-dir
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1313 @samp{-I} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1314
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1315 @item incremental
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1316 @samp{-G} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1317
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1318 @item info
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1319 @samp{-i}, @samp{-l}, and @samp{-m} in Finger.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1320
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
1321 @item init-file
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
1322 In some programs, specify the name of the file to read as the user's
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
1323 init file.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
1324
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1325 @item initial
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1326 @samp{-i} in @code{expand}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1327
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1328 @item initial-tab
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1329 @samp{-T} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1330
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1331 @item inode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1332 @samp{-i} in @code{ls}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1333
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1334 @item interactive
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1335 @samp{-i} in @code{cp}, @code{ln}, @code{mv}, @code{rm};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1336 @samp{-e} in @code{m4};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1337 @samp{-p} in @code{xargs};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1338 @samp{-w} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1339
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1340 @item intermix-type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1341 @samp{-p} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1342
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
1343 @item iso-8601
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
1344 Used in @code{date}
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
1345
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1346 @item jobs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1347 @samp{-j} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1348
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1349 @item just-print
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1350 @samp{-n} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1351
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1352 @item keep-going
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1353 @samp{-k} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1354
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1355 @item keep-files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1356 @samp{-k} in @code{csplit}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1357
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1358 @item kilobytes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1359 @samp{-k} in @code{du} and @code{ls}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1360
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1361 @item language
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1362 @samp{-l} in @code{etags}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1363
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1364 @item less-mode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1365 @samp{-l} in @code{wdiff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1366
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1367 @item level-for-gzip
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1368 @samp{-g} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1369
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1370 @item line-bytes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1371 @samp{-C} in @code{split}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1372
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1373 @item lines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1374 Used in @code{split}, @code{head}, and @code{tail}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1375
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1376 @item link
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1377 @samp{-l} in @code{cpio}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1378
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1379 @item lint
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1380 @itemx lint-old
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1381 Used in @code{gawk}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1382
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1383 @item list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1384 @samp{-t} in @code{cpio};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1385 @samp{-l} in @code{recode}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1386
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1387 @item list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1388 @samp{-t} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1389
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1390 @item literal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1391 @samp{-N} in @code{ls}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1392
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1393 @item load-average
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1394 @samp{-l} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1395
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1396 @item login
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1397 Used in @code{su}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1398
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1399 @item machine
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1400 No listing of which programs already use this;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1401 someone should check to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1402 see if any actually do, and tell @email{gnu@@gnu.org}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1403
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1404 @item macro-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1405 @samp{-M} in @code{ptx}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1406
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1407 @item mail
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1408 @samp{-m} in @code{hello} and @code{uname}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1409
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1410 @item make-directories
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1411 @samp{-d} in @code{cpio}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1412
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1413 @item makefile
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1414 @samp{-f} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1415
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1416 @item mapped
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1417 Used in GDB.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1418
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1419 @item max-args
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1420 @samp{-n} in @code{xargs}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1421
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1422 @item max-chars
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1423 @samp{-n} in @code{xargs}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1424
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1425 @item max-lines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1426 @samp{-l} in @code{xargs}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1427
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1428 @item max-load
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1429 @samp{-l} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1430
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1431 @item max-procs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1432 @samp{-P} in @code{xargs}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1433
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1434 @item mesg
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1435 @samp{-T} in @code{who}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1436
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1437 @item message
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1438 @samp{-T} in @code{who}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1439
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1440 @item minimal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1441 @samp{-d} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1442
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1443 @item mixed-uuencode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1444 @samp{-M} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1445
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1446 @item mode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1447 @samp{-m} in @code{install}, @code{mkdir}, and @code{mkfifo}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1448
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1449 @item modification-time
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1450 @samp{-m} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1451
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1452 @item multi-volume
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1453 @samp{-M} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1454
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1455 @item name-prefix
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1456 @samp{-a} in Bison.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1457
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1458 @item nesting-limit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1459 @samp{-L} in @code{m4}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1460
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1461 @item net-headers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1462 @samp{-a} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1463
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1464 @item new-file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1465 @samp{-W} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1466
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1467 @item no-builtin-rules
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1468 @samp{-r} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1469
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1470 @item no-character-count
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1471 @samp{-w} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1472
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1473 @item no-check-existing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1474 @samp{-x} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1475
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1476 @item no-common
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1477 @samp{-3} in @code{wdiff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1478
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1479 @item no-create
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1480 @samp{-c} in @code{touch}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1481
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1482 @item no-defines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1483 @samp{-D} in @code{etags}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1484
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1485 @item no-deleted
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1486 @samp{-1} in @code{wdiff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1487
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1488 @item no-dereference
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1489 @samp{-d} in @code{cp}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1490
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1491 @item no-inserted
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1492 @samp{-2} in @code{wdiff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1493
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1494 @item no-keep-going
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1495 @samp{-S} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1496
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1497 @item no-lines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1498 @samp{-l} in Bison.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1499
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1500 @item no-piping
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1501 @samp{-P} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1502
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1503 @item no-prof
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1504 @samp{-e} in @code{gprof}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1505
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1506 @item no-regex
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1507 @samp{-R} in @code{etags}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1508
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1509 @item no-sort
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1510 @samp{-p} in @code{nm}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1511
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1512 @item no-split
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1513 Used in @code{makeinfo}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1514
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1515 @item no-static
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1516 @samp{-a} in @code{gprof}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1517
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1518 @item no-time
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1519 @samp{-E} in @code{gprof}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1520
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1521 @item no-timestamp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1522 @samp{-m} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1523
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1524 @item no-validate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1525 Used in @code{makeinfo}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1526
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1527 @item no-wait
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1528 Used in @code{emacsclient}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1529
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1530 @item no-warn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1531 Used in various programs to inhibit warnings.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1532
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1533 @item node
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1534 @samp{-n} in @code{info}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1535
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1536 @item nodename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1537 @samp{-n} in @code{uname}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1538
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1539 @item nonmatching
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1540 @samp{-f} in @code{cpio}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1541
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1542 @item nstuff
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1543 @samp{-n} in @code{objdump}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1544
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1545 @item null
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1546 @samp{-0} in @code{xargs}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1547
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1548 @item number
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1549 @samp{-n} in @code{cat}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1550
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1551 @item number-nonblank
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1552 @samp{-b} in @code{cat}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1553
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1554 @item numeric-sort
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1555 @samp{-n} in @code{nm}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1556
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1557 @item numeric-uid-gid
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1558 @samp{-n} in @code{cpio} and @code{ls}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1559
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1560 @item nx
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1561 Used in GDB.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1562
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1563 @item old-archive
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1564 @samp{-o} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1565
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1566 @item old-file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1567 @samp{-o} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1568
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1569 @item one-file-system
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1570 @samp{-l} in @code{tar}, @code{cp}, and @code{du}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1571
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1572 @item only-file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1573 @samp{-o} in @code{ptx}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1574
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1575 @item only-prof
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1576 @samp{-f} in @code{gprof}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1577
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1578 @item only-time
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1579 @samp{-F} in @code{gprof}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1580
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1581 @item options
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1582 @samp{-o} in @code{getopt}, @code{fdlist}, @code{fdmount},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1583 @code{fdmountd}, and @code{fdumount}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1584
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1585 @item output
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1586 In various programs, specify the output file name.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1587
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1588 @item output-prefix
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1589 @samp{-o} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1590
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1591 @item override
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1592 @samp{-o} in @code{rm}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1593
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1594 @item overwrite
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1595 @samp{-c} in @code{unshar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1596
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1597 @item owner
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1598 @samp{-o} in @code{install}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1599
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1600 @item paginate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1601 @samp{-l} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1602
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1603 @item paragraph-indent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1604 Used in @code{makeinfo}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1605
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1606 @item parents
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1607 @samp{-p} in @code{mkdir} and @code{rmdir}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1608
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1609 @item pass-all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1610 @samp{-p} in @code{ul}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1611
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1612 @item pass-through
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1613 @samp{-p} in @code{cpio}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1614
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1615 @item port
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1616 @samp{-P} in @code{finger}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1617
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1618 @item portability
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1619 @samp{-c} in @code{cpio} and @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1620
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1621 @item posix
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1622 Used in @code{gawk}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1623
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1624 @item prefix-builtins
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1625 @samp{-P} in @code{m4}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1626
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1627 @item prefix
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1628 @samp{-f} in @code{csplit}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1629
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1630 @item preserve
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1631 Used in @code{tar} and @code{cp}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1632
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1633 @item preserve-environment
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1634 @samp{-p} in @code{su}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1635
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1636 @item preserve-modification-time
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1637 @samp{-m} in @code{cpio}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1638
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1639 @item preserve-order
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1640 @samp{-s} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1641
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1642 @item preserve-permissions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1643 @samp{-p} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1644
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1645 @item print
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1646 @samp{-l} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1647
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1648 @item print-chars
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1649 @samp{-L} in @code{cmp}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1650
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1651 @item print-data-base
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1652 @samp{-p} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1653
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1654 @item print-directory
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1655 @samp{-w} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1656
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1657 @item print-file-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1658 @samp{-o} in @code{nm}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1659
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1660 @item print-symdefs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1661 @samp{-s} in @code{nm}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1662
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1663 @item printer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1664 @samp{-p} in @code{wdiff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1665
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1666 @item prompt
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1667 @samp{-p} in @code{ed}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1668
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1669 @item proxy
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1670 Specify an HTTP proxy.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1671
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1672 @item query-user
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1673 @samp{-X} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1674
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1675 @item question
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1676 @samp{-q} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1677
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1678 @item quiet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1679 Used in many programs to inhibit the usual output. @strong{Note:} every
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1680 program accepting @samp{--quiet} should accept @samp{--silent} as a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1681 synonym.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1682
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1683 @item quiet-unshar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1684 @samp{-Q} in @code{shar}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1685
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1686 @item quote-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1687 @samp{-Q} in @code{ls}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1688
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1689 @item rcs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1690 @samp{-n} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1691
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1692 @item re-interval
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1693 Used in @code{gawk}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1694
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1695 @item read-full-blocks
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1696 @samp{-B} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1697
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1698 @item readnow
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1699 Used in GDB.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1700
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1701 @item recon
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1702 @samp{-n} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1703
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1704 @item record-number
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1705 @samp{-R} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1706
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1707 @item recursive
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1708 Used in @code{chgrp}, @code{chown}, @code{cp}, @code{ls}, @code{diff},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1709 and @code{rm}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1710
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1711 @item reference-limit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1712 Used in @code{makeinfo}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1713
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1714 @item references
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1715 @samp{-r} in @code{ptx}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1716
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1717 @item regex
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1718 @samp{-r} in @code{tac} and @code{etags}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1719
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1720 @item release
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1721 @samp{-r} in @code{uname}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1722
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1723 @item reload-state
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1724 @samp{-R} in @code{m4}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1725
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1726 @item relocation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1727 @samp{-r} in @code{objdump}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1728
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1729 @item rename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1730 @samp{-r} in @code{cpio}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1731
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1732 @item replace
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1733 @samp{-i} in @code{xargs}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1734
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1735 @item report-identical-files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1736 @samp{-s} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1737
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1738 @item reset-access-time
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1739 @samp{-a} in @code{cpio}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1740
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1741 @item reverse
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1742 @samp{-r} in @code{ls} and @code{nm}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1743
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1744 @item reversed-ed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1745 @samp{-f} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1746
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1747 @item right-side-defs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1748 @samp{-R} in @code{ptx}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1749
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1750 @item same-order
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1751 @samp{-s} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1752
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1753 @item same-permissions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1754 @samp{-p} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1755
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1756 @item save
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1757 @samp{-g} in @code{stty}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1758
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1759 @item se
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1760 Used in GDB.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1761
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1762 @item sentence-regexp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1763 @samp{-S} in @code{ptx}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1764
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1765 @item separate-dirs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1766 @samp{-S} in @code{du}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1767
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1768 @item separator
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1769 @samp{-s} in @code{tac}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1770
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1771 @item sequence
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1772 Used by @code{recode} to chose files or pipes for sequencing passes.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1773
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1774 @item shell
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1775 @samp{-s} in @code{su}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1776
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1777 @item show-all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1778 @samp{-A} in @code{cat}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1779
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1780 @item show-c-function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1781 @samp{-p} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1782
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1783 @item show-ends
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1784 @samp{-E} in @code{cat}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1785
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1786 @item show-function-line
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1787 @samp{-F} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1788
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1789 @item show-tabs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1790 @samp{-T} in @code{cat}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1791
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1792 @item silent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1793 Used in many programs to inhibit the usual output.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1794 @strong{Note:} every program accepting
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1795 @samp{--silent} should accept @samp{--quiet} as a synonym.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1796
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1797 @item size
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1798 @samp{-s} in @code{ls}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1799
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1800 @item socket
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1801 Specify a file descriptor for a network server to use for its socket,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1802 instead of opening and binding a new socket. This provides a way to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1803 run, in a nonpriveledged process, a server that normally needs a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1804 reserved port number.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1805
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1806 @item sort
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1807 Used in @code{ls}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1808
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1809 @item source
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1810 @samp{-W source} in @code{gawk}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1811
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1812 @item sparse
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1813 @samp{-S} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1814
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1815 @item speed-large-files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1816 @samp{-H} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1817
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1818 @item split-at
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1819 @samp{-E} in @code{unshar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1820
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1821 @item split-size-limit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1822 @samp{-L} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1823
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1824 @item squeeze-blank
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1825 @samp{-s} in @code{cat}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1826
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1827 @item start-delete
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1828 @samp{-w} in @code{wdiff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1829
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1830 @item start-insert
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1831 @samp{-y} in @code{wdiff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1832
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1833 @item starting-file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1834 Used in @code{tar} and @code{diff} to specify which file within
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1835 a directory to start processing with.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1836
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1837 @item statistics
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1838 @samp{-s} in @code{wdiff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1839
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1840 @item stdin-file-list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1841 @samp{-S} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1842
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1843 @item stop
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1844 @samp{-S} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1845
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1846 @item strict
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1847 @samp{-s} in @code{recode}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1848
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1849 @item strip
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1850 @samp{-s} in @code{install}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1851
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1852 @item strip-all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1853 @samp{-s} in @code{strip}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1854
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1855 @item strip-debug
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1856 @samp{-S} in @code{strip}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1857
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1858 @item submitter
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1859 @samp{-s} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1860
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1861 @item suffix
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1862 @samp{-S} in @code{cp}, @code{ln}, @code{mv}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1863
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1864 @item suffix-format
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1865 @samp{-b} in @code{csplit}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1866
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1867 @item sum
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1868 @samp{-s} in @code{gprof}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1869
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1870 @item summarize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1871 @samp{-s} in @code{du}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1872
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1873 @item symbolic
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1874 @samp{-s} in @code{ln}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1875
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1876 @item symbols
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1877 Used in GDB and @code{objdump}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1878
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1879 @item synclines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1880 @samp{-s} in @code{m4}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1881
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1882 @item sysname
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1883 @samp{-s} in @code{uname}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1884
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1885 @item tabs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1886 @samp{-t} in @code{expand} and @code{unexpand}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1887
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1888 @item tabsize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1889 @samp{-T} in @code{ls}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1890
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1891 @item terminal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1892 @samp{-T} in @code{tput} and @code{ul}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1893 @samp{-t} in @code{wdiff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1894
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1895 @item text
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1896 @samp{-a} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1897
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1898 @item text-files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1899 @samp{-T} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1900
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1901 @item time
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1902 Used in @code{ls} and @code{touch}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1903
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1904 @item timeout
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1905 Specify how long to wait before giving up on some operation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1906
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1907 @item to-stdout
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1908 @samp{-O} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1909
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1910 @item total
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1911 @samp{-c} in @code{du}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1912
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1913 @item touch
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1914 @samp{-t} in Make, @code{ranlib}, and @code{recode}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1915
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1916 @item trace
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1917 @samp{-t} in @code{m4}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1918
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1919 @item traditional
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1920 @samp{-t} in @code{hello};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1921 @samp{-W traditional} in @code{gawk};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1922 @samp{-G} in @code{ed}, @code{m4}, and @code{ptx}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1923
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1924 @item tty
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1925 Used in GDB.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1926
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1927 @item typedefs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1928 @samp{-t} in @code{ctags}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1929
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1930 @item typedefs-and-c++
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1931 @samp{-T} in @code{ctags}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1932
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1933 @item typeset-mode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1934 @samp{-t} in @code{ptx}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1935
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1936 @item uncompress
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1937 @samp{-z} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1938
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1939 @item unconditional
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1940 @samp{-u} in @code{cpio}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1941
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1942 @item undefine
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1943 @samp{-U} in @code{m4}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1944
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1945 @item undefined-only
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1946 @samp{-u} in @code{nm}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1947
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1948 @item update
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1949 @samp{-u} in @code{cp}, @code{ctags}, @code{mv}, @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1950
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1951 @item usage
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1952 Used in @code{gawk}; same as @samp{--help}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1953
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1954 @item uuencode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1955 @samp{-B} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1956
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1957 @item vanilla-operation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1958 @samp{-V} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1959
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1960 @item verbose
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1961 Print more information about progress. Many programs support this.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1962
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1963 @item verify
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1964 @samp{-W} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1965
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1966 @item version
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1967 Print the version number.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1968
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1969 @item version-control
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1970 @samp{-V} in @code{cp}, @code{ln}, @code{mv}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1971
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1972 @item vgrind
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1973 @samp{-v} in @code{ctags}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1974
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1975 @item volume
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1976 @samp{-V} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1977
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1978 @item what-if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1979 @samp{-W} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1980
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1981 @item whole-size-limit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1982 @samp{-l} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1983
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1984 @item width
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1985 @samp{-w} in @code{ls} and @code{ptx}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1986
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1987 @item word-regexp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1988 @samp{-W} in @code{ptx}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1989
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1990 @item writable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1991 @samp{-T} in @code{who}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1992
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1993 @item zeros
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1994 @samp{-z} in @code{gprof}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1995 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1996
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1997 @node Memory Usage
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1998 @section Memory Usage
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
1999 @cindex memory usage
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2000
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2001 If a program typically uses just a few meg of memory, don't bother making any
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2002 effort to reduce memory usage. For example, if it is impractical for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2003 other reasons to operate on files more than a few meg long, it is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2004 reasonable to read entire input files into core to operate on them.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2005
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2006 However, for programs such as @code{cat} or @code{tail}, that can
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2007 usefully operate on very large files, it is important to avoid using a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2008 technique that would artificially limit the size of files it can handle.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2009 If a program works by lines and could be applied to arbitrary
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2010 user-supplied input files, it should keep only a line in memory, because
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2011 this is not very hard and users will want to be able to operate on input
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2012 files that are bigger than will fit in core all at once.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2013
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2014 If your program creates complicated data structures, just make them in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2015 core and give a fatal error if @code{malloc} returns zero.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2016
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2017 @node File Usage
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2018 @section File Usage
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2019 @cindex file usage
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2020
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2021 Programs should be prepared to operate when @file{/usr} and @file{/etc}
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2022 are read-only file systems. Thus, if the program manages log files,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2023 lock files, backup files, score files, or any other files which are
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2024 modified for internal purposes, these files should not be stored in
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2025 @file{/usr} or @file{/etc}.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2026
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2027 There are two exceptions. @file{/etc} is used to store system
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2028 configuration information; it is reasonable for a program to modify
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2029 files in @file{/etc} when its job is to update the system configuration.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2030 Also, if the user explicitly asks to modify one file in a directory, it
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2031 is reasonable for the program to store other files in the same
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2032 directory.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2033
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2034 @node Writing C
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2035 @chapter Making The Best Use of C
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2036
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2037 This @value{CHAPTER} provides advice on how best to use the C language
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2038 when writing GNU software.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2039
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2040 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2041 * Formatting:: Formatting Your Source Code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2042 * Comments:: Commenting Your Work
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2043 * Syntactic Conventions:: Clean Use of C Constructs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2044 * Names:: Naming Variables and Functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2045 * System Portability:: Portability between different operating systems
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2046 * CPU Portability:: Supporting the range of CPU types
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2047 * System Functions:: Portability and ``standard'' library functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2048 * Internationalization:: Techniques for internationalization
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2049 * Mmap:: How you can safely use @code{mmap}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2050 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2051
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2052 @node Formatting
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2053 @section Formatting Your Source Code
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2054 @cindex formatting source code
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2055
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2056 @cindex open brace
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2057 @cindex braces, in C source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2058 It is important to put the open-brace that starts the body of a C
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2059 function in column zero, and avoid putting any other open-brace or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2060 open-parenthesis or open-bracket in column zero. Several tools look
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2061 for open-braces in column zero to find the beginnings of C functions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2062 These tools will not work on code not formatted that way.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2063
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2064 It is also important for function definitions to start the name of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2065 function in column zero. This helps people to search for function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2066 definitions, and may also help certain tools recognize them. Thus,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2067 the proper format is this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2068
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2069 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2070 static char *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2071 concat (s1, s2) /* Name starts in column zero here */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2072 char *s1, *s2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2073 @{ /* Open brace in column zero here */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2074 @dots{}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2075 @}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2076 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2077
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2078 @noindent
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2079 or, if you want to use Standard C syntax, format the definition like
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2080 this:
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2081
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2082 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2083 static char *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2084 concat (char *s1, char *s2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2085 @{
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2086 @dots{}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2087 @}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2088 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2089
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2090 In Standard C, if the arguments don't fit nicely on one line,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2091 split it like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2092
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2093 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2094 int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2095 lots_of_args (int an_integer, long a_long, short a_short,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2096 double a_double, float a_float)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2097 @dots{}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2098 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2099
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2100 The rest of this section gives our recommendations for other aspects of
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2101 C formatting style, which is also the default style of the @code{indent}
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2102 program in version 1.2 and newer. It corresponds to the options
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2103
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2104 @smallexample
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2105 -nbad -bap -nbc -bbo -bl -bli2 -bls -ncdb -nce -cp1 -cs -di2
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2106 -ndj -nfc1 -nfca -hnl -i2 -ip5 -lp -pcs -psl -nsc -nsob
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2107 @end smallexample
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2108
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2109 We don't think of these recommendations as requirements, because it
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2110 causes no problems for users if two different programs have different
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2111 formatting styles.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2112
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2113 But whatever style you use, please use it consistently, since a mixture
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2114 of styles within one program tends to look ugly. If you are
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2115 contributing changes to an existing program, please follow the style of
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2116 that program.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2117
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2118 For the body of the function, our recommended style looks like this:
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2119
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2120 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2121 if (x < foo (y, z))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2122 haha = bar[4] + 5;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2123 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2124 @{
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2125 while (z)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2126 @{
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2127 haha += foo (z, z);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2128 z--;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2129 @}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2130 return ++x + bar ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2131 @}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2132 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2133
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2134 @cindex spaces before open-paren
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2135 We find it easier to read a program when it has spaces before the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2136 open-parentheses and after the commas. Especially after the commas.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2137
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2138 When you split an expression into multiple lines, split it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2139 before an operator, not after one. Here is the right way:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2140
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2141 @cindex expressions, splitting
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2142 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2143 if (foo_this_is_long && bar > win (x, y, z)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2144 && remaining_condition)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2145 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2146
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2147 Try to avoid having two operators of different precedence at the same
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2148 level of indentation. For example, don't write this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2149
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2150 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2151 mode = (inmode[j] == VOIDmode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2152 || GET_MODE_SIZE (outmode[j]) > GET_MODE_SIZE (inmode[j])
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2153 ? outmode[j] : inmode[j]);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2154 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2155
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2156 Instead, use extra parentheses so that the indentation shows the nesting:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2157
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2158 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2159 mode = ((inmode[j] == VOIDmode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2160 || (GET_MODE_SIZE (outmode[j]) > GET_MODE_SIZE (inmode[j])))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2161 ? outmode[j] : inmode[j]);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2162 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2163
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2164 Insert extra parentheses so that Emacs will indent the code properly.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2165 For example, the following indentation looks nice if you do it by hand,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2166
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2167 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2168 v = rup->ru_utime.tv_sec*1000 + rup->ru_utime.tv_usec/1000
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2169 + rup->ru_stime.tv_sec*1000 + rup->ru_stime.tv_usec/1000;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2170 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2171
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2172 @noindent
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2173 but Emacs would alter it. Adding a set of parentheses produces
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2174 something that looks equally nice, and which Emacs will preserve:
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2175
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2176 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2177 v = (rup->ru_utime.tv_sec*1000 + rup->ru_utime.tv_usec/1000
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2178 + rup->ru_stime.tv_sec*1000 + rup->ru_stime.tv_usec/1000);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2179 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2180
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2181 Format do-while statements like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2182
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2183 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2184 do
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2185 @{
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2186 a = foo (a);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2187 @}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2188 while (a > 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2189 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2190
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2191 @cindex formfeed
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2192 @cindex control-L
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2193 Please use formfeed characters (control-L) to divide the program into
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2194 pages at logical places (but not within a function). It does not matter
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2195 just how long the pages are, since they do not have to fit on a printed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2196 page. The formfeeds should appear alone on lines by themselves.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2197
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2198 @node Comments
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2199 @section Commenting Your Work
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2200 @cindex commenting
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2201
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2202 Every program should start with a comment saying briefly what it is for.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2203 Example: @samp{fmt - filter for simple filling of text}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2204
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2205 Please write the comments in a GNU program in English, because English
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2206 is the one language that nearly all programmers in all countries can
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2207 read. If you do not write English well, please write comments in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2208 English as well as you can, then ask other people to help rewrite them.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2209 If you can't write comments in English, please find someone to work with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2210 you and translate your comments into English.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2211
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2212 Please put a comment on each function saying what the function does,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2213 what sorts of arguments it gets, and what the possible values of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2214 arguments mean and are used for. It is not necessary to duplicate in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2215 words the meaning of the C argument declarations, if a C type is being
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2216 used in its customary fashion. If there is anything nonstandard about
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2217 its use (such as an argument of type @code{char *} which is really the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2218 address of the second character of a string, not the first), or any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2219 possible values that would not work the way one would expect (such as,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2220 that strings containing newlines are not guaranteed to work), be sure
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2221 to say so.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2222
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2223 Also explain the significance of the return value, if there is one.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2224
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2225 Please put two spaces after the end of a sentence in your comments, so
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2226 that the Emacs sentence commands will work. Also, please write
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2227 complete sentences and capitalize the first word. If a lower-case
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2228 identifier comes at the beginning of a sentence, don't capitalize it!
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2229 Changing the spelling makes it a different identifier. If you don't
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2230 like starting a sentence with a lower case letter, write the sentence
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2231 differently (e.g., ``The identifier lower-case is @dots{}'').
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2232
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2233 The comment on a function is much clearer if you use the argument
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2234 names to speak about the argument values. The variable name itself
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2235 should be lower case, but write it in upper case when you are speaking
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2236 about the value rather than the variable itself. Thus, ``the inode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2237 number NODE_NUM'' rather than ``an inode''.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2238
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2239 There is usually no purpose in restating the name of the function in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2240 the comment before it, because the reader can see that for himself.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2241 There might be an exception when the comment is so long that the function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2242 itself would be off the bottom of the screen.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2243
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2244 There should be a comment on each static variable as well, like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2245
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2246 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2247 /* Nonzero means truncate lines in the display;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2248 zero means continue them. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2249 int truncate_lines;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2250 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2251
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2252 @cindex conditionals, comments for
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2253 @cindex @code{#endif}, commenting
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2254 Every @samp{#endif} should have a comment, except in the case of short
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2255 conditionals (just a few lines) that are not nested. The comment should
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2256 state the condition of the conditional that is ending, @emph{including
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2257 its sense}. @samp{#else} should have a comment describing the condition
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2258 @emph{and sense} of the code that follows. For example:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2259
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2260 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2261 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2262 #ifdef foo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2263 @dots{}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2264 #else /* not foo */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2265 @dots{}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2266 #endif /* not foo */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2267 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2268 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2269 #ifdef foo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2270 @dots{}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2271 #endif /* foo */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2272 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2273 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2274
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2275 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2276 but, by contrast, write the comments this way for a @samp{#ifndef}:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2277
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2278 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2279 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2280 #ifndef foo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2281 @dots{}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2282 #else /* foo */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2283 @dots{}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2284 #endif /* foo */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2285 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2286 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2287 #ifndef foo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2288 @dots{}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2289 #endif /* not foo */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2290 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2291 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2292
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2293 @node Syntactic Conventions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2294 @section Clean Use of C Constructs
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2295 @cindex syntactic conventions
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2296
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2297 @cindex implicit @code{int}
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2298 @cindex function argument, declaring
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2299 Please explicitly declare the types of all objects. For example, you
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2300 should explicitly declare all arguments to functions, and you should
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2301 declare functions to return @code{int} rather than omitting the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2302 @code{int}.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2303
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2304 @cindex compiler warnings
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2305 @cindex @samp{-Wall} compiler option
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2306 Some programmers like to use the GCC @samp{-Wall} option, and change the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2307 code whenever it issues a warning. If you want to do this, then do.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2308 Other programmers prefer not to use @samp{-Wall}, because it gives
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2309 warnings for valid and legitimate code which they do not want to change.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2310 If you want to do this, then do. The compiler should be your servant,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2311 not your master.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2312
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2313 Declarations of external functions and functions to appear later in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2314 source file should all go in one place near the beginning of the file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2315 (somewhere before the first function definition in the file), or else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2316 should go in a header file. Don't put @code{extern} declarations inside
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2317 functions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2318
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2319 @cindex temporary variables
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2320 It used to be common practice to use the same local variables (with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2321 names like @code{tem}) over and over for different values within one
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2322 function. Instead of doing this, it is better declare a separate local
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2323 variable for each distinct purpose, and give it a name which is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2324 meaningful. This not only makes programs easier to understand, it also
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2325 facilitates optimization by good compilers. You can also move the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2326 declaration of each local variable into the smallest scope that includes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2327 all its uses. This makes the program even cleaner.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2328
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2329 Don't use local variables or parameters that shadow global identifiers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2330
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2331 @cindex multiple variables in a line
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2332 Don't declare multiple variables in one declaration that spans lines.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2333 Start a new declaration on each line, instead. For example, instead
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2334 of this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2335
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2336 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2337 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2338 int foo,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2339 bar;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2340 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2341 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2342
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2343 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2344 write either this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2345
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2346 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2347 int foo, bar;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2348 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2349
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2350 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2351 or this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2352
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2353 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2354 int foo;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2355 int bar;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2356 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2357
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2358 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2359 (If they are global variables, each should have a comment preceding it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2360 anyway.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2361
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2362 When you have an @code{if}-@code{else} statement nested in another
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2363 @code{if} statement, always put braces around the @code{if}-@code{else}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2364 Thus, never write like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2365
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2366 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2367 if (foo)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2368 if (bar)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2369 win ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2370 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2371 lose ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2372 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2373
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2374 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2375 always like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2376
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2377 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2378 if (foo)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2379 @{
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2380 if (bar)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2381 win ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2382 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2383 lose ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2384 @}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2385 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2386
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2387 If you have an @code{if} statement nested inside of an @code{else}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2388 statement, either write @code{else if} on one line, like this,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2389
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2390 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2391 if (foo)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2392 @dots{}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2393 else if (bar)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2394 @dots{}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2395 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2396
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2397 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2398 with its @code{then}-part indented like the preceding @code{then}-part,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2399 or write the nested @code{if} within braces like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2400
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2401 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2402 if (foo)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2403 @dots{}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2404 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2405 @{
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2406 if (bar)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2407 @dots{}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2408 @}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2409 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2410
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2411 Don't declare both a structure tag and variables or typedefs in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2412 same declaration. Instead, declare the structure tag separately
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2413 and then use it to declare the variables or typedefs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2414
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2415 Try to avoid assignments inside @code{if}-conditions. For example,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2416 don't write this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2417
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2418 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2419 if ((foo = (char *) malloc (sizeof *foo)) == 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2420 fatal ("virtual memory exhausted");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2421 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2422
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2423 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2424 instead, write this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2425
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2426 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2427 foo = (char *) malloc (sizeof *foo);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2428 if (foo == 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2429 fatal ("virtual memory exhausted");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2430 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2431
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2432 @pindex lint
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2433 Don't make the program ugly to placate @code{lint}. Please don't insert any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2434 casts to @code{void}. Zero without a cast is perfectly fine as a null
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2435 pointer constant, except when calling a varargs function.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2436
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2437 @node Names
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2438 @section Naming Variables and Functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2439
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2440 @cindex names of variables and functions
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2441 The names of global variables and functions in a program serve as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2442 comments of a sort. So don't choose terse names---instead, look for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2443 names that give useful information about the meaning of the variable or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2444 function. In a GNU program, names should be English, like other
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2445 comments.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2446
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2447 Local variable names can be shorter, because they are used only within
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2448 one context, where (presumably) comments explain their purpose.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2449
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2450 Try to limit your use of abbreviations in symbol names. It is ok to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2451 make a few abbreviations, explain what they mean, and then use them
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2452 frequently, but don't use lots of obscure abbreviations.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2453
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2454 Please use underscores to separate words in a name, so that the Emacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2455 word commands can be useful within them. Stick to lower case; reserve
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2456 upper case for macros and @code{enum} constants, and for name-prefixes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2457 that follow a uniform convention.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2458
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2459 For example, you should use names like @code{ignore_space_change_flag};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2460 don't use names like @code{iCantReadThis}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2461
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2462 Variables that indicate whether command-line options have been
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2463 specified should be named after the meaning of the option, not after
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2464 the option-letter. A comment should state both the exact meaning of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2465 the option and its letter. For example,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2466
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2467 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2468 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2469 /* Ignore changes in horizontal whitespace (-b). */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2470 int ignore_space_change_flag;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2471 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2472 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2473
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2474 When you want to define names with constant integer values, use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2475 @code{enum} rather than @samp{#define}. GDB knows about enumeration
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2476 constants.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2477
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2478 @cindex file-name limitations
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2479 @pindex doschk
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2480 You might want to make sure that none of the file names would conflict
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2481 the files were loaded onto an MS-DOS file system which shortens the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2482 names. You can use the program @code{doschk} to test for this.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2483
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2484 Some GNU programs were designed to limit themselves to file names of 14
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2485 characters or less, to avoid file name conflicts if they are read into
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2486 older System V systems. Please preserve this feature in the existing
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2487 GNU programs that have it, but there is no need to do this in new GNU
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2488 programs. @code{doschk} also reports file names longer than 14
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2489 characters.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2490
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2491 @node System Portability
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2492 @section Portability between System Types
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2493 @cindex portability, between system types
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2494
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2495 In the Unix world, ``portability'' refers to porting to different Unix
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2496 versions. For a GNU program, this kind of portability is desirable, but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2497 not paramount.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2498
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2499 The primary purpose of GNU software is to run on top of the GNU kernel,
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2500 compiled with the GNU C compiler, on various types of @sc{cpu}. So the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2501 kinds of portability that are absolutely necessary are quite limited.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2502 But it is important to support Linux-based GNU systems, since they
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2503 are the form of GNU that is popular.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2504
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2505 Beyond that, it is good to support the other free operating systems
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2506 (*BSD), and it is nice to support other Unix-like systems if you want
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2507 to. Supporting a variety of Unix-like systems is desirable, although
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2508 not paramount. It is usually not too hard, so you may as well do it.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2509 But you don't have to consider it an obligation, if it does turn out to
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2510 be hard.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2511
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2512 @pindex autoconf
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2513 The easiest way to achieve portability to most Unix-like systems is to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2514 use Autoconf. It's unlikely that your program needs to know more
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2515 information about the host platform than Autoconf can provide, simply
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2516 because most of the programs that need such knowledge have already been
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2517 written.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2518
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2519 Avoid using the format of semi-internal data bases (e.g., directories)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2520 when there is a higher-level alternative (@code{readdir}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2521
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2522 @cindex non-@sc{posix} systems, and portability
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2523 As for systems that are not like Unix, such as MSDOS, Windows, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2524 Macintosh, VMS, and MVS, supporting them is often a lot of work. When
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2525 that is the case, it is better to spend your time adding features that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2526 will be useful on GNU and GNU/Linux, rather than on supporting other
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2527 incompatible systems.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2528
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2529 It is a good idea to define the ``feature test macro''
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2530 @code{_GNU_SOURCE} when compiling your C files. When you compile on GNU
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2531 or GNU/Linux, this will enable the declarations of GNU library extension
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2532 functions, and that will usually give you a compiler error message if
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2533 you define the same function names in some other way in your program.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2534 (You don't have to actually @emph{use} these functions, if you prefer
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2535 to make the program more portable to other systems.)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2536
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2537 But whether or not you use these GNU extensions, you should avoid
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2538 using their names for any other meanings. Doing so would make it hard
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2539 to move your code into other GNU programs.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2540
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2541 @node CPU Portability
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2542 @section Portability between @sc{cpu}s
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2543
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2544 @cindex data types, and portability
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2545 @cindex portability, and data types
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2546 Even GNU systems will differ because of differences among @sc{cpu}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2547 types---for example, difference in byte ordering and alignment
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2548 requirements. It is absolutely essential to handle these differences.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2549 However, don't make any effort to cater to the possibility that an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2550 @code{int} will be less than 32 bits. We don't support 16-bit machines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2551 in GNU.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2552
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2553 Similarly, don't make any effort to cater to the possibility that
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2554 @code{long} will be smaller than predefined types like @code{size_t}.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2555 For example, the following code is ok:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2556
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2557 @example
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2558 printf ("size = %lu\n", (unsigned long) sizeof array);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2559 printf ("diff = %ld\n", (long) (pointer2 - pointer1));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2560 @end example
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2561
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2562 1989 Standard C requires this to work, and we know of only one
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2563 counterexample: 64-bit programs on Microsoft Windows IA-64. We will
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2564 leave it to those who want to port GNU programs to that environment
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2565 to figure out how to do it.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2566
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2567 Predefined file-size types like @code{off_t} are an exception: they are
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2568 longer than @code{long} on many platforms, so code like the above won't
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2569 work with them. One way to print an @code{off_t} value portably is to
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2570 print its digits yourself, one by one.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2571
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2572 Don't assume that the address of an @code{int} object is also the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2573 address of its least-significant byte. This is false on big-endian
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2574 machines. Thus, don't make the following mistake:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2575
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2576 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2577 int c;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2578 @dots{}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2579 while ((c = getchar()) != EOF)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2580 write(file_descriptor, &c, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2581 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2582
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2583 When calling functions, you need not worry about the difference between
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2584 pointers of various types, or between pointers and integers. On most
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2585 machines, there's no difference anyway. As for the few machines where
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2586 there is a difference, all of them support Standard C prototypes, so you can
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2587 use prototypes (perhaps conditionalized to be active only in Standard C)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2588 to make the code work on those systems.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2589
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2590 In certain cases, it is ok to pass integer and pointer arguments
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2591 indiscriminately to the same function, and use no prototype on any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2592 system. For example, many GNU programs have error-reporting functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2593 that pass their arguments along to @code{printf} and friends:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2594
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2595 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2596 error (s, a1, a2, a3)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2597 char *s;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2598 char *a1, *a2, *a3;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2599 @{
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2600 fprintf (stderr, "error: ");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2601 fprintf (stderr, s, a1, a2, a3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2602 @}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2603 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2604
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2605 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2606 In practice, this works on all machines, since a pointer is generally
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2607 the widest possible kind of argument; it is much simpler than any
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2608 ``correct'' alternative. Be sure @emph{not} to use a prototype for such
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2609 functions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2610
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2611 If you have decided to use Standard C, then you can instead define
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2612 @code{error} using @file{stdarg.h}, and pass the arguments along to
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2613 @code{vfprintf}.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2614
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2615 @cindex casting pointers to integers
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2616 Avoid casting pointers to integers if you can. Such casts greatly
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2617 reduce portability, and in most programs they are easy to avoid. In the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2618 cases where casting pointers to integers is essential---such as, a Lisp
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2619 interpreter which stores type information as well as an address in one
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2620 word---you'll have to make explicit provisions to handle different word
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2621 sizes. You will also need to make provision for systems in which the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2622 normal range of addresses you can get from @code{malloc} starts far away
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2623 from zero.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2624
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2625 @node System Functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2626 @section Calling System Functions
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2627 @cindex library functions, and portability
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2628 @cindex portability, and library functions
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2629
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2630 C implementations differ substantially. Standard C reduces but does
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2631 not eliminate the incompatibilities; meanwhile, many GNU packages still
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2632 support pre-standard compilers because this is not hard to do. This
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2633 chapter gives recommendations for how to use the more-or-less standard C
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2634 library functions to avoid unnecessary loss of portability.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2635
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2636 @itemize @bullet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2637 @item
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2638 Don't use the return value of @code{sprintf}. It returns the number of
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2639 characters written on some systems, but not on all systems.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2640
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2641 @item
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2642 Be aware that @code{vfprintf} is not always available.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2643
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2644 @item
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2645 @code{main} should be declared to return type @code{int}. It should
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2646 terminate either by calling @code{exit} or by returning the integer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2647 status code; make sure it cannot ever return an undefined value.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2648
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2649 @cindex declaration for system functions
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2650 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2651 Don't declare system functions explicitly.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2652
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2653 Almost any declaration for a system function is wrong on some system.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2654 To minimize conflicts, leave it to the system header files to declare
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2655 system functions. If the headers don't declare a function, let it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2656 remain undeclared.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2657
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2658 While it may seem unclean to use a function without declaring it, in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2659 practice this works fine for most system library functions on the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2660 systems where this really happens; thus, the disadvantage is only
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2661 theoretical. By contrast, actual declarations have frequently caused
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2662 actual conflicts.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2663
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2664 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2665 If you must declare a system function, don't specify the argument types.
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2666 Use an old-style declaration, not a Standard C prototype. The more you
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2667 specify about the function, the more likely a conflict.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2668
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2669 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2670 In particular, don't unconditionally declare @code{malloc} or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2671 @code{realloc}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2672
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2673 Most GNU programs use those functions just once, in functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2674 conventionally named @code{xmalloc} and @code{xrealloc}. These
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2675 functions call @code{malloc} and @code{realloc}, respectively, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2676 check the results.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2677
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2678 Because @code{xmalloc} and @code{xrealloc} are defined in your program,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2679 you can declare them in other files without any risk of type conflict.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2680
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2681 On most systems, @code{int} is the same length as a pointer; thus, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2682 calls to @code{malloc} and @code{realloc} work fine. For the few
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2683 exceptional systems (mostly 64-bit machines), you can use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2684 @strong{conditionalized} declarations of @code{malloc} and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2685 @code{realloc}---or put these declarations in configuration files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2686 specific to those systems.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2687
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2688 @cindex string library functions
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2689 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2690 The string functions require special treatment. Some Unix systems have
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2691 a header file @file{string.h}; others have @file{strings.h}. Neither
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2692 file name is portable. There are two things you can do: use Autoconf to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2693 figure out which file to include, or don't include either file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2694
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2695 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2696 If you don't include either strings file, you can't get declarations for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2697 the string functions from the header file in the usual way.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2698
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2699 That causes less of a problem than you might think. The newer standard
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2700 string functions should be avoided anyway because many systems still
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2701 don't support them. The string functions you can use are these:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2702
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2703 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2704 strcpy strncpy strcat strncat
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2705 strlen strcmp strncmp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2706 strchr strrchr
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2707 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2708
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2709 The copy and concatenate functions work fine without a declaration as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2710 long as you don't use their values. Using their values without a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2711 declaration fails on systems where the width of a pointer differs from
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2712 the width of @code{int}, and perhaps in other cases. It is trivial to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2713 avoid using their values, so do that.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2714
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2715 The compare functions and @code{strlen} work fine without a declaration
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2716 on most systems, possibly all the ones that GNU software runs on.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2717 You may find it necessary to declare them @strong{conditionally} on a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2718 few systems.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2719
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2720 The search functions must be declared to return @code{char *}. Luckily,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2721 there is no variation in the data type they return. But there is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2722 variation in their names. Some systems give these functions the names
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2723 @code{index} and @code{rindex}; other systems use the names
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2724 @code{strchr} and @code{strrchr}. Some systems support both pairs of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2725 names, but neither pair works on all systems.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2726
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2727 You should pick a single pair of names and use it throughout your
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2728 program. (Nowadays, it is better to choose @code{strchr} and
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2729 @code{strrchr} for new programs, since those are the standard
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2730 names.) Declare both of those names as functions returning @code{char
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2731 *}. On systems which don't support those names, define them as macros
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2732 in terms of the other pair. For example, here is what to put at the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2733 beginning of your file (or in a header) if you want to use the names
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2734 @code{strchr} and @code{strrchr} throughout:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2735
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2736 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2737 #ifndef HAVE_STRCHR
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2738 #define strchr index
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2739 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2740 #ifndef HAVE_STRRCHR
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2741 #define strrchr rindex
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2742 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2743
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2744 char *strchr ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2745 char *strrchr ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2746 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2747 @end itemize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2748
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2749 Here we assume that @code{HAVE_STRCHR} and @code{HAVE_STRRCHR} are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2750 macros defined in systems where the corresponding functions exist.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2751 One way to get them properly defined is to use Autoconf.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2752
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2753 @node Internationalization
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2754 @section Internationalization
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2755 @cindex internationalization
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2756
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2757 @pindex gettext
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2758 GNU has a library called GNU gettext that makes it easy to translate the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2759 messages in a program into various languages. You should use this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2760 library in every program. Use English for the messages as they appear
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2761 in the program, and let gettext provide the way to translate them into
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2762 other languages.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2763
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2764 Using GNU gettext involves putting a call to the @code{gettext} macro
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2765 around each string that might need translation---like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2766
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2767 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2768 printf (gettext ("Processing file `%s'..."));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2769 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2770
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2771 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2772 This permits GNU gettext to replace the string @code{"Processing file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2773 `%s'..."} with a translated version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2774
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2775 Once a program uses gettext, please make a point of writing calls to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2776 @code{gettext} when you add new strings that call for translation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2777
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2778 Using GNU gettext in a package involves specifying a @dfn{text domain
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2779 name} for the package. The text domain name is used to separate the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2780 translations for this package from the translations for other packages.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2781 Normally, the text domain name should be the same as the name of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2782 package---for example, @samp{fileutils} for the GNU file utilities.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2783
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2784 @cindex message text, and internationalization
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2785 To enable gettext to work well, avoid writing code that makes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2786 assumptions about the structure of words or sentences. When you want
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2787 the precise text of a sentence to vary depending on the data, use two or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2788 more alternative string constants each containing a complete sentences,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2789 rather than inserting conditionalized words or phrases into a single
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2790 sentence framework.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2791
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2792 Here is an example of what not to do:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2793
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2794 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2795 printf ("%d file%s processed", nfiles,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2796 nfiles != 1 ? "s" : "");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2797 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2798
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2799 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2800 The problem with that example is that it assumes that plurals are made
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2801 by adding `s'. If you apply gettext to the format string, like this,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2802
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2803 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2804 printf (gettext ("%d file%s processed"), nfiles,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2805 nfiles != 1 ? "s" : "");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2806 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2807
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2808 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2809 the message can use different words, but it will still be forced to use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2810 `s' for the plural. Here is a better way:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2811
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2812 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2813 printf ((nfiles != 1 ? "%d files processed"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2814 : "%d file processed"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2815 nfiles);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2816 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2817
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2818 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2819 This way, you can apply gettext to each of the two strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2820 independently:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2821
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2822 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2823 printf ((nfiles != 1 ? gettext ("%d files processed")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2824 : gettext ("%d file processed")),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2825 nfiles);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2826 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2827
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2828 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2829 This can be any method of forming the plural of the word for ``file'', and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2830 also handles languages that require agreement in the word for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2831 ``processed''.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2832
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2833 A similar problem appears at the level of sentence structure with this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2834 code:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2835
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2836 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2837 printf ("# Implicit rule search has%s been done.\n",
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2838 f->tried_implicit ? "" : " not");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2839 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2840
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2841 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2842 Adding @code{gettext} calls to this code cannot give correct results for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2843 all languages, because negation in some languages requires adding words
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2844 at more than one place in the sentence. By contrast, adding
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2845 @code{gettext} calls does the job straightfowardly if the code starts
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2846 out like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2847
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2848 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2849 printf (f->tried_implicit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2850 ? "# Implicit rule search has been done.\n",
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2851 : "# Implicit rule search has not been done.\n");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2852 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2853
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2854 @node Mmap
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2855 @section Mmap
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2856 @findex mmap
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2857
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2858 Don't assume that @code{mmap} either works on all files or fails
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2859 for all files. It may work on some files and fail on others.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2860
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2861 The proper way to use @code{mmap} is to try it on the specific file for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2862 which you want to use it---and if @code{mmap} doesn't work, fall back on
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2863 doing the job in another way using @code{read} and @code{write}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2864
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2865 The reason this precaution is needed is that the GNU kernel (the HURD)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2866 provides a user-extensible file system, in which there can be many
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2867 different kinds of ``ordinary files.'' Many of them support
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2868 @code{mmap}, but some do not. It is important to make programs handle
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2869 all these kinds of files.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2870
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2871 @node Documentation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2872 @chapter Documenting Programs
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2873 @cindex documentation
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2874
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2875 A GNU program should ideally come with full free documentation, adequate
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2876 for both reference and tutorial purposes. If the package can be
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2877 programmed or extended, the documentation should cover programming or
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2878 extending it, as well as just using it.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2879
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2880 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2881 * GNU Manuals:: Writing proper manuals.
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2882 * Doc Strings and Manuals:: Compiling doc strings doesn't make a manual.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2883 * Manual Structure Details:: Specific structure conventions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2884 * License for Manuals:: Writing the distribution terms for a manual.
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2885 * Manual Credits:: Giving credit to documentation contributors.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2886 * Printed Manuals:: Mentioning the printed manual.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2887 * NEWS File:: NEWS files supplement manuals.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2888 * Change Logs:: Recording Changes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2889 * Man Pages:: Man pages are secondary.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2890 * Reading other Manuals:: How far you can go in learning
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2891 from other manuals.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2892 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2893
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2894 @node GNU Manuals
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2895 @section GNU Manuals
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2896
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2897 The preferred document format for the GNU system is the Texinfo
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2898 formatting language. Every GNU package should (ideally) have
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2899 documentation in Texinfo both for reference and for learners. Texinfo
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2900 makes it possible to produce a good quality formatted book, using
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2901 @TeX{}, and to generate an Info file. It is also possible to generate
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2902 HTML output from Texinfo source. See the Texinfo manual, either the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2903 hardcopy, or the on-line version available through @code{info} or the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2904 Emacs Info subsystem (@kbd{C-h i}).
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2905
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2906 Nowadays some other formats such as Docbook and Sgmltexi can be
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2907 converted automatically into Texinfo. It is ok to produce the Texinfo
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2908 documentation by conversion this way, as long as it gives good results.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2909
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2910 Programmers often find it most natural to structure the documentation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2911 following the structure of the implementation, which they know. But
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2912 this structure is not necessarily good for explaining how to use the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2913 program; it may be irrelevant and confusing for a user.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2914
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2915 At every level, from the sentences in a paragraph to the grouping of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2916 topics into separate manuals, the right way to structure documentation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2917 is according to the concepts and questions that a user will have in mind
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2918 when reading it. Sometimes this structure of ideas matches the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2919 structure of the implementation of the software being documented---but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2920 often they are different. Often the most important part of learning to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2921 write good documentation is learning to notice when you are structuring
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2922 the documentation like the implementation, and think about better
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2923 alternatives.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2924
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2925 For example, each program in the GNU system probably ought to be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2926 documented in one manual; but this does not mean each program should
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2927 have its own manual. That would be following the structure of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2928 implementation, rather than the structure that helps the user
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2929 understand.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2930
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2931 Instead, each manual should cover a coherent @emph{topic}. For example,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2932 instead of a manual for @code{diff} and a manual for @code{diff3}, we
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2933 have one manual for ``comparison of files'' which covers both of those
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2934 programs, as well as @code{cmp}. By documenting these programs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2935 together, we can make the whole subject clearer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2936
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2937 The manual which discusses a program should certainly document all of
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2938 the program's command-line options and all of its commands. It should
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2939 give examples of their use. But don't organize the manual as a list of
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2940 features. Instead, organize it logically, by subtopics. Address the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2941 questions that a user will ask when thinking about the job that the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2942 program does.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2943
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2944 In general, a GNU manual should serve both as tutorial and reference.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2945 It should be set up for convenient access to each topic through Info,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2946 and for reading straight through (appendixes aside). A GNU manual
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2947 should give a good introduction to a beginner reading through from the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2948 start, and should also provide all the details that hackers want.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2949 The Bison manual is a good example of this---please take a look at it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2950 to see what we mean.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2951
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2952 That is not as hard as it first sounds. Arrange each chapter as a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2953 logical breakdown of its topic, but order the sections, and write their
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2954 text, so that reading the chapter straight through makes sense. Do
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2955 likewise when structuring the book into chapters, and when structuring a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2956 section into paragraphs. The watchword is, @emph{at each point, address
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2957 the most fundamental and important issue raised by the preceding text.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2958
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2959 If necessary, add extra chapters at the beginning of the manual which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2960 are purely tutorial and cover the basics of the subject. These provide
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2961 the framework for a beginner to understand the rest of the manual. The
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2962 Bison manual provides a good example of how to do this.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2963
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2964 To serve as a reference, a manual should have an Index that list all the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2965 functions, variables, options, and important concepts that are part of
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2966 the program. One combined Index should do for a short manual, but
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2967 sometimes for a complex package it is better to use multiple indices.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2968 The Texinfo manual includes advice on preparing good index entries, see
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2969 @ref{Index Entries, , Making Index Entries, texinfo, The GNU Texinfo
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2970 Manual}, and see @ref{Indexing Commands, , Defining the Entries of an
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2971 Index, texinfo, The GNU Texinfo manual}.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2972
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2973 Don't use Unix man pages as a model for how to write GNU documentation;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2974 most of them are terse, badly structured, and give inadequate
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2975 explanation of the underlying concepts. (There are, of course, some
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2976 exceptions.) Also, Unix man pages use a particular format which is
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2977 different from what we use in GNU manuals.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2978
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2979 Please include an email address in the manual for where to report
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2980 bugs @emph{in the manual}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2981
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2982 Please do not use the term ``pathname'' that is used in Unix
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2983 documentation; use ``file name'' (two words) instead. We use the term
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2984 ``path'' only for search paths, which are lists of directory names.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2985
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2986 Please do not use the term ``illegal'' to refer to erroneous input to a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2987 computer program. Please use ``invalid'' for this, and reserve the term
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2988 ``illegal'' for activities punishable by law.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2989
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2990 @node Doc Strings and Manuals
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2991 @section Doc Strings and Manuals
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2992
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2993 Some programming systems, such as Emacs, provide a documentation string
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2994 for each function, command or variable. You may be tempted to write a
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2995 reference manual by compiling the documentation strings and writing a
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2996 little additional text to go around them---but you must not do it. That
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2997 approach is a fundamental mistake. The text of well-written
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2998 documentation strings will be entirely wrong for a manual.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2999
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3000 A documentation string needs to stand alone---when it appears on the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3001 screen, there will be no other text to introduce or explain it.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3002 Meanwhile, it can be rather informal in style.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3003
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3004 The text describing a function or variable in a manual must not stand
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3005 alone; it appears in the context of a section or subsection. Other text
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3006 at the beginning of the section should explain some of the concepts, and
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3007 should often make some general points that apply to several functions or
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3008 variables. The previous descriptions of functions and variables in the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3009 section will also have given information about the topic. A description
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3010 written to stand alone would repeat some of that information; this
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3011 redundance looks bad. Meanwhile, the informality that is acceptable in
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3012 a documentation string is totally unacceptable in a manual.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3013
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3014 The only good way to use documentation strings in writing a good manual
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3015 is to use them as a source of information for writing good text.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3016
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3017 @node Manual Structure Details
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3018 @section Manual Structure Details
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3019 @cindex manual structure
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3020
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3021 The title page of the manual should state the version of the programs or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3022 packages documented in the manual. The Top node of the manual should
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3023 also contain this information. If the manual is changing more
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3024 frequently than or independent of the program, also state a version
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3025 number for the manual in both of these places.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3026
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3027 Each program documented in the manual should have a node named
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3028 @samp{@var{program} Invocation} or @samp{Invoking @var{program}}. This
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3029 node (together with its subnodes, if any) should describe the program's
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3030 command line arguments and how to run it (the sort of information people
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3031 would look in a man page for). Start with an @samp{@@example}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3032 containing a template for all the options and arguments that the program
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3033 uses.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3034
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3035 Alternatively, put a menu item in some menu whose item name fits one of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3036 the above patterns. This identifies the node which that item points to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3037 as the node for this purpose, regardless of the node's actual name.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3038
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3039 The @samp{--usage} feature of the Info reader looks for such a node
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3040 or menu item in order to find the relevant text, so it is essential
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3041 for every Texinfo file to have one.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3042
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3043 If one manual describes several programs, it should have such a node for
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3044 each program described in the manual.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3045
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3046 @node License for Manuals
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3047 @section License for Manuals
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3048 @cindex license for manuals
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3049
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3050 Please use the GNU Free Documentation License for all GNU manuals that
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3051 are more than a few pages long. Likewise for a collection of short
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3052 documents---you only need one copy of the GNU FDL for the whole
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3053 collection. For a single short document, you can use a very permissive
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3054 non-copyleft license, to avoid taking up space with a long license.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3055
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3056 See @uref{http://www.gnu.org/copyleft/fdl-howto.html} for more explanation
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3057 of how to employ the GFDL.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3058
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3059 Note that it is not obligatory to include a copy of the GNU GPL or GNU
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3060 LGPL in a manual whose license is neither the GPL nor the LGPL. It can
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3061 be a good idea to include the program's license in a large manual; in a
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3062 short manual, whose size would be increased considerably by including
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3063 the program's license, it is probably better not to include it.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3064
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3065 @node Manual Credits
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3066 @section Manual Credits
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3067 @cindex credits for manuals
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3068
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3069 Please credit the principal human writers of the manual as the authors,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3070 on the title page of the manual. If a company sponsored the work, thank
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3071 the company in a suitable place in the manual, but do not cite the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3072 company as an author.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3073
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3074 @node Printed Manuals
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3075 @section Printed Manuals
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3076
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3077 The FSF publishes some GNU manuals in printed form. To encourage sales
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3078 of these manuals, the on-line versions of the manual should mention at
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3079 the very start that the printed manual is available and should point at
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3080 information for getting it---for instance, with a link to the page
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3081 @url{http://www.gnu.org/order/order.html}. This should not be included
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3082 in the printed manual, though, because there it is redundant.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3083
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3084 It is also useful to explain in the on-line forms of the manual how the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3085 user can print out the manual from the sources.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3086
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3087 @node NEWS File
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3088 @section The NEWS File
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3089 @cindex @file{NEWS} file
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3090
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3091 In addition to its manual, the package should have a file named
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3092 @file{NEWS} which contains a list of user-visible changes worth
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3093 mentioning. In each new release, add items to the front of the file and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3094 identify the version they pertain to. Don't discard old items; leave
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3095 them in the file after the newer items. This way, a user upgrading from
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3096 any previous version can see what is new.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3097
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3098 If the @file{NEWS} file gets very long, move some of the older items
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3099 into a file named @file{ONEWS} and put a note at the end referring the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3100 user to that file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3101
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3102 @node Change Logs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3103 @section Change Logs
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3104 @cindex change logs
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3105
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3106 Keep a change log to describe all the changes made to program source
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3107 files. The purpose of this is so that people investigating bugs in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3108 future will know about the changes that might have introduced the bug.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3109 Often a new bug can be found by looking at what was recently changed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3110 More importantly, change logs can help you eliminate conceptual
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3111 inconsistencies between different parts of a program, by giving you a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3112 history of how the conflicting concepts arose and who they came from.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3113
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3114 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3115 * Change Log Concepts::
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3116 * Style of Change Logs::
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3117 * Simple Changes::
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3118 * Conditional Changes::
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3119 * Indicating the Part Changed::
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3120 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3121
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3122 @node Change Log Concepts
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3123 @subsection Change Log Concepts
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3124
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3125 You can think of the change log as a conceptual ``undo list'' which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3126 explains how earlier versions were different from the current version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3127 People can see the current version; they don't need the change log
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3128 to tell them what is in it. What they want from a change log is a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3129 clear explanation of how the earlier version differed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3130
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3131 The change log file is normally called @file{ChangeLog} and covers an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3132 entire directory. Each directory can have its own change log, or a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3133 directory can use the change log of its parent directory--it's up to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3134 you.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3135
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3136 Another alternative is to record change log information with a version
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3137 control system such as RCS or CVS. This can be converted automatically
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3138 to a @file{ChangeLog} file using @code{rcs2log}; in Emacs, the command
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3139 @kbd{C-x v a} (@code{vc-update-change-log}) does the job.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3140
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3141 There's no need to describe the full purpose of the changes or how they
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3142 work together. If you think that a change calls for explanation, you're
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3143 probably right. Please do explain it---but please put the explanation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3144 in comments in the code, where people will see it whenever they see the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3145 code. For example, ``New function'' is enough for the change log when
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3146 you add a function, because there should be a comment before the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3147 function definition to explain what it does.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3148
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3149 However, sometimes it is useful to write one line to describe the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3150 overall purpose of a batch of changes.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3151
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3152 The easiest way to add an entry to @file{ChangeLog} is with the Emacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3153 command @kbd{M-x add-change-log-entry}. An entry should have an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3154 asterisk, the name of the changed file, and then in parentheses the name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3155 of the changed functions, variables or whatever, followed by a colon.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3156 Then describe the changes you made to that function or variable.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3157
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3158 @node Style of Change Logs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3159 @subsection Style of Change Logs
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3160 @cindex change logs, style
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3161
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3162 Here are some simple examples of change log entries, starting with the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3163 header line that says who made the change and when, followed by
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3164 descriptions of specific changes. (These examples are drawn from Emacs
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3165 and GCC.)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3166
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3167 @example
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3168 1998-08-17 Richard Stallman <rms@@gnu.org>
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3169
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3170 * register.el (insert-register): Return nil.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3171 (jump-to-register): Likewise.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3172
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3173 * sort.el (sort-subr): Return nil.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3174
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3175 * tex-mode.el (tex-bibtex-file, tex-file, tex-region):
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3176 Restart the tex shell if process is gone or stopped.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3177 (tex-shell-running): New function.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3178
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3179 * expr.c (store_one_arg): Round size up for move_block_to_reg.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3180 (expand_call): Round up when emitting USE insns.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3181 * stmt.c (assign_parms): Round size up for move_block_from_reg.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3182 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3183
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3184 It's important to name the changed function or variable in full. Don't
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3185 abbreviate function or variable names, and don't combine them.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3186 Subsequent maintainers will often search for a function name to find all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3187 the change log entries that pertain to it; if you abbreviate the name,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3188 they won't find it when they search.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3189
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3190 For example, some people are tempted to abbreviate groups of function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3191 names by writing @samp{* register.el (@{insert,jump-to@}-register)};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3192 this is not a good idea, since searching for @code{jump-to-register} or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3193 @code{insert-register} would not find that entry.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3194
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3195 Separate unrelated change log entries with blank lines. When two
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3196 entries represent parts of the same change, so that they work together,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3197 then don't put blank lines between them. Then you can omit the file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3198 name and the asterisk when successive entries are in the same file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3199
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3200 Break long lists of function names by closing continued lines with
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3201 @samp{)}, rather than @samp{,}, and opening the continuation with
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3202 @samp{(} as in this example:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3203
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3204 @example
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3205 * keyboard.c (menu_bar_items, tool_bar_items)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3206 (Fexecute_extended_command): Deal with `keymap' property.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3207 @end example
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3208
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3209 @node Simple Changes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3210 @subsection Simple Changes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3211
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3212 Certain simple kinds of changes don't need much detail in the change
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3213 log.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3214
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3215 When you change the calling sequence of a function in a simple fashion,
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3216 and you change all the callers of the function to use the new calling
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3217 sequence, there is no need to make individual entries for all the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3218 callers that you changed. Just write in the entry for the function
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3219 being called, ``All callers changed''---like this:
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3220
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3221 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3222 * keyboard.c (Fcommand_execute): New arg SPECIAL.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3223 All callers changed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3224 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3225
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3226 When you change just comments or doc strings, it is enough to write an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3227 entry for the file, without mentioning the functions. Just ``Doc
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3228 fixes'' is enough for the change log.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3229
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3230 There's no need to make change log entries for documentation files.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3231 This is because documentation is not susceptible to bugs that are hard
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3232 to fix. Documentation does not consist of parts that must interact in a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3233 precisely engineered fashion. To correct an error, you need not know
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3234 the history of the erroneous passage; it is enough to compare what the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3235 documentation says with the way the program actually works.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3236
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3237 @node Conditional Changes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3238 @subsection Conditional Changes
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3239 @cindex conditional changes, and change logs
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3240 @cindex change logs, conditional changes
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3241
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3242 C programs often contain compile-time @code{#if} conditionals. Many
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3243 changes are conditional; sometimes you add a new definition which is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3244 entirely contained in a conditional. It is very useful to indicate in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3245 the change log the conditions for which the change applies.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3246
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3247 Our convention for indicating conditional changes is to use square
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3248 brackets around the name of the condition.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3249
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3250 Here is a simple example, describing a change which is conditional but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3251 does not have a function or entity name associated with it:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3252
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3253 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3254 * xterm.c [SOLARIS2]: Include string.h.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3255 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3256
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3257 Here is an entry describing a new definition which is entirely
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3258 conditional. This new definition for the macro @code{FRAME_WINDOW_P} is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3259 used only when @code{HAVE_X_WINDOWS} is defined:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3260
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3261 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3262 * frame.h [HAVE_X_WINDOWS] (FRAME_WINDOW_P): Macro defined.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3263 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3264
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3265 Here is an entry for a change within the function @code{init_display},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3266 whose definition as a whole is unconditional, but the changes themselves
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3267 are contained in a @samp{#ifdef HAVE_LIBNCURSES} conditional:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3268
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3269 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3270 * dispnew.c (init_display) [HAVE_LIBNCURSES]: If X, call tgetent.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3271 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3272
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3273 Here is an entry for a change that takes affect only when
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3274 a certain macro is @emph{not} defined:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3275
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3276 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3277 (gethostname) [!HAVE_SOCKETS]: Replace with winsock version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3278 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3279
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3280 @node Indicating the Part Changed
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3281 @subsection Indicating the Part Changed
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3282
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3283 Indicate the part of a function which changed by using angle brackets
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3284 enclosing an indication of what the changed part does. Here is an entry
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3285 for a change in the part of the function @code{sh-while-getopts} that
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3286 deals with @code{sh} commands:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3287
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3288 @example
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3289 * progmodes/sh-script.el (sh-while-getopts) <sh>: Handle case that
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3290 user-specified option string is empty.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3291 @end example
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3292
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3293
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3294 @node Man Pages
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3295 @section Man Pages
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3296 @cindex man pages
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3297
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3298 In the GNU project, man pages are secondary. It is not necessary or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3299 expected for every GNU program to have a man page, but some of them do.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3300 It's your choice whether to include a man page in your program.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3301
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3302 When you make this decision, consider that supporting a man page
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3303 requires continual effort each time the program is changed. The time
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3304 you spend on the man page is time taken away from more useful work.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3305
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3306 For a simple program which changes little, updating the man page may be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3307 a small job. Then there is little reason not to include a man page, if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3308 you have one.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3309
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3310 For a large program that changes a great deal, updating a man page may
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3311 be a substantial burden. If a user offers to donate a man page, you may
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3312 find this gift costly to accept. It may be better to refuse the man
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3313 page unless the same person agrees to take full responsibility for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3314 maintaining it---so that you can wash your hands of it entirely. If
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3315 this volunteer later ceases to do the job, then don't feel obliged to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3316 pick it up yourself; it may be better to withdraw the man page from the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3317 distribution until someone else agrees to update it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3318
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3319 When a program changes only a little, you may feel that the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3320 discrepancies are small enough that the man page remains useful without
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3321 updating. If so, put a prominent note near the beginning of the man
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3322 page explaining that you don't maintain it and that the Texinfo manual
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3323 is more authoritative. The note should say how to access the Texinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3324 documentation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3325
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3326 @node Reading other Manuals
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3327 @section Reading other Manuals
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3328
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3329 There may be non-free books or documentation files that describe the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3330 program you are documenting.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3331
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3332 It is ok to use these documents for reference, just as the author of a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3333 new algebra textbook can read other books on algebra. A large portion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3334 of any non-fiction book consists of facts, in this case facts about how
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3335 a certain program works, and these facts are necessarily the same for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3336 everyone who writes about the subject. But be careful not to copy your
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3337 outline structure, wording, tables or examples from preexisting non-free
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3338 documentation. Copying from free documentation may be ok; please check
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3339 with the FSF about the individual case.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3340
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3341 @node Managing Releases
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3342 @chapter The Release Process
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3343 @cindex releasing
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3344
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3345 Making a release is more than just bundling up your source files in a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3346 tar file and putting it up for FTP. You should set up your software so
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3347 that it can be configured to run on a variety of systems. Your Makefile
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3348 should conform to the GNU standards described below, and your directory
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3349 layout should also conform to the standards discussed below. Doing so
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3350 makes it easy to include your package into the larger framework of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3351 all GNU software.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3352
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3353 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3354 * Configuration:: How Configuration Should Work
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3355 * Makefile Conventions:: Makefile Conventions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3356 * Releases:: Making Releases
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3357 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3358
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3359 @node Configuration
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3360 @section How Configuration Should Work
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3361 @cindex program configuration
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3362
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3363 @pindex configure
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3364 Each GNU distribution should come with a shell script named
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3365 @code{configure}. This script is given arguments which describe the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3366 kind of machine and system you want to compile the program for.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3367
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3368 The @code{configure} script must record the configuration options so
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3369 that they affect compilation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3370
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3371 One way to do this is to make a link from a standard name such as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3372 @file{config.h} to the proper configuration file for the chosen system.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3373 If you use this technique, the distribution should @emph{not} contain a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3374 file named @file{config.h}. This is so that people won't be able to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3375 build the program without configuring it first.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3376
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3377 Another thing that @code{configure} can do is to edit the Makefile. If
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3378 you do this, the distribution should @emph{not} contain a file named
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3379 @file{Makefile}. Instead, it should include a file @file{Makefile.in} which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3380 contains the input used for editing. Once again, this is so that people
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3381 won't be able to build the program without configuring it first.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3382
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3383 If @code{configure} does write the @file{Makefile}, then @file{Makefile}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3384 should have a target named @file{Makefile} which causes @code{configure}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3385 to be rerun, setting up the same configuration that was set up last
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3386 time. The files that @code{configure} reads should be listed as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3387 dependencies of @file{Makefile}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3388
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3389 All the files which are output from the @code{configure} script should
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3390 have comments at the beginning explaining that they were generated
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3391 automatically using @code{configure}. This is so that users won't think
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3392 of trying to edit them by hand.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3393
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3394 The @code{configure} script should write a file named @file{config.status}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3395 which describes which configuration options were specified when the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3396 program was last configured. This file should be a shell script which,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3397 if run, will recreate the same configuration.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3398
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3399 The @code{configure} script should accept an option of the form
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3400 @samp{--srcdir=@var{dirname}} to specify the directory where sources are found
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3401 (if it is not the current directory). This makes it possible to build
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3402 the program in a separate directory, so that the actual source directory
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3403 is not modified.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3404
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3405 If the user does not specify @samp{--srcdir}, then @code{configure} should
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3406 check both @file{.} and @file{..} to see if it can find the sources. If
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3407 it finds the sources in one of these places, it should use them from
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3408 there. Otherwise, it should report that it cannot find the sources, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3409 should exit with nonzero status.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3410
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3411 Usually the easy way to support @samp{--srcdir} is by editing a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3412 definition of @code{VPATH} into the Makefile. Some rules may need to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3413 refer explicitly to the specified source directory. To make this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3414 possible, @code{configure} can add to the Makefile a variable named
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3415 @code{srcdir} whose value is precisely the specified directory.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3416
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3417 The @code{configure} script should also take an argument which specifies the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3418 type of system to build the program for. This argument should look like
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3419 this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3420
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3421 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3422 @var{cpu}-@var{company}-@var{system}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3423 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3424
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3425 For example, a Sun 3 might be @samp{m68k-sun-sunos4.1}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3426
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3427 The @code{configure} script needs to be able to decode all plausible
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3428 alternatives for how to describe a machine. Thus, @samp{sun3-sunos4.1}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3429 would be a valid alias. For many programs, @samp{vax-dec-ultrix} would
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3430 be an alias for @samp{vax-dec-bsd}, simply because the differences
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3431 between Ultrix and @sc{bsd} are rarely noticeable, but a few programs
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3432 might need to distinguish them.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3433 @c Real 4.4BSD now runs on some Suns.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3434
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3435 There is a shell script called @file{config.sub} that you can use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3436 as a subroutine to validate system types and canonicalize aliases.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3437
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3438 @cindex optional features, configure-time
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3439 Other options are permitted to specify in more detail the software
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3440 or hardware present on the machine, and include or exclude optional
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3441 parts of the package:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3442
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3443 @table @samp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3444 @item --enable-@var{feature}@r{[}=@var{parameter}@r{]}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3445 Configure the package to build and install an optional user-level
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3446 facility called @var{feature}. This allows users to choose which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3447 optional features to include. Giving an optional @var{parameter} of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3448 @samp{no} should omit @var{feature}, if it is built by default.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3449
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3450 No @samp{--enable} option should @strong{ever} cause one feature to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3451 replace another. No @samp{--enable} option should ever substitute one
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3452 useful behavior for another useful behavior. The only proper use for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3453 @samp{--enable} is for questions of whether to build part of the program
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3454 or exclude it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3455
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3456 @item --with-@var{package}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3457 @c @r{[}=@var{parameter}@r{]}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3458 The package @var{package} will be installed, so configure this package
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3459 to work with @var{package}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3460
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3461 @c Giving an optional @var{parameter} of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3462 @c @samp{no} should omit @var{package}, if it is used by default.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3463
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3464 Possible values of @var{package} include
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3465 @samp{gnu-as} (or @samp{gas}), @samp{gnu-ld}, @samp{gnu-libc},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3466 @samp{gdb},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3467 @samp{x},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3468 and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3469 @samp{x-toolkit}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3470
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3471 Do not use a @samp{--with} option to specify the file name to use to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3472 find certain files. That is outside the scope of what @samp{--with}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3473 options are for.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3474 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3475
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3476 All @code{configure} scripts should accept all of these ``detail''
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3477 options, whether or not they make any difference to the particular
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3478 package at hand. In particular, they should accept any option that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3479 starts with @samp{--with-} or @samp{--enable-}. This is so users will
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3480 be able to configure an entire GNU source tree at once with a single set
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3481 of options.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3482
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3483 You will note that the categories @samp{--with-} and @samp{--enable-}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3484 are narrow: they @strong{do not} provide a place for any sort of option
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3485 you might think of. That is deliberate. We want to limit the possible
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3486 configuration options in GNU software. We do not want GNU programs to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3487 have idiosyncratic configuration options.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3488
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3489 Packages that perform part of the compilation process may support
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3490 cross-compilation. In such a case, the host and target machines for the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3491 program may be different.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3492
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3493 The @code{configure} script should normally treat the specified type of
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3494 system as both the host and the target, thus producing a program which
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3495 works for the same type of machine that it runs on.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3496
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3497 To configure a cross-compiler, cross-assembler, or what have you, you
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3498 should specify a target different from the host, using the configure
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3499 option @samp{--target=@var{targettype}}. The syntax for
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3500 @var{targettype} is the same as for the host type. So the command would
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3501 look like this:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3502
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3503 @example
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3504 ./configure @var{hosttype} --target=@var{targettype}
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3505 @end example
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3506
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3507 Programs for which cross-operation is not meaningful need not accept the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3508 @samp{--target} option, because configuring an entire operating system for
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3509 cross-operation is not a meaningful operation.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3510
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3511 Bootstrapping a cross-compiler requires compiling it on a machine other
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3512 than the host it will run on. Compilation packages accept a
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3513 configuration option @samp{--build=@var{buildtype}} for specifying the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3514 configuration on which you will compile them, but the configure script
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3515 should normally guess the build machine type (using
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3516 @file{config.guess}), so this option is probably not necessary. The
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3517 host and target types normally default from the build type, so in
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3518 bootstrapping a cross-compiler you must specify them both explicitly.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3519
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3520 Some programs have ways of configuring themselves automatically. If
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3521 your program is set up to do this, your @code{configure} script can simply
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3522 ignore most of its arguments.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3523
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3524 @comment The makefile standards are in a separate file that is also
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3525 @comment included by make.texinfo. Done by roland@gnu.ai.mit.edu on 1/6/93.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3526 @comment For this document, turn chapters into sections, etc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3527 @lowersections
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3528 @include make-stds.texi
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3529 @raisesections
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3530
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3531 @node Releases
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3532 @section Making Releases
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3533 @cindex packaging
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3534
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3535 Package the distribution of @code{Foo version 69.96} up in a gzipped tar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3536 file with the name @file{foo-69.96.tar.gz}. It should unpack into a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3537 subdirectory named @file{foo-69.96}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3538
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3539 Building and installing the program should never modify any of the files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3540 contained in the distribution. This means that all the files that form
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3541 part of the program in any way must be classified into @dfn{source
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3542 files} and @dfn{non-source files}. Source files are written by humans
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3543 and never changed automatically; non-source files are produced from
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3544 source files by programs under the control of the Makefile.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3545
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3546 @cindex @file{README} file
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3547 The distribution should contain a file named @file{README} which gives
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3548 the name of the package, and a general description of what it does. It
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3549 is also good to explain the purpose of each of the first-level
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3550 subdirectories in the package, if there are any. The @file{README} file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3551 should either state the version number of the package, or refer to where
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3552 in the package it can be found.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3553
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3554 The @file{README} file should refer to the file @file{INSTALL}, which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3555 should contain an explanation of the installation procedure.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3556
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3557 The @file{README} file should also refer to the file which contains the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3558 copying conditions. The GNU GPL, if used, should be in a file called
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3559 @file{COPYING}. If the GNU LGPL is used, it should be in a file called
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3560 @file{COPYING.LIB}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3561
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3562 Naturally, all the source files must be in the distribution. It is okay
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3563 to include non-source files in the distribution, provided they are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3564 up-to-date and machine-independent, so that building the distribution
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3565 normally will never modify them. We commonly include non-source files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3566 produced by Bison, @code{lex}, @TeX{}, and @code{makeinfo}; this helps avoid
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3567 unnecessary dependencies between our distributions, so that users can
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3568 install whichever packages they want to install.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3569
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3570 Non-source files that might actually be modified by building and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3571 installing the program should @strong{never} be included in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3572 distribution. So if you do distribute non-source files, always make
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3573 sure they are up to date when you make a new distribution.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3574
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3575 Make sure that the directory into which the distribution unpacks (as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3576 well as any subdirectories) are all world-writable (octal mode 777).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3577 This is so that old versions of @code{tar} which preserve the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3578 ownership and permissions of the files from the tar archive will be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3579 able to extract all the files even if the user is unprivileged.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3580
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3581 Make sure that all the files in the distribution are world-readable.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3582
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3583 Make sure that no file name in the distribution is more than 14
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3584 characters long. Likewise, no file created by building the program
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3585 should have a name longer than 14 characters. The reason for this is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3586 that some systems adhere to a foolish interpretation of the @sc{posix}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3587 standard, and refuse to open a longer name, rather than truncating as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3588 they did in the past.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3589
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3590 Don't include any symbolic links in the distribution itself. If the tar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3591 file contains symbolic links, then people cannot even unpack it on
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3592 systems that don't support symbolic links. Also, don't use multiple
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3593 names for one file in different directories, because certain file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3594 systems cannot handle this and that prevents unpacking the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3595 distribution.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3596
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3597 Try to make sure that all the file names will be unique on MS-DOS. A
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3598 name on MS-DOS consists of up to 8 characters, optionally followed by a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3599 period and up to three characters. MS-DOS will truncate extra
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3600 characters both before and after the period. Thus,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3601 @file{foobarhacker.c} and @file{foobarhacker.o} are not ambiguous; they
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3602 are truncated to @file{foobarha.c} and @file{foobarha.o}, which are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3603 distinct.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3604
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3605 @cindex @file{texinfo.tex}, in a distribution
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3606 Include in your distribution a copy of the @file{texinfo.tex} you used
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3607 to test print any @file{*.texinfo} or @file{*.texi} files.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3608
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3609 Likewise, if your program uses small GNU software packages like regex,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3610 getopt, obstack, or termcap, include them in the distribution file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3611 Leaving them out would make the distribution file a little smaller at
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3612 the expense of possible inconvenience to a user who doesn't know what
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3613 other files to get.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3614
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3615 @node References
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3616 @chapter References to Non-Free Software and Documentation
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3617 @cindex references to non-free material
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3618
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3619 A GNU program should not recommend use of any non-free program. We
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3620 can't stop some people from writing proprietary programs, or stop other
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3621 people from using them. But we can and should avoid helping to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3622 advertise them to new customers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3623
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3624 Sometimes it is important to mention how to build your package on top of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3625 some non-free operating system or other non-free base package. In such
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3626 cases, please mention the name of the non-free package or system in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3627 briefest possible way. Don't include any references for where to find
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3628 more information about the proprietary program. The goal should be that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3629 people already using the proprietary program will get the advice they
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3630 need about how to use your free program, while people who don't already
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3631 use the proprietary program will not see anything to encourage them to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3632 take an interest in it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3633
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3634 Likewise, a GNU package should not refer the user to any non-free
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3635 documentation for free software. The need for free documentation to go
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3636 with free software is now a major focus of the GNU project; to show that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3637 we are serious about the need for free documentation, we must not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3638 undermine our position by recommending use of documentation that isn't
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3639 free.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3640
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3641 @node Index
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3642 @unnumbered Index
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3643 @printindex cp
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3644
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3645 @contents
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3646
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3647 @bye
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3648 Local variables:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3649 update-date-leading-regexp: "@c This date is automagically updated when you save this file:\n@set lastupdate "
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3650 update-date-trailing-regexp: ""
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3651 eval: (load "/gd/gnuorg/update-date.el")
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3652 eval: (add-hook 'write-file-hooks 'update-date)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3653 compile-command: "make just-standards"
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3654 End: