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