292 lines
11 KiB
Groff
292 lines
11 KiB
Groff
|
.\" Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation
|
||
|
.\" See section COPYING for conditions for redistribution
|
||
|
.\"
|
||
|
.TH protoize 1 "8 December 2006" "GCC" "GNU"
|
||
|
.SH NAME
|
||
|
protoize, unprotoize \- automatically add or remove function prototypes
|
||
|
.SH SYNOPSIS
|
||
|
.HP 7
|
||
|
\fBprotoize\fR [\-CfgklNnqv] [\-B \fIDIRECTORY\fR] [\-c \fICOMPILATION-OPTIONS\fR] [\-d \fIDIRECTORY\fR] [\-i \fISTRING\fR] [\-p \fIPROGRAM\fR] [\-x \fIFILE\fR] [\fIFILE\fR...]
|
||
|
.HP 7
|
||
|
\fBunprotoize\fR [\-fkNnqv] [\-c \fICOMPILATION-OPTIONS\fR] [\-d \fIDIRECTORY\fR] [\-i \fISTRING\fR] [\-p \fIPROGRAM\fR] [\-x \fIFILE\fR] [\fIFILE\fR...]
|
||
|
.SH DESCRIPTION
|
||
|
.PP
|
||
|
\fBprotoize\fR is an optional part of GCC.
|
||
|
You can use it to add prototypes to a program,
|
||
|
thus converting the program to ANSI C in one respect.
|
||
|
The companion program
|
||
|
\fBunprotoize\fR does the reverse: it removes argument types from any prototypes that are found.
|
||
|
.PP
|
||
|
When you run these programs, you must specify a set of source files
|
||
|
as command line arguments.
|
||
|
The conversion programs start out by compiling these files
|
||
|
to see what functions they define.
|
||
|
The information gathered about a file
|
||
|
\fIFOO\fR is saved in a file named \fIFOO.X\fR.
|
||
|
.PP
|
||
|
After scanning comes the actual conversion.
|
||
|
The specified files are all eligible to be converted;
|
||
|
any files they include (whether sources or just headers) are eligible as well.
|
||
|
.PP
|
||
|
But not all the eligible files are converted.
|
||
|
By default,
|
||
|
\fBprotoize\fR and \fBunprotoize\fR
|
||
|
convert only source and header files in the current directory.
|
||
|
You can specify additional directories whose files
|
||
|
should be converted with the
|
||
|
\fB\-d\fR \fIDIRECTORY\fR option.
|
||
|
You can also specify particular files to exclude with the
|
||
|
\fB\-x\fR \fIFILE\fR option.
|
||
|
A file is converted if it is eligible, its directory name matches one of the
|
||
|
specified directory names, and its name within the directory has not
|
||
|
been excluded.
|
||
|
.PP
|
||
|
Basic conversion with
|
||
|
\fBprotoize\fR consists of rewriting most function definitions and function declarations
|
||
|
to specify the types of the arguments.
|
||
|
The only ones not rewritten are those for varargs functions.
|
||
|
.PP
|
||
|
\fBprotoize\fR optionally inserts prototype declarations at the beginning of the source file,
|
||
|
to make them available for any calls that precede the function's definition.
|
||
|
Or it can insert prototype declarations with block scope
|
||
|
in the blocks where undeclared functions are called.
|
||
|
.PP
|
||
|
Basic conversion with
|
||
|
\fBunprotoize\fR
|
||
|
consists of rewriting most function declarations to remove any argument types,
|
||
|
and rewriting function definitions to the old-style pre-ANSI form.
|
||
|
.PP
|
||
|
Both conversion programs print a warning for any function
|
||
|
declaration or definition that they can't convert.
|
||
|
You can suppress these warnings with the
|
||
|
\fB\-q\fR option.
|
||
|
.PP
|
||
|
The output from
|
||
|
\fBprotoize\fR or \fBunprotoize\fR
|
||
|
replaces the original source file.
|
||
|
The original file is renamed to a name ending with
|
||
|
\fI.save\fR.
|
||
|
If the \fI.save\fR file already exists, then the source file is simply discarded.
|
||
|
.PP
|
||
|
\fBprotoize\fR and \fBunprotoize\fR both depend on
|
||
|
\fBgcc\fR\|(1) to scan the program and collect information about the functions it uses.
|
||
|
.PP
|
||
|
The options are as follows:
|
||
|
.TP
|
||
|
\fB\-B\fR \fIDIRECTORY\fR
|
||
|
Look for the file
|
||
|
\fISYSCALLS.c.X\fR in \fIdirectory\fR,
|
||
|
instead of the usual directory (normally \fI/usr/local/lib\fR).
|
||
|
This file contains prototype information about standard system functions.
|
||
|
This option applies only to \fBprotoize\fR.
|
||
|
.TP
|
||
|
\fB\-C\fR
|
||
|
Rename files to end in
|
||
|
\fI.C\fR instead of \fI.c\fR.
|
||
|
This is convenient if you are converting a C program to C++.
|
||
|
This option applies only to
|
||
|
\fBprotoize\fR.
|
||
|
.TP
|
||
|
\fB\-c\fR \fICOMPILATION-OPTIONS\fR
|
||
|
Use \fICOMPILATION-OPTIONS\fR as the options when running \fBgcc\fR\|(1) to produce the
|
||
|
\fI.X\fR files.
|
||
|
The special option \fB\-aux-info\fR is always passed in addition, to tell gcc to write a
|
||
|
\fI.X\fR file.
|
||
|
Note that the compilation options must be given as a single argument to
|
||
|
\fBprotoize\fR or \fBunprotoize\fR.
|
||
|
If you want to specify several gcc options, you must quote the entire set of
|
||
|
compilation options to make them a single word in the shell.
|
||
|
There are certain gcc arguments that you cannot use, because they
|
||
|
would produce the wrong kind of output.
|
||
|
These include
|
||
|
\fB\-g\fR, \fB\-O\fR, \fB\-c\fR, \fB\-S\fR,\fB\-o\fR.
|
||
|
If you include these in the \fICOMPILATION-OPTIONS\fR, they are ignored.
|
||
|
.TP
|
||
|
\fB\-d\fR \fIDIRECTORY\fR
|
||
|
Specify additional directories whose files should be converted.
|
||
|
.TP
|
||
|
\fB\-g\fR
|
||
|
Add explicit global declarations.
|
||
|
This means inserting explicit declarations at the beginning of each
|
||
|
source file for each function that is called in the file and was not declared.
|
||
|
These declarations precede the first function definition that contains a
|
||
|
call to an undeclared function.
|
||
|
This option applies only to
|
||
|
.\fBprotoize\fR.
|
||
|
.TP
|
||
|
\fB\-i\fR \fISTRING\fR
|
||
|
Indent old-style parameter declarations with the string
|
||
|
\fISTRING\fR.
|
||
|
This option applies only to
|
||
|
\fBprotoize\fR.
|
||
|
\fBunprotoize\fR converts prototyped function definitions to old-style
|
||
|
function definitions, where the arguments are declared between the
|
||
|
argument list and the initial
|
||
|
\fB{\fR.
|
||
|
By default,
|
||
|
\fBunprotoize\fR uses five spaces as the indentation.
|
||
|
If you want to indent with just one space instead, use
|
||
|
\fB\-i " "\fR.
|
||
|
.TP
|
||
|
\fB\-k\fR
|
||
|
Keep the
|
||
|
\fI.X\fR files.
|
||
|
Normally, they are deleted after conversion is finished.
|
||
|
.TP
|
||
|
\fB\-l\fR
|
||
|
Add explicit local declarations.
|
||
|
\fBprotoize\fR with
|
||
|
\fB\-l\fR inserts a prototype declaration for each function in each block which calls
|
||
|
the function without any declaration.
|
||
|
This option applies only to
|
||
|
\fBprotoize\fR.
|
||
|
.TP
|
||
|
\fB\-N\fR
|
||
|
Make no \fI.save\fR files.
|
||
|
The original files are simply deleted.
|
||
|
Use this option with caution.
|
||
|
.TP
|
||
|
\fB\-n\fR
|
||
|
Make no real changes.
|
||
|
This mode just prints information about the conversions
|
||
|
that would have been done without
|
||
|
\fB\-n\fR.
|
||
|
.TP
|
||
|
\fB\-p\fR \fIPROGRAM\fR
|
||
|
Use the program
|
||
|
\fBPROGRAM\fR as the compiler.
|
||
|
Normally, the name
|
||
|
\fBgcc\fR is used.
|
||
|
.TP
|
||
|
\fB\-q\fR
|
||
|
Work quietly.
|
||
|
Most warnings are suppressed.
|
||
|
.TP
|
||
|
\fB\-v\fR
|
||
|
Print the version number, just like
|
||
|
\fB\-v\fR for gcc.
|
||
|
.TP
|
||
|
\fB\-x\fR \fBFILE\fR
|
||
|
List of files to exclude from the conversion process.
|
||
|
.PP
|
||
|
If you need special compiler options to compile one of your program's
|
||
|
source files, then you should generate that file's
|
||
|
\fI.X\fR file specially, by running gcc on that source file with
|
||
|
the appropriate options and the option
|
||
|
\fB\-aux-info\fR.
|
||
|
Then run
|
||
|
\fBprotoize\fR on the entire set of files.
|
||
|
\fBprotoize\fR will use the existing
|
||
|
\fI.X\fR file because it is newer than the source file.
|
||
|
For example:
|
||
|
.PP
|
||
|
.DL $ gcc -Dfoo=bar file1.c -aux-info
|
||
|
.DL $ protoize *.c
|
||
|
.PP
|
||
|
You need to include the special files along with the rest in the
|
||
|
\fBprotoize\fR command, even though their
|
||
|
\fI.X\fR files already exist, because otherwise they won't get converted.
|
||
|
.PP
|
||
|
.SH SEE ALSO
|
||
|
\fBgcc\fR\|(1), and the Info entry for \fBgcc\fR, particularly
|
||
|
\fBRunning protoize\fR section.
|
||
|
.SH HISTORY
|
||
|
Ron Guilmette implemented the
|
||
|
\fBprotoize\fR and \fBunprotoize\fR tools.
|
||
|
.SH AUTHORS
|
||
|
See the GCC manual for the contributors to GCC.
|
||
|
.SH CAVEATS
|
||
|
The conversion programs \fBprotoize\fR and \fBunprotoize\fR
|
||
|
can sometimes change a source file in a way that won't work
|
||
|
unless you rearrange it.
|
||
|
.PP
|
||
|
\fBprotoize\fR can insert references to a type name or type tag before
|
||
|
the definition, or in a file where they are not defined.
|
||
|
.PP
|
||
|
If this happens, compiler error messages should indicate where the
|
||
|
new references are, so fixing the file by hand is straightforward.
|
||
|
.PP
|
||
|
There are some C constructs which \fBprotoize\fR
|
||
|
cannot figure out.
|
||
|
For example, it can't determine argument types for declaring a
|
||
|
pointer-to-function variable; this must be done by hand. \fBprotoize\fR
|
||
|
inserts a comment containing \fB???\fR each time it finds such a variable;
|
||
|
all such variables can be found by searching for this string.
|
||
|
ANSI C does not require declaring the argument types of
|
||
|
pointer-to-function types.
|
||
|
.PP
|
||
|
Using \fBunprotoize\fR can easily introduce bugs.
|
||
|
If the program relied on prototypes to bring about conversion of arguments,
|
||
|
these conversions will not take place in the program without prototypes.
|
||
|
One case in which you can be sure \fBunprotoize\fR
|
||
|
is safe is when you are removing prototypes that were made with
|
||
|
\fBprotoize\fR; if the program worked before without any prototypes,
|
||
|
it will work again without them.
|
||
|
.PP
|
||
|
You can find all the places where this problem might occur by
|
||
|
compiling the program with the \fB\-Wconversion\fR option.
|
||
|
It prints a warning whenever an argument is converted.
|
||
|
.PP
|
||
|
Both conversion programs can be confused if there are macro calls
|
||
|
in and around the text to be converted.
|
||
|
In other words, the standard syntax for a declaration or definition
|
||
|
must not result from expanding a macro.
|
||
|
This problem is inherent in the design of C and cannot be fixed.
|
||
|
If only a few functions have confusing macro calls,
|
||
|
you can easily convert them manually.
|
||
|
.PP
|
||
|
\fBprotoize\fR cannot get the argument types for a function whose definition was not
|
||
|
actually compiled due to preprocessing conditionals.
|
||
|
When this happens, \fBprotoize\fR changes nothing in regard to such a function.
|
||
|
\fBprotoize\fR tries to detect such instances and warn about them.
|
||
|
.PP
|
||
|
You can generally work around this problem by using
|
||
|
\fBprotoize\fR step by step, each time specifying a different set of
|
||
|
\fB\-D\fR options for compilation, until all of the functions have been converted.
|
||
|
There is no automatic way to verify that you have got them all, however.
|
||
|
.PP
|
||
|
Confusion may result if there is an occasion to convert a function
|
||
|
declaration or definition in a region of source code where there
|
||
|
is more than one formal parameter list present.
|
||
|
Thus, attempts to convert code containing multiple (conditionally compiled)
|
||
|
versions of a single function header (in the same vicinity)
|
||
|
may not produce the desired (or expected) results.
|
||
|
.PP
|
||
|
If you plan on converting source files which contain such code,
|
||
|
it is recommended that you first make sure that each conditionally
|
||
|
compiled region of source code which contains an alternative
|
||
|
function header also contains at least one additional follower
|
||
|
token (past the final right parenthesis of the function header).
|
||
|
This should circumvent the problem.
|
||
|
.PP
|
||
|
\fBunprotoize\fR can become confused when trying to convert a function
|
||
|
definition or declaration which contains a declaration for a
|
||
|
pointer-to-function formal argument which has the same name as the
|
||
|
function being defined or declared.
|
||
|
We recommand you avoid such choices of formal parameter names.
|
||
|
.PP
|
||
|
It might be necessary to correct some of the indentation by hand and
|
||
|
break long lines.
|
||
|
(The conversion programs don't write lines longer than eighty characters
|
||
|
in any case.)
|
||
|
.SH BUGS
|
||
|
For instructions on reporting bugs, see the GCC manual.
|
||
|
.SH COPYING
|
||
|
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||
|
2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
|
||
|
.PP
|
||
|
Permission is granted to make and distribute verbatim copies of
|
||
|
this manual provided the copyright notice and this permission notice
|
||
|
are preserved on all copies.
|
||
|
.PP
|
||
|
Permission is granted to copy and distribute modified versions of this
|
||
|
manual under the conditions for verbatim copying, provided that the
|
||
|
entire resulting derived work is distributed under the terms of a
|
||
|
permission notice identical to this one.
|
||
|
.PP
|
||
|
Permission is granted to copy and distribute translations of this
|
||
|
manual into another language, under the above conditions for modified
|
||
|
versions, except that this permission notice may be included in
|
||
|
translations approved by the Free Software Foundation instead of in
|
||
|
the original English.
|