123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- #!/bin/sh
- # installation of fast ACK compilers fcc, fm2, and fpc
- # is the call correct?
- case $# in
- 1)
- if [ -d $1 ]
- then
- :
- else
- echo $0: $1 is not a directory >&2
- exit 1
- fi
- ;;
- *)
- echo $0: Call is $0 \<bin directory\> >&2
- exit 1
- ;;
- esac
- # investigate machine: either vax or sun(3)
- echo $0: determining type of machine ...
- cat > t.c <<'EOF'
- main() {
- #ifdef sun
- printf("sun\n");
- #endif
- #ifdef vax
- printf("vax\n");
- #endif
- }
- EOF
- if cc t.c
- then
- :
- else
- $0: compilation failed >&2
- exit 1
- fi
- m=`./a.out`
- rm -f a.out t.[co]
- case $m in
- sun|vax)
- echo $0: Starting installation for a $m ...
- ;;
- *)
- echo $0: machine must be sun or vax >&2
- exit 1
- ;;
- esac
- # make links to proper bin and lib directories
- echo $0: creating bin and lib directories ...
- rm -f bin lib
- ln -s bin.$m bin
- ln -s lib.$m lib
- # edit manual page
- sed s@CHANGE_ME@`pwd`/def@ < man/fm2.1.src > man/fm2.1
- # now compile the driver program
- echo $0: compiling driver program ...
- rm -f fcc fm2 fpc
- SunOs4=
- if [ -f /usr/lib/ld.so ]
- then
- # different options for the loader on SunOs 4.0
- SunOs4=-DSunOs4
- fi
- if cc -O -DFASTDIR=\"`pwd`\" $SunOs4 -DFCC -o fcc driver.c &&
- cc -O -DFASTDIR=\"`pwd`\" $SunOs4 -DFM2 -o fm2 driver.c &&
- cc -O -DFASTDIR=\"`pwd`\" $SunOs4 -DFPC -o fpc driver.c
- then
- :
- else
- echo $0: compilation of driver program failed >&2
- exit 1
- fi
- if cc -o str_change str_change.c
- then
- case $m in
- vax)
- ./str_change CHANGE_ME `pwd` < bin.vax/m2mm > fm2mm
- ;;
- sun)
- ./str_change CHANGE_ME `pwd` < bin.sun/m2mm > fm2mm
- ;;
- esac
- rm -f str_change.o str_change
- chmod +x fm2mm
- else
- echo "$0: compilation of string patching program failed; cannot create fm2mm" >&2
- fi
- #now run simple tests
- echo $0: run some simple tests
- failed=false
- cat > test.mod <<'EOF'
- MODULE test;
- FROM InOut IMPORT WriteString, WriteLn;
- BEGIN
- WriteString("Hello World");
- WriteLn
- END test.
- EOF
- if ./fm2 test.mod 2>/dev/null
- then
- case `a.out` in
- "Hello World")
- ;;
- *)
- echo $0: fm2 test failed >&2
- failed=true
- ;;
- esac
- else
- echo $0: fm2 compilation failed >&2
- failed=true
- fi
- cat > test.c <<'EOF'
- main() { printf("Hello World\n"); }
- EOF
- if ./fcc test.c 2>/dev/null
- then
- case `a.out` in
- "Hello World")
- ;;
- *)
- echo $0: fcc test failed >&2
- failed=true
- ;;
- esac
- else
- echo $0: fcc compilation failed >&2
- failed=true
- fi
- cat > test.p <<'EOF'
- program p(output); begin writeln('Hello World') end.
- EOF
- if ./fpc test.p 2>/dev/null
- then
- case `a.out` in
- "Hello World")
- ;;
- *)
- echo $0: fpc test failed >&2
- failed=true
- ;;
- esac
- else
- echo $0: fpc compilation failed >&2
- failed=true
- fi
- rm -f test.* a.out
- case $failed in
- true)
- echo $0: some tests failed, installation aborted >&2
- exit 1
- ;;
- false)
- rm -f $1/fm2 $1/fcc $1/fpc
- cp fm2 fcc fpc $1
- if [ -f fm2mm ]
- then
- rm -f $1/fm2mm
- cp fm2mm $1/fm2mm
- fi
- rm -f fm2 fpc fcc fm2mm
- echo $0: Installation completed
- exit 0
- ;;
- esac
|