perl 2.0 patch #13
The Superuser
lroot at jpl-devvax.JPL.NASA.GOV
Fri Aug 5 18:43:57 AEST 1988
System: perl version 2.0
Patch #: 13
Priority: LOW
Subject: Configure now supports alternate C compilers better
Subject: form feed no longer produced before first page
Subject: fixed loop stack overflow on goto
Subject: fixed recursive subroutine storage management
Subject: a2p was treating strings and numbers as variables
Subject: dumb typo in last patch
Description:
Configure now figures out which C compiler you want early enough
for it to do some good in the other tests that Configure does.
It turned out to be easy to make "goto" exit loops without overflowing
the label stack. So I did.
I botched the analysis routine that figures out which temporaries
in the syntax tree have to be saved in the event of recursion.
Hopefully I've improved it.
a2p was treating strings and numbers as variables. The string
"abc" ++b
was being translated to
"abc"++ . $b
Turned out the grammar was wrong.
In the last patch in walk.c I said str_cur when I meant str_ptr.
Dumb, dumb, dumb.
Fix: From rn, say "| patch -p -N -d DIR", where DIR is your perl source
directory. Outside of rn, say "cd DIR; patch -p -N <thisarticle".
If you don't have the patch program, apply the following by hand,
or get patch (version 2.0, latest patchlevel).
After patching:
Configure -d # omit -d if you wish to change C compiler
make depend
make
make test
make install
cd x2p
make
make install
If patch indicates that patchlevel is the wrong version, you may need
to apply one or more previous patches, or the patch may already
have been applied. See the patchlevel.h file to find out what has or
has not been applied. In any event, don't continue with the patch.
If you are missing previous patches they can be obtained from me:
Larry Wall
lwall at jpl-devvax.jpl.nasa.gov
If you send a mail message of the following form it will greatly speed
processing:
Subject: Command
@SH mailpatch PATH perl 2.0 LIST
^ note the c
where PATH is a return path FROM ME TO YOU either in Internet notation,
or in bang notation from some well-known host, and LIST is the number
of one or more patches you need, separated by spaces, commas, and/or
hyphens. Saying 35- says everything from 35 to the end.
You can also get the patches via anonymous FTP from
jpl-devvax.jpl.nasa.gov (128.149.8.43).
Index: patchlevel.h
Prereq: 12
1c1
< #define PATCHLEVEL 12
---
> #define PATCHLEVEL 13
Index: Configure
Prereq: 2.0.1.3
*** Configure.old Fri Aug 5 01:31:28 1988
--- Configure Fri Aug 5 01:31:31 1988
***************
*** 8,14 ****
# and edit it to reflect your system. Some packages may include samples
# of config.h for certain machines, so you might look for one of those.)
#
! # $Header: Configure,v 2.0.1.3 88/08/03 21:59:07 root Exp $
#
# Yes, you may rip this off to use in other distribution packages.
# (Note: this Configure script was generated automatically. Rather than
--- 8,14 ----
# and edit it to reflect your system. Some packages may include samples
# of config.h for certain machines, so you might look for one of those.)
#
! # $Header: Configure,v 2.0.1.4 88/08/05 01:23:27 root Exp $
#
# Yes, you may rip this off to use in other distribution packages.
# (Note: this Configure script was generated automatically. Rather than
***************
*** 66,75 ****
mailx=''
mail=''
cpp=''
Log=''
Header=''
bin=''
- cc=''
contains=''
cppstdin=''
cppminus=''
--- 66,75 ----
mailx=''
mail=''
cpp=''
+ perl=''
Log=''
Header=''
bin=''
contains=''
cppstdin=''
cppminus=''
***************
*** 112,117 ****
--- 112,118 ----
huge=''
ccflags=''
ldflags=''
+ cc=''
n=''
c=''
package=''
***************
*** 152,165 ****
: Now test for existence of everything in MANIFEST
(cd ..; cat `awk 'NR>4{print $1}' MANIFEST` >/dev/null || kill $$)
attrlist="mc68000 sun gcos unix ibm gimpel interdata tss os mert pyr"
attrlist="$attrlist vax pdp11 i8086 z8000 u3b2 u3b5 u3b20 u3b200"
attrlist="$attrlist ns32000 ns16000 iAPX286 mc300 mc500 mc700 sparc"
attrlist="$attrlist nsc32000 sinix xenix venix posix ansi M_XENIX"
attrlist="$attrlist $mc68k __STDC__ UTS M_I8086 M_I186 M_I286 M_I386"
! pth="/usr/ucb /bin /usr/bin /usr/local /usr/local/bin /usr/lbin /etc /usr/lib /lib"
d_newshome="/usr/NeWS"
defvoidused=7
--- 153,169 ----
: Now test for existence of everything in MANIFEST
+ echo "First let's make sure your kit is complete. Checking..."
(cd ..; cat `awk 'NR>4{print $1}' MANIFEST` >/dev/null || kill $$)
+ echo " "
attrlist="mc68000 sun gcos unix ibm gimpel interdata tss os mert pyr"
attrlist="$attrlist vax pdp11 i8086 z8000 u3b2 u3b5 u3b20 u3b200"
+ attrlist="$attrlist hpux hp9000s300 hp9000s500 hp9000s800"
attrlist="$attrlist ns32000 ns16000 iAPX286 mc300 mc500 mc700 sparc"
attrlist="$attrlist nsc32000 sinix xenix venix posix ansi M_XENIX"
attrlist="$attrlist $mc68k __STDC__ UTS M_I8086 M_I186 M_I286 M_I386"
! pth="/usr/ucb /bin /usr/bin /usr/local /usr/local/bin /usr/lbin /etc /usr/lib /lib /usr/local/lib"
d_newshome="/usr/NeWS"
defvoidused=7
***************
*** 387,400 ****
echo "Hopefully test is built into your sh."
;;
/bin/test)
! echo " "
! dflt=n
! rp="Is your "'"'"test"'"'" built into sh? [$dflt] (OK to guess)"
! echo $n "$rp $c"
! . myread
! case "$ans" in
! y*) test=test ;;
! esac
;;
*)
test=test
--- 391,400 ----
echo "Hopefully test is built into your sh."
;;
/bin/test)
! if sh -c "PATH= test true" >/dev/null 2>&1; then
! echo "Using the test built into your sh."
! test=test
! fi
;;
*)
test=test
***************
*** 627,632 ****
--- 627,955 ----
fi
rm -f try today
+ : set up shell script to do ~ expansion
+ cat >filexp <<EOSS
+ $startsh
+ : expand filename
+ case "\$1" in
+ ~/*|~)
+ echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
+ ;;
+ ~*)
+ if $test -f /bin/csh; then
+ /bin/csh -f -c "glob \$1"
+ echo ""
+ else
+ name=\`$expr x\$1 : '..\([^/]*\)'\`
+ dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
+ if $test ! -d "\$dir"; then
+ me=\`basename \$0\`
+ echo "\$me: can't locate home directory for: \$name" >&2
+ exit 1
+ fi
+ case "\$1" in
+ */*)
+ echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
+ ;;
+ *)
+ echo \$dir
+ ;;
+ esac
+ fi
+ ;;
+ *)
+ echo \$1
+ ;;
+ esac
+ EOSS
+ chmod +x filexp
+ $eunicefix filexp
+
+ : determine where manual pages go
+ case "$mansrc" in
+ '')
+ dflt=`loc . /usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1 /usr/man/u_man/man1 /usr/man/man1`
+ ;;
+ *) dflt="$mansrc"
+ ;;
+ esac
+ cont=true
+ while $test "$cont" ; do
+ echo " "
+ rp="Where do the manual pages (source) go? [$dflt]"
+ $echo $n "$rp $c"
+ . myread
+ mansrc=`filexp "$ans"`
+ if test -d $mansrc; then
+ cont=''
+ else
+ dflt=n
+ rp="Directory $mansrc doesn't exist. Use that name anyway? [$dflt]"
+ $echo $n "$rp $c"
+ . myread
+ dflt=''
+ case "$ans" in
+ y*) cont='';;
+ esac
+ fi
+ done
+ case "$mansrc" in
+ *l)
+ manext=l
+ ;;
+ *n)
+ manext=n
+ ;;
+ *C)
+ manext=C
+ ;;
+ *)
+ manext=1
+ ;;
+ esac
+
+ : see what memory models we can support
+ case "$models" in
+ '')
+ : We may not use Cppsym or we get a circular dependency through cc.
+ : But this should work regardless of which cc we eventually use.
+ cat >pdp11.c <<'EOP'
+ main() {
+ #ifdef pdp11
+ exit(0);
+ #else
+ exit(1);
+ #endif
+ }
+ EOP
+ cc -o pdp11 pdp11.c >/dev/null 2>&1
+ if pdp11 2>/dev/null; then
+ dflt='unsplit split'
+ else
+ ans=`loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
+ case "$ans" in
+ X) dflt='none';;
+ *) if $test -d /lib/small || $test -d /usr/lib/small; then
+ dflt='small'
+ else
+ dflt=''
+ fi
+ if $test -d /lib/medium || $test -d /usr/lib/medium; then
+ dflt="$dflt medium"
+ fi
+ if $test -d /lib/large || $test -d /usr/lib/large; then
+ dflt="$dflt large"
+ fi
+ if $test -d /lib/huge || $test -d /usr/lib/huge; then
+ dflt="$dflt huge"
+ fi
+ esac
+ fi
+ ;;
+ *) dflt="$models" ;;
+ esac
+ $cat <<EOM
+
+ Some systems have different model sizes. On most systems they are called
+ small, medium, large, and huge. On the PDP11 they are called unsplit and
+ split. If your system doesn't support different memory models, say "none".
+ If you wish to force everything to one memory model, say "none" here and
+ put the appropriate flags later when it asks you for other cc and ld flags.
+ Venix systems may wish to put "none" and let the compiler figure things out.
+ (In the following question multiple model names should be space separated.)
+
+ EOM
+ rp="Which models are supported? [$dflt]"
+ $echo $n "$rp $c"
+ . myread
+ models="$ans"
+
+ case "$models" in
+ none)
+ small=''
+ medium=''
+ large=''
+ huge=''
+ unsplit=''
+ split=''
+ ;;
+ *split)
+ case "$split" in
+ '')
+ if $contains '\-i' $mansrc/ld.1 >/dev/null 2>&1 || \
+ $contains '\-i' $mansrc/cc.1 >/dev/null 2>&1; then
+ dflt='-i'
+ else
+ dflt='none'
+ fi
+ ;;
+ *) dflt="$split";;
+ esac
+ rp="What flag indicates separate I and D space? [$dflt]"
+ $echo $n "$rp $c"
+ . myread
+ case "$ans" in
+ none) ans='';;
+ esac
+ split="$ans"
+ unsplit=''
+ ;;
+ *large*|*small*|*medium*|*huge*)
+ case "$model" in
+ *large*)
+ case "$large" in
+ '') dflt='-Ml';;
+ *) dflt="$large";;
+ esac
+ rp="What flag indicates large model? [$dflt]"
+ $echo $n "$rp $c"
+ . myread
+ case "$ans" in
+ none) ans='';
+ esac
+ large="$ans"
+ ;;
+ *) large='';;
+ esac
+ case "$model" in
+ *huge*)
+ case "$huge" in
+ '') dflt='-Mh';;
+ *) dflt="$huge";;
+ esac
+ rp="What flag indicates huge model? [$dflt]"
+ $echo $n "$rp $c"
+ . myread
+ case "$ans" in
+ none) ans='';
+ esac
+ huge="$ans"
+ ;;
+ *) huge="$large";;
+ esac
+ case "$model" in
+ *medium*)
+ case "$medium" in
+ '') dflt='-Mm';;
+ *) dflt="$medium";;
+ esac
+ rp="What flag indicates medium model? [$dflt]"
+ $echo $n "$rp $c"
+ . myread
+ case "$ans" in
+ none) ans='';
+ esac
+ medium="$ans"
+ ;;
+ *) medium="$large";;
+ esac
+ case "$model" in
+ *small*)
+ case "$small" in
+ '') dflt='none';;
+ *) dflt="$small";;
+ esac
+ rp="What flag indicates small model? [$dflt]"
+ $echo $n "$rp $c"
+ . myread
+ case "$ans" in
+ none) ans='';
+ esac
+ small="$ans"
+ ;;
+ *) small='';;
+ esac
+ ;;
+ *)
+ echo "Unrecognized memory models--you may have to edit Makefile.SH"
+ ;;
+ esac
+
+ : see if we need a special compiler
+ echo " "
+ if usg; then
+ case "$cc" in
+ '')
+ case "$Mcc" in
+ /*) dflt='Mcc'
+ ;;
+ *)
+ case "$large" in
+ -M*)
+ dflt='cc'
+ ;;
+ *)
+ if $contains '\-M' $mansrc/cc.1 >/dev/null 2>&1 ; then
+ dflt='cc -M'
+ else
+ dflt='cc'
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ *) dflt="$cc";;
+ esac
+ $cat <<'EOM'
+
+ On some systems the default C compiler will not resolve multiple global
+ references that happen to have the same name. On some such systems the
+ "Mcc" command may be used to force these to be resolved. On other systems
+ a "cc -M" command is required. (Note that the -M flag on other systems
+ indicates a memory model to use!) If you have the Gnu C compiler, you
+ might wish to use that instead. What command will force resolution on
+ EOM
+ $echo $n "this system? [$dflt] $c"
+ rp="Command to resolve multiple refs? [$dflt]"
+ . myread
+ cc="$ans"
+ else
+ case "$cc" in
+ '') dflt=cc;;
+ *) dflt="$cc";;
+ esac
+ rp="Use which C compiler? [$dflt]"
+ $echo $n "$rp $c"
+ . myread
+ cc="$ans"
+ fi
+ case "$cc" in
+ gcc*) cpp=`loc gcc-cpp $cpp $pth`;;
+ esac
+
+ case "$ccflags" in
+ '') dflt='none';;
+ *) dflt="$ccflags";;
+ esac
+ echo " "
+ rp="Any additional cc flags? [$dflt]"
+ $echo $n "$rp $c"
+ . myread
+ case "$ans" in
+ none) ans='';
+ esac
+ ccflags="$ans"
+
+ case "$ldflags" in
+ '') if venix; then
+ dflt='-i -z'
+ else
+ dflt='none'
+ fi
+ ;;
+ *) dflt="$ldflags";;
+ esac
+ echo " "
+ rp="Any additional ld flags? [$dflt]"
+ $echo $n "$rp $c"
+ . myread
+ case "$ans" in
+ none) ans='';
+ esac
+ ldflags="$ans"
+ rmlist="$rmlist pdp11"
+
: see how we invoke the C preprocessor
echo " "
echo "Now, how can we feed standard input to your C preprocessor..."
***************
*** 635,680 ****
#define XYZ xyz
ABC.XYZ
EOT
! echo 'Maybe "'$cpp'" will work...'
! $cpp <testcpp.c >testcpp.out 2>&1
if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
echo "Yup, it does."
! cppstdin="$cpp"
cppminus='';
else
! echo 'Nope, maybe "'$cpp' -" will work...'
! $cpp - <testcpp.c >testcpp.out 2>&1
if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
echo "Yup, it does."
cppstdin="$cpp"
! cppminus='-';
else
! echo 'No such luck...maybe "cc -E" will work...'
! cc -E <testcpp.c >testcpp.out 2>&1
if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
echo "It works!"
! cppstdin='cc -E'
! cppminus='';
else
! echo 'Nixed again...maybe "cc -E -" will work...'
! cc -E - <testcpp.c >testcpp.out 2>&1
if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
echo "Hooray, it works! I was beginning to wonder."
! cppstdin='cc -E'
cppminus='-';
else
! echo 'Nope...maybe "cc -P" will work...'
! cc -P <testcpp.c >testcpp.out 2>&1
if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
echo "Yup, that does."
! cppstdin='cc -P'
cppminus='';
else
! echo 'Nope...maybe "cc -P -" will work...'
! cc -P - <testcpp.c >testcpp.out 2>&1
if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
echo "Yup, that does."
! cppstdin='cc -P'
cppminus='-';
else
echo 'Hmm...perhaps you already told me...'
--- 958,1003 ----
#define XYZ xyz
ABC.XYZ
EOT
! echo 'Maybe "'"$cc"' -E" will work...'
! $cc -E <testcpp.c >testcpp.out 2>&1
if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
echo "Yup, it does."
! cppstdin="$cc -E"
cppminus='';
else
! echo 'Nope, maybe "'$cpp'" will work...'
! $cpp <testcpp.c >testcpp.out 2>&1
if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
echo "Yup, it does."
cppstdin="$cpp"
! cppminus='';
else
! echo 'No such luck...maybe "'$cpp' -" will work...'
! $cpp - <testcpp.c >testcpp.out 2>&1
if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
echo "It works!"
! cppstdin="$cpp"
! cppminus='-';
else
! echo 'Nixed again...maybe "'"$cc"' -E -" will work...'
! $cc -E - <testcpp.c >testcpp.out 2>&1
if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
echo "Hooray, it works! I was beginning to wonder."
! cppstdin="$cc -E"
cppminus='-';
else
! echo 'Nope...maybe "'"$cc"' -P" will work...'
! $cc -P <testcpp.c >testcpp.out 2>&1
if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
echo "Yup, that does."
! cppstdin="$cc -P"
cppminus='';
else
! echo 'Nope...maybe "'"$cc"' -P -" will work...'
! $cc -P - <testcpp.c >testcpp.out 2>&1
if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
echo "Yup, that does."
! cppstdin="$cc -P"
cppminus='-';
else
echo 'Hmm...perhaps you already told me...'
***************
*** 686,694 ****
echo "Hooray, you did! I was beginning to wonder."
else
echo 'Uh-uh. Time to get fancy...'
! echo 'Trying (cat >/tmp/$$.c; cc -E /tmp/$$.c; rm /tmp/$$.c)'
! cppstdin='(cat >/tmp/$$.c; cc -E /tmp/$$.c; rm /tmp/$$.c)'
cppminus='';
$cppstdin <testcpp.c >testcpp.out 2>&1
if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
echo "Eureka!."
--- 1009,1021 ----
echo "Hooray, you did! I was beginning to wonder."
else
echo 'Uh-uh. Time to get fancy...'
! cd ..
! echo 'Trying (cat >/tmp/$$.c; '"$cc"' -E /tmp/$$.c; rm /tmp/$$.c)'
! echo 'cat >/tmp/$$.c; '"$cc"' -E /tmp/$$.c; rm /tmp/$$.c' >cppstdin
! chmod 755 cppstdin
! cppstdin=`pwd`/cppstdin
cppminus='';
+ cd UU
$cppstdin <testcpp.c >testcpp.out 2>&1
if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
echo "Eureka!."
***************
*** 730,736 ****
cat >.ucbsprf.c <<'EOF'
main() { char buf[10]; exit((unsigned long)sprintf(buf,"%s","foo") > 10L); }
EOF
! if cc .ucbsprf.c -o .ucbsprf >/dev/null 2>&1 && .ucbsprf; then
echo "Your sprintf() returns (int)."
d_charsprf="$undef"
else
--- 1057,1063 ----
cat >.ucbsprf.c <<'EOF'
main() { char buf[10]; exit((unsigned long)sprintf(buf,"%s","foo") > 10L); }
EOF
! if $cc .ucbsprf.c -o .ucbsprf >/dev/null 2>&1 && .ucbsprf; then
echo "Your sprintf() returns (int)."
d_charsprf="$undef"
else
***************
*** 958,964 ****
foo = bar;
}
EOCP
! if cc -c try.c >/dev/null 2>&1 ; then
d_strctcpy="$define"
echo "Yup, it can."
else
--- 1285,1291 ----
foo = bar;
}
EOCP
! if $cc -c try.c >/dev/null 2>&1 ; then
d_strctcpy="$define"
echo "Yup, it can."
else
***************
*** 1040,1062 ****
exit(0);
}
EOCP
! if cc -S -DTRY=7 try.c >.out 2>&1 ; then
! voidflags=7
! echo "It appears to support void fully."
if $contains warning .out >/dev/null 2>&1; then
echo "However, you might get some warnings that look like this:"
$cat .out
fi
else
! echo "Hmm, you compiler has some difficulty with void. Checking further..."
! if cc -S -DTRY=1 try.c >/dev/null 2>&1 ; then
echo "It supports 1..."
! if cc -S -DTRY=3 try.c >/dev/null 2>&1 ; then
voidflags=3
echo "And it supports 2 but not 4."
else
echo "It doesn't support 2..."
! if cc -S -DTRY=3 try.c >/dev/null 2>&1 ; then
voidflags=5
echo "But it supports 4."
else
--- 1367,1389 ----
exit(0);
}
EOCP
! if $cc -S -DTRY=$defvoidused try.c >.out 2>&1 ; then
! voidflags=$defvoidused
! echo "It appears to support void."
if $contains warning .out >/dev/null 2>&1; then
echo "However, you might get some warnings that look like this:"
$cat .out
fi
else
! echo "Hmm, your compiler has some difficulty with void. Checking further..."
! if $cc -S -DTRY=1 try.c >/dev/null 2>&1 ; then
echo "It supports 1..."
! if $cc -S -DTRY=3 try.c >/dev/null 2>&1 ; then
voidflags=3
echo "And it supports 2 but not 4."
else
echo "It doesn't support 2..."
! if $cc -S -DTRY=5 try.c >/dev/null 2>&1 ; then
voidflags=5
echo "But it supports 4."
else
***************
*** 1100,1143 ****
. myread
gidtype="$ans"
- : set up shell script to do ~ expansion
- cat >filexp <<EOSS
- $startsh
- : expand filename
- case "\$1" in
- ~/*|~)
- echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
- ;;
- ~*)
- if $test -f /bin/csh; then
- /bin/csh -f -c "glob \$1"
- echo ""
- else
- name=\`$expr x\$1 : '..\([^/]*\)'\`
- dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
- if $test ! -d "\$dir"; then
- me=\`basename \$0\`
- echo "\$me: can't locate home directory for: \$name" >&2
- exit 1
- fi
- case "\$1" in
- */*)
- echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
- ;;
- *)
- echo \$dir
- ;;
- esac
- fi
- ;;
- *)
- echo \$1
- ;;
- esac
- EOSS
- chmod +x filexp
- $eunicefix filexp
-
: determine where private executables go
case "$privlib" in
'')
--- 1427,1432 ----
***************
*** 1179,1185 ****
printf("%d\n",i);
}
EOCP
! if cc try.c -o try >/dev/null 2>&1 ; then
dflt=`try`
else
dflt='?'
--- 1468,1474 ----
printf("%d\n",i);
}
EOCP
! if $cc try.c -o try >/dev/null 2>&1 ; then
dflt=`try`
else
dflt='?'
***************
*** 1263,1590 ****
fi
done
- : determine where manual pages go
- case "$mansrc" in
- '')
- dflt=`loc . /usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1 /usr/man/u_man/man1 /usr/man/man1`
- ;;
- *) dflt="$mansrc"
- ;;
- esac
- cont=true
- while $test "$cont" ; do
- echo " "
- rp="Where do the manual pages (source) go? [$dflt]"
- $echo $n "$rp $c"
- . myread
- mansrc=`filexp "$ans"`
- if test -d $mansrc; then
- cont=''
- else
- dflt=n
- rp="Directory $mansrc doesn't exist. Use that name anyway? [$dflt]"
- $echo $n "$rp $c"
- . myread
- dflt=''
- case "$ans" in
- y*) cont='';;
- esac
- fi
- done
- case "$mansrc" in
- *l)
- manext=l
- ;;
- *n)
- manext=n
- ;;
- *C)
- manext=C
- ;;
- *)
- manext=1
- ;;
- esac
-
- : get C preprocessor symbols handy
- echo " "
- echo $attrlist | $tr '[ - ]' '[\012-\012]' >Cppsym.know
- $cat <<EOSS >Cppsym
- $startsh
- case "\$1" in
- -l) list=true
- shift
- ;;
- esac
- unknown=''
- case "\$list\$#" in
- 1|2)
- for sym do
- if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
- exit 0
- elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
- :
- else
- unknown="\$unknown \$sym"
- fi
- done
- set X \$unknown
- shift
- ;;
- esac
- case \$# in
- 0) exit 1;;
- esac
- echo \$* | $tr '[ - ]' '[\012-\012]' | $sed -e 's/\(.*\)/\\
- #ifdef \1\\
- exit 0; _ _ _ _\1\\ \1\\
- #endif\\
- /' >/tmp/Cppsym\$\$
- echo exit 1 >>/tmp/Cppsym\$\$
- $cppstdin $cppminus </tmp/Cppsym\$\$ >/tmp/Cppsym2\$\$
- case "\$list" in
- true) awk 'NF > 5 {print substr(\$6,2,100)}' </tmp/Cppsym2\$\$ ;;
- *)
- sh /tmp/Cppsym2\$\$
- status=\$?
- ;;
- esac
- $rm -f /tmp/Cppsym\$\$ /tmp/Cppsym2\$\$
- exit \$status
- EOSS
- chmod +x Cppsym
- $eunicefix Cppsym
- echo "Your C preprocessor defines the following symbols:"
- Cppsym -l $attrlist >Cppsym.true
- cat Cppsym.true
- rmlist="$rmlist Cppsym Cppsym.know Cppsym.true"
-
- : see what memory models we can support
- case "$models" in
- '')
- if Cppsym pdp11; then
- dflt='unsplit split'
- else
- ans=`loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
- case "$ans" in
- X) dflt='none';;
- *) if $test -d /lib/small || $test -d /usr/lib/small; then
- dflt='small'
- else
- dflt=''
- fi
- if $test -d /lib/medium || $test -d /usr/lib/medium; then
- dflt="$dflt medium"
- fi
- if $test -d /lib/large || $test -d /usr/lib/large; then
- dflt="$dflt large"
- fi
- if $test -d /lib/huge || $test -d /usr/lib/huge; then
- dflt="$dflt huge"
- fi
- esac
- fi
- ;;
- *) dflt="$models" ;;
- esac
- $cat <<EOM
-
- Some systems have different model sizes. On most systems they are called
- small, medium, large, and huge. On the PDP11 they are called unsplit and
- split. If your system doesn't support different memory models, say "none".
- If you wish to force everything to one memory model, say "none" here and
- put the appropriate flags later when it asks you for other cc and ld flags.
- Venix systems may wish to put "none" and let the compiler figure things out.
- (In the following question multiple model names should be space separated.)
-
- EOM
- rp="Which models are supported? [$dflt]"
- $echo $n "$rp $c"
- . myread
- models="$ans"
-
- case "$models" in
- none)
- small=''
- medium=''
- large=''
- huge=''
- unsplit=''
- split=''
- ;;
- *split)
- case "$split" in
- '')
- if $contains '\-i' $mansrc/ld.1 >/dev/null 2>&1 || \
- $contains '\-i' $mansrc/cc.1 >/dev/null 2>&1; then
- dflt='-i'
- else
- dflt='none'
- fi
- ;;
- *) dflt="$split";;
- esac
- rp="What flag indicates separate I and D space? [$dflt]"
- $echo $n "$rp $c"
- . myread
- case "$ans" in
- none) ans='';;
- esac
- split="$ans"
- unsplit=''
- ;;
- *large*|*small*|*medium*|*huge*)
- case "$model" in
- *large*)
- case "$large" in
- '') dflt='-Ml';;
- *) dflt="$large";;
- esac
- rp="What flag indicates large model? [$dflt]"
- $echo $n "$rp $c"
- . myread
- case "$ans" in
- none) ans='';
- esac
- large="$ans"
- ;;
- *) large='';;
- esac
- case "$model" in
- *huge*)
- case "$huge" in
- '') dflt='-Mh';;
- *) dflt="$huge";;
- esac
- rp="What flag indicates huge model? [$dflt]"
- $echo $n "$rp $c"
- . myread
- case "$ans" in
- none) ans='';
- esac
- huge="$ans"
- ;;
- *) huge="$large";;
- esac
- case "$model" in
- *medium*)
- case "$medium" in
- '') dflt='-Mm';;
- *) dflt="$medium";;
- esac
- rp="What flag indicates medium model? [$dflt]"
- $echo $n "$rp $c"
- . myread
- case "$ans" in
- none) ans='';
- esac
- medium="$ans"
- ;;
- *) medium="$large";;
- esac
- case "$model" in
- *small*)
- case "$small" in
- '') dflt='none';;
- *) dflt="$small";;
- esac
- rp="What flag indicates small model? [$dflt]"
- $echo $n "$rp $c"
- . myread
- case "$ans" in
- none) ans='';
- esac
- small="$ans"
- ;;
- *) small='';;
- esac
- ;;
- *)
- echo "Unrecognized memory models--you may have to edit Makefile.SH"
- ;;
- esac
-
- case "$ccflags" in
- '') dflt='none';;
- *) dflt="$ccflags";;
- esac
- echo " "
- rp="Any additional cc flags? [$dflt]"
- $echo $n "$rp $c"
- . myread
- case "$ans" in
- none) ans='';
- esac
- ccflags="$ans"
-
- case "$ldflags" in
- '') if venix; then
- dflt='-i -z'
- else
- dflt='none'
- fi
- ;;
- *) dflt="$ldflags";;
- esac
- echo " "
- rp="Any additional ld flags? [$dflt]"
- $echo $n "$rp $c"
- . myread
- case "$ans" in
- none) ans='';
- esac
- ldflags="$ans"
-
- : see if we need a special compiler
- echo " "
- if usg; then
- case "$cc" in
- '')
- case "$Mcc" in
- /*) dflt='Mcc'
- ;;
- *)
- case "$large" in
- -M*)
- dflt='cc'
- ;;
- *)
- if $contains '\-M' $mansrc/cc.1 >/dev/null 2>&1 ; then
- dflt='cc -M'
- else
- dflt='cc'
- fi
- ;;
- esac
- ;;
- esac
- ;;
- *) dflt="$cc";;
- esac
- $cat <<'EOM'
-
- On some systems the default C compiler will not resolve multiple global
- references that happen to have the same name. On some such systems the
- "Mcc" command may be used to force these to be resolved. On other systems
- a "cc -M" command is required. (Note that the -M flag on other systems
- indicates a memory model to use!) If you have the Gnu C compiler, you
- might wish to use that instead. What command will force resolution on
- EOM
- $echo $n "this system? [$dflt] $c"
- rp="Command to resolve multiple refs? [$dflt]"
- . myread
- cc="$ans"
- else
- case "$cc" in
- '') dflt=cc;;
- *) dflt="$cc";;
- esac
- rp="Use which C compiler? [$dflt]"
- $echo $n "$rp $c"
- . myread
- cc="$ans"
- fi
-
: see if we should include -lnm
echo " "
if $test -r /usr/lib/libnm.a || $test -r /usr/local/lib/libnm.a ; then
--- 1552,1557 ----
***************
*** 1672,1681 ****
mailx='$mailx'
mail='$mail'
cpp='$cpp'
Log='$Log'
Header='$Header'
bin='$bin'
- cc='$cc'
contains='$contains'
cppstdin='$cppstdin'
cppminus='$cppminus'
--- 1639,1648 ----
mailx='$mailx'
mail='$mail'
cpp='$cpp'
+ perl='$perl'
Log='$Log'
Header='$Header'
bin='$bin'
contains='$contains'
cppstdin='$cppstdin'
cppminus='$cppminus'
***************
*** 1718,1723 ****
--- 1685,1691 ----
huge='$huge'
ccflags='$ccflags'
ldflags='$ldflags'
+ cc='$cc'
n='$n'
c='$c'
package='$package'
Index: x2p/a2p.y
Prereq: 2.0.1.2
*** x2p/a2p.y.old Fri Aug 5 01:32:21 1988
--- x2p/a2p.y Fri Aug 5 01:32:23 1988
***************
*** 1,7 ****
%{
! /* $Header: a2p.y,v 2.0.1.2 88/08/03 22:49:27 root Exp $
*
* $Log: a2p.y,v $
* Revision 2.0.1.2 88/08/03 22:49:27 root
* patch11: in a2p, newlines weren't allowed following comma
*
--- 1,10 ----
%{
! /* $Header: a2p.y,v 2.0.1.3 88/08/05 01:30:15 root Exp $
*
* $Log: a2p.y,v $
+ * Revision 2.0.1.3 88/08/05 01:30:15 root
+ * patch13: a2p was treating strings and numbers as variables
+ *
* Revision 2.0.1.2 88/08/03 22:49:27 root
* patch11: in a2p, newlines weren't allowed following comma
*
***************
*** 158,163 ****
--- 161,170 ----
term : variable
{ $$ = $1; }
+ | NUMBER
+ { $$ = oper1(ONUM,$1); }
+ | STRING
+ { $$ = oper1(OSTR,$1); }
| term '+' term
{ $$ = oper2(OADD,$1,$3); }
| term '-' term
***************
*** 248,258 ****
{ $$ = oper3(OGSUB,oper1(OREGEX,$3),$5,$7); }
;
! variable: NUMBER
! { $$ = oper1(ONUM,$1); }
! | STRING
! { $$ = oper1(OSTR,$1); }
! | VAR
{ $$ = oper1(OVAR,$1); }
| VAR '[' expr_list ']'
{ $$ = oper2(OVAR,$1,$3); }
--- 255,261 ----
{ $$ = oper3(OGSUB,oper1(OREGEX,$3),$5,$7); }
;
! variable: VAR
{ $$ = oper1(OVAR,$1); }
| VAR '[' expr_list ']'
{ $$ = oper2(OVAR,$1,$3); }
Index: config.h.SH
*** config.h.SH.old Fri Aug 5 01:31:39 1988
--- config.h.SH Fri Aug 5 01:31:40 1988
***************
*** 250,255 ****
--- 250,256 ----
* The package designer should define VOIDUSED to indicate the requirements
* of the package. This can be done either by #defining VOIDUSED before
* including config.h, or by defining defvoidused in Myinit.U. If the
+ * latter approach is taken, only those flags will be tested. If the
* level of void support necessary is not present, defines void to int.
*/
#ifndef VOIDUSED
Index: form.c
Prereq: 2.0.1.1
*** form.c.old Fri Aug 5 01:31:44 1988
--- form.c Fri Aug 5 01:31:45 1988
***************
*** 1,6 ****
! /* $Header: form.c,v 2.0.1.1 88/07/12 17:16:52 root Exp $
*
* $Log: form.c,v $
* Revision 2.0.1.1 88/07/12 17:16:52 root
* patch6: removed useless assign
*
--- 1,9 ----
! /* $Header: form.c,v 2.0.1.2 88/08/05 01:26:20 root Exp $
*
* $Log: form.c,v $
+ * Revision 2.0.1.2 88/08/05 01:26:20 root
+ * patch13: no form feed first
+ *
* Revision 2.0.1.1 88/07/12 17:16:52 root
* patch6: removed useless assign
*
***************
*** 255,261 ****
}
stio->top_stab = topstab;
}
! if (stio->lines_left >= 0)
putc('\f',ofp);
stio->lines_left = stio->page_len;
stio->page++;
--- 258,264 ----
}
stio->top_stab = topstab;
}
! if (stio->lines_left >= 0 && stio->page > 0)
putc('\f',ofp);
stio->lines_left = stio->page_len;
stio->page++;
Index: perl.man.2
Prereq: 2.0.1.4
*** perl.man.2.old Fri Aug 5 01:31:53 1988
--- perl.man.2 Fri Aug 5 01:31:57 1988
***************
*** 1,7 ****
''' Beginning of part 2
! ''' $Header: perl.man.2,v 2.0.1.4 88/08/03 22:22:48 root Exp $
'''
''' $Log: perl.man.2,v $
''' Revision 2.0.1.4 88/08/03 22:22:48 root
''' patch11: random typos and clarifications
'''
--- 1,10 ----
''' Beginning of part 2
! ''' $Header: perl.man.2,v 2.0.1.5 88/08/05 01:27:31 root Exp $
'''
''' $Log: perl.man.2,v $
+ ''' Revision 2.0.1.5 88/08/05 01:27:31 root
+ ''' patch13: clarified goto problems
+ '''
''' Revision 2.0.1.4 88/08/03 22:22:48 root
''' patch11: random typos and clarifications
'''
***************
*** 33,40 ****
I may change its semantics at any time, consistent with support for translated
.I sed
scripts.
! Using it to exit loops bypasses the loop exit code and can cause core dumps
! after a while.
Use it at your own risk.
Better yet, don't use it at all.
.Ip "hex(EXPR)" 8 2
--- 36,44 ----
I may change its semantics at any time, consistent with support for translated
.I sed
scripts.
! Using it to exit loops bypasses the loop exit code with the result that
! .I foreach
! loops will not restart correctly.
Use it at your own risk.
Better yet, don't use it at all.
.Ip "hex(EXPR)" 8 2
Index: perly.c
Prereq: 2.0.1.5
*** perly.c.old Fri Aug 5 01:32:08 1988
--- perly.c Fri Aug 5 01:32:12 1988
***************
*** 1,6 ****
! char rcsid[] = "$Header: perly.c,v 2.0.1.5 88/08/03 22:34:43 root Exp $";
/*
* $Log: perly.c,v $
* Revision 2.0.1.5 88/08/03 22:34:43 root
* patch11:
* patch11:
--- 1,10 ----
! char rcsid[] = "$Header: perly.c,v 2.0.1.6 88/08/05 01:29:43 root Exp $";
/*
* $Log: perly.c,v $
+ * Revision 2.0.1.6 88/08/05 01:29:43 root
+ * patch13: fixed loop stack overflow on goto
+ * patch13: fixed recursive subroutine storage management
+ *
* Revision 2.0.1.5 88/08/03 22:34:43 root
* patch11:
* patch11:
***************
*** 442,448 ****
savestack = anew(Nullstab); /* for saving non-local values */
! setjmp(top_env); /* sets goto_targ on longjump */
#ifdef DEBUGGING
if (debug & 1024)
--- 446,453 ----
savestack = anew(Nullstab); /* for saving non-local values */
! if (setjmp(top_env)) /* sets goto_targ on longjump */
! loop_ptr = 0; /* start label stack again */
#ifdef DEBUGGING
if (debug & 1024)
***************
*** 2034,2040 ****
if (cmd->c_spat)
spat_tosave(cmd->c_spat);
if (cmd->c_expr)
! arg_tosave(cmd->c_expr);
switch (cmd->c_type) {
case C_WHILE:
case C_BLOCK:
--- 2039,2045 ----
if (cmd->c_spat)
spat_tosave(cmd->c_spat);
if (cmd->c_expr)
! arg_tosave(cmd->c_expr,FALSE);
switch (cmd->c_type) {
case C_WHILE:
case C_BLOCK:
***************
*** 2046,2052 ****
break;
case C_EXPR:
if (cmd->ucmd.acmd.ac_expr)
! arg_tosave(cmd->ucmd.acmd.ac_expr);
break;
}
cmd = cmd->c_next;
--- 2051,2057 ----
break;
case C_EXPR:
if (cmd->ucmd.acmd.ac_expr)
! arg_tosave(cmd->ucmd.acmd.ac_expr,FALSE);
break;
}
cmd = cmd->c_next;
***************
*** 2056,2074 ****
}
static int
! arg_tosave(arg)
register ARG *arg;
{
register int i;
int saving = FALSE;
! for (i = 1; i <= arg->arg_len; i++) {
switch (arg[i].arg_type) {
case A_NULL:
break;
case A_LEXPR:
case A_EXPR:
! saving |= arg_tosave(arg[i].arg_ptr.arg_arg);
break;
case A_CMD:
cmd_tosave(arg[i].arg_ptr.arg_cmd);
--- 2061,2080 ----
}
static int
! arg_tosave(arg,saveme)
register ARG *arg;
+ int saveme;
{
register int i;
int saving = FALSE;
! for (i = arg->arg_len; i >= 1; i--) {
switch (arg[i].arg_type) {
case A_NULL:
break;
case A_LEXPR:
case A_EXPR:
! saving |= arg_tosave(arg[i].arg_ptr.arg_arg,saving);
break;
case A_CMD:
cmd_tosave(arg[i].arg_ptr.arg_cmd);
***************
*** 2100,2106 ****
saving = TRUE;
break;
}
! if (saving)
apush(tosave,arg->arg_ptr.arg_str);
return saving;
}
--- 2106,2112 ----
saving = TRUE;
break;
}
! if (saveme)
apush(tosave,arg->arg_ptr.arg_str);
return saving;
}
***************
*** 2112,2118 ****
int saving = FALSE;
if (spat->spat_runtime)
! saving |= arg_tosave(spat->spat_runtime);
if (spat->spat_repl) {
saving |= arg_tosave(spat->spat_repl);
}
--- 2118,2124 ----
int saving = FALSE;
if (spat->spat_runtime)
! saving |= arg_tosave(spat->spat_runtime,FALSE);
if (spat->spat_repl) {
saving |= arg_tosave(spat->spat_repl);
}
Index: x2p/walk.c
Prereq: 2.0.1.3
*** x2p/walk.c.old Fri Aug 5 01:32:31 1988
--- x2p/walk.c Fri Aug 5 01:32:34 1988
***************
*** 1,6 ****
! /* $Header: walk.c,v 2.0.1.3 88/08/03 22:54:39 root Exp $
*
* $Log: walk.c,v $
* Revision 2.0.1.3 88/08/03 22:54:39 root
* patch11: a2p was being really stupid about comparisons with literal strings
* patch11: a2p tried to make a local declaration on a null argument list
--- 1,9 ----
! /* $Header: walk.c,v 2.0.1.4 88/08/05 01:31:14 root Exp $
*
* $Log: walk.c,v $
+ * Revision 2.0.1.4 88/08/05 01:31:14 root
+ * patch13: dumb typo in last patch
+ *
* Revision 2.0.1.3 88/08/03 22:54:39 root
* patch11: a2p was being really stupid about comparisons with literal strings
* patch11: a2p tried to make a local declaration on a null argument list
***************
*** 352,358 ****
tmp2str = walk(1,level,ops[node+3].ival,&numarg);
numeric |= numarg;
if (!numeric ||
! (!numarg && (*tmp2str->str_cur == '"' || *tmp2str->str_cur == '\''))) {
t = tmpstr->str_ptr;
if (strEQ(t,"=="))
str_set(tmpstr,"eq");
--- 355,361 ----
tmp2str = walk(1,level,ops[node+3].ival,&numarg);
numeric |= numarg;
if (!numeric ||
! (!numarg && (*tmp2str->str_ptr == '"' || *tmp2str->str_ptr == '\''))) {
t = tmpstr->str_ptr;
if (strEQ(t,"=="))
str_set(tmpstr,"eq");
More information about the Comp.sources.bugs
mailing list