rsc | dbd7b9a | 2003-11-23 18:29:08 +0000 | [diff] [blame] | 1 | #!/bin/sh |
| 2 | |
rsc | eea5f6a | 2005-01-17 20:57:57 +0000 | [diff] [blame] | 3 | test -f $PLAN9/config && . $PLAN9/config |
rsc | dbd7b9a | 2003-11-23 18:29:08 +0000 | [diff] [blame] | 4 | usegcc() |
| 5 | { |
| 6 | cc=gcc |
rsc | 8f31499 | 2004-03-02 17:34:15 +0000 | [diff] [blame] | 7 | ngflags=" \ |
rsc | dbd7b9a | 2003-11-23 18:29:08 +0000 | [diff] [blame] | 8 | -O2 \ |
rsc | dbd7b9a | 2003-11-23 18:29:08 +0000 | [diff] [blame] | 9 | -c \ |
rsc | dbd7b9a | 2003-11-23 18:29:08 +0000 | [diff] [blame] | 10 | -Wall \ |
| 11 | -Wno-parentheses \ |
| 12 | -Wno-missing-braces \ |
| 13 | -Wno-switch \ |
rsc | d51419b | 2004-02-09 19:33:05 +0000 | [diff] [blame] | 14 | -Wno-comment \ |
rsc | 3765283 | 2003-11-25 02:36:46 +0000 | [diff] [blame] | 15 | -Wno-sign-compare \ |
wkj | 115d4c0 | 2004-05-03 17:26:17 +0000 | [diff] [blame] | 16 | -Wno-unknown-pragmas \ |
rsc | be36ff6 | 2004-04-29 17:13:24 +0000 | [diff] [blame] | 17 | -fno-omit-frame-pointer \ |
rsc | dbd7b9a | 2003-11-23 18:29:08 +0000 | [diff] [blame] | 18 | " |
rsc | be36ff6 | 2004-04-29 17:13:24 +0000 | [diff] [blame] | 19 | # want to put -fno-optimize-sibling-calls here but |
| 20 | # that option only works with gcc3+ it seems |
rsc | dc9d0ff | 2004-03-02 19:29:39 +0000 | [diff] [blame] | 21 | cflags="$ngflags -ggdb" |
rsc | dbd7b9a | 2003-11-23 18:29:08 +0000 | [diff] [blame] | 22 | } |
| 23 | |
rsc | 8f31499 | 2004-03-02 17:34:15 +0000 | [diff] [blame] | 24 | tag="${SYSNAME:-`uname`}-${OBJTYPE:-`uname -m`}-${CC9:-cc}" |
rsc | dbd7b9a | 2003-11-23 18:29:08 +0000 | [diff] [blame] | 25 | case "$tag" in |
rsc | 7033e49 | 2004-12-28 23:14:43 +0000 | [diff] [blame] | 26 | *BSD*) usegcc ;; |
rsc | 53dbac9 | 2004-03-02 16:58:49 +0000 | [diff] [blame] | 27 | *Darwin*) usegcc |
rsc | 8f31499 | 2004-03-02 17:34:15 +0000 | [diff] [blame] | 28 | cflags="$ngflags -g3 -no-cpp-precomp" ;; |
rsc | dbd7b9a | 2003-11-23 18:29:08 +0000 | [diff] [blame] | 29 | *HP-UX*) cc=cc; cflags="-g -O -c -Ae" ;; |
rsc | 282c88f | 2004-09-17 22:09:31 +0000 | [diff] [blame] | 30 | *Linux*) usegcc |
rsc | 3b8f0b7 | 2005-07-22 18:56:31 +0000 | [diff] [blame] | 31 | case "${CC9:-gcc}" in |
| 32 | tcc) |
| 33 | cc=tcc |
| 34 | cflags="-c -g" |
| 35 | ;; |
| 36 | esac |
rsc | ead3e31 | 2005-01-04 21:13:58 +0000 | [diff] [blame] | 37 | case "${SYSVERSION:-`uname -r`}" in |
rsc | fa26762 | 2004-12-24 07:12:30 +0000 | [diff] [blame] | 38 | 2.6.*) |
rsc | 282c88f | 2004-09-17 22:09:31 +0000 | [diff] [blame] | 39 | cflags="$cflags -D__Linux26__" |
| 40 | ;; |
| 41 | esac |
| 42 | ;; |
rsc | dbd7b9a | 2003-11-23 18:29:08 +0000 | [diff] [blame] | 43 | *OSF1*) cc=cc; cflags="-g -O -c" ;; |
rsc | 0f192bb | 2004-03-26 05:01:11 +0000 | [diff] [blame] | 44 | *SunOS*-cc) cc=cc; |
rsc | 9e863cf | 2005-01-07 07:16:53 +0000 | [diff] [blame] | 45 | cflags="-mt -g -O -c -xCC -D__sun__" |
rsc | 0f192bb | 2004-03-26 05:01:11 +0000 | [diff] [blame] | 46 | u=`uname` |
rsc | 1b431b1 | 2004-03-26 05:05:33 +0000 | [diff] [blame] | 47 | v=`uname -r` |
| 48 | s=`echo $u$v | tr '. ' '__'` |
rsc | 4fc1f5f | 2005-01-19 16:45:27 +0000 | [diff] [blame] | 49 | cflags="$cflags -D__${s}__" |
rsc | 0f192bb | 2004-03-26 05:01:11 +0000 | [diff] [blame] | 50 | ;; |
| 51 | *SunOS*-gcc) usegcc |
| 52 | u=`uname` |
rsc | 1b431b1 | 2004-03-26 05:05:33 +0000 | [diff] [blame] | 53 | v=`uname -r` |
| 54 | s=`echo $u$v | tr '. ' '__'` |
rsc | 78802e6 | 2004-04-24 04:52:49 +0000 | [diff] [blame] | 55 | cflags="$ngflags -g" |
rsc | 4fc1f5f | 2005-01-19 16:45:27 +0000 | [diff] [blame] | 56 | cflags="$cflags -D__${s}__" |
rsc | 0f192bb | 2004-03-26 05:01:11 +0000 | [diff] [blame] | 57 | ;; |
rsc | dbd7b9a | 2003-11-23 18:29:08 +0000 | [diff] [blame] | 58 | *) |
| 59 | echo 9c does not know how to compile on "$tag" 1>&2 |
| 60 | exit 1 |
| 61 | esac |
| 62 | |
rsc | ead3e31 | 2005-01-04 21:13:58 +0000 | [diff] [blame] | 63 | # N.B. Must use temp file to avoid pipe; pipe loses status. |
rsc | eacba19 | 2005-03-18 19:32:06 +0000 | [diff] [blame] | 64 | # The uniq at the end is for gcc's strcmp/etc. built-in nonsense, |
| 65 | # which multiplies single errors as a result of its expansion. |
rsc | ead3e31 | 2005-01-04 21:13:58 +0000 | [diff] [blame] | 66 | xtmp=/tmp/9c.$$.$USER.out |
rsc | 593ac8b | 2005-07-22 12:37:20 +0000 | [diff] [blame] | 67 | $cc -DPLAN9PORT -I$PLAN9/include $cflags "$@" 2>$xtmp |
rsc | d756dc5 | 2005-01-07 07:15:31 +0000 | [diff] [blame] | 68 | status=$? |
| 69 | grep -v '__p9l_autolib_' $xtmp | |
rsc | 746d2e1 | 2006-02-14 19:38:15 +0000 | [diff] [blame] | 70 | egrep -v ': error: .Each undeclared identifier|: error: for each function it appears|is dangerous, better use|is almost always misused|: In function |: At top level:' | |
rsc | eacba19 | 2005-03-18 19:32:06 +0000 | [diff] [blame] | 71 | sed 's/ .first use in this function.$//; s/\"\([^\"][^\"]*\)\", line \([0-9][0-9]*\)/\1:\2/g' | |
rsc | 3b8f0b7 | 2005-07-22 18:56:31 +0000 | [diff] [blame] | 72 | uniq 1>&2 |
rsc | d756dc5 | 2005-01-07 07:15:31 +0000 | [diff] [blame] | 73 | rm -f $xtmp $xtmp.status |
rsc | ead3e31 | 2005-01-04 21:13:58 +0000 | [diff] [blame] | 74 | exit $status |