home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / perl560.zip / hints / machten.sh < prev    next >
Linux/UNIX/POSIX Shell Script  |  2000-03-22  |  11KB  |  274 lines

  1. #! /bin/bash
  2. # machten.sh
  3. # This is for MachTen 4.1.4.  It might work on other versions and variants
  4. # too.  If it doesn't, tell me, and I'll try to fix it -- domo@computer.org
  5. #
  6. # Users of earlier MachTen versions might need a fixed tr from ftp.tenon.com.
  7. # This should be described in the MachTen release notes.
  8. #
  9. # MachTen 2.x has its own hint file.
  10. #
  11. # The original version of this file was put together by Andy Dougherty
  12. # <doughera@lafcol.lafayette.edu> based on comments from lots of
  13. # folks, especially 
  14. #     Mark Pease <peasem@primenet.com>
  15. #    Martijn Koster <m.koster@webcrawler.com>
  16. #    Richard Yeh <rcyeh@cco.caltech.edu>
  17. #
  18. # Remove dynamic loading libraries from search; enable SysV IPC with
  19. # MachTen 4.1.4 and above; define SYSTEM_ALIGN_BYTES for old MT versions
  20. #                      -- Dominic Dunlop <domo@computer.org> 000224
  21. # Disable shadow password file access: MT 4.1.1 has necessary library
  22. # functions, but not header file (or documentation)
  23. #                      -- Dominic Dunlop <domo@computer.org> 990804
  24. # For now, explicitly disable dynamic loading -- MT 4.1.1 has it,
  25. # but these hints do not yet support it.
  26. # Define NOTEDEF_MACHTEN to undo gratuitous Tenon hack to signal.h.
  27. #                      -- Dominic Dunlop <domo@computer.org> 9800802
  28. # Completely disable SysV IPC pending more complete support from Tenon
  29. #                      -- Dominic Dunlop <domo@computer.org> 980712
  30. # Use vfork and perl's malloc by default
  31. #                      -- Dominic Dunlop <domo@computer.org> 980630
  32. # Raise perl's stack size again; cut down reg_infty; document
  33. #                      -- Dominic Dunlop <domo@computer.org> 980619
  34. # Use of semctl() can crash system: disable -- Dominic Dunlop 980506
  35. # Raise stack size further; slight tweaks to accomodate MT 4.1
  36. #                      -- Dominic Dunlop <domo@computer.org> 980211
  37. # Raise perl's stack size -- Dominic Dunlop <domo@tcp.ip.lu> 970922
  38. # Reinstate sigsetjmp iff version is 4.0.3 or greater; use nm
  39. # (assumes Configure change); prune libswanted -- Dominic Dunlop 970113
  40. # Warn about test failure due to old Berkeley db -- Dominic Dunlop 970105
  41. # Do not use perl's malloc; SysV IPC OK -- Neil Cutcliffe, Tenon 961030
  42. # File::Find's use of link count disabled by Dominic Dunlop 960528
  43. # Perl's use of sigsetjmp etc. disabled by Dominic Dunlop 960521
  44. #
  45. # Comments, questions, and improvements welcome!
  46. #
  47. # MachTen 4.1.1's support for shadow password file access is incomplete:
  48. # disable its use completely.
  49. d_endspent=${d_endspent:-undef}
  50. d_getspent=${d_getspent:-undef}
  51. d_getspnam=${d_getspnam:-undef}
  52. d_setspent=${d_setspent:-undef}
  53.  
  54. # MachTen 4.1.1 does support dynamic loading, but perl doesn't
  55. # know how to use it yet.
  56. usedl=${usedl:-undef}
  57.  
  58. # MachTen 4.1.1 may have an unhelpful hack in /usr/include/signal.h.
  59. # Undo it if so.
  60. if grep NOTDEF_MACHTEN /usr/include/signal.h > /dev/null
  61. then
  62.     ccflags="$ccflags -DNOTDEF_MACHTEN"
  63. fi
  64.  
  65. # Power MachTen is a real memory system and its standard malloc
  66. # has been optimized for this. Using this malloc instead of Perl's
  67. # malloc may result in significant memory savings.  In particular,
  68. # unlike most UNIX memory allocation subsystems, MachTen's free()
  69. # really does return unneeded process data memory to the system.
  70. # However, MachTen's malloc() is woefully slow -- maybe 100 times
  71. # slower than perl's own, so perl's own is usually the better
  72. # choice.  In order to use perl's malloc(), the sbrk() system call
  73. # must be simulated using MachTen's malloc().  See malloc.c for
  74. # precise details of how this is achieved.  Recent improvements
  75. # to perl's malloc() currently crash MachTen, and so are disabled
  76. # by -DPLAIN_MALLOC and -DNO_FANCY_MALLOC.
  77. usemymalloc=${usemymalloc:-y}
  78.  
  79. # Older versions of MachTen malloc() data on a two-byte boundary, which
  80. # works, but slows down operations on long, float and double data.
  81. # Perl's malloc() can compensate if SYSTEM_ALLOC_ALIGNMENT is suitably
  82. # defined.
  83. if expr "$osvers" \< "4.1" >/dev/null
  84. then
  85. system_alloc_alignment=" -DSYSTEM_ALLOC_ALIGNMENT=2"
  86. fi
  87. # Do not wrap the following long line
  88. malloc_cflags='ccflags="$ccflags -DPLAIN_MALLOC -DNO_FANCY_MALLOC -DUSE_PERL_SBRK$system_alloc_alignment"'
  89.  
  90. # When MachTen does a fork(), it immediately copies the whole of
  91. # the parent process' data space for the child.  This can be
  92. # expensive.  Using vfork() where appropriate avoids this cost.
  93. d_vfork=${d_vfork:-define}
  94.  
  95. # Specify a high level of optimization (-O3 wouldn't do much more)
  96. optimize=${optimize:--O2 -fomit-frame-pointer}
  97.  
  98. # Make symbol table listings les voluminous
  99. nmopts=-gp
  100.  
  101. # Set reg_infty -- the maximum allowable number of repeats in regular
  102. # expressions such as  /a{1,$max_repeats}/, and the maximum number of
  103. # times /a*/ will match.  Setting this too high without having a stack
  104. # large enough to accommodate deep recursion in the regular expression
  105. # engine allows perl to crash your Mac due to stack overrun if it
  106. # encounters a pathological regular expression.  The default is a
  107. # compromise between capability and required stack size (see below).
  108. # You may override the default value from the Configure command-line
  109. # like this:
  110. #
  111. #   Configure -Dreg_infty=16368 ...
  112.  
  113. reg_infty=${reg_infty:-2047}
  114.  
  115. # If you want to have many perl processes active simultaneously --
  116. # processing CGI forms -- for example, you should opt for a small stack.
  117. # For safety, you should set reg_infty no larger than the corresponding
  118. # value given in this table:
  119. #
  120. # Stack size  reg_infty value supported
  121. # ----------  -------------------------
  122. # 128k        2**8-1    (256)
  123. # 256k        2**9-1    (511)
  124. # 512k        2**10-1  (1023)
  125. #   1M        2**11-1  (2047)
  126. # ...
  127. #  16M        2**15-1 (32767) (perl's default value)
  128.  
  129. # This script selects a safe stack size based on the value of reg_infty
  130. # specified above.  However, you may choose to take a risk and set
  131. # stack size lower: pathological regular expressions are rare in real-world
  132. # programs.  But be aware that, if perl does encounter one, it WILL
  133. # crash your system.  Do not set stack size lower than 96k unless
  134. # you want perl's installation tests ( make test ) to crash your system.
  135. #
  136. # You may override the default value from the Configure command-line
  137. # by specifying the required size in kilobytes like this:
  138. #
  139. #   Configure -Dstack_size=96
  140.  
  141. if [ "X$stack_size" = 'X' ]
  142. then
  143.     stack_size=128
  144.     X=`expr $reg_infty / 256`
  145.  
  146.     while [ $X -gt 0 ]
  147.     do
  148.     X=`expr $X / 2`
  149.     stack_size=`expr $stack_size \* 2`
  150.     done
  151.     X=`expr $stack_size \* 1024`
  152. fi
  153.  
  154. ldflags="$ldflags -Xlstack=$X"
  155. ccflags="$ccflags -DREG_INFTY=$reg_infty"
  156.  
  157. # Install in /usr/local by default
  158. prefix='/usr/local'
  159.  
  160. # At least on PowerMac, doubles must be aligned on 8 byte boundaries.
  161. # I don't know if this is true for all MachTen systems, or how to
  162. # determine this automatically.
  163. alignbytes=8
  164.  
  165. # 4.0.2 and earlier had a problem with perl's use of sigsetjmp and
  166. # friends.  Use setjmp and friends instead.
  167. expr "$osvers" \< "4.0.3" > /dev/null && d_sigsetjmp='undef'
  168.  
  169. # System V IPC before MachTen 4.1.4 is incomplete (missing msg function
  170. # prototypes, no ftok()), buggy (semctl(.., ..,  IPC_STATUS, ..) hangs
  171. # system), and undocumented.  Claim it's not there at all before 4.1.4.
  172. if expr "$osvers" \< "4.1.4" >/dev/null
  173. then
  174. d_msg=${d_msg:-undef}
  175. d_sem=${d_sem:-undef}
  176. d_shm=${d_shm:-undef}
  177. fi
  178.  
  179.  
  180. # As of MachTen 4.1.4 the msg* and shm* are in libc but unimplemented
  181. # (an attempt to use them causes a runtime error)
  182. # XXX Configure probe for really functional msg*() is needed XXX
  183. # XXX Configure probe for really functional shm*() is needed XXX
  184. if test "$d_msg" = ""; then
  185.     d_msgget=${d_msgget:-undef}
  186.     d_msgctl=${d_msgctl:-undef}
  187.     d_msgsnd=${d_msgsnd:-undef}
  188.     d_msgrcv=${d_msgrcv:-undef}
  189.     case "$d_msgget$d_msgsnd$d_msgctl$d_msgrcv" in
  190.     *"undef"*) d_msg="$undef" ;;
  191.     esac
  192. fi
  193. if test "$d_shm" = ""; then
  194.     d_shmat=${d_shmat:-undef}
  195.     d_shmdt=${d_shmdt:-undef}
  196.     d_shmget=${d_shmget:-undef}
  197.     d_shmctl=${d_shmctl:-undef}
  198.     case "$d_shmat$d_shmctl$d_shmdt$d_shmget" in
  199.     *"undef"*) d_shm="$undef" ;;
  200.     esac
  201. fi
  202.  
  203. # Get rid of some extra libs which it takes Configure a tediously
  204. # long time never to find on MachTen, or which break perl
  205. set `echo X "$libswanted "|sed -e 's/ net / /' -e 's/ socket / /' \
  206.     -e 's/ inet / /' -e 's/ nsl / /' -e 's/ nm / /' -e 's/ malloc / /' \
  207.     -e 's/ ld / /' -e 's/ sun / /' -e 's/ posix / /' \
  208.     -e 's/ cposix / /' -e 's/ crypt / /' -e 's/ dl / /' -e 's/ dld / /' \
  209.     -e 's/ ucb / /' -e 's/ bsd / /' -e 's/ BSD / /' -e 's/ PW / /'`
  210. shift
  211. libswanted="$*"
  212.  
  213. # While link counts on MachTen 4.1's fast file systems work correctly,
  214. # on Macintosh Heirarchical File Systems, (and on HFS+)
  215. # MachTen always reports ony two links to directories, even if they
  216. # contain subdirectories.  Consequently, we use this variable to stop
  217. # File::Find using the link count to determine whether there are
  218. # subdirectories to be searched.  This will generate a harmless message:
  219. # Hmm...You had some extra variables I don't know about...I'll try to keep 'em.
  220. #    Propagating recommended variable dont_use_nlink
  221. dont_use_nlink=define
  222.  
  223. cat <<EOM >&4
  224.  
  225. During Configure, you may see the message
  226.  
  227. *** WHOA THERE!!! ***
  228.     The recommended value for \$d_msg on this machine was "undef"!
  229.     Keep the recommended value? [y]
  230.  
  231. as well as similar messages concerning \$d_sem and \$d_shm.  Select the
  232. default answers: MachTen 4.1 appears to provide System V IPC support,
  233. but it is incomplete and buggy: perl should be built without it.
  234.  
  235. Similarly, when you see
  236.  
  237. *** WHOA THERE!!! ***
  238.     The recommended value for \$d_vfork on this machine was "define"!
  239.     Keep the recommended value? [y]
  240.  
  241. select the default answer: vfork() works, and avoids expensive data
  242. copying.
  243.  
  244. You may also see "WHOA THERE!!!" messages concerning \$d_endspent,
  245. \$d_getspent, \$d_getspnam and \$d_setspent.  In all cases, select the
  246. default answer: MachTen's support for shadow password file access is
  247. incomplete, and should not be used.
  248.  
  249. At the end of Configure, you will see a harmless message
  250.  
  251. Hmm...You had some extra variables I don't know about...I'll try to keep 'em.
  252.     Propagating recommended variable dont_use_nlink
  253.         Propagating recommended variable nmopts
  254.         Propagating recommended variable malloc_cflags...
  255.         Propagating recommended variable reg_infty
  256.         Propagating recommended variable system_alloc_alignment
  257. Read the File::Find documentation for more information about dont_use_nlink
  258.  
  259. Your perl will be built with a stack size of ${stack_size}k and a regular
  260. expression repeat count limit of $reg_infty.  If you want alternative
  261. values, see the file hints/machten.sh for advice on how to change them.
  262.  
  263. Tests
  264.     io/fs test 4  and
  265.     op/stat test 3
  266. may fail since MachTen may not return a useful nlinks field to stat
  267. on directories.
  268.  
  269. EOM
  270. expr "$osvers" \< "4.1" >/dev/null && test -r ./broken-db.msg && \
  271.     . ./broken-db.msg
  272.  
  273. unset stack_size X
  274.