view ibmscripts/cc @ 21:1c9dac05d040

Add lint-style FALLTHROUGH annotations to fallthrough cases. (in the parse engine and thus the output code) Document this, because the old output causes warnings with gcc10.
author David A. Holland
date Mon, 13 Jun 2022 00:04:38 -0400
parents 13d2b8934445
children a4899cdfc2d6
line wrap: on
line source

#!/bin/sh
# cc - wrap the IBM compiler to look sort of like a unix compiler
#      (and also to tidy up its output)
# usage: cc [opts] sourcefile
# options:
#     -g	debug
#     -O	optimize
#     -fPIC	generate shared library code
#     -Dsym	define preprocessor symbol SYM
#     -Idir	add include path
#     -c	compile only and don't link (required and assumed)
#     -v	verbose
#
# Note that the behavior of -D is limited by the ability of the shell
# to handle embedded spaces. It's meant to be only used in the style
# "-DFOO".
#

OPT=nil
SHLIB=
ADDINC=
FILE=
DEFS=
QUIET=1

while [ x"$1" != x ]; do
    case "$1" in
	-g) OPT=debug;;
	-O*) OPT=opt;;
	-fPIC) SHLIB=/Ge-;;
	-I*) ADDINC="${ADDINC};`echo "$1" | sed 's/^-I//'`";;
	-D*) DEFS="$DEFS `echo "$1" | sed 's,^-D,/D,'`";;
	-c) ;;
	-v) QUIET=0;;
	-*)
	    echo "$0: unknown option $1" 1>&2
	    exit 1
	;;
	*) FILE="$1";;
    esac
shift
done

if [ x"$FILE" = x ]; then
    echo "$0: usage: $0 [options] sourcefile" 1>&2
    exit 1
fi

INCLUDE='I:\\ibmcppw\\bindings;I:\\ibmcppw\\include;I:\\ibmcppw\\sdk\\winh;I:\\ibmcppw\\sdk\\winh\\winnt;I:\\ibmcppw\\sdk\\winh\\win95;I:\\ibmcppw\\lib;I:\\ibmcppw\\sdk\\lib'
export INCLUDE

case "$ADDINC" in
    \;*) ADDINC=`echo "$ADDINC" | sed 's,^;,/I,'`;;
    *) ;;
esac

#
# Used to use /O /Oc to optimize for size instead of speed
# (doubtless because of the ship-on-a-floppy size limit)
# For now I'm going to leave that off.
#
case "$OPT" in
    nil) OPT=;;
    debug) OPT="/Ti";;
    opt) OPT="/O /Oc /Ti-";;
esac


# try:
#     all+cls+cmp+cnd+cns+cnv+cpy+dcl+eff+enu+ext+gen+gnr+inl+lan
#     obs+ord+par+por+ppc+pro+trd+tru+und+vft
#
# /Wgot?
WARN='/Wini+rea+ret+uni+use'

# /Sc seems like it would be a good idea but doesn't work...

WINEPATH='I:\\ibmcppw\\bin'
export WINEPATH

LOG=`basename $FILE | sed 's/\.[a-z]*$//;s/$/.log/'`

if [ $QUIET = 0 ]; then
    echo wine 'I:\\ibmcppw\\bin\\icc.exe' "$ADDINC" /qmakedep /qtune=pentium \
	/J- /Gl /Gm /Gu+ $DEFS $WARN $OPT $SHLIB \
	/C "$FILE" '|' tee "$LOG"
fi

(
    wine 'I:\\ibmcppw\\bin\\icc.exe' "$ADDINC" /qmakedep /qtune=pentium \
	/J- /Gl /Gm /Gu+ $DEFS $WARN $OPT $SHLIB \
	/C "$FILE"
    echo "@@@Exit $?"
) 2>&1 | tr -d '\r' | tee "$LOG" | (
    if [ $QUIET = 1 ]; then
      sed '
        /^IBM(R) VisualAge(TM) for C++ for Windows(R), Version 3\.5$/d
        /^- Licensed Materials - Program-Property of IBM$/d
        /^(C) Copyright IBM Corp. 1991, 1996 - All Rights Reserved.$/d
      '
    else
      cat
    fi
) | awk '
    /^@@@Exit [0-9][0-9]*$/ { exit($2); }

    /^%0$/ { next; }
    /^$/ { next; }
    /%0$/ { sub("%0$", "", $0); printf "%s", $0; needeol=1; next; }
    { print; needeol=0; }
    END { if (needeol) printf "\n"; }

' "q=$QUIET"