Jakub Jelinek dc1803
--- etc/standards.texi.jj	2002-02-27 11:32:17.000000000 +0100
Jakub Jelinek dc1803
+++ etc/standards.texi	2005-08-18 19:05:42.000000000 +0200
Jakub Jelinek dc1803
@@ -3,16 +3,13 @@
Jakub Jelinek dc1803
 @setfilename standards.info
Jakub Jelinek dc1803
 @settitle GNU Coding Standards
Jakub Jelinek dc1803
 @c This date is automagically updated when you save this file:
Jakub Jelinek dc1803
-@set lastupdate February 14, 2002
Jakub Jelinek dc1803
+@set lastupdate June 8, 2005
Jakub Jelinek dc1803
 @c %**end of header
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
-@ifnottex
Jakub Jelinek dc1803
-@format
Jakub Jelinek dc1803
-START-INFO-DIR-ENTRY
Jakub Jelinek dc1803
+@dircategory GNU organization
Jakub Jelinek dc1803
+@direntry
Jakub Jelinek dc1803
 * Standards: (standards).        GNU coding standards.
Jakub Jelinek dc1803
-END-INFO-DIR-ENTRY
Jakub Jelinek dc1803
-@end format
Jakub Jelinek dc1803
-@end ifnottex
Jakub Jelinek dc1803
+@end direntry
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 @c @setchapternewpage odd
Jakub Jelinek dc1803
 @setchapternewpage off
Jakub Jelinek dc1803
@@ -32,9 +29,11 @@ END-INFO-DIR-ENTRY
Jakub Jelinek dc1803
 @set CHAPTER node
Jakub Jelinek dc1803
 @end ifnottex
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
-@ifnottex
Jakub Jelinek dc1803
-GNU Coding Standards
Jakub Jelinek dc1803
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
Jakub Jelinek dc1803
+@copying
Jakub Jelinek dc1803
+The GNU coding standards, last updated @value{lastupdate}.
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
Jakub Jelinek dc1803
+2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 Permission is granted to copy, distribute and/or modify this document
Jakub Jelinek dc1803
 under the terms of the GNU Free Documentation License, Version 1.1
Jakub Jelinek dc1803
@@ -43,32 +42,25 @@ with no Invariant Sections, with no
Jakub Jelinek dc1803
 Front-Cover Texts, and with no Back-Cover Texts.
Jakub Jelinek dc1803
 A copy of the license is included in the section entitled ``GNU
Jakub Jelinek dc1803
 Free Documentation License''.
Jakub Jelinek dc1803
-@end ifnottex
Jakub Jelinek dc1803
+@end copying
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 @titlepage
Jakub Jelinek dc1803
 @title GNU Coding Standards
Jakub Jelinek dc1803
 @author Richard Stallman, et al.
Jakub Jelinek dc1803
 @author last updated @value{lastupdate}
Jakub Jelinek dc1803
 @page
Jakub Jelinek dc1803
-
Jakub Jelinek dc1803
 @vskip 0pt plus 1filll
Jakub Jelinek dc1803
-Copyright @copyright{} 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
Jakub Jelinek dc1803
-
Jakub Jelinek dc1803
-Permission is granted to copy, distribute and/or modify this document
Jakub Jelinek dc1803
-under the terms of the GNU Free Documentation License, Version 1.1
Jakub Jelinek dc1803
-or any later version published by the Free Software Foundation;
Jakub Jelinek dc1803
-with no Invariant Sections, with no
Jakub Jelinek dc1803
-Front-Cover Texts, and with no Back-Cover Texts.
Jakub Jelinek dc1803
-A copy of the license is included in the section entitled ``GNU
Jakub Jelinek dc1803
-Free Documentation License''.
Jakub Jelinek dc1803
+@insertcopying
Jakub Jelinek dc1803
 @end titlepage
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
-@ifnottex
Jakub Jelinek dc1803
+@contents
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
+@ifnottex
Jakub Jelinek dc1803
 @node Top, Preface, (dir), (dir)
Jakub Jelinek dc1803
 @top Version
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
-Last updated @value{lastupdate}.
Jakub Jelinek dc1803
-@end ifnottex
Jakub Jelinek dc1803
+@insertcopying
Jakub Jelinek dc1803
+@end ifnottex
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 @menu
Jakub Jelinek dc1803
 * Preface::                     About the GNU Coding Standards
Jakub Jelinek dc1803
@@ -101,15 +93,10 @@ This release of the GNU Coding Standards
Jakub Jelinek dc1803
 @cindex where to obtain @code{standards.texi}
Jakub Jelinek dc1803
 @cindex downloading this manual
Jakub Jelinek dc1803
 If you did not obtain this file directly from the GNU project and
