setvarはcompile時のオプション等を指定する環境変数を与えるスクリプトです。修正は以下の通りSACDIRを指定してやることとSACCFLAGSに -I/usr/include/bsd を追加することです。
<修正前>
setenv SACDIR xxx
setenv SACCFLAGS "-w -DBSD -I/usr/X11/include"
setenv SACFFLAGS "-w -N n2000 -N q300"
setenv SACPFLAGS "-P"
setenv SACXWINDOWS x11
setenv SACSUNWINDOWS 0
setenv X11LIBDIR /usr/X11/lib
↓
<修正後>
setenv SACDIR /usr/local/sac (←ここ!)
setenv SACCFLAGS "-w -DBSD -I/usr/X11/include -I/usr/include/bsd" (←ここ!)
setenv SACFFLAGS "-w -N n2000 -N q300"
setenv SACPFLAGS "-P"
setenv SACXWINDOWS x11
setenv SACSUNWINDOWS 0
setenv X11LIBDIR /usr/X11/lib
SACCFLAGSに -I/usr/include/bsdを追加するというのはBSD系のOSではないLinuxに特有の作業です。これを追加しないとcompilesacでcompile時に
/usr/local/sac/src/co/zgcurr.c
/usr/local/sac/src/co/zgnmsg.c
/usr/local/sac/src/co/zgterm.c
/usr/local/sac/src/co/zgwindowsize.c
のcompileのところで「sgtty.hっちゅうヘッダファイルはないで」と言われてしまいます。Linux(のRedHat 4.2)の場合sgtty.hは/usr/include/bsdにあるので、gccのオプション -I を使ってヘッダファイルのあるdirを明示的に指定してやるわけです。
ちょっと/usr/include/bsd/sgtty.hの中をのぞいてみると、先頭のコメント部分に
/* This file contains defintions to help make linux termios look like bsd sgtty. */
と書いてあったり
#undef ioctl
#define ioctl bsd_ioctl
などという行があったりするので、BSD系のOSを前提としたI/O関数がsource中で呼び出されていても、このヘッダファイルのおかげでLinuxでも無事うまくいく(ioctlという関数を呼び出すところをBSD系のioctlを模したbsd_ioctlを呼び出すように変えてしまって対処する)ことが分かります。もっともbsd_ioctlという関数を使うことになるので、compile時にbsd_ioctlを含むBSD系関数のlibrary(?)である/usr/lib/libbsd.aをリンクしてやらねばならなくなります。このための対処は「loadsacの修正」のところで行います。なお、以上のsgtty.h、bsd_ioctlに関する情報はgccのHOWTO文書GCC-HOWTOの4.3.1に書いてありました。この文書はJFによる日本語訳がありますのでそれを御覧下さい。