Use -ansi -pedantic -trigraphs, as suggested by Bruce.

Enforce that only Posix-spec'ed options are being used, so people could
use this as a Posixificator of some kind.

Document the Posix usage in the man page, so to make it clear what's
the difference between Posix c89, and gcc.
This commit is contained in:
Joerg Wunsch 1997-09-18 20:55:50 +00:00
parent dc56f9cd0b
commit 16c9de07f6
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=29589
2 changed files with 133 additions and 21 deletions

View File

@ -23,7 +23,7 @@
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
.\" $Id$
.\" $Id: c89.1,v 1.1.1.1 1997/09/17 20:44:54 joerg Exp $
.\" "
.Dd September 17, 1997
.Os
@ -50,23 +50,118 @@ This is the name of the C language compiler as required by the
.St -p1003.2 .
standard.
.Pp
Since the standard demands that any program conforming to the C language
standard must be acceptable, the
.Xr cc 1
options
.Fl ansi
and
.Fl trigraphs
are always in effect, and an attempt to call
The
.Nm
with the
.Fl traditional
will be rejected.
compiler accepts the following options:
.Bl -tag -offset indent -width "-D name = value"
.It Fl c
Suppress the link-edit phase of the compilation, and do not remove any
object files that are produced.
.It Fl D Ar name Ns Op Ar =value
Define name as if by a C-language
.Ql #define
directive. If
no
.Ar =value
is given, a value of 1 will be used. The
.Fl D
option has lower precedence than the
.Fl U
option. That is, if
.Ar name
is used in both a
.Fl U
and a
.Fl D
option,
.Ar name
will be undefined regardless of the order of the options. The
.Fl D
option may be specified more than once.
.It Fl E
Copy C-language source files to the standard output, expanding all
preprocessor directives; no compilation will be performed.
.It Fl g
Produce symbolic information in the object or executable files.
.It Fl I Ar directory
Change the algorithm for searching for headers whose names are not
absolute pathnames to look in the directory named by the
.Ar directory
pathname before looking in the usual places. Thus, headers whose
names are enclosed in double-quotes (\&"\&") will be searched for first
in the directory of the file with the
.Ql #include
line, then in
directories named in
.Fl I
options, and last in the usual places. For
headers whose names are enclosed in angle brackets (<>), the header
will be searched for only in directories named in
.Fl I
options and then in the usual places. Directories named in
.Fl I
options shall be searched in the order specified. The
.Fl I
option may be specified more than once.
.It Fl L Ar directory
Change the algorithm of searching for the libraries named in the
.Fl l
objects to look in the directory named by the
.Ar directory
pathname before looking in the usual places. Directories named in
.Fl L
options will be searched in the order specified. The
.Fl L
option may be specified more than once.
.It Fl o Ar outfile
Use the pathname
.Ar outfile ,
instead of the default
.Pa a.out ,
for the executable file produced.
.It Fl O
Optimize the compilation.
.It Fl s
Produce object and/or executable files from which symbolic and other
information not required for proper execution has been removed
(stripped).
.It Fl U Ar name
Remove any initial definition of
.Ar name .
The
.Fl U
option may be specified more than once.
.El
.Pp
See the manual page for
.Xr cc 1
for a complete description.
An operand is either in the form of a pathname or the form
.Fl l
library. At least one operand of the pathname form needs to be
specified. Supported operands are of the form:
.Bl -tag -offset indent -width "-l library"
.It Pa file Ns \&.c
A C-language source file to be compiled and optionally linked. The
operand must be of this form if the
.Fl c
option is used.
.It Pa file Ns \&.a
A library of object files, as produced by
.Xr ar 1 ,
passed directly to the link editor.
.It Pa file Ns \&.o
An object file produced by
.Nm
.Fl c ,
and passed directly to the link editor.
.It Fl l Pa library
Search the library named
.Dl lib Ns Em library Ns \&.a
A library will be searched when its name is encountered, so the
placement of a
.Fl l
operand is significant.
.El
.Sh SEE ALSO
.Xr ar 1 ,
.Xr cc 1
.Sh STANDARDS
The

View File

@ -24,17 +24,34 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# $Id$
# $Id: c89.sh,v 1.1.1.1 1997/09/17 20:44:53 joerg Exp $
#
# This is the Posix.2 mandated C compiler. Basically, a hook to the
# cc(1) command.
if echo "$*" | grep -q -- -traditional
then
echo "c89: non-standard C not supported by the Posix compiler version"\
1>&2
usage()
{
echo "usage: c89 [-c] [-D name[=value]] [...] [-E] [-g] [-I directory ...]
[-L directory ...] [-o outfile] [-O] [-s] [-U name ...] operand ..." 1>&2
exit 64
}
while getopts "cD:EgI:L:o:OsU:" opt
do
case $opt in
[cDEgILoOsU])
;;
*)
usage
;;
esac
done
if [ $(($OPTIND - 1)) = $# ]
then
echo "Missing operand" 1>&2
usage
fi
exec cc -ansi -trigraphs "$@"
exec cc -ansi -pedantic -trigraphs "$@"