Jakub Jelinek dc1803
-recently, please check for a newer version.  You can ftp the GNU
Jakub Jelinek dc1803
-Coding Standards from any GNU FTP host in the directory
Jakub Jelinek dc1803
-@file{/pub/gnu/standards/}.  The GNU Coding Standards are available
Jakub Jelinek dc1803
-there in several different formats: @file{standards.text},
Jakub Jelinek dc1803
-@file{standards.info}, and @file{standards.dvi}, as well as the
Jakub Jelinek dc1803
-Texinfo ``source'' which is divided in two files:
Jakub Jelinek dc1803
-@file{standards.texi} and @file{make-stds.texi}.  The GNU Coding
Jakub Jelinek dc1803
-Standards are also available on the GNU World Wide Web server:
Jakub Jelinek dc1803
-@uref{http://www.gnu.org/prep/standards_toc.html}.
Jakub Jelinek dc1803
+recently, please check for a newer version.  You can get the GNU
Jakub Jelinek dc1803
+Coding Standards from the GNU web server in many
Jakub Jelinek dc1803
+different formats, including the Texinfo source, PDF, HTML, DVI, plain
Jakub Jelinek dc1803
+text, and more, at: @uref{http://www.gnu.org/prep/standards/}.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 Corrections or suggestions for this document should be sent to
Jakub Jelinek dc1803
 @email{bug-standards@@gnu.org}.  If you make a suggestion, please include a
Jakub Jelinek dc1803
@@ -129,11 +116,15 @@ be self-consistent---try to stick to the
Jakub Jelinek dc1803
 to document them as much as possible.  That way, your program will be
Jakub Jelinek dc1803
 more maintainable by others.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
+The GNU Hello program serves as an example of how to follow the GNU
Jakub Jelinek dc1803
+coding standards for a trivial program which prints @samp{Hello,
Jakub Jelinek dc1803
+world!}.  @uref{http://www.gnu.org/software/hello/hello.html}.
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
 @node Legal Issues
Jakub Jelinek dc1803
 @chapter Keeping Free Software Free
Jakub Jelinek dc1803
 @cindex legal aspects
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
-This @value{CHAPTER} discusses how you can make sure that GNU software
Jakub Jelinek dc1803
+This chapter discusses how you can make sure that GNU software
Jakub Jelinek dc1803
 avoids legal difficulties, and other related issues.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 @menu
Jakub Jelinek dc1803
@@ -211,7 +202,7 @@ You might have to take that code out aga
Jakub Jelinek dc1803
 You don't need papers for changes of a few lines here or there, since
Jakub Jelinek dc1803
 they are not significant for copyright purposes.  Also, you don't need
Jakub Jelinek dc1803
 papers if all you get from the suggestion is some ideas, not actual code
Jakub Jelinek dc1803
-which you use.  For example, if someone send you one implementation, but
Jakub Jelinek dc1803
+which you use.  For example, if someone sent you one implementation, but
Jakub Jelinek dc1803
 you write a different implementation of the same idea, you don't need to
Jakub Jelinek dc1803
 get papers.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
@@ -221,7 +212,8 @@ result.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 We have more detailed advice for maintainers of programs; if you have
Jakub Jelinek dc1803
 reached the stage of actually maintaining a program for GNU (whether
Jakub Jelinek dc1803
-released or not), please ask us for a copy.
Jakub Jelinek dc1803
+released or not), please ask us for a copy.  It is also available
Jakub Jelinek dc1803
+online for your perusal: @uref{http://www.gnu.org/prep/maintain/}.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 @node Trademarks
Jakub Jelinek dc1803
 @section Trademarks
Jakub Jelinek dc1803
@@ -232,24 +224,33 @@ packages or documentation.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 Trademark acknowledgements are the statements that such-and-such is a
Jakub Jelinek dc1803
 trademark of so-and-so.  The GNU Project has no objection to the basic
Jakub Jelinek dc1803
-idea of trademarks, but these acknowledgements feel like kowtowing, so
Jakub Jelinek dc1803
-we don't use them.  There is no legal requirement for them.
Jakub Jelinek dc1803
+idea of trademarks, but these acknowledgements feel like kowtowing, 
Jakub Jelinek dc1803
+and there is no legal requirement for them, so we don't use them.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 What is legally required, as regards other people's trademarks, is to
Jakub Jelinek dc1803
-avoid using them in ways which a reader might read as naming or labeling
Jakub Jelinek dc1803
-our own programs or activities.  For example, since ``Objective C'' is
Jakub Jelinek dc1803
-(or at least was) a trademark, we made sure to say that we provide a
Jakub Jelinek dc1803
-``compiler for the Objective C language'' rather than an ``Objective C
Jakub Jelinek dc1803
-compiler''.  The latter is meant to be short for the former, but it does
Jakub Jelinek dc1803
-not explicitly state the relationship, so it could be misinterpreted as
Jakub Jelinek dc1803
-using ``Objective C'' as a label for the compiler rather than for the
Jakub Jelinek dc1803
-language.
Jakub Jelinek dc1803
+avoid using them in ways which a reader might reasonably understand as
Jakub Jelinek dc1803
+naming or labeling our own programs or activities.  For example, since
Jakub Jelinek dc1803
+``Objective C'' is (or at least was) a trademark, we made sure to say
Jakub Jelinek dc1803
+that we provide a ``compiler for the Objective C language'' rather
Jakub Jelinek dc1803
+than an ``Objective C compiler''.  The latter would have been meant as
Jakub Jelinek dc1803
+a shorter way of saying the former, but it does not explicitly state
Jakub Jelinek dc1803
+the relationship, so it could be misinterpreted as using ``Objective
Jakub Jelinek dc1803
+C'' as a label for the compiler rather than for the language.
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
+Please don't use ``win'' as an abbreviation for Microsoft Windows in
Jakub Jelinek dc1803
+GNU software or documentation.  In hacker terminology, calling
Jakub Jelinek dc1803
+something a ``win'' is a form of praise.  If you wish to praise
Jakub Jelinek dc1803
+Microsoft Windows when speaking on your own, by all means do so, but
Jakub Jelinek dc1803
+not in GNU software.  Usually we write the name ``Windows'' in full,
Jakub Jelinek dc1803
+but when brevity is very important (as in file names and sometimes
Jakub Jelinek dc1803
+symbol names), we abbreviate it to ``w''.  For instance, the files and
Jakub Jelinek dc1803
+functions in Emacs that deal with Windows start with @samp{w32}.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 @node Design Advice
Jakub Jelinek dc1803
 @chapter General Program Design
Jakub Jelinek dc1803
 @cindex program design
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
-This @value{CHAPTER} discusses some of the issues you should take into
Jakub Jelinek dc1803
+This chapter discusses some of the issues you should take into
Jakub Jelinek dc1803
 account when designing your program.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 @c                         Standard or ANSI C
Jakub Jelinek dc1803
@@ -263,7 +264,7 @@ account when designing your program.
Jakub Jelinek dc1803
 @c A major revision of the C Standard appeared in 1999.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 @menu
Jakub Jelinek dc1803
-* Source Language::             Which languges to use.
Jakub Jelinek dc1803
+* Source Language::             Which languages to use.
Jakub Jelinek dc1803
 * Compatibility::               Compatibility with other implementations
Jakub Jelinek dc1803
 * Using Extensions::            Using non-standard features
Jakub Jelinek dc1803
 * Standard C::                  Using Standard C features
Jakub Jelinek dc1803
@@ -272,7 +273,7 @@ account when designing your program.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 @node Source Language
Jakub Jelinek dc1803
 @section Which Languages to Use
Jakub Jelinek dc1803
-@cindex programming languges
Jakub Jelinek dc1803
+@cindex programming languages
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 When you want to use a language that gets compiled and runs at high
Jakub Jelinek dc1803
 speed, the best language to use is C.  Using another language is like
Jakub Jelinek dc1803
@@ -476,6 +477,7 @@ For example, please write
Jakub Jelinek dc1803
     ...
Jakub Jelinek dc1803
 @end smallexample
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
+@noindent
Jakub Jelinek dc1803
 instead of:
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 @smallexample
Jakub Jelinek dc1803
@@ -488,11 +490,12 @@ instead of:
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 A modern compiler such as GCC will generate exactly the same code in
Jakub Jelinek dc1803
 both cases, and we have been using similar techniques with good success
Jakub Jelinek dc1803
-in several projects.
Jakub Jelinek dc1803
+in several projects.  Of course, the former method assumes that
Jakub Jelinek dc1803
+@code{HAS_FOO} is defined as either 0 or 1.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 While this is not a silver bullet solving all portability problems,
Jakub Jelinek dc1803
-following this policy would have saved the GCC project alone many person
Jakub Jelinek dc1803
-hours if not days per year.
Jakub Jelinek dc1803
+and is not always appropriate, following this policy would have saved
Jakub Jelinek dc1803
+GCC developers many hours, or even days, per year.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 In the case of function-like macros like @code{REVERSIBLE_CC_MODE} in
Jakub Jelinek dc1803
 GCC which cannot be simply used in @code{if( ...)} statements, there is
Jakub Jelinek dc1803
@@ -510,7 +513,7 @@ an easy workaround.  Simply introduce an
Jakub Jelinek dc1803
 @node Program Behavior
Jakub Jelinek dc1803
 @chapter Program Behavior for All Programs
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
-This @value{CHAPTER} describes conventions for writing robust
Jakub Jelinek dc1803
+This chapter describes conventions for writing robust
Jakub Jelinek dc1803
 software.  It also describes general standards for error messages, the
Jakub Jelinek dc1803
 command line interface, and how libraries should behave.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
@@ -679,10 +682,12 @@ Error messages from compilers should loo
Jakub Jelinek dc1803
 @end example
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 @noindent
Jakub Jelinek dc1803
-If you want to mention the column number, use this format:
Jakub Jelinek dc1803
+If you want to mention the column number, use one of these formats:
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 @example
Jakub Jelinek dc1803
 @var{source-file-name}:@var{lineno}:@var{column}: @var{message}
Jakub Jelinek dc1803
+@var{source-file-name}:@var{lineno}.@var{column}: @var{message}   
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
 @end example
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 @noindent
Jakub Jelinek dc1803
@@ -692,6 +697,24 @@ of these conventions are chosen for comp
Jakub Jelinek dc1803
 numbers assuming that space and all ASCII printing characters have
Jakub Jelinek dc1803
 equal width, and assuming tab stops every 8 columns.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
+The error message can also give both the starting and ending positions
Jakub Jelinek dc1803
+of the erroneous text.  There are several formats so that you can
Jakub Jelinek dc1803
+avoid redundant information such as a duplicate line number.
Jakub Jelinek dc1803
+Here are the possible formats:
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
+@example
Jakub Jelinek dc1803
+@var{source-file-name}:@var{lineno-1}.@var{column-1}-@var{lineno-2}.@var{column-2}: @var{message}
Jakub Jelinek dc1803
+@var{source-file-name}:@var{lineno-1}.@var{column-1}-@var{column-2}: @var{message}
Jakub Jelinek dc1803
+@var{source-file-name}:@var{lineno-1}-@var{lineno-2}: @var{message}
Jakub Jelinek dc1803
+@end example
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
+@noindent
Jakub Jelinek dc1803
+When an error is spread over several files, you can use this format:
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
+@example
Jakub Jelinek dc1803
+@var{file-1}:@var{lineno-1}.@var{column-1}-@var{file-2}:@var{lineno-2}.@var{column-2}: @var{message}
Jakub Jelinek dc1803
+@end example
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
 Error messages from other noninteractive programs should look like this:
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 @example
Jakub Jelinek dc1803
@@ -722,8 +745,9 @@ input from a source other than a termina
Jakub Jelinek dc1803
 would do best to print error messages using the noninteractive style.)
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 The string @var{message} should not begin with a capital letter when
Jakub Jelinek dc1803
-it follows a program name and/or file name.  Also, it should not end
Jakub Jelinek dc1803
-with a period.
Jakub Jelinek dc1803
+it follows a program name and/or file name, because that isn't the
Jakub Jelinek dc1803
+beginning of a sentence.  (The sentence conceptually starts at the
Jakub Jelinek dc1803
+beginning of the line.)  Also, it should not end with a period.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 Error messages from interactive programs, and other messages such as
Jakub Jelinek dc1803
 usage messages, should start with a capital letter.  But they should not
Jakub Jelinek dc1803
@@ -767,9 +791,9 @@ multi-column format.
Jakub Jelinek dc1803
 @section Standards for Graphical Interfaces
Jakub Jelinek dc1803
 @cindex graphical user interface
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
-@cindex gtk
Jakub Jelinek dc1803
+@cindex gtk+
Jakub Jelinek dc1803
 When you write a program that provides a graphical user interface,
Jakub Jelinek dc1803
-please make it work with X Windows and the GTK toolkit unless the
Jakub Jelinek dc1803
+please make it work with X Windows and the GTK+ toolkit unless the
Jakub Jelinek dc1803
 functionality specifically requires some alternative (for example,
Jakub Jelinek dc1803
 ``displaying jpeg images while in console mode'').
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
@@ -819,8 +843,15 @@ option as another way to specify it.  Th
Jakub Jelinek dc1803
 among GNU utilities, and fewer idiosyncracies for users to remember.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 @cindex standard command-line options
Jakub Jelinek dc1803
+@cindex options, standard command-line
Jakub Jelinek dc1803
+@cindex CGI programs, standard options for
Jakub Jelinek dc1803
+@cindex PATH_INFO, specifying standard options as
Jakub Jelinek dc1803
 All programs should support two standard options: @samp{--version}
Jakub Jelinek dc1803
-and @samp{--help}.
Jakub Jelinek dc1803
+and @samp{--help}.  CGI programs should accept these as command-line
Jakub Jelinek dc1803
+options, and also if given as the @env{PATH_INFO}; for instance,
Jakub Jelinek dc1803
+visiting @url{http://example.org/p.cgi/--help} in a browser should
Jakub Jelinek dc1803
+output the same information as invoking @samp{p.cgi --help} from the
Jakub Jelinek dc1803
+command line.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 @table @code
Jakub Jelinek dc1803
 @cindex @samp{--version} option
Jakub Jelinek dc1803
@@ -1461,9 +1492,7 @@ Used in @code{gawk}.
Jakub Jelinek dc1803
 Used in @code{su}.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 @item machine
Jakub Jelinek dc1803
-No listing of which programs already use this;
Jakub Jelinek dc1803
-someone should check to
Jakub Jelinek dc1803
-see if any actually do, and tell @email{gnu@@gnu.org}.
Jakub Jelinek dc1803
+Used in @code{uname}.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 @item macro-name
Jakub Jelinek dc1803
 @samp{-M} in @code{ptx}.
Jakub Jelinek dc1803
@@ -1573,6 +1602,9 @@ Used in GDB.
Jakub Jelinek dc1803
 @item no-sort
Jakub Jelinek dc1803
 @samp{-p} in @code{nm}.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
+@item no-splash
Jakub Jelinek dc1803
+Don't print a startup splash screen.
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
 @item no-split
Jakub Jelinek dc1803
 Used in @code{makeinfo}.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
@@ -1740,7 +1772,7 @@ Specify an HTTP proxy.
Jakub Jelinek dc1803
 @samp{-q} in Make.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 @item quiet
Jakub Jelinek dc1803
-Used in many programs to inhibit the usual output.  @strong{Note:} every
Jakub Jelinek dc1803
+Used in many programs to inhibit the usual output.  Every
Jakub Jelinek dc1803
 program accepting @samp{--quiet} should accept @samp{--silent} as a
Jakub Jelinek dc1803
 synonym.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
@@ -1855,7 +1887,7 @@ Used by @code{recode} to chose files or 
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 @item silent
Jakub Jelinek dc1803
 Used in many programs to inhibit the usual output.
Jakub Jelinek dc1803
-@strong{Note:} every program accepting
Jakub Jelinek dc1803
+Every program accepting
Jakub Jelinek dc1803
 @samp{--silent} should accept @samp{--quiet} as a synonym.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 @item size
Jakub Jelinek dc1803
@@ -2098,7 +2130,7 @@ directory.
Jakub Jelinek dc1803
 @node Writing C
Jakub Jelinek dc1803
 @chapter Making The Best Use of C
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
-This @value{CHAPTER} provides advice on how best to use the C language
Jakub Jelinek dc1803
+This chapter provides advice on how best to use the C language
Jakub Jelinek dc1803
 when writing GNU software.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 @menu
Jakub Jelinek dc1803
@@ -2128,13 +2160,12 @@ These tools will not work on code not fo
Jakub Jelinek dc1803
 It is also important for function definitions to start the name of the
Jakub Jelinek dc1803
 function in column zero.  This helps people to search for function
Jakub Jelinek dc1803
 definitions, and may also help certain tools recognize them.  Thus,
Jakub Jelinek dc1803
-the proper format is this:
Jakub Jelinek dc1803
+using Standard C syntax, the format is this:
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 @example
Jakub Jelinek dc1803
 static char *
Jakub Jelinek dc1803
-concat (s1, s2)        /* Name starts in column zero here */
Jakub Jelinek dc1803
-     char *s1, *s2;
Jakub Jelinek dc1803
-@{                     /* Open brace in column zero here */
Jakub Jelinek dc1803
+concat (char *s1, char *s2)
Jakub Jelinek dc1803
+@{
Jakub Jelinek dc1803
   @dots{}
Jakub Jelinek dc1803
 @}
Jakub Jelinek dc1803
 @end example
Jakub Jelinek dc1803
@@ -2145,8 +2176,9 @@ this:
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 @example
Jakub Jelinek dc1803
 static char *
Jakub Jelinek dc1803
-concat (char *s1, char *s2)
Jakub Jelinek dc1803
-@{
Jakub Jelinek dc1803
+concat (s1, s2)        /* Name starts in column zero here */
Jakub Jelinek dc1803
+     char *s1, *s2;
Jakub Jelinek dc1803
+@{                     /* Open brace in column zero here */
Jakub Jelinek dc1803
   @dots{}
Jakub Jelinek dc1803
 @}
Jakub Jelinek dc1803
 @end example
Jakub Jelinek dc1803
@@ -2383,7 +2415,7 @@ functions.
Jakub Jelinek dc1803
 @cindex temporary variables
Jakub Jelinek dc1803
 It used to be common practice to use the same local variables (with
Jakub Jelinek dc1803
 names like @code{tem}) over and over for different values within one
Jakub Jelinek dc1803
-function.  Instead of doing this, it is better declare a separate local
Jakub Jelinek dc1803
+function.  Instead of doing this, it is better to declare a separate local
Jakub Jelinek dc1803
 variable for each distinct purpose, and give it a name which is
Jakub Jelinek dc1803
 meaningful.  This not only makes programs easier to understand, it also
Jakub Jelinek dc1803
 facilitates optimization by good compilers.  You can also move the
Jakub Jelinek dc1803
@@ -2584,11 +2616,20 @@ Avoid using the format of semi-internal 
Jakub Jelinek dc1803
 when there is a higher-level alternative (@code{readdir}).
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 @cindex non-@sc{posix} systems, and portability
Jakub Jelinek dc1803
-As for systems that are not like Unix, such as MSDOS, Windows, the
Jakub Jelinek dc1803
-Macintosh, VMS, and MVS, supporting them is often a lot of work.  When
Jakub Jelinek dc1803
-that is the case, it is better to spend your time adding features that
Jakub Jelinek dc1803
-will be useful on GNU and GNU/Linux, rather than on supporting other
Jakub Jelinek dc1803
-incompatible systems.
Jakub Jelinek dc1803
+As for systems that are not like Unix, such as MSDOS, Windows, VMS,
Jakub Jelinek dc1803
+MVS, and older Macintosh systems, supporting them is often a lot of
Jakub Jelinek dc1803
+work.  When that is the case, it is better to spend your time adding
Jakub Jelinek dc1803
+features that will be useful on GNU and GNU/Linux, rather than on
Jakub Jelinek dc1803
+supporting other incompatible systems.
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
+If you do support Windows, please do not abbreviate it as ``win''.  In
Jakub Jelinek dc1803
+hacker terminology, calling something a ``win'' is a form of praise.
Jakub Jelinek dc1803
+You're free to praise Microsoft Windows on your own if you want, but
Jakub Jelinek dc1803
+please don't do this in GNU packages.  Instead of abbreviating
Jakub Jelinek dc1803
+``Windows'' to ``un'', you can write it in full or abbreviate it to
Jakub Jelinek dc1803
+``woe'' or ``w''.  In GNU Emacs, for instance, we use @samp{w32} in
Jakub Jelinek dc1803
+file names of Windows-specific files, but the macro for Windows
Jakub Jelinek dc1803
+conditionals is called @code{WINDOWSNT}.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 It is a good idea to define the ``feature test macro''
Jakub Jelinek dc1803
 @code{_GNU_SOURCE} when compiling your C files.  When you compile on GNU
Jakub Jelinek dc1803
@@ -2644,37 +2685,50 @@ while ((c = getchar()) != EOF)
Jakub Jelinek dc1803
   write(file_descriptor, &c, 1);
Jakub Jelinek dc1803
 @end example
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
-When calling functions, you need not worry about the difference between
Jakub Jelinek dc1803
-pointers of various types, or between pointers and integers.  On most
Jakub Jelinek dc1803
-machines, there's no difference anyway.  As for the few machines where
Jakub Jelinek dc1803
-there is a difference, all of them support Standard C prototypes, so you can
Jakub Jelinek dc1803
-use prototypes (perhaps conditionalized to be active only in Standard C)
Jakub Jelinek dc1803
-to make the code work on those systems.
Jakub Jelinek dc1803
-
Jakub Jelinek dc1803
-In certain cases, it is ok to pass integer and pointer arguments
Jakub Jelinek dc1803
-indiscriminately to the same function, and use no prototype on any
Jakub Jelinek dc1803
-system.  For example, many GNU programs have error-reporting functions
Jakub Jelinek dc1803
-that pass their arguments along to @code{printf} and friends:
Jakub Jelinek dc1803
-
Jakub Jelinek dc1803
-@example
Jakub Jelinek dc1803
-error (s, a1, a2, a3)
Jakub Jelinek dc1803
-     char *s;
Jakub Jelinek dc1803
-     char *a1, *a2, *a3;
Jakub Jelinek dc1803
-@{
Jakub Jelinek dc1803
-  fprintf (stderr, "error: ");
Jakub Jelinek dc1803
-  fprintf (stderr, s, a1, a2, a3);
Jakub Jelinek dc1803
-@}
Jakub Jelinek dc1803
+It used to be ok to not worry about the difference between pointers
Jakub Jelinek dc1803
+and integers when passing arguments to functions.  However, on most
Jakub Jelinek dc1803
+modern 64-bit machines pointers are wider than @code{int}.
Jakub Jelinek dc1803
+Conversely, integer types like @code{long long int} and @code{off_t}
Jakub Jelinek dc1803
+are wider than pointers on most modern 32-bit machines.  Hence it's
Jakub Jelinek dc1803
+often better nowadays to use prototypes to define functions whose
Jakub Jelinek dc1803
+argument types are not trivial.
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
+In particular, if functions accept varying argument counts or types
Jakub Jelinek dc1803
+they should be declared using prototypes containing @samp{...} and
Jakub Jelinek dc1803
+defined using @file{stdarg.h}.  For an example of this, please see the
Jakub Jelinek dc1803
+@uref{http://www.gnu.org/software/gnulib/, Gnulib} error module, which
Jakub Jelinek dc1803
+declares and defines the following function:
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
+@example
Jakub Jelinek dc1803
+/* Print a message with `fprintf (stderr, FORMAT, ...)';
Jakub Jelinek dc1803
+   if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM).
Jakub Jelinek dc1803
+   If STATUS is nonzero, terminate the program with `exit (STATUS)'.  */
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
+void error (int status, int errnum, const char *format, ...);
Jakub Jelinek dc1803
 @end example
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
-@noindent
Jakub Jelinek dc1803
-In practice, this works on all machines, since a pointer is generally
Jakub Jelinek dc1803
-the widest possible kind of argument; it is much simpler than any
Jakub Jelinek dc1803
-``correct'' alternative.  Be sure @emph{not} to use a prototype for such
Jakub Jelinek dc1803
-functions.
Jakub Jelinek dc1803
+A simple way to use the Gnulib error module is to obtain the two
Jakub Jelinek dc1803
+source files @file{error.c} and @file{error.h} from the Gnulib library
Jakub Jelinek dc1803
+source code repository at
Jakub Jelinek dc1803
+@uref{http://savannah.gnu.org/cgi-bin/viewcvs/gnulib/gnulib/lib/}.
Jakub Jelinek dc1803
+Here's a sample use:
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
-If you have decided to use Standard C, then you can instead define
Jakub Jelinek dc1803
-@code{error} using @file{stdarg.h}, and pass the arguments along to
Jakub Jelinek dc1803
-@code{vfprintf}.
Jakub Jelinek dc1803
+@example
Jakub Jelinek dc1803
+#include "error.h"
Jakub Jelinek dc1803
+#include <errno.h>
Jakub Jelinek dc1803
+#include <stdio.h>
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
+char *program_name = "myprogram";
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
+FILE *
Jakub Jelinek dc1803
+xfopen (char const *name)
Jakub Jelinek dc1803
+@{
Jakub Jelinek dc1803
+  FILE *fp = fopen (name, "r");
Jakub Jelinek dc1803
+  if (! fp)
Jakub Jelinek dc1803
+    error (1, errno, "cannot read %s", name);
Jakub Jelinek dc1803
+  return fp;
Jakub Jelinek dc1803
+@}
Jakub Jelinek dc1803
+@end example
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 @cindex casting pointers to integers
Jakub Jelinek dc1803
 Avoid casting pointers to integers if you can.  Such casts greatly
Jakub Jelinek dc1803
@@ -3000,10 +3054,13 @@ together, we can make the whole subject 
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 The manual which discusses a program should certainly document all of
Jakub Jelinek dc1803
 the program's command-line options and all of its commands.  It should
Jakub Jelinek dc1803
-give examples of their use.  But don't organize the manual as a list of
Jakub Jelinek dc1803
-features.  Instead, organize it logically, by subtopics.  Address the
Jakub Jelinek dc1803
-questions that a user will ask when thinking about the job that the
Jakub Jelinek dc1803
-program does.
Jakub Jelinek dc1803
+give examples of their use.  But don't organize the manual as a list
Jakub Jelinek dc1803
+of features.  Instead, organize it logically, by subtopics.  Address
Jakub Jelinek dc1803
+the questions that a user will ask when thinking about the job that
Jakub Jelinek dc1803
+the program does.  Don't just tell the reader what each feature can
Jakub Jelinek dc1803
+do---say what jobs it is good for, and show how to use it for those
Jakub Jelinek dc1803
+jobs.  Explain what is recommended usage, and what kinds of usage
Jakub Jelinek dc1803
+users should avoid.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 In general, a GNU manual should serve both as tutorial and reference.
Jakub Jelinek dc1803
 It should be set up for convenient access to each topic through Info,
Jakub Jelinek dc1803
@@ -3030,9 +3087,9 @@ functions, variables, options, and impor
Jakub Jelinek dc1803
 the program.  One combined Index should do for a short manual, but
Jakub Jelinek dc1803
 sometimes for a complex package it is better to use multiple indices.
Jakub Jelinek dc1803
 The Texinfo manual includes advice on preparing good index entries, see
Jakub Jelinek dc1803
-@ref{Index Entries, , Making Index Entries, texinfo, The GNU Texinfo
Jakub Jelinek dc1803
-Manual}, and see @ref{Indexing Commands, , Defining the Entries of an
Jakub Jelinek dc1803
-Index, texinfo, The GNU Texinfo manual}.
Jakub Jelinek dc1803
+@ref{Index Entries, , Making Index Entries, texinfo, GNU Texinfo}, and
Jakub Jelinek dc1803
+see @ref{Indexing Commands, , Defining the Entries of an
Jakub Jelinek dc1803
+Index, texinfo, GNU Texinfo}.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 Don't use Unix man pages as a model for how to write GNU documentation;
Jakub Jelinek dc1803
 most of them are terse, badly structured, and give inadequate
Jakub Jelinek dc1803
@@ -3041,15 +3098,15 @@ exceptions.)  Also, Unix man pages use a
Jakub Jelinek dc1803
 different from what we use in GNU manuals.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 Please include an email address in the manual for where to report
Jakub Jelinek dc1803
-bugs @emph{in the manual}.
Jakub Jelinek dc1803
+bugs @emph{in the text of the manual}.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 Please do not use the term ``pathname'' that is used in Unix
Jakub Jelinek dc1803
 documentation; use ``file name'' (two words) instead.  We use the term
Jakub Jelinek dc1803
 ``path'' only for search paths, which are lists of directory names.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
-Please do not use the term ``illegal'' to refer to erroneous input to a
Jakub Jelinek dc1803
-computer program.  Please use ``invalid'' for this, and reserve the term
Jakub Jelinek dc1803
-``illegal'' for activities punishable by law.
Jakub Jelinek dc1803
+Please do not use the term ``illegal'' to refer to erroneous input to
Jakub Jelinek dc1803
+a computer program.  Please use ``invalid'' for this, and reserve the
Jakub Jelinek dc1803
+term ``illegal'' for activities prohibited by law.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 @node Doc Strings and Manuals
Jakub Jelinek dc1803
 @section Doc Strings and Manuals
Jakub Jelinek dc1803
@@ -3092,7 +3149,7 @@ Each program documented in the manual sh
Jakub Jelinek dc1803
 @samp{@var{program} Invocation} or @samp{Invoking @var{program}}.  This
Jakub Jelinek dc1803
 node (together with its subnodes, if any) should describe the program's
Jakub Jelinek dc1803
 command line arguments and how to run it (the sort of information people
Jakub Jelinek dc1803
-would look in a man page for).  Start with an @samp{@@example}
Jakub Jelinek dc1803
+would look for in a man page).  Start with an @samp{@@example}
Jakub Jelinek dc1803
 containing a template for all the options and arguments that the program
Jakub Jelinek dc1803
 uses.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
@@ -3210,6 +3267,11 @@ code.  For example, ``New function'' is 
Jakub Jelinek dc1803
 you add a function, because there should be a comment before the
Jakub Jelinek dc1803
 function definition to explain what it does.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
+In the past, we recommended not mentioning changes in non-software
Jakub Jelinek dc1803
+files (manuals, help files, etc.) in change logs.  However, we've been
Jakub Jelinek dc1803
+advised that it is a good idea to include them, for the sake of
Jakub Jelinek dc1803
+copyright records.
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
 However, sometimes it is useful to write one line to describe the
Jakub Jelinek dc1803
 overall purpose of a batch of changes.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
@@ -3224,9 +3286,9 @@ Then describe the changes you made to th
Jakub Jelinek dc1803
 @cindex change logs, style
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 Here are some simple examples of change log entries, starting with the
Jakub Jelinek dc1803
-header line that says who made the change and when, followed by
Jakub Jelinek dc1803
-descriptions of specific changes.  (These examples are drawn from Emacs
Jakub Jelinek dc1803
-and GCC.)
Jakub Jelinek dc1803
+header line that says who made the change and when it was installed,
Jakub Jelinek dc1803
+followed by descriptions of specific changes.  (These examples are
Jakub Jelinek dc1803
+drawn from Emacs and GCC.)
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 @example
Jakub Jelinek dc1803
 1998-08-17  Richard Stallman  <rms@@gnu.org>
Jakub Jelinek dc1803
@@ -3270,6 +3332,27 @@ Break long lists of function names by cl
Jakub Jelinek dc1803
 (Fexecute_extended_command): Deal with `keymap' property.
Jakub Jelinek dc1803
 @end example
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
+When you install someone else's changes, put the contributor's name in
Jakub Jelinek dc1803
+the change log entry rather than in the text of the entry.  In other
Jakub Jelinek dc1803
+words, write this:
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
+@example
Jakub Jelinek dc1803
+2002-07-14  John Doe  <jdoe@@gnu.org>
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
+        * sewing.c: Make it sew.
Jakub Jelinek dc1803
+@end example
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
+@noindent
Jakub Jelinek dc1803
+rather than this:
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
+@example
Jakub Jelinek dc1803
+2002-07-14  Usual Maintainer  <usual@@gnu.org>
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
+        * sewing.c: Make it sew.  Patch by jdoe@@gnu.org.
Jakub Jelinek dc1803
+@end example
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
+As for the date, that should be the date you applied the change.
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
 @node Simple Changes
Jakub Jelinek dc1803
 @subsection Simple Changes
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
@@ -3291,12 +3374,17 @@ When you change just comments or doc str
Jakub Jelinek dc1803
 entry for the file, without mentioning the functions.  Just ``Doc
Jakub Jelinek dc1803
 fixes'' is enough for the change log.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
-There's no need to make change log entries for documentation files.
Jakub Jelinek dc1803
-This is because documentation is not susceptible to bugs that are hard
Jakub Jelinek dc1803
-to fix.  Documentation does not consist of parts that must interact in a
Jakub Jelinek dc1803
-precisely engineered fashion.  To correct an error, you need not know
Jakub Jelinek dc1803
-the history of the erroneous passage; it is enough to compare what the
Jakub Jelinek dc1803
-documentation says with the way the program actually works.
Jakub Jelinek dc1803
+There's no technical need to make change log entries for documentation
Jakub Jelinek dc1803
+files.  This is because documentation is not susceptible to bugs that
Jakub Jelinek dc1803
+are hard to fix.  Documentation does not consist of parts that must
Jakub Jelinek dc1803
+interact in a precisely engineered fashion.  To correct an error, you
Jakub Jelinek dc1803
+need not know the history of the erroneous passage; it is enough to
Jakub Jelinek dc1803
+compare what the documentation says with the way the program actually
Jakub Jelinek dc1803
+works.
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
+However, you should keep change logs for documentation files when the
Jakub Jelinek dc1803
+project gets copyright assignments from its contributors, so as to
Jakub Jelinek dc1803
+make the records of authorship more accurate.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 @node Conditional Changes
Jakub Jelinek dc1803
 @subsection Conditional Changes
Jakub Jelinek dc1803
@@ -3387,6 +3475,25 @@ page explaining that you don't maintain 
Jakub Jelinek dc1803
 is more authoritative.  The note should say how to access the Texinfo
Jakub Jelinek dc1803
 documentation.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
+Be sure that man pages include a copyright statement and free
Jakub Jelinek dc1803
+license.  The simple all-permissive license is appropriate for simple
Jakub Jelinek dc1803
+man pages:
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
+@example
Jakub Jelinek dc1803
+Copying and distribution of this file, with or without modification,
Jakub Jelinek dc1803
+are permitted in any medium without royalty provided the copyright
Jakub Jelinek dc1803
+notice and this notice are preserved.
Jakub Jelinek dc1803
+@end example
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
+For long man pages, with enough explanation and documentation that
Jakub Jelinek dc1803
+they can be considered true manuals, use the GFDL (@pxref{License for
Jakub Jelinek dc1803
+Manuals}).
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
+Finally, the GNU help2man program
Jakub Jelinek dc1803
+(@uref{http://www.gnu.org/software/help2man/}) is one way to automate
Jakub Jelinek dc1803
+generation of a man page, in this case from @option{--help} output.
Jakub Jelinek dc1803
+This is sufficient in many cases.
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
 @node Reading other Manuals
Jakub Jelinek dc1803
 @section Reading other Manuals
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
@@ -3486,19 +3593,26 @@ this:
Jakub Jelinek dc1803
 @var{cpu}-@var{company}-@var{system}
Jakub Jelinek dc1803
 @end example
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
-For example, a Sun 3 might be @samp{m68k-sun-sunos4.1}.
Jakub Jelinek dc1803
+For example, an Athlon-based GNU/Linux system might be
Jakub Jelinek dc1803
+@samp{i686-pc-linux-gnu}.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 The @code{configure} script needs to be able to decode all plausible
Jakub Jelinek dc1803
-alternatives for how to describe a machine.  Thus, @samp{sun3-sunos4.1}
Jakub Jelinek dc1803
-would be a valid alias.  For many programs, @samp{vax-dec-ultrix} would
Jakub Jelinek dc1803
-be an alias for @samp{vax-dec-bsd}, simply because the differences
Jakub Jelinek dc1803
-between Ultrix and @sc{bsd} are rarely noticeable, but a few programs
Jakub Jelinek dc1803
-might need to distinguish them.
Jakub Jelinek dc1803
-@c Real 4.4BSD now runs on some Suns.
Jakub Jelinek dc1803
-
Jakub Jelinek dc1803
-There is a shell script called @file{config.sub} that you can use
Jakub Jelinek dc1803
+alternatives for how to describe a machine.  Thus,
Jakub Jelinek dc1803
+@samp{athlon-pc-gnu/linux} would be a valid alias.
Jakub Jelinek dc1803
+There is a shell script called
Jakub Jelinek dc1803
+@uref{ftp://ftp.gnu.org/gnu/config/config.sub, @file{config.sub}}
Jakub Jelinek dc1803
+that you can use
Jakub Jelinek dc1803
 as a subroutine to validate system types and canonicalize aliases.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
+The @code{configure} script should also take the option
Jakub Jelinek dc1803
+@option{--build=@var{buildtype}}, which should be equivalent to a
Jakub Jelinek dc1803
+plain @var{buildtype} argument.  For example, @samp{configure
Jakub Jelinek dc1803
+--build=i686-pc-linux-gnu} is equivalent to @samp{configure
Jakub Jelinek dc1803
+i686-pc-linux-gnu}.  When the build type is not specified by an option
Jakub Jelinek dc1803
+or argument, the @code{configure} script should normally guess it
Jakub Jelinek dc1803
+using the shell script
Jakub Jelinek dc1803
+@uref{ftp://ftp.gnu.org/gnu/config/config.guess, @file{config.guess}}.
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
 @cindex optional features, configure-time
Jakub Jelinek dc1803
 Other options are permitted to specify in more detail the software
Jakub Jelinek dc1803
 or hardware present on the machine, and include or exclude optional
Jakub Jelinek dc1803
@@ -3558,6 +3672,11 @@ The @code{configure} script should norma
Jakub Jelinek dc1803
 system as both the host and the target, thus producing a program which
Jakub Jelinek dc1803
 works for the same type of machine that it runs on.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
+To compile a program to run on a host type that differs from the build
Jakub Jelinek dc1803
+type, use the configure option @option{--host=@var{hosttype}}, where
Jakub Jelinek dc1803
+@var{hosttype} uses the same syntax as @var{buildtype}.  The host type
Jakub Jelinek dc1803
+normally defaults to the build type.
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
 To configure a cross-compiler, cross-assembler, or what have you, you
Jakub Jelinek dc1803
 should specify a target different from the host, using the configure
Jakub Jelinek dc1803
 option @samp{--target=@var{targettype}}.  The syntax for
Jakub Jelinek dc1803
@@ -3565,22 +3684,14 @@ option @samp{--target=@var{targettype}}.
Jakub Jelinek dc1803
 look like this:
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 @example
Jakub Jelinek dc1803
-./configure @var{hosttype} --target=@var{targettype}
Jakub Jelinek dc1803
+./configure --host=@var{hosttype} --target=@var{targettype}
Jakub Jelinek dc1803
 @end example
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
+The target type normally defaults to the host type.
Jakub Jelinek dc1803
 Programs for which cross-operation is not meaningful need not accept the
Jakub Jelinek dc1803
 @samp{--target} option, because configuring an entire operating system for
Jakub Jelinek dc1803
 cross-operation is not a meaningful operation.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
-Bootstrapping a cross-compiler requires compiling it on a machine other
Jakub Jelinek dc1803
-than the host it will run on.  Compilation packages accept a
Jakub Jelinek dc1803
-configuration option @samp{--build=@var{buildtype}} for specifying the
Jakub Jelinek dc1803
-configuration on which you will compile them, but the configure script
Jakub Jelinek dc1803
-should normally guess the build machine type (using
Jakub Jelinek dc1803
-@file{config.guess}), so this option is probably not necessary.  The
Jakub Jelinek dc1803
-host and target types normally default from the build type, so in
Jakub Jelinek dc1803
-bootstrapping a cross-compiler you must specify them both explicitly.
Jakub Jelinek dc1803
-
Jakub Jelinek dc1803
 Some programs have ways of configuring themselves automatically.  If
Jakub Jelinek dc1803
 your program is set up to do this, your @code{configure} script can simply
Jakub Jelinek dc1803
 ignore most of its arguments.
Jakub Jelinek dc1803
@@ -3596,6 +3707,10 @@ ignore most of its arguments.
Jakub Jelinek dc1803
 @section Making Releases
Jakub Jelinek dc1803
 @cindex packaging
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
+You should identify each release with a pair of version numbers, a
Jakub Jelinek dc1803
+major version and a minor.  We have no objection to using more than
Jakub Jelinek dc1803
+two numbers, but it is very unlikely that you really need them.
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
 Package the distribution of @code{Foo version 69.96} up in a gzipped tar
Jakub Jelinek dc1803
 file with the name @file{foo-69.96.tar.gz}.  It should unpack into a
Jakub Jelinek dc1803
 subdirectory named @file{foo-69.96}.
Jakub Jelinek dc1803
@@ -3644,13 +3759,6 @@ able to extract all the files even if th
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 Make sure that all the files in the distribution are world-readable.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
-Make sure that no file name in the distribution is more than 14
Jakub Jelinek dc1803
-characters long.  Likewise, no file created by building the program
Jakub Jelinek dc1803
-should have a name longer than 14 characters.  The reason for this is
Jakub Jelinek dc1803
-that some systems adhere to a foolish interpretation of the @sc{posix}
Jakub Jelinek dc1803
-standard, and refuse to open a longer name, rather than truncating as
Jakub Jelinek dc1803
-they did in the past.
Jakub Jelinek dc1803
-
Jakub Jelinek dc1803
 Don't include any symbolic links in the distribution itself.  If the tar
Jakub Jelinek dc1803
 file contains symbolic links, then people cannot even unpack it on
Jakub Jelinek dc1803
 systems that don't support symbolic links.  Also, don't use multiple
Jakub Jelinek dc1803
@@ -3682,16 +3790,27 @@ other files to get.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 A GNU program should not recommend use of any non-free program.  We
Jakub Jelinek dc1803
 can't stop some people from writing proprietary programs, or stop
Jakub Jelinek dc1803
-other people from using them, but we can and should avoid helping to
Jakub Jelinek dc1803
+other people from using them, but we can and should refuse to
Jakub Jelinek dc1803
 advertise them to new potential customers.  Proprietary software is a
Jakub Jelinek dc1803
 social and ethical problem, and the point of GNU is to solve that
Jakub Jelinek dc1803
 problem.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
+The GNU definition of free software is found on the GNU web site at
Jakub Jelinek dc1803
+@url{http://www.gnu.org/philosophy/free-sw.html}.  A list of
Jakub Jelinek dc1803
+important licenses and whether they qualify as free is in
Jakub Jelinek dc1803
+@url{http://www.gnu.org/licenses/license-list.html}.  The terms
Jakub Jelinek dc1803
+``free'' and ``non-free'', used in this document, refer to that
Jakub Jelinek dc1803
+definition.  If it is not clear whether a license qualifies as free
Jakub Jelinek dc1803
+under this definition, please ask the GNU Project by writing to
Jakub Jelinek dc1803
+@email{licensing@@gnu.org}.  We will answer, and if the license is an
Jakub Jelinek dc1803
+important one, we will add it to the list.
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
 When a non-free program or system is well known, you can mention it in
Jakub Jelinek dc1803
 passing---that is harmless, since users who might want to use it
Jakub Jelinek dc1803
 probably already know about it.  For instance, it is fine to explain
Jakub Jelinek dc1803
-how to build your package on top of some non-free operating system, or
Jakub Jelinek dc1803
-how to use it together with some widely used non-free program.
Jakub Jelinek dc1803
+how to build your package on top of some widely used non-free
Jakub Jelinek dc1803
+operating system, or how to use it together with some widely used
Jakub Jelinek dc1803
+non-free program.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 However, you should give only the necessary information to help those
Jakub Jelinek dc1803
 who already use the non-free program to use your program with
Jakub Jelinek dc1803
@@ -3700,8 +3819,8 @@ proprietary program, and don't imply tha
Jakub Jelinek dc1803
 enhances your program, or that its existence is in any way a good
Jakub Jelinek dc1803
 thing.  The goal should be that people already using the proprietary
Jakub Jelinek dc1803
 program will get the advice they need about how to use your free
Jakub Jelinek dc1803
-program, while people who don't already use the proprietary program
Jakub Jelinek dc1803
-will not see anything to lead them to take an interest in it.
Jakub Jelinek dc1803
+program with it, while people who don't already use the proprietary
Jakub Jelinek dc1803
+program will not see anything to lead them to take an interest in it.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 If a non-free program or system is obscure in your program's domain,
Jakub Jelinek dc1803
 your program should not mention or support it at all, since doing so
Jakub Jelinek dc1803
@@ -3709,13 +3828,46 @@ would tend to popularize the non-free pr
Jakub Jelinek dc1803
 your program.  (You cannot hope to find many additional users among
Jakub Jelinek dc1803
 the users of Foobar if the users of Foobar are few.)
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
+Sometimes a program is free software in itself but depends on a
Jakub Jelinek dc1803
+non-free platform in order to run.  For instance, many Java programs
Jakub Jelinek dc1803
+depend on Sun's Java implementation, and won't run on the GNU Java
Jakub Jelinek dc1803
+Compiler (which does not yet have all the features) or won't run with
Jakub Jelinek dc1803
+the GNU Java libraries.  To recommend that program is inherently to
Jakub Jelinek dc1803
+recommend the non-free platform as well; if you should not do the
Jakub Jelinek dc1803
+latter, then don't do the former.
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
 A GNU package should not refer the user to any non-free documentation
Jakub Jelinek dc1803
 for free software.  Free documentation that can be included in free
Jakub Jelinek dc1803
-operating systems is essential for completing the GNU system, so it is
Jakub Jelinek dc1803
-a major focus of the GNU Project; to recommend use of documentation
Jakub Jelinek dc1803
-that we are not allowed to use in GNU would undermine the efforts to
Jakub Jelinek dc1803
-get documentation that we can include.  So GNU packages should never
Jakub Jelinek dc1803
-recommend non-free documentation.
Jakub Jelinek dc1803
+operating systems is essential for completing the GNU system, or any
Jakub Jelinek dc1803
+free operating system, so it is a major focus of the GNU Project; to
Jakub Jelinek dc1803
+recommend use of documentation that we are not allowed to use in GNU
Jakub Jelinek dc1803
+would weaken the impetus for the community to produce documentation
Jakub Jelinek dc1803
+that we can include.  So GNU packages should never recommend non-free
Jakub Jelinek dc1803
+documentation.
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
+By contrast, it is ok to refer to journal articles and textbooks in
Jakub Jelinek dc1803
+the comments of a program for explanation of how it functions, even
Jakub Jelinek dc1803
+though they be non-free.  This is because we don't include such things
Jakub Jelinek dc1803
+in the GNU system even if we are allowed to--they are outside the
Jakub Jelinek dc1803
+scope of an operating system project.
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
+Referring to a web site that describes or recommends a non-free
Jakub Jelinek dc1803
+program is in effect promoting that software, so please do not make
Jakub Jelinek dc1803
+links (or mention by name) web sites that contain such material.  This
Jakub Jelinek dc1803
+policy is relevant particularly for the web pages for a GNU package.
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
+Following links from nearly any web site can lead to non-free
Jakub Jelinek dc1803
+software; this is an inescapable aspect of the nature of the web, and
Jakub Jelinek dc1803
+in itself is no objection to linking to a site.  As long as the site
Jakub Jelinek dc1803
+does not itself recommend a non-free program, there is no need be
Jakub Jelinek dc1803
+concerned about the sites it links to for other reasons.
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
+Thus, for example, you should not make a link to AT&T's web site,
Jakub Jelinek dc1803
+because that recommends AT&T's non-free software packages; you should
Jakub Jelinek dc1803
+not make a link to a site that links to AT&T's site saying it is a
Jakub Jelinek dc1803
+place to get a non-free program; but if a site you want to link to
Jakub Jelinek dc1803
+refers to AT&T's web site in some other context (such as long-distance
Jakub Jelinek dc1803
+telephone service), that is not a problem.
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
 @node Copying This Manual
Jakub Jelinek dc1803
 @appendix Copying This Manual
Jakub Jelinek dc1803
@@ -3730,13 +3882,12 @@ recommend non-free documentation.
Jakub Jelinek dc1803
 @unnumbered Index
Jakub Jelinek dc1803
 @printindex cp
Jakub Jelinek dc1803
 
Jakub Jelinek dc1803
-@contents
Jakub Jelinek dc1803
-
Jakub Jelinek dc1803
 @bye
Jakub Jelinek dc1803
-@c Local variables:
Jakub Jelinek dc1803
-@c eval: (add-hook 'write-file-hooks 'time-stamp)
Jakub Jelinek dc1803
-@c time-stamp-start: "@set lastupdate "
Jakub Jelinek dc1803
-@c time-stamp-end: "$"
Jakub Jelinek dc1803
-@c time-stamp-format: "%:b %:d, %:y"
Jakub Jelinek dc1803
-@c compile-command: "make just-standards"
Jakub Jelinek dc1803
-@c End:
Jakub Jelinek dc1803
+
Jakub Jelinek dc1803
+Local variables:
Jakub Jelinek dc1803
+eval: (add-hook 'write-file-hooks 'time-stamp)
Jakub Jelinek dc1803
+time-stamp-start: "@set lastupdate "
Jakub Jelinek dc1803
+time-stamp-end: "$"
Jakub Jelinek dc1803
+time-stamp-format: "%:b %:d, %:y"
Jakub Jelinek dc1803
+compile-command: "make just-standards"
Jakub Jelinek dc1803
+End: