INSTALL_A 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. #!/bin/sh
  2. # installation of fast ACK compilers afcc, afm2
  3. # is the call correct?
  4. case $# in
  5. 1)
  6. if [ -d $1 ]
  7. then
  8. :
  9. else
  10. echo $0: $1 is not a directory >&2
  11. exit 1
  12. fi
  13. ;;
  14. *)
  15. echo $0: Call is $0 \<ACK home directory\> >&2
  16. exit 1
  17. ;;
  18. esac
  19. # investigate machine: either vax or sun(3)
  20. echo $0: determining type of machine ...
  21. cat > t.c <<'EOF'
  22. main() {
  23. #ifdef sun
  24. printf("sun\n");
  25. #endif
  26. #ifdef vax
  27. printf("vax\n");
  28. #endif
  29. }
  30. EOF
  31. if cc t.c
  32. then
  33. :
  34. else
  35. echo $0: compilation failed >&2
  36. exit 1
  37. fi
  38. m=`./a.out`
  39. rm -f a.out t.[co]
  40. case $m in
  41. sun|vax)
  42. echo $0: Starting installation for a $m ...
  43. ;;
  44. *)
  45. echo $0: machine must be sun or vax >&2
  46. exit 1
  47. ;;
  48. esac
  49. # edit manual page
  50. sed s@CHANGE_ME@$1/lib/m2@ < man/afm2.1.src > man/afm2.1
  51. # install the compiler binaries
  52. echo $0: copying compiler binaries ...
  53. case $m in
  54. sun)
  55. cp ack.sun/cemcom* ack.sun/m2* $1/lib/m68020
  56. ;;
  57. vax)
  58. cp ack.vax/cemcom* ack.vax/m2* $1/lib/vax4
  59. ;;
  60. esac
  61. # now compile the driver program
  62. echo $0: compiling driver program ...
  63. rm -f afcc afm2
  64. if cc -O -DACK_BIN -I$1/h -DFCC -o afcc driver.c &&
  65. cc -O -DACK_BIN -I$1/h -DFM2 -o afm2 driver.c
  66. then
  67. :
  68. else
  69. echo $0: compilation of driver program failed >&2
  70. exit 1
  71. fi
  72. ( cd $1/lang/m2/libm2
  73. echo 'killbss() { }' > killbss.c
  74. ../../../bin/acc -L -c -LIB killbss.c
  75. cp LIST LIST.old
  76. echo 'killbss.c' >> LIST
  77. ../../../bin/arch r tail_m2.a killbss.c
  78. ) > /dev/null 2>&1
  79. case $m in
  80. sun)
  81. ( cd $1/lib/sun3
  82. cp tail_m2 tail_m2.orig
  83. ../../bin/aal r tail_m2 ../../lang/m2/libm2/killbss.o
  84. )
  85. ;;
  86. vax)
  87. ( cd $1/lib/vax4
  88. cp tail_m2 tail_m2.orig
  89. ar r tail_m2 ../../lang/m2/libm2/killbss.o
  90. ranlib tail_m2
  91. )
  92. ;;
  93. esac > /dev/null 2>&1
  94. #now run simple tests
  95. echo $0: run some simple tests
  96. failed=false
  97. cat > test.mod <<'EOF'
  98. MODULE test;
  99. FROM InOut IMPORT WriteString, WriteLn;
  100. BEGIN
  101. WriteString("Hello World");
  102. WriteLn
  103. END test.
  104. EOF
  105. if ./afm2 test.mod 2>/dev/null
  106. then
  107. case `a.out` in
  108. "Hello World")
  109. ;;
  110. *)
  111. echo $0: afm2 test failed >&2
  112. failed=true
  113. ;;
  114. esac
  115. else
  116. echo $0: afm2 compilation failed >&2
  117. failed=true
  118. fi
  119. cat > test.c <<'EOF'
  120. main() { printf("Hello World\n"); }
  121. EOF
  122. if ./afcc test.c 2>/dev/null
  123. then
  124. case `a.out` in
  125. "Hello World")
  126. ;;
  127. *)
  128. echo $0: afcc test failed >&2
  129. failed=true
  130. ;;
  131. esac
  132. else
  133. echo $0: afcc compilation failed >&2
  134. failed=true
  135. fi
  136. rm -f test.* a.out
  137. case $failed in
  138. true)
  139. echo $0: some tests failed, installation aborted >&2
  140. exit 1
  141. ;;
  142. false)
  143. rm -f $1/bin/afm2 $1/bin/afcc
  144. cp afm2 afcc $1/bin
  145. rm -f afm2 afcc
  146. cp man/afcc.1 man/afm2.1 $1/man
  147. echo $0: Installation completed
  148. exit 0
  149. ;;
  150. esac