Path: utzoo!utgpu!attcan!uunet!husc6!mailrus!ncar!ames!elroy!jpl-devvax!lroot From: lroot@jpl-devvax.JPL.NASA.GOV (The Superuser) Newsgroups: comp.sources.bugs Subject: perl 2.0 patch #13 Summary: This is an official patch for perl 2.0. Please apply it. Message-ID: <2587@jpl-devvax.JPL.NASA.GOV> Date: 5 Aug 88 08:43:57 GMT Organization: Jet Propulsion Laboratory, Pasadena, CA Lines: 1506 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 #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 <&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 </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.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.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.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.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.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.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.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.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.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.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.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.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.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.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 <&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 <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/Cppsym2\$\$ - case "\$list" in - true) awk 'NF > 5 {print substr(\$6,2,100)}' 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 </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");