diff options
author | Marc Espie <espie@cvs.openbsd.org> | 2004-01-31 20:27:59 +0000 |
---|---|---|
committer | Marc Espie <espie@cvs.openbsd.org> | 2004-01-31 20:27:59 +0000 |
commit | e4642635299126c3d1c30ee9cb3b998122508c4b (patch) | |
tree | b6f08776a41efb4a1b617bd366c736864888d548 | |
parent | c6d94ed34c7fa91e568906bcb6a4d50c67d47d52 (diff) |
add documentation (straight copy from egcs)
-rw-r--r-- | gnu/usr.bin/gcc/Makefile.bsd-wrapper | 6 | ||||
-rw-r--r-- | gnu/usr.bin/gcc/protoize.1 | 396 |
2 files changed, 399 insertions, 3 deletions
diff --git a/gnu/usr.bin/gcc/Makefile.bsd-wrapper b/gnu/usr.bin/gcc/Makefile.bsd-wrapper index afc124df950..ee25cced936 100644 --- a/gnu/usr.bin/gcc/Makefile.bsd-wrapper +++ b/gnu/usr.bin/gcc/Makefile.bsd-wrapper @@ -1,9 +1,9 @@ -# $OpenBSD: Makefile.bsd-wrapper,v 1.44 2004/01/31 20:25:36 espie Exp $ +# $OpenBSD: Makefile.bsd-wrapper,v 1.45 2004/01/31 20:27:58 espie Exp $ #MAN= cccp.1 gcc.1 gcc-local.1 protoize.1 gcov.1 -MAN= gcc.1 cpp.1 gcov.1 gcc-local.1 +MAN= gcc.1 cpp.1 gcov.1 gcc-local.1 protoize.1 #MLINKS+= cccp.1 cpp.1 -#MLINKS+= protoize.1 unprotoize.1 +MLINKS+= protoize.1 unprotoize.1 MLINKS+= gcc.1 cc.1 cpp.1 ccpp.1 BINDIR=/usr/bin diff --git a/gnu/usr.bin/gcc/protoize.1 b/gnu/usr.bin/gcc/protoize.1 new file mode 100644 index 00000000000..8f45f2f633d --- /dev/null +++ b/gnu/usr.bin/gcc/protoize.1 @@ -0,0 +1,396 @@ +.\" Copyright (c) 1991, 1992, 1993, 1994 Free Software Foundation +.\" See section COPYING for conditions for redistribution +.\" +.\" $OpenBSD: protoize.1,v 1.1 2004/01/31 20:27:58 espie Exp $ +.Dd January 14, 2003 +.Dt PROTOIZE 1 +.Os +.Sh NAME +.Nm protoize, unprotoize +.Nd automatically add or remove function prototypes +.Sh SYNOPSIS +.Nm protoize +.Bk -words +.Op Fl CfgklNnqv +.Op Fl B Ar directory +.Op Fl c Ar COMPILATION-OPTIONS +.Op Fl d Ar directory ... +.Op Fl i Ar string +.Op Fl p Ar program +.Op Fl x Ar +.Ar +.Ek +.Nm unprotoize +.Bk -words +.Op Fl fkNnqv +.Op Fl c Ar COMPILATION-OPTIONS +.Op Fl d Ar directory ... +.Op Fl i Ar string +.Op Fl p Ar program +.Op Fl x Ar +.Ar +.Ek +.Sh DESCRIPTION +.Nm protoize +is an optional part of GNU C. +You can use it to add prototypes to a program, +thus converting the program to ANSI C in one respect. +The companion program +.Nm unprotoize +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 +.Ar FOO +is saved in a file named +.Ar FOO.X . +.Pp +After scanning comes the actual conversion. +The specified files are all eligible to be converted; +any files they include +.Pq whether sources or just headers +are eligible as well. +.Pp +But not all the eligible files are converted. +By default, +.Nm protoize +and +.Nm unprotoize +convert only source and header files in the current directory. +You can specify additional directories whose files +should be converted with the +.Sq Fl d Ar directory ... +option. +You can also specify particular files to exclude with the +.Sq Fl x Ar +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 +.Nm protoize +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 +.Nm protoize +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 +.Nm unprotoize +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 +.Fl q +option. +.Pp +The output from +.Nm protoize +or +.Nm unprotoize +replaces the original source file. +The original file is renamed to a name ending with +.Sq .save . +If the +.Sq .save +file already exists, then the source file is simply discarded. +.Pp +.Nm protoize +and +.Nm unprotoize +both depend on +.Xr gcc 1 +to scan the program and collect information about the functions it uses. +.Pp +The options are as follows: +.Bl -tag -width Ds +.It Fl B Ar directory +Look for the file +.Sq SYSCALLS.c.X +in +.Ar directory , +instead of the usual directory +.Pq normally Pa /usr/local/lib . +This file contains prototype information about standard system functions. +This option applies only to +.Nm protoize . +.It Fl C +Rename files to end in +.Sq .C +instead of +.Sq \&.c . +This is convenient if you are converting a C program to C++. +This option applies only to +.Nm protoize . +.It Fl c Ar COMPILATION-OPTIONS +Use +.Ar COMPILATION-OPTIONS +as the options when running +.Xr gcc 1 +to produce the +.Sq .X +files. +The special option +.Fl aux-info +is always passed in addition, to tell gcc to write a +.Sq .X +file. +.Pp +Note that the compilation options must be given as a single argument to +.Nm protoize +or +.Nm unprotoize . +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. +.Pp +There are certain gcc arguments that you cannot use, because they +would produce the wrong kind of output. +These include +.Fl g , +.Fl O , +.Fl c , +.Fl S , +and +.Fl o . +If you include these in the +.Ar COMPILATION-OPTIONS , +they are ignored. +.It Fl d Ar directory +Specify additional directories whose files should be converted. +.It Fl g +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 +.Nm protoize . +.It Fl i Ar string +Indent old-style parameter declarations with the string +.Ar string . +This option applies only to +.Nm protoize . +.Pp +.Nm unprotoize +converts prototyped function definitions to old-style +function definitions, where the arguments are declared between the +argument list and the initial +.Sq { . +By default, +.Nm unprotoize +uses five spaces as the indentation. +If you want to indent with just one space instead, use +.Fl i +.Sq \ \& . +.It Fl k +Keep the +.Sq .X +files. +Normally, they are deleted after conversion is finished. +.It Fl l +Add explicit local declarations. +.Nm protoize +with +.Fl l +inserts a prototype declaration for each function in each block which calls +the function without any declaration. +This option applies only to +.Nm protoize . +.It Fl N +Make no +.Sq .save +files. +The original files are simply deleted. +Use this option with caution. +.It Fl n +Make no real changes. +This mode just prints information about the conversions +that would have been done without +.Fl n . +.It Fl p Ar program +Use the program +.Ar program +as the compiler. +Normally, the name +.Sq gcc +is used. +.It Fl q +Work quietly. +Most warnings are suppressed. +.It Fl v +Print the version number, just like +.Fl v +for gcc. +.It Fl x Ar +List of files to exclude from the conversion process. +.El +.Pp +If you need special compiler options to compile one of your program's +source files, then you should generate that file's +.Sq .X +file specially, by running gcc on that source file with +the appropriate options and the option +.Fl aux-info . +Then run +.Nm protoize +on the entire set of files. +.Nm protoize +will use the existing +.Sq .X +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 +.Nm protoize +command, even though their +.Sq .X +files already exist, because otherwise they won't get converted. +.Pp +.Bf -symbolic +Note: most of this information is out of date and superseded by the +EGCS install procedures. +It is provided for historical reference only. +.Ef +.Sh SEE ALSO +.Xr gcc 1 , +.Xr gcc-local 1 +.Sh HISTORY +Ron Guilmette implemented the +.Nm protoize +and +.Nm unprotoize +tools. +.Sh AUTHORS +See the GNU CC manual for the contributors to GNU CC. +.Sh CAVEATS +The conversion programs +.Nm protoize +and +.Nm unprotoize +can sometimes change a source file in a way that won't work +unless you rearrange it. +.Pp +.Nm protoize +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 +.Nm protoize +cannot figure out. +For example, it can't determine argument types for declaring a +pointer-to-function variable; this must be done by hand. +.Nm protoize +inserts a comment containing +.Sq ??? +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 +.Nm unprotoize +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 +.Nm unprotoize +is safe is when you are removing prototypes that were made with +.Nm protoize ; +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 +.Fl Wconversion +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 +.Nm protoize +cannot get the argument types for a function whose definition was not +actually compiled due to preprocessing conditionals. +When this happens, +.Nm protoize +changes nothing in regard to such a function. +.Nm protoize +tries to detect such instances and warn about them. +.Pp +You can generally work around this problem by using +.Nm protoize +step by step, each time specifying a different set of +.Fl D +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 +.Pq conditionally compiled +versions of a single function header +.Pq in the same vicinity +may not produce the desired +.Pq 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 +.Nm unprotoize +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 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. |