install.sh 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. #!/usr/bin/env bash
  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 1.9.8 will be replaced by makepack
  10. VERSION=%version%
  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. # Install files from binary-*.tar
  85. # $1 = cpu-target
  86. # $2 = cross prefix
  87. installbinary ()
  88. {
  89. if [ "$2" == "" ]; then
  90. FPCTARGET=$1
  91. CROSSPREFIX=
  92. else
  93. FPCTARGET=`echo $2 | sed 's/-$//'`
  94. CROSSPREFIX=$2
  95. fi
  96. BINARYTAR=${CROSSPREFIX}binary.$1.tar
  97. # conversion from long to short archname for ppc<x>
  98. case $FPCTARGET in
  99. m68k*)
  100. PPCSUFFIX=68k;;
  101. sparc*)
  102. PPCSUFFIX=sparc;;
  103. i386*)
  104. PPCSUFFIX=386;;
  105. powerpc*)
  106. PPCSUFFIX=ppc;;
  107. arm*)
  108. PPCSUFFIX=arm;;
  109. x86_64*)
  110. PPCSUFFIX=x64;;
  111. mips*)
  112. PPCSUFFIX=mips;;
  113. ia64*)
  114. PPCSUFFIX=ia64;;
  115. alpha*)
  116. PPCSUFFIX=alpha;;
  117. esac
  118. # Install compiler/RTL. Mandatory.
  119. echo "Installing compiler and RTL for $FPCTARGET..."
  120. unztarfromtar $BINARYTAR ${CROSSPREFIX}base.$1.tar.gz $PREFIX
  121. if [ -f binutils-${CROSSPREFIX}$1.tar.gz ]; then
  122. if yesno "Install Cross binutils"; then
  123. unztar binutils-${CROSSPREFIX}$1.tar.gz $PREFIX
  124. fi
  125. fi
  126. # Install symlink
  127. rm -f $EXECDIR/ppc${PPCSUFFIX}
  128. ln -sf $LIBDIR/ppc${PPCSUFFIX} $EXECDIR/ppc${PPCSUFFIX}
  129. echo "Installing utilities..."
  130. unztarfromtar $BINARYTAR ${CROSSPREFIX}utils.$1.tar.gz $PREFIX
  131. ide=`tar -tf $BINARYTAR | grep "${CROSSPREFIX}ide.$1.tar.gz"`
  132. if [ "$ide" == "${CROSSPREFIX}ide.$1.tar.gz" ]; then
  133. if yesno "Install Textmode IDE"; then
  134. unztarfromtar $BINARYTAR ${CROSSPREFIX}ide.$1.tar.gz $PREFIX
  135. rm -f $EXECDIR/fp
  136. ln -sf $LIBDIR/fp $EXECDIR/fp
  137. fi
  138. fi
  139. if yesno "Install FCL"; then
  140. unztarfromtar $BINARYTAR ${CROSSPREFIX}units-fcl.$1.tar.gz $PREFIX
  141. fi
  142. if yesno "Install packages"; then
  143. listtarfiles $BINARYTAR packages units
  144. for f in $packages
  145. do
  146. if [ $f != ${CROSSPREFIX}units-fcl.$1.tar.gz ]; then
  147. p=`echo "$f" | sed -e 's+^.*units-\([^\.]*\)\..*+\1+'`
  148. echo "Installing $p"
  149. unztarfromtar $BINARYTAR $f $PREFIX
  150. fi
  151. done
  152. fi
  153. rm -f *.$1.tar.gz
  154. }
  155. # --------------------------------------------------------------------------
  156. # welcome message.
  157. #
  158. clear
  159. echo "This shell script will attempt to install the Free Pascal Compiler"
  160. echo "version $VERSION with the items you select"
  161. echo
  162. # Here we start the thing.
  163. HERE=`pwd`
  164. # Install in /usr/local or /usr ?
  165. if checkpath /usr/local/bin; then
  166. PREFIX=/usr/local
  167. else
  168. PREFIX=/usr
  169. fi
  170. # If we can't write on prefix, select subdir of home dir
  171. if [ ! -w $PREFIX ]; then
  172. PREFIX=$HOME/fpc-$VERSION
  173. fi
  174. ask "Install prefix (/usr or /usr/local) " PREFIX
  175. makedirhierarch $PREFIX
  176. # Set some defaults.
  177. LIBDIR=$PREFIX/lib/fpc/$VERSION
  178. SRCDIR=$PREFIX/src/fpc-$VERSION
  179. EXECDIR=$PREFIX/bin
  180. OSNAME=`uname -s | tr A-Z a-z`
  181. BSDHIER=0
  182. case $OSNAME in
  183. *bsd)
  184. BSDHIER=1;;
  185. esac
  186. SHORTARCH=$ARCHNAME
  187. FULLARCH=$ARCHNAME-$OSNAME
  188. DOCDIR=$PREFIX/share/doc/fpc-$VERSION
  189. DEMODIR=$DOCDIR/examples
  190. # Install all binary releases
  191. for f in *binary*.tar
  192. do
  193. target=`echo $f | sed 's+^.*binary\.\(.*\)\.tar$+\1+'`
  194. cross=`echo $f | sed 's+binary\..*\.tar$++'`
  195. # cross install?
  196. if [ "$cross" != "" ]; then
  197. if [ "`which fpc 2>/dev/null`" = '' ]; then
  198. echo "No native FPC found."
  199. echo "For a proper installation of a cross FPC the installation of a native FPC is required."
  200. exit 1
  201. else
  202. if [ `fpc -iV` != $VERSION ]; then
  203. echo "Warning: Native and cross FPC doesn't match; this could cause problems"
  204. fi
  205. fi
  206. fi
  207. installbinary $target $cross
  208. done
  209. echo Done.
  210. echo
  211. # Install the documentation. Optional.
  212. if [ -f doc-pdf.tar.gz ]; then
  213. if yesno "Install documentation"; then
  214. echo Installing documentation in $DOCDIR ...
  215. unztar doc-pdf.tar.gz $DOCDIR
  216. echo Done.
  217. fi
  218. fi
  219. echo
  220. # Install the demos. Optional.
  221. if [ -f demo.tar.gz ]; then
  222. if yesno "Install demos"; then
  223. ask "Install demos in" DEMODIR
  224. echo Installing demos in $DEMODIR ...
  225. makedirhierarch $DEMODIR
  226. unztar demo.tar.gz $DEMODIR
  227. echo Done.
  228. fi
  229. fi
  230. echo
  231. # Install /etc/fpc.cfg, this is done using the samplecfg script
  232. if [ "$cross" = "" ]; then
  233. $LIBDIR/samplecfg $LIBDIR
  234. else
  235. echo "No fpc.cfg created because a cross installation has been done."
  236. fi
  237. # The End
  238. echo
  239. echo End of installation.
  240. echo
  241. echo Refer to the documentation for more information.
  242. echo