install.sh 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. #!/bin/sh
  2. #
  3. # Free Pascal installation script for Unixy platforms.
  4. # Copyright 1996-2004 Michael Van Canneyt, Marco van de Voort and Peter Vreman
  5. #
  6. # Don't edit this file.
  7. # Everything can be set when the script is run.
  8. #
  9. # Release Version
  10. VERSION=1.9.4
  11. # some useful functions
  12. # ask displays 1st parameter, and ask new value for variable, whose name is
  13. # in the second parameter.
  14. ask ()
  15. {
  16. askvar=$2
  17. eval old=\$$askvar
  18. eval echo -n \""$1 [$old] : "\"
  19. read $askvar
  20. eval test -z \"\$$askvar\" && eval $askvar=\'$old\'
  21. }
  22. # yesno gives 1 on no, 0 on yes $1 gives text to display.
  23. yesno ()
  24. {
  25. while true; do
  26. echo -n "$1 (Y/n) ? "
  27. read ans
  28. case X$ans in
  29. X|Xy|XY) return 0;;
  30. Xn|XN) return 1;;
  31. esac
  32. done
  33. }
  34. # Untar files ($3,optional) from file ($1) to the given directory ($2)
  35. unztar ()
  36. {
  37. tar -xzf $HERE/$1 --directory $2 $3
  38. }
  39. # Untar tar.gz file ($2) from file ($1) and untar result to the given directory ($3)
  40. unztarfromtar ()
  41. {
  42. tar -xOf $HERE/$1 $2 | tar --directory $3 -xzf -
  43. }
  44. # Get file list from tar archive ($1) in variable ($2)
  45. # optionally filter result through sed ($3)
  46. listtarfiles ()
  47. {
  48. askvar=$2
  49. if [ ! -z $3 ]; then
  50. list=`tar tvf $1 | awk '{ print $(NF) }' | sed -n /$3/p`
  51. else
  52. list=`tar tvf $1 | awk '{ print $(NF) }'`
  53. fi
  54. eval $askvar='$list'
  55. }
  56. # Make all the necessary directories to get $1
  57. makedirhierarch ()
  58. {
  59. OLDDIR=`pwd`
  60. case $1 in
  61. /*) cd /;;
  62. esac
  63. OLDIFS=$IFS;IFS=/;eval set $1; IFS=$OLDIFS
  64. for i
  65. do
  66. test -d $i || mkdir $i || break
  67. cd $i ||break
  68. done
  69. cd $OLDDIR
  70. }
  71. # check to see if something is in the path
  72. checkpath ()
  73. {
  74. ARG=$1
  75. OLDIFS=$IFS; IFS=":";eval set $PATH;IFS=$OLDIFS
  76. for i
  77. do
  78. if [ $i = $ARG ]; then
  79. return 0
  80. fi
  81. done
  82. return 1
  83. }
  84. # --------------------------------------------------------------------------
  85. # welcome message.
  86. #
  87. clear
  88. echo "This shell script will attempt to install the Free Pascal Compiler"
  89. echo "version $VERSION with the items you select"
  90. echo
  91. # Here we start the thing.
  92. HERE=`pwd`
  93. # Install in /usr/local or /usr ?
  94. if checkpath /usr/local/bin; then
  95. PREFIX=/usr/local
  96. else
  97. PREFIX=/usr
  98. fi
  99. # If we can't write on prefix, select subdir of home dir
  100. if [ ! -w $PREFIX ]; then
  101. PREFIX=$HOME/fpc-$VERSION
  102. fi
  103. ask "Install prefix (/usr or /usr/local) " PREFIX
  104. makedirhierarch $PREFIX
  105. # Set some defaults.
  106. LIBDIR=$PREFIX/lib/fpc/$VERSION
  107. SRCDIR=$PREFIX/src/fpc-$VERSION
  108. EXECDIR=$PREFIX/bin
  109. OSNAME=`uname -s | tr A-Z a-z`
  110. ARCHNAME=`uname -m | tr A-Z a-z`
  111. BSDHIER=0
  112. case $OSNAME in
  113. *bsd)
  114. BSDHIER=1;;
  115. esac
  116. # conversion from GNU/OS archname to FPC archname
  117. case $ARCHNAME in
  118. *sun4u)
  119. ARCHNAME=sparc64;;
  120. *sun4)
  121. ARCHNAME=sparc32;;
  122. *i486)
  123. ARCHNAME=i386;;
  124. *i586)
  125. ARCHNAME=i386;;
  126. *i686)
  127. ARCHNAME=i386;;
  128. *ppc)
  129. ARCHNAME=powerpc;;
  130. *armc4l)
  131. ARCHNAME=arm;;
  132. *amd64)
  133. ARCHNAME=x86_64;;
  134. esac
  135. SHORTARCH=$ARCHNAME
  136. # conversion from long to short archname for ppc<x>
  137. case $SHORTARC in
  138. *m68k)
  139. SHORTARCH=68k;;
  140. *sparc)
  141. SHORTARCH=sparc;;
  142. *i386)
  143. SHORTARCH=386;;
  144. *powerpc)
  145. SHORTARCH=ppc;;
  146. *arm)
  147. SHORTARCH=arm;;
  148. *x86_64)
  149. SHORTARCH=x64;;
  150. esac
  151. FULLARCH=$ARCHNAME-$OSNAME
  152. if [ "${BSDHIER}" = "1" ]; then
  153. DOCDIR=$PREFIX/share/doc/fpc-$VERSION
  154. else
  155. DOCDIR=$PREFIX/doc/fpc-$VERSION
  156. fi
  157. echo $DOCDIR
  158. DEMODIR=$DOCDIR/examples
  159. # Install compiler/RTL. Mandatory.
  160. echo Installing compiler and RTL ...
  161. unztarfromtar binary.tar base${OSNAME}.tar.gz $PREFIX
  162. rm -f $EXECDIR/ppc$(SHORTARCH)
  163. ln -sf $LIBDIR/ppc$(SHORTARCH) $EXECDIR/ppc$(SHORTARCH)
  164. echo Installing utilities...
  165. unztarfromtar binary.tar util${OSNAME}.tar.gz $PREFIX
  166. if yesno "Install FCL"; then
  167. unztarfromtar binary.tar unitsfcl${OSNAME}.tar.gz $PREFIX
  168. fi
  169. if yesno "Install packages"; then
  170. listtarfiles binary.tar packages units
  171. for f in $packages
  172. do
  173. if [ $f != unitsfcl${OSNAME}.tar.gz ]; then
  174. basename $f .tar.gz |\
  175. sed -e s/units// -e s/${OSNAME}// |\
  176. xargs echo Installing
  177. unztarfromtar binary.tar $f $PREFIX
  178. fi
  179. done
  180. fi
  181. rm -f *${OSNAME}.tar.gz
  182. echo Done.
  183. echo
  184. # Install the sources. Optional.
  185. if yesno "Install sources"; then
  186. echo Installing sources in $SRCDIR ...
  187. unztarfromtar sources.tar basesrc.tar.gz $PREFIX
  188. if yesno "Install compiler source"; then
  189. unztarfromtar sources.tar compilersrc.tar.gz $PREFIX
  190. fi
  191. if yesno "Install RTL source"; then
  192. unztarfromtar sources.tar rtlsrc.tar.gz $PREFIX
  193. fi
  194. if yesno "Install FCL source"; then
  195. unztarfromtar sources.tar fclsrc.tar.gz $PREFIX
  196. fi
  197. if yesno "Install IDE source"; then
  198. unztarfromtar sources.tar idesrc.tar.gz $PREFIX
  199. fi
  200. if yesno "Install installer source"; then
  201. unztarfromtar sources.tar installersrc.tar.gz $PREFIX
  202. fi
  203. if yesno "Install Packages source"; then
  204. listtarfiles sources.tar packages units
  205. for f in $packages
  206. do
  207. basename $f .tar.gz |\
  208. sed -e s/units// -e s/src// |\
  209. xargs echo Installing sources for
  210. unztarfromtar sources.tar $f $PREFIX
  211. done
  212. fi
  213. # rm -f *src.tar.gz
  214. echo Done.
  215. fi
  216. echo
  217. # Install the documentation. Optional.
  218. if yesno "Install documentation"; then
  219. echo Installing documentation in $DOCDIR ...
  220. unztar docs.tar.gz $DOCDIR
  221. echo Done.
  222. fi
  223. echo
  224. # Install the demos. Optional.
  225. if yesno "Install demos"; then
  226. ask "Install demos in" DEMODIR
  227. echo Installing demos in $DEMODIR ...
  228. makedirhierarch $DEMODIR
  229. unztar demo.tar.gz $DEMODIR
  230. echo Done.
  231. fi
  232. echo
  233. # Install /etc/fpc.cfg, this is done using the samplecfg script
  234. $LIBDIR/samplecfg $LIBDIR
  235. # The End
  236. echo
  237. echo End of installation.
  238. echo
  239. echo Refer to the documentation for more information.
  240. echo