Path: utzoo!utgpu!news-server.csri.toronto.edu!rpi!usc!cs.utexas.edu!helios!tamsun.tamu.edu!scm3775 From: scm3775@tamsun.tamu.edu (Sean Malloy) Newsgroups: comp.lang.c Subject: Re: Funny mistake Message-ID: <13578@helios.TAMU.EDU> Date: 21 Mar 91 17:55:16 GMT References: <1891@array.UUCP> <1991Mar21.021504.25553@murdoch.acc.Virginia.EDU> <1778@bbxsda.UUCP> Sender: usenet@helios.TAMU.EDU Organization: Texas A&M University Lines: 464 >Well I'm not one of them. I agree completely. I see no reason to >run a source file through lint prior to the C compiler everytime I >make a change when I could enable certain desireable warning messages >(of mistakes I frequently make) within the compiler. > On the machine I use, someone up high decided that it would be easier to write a shell script than to modify the compilers... You'll have to make some mods (more than likely) but the following script works just fine IMHO. ----------------------------- cut here ------------------------------------- #!/bin/sh PATH=/bin:/usr/bin #ident "@(#)ctrans:CC 1.7.3.1" #NOTE: To properly use the CC command you should check the values of the #following variables to be sure they are set to the locations of the #appropriate translator files on your system. # #CCROOTDIR set to directory containing cfront c++filt and patch/munch #CCLIBDIR set to directory containing the C++ libraries #I set to directory containing C++ header files CCROOTDIR=${CCROOTDIR-/usr/local/att_c++/bin} CCLIBDIR=${CCLIBDIR-/usr/local/att_c++/lib} I=${I-/usr/local/att_c++/include} #Option passed to cc to tell linker to look for libraries in another #directory. Set it to -L if -Wl,-L doesn't work. LOPT=-L trap 'rm -fr $TEMPDIR; exit' 1 2 3 15 # main makefile will set PM_FLAG to MUNCH (default) or PATCH PM_FLAG=PATCH DEMANGLE=${DEMANGLE-1} # set to 0 to disable linker output demangling if test "$CCROOTDIR" != "" ;then CCROOTDIR="$CCROOTDIR/" fi LIB_ID=${LIB_ID-C} LIBRARY=${LIBRARY--l${LIB_ID}} cfrontC=${cfrontC-${CCROOTDIR}cfront} if test "$PM_FLAG" = "PATCH" then patchC=${patchC-${CCROOTDIR}patch} else munchC=${munchC-${CCROOTDIR}munch} NM=${NM-nm} NMFLAGS=${NMFLAGS-} fi cplusfiltC=${cplusfiltC-${CCROOTDIR}c++filt} ccC=${ccC-cc} cppC=${cppC-/lib/cpp} if test "$CCLIBDIR" = "/usr/lib" then LLIBPATH="" else LLIBPATH="$LOPT$CCLIBDIR" fi #sys.fix will set SYS to the designated system #it will then be defined for each CC invocation SYS=-DBSD #For Ansi compatibility, c_plusplus => __cplusplus #For backward compatibility, retain c_plusplus for 2.0 CPLUS=-Dc_plusplus=1 cPLUS=-D__cplusplus=1 TMPDIR=${TMPDIR-"/usr/tmp"} TEMPDIR=$TMPDIR/CC.$$ C= EE=0 FON= XON= O= PON= R= SUF= X= Y= DASHR= PLUSI= STRIP= Z= E=0 OF= P= NOLOAD= NLO= AFAIL=0 OO="a.out" ISUF=".c" MVLIST= APASS=0 defmem=D deflist= rm -fr $TEMPDIR mkdir $TEMPDIR E=$? if test $E -ne 0 then echo "CC: error:can not create temporary directory in $TEMPDIR: stop" 1>&2 exit $E fi for A do case $A in -Yp,*) cppC=`expr $A : '-Yp,\(.*\)'`/`basename ${cppC}` X="$X $A" ;; -YI*) X="$X $A" ;; -Y*) Z="$Z $A" ;; +S) echo "CC: +S no longer accepted (ignored)" ;; +V) echo "CC: +V no longer accepted (ignored)" ;; +i) PLUSI=1 ;; -s) STRIP=1 ;; +x) XON=1 ;; +*) O="$O $A" ;; -E) PON=1 ;; -F) FON=1 ;; -Fc) FON=1 O="$O +L" ;; -C) Y="$Y $A" ;; -S*) NOLOAD=".s" NLO="$A" ;; -P) NOLOAD=".i" NLO="-P" ;; -c*) NOLOAD=".o" NLO="-c" ;; -I*) if test "$A" != "-I" then Y="$Y $A" else ION=1 fi ;; -D*) eval $defmem='"$A"' deflist="$deflist \"\$$defmem\"" defmem=${defmem}x ;; -U*) Y="$Y $A" ;; -p) P="-p" ;; -r) DASHR=1 Z="$Z $A" ;; -o*) if test "$A" != "-o" then OO=`expr $A : '-o\(.*\)'` A="-o $OO" else OX=1 fi APASS=1 OF="$OF $A" Z="$Z $A" ;; -.c) echo "bad suffix option: -.c" 1>&2 ;; -.*) SUF=`expr "$A" : '-\(.*\)'` ;; *.[Cc]) if test -f $A then case $A in *.c) B=`basename $A .c` ;; *.C) B=`basename $A .C` ;; esac if test $PON then if test $SUF then echo "$cppC $O $A > $B$SUF:" 1>&2 eval '$cppC' '$Y' $deflist '$CPLUS' '$cPLUS' '$SYS' '-I$I' '$A' >'$B$SUF' E=$? else eval '$cppC' '$Y' $deflist '$CPLUS' '$cPLUS' '$SYS' '-I$I' '$A' E=$? fi case $E in 0) ;; *) AFAIL=1; break ;; esac elif test $FON then if test $SUF then echo "$cfrontC $O $A > $B$SUF:" 1>&2 eval '$cppC' -C '$Y' $deflist '$CPLUS' '$cPLUS' '$SYS' '-I$I' '$A' >$TEMPDIR/cpptmp E=$? if test $E -ne 0 then echo "CC: cpp failure: $E" 1>&2 AFAIL=1; break fi $cfrontC +L +f$A $O <$TEMPDIR/cpptmp >$B$SUF E=$? else eval '$cppC' -C '$Y' $deflist '$CPLUS' '$cPLUS' '$SYS' '-I$I' '$A' >$TEMPDIR/cpptmp E=$? if test $E -ne 0 then echo "CC: cpp failure: $E" 1>&2 AFAIL=1; break fi $cfrontC +L +f$A $O <$TEMPDIR/cpptmp E=$? fi case $E in 0) ;; *) AFAIL=1; break ;; esac else echo "CC $O $A:" 1>&2 eval '$cppC' -C '$Y' $deflist '$CPLUS' '$cPLUS' '$SYS' '-I$I' '$A' >$TEMPDIR/cpptmp E=$? if test $E -ne 0 then echo "CC: cpp failure: $E" 1>&2 AFAIL=1; break fi $cfrontC +L +f$A $O <$TEMPDIR/cpptmp >$TEMPDIR/$B$ISUF E=$? R=1 C="$C $TEMPDIR/$B$ISUF" case $E in 0) X="$X $B$ISUF" if test "$NOLOAD" != ".c" then Z="$Z $TEMPDIR/$B.o" fi MVLIST="$MVLIST $B" APASS=1 ;; 127) echo "Too many compilation errors" 1>&2 AFAIL=1 ;; 999) echo "CC argument error" 1>&2 AFAIL=1 ;; 1) echo "1 error" 1>&2 AFAIL=1 ;; *) echo "$E errors" 1>&2 AFAIL=1 ;; esac fi else echo "$A not found" 1>&2 EE=1 fi ;; *.i) if test -f $A then if test $PON then echo "CC -E $A incompatible: ignoring $A" 1>&2 else if test $FON then eval '$cppC' -C '$Y' $deflist '$CPLUS' '$cPLUS' '$SYS' '-I$I' '$A' >$TEMPDIR/cpptmp if test $? -ne 0 then echo "CC: cpp failure: $E" 1>&2 AFAIL=1; break fi $cfrontC +L +f$A $O <$TEMPDIR/cpptmp if test $? -ne 0 then AFAIL=1 fi else B=`basename $A .i` echo "CC $O $A:" 1>&2 $cfrontC +L +f$A $O < $A > $TEMPDIR/$B$ISUF E=$? R=1 C="$C $TEMPDIR/$B$ISUF" case $E in 0) X="$X $B$ISUF" if test "$NOLOAD" != "-c" then Z="$Z $TEMPDIR/$B.o" fi MVLIST="$MVLIST $B" APASS=1 ;; *) AFAIL=1 ;; esac fi fi else echo "$A not found" 1>&2 EE=1 fi ;; *.s) # add to list to be compiled in $TEMPDIR, set flag to go on B=`basename $A .s` X="$X $B.s" cp $A $TEMPDIR/$B.s APASS=1 if test "$NOLOAD" != "-c" then # add object entry to the load list Z="$Z $TEMPDIR/$B.o" fi ;; *) if test $XON then O="$O +x$A" XON="" elif test $ION then Y="$Y -I$A" ION="" else Z="$Z $A" if test $OX then OO=$A OF="$OF $A" OX="" else X="$X $A" fi fi APASS=1 # setting APASS to 1 causes link step to execute ;; esac done case $APASS in 0) ;; *) # generate code if test "$PLUSI" #leave ..c's lying around then #remove #line's from the ..c's for sdb for f in $C do sed "/^#/d" $f >$TEMPDIR/temp mv $TEMPDIR/temp $f 2> /dev/null done fi #if one file failed in cpp or cfront then do not create a.out if test $AFAIL -eq 1 then if test -z "$NOLOAD" then NOLOAD=".o" NLO="-c" fi fi if test "$NOLOAD" then # make sure there are some .c, .s, or .i files in X ANY_CS=`expr "$X" : '.*\(\.[CcSsi]\).*'` if test "$ANY_CS" then echo "$ccC $P $NLO $X" 1>&2 # contortions to cope with bug handling path in cc (cd $TEMPDIR; $ccC $P $NLO $X) # compile, no load EE=$? if test $EE = 0 then # move products back into current directory mv $TEMPDIR/*$NOLOAD . 2> /dev/null fi fi else echo "$ccC $P $LLIBPATH $OF $X $LIBRARY" 1>&2 (cd $TEMPDIR; $ccC $P -c $X) # compile, no load EE=$? case $EE in 0) # load $ccC $P $LLIBPATH $Z $LIBRARY >$TEMPDIR/__err 2>&1 EE=$? (test $DEMANGLE = 1 && $cplusfiltC <$TEMPDIR/__err 2>/dev/null) || cat $TEMPDIR/__err if test $EE = 0 -a "$DASHR" != 1 then #find ctors/dtors case $PM_FLAG in PATCH) $patchC $OO EE=$? ;; *) CTDT=__ctdt$$ TCTDT=${TEMPDIR}/${CTDT} $NM $NMFLAGS $OO | \ $munchC $P > ${TCTDT}.c $ccC -c ${TCTDT}.c && \ $ccC $P $LLIBPATH ${CTDT}.o $Z $LIBRARY EE=$? rm ${CTDT}.o ;; esac if test "$STRIP" then strip $OO fi fi COUNT=0 for A in $X do COUNT="`expr $COUNT + 1`" done if test $COUNT -gt 1 then mv $TEMPDIR/*.o . 2> /dev/null fi ;; esac fi esac if test "$R" then if test "$PLUSI" then for A in $MVLIST do mv $TEMPDIR/$A${ISUF} $A.${ISUF} 2> /dev/null done fi fi rm -fr $TEMPDIR if test $AFAIL -ne 0 then exit $AFAIL fi case $E in 0) exit $EE ;; *) exit $E esac -------------------------------------- cut here ------------------------------- -Sean /*--------------------------------------------------------------------------*\ | Sean C. Malloy | x041sc@tamuts.tamu.edu | No one ever expects the | | (409) 764-0699 | scm3775@tamsun.tamu.edu | SPANISH INQUISITION! | \*__________________________________________________________________________*/