166 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			166 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
#!/bin/sh
 | 
						|
 | 
						|
# installation of fast ACK compilers afcc, afm2
 | 
						|
 | 
						|
# 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 \<ACK home 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
 | 
						|
	echo $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
 | 
						|
 | 
						|
# edit manual page
 | 
						|
sed s@CHANGE_ME@$1/lib/m2@ < man/afm2.1.src > man/afm2.1
 | 
						|
 | 
						|
# install the compiler binaries
 | 
						|
 | 
						|
echo $0: copying compiler binaries ...
 | 
						|
case $m in
 | 
						|
sun)
 | 
						|
	cp ack.sun/cemcom* ack.sun/m2* $1/lib/m68020
 | 
						|
	;;
 | 
						|
vax)
 | 
						|
	cp ack.vax/cemcom* ack.vax/m2* $1/lib/vax4
 | 
						|
	;;
 | 
						|
esac
 | 
						|
 | 
						|
# now compile the driver program
 | 
						|
 | 
						|
echo $0: compiling driver program ...
 | 
						|
rm -f afcc afm2
 | 
						|
if cc -O -DACK_BIN -I$1/h -DFCC -o afcc driver.c &&
 | 
						|
   cc -O -DACK_BIN -I$1/h -DFM2 -o afm2 driver.c
 | 
						|
then
 | 
						|
	:
 | 
						|
else
 | 
						|
	echo $0: compilation of driver program failed >&2
 | 
						|
	exit 1
 | 
						|
fi
 | 
						|
 | 
						|
( cd $1/lang/m2/libm2
 | 
						|
  echo 'killbss() { }' > killbss.c
 | 
						|
  ../../../bin/acc -L -c -LIB killbss.c
 | 
						|
  cp LIST LIST.old
 | 
						|
  echo 'killbss.c' >> LIST
 | 
						|
  ../../../bin/arch r tail_m2.a killbss.c
 | 
						|
) > /dev/null 2>&1
 | 
						|
 | 
						|
case $m in
 | 
						|
sun)
 | 
						|
	( cd $1/lib/sun3
 | 
						|
	  cp tail_m2 tail_m2.orig
 | 
						|
	  ../../bin/aal r tail_m2 ../../lang/m2/libm2/killbss.o
 | 
						|
	)
 | 
						|
	;;
 | 
						|
vax)
 | 
						|
	( cd $1/lib/vax4
 | 
						|
	  cp tail_m2 tail_m2.orig
 | 
						|
	  ar r tail_m2 ../../lang/m2/libm2/killbss.o
 | 
						|
	  ranlib tail_m2
 | 
						|
	)
 | 
						|
	;;
 | 
						|
esac > /dev/null 2>&1
 | 
						|
 | 
						|
#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 ./afm2 test.mod 2>/dev/null
 | 
						|
then
 | 
						|
	case `a.out` in
 | 
						|
	"Hello World")
 | 
						|
		;;
 | 
						|
	*)
 | 
						|
		echo $0: afm2 test failed >&2
 | 
						|
		failed=true
 | 
						|
		;;
 | 
						|
	esac
 | 
						|
else
 | 
						|
	echo $0: afm2 compilation failed >&2
 | 
						|
	failed=true
 | 
						|
fi
 | 
						|
 | 
						|
cat > test.c <<'EOF'
 | 
						|
main() { printf("Hello World\n"); }
 | 
						|
EOF
 | 
						|
if ./afcc test.c 2>/dev/null
 | 
						|
then
 | 
						|
	case `a.out` in
 | 
						|
	"Hello World")
 | 
						|
		;;
 | 
						|
	*)
 | 
						|
		echo $0: afcc test failed >&2
 | 
						|
		failed=true
 | 
						|
		;;
 | 
						|
	esac
 | 
						|
else
 | 
						|
	echo $0: afcc 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/bin/afm2 $1/bin/afcc
 | 
						|
	cp afm2 afcc $1/bin
 | 
						|
	rm -f afm2 afcc
 | 
						|
	cp man/afcc.1 man/afm2.1 $1/man
 | 
						|
	echo $0: Installation completed
 | 
						|
	exit 0
 | 
						|
	;;
 | 
						|
esac
 |