182 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Text
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			182 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Text
		
	
	
		
			Executable file
		
	
	
	
	
| #!/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
 |