lwall@netlabs.com (Larry Wall) (06/20/91)
Submitted-by: Larry Wall <lwall@netlabs.com> Posting-number: Volume 20, Issue 56 Archive-name: perl/patch04 Patch-To: perl: Volume 18, Issue 19-54 System: perl version 4.0 Patch #: 4 Priority: High Subject: many, many itty-bitty portability fixes Subject: there's now a separate doSH script Subject: new copyright notice Subject: new files Subject: cflags now emits entire cc command except for the filename Subject: alternate make programs are now semi-supported Subject: uperl.o no longer tries to link in libraries prematurely Subject: installperl now installs x2p stuff too Subject: length($`), length($&), length($') now optimized to avoid string copy Subject: cflags.SH now spits out cflags for execution Subject: Configure can now propagate arbitrary variables from old config.sh Subject: cflags can now heed config variables on a file by file basis Subject: made some allowances for "semi-standard" C Subject: added global modifier for pattern matches Subject: // wouldn't use previous pattern if it started with a null character Subject: //o and s///o now optimize themselves fully at runtime Subject: undef @array disabled "@array" interpolation Subject: chop("") was returning "\0" rather than "" Subject: vector logical operations &, | and ^ sometimes returned null string Subject: syscall couldn't pass numbers with most significant bit set on sparcs Subject: system fd's are now treated specially Subject: added $^F variable to specify maximum system fd, default 2 Subject: character special files now opened with bidirectional stdio buffers Subject: taintchecks could improperly modify parent in vfork() Subject: $` was busted inside s/// Subject: caller($arg) didn't work except under debugger Subject: perl-mode.el now does better with formats Subject: assignment wasn't correctly de-tainting the assigned variable. Subject: default top-of-form format is now FILEHANDLE_TOP Subject: added $^P variable to control calling of perldb routines Subject: debugger sometimes listed wrong number of lines for a statement Subject: Makefile is no longer self-modifying code under makedepend Subject: debugger lost track of lines in eval Subject: changed old $^P to $^X Subject: /(x+) \1/ incorrectly optimized to not match "xxx xx" Subject: $^D |= 1024 now does syntax tree dump at run-time Subject: taint check on undefined string could cause core dump Subject: t/TEST now tells you number of tests executed Subject: t/op/stat.t no longer depends on certain devices being in /dev Subject: index() could blow up searching for null string Subject: exec would close files even if you cleared close-on-exec flag Subject: find2perl now makes use of find.pl and finddepth.pl Subject: find2perl now optimizes -exec rm -f {} to an unlink Subject: s2p now handles embedded newlines better and optimizes common idioms Subject: a2p didn't correctly implement -n switch Description: Random patches, mostly bugs and portability stuff. //g is the only major new feature. Additionally, there is now an alternate license you can distribute Perl under. 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: *** DO NOTHING--INSTALL ALL PATCHES UP THROUGH #09 FIRST *** 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@netlabs.com If you send a mail message of the following form it will greatly speed processing: Subject: Command @SH mailpatch PATH perl 4.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. Index: patchlevel.h Prereq: 3 1c1 < #define PATCHLEVEL 3 --- > #define PATCHLEVEL 4 Index: hints/3b1.sh *** hints/3b1.sh.old Fri Jun 7 12:24:17 1991 --- hints/3b1.sh Fri Jun 7 12:24:18 1991 *************** *** 0 **** --- 1,4 ---- + d_voidsig='undef' + d_tosignal='int'; + echo "If you're going to use shared libraries, don't include -lmalloc, and" + echo "change cc to '/bin/ccc' when editing config.sh at the end." Index: Artistic *** Artistic.old Fri Jun 7 12:22:09 1991 --- Artistic Fri Jun 7 12:22:10 1991 *************** *** 0 **** --- 1,117 ---- + + + + + The "Artistic License" + + Preamble + + The intent of this document is to state the conditions under which a + Package may be copied, such that the Copyright Holder maintains some + semblance of artistic control over the development of the package, + while giving the users of the package the right to use and distribute + the Package in a more-or-less customary fashion, plus the right to make + reasonable modifications. + + Definitions: + + "Package" refers to the collection of files distributed by the + Copyright Holder, and derivatives of that collection of files + created through textual modification. + + "Standard Version" refers to such a Package if it has not been + modified, or has been modified in accordance with the wishes + of the Copyright Holder. + + "Copyright Holder" is whoever is named in the copyright or + copyrights for the package. + + "You" is you, if you're thinking about copying or distributing + this Package. + + "Reasonable copying fee" is whatever you can justify on the + basis of media cost, duplication charges, time of people involved, + and so on. (You will not be required to justify it to the + Copyright Holder, but only to the computing community at large + as a market that must bear the fee.) + + "Freely Available" means that no fee is charged for the item + itself, though there may be fees involved in handling the item. + It also means that recipients of the item may redistribute it + under the same conditions they received it. + + 1. You may make and give away verbatim copies of the source form of the + Standard Version of this Package without restriction, provided that you + duplicate all of the original copyright notices and associated disclaimers. + + 2. You may apply bug fixes, portability fixes and other modifications + derived from the Public Domain or from the Copyright Holder. A Package + modified in such a way shall still be considered the Standard Version. + + 3. You may otherwise modify your copy of this Package in any way, provided + that you insert a prominent notice in each changed file stating how and + when you changed that file, and provided that you do at least ONE of the + following: + + a) place your modifications in the Public Domain or otherwise make them + Freely Available, such as by posting said modifications to Usenet or + an equivalent medium, or placing the modifications on a major archive + site such as uunet.uu.net, or by allowing the Copyright Holder to include + your modifications in the Standard Version of the Package. + + b) use the modified Package only within your corporation or organization. + + c) rename any non-standard executables so the names do not conflict + with standard executables, which must also be provided, and provide + a separate manual page for each non-standard executable that clearly + documents how it differs from the Standard Version. + + d) make other distribution arrangements with the Copyright Holder. + + 4. You may distribute the programs of this Package in object code or + executable form, provided that you do at least ONE of the following: + + a) distribute a Standard Version of the executables and library files, + together with instructions (in the manual page or equivalent) on where + to get the Standard Version. + + b) accompany the distribution with the machine-readable source of + the Package with your modifications. + + c) accompany any non-standard executables with their corresponding + Standard Version executables, giving the non-standard executables + non-standard names, and clearly documenting the differences in manual + pages (or equivalent), together with instructions on where to get + the Standard Version. + + d) make other distribution arrangements with the Copyright Holder. + + 5. You may charge a reasonable copying fee for any distribution of this + Package. You may charge any fee you choose for support of this Package. + You may not charge a fee for this Package itself. However, + you may distribute this Package in aggregate with other (possibly + commercial) programs as part of a larger (possibly commercial) software + distribution provided that you do not advertise this Package as a + product of your own. + + 6. The scripts and library files supplied as input to or produced as + output from the programs of this Package do not automatically fall + under the copyright of this Package, but belong to whomever generated + them, and may be sold commercially, and may be aggregated with this + Package. + + 7. C subroutines supplied by you and linked into this Package in order + to emulate subroutines and variables of the language defined by this + Package shall not be considered part of this Package, but are the + equivalent of input as in Paragraph 6, provided these subroutines do + not change the language in any way that would cause it to fail the + regression tests for the language. + + 8. The name of the Copyright Holder may not be used to endorse or promote + products derived from this software without specific prior written permission. + + 9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + The End Index: Configure Prereq: 4.0.1.1 *** Configure.old Fri Jun 7 12:22:15 1991 --- Configure Fri Jun 7 12:22:17 1991 *************** *** 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.) # ! # $RCSfile: Configure,v $$Revision: 4.0.1.1 $$Date: 91/04/11 17:26:42 $ # # 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.) # ! # $RCSfile: Configure,v $$Revision: 4.0.1.2 $$Date: 91/06/07 10:09:34 $ # # Yes, you may rip this off to use in other distribution packages. # (Note: this Configure script was generated automatically. Rather than *************** *** 189,194 **** --- 189,195 ---- d_setruid='' d_shm='' d_shmat='' + d_voidshmat='' d_shmctl='' d_shmdt='' d_shmget='' *************** *** 263,268 **** --- 264,270 ---- cppflags='' ldflags='' cc='' + nativegcc='' libs='' n='' c='' *************** *** 269,274 **** --- 271,277 ---- package='' randbits='' scriptdir='' + installscr='' sig_name='' spitshell='' shsharp='' *************** *** 338,345 **** d_ndir=ndir voidwant=1 voidwant=7 ! libswanted="net_s net nsl_s nsl socket nm ndir ndbm dbm malloc sun m bsd BSD x c_s posix" ! inclwanted='/usr/include /usr/netinclude /usr/include/sun /usr/include/bsd /usr/include/lan' : Now test for existence of everything in MANIFEST --- 341,348 ---- d_ndir=ndir voidwant=1 voidwant=7 ! libswanted="c_s net_s net nsl_s nsl socket nm ndir ndbm dbm malloc sun m bsd BSD x posix ucb" ! inclwanted='/usr/include /usr/netinclude /usr/include/sun /usr/include/bsd /usr/include/lan /usr/ucbinclude' : Now test for existence of everything in MANIFEST *************** *** 712,725 **** hint=default if test -f ../config.sh; then echo " " ! eval `grep lastuname ../config.sh` ! uname=`(uname -a || hostname) 2>&1` ! if test "X$uname" = "X$lastuname"; then dflt=y else dflt=n fi ! lastuname="$uname" rp="I see a config.sh file. Did Configure make it on THIS system? [$dflt]" echo $n "$rp $c" . myread --- 715,728 ---- hint=default if test -f ../config.sh; then echo " " ! eval "`grep lastuname ../config.sh`" ! tmp=`(uname -a) 2>&1` ! if test "X$tmp" = "X$lastuname"; then dflt=y else dflt=n fi ! lastuname="$tmp" rp="I see a config.sh file. Did Configure make it on THIS system? [$dflt]" echo $n "$rp $c" . myread *************** *** 746,751 **** --- 749,755 ---- test -f /dynix && dflt="$dflt dynix" test -f /dnix && dflt="$dflt dnix" test -f /bin/mips && /bin/mips && dflt="$dflt mips" + test -d /NextApps && test -f /usr/adm/software_version && dflt="$dflt next" if test -f /bin/uname || test -f /usr/bin/uname; then set `uname -a | tr '[A-Z]' '[a-z]'` *************** *** 798,804 **** case "$dflt" in '') dflt=none;; esac ! echo '(You may give one or more space-separated answers, or "none" if appropriate.)' rp="Which of these apply, if any? [$dflt]" echo $n "$rp $c" . myread --- 802,809 ---- case "$dflt" in '') dflt=none;; esac ! echo '(You may give one or more space-separated answers, or "none" if appropriate.' ! echo 'If your OS version has no hints, do not give a wrong version--say "none".)' rp="Which of these apply, if any? [$dflt]" echo $n "$rp $c" . myread *************** *** 805,810 **** --- 810,816 ---- for file in $ans; do if test -f ../hints/$file.sh; then . ../hints/$file.sh + cat ../hints/$file.sh >>../config.sh hint=recommended fi done *************** *** 1238,1244 **** cc="$ans" fi case "$cc" in ! gcc*) cpp=`./loc gcc-cpp $cpp $pth`;; esac : determine optimize, if desired, or use for debug flag also --- 1244,1268 ---- cc="$ans" fi case "$cc" in ! gcc*) cpp=`./loc gcc-cpp $cpp $pth` ! case "$nativegcc" in ! '') case "$ccflags" in ! *-fpcc-struct-return*) dflt=n;; ! *) dflt=y;; ! esac ! ;; ! undef) dflt=n;; ! *) dflt=y;; ! esac ! echo " " ! rp="Are your system (especially dbm) libraries compiled with gcc? [$dflt]" ! $echo $n "$rp $c" ! . myread ! case "$ans" in ! n*) nativegcc="$undef"; gccflags='-fpcc-struct-return';; ! *) nativegcc="$define"; gccflags='';; ! esac ! ;; esac : determine optimize, if desired, or use for debug flag also *************** *** 1270,1280 **** case "$ccflags" in '') case "$cc" in ! *gcc*) dflt='-fpcc-struct-return';; *) dflt='';; esac ;; ! *) dflt="$ccflags";; esac for thisincl in $inclwanted; do if test -d $thisincl; then --- 1294,1309 ---- case "$ccflags" in '') case "$cc" in ! *gcc*) dflt="$gccflags";; *) dflt='';; esac ;; ! *-fpcc-struct-return*) dflt="$ccflags";; ! *) case "$cc" in ! *gcc*) dflt="$ccflags $gccflags";; ! *) dflt="$ccflags";; ! esac ! ;; esac for thisincl in $inclwanted; do if test -d $thisincl; then *************** *** 1336,1342 **** cppflags='' for flag do case $flag in ! -D*|-I*|-traditional|-ansi|-nostdinc) cppflags="$cppflags $flag";; esac done case "$cppflags" in --- 1365,1371 ---- cppflags='' for flag do case $flag in ! -D*|-U*|-I*|-traditional|-ansi|-nostdinc) cppflags="$cppflags $flag";; esac done case "$cppflags" in *************** *** 1524,1529 **** --- 1553,1559 ---- case "$installbin" in '') dflt=`echo $bin | sed 's#^/afs/#/afs/.#'` + test -d $dflt || dflt="$bin" ;; *) dflt="$installbin" ;; *************** *** 1611,1616 **** --- 1641,1648 ---- $cat >try.c <<'EOCP' #include <signal.h> + blech() { exit(3); } + main() { double f = -123; *************** *** 1619,1625 **** unsigned short ashort; int result = 0; ! signal(SIGFPE, SIG_IGN); along = (unsigned long)f; aint = (unsigned int)f; ashort = (unsigned short)f; --- 1651,1657 ---- unsigned short ashort; int result = 0; ! signal(SIGFPE, blech); along = (unsigned long)f; aint = (unsigned int)f; ashort = (unsigned short)f; *************** *** 1674,1776 **** #define XYZ xyz ABC.XYZ EOT ! echo 'Maybe "'"$cc"' -E" will work...' ! $cc -E <testcpp.c >testcpp.out 2>&1 ! : try to force gcc preprocessor if that is the compiler they are using ! case $? in ! 0) cppstdin="$cc -E";; ! *) case "$cc" in ! *gcc*) ! 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 ! ;; ! esac ! ;; ! esac ! if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then echo "Yup, it does." cppstdin="$cc -E" cppminus=''; else ! echo 'Nope...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 '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 "'$cpp' -" will work...' ! $cpp - <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="$cpp" ! 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...' ! case "$cppstdin" in ! '') ;; ! *) $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1;; ! esac ! if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then ! 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!." ! else ! dflt=blurfl ! $echo $n "No dice. I can't find a C preprocessor. Name one: $c" ! rp='Name a C preprocessor:' ! . myread ! cppstdin="$ans" ! $cppstdin <testcpp.c >testcpp.out 2>&1 ! if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then ! echo "OK, that will do." ! else ! echo "Sorry, I can't get that to work. Go find one." ! exit 1 ! fi ! fi ! fi ! fi ! fi ! fi ! fi fi fi --- 1706,1783 ---- #define XYZ xyz ABC.XYZ EOT ! ! cd .. ! echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin ! chmod 755 cppstdin ! wrapper=`pwd`/cppstdin ! cd UU ! ! if test "X$cppstdin" != "X" && \ ! $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \ ! $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then ! echo "You used to use $cppstdin $cppminus so we'll use that again." ! elif test "$cc" = gcc && \ ! (echo "Using gcc, eh? We'll try to force gcc -E using a wrapper..."; \ ! $wrapper <testcpp.c >testcpp.out 2>&1; \ ! $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1) ; then ! echo "Yup, we can." ! cppstdin="$wrapper" ! cppminus=''; ! elif echo 'Maybe "'"$cc"' -E" will work...'; \ ! $cc -E <testcpp.c >testcpp.out 2>&1; \ ! $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then echo "Yup, it does." cppstdin="$cc -E" cppminus=''; + elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \ + $cc -E - <testcpp.c >testcpp.out 2>&1; \ + $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then + echo "Yup, it does." + cppstdin="$cc -E" + cppminus='-'; + elif echo 'Uh-uh. Time to get fancy. Trying a wrapper...'; \ + $wrapper <testcpp.c >testcpp.out 2>&1; \ + $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then + cppstdin="$wrapper" + cppminus='' + echo "Eureka!." + elif echo 'No such luck, maybe "'$cpp'" will work...'; \ + $cpp <testcpp.c >testcpp.out 2>&1; \ + $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then + echo "It works!" + cppstdin="$cpp" + cppminus=''; + elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \ + $cpp - <testcpp.c >testcpp.out 2>&1; \ + $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then + echo "Hooray, it works! I was beginning to wonder." + cppstdin="$cpp" + cppminus='-'; + elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \ + $cc -P <testcpp.c >testcpp.out 2>&1; \ + $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then + echo "Yipee, that works!" + cppstdin="$cc -P" + cppminus=''; + elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \ + $cc -P - <testcpp.c >testcpp.out 2>&1; \ + $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then + echo "At long last!" + cppstdin="$cc -P" + cppminus='-'; else ! dflt=blurfl ! $echo $n "No dice. I can't find a C preprocessor. Name one: $c" ! rp='Name a C preprocessor:' ! . myread ! cppstdin="$ans" ! $cppstdin <testcpp.c >testcpp.out 2>&1 if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then ! echo "OK, that will do." else ! echo "Sorry, I can't get that to work. Go find one and rerun Configure." ! exit 1 fi fi *************** *** 1834,1845 **** test -f $1 || set /lib/libsys_s.a eval set \$$# if test -f "$1"; then ! echo "Your shared C library is in $1." libc="$1" elif test -f "$libc"; then ! echo "Your C library is in $libc." elif test -f /lib/libc.a; then ! echo "Your C library is in /lib/libc.a. You're normal." libc=/lib/libc.a else if ans=`./loc libc.a blurfl/dyick $libpth`; test -f "$ans"; then --- 1841,1852 ---- test -f $1 || set /lib/libsys_s.a eval set \$$# if test -f "$1"; then ! echo "Your (shared) C library seems to be in $1." libc="$1" elif test -f "$libc"; then ! echo "Your C library seems to be in $libc." elif test -f /lib/libc.a; then ! echo "Your C library seems to be in /lib/libc.a. You're normal." libc=/lib/libc.a else if ans=`./loc libc.a blurfl/dyick $libpth`; test -f "$ans"; then *************** *** 1856,1862 **** : fi if test -f "$ans"; then ! echo "Your C library is in $ans, of all places." libc=$ans else cat <<EOM --- 1863,1869 ---- : fi if test -f "$ans"; then ! echo "Your C library seems to be in $ans, of all places." libc=$ans else cat <<EOM *************** *** 1878,1885 **** if test $libc = "/lib/libc"; then libc="$libc /lib/clib" fi ! set `echo $libc $libnames | tr ' ' '\012' | sort | uniq` ! $echo $n "Extracting names from $* for later perusal...$c" nm $nm_opts $* 2>/dev/null >libc.tmp $sed -n -e 's/^.* [ATDS] *[_.]*//p' -e 's/^.* [ATDS] //p' <libc.tmp >libc.list if $contains '^printf$' libc.list >/dev/null 2>&1; then --- 1885,1907 ---- if test $libc = "/lib/libc"; then libc="$libc /lib/clib" fi ! cat <<END ! ! If the guess above is wrong (which it might be if you're using a strange ! compiler, or your machine supports multiple models), you can override it here. ! END ! dflt="$libc"; ! rp="Your C library is where? [$dflt]" ! $echo $n "$rp $c" ! . myread ! libc="$ans" ! echo " " ! echo $libc $libnames | tr ' ' '\012' | sort | uniq >libnames ! $echo "Extracting names from the following files for later perusal:" ! sed 's/^/ /' libnames ! echo $n "This may take a while...$c" ! set X `cat libnames` ! shift nm $nm_opts $* 2>/dev/null >libc.tmp $sed -n -e 's/^.* [ATDS] *[_.]*//p' -e 's/^.* [ATDS] //p' <libc.tmp >libc.list if $contains '^printf$' libc.list >/dev/null 2>&1; then *************** *** 1898,1904 **** <libc.tmp >libc.list; \ $contains '^printf$' libc.list >/dev/null 2>&1; then echo done ! elif $grep '|' <libc.tmp | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \ -e 's/^\([^ ]*\).*/\1/p' >libc.list $contains '^printf$' libc.list >/dev/null 2>&1; then echo done --- 1920,1926 ---- <libc.tmp >libc.list; \ $contains '^printf$' libc.list >/dev/null 2>&1; then echo done ! elif $grep '|' <libc.tmp | $sed -n -e '/|COMMON/d' -e '/|DATA/d' -e '/ file/d' \ -e 's/^\([^ ]*\).*/\1/p' >libc.list $contains '^printf$' libc.list >/dev/null 2>&1; then echo done *************** *** 1939,1954 **** fi fi fi - : old version - - inlibc='echo " "; - if $contains "^$1\$" libc.list >/dev/null 2>&1; - then echo "$1() found"; eval "$2=$define"; - else echo "$1() not found"; eval "$2=$undef"; fi' - - : new version - inlibc='echo " "; td=$define; tu=$undef; if $contains "^$1\$" libc.list >/dev/null 2>&1; then echo "$1() found"; --- 1961,1971 ---- fi fi fi + if test -f /lib/syscalls.exp; then + echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." + sed -n 's/^\([^ ]*\)[ ]*syscall$/\1/p' /lib/syscalls.exp >>libc.list + fi inlibc='echo " "; td=$define; tu=$undef; if $contains "^$1\$" libc.list >/dev/null 2>&1; then echo "$1() found"; *************** *** 2615,2620 **** --- 2632,2650 ---- set shmat d_shmat eval $inlibc + d_voidshmat="$undef" + case "$d_shmat" in + define) + $cppstdin $cppflags $cppminus < $usrinclude/sys/shm.h >voidshmat.txt 2>/dev/null + if $contains "void.*shmat" voidshmat.txt >/dev/null 2>&1; then + echo "and shmat returns (void*)" + d_voidshmat="$define" + else + echo "and shmat returns (char*)" + fi + ;; + esac + : see if shmdt exists set shmdt d_shmdt eval $inlibc *************** *** 2854,2870 **** : see if signal is declared as pointer to function returning int or void echo " " $cppstdin $cppflags $cppminus < $usrinclude/signal.h >d_voidsig.txt ! if $contains 'int.*signal' d_voidsig.txt >/dev/null 2>&1 ; then echo "You have int (*signal())() instead of void." val="$undef" - d_tosignal=int else echo "You have void (*signal())() instead of int." val="$define" - d_tosignal=void fi set d_voidsig eval $setvar : see if truncate exists set truncate d_truncate --- 2884,2902 ---- : see if signal is declared as pointer to function returning int or void echo " " $cppstdin $cppflags $cppminus < $usrinclude/signal.h >d_voidsig.txt ! if $contains 'int[^A-Za-z]*signal' d_voidsig.txt >/dev/null 2>&1 ; then echo "You have int (*signal())() instead of void." val="$undef" else echo "You have void (*signal())() instead of int." val="$define" fi set d_voidsig eval $setvar + case $voidsig in + define) d_tosignal=void;; + *) d_tosignal=int;; + esac : see if truncate exists set truncate d_truncate *************** *** 2929,2934 **** --- 2961,3004 ---- . myread gidtype="$ans" + : see what type gids are returned by getgroups + echo " " + case "$groupstype" in + '') + if $contains 'getgroups.*short' /usr/lib/lint/llib-lc >/dev/null 2>&1; then + dflt='short' + elif $contains 'getgroups.*int' /usr/lib/lint/llib-lc >/dev/null 2>&1; then + dflt='int' + elif $contains 'getgroups.*short' /usr/include/libc.h >/dev/null 2>&1; then + dflt='short' + elif $contains 'getgroups.*int' /usr/include/libc.h >/dev/null 2>&1; then + dflt='int' + elif $contains 'getgroups.*short' /usr/lib/lint/llib-lbsd >/dev/null 2>&1; then + dflt='short' + elif $contains 'getgroups.*int' /usr/lib/lint/llib-lbsd >/dev/null 2>&1; then + dflt='int' + elif $contains 'int.*gidset' /usr/man/man2/getgroups.2 >/dev/null 2>&1; then + dflt='int' + elif $contains 'gid_t;' $usrinclude/sys/types.h >/dev/null 2>&1 ; then + dflt='gid_t' + else + set `grep 'groups\[NGROUPS\];' $usrinclude/sys/user.h 2>/dev/null` unsigned short + case $1 in + unsigned) dflt="$1 $2" ;; + *) dflt="$1" ;; + esac + fi + ;; + *) dflt="$groupstype" + ;; + esac + cont=true + echo "(The following only matters if you have getgroups().)" + rp="What type are the group ids returned by getgroups()? [$dflt]" + $echo $n "$rp $c" + . myread + groupstype="$ans" + : check for length of integer echo " " case "$intsize" in *************** *** 2983,2989 **** --- 3053,3063 ---- case "$mallocptrtype" in '') cat >usemymalloc.c <<'END' + #ifdef __STDC__ + #include <stdlib.h> + #else #include <malloc.h> + #endif void *malloc(); END if $cc $ccflags -c usemymalloc.c >/dev/null 2>&1; then *************** *** 3021,3026 **** --- 3095,3101 ---- case "$installprivlib" in '') dflt=`echo $privlib | sed 's#^/afs/#/afs/.#'` + test -d $dflt || dflt="$privlib" ;; *) dflt="$installprivlib" ;; *************** *** 3073,3079 **** . myread randbits="$ans" ! : determine where public executables go case "$scriptdir" in '') dflt="$bin" --- 3148,3154 ---- . myread randbits="$ans" ! : determine where publicly executable scripts go case "$scriptdir" in '') dflt="$bin" *************** *** 3094,3100 **** EOM while $test "$cont" ; do ! rp="Where do you keep publicly executable scripts (~name ok)? [$dflt]" $echo $n "$rp $c" . myread scriptdir="$ans" --- 3169,3175 ---- EOM while $test "$cont" ; do ! rp="Where will publicly executable scripts reside (~name ok)? [$dflt]" $echo $n "$rp $c" . myread scriptdir="$ans" *************** *** 3116,3121 **** --- 3191,3233 ---- fi done + case "$installscr" in + '') + dflt=`echo $scriptdir | sed 's#^/afs/#/afs/.#'` + test -d $dflt || dflt="$scriptdir" + ;; + *) dflt="$scriptdir" + ;; + esac + cont=true + $cat <<EOM + + Some installations must install scripts in a different directory than where + they will eventually reside. On most systems they're the same directory. + EOM + while $test "$cont" ; do + rp="Where do you install publicly executable scripts (~name ok)? [$dflt]" + $echo $n "$rp $c" + . myread + installscr="$ans" + installscr=`./filexp "$installscr"` + if test -d $installscr; then + cont='' + else + case "$fastread" in + yes) dflt=y;; + *) dflt=n;; + esac + rp="Directory $installscr doesn't exist. Use that name anyway? [$dflt]" + $echo $n "$rp $c" + . myread + dflt='' + case "$ans" in + y*) cont='';; + esac + fi + done + : generate list of signal names echo " " case "$sig_name" in *************** *** 3159,3165 **** : see what type of char stdio uses. echo " " ! if $contains 'unsigned.*char.*_ptr;' $usrinclude/stdio.h >/dev/null 2>&1 ; then echo "Your stdio uses unsigned chars." stdchar="unsigned char" else --- 3271,3277 ---- : see what type of char stdio uses. echo " " ! if $contains 'unsigned.*char.*\*.*_ptr.*;' $usrinclude/stdio.h >/dev/null 2>&1 ; then echo "Your stdio uses unsigned chars." stdchar="unsigned char" else *************** *** 3223,3229 **** exit(0); } EOCP ! if $cc -S -DTRY=$voidwant void.c >void.out 2>&1 ; then voidhave=$voidwant echo "It appears to support void to the level $package wants ($voidwant)." if $contains warning void.out >/dev/null 2>&1; then --- 3335,3341 ---- exit(0); } EOCP ! if $cc -c -DTRY=$voidwant void.c >void.out 2>&1 ; then voidhave=$voidwant echo "It appears to support void to the level $package wants ($voidwant)." if $contains warning void.out >/dev/null 2>&1; then *************** *** 3232,3245 **** fi else echo "Hmm, your compiler has some difficulty with void. Checking further..." ! if $cc -S -DTRY=1 void.c >/dev/null 2>&1 ; then echo "It supports 1..." ! if $cc -S -DTRY=3 void.c >/dev/null 2>&1 ; then voidhave=3 echo "And it supports 2 but not 4." else echo "It doesn't support 2..." ! if $cc -S -DTRY=5 void.c >/dev/null 2>&1 ; then voidhave=5 echo "But it supports 4." else --- 3344,3357 ---- fi else echo "Hmm, your compiler has some difficulty with void. Checking further..." ! if $cc -c -DTRY=1 void.c >/dev/null 2>&1 ; then echo "It supports 1..." ! if $cc -c -DTRY=3 void.c >/dev/null 2>&1 ; then voidhave=3 echo "And it supports 2 but not 4." else echo "It doesn't support 2..." ! if $cc -c -DTRY=5 void.c >/dev/null 2>&1 ; then voidhave=5 echo "But it supports 4." else *************** *** 3292,3331 **** esac yacc="$ans" - : see what type gids are returned by getgroups - echo " " - case "$groupstype" in - '') - if $contains 'getgroups.*short' /usr/lib/lint/llib-lc >/dev/null 2>&1; then - dflt='short' - elif $contains 'getgroups.*int' /usr/lib/lint/llib-lc >/dev/null 2>&1; then - dflt='int' - elif $contains 'getgroups.*short' /usr/lib/lint/llib-lbsd >/dev/null 2>&1; then - dflt='short' - elif $contains 'getgroups.*int' /usr/lib/lint/llib-lbsd >/dev/null 2>&1; then - dflt='int' - elif $contains 'int gidset' /usr/man/man2/getgroups.2 >/dev/null 2>&1 ; then - dflt='int' - elif $contains 'gid_t;' $usrinclude/sys/types.h >/dev/null 2>&1 ; then - dflt='gid_t' - else - set `grep 'groups\[NGROUPS\];' $usrinclude/sys/user.h 2>/dev/null` unsigned short - case $1 in - unsigned) dflt="$1 $2" ;; - *) dflt="$1" ;; - esac - fi - ;; - *) dflt="$groupstype" - ;; - esac - cont=true - echo "(The following only matters if you have getgroups().)" - rp="What type are the group ids returned by getgroups()? [$dflt]" - $echo $n "$rp $c" - . myread - groupstype="$ans" - : see if we can include fcntl.h echo " " if $h_fcntl; then --- 3404,3409 ---- *************** *** 3463,3473 **** cd .. fi echo "Creating config.sh..." $spitshell <<EOT >config.sh $startsh # config.sh # This file was produced by running the Configure script. - d_eunice='$d_eunice' define='$define' eunicefix='$eunicefix' --- 3541,3551 ---- cd .. fi echo "Creating config.sh..." + test -f config.sh && cp config.sh UU/oldconfig.sh $spitshell <<EOT >config.sh $startsh # config.sh # This file was produced by running the Configure script. d_eunice='$d_eunice' define='$define' eunicefix='$eunicefix' *************** *** 3596,3601 **** --- 3674,3680 ---- d_setruid='$d_setruid' d_shm='$d_shm' d_shmat='$d_shmat' + d_voidshmat='$d_voidshmat' d_shmctl='$d_shmctl' d_shmdt='$d_shmdt' d_shmget='$d_shmget' *************** *** 3670,3675 **** --- 3749,3755 ---- cppflags='$cppflags' ldflags='$ldflags' cc='$cc' + nativegcc='$nativegcc' libs='$libs' n='$n' c='$c' *************** *** 3676,3681 **** --- 3756,3762 ---- package='$package' randbits='$randbits' scriptdir='$scriptdir' + installscr='$installscr' sig_name='$sig_name' spitshell='$spitshell' shsharp='$shsharp' *************** *** 3695,3708 **** lib='$lib' privlib='$privlib' installprivlib='$installprivlib' - CONFIG=true EOT : Finish up CONFIG=true echo " " - test -f patchlevel.h && awk '{printf "%s=%s\n",$2,$3}' patchlevel.h >>config.sh dflt='' fastread='' echo "If you didn't make any mistakes, then just type a carriage return here." --- 3776,3808 ---- lib='$lib' privlib='$privlib' installprivlib='$installprivlib' EOT + test -f patchlevel.h && awk '{printf "%s=%s\n",$2,$3}' patchlevel.h >>config.sh + echo "CONFIG=true" >>config.sh + + if test -f UU/oldconfig.sh; then + sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\ + sort | uniq -u >UU/oldsyms + set X `cat UU/oldsyms` + shift + case $# in + 0) ;; + *) echo "Hmm...You had some extra variables I don't know about...I'll try to keep 'em..." + for sym in `cat UU/oldsyms`; do + echo " Propagating $hint variable "'$'"$sym..." + eval 'tmp="$'"${sym}"'"' + echo "$tmp" | \ + sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh + done + ;; + esac + fi + : Finish up CONFIG=true echo " " dflt='' fastread='' echo "If you didn't make any mistakes, then just type a carriage return here." *************** *** 3714,3754 **** *) : in case they cannot read eval $ans;; esac ! : if this fails, just run all the .SH files by hand ! . ./config.sh - echo " " - echo "Doing variable substitutions on .SH files..." - set x `awk '{print $1}' <MANIFEST | $grep '\.SH'` - shift - case $# in - 0) set x *.SH; shift;; - esac - if test ! -f $1; then - shift - fi - for file in $*; do - set X - shift - chmod +x $file - case "$file" in - */*) - dir=`$expr X$file : 'X\(.*\)/'` - file=`$expr X$file : 'X.*/\(.*\)'` - (cd $dir && . $file) - ;; - *) - . $file - ;; - esac - done - if test -f config.h.SH; then - if test ! -f config.h; then - : oops, they left it out of MANIFEST, probably, so do it anyway. - . config.h.SH - fi - fi - if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then dflt=n $cat <<EOM --- 3814,3822 ---- *) : in case they cannot read eval $ans;; esac ! chmod +x doSH ! ./doSH if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then dflt=n $cat <<EOM *************** *** 3775,3779 **** fi $rm -f kit*isdone ! cd .. && $rm -rf UU : end of Configure --- 3843,3847 ---- fi $rm -f kit*isdone ! $rm -rf UU : end of Configure Index: EXTERN.h Prereq: 4.0 *** EXTERN.h.old Fri Jun 7 12:22:23 1991 --- EXTERN.h Fri Jun 7 12:22:24 1991 *************** *** 1,11 **** ! /* $Header: EXTERN.h,v 4.0 91/03/20 00:58:26 lwall Locked $ * ! * Copyright (c) 1989, Larry Wall * ! * You may distribute under the terms of the GNU General Public License ! * as specified in the README file that comes with the perl 3.0 kit. * * $Log: EXTERN.h,v $ * Revision 4.0 91/03/20 00:58:26 lwall * 4.0 baseline. * --- 1,14 ---- ! /* $RCSfile: EXTERN.h,v $$Revision: 4.0.1.1 $$Date: 91/06/07 10:10:32 $ * ! * Copyright (c) 1991, Larry Wall * ! * You may distribute under the terms of either the GNU General Public ! * License or the Artistic License, as specified in the README file. * * $Log: EXTERN.h,v $ + * Revision 4.0.1.1 91/06/07 10:10:32 lwall + * patch4: new copyright notice + * * Revision 4.0 91/03/20 00:58:26 lwall * 4.0 baseline. * Index: x2p/EXTERN.h Prereq: 4.0 *** x2p/EXTERN.h.old Fri Jun 7 12:27:34 1991 --- x2p/EXTERN.h Fri Jun 7 12:27:35 1991 *************** *** 1,11 **** ! /* $Header: EXTERN.h,v 4.0 91/03/20 01:56:53 lwall Locked $ * ! * Copyright (c) 1989, Larry Wall * ! * You may distribute under the terms of the GNU General Public License ! * as specified in the README file that comes with the perl 3.0 kit. * * $Log: EXTERN.h,v $ * Revision 4.0 91/03/20 01:56:53 lwall * 4.0 baseline. * --- 1,14 ---- ! /* $RCSfile: EXTERN.h,v $$Revision: 4.0.1.1 $$Date: 91/06/07 12:11:15 $ * ! * Copyright (c) 1991, Larry Wall * ! * You may distribute under the terms of either the GNU General Public ! * License or the Artistic License, as specified in the README file. * * $Log: EXTERN.h,v $ + * Revision 4.0.1.1 91/06/07 12:11:15 lwall + * patch4: new copyright notice + * * Revision 4.0 91/03/20 01:56:53 lwall * 4.0 baseline. * Index: INTERN.h Prereq: 4.0 *** INTERN.h.old Fri Jun 7 12:22:26 1991 --- INTERN.h Fri Jun 7 12:22:27 1991 *************** *** 1,11 **** ! /* $Header: INTERN.h,v 4.0 91/03/20 00:58:35 lwall Locked $ * ! * Copyright (c) 1989, Larry Wall * ! * You may distribute under the terms of the GNU General Public License ! * as specified in the README file that comes with the perl 3.0 kit. * * $Log: INTERN.h,v $ * Revision 4.0 91/03/20 00:58:35 lwall * 4.0 baseline. * --- 1,14 ---- ! /* $RCSfile: INTERN.h,v $$Revision: 4.0.1.1 $$Date: 91/06/07 10:10:42 $ * ! * Copyright (c) 1991, Larry Wall * ! * You may distribute under the terms of either the GNU General Public ! * License or the Artistic License, as specified in the README file. * * $Log: INTERN.h,v $ + * Revision 4.0.1.1 91/06/07 10:10:42 lwall + * patch4: new copyright notice + * * Revision 4.0 91/03/20 00:58:35 lwall * 4.0 baseline. * Index: x2p/INTERN.h Prereq: 4.0 *** x2p/INTERN.h.old Fri Jun 7 12:27:37 1991 --- x2p/INTERN.h Fri Jun 7 12:27:37 1991 *************** *** 1,11 **** ! /* $Header: INTERN.h,v 4.0 91/03/20 01:56:58 lwall Locked $ * ! * Copyright (c) 1989, Larry Wall * ! * You may distribute under the terms of the GNU General Public License ! * as specified in the README file that comes with the perl 3.0 kit. * * $Log: INTERN.h,v $ * Revision 4.0 91/03/20 01:56:58 lwall * 4.0 baseline. * --- 1,14 ---- ! /* $RCSfile: INTERN.h,v $$Revision: 4.0.1.1 $$Date: 91/06/07 12:11:20 $ * ! * Copyright (c) 1991, Larry Wall * ! * You may distribute under the terms of either the GNU General Public ! * License or the Artistic License, as specified in the README file. * * $Log: INTERN.h,v $ + * Revision 4.0.1.1 91/06/07 12:11:20 lwall + * patch4: new copyright notice + * * Revision 4.0 91/03/20 01:56:58 lwall * 4.0 baseline. * Index: MANIFEST *** MANIFEST.old Fri Jun 7 12:22:30 1991 --- MANIFEST Fri Jun 7 12:22:31 1991 *************** *** 1,3 **** --- 1,4 ---- + Artistic The "Artistic License" Configure Run this first Copying The GNU General Public License EXTERN.h Included before foreign .h files *************** *** 20,25 **** --- 21,27 ---- config_h.SH Produces config.h cons.c Routines to construct cmd nodes of a parse tree consarg.c Routines to construct arg nodes of a parse tree + doSH Script to run all the *.SH files doarg.c Scalar expression evaluation doio.c I/O operations dolist.c Array expression evaluation *************** *** 87,92 **** --- 89,95 ---- handy.h Handy definitions hash.c Associative arrays hash.h Public declarations for the above + hints/3b1.sh hints/3b2.sh hints/aix_rs.sh hints/aix_rt.sh *************** *** 114,122 **** --- 117,127 ---- hints/sunos_3_5.sh hints/sunos_4_0_1.sh hints/sunos_4_0_2.sh + hints/svr4.sh hints/ultrix_3.sh hints/ultrix_4.sh hints/uts.sh + hints/vax.sh installperl Perl script to do "make install" dirty work ioctl.pl Sample ioctl.pl lib/abbrev.pl An abbreviation table builder *************** *** 127,139 **** --- 132,148 ---- lib/complete.pl A command completion subroutine lib/ctime.pl A ctime workalike lib/dumpvar.pl A variable dumper + lib/find.pl A find emulator--used by find2perl + lib/finddepth.pl A depth-first find emulator--used by find2perl lib/flush.pl Routines to do single flush lib/getopt.pl Perl library supporting option parsing lib/getopts.pl Perl library supporting option parsing lib/importenv.pl Perl routine to get environment into variables lib/look.pl A "look" equivalent + lib/newgetopt.pl A perl library supporting long option parsing lib/perldb.pl Perl debugging routines lib/pwd.pl Routines to keep track of PWD environment variable + lib/shellwords.pl Perl library to split into words with shell quoting lib/stat.pl Perl library supporting stat function lib/syslog.pl Perl library supporting syslogging lib/termcap.pl Perl library supporting termcap usage *************** *** 296,301 **** --- 305,311 ---- x2p/a2p.man Manual page for awk to perl translator x2p/a2p.y A yacc grammer for awk x2p/a2py.c Awk compiler, sort of + x2p/cflags.SH A script that emits C compilation flags per file x2p/find2perl.SH A find to perl translator x2p/handy.h Handy definitions x2p/hash.c Associative arrays again Index: usub/Makefile *** usub/Makefile.old Fri Jun 7 12:27:23 1991 --- usub/Makefile Fri Jun 7 12:27:23 1991 *************** *** 1,10 **** ! SRC = /usr/local/src/perl GLOBINCS = LOCINCS = ! LIBS = -lcurses -ltermlib curseperl: $(SRC)/uperl.o usersub.o curses.o ! cc $(SRC)/uperl.o usersub.o curses.o $(LIBS) -lm -o curseperl usersub.o: usersub.c cc -c -I$(SRC) $(GLOBINCS) -DDEBUGGING -g usersub.c --- 1,10 ---- ! SRC = .. GLOBINCS = LOCINCS = ! LIBS = -lcurses -ltermlib `. $(SRC)/config.sh; echo $$libs` curseperl: $(SRC)/uperl.o usersub.o curses.o ! cc $(SRC)/uperl.o usersub.o curses.o $(LIBS) -o curseperl usersub.o: usersub.c cc -c -I$(SRC) $(GLOBINCS) -DDEBUGGING -g usersub.c Index: Makefile.SH *** Makefile.SH.old Fri Jun 7 12:22:33 1991 --- Makefile.SH Fri Jun 7 12:22:34 1991 *************** *** 25,33 **** echo "Extracting Makefile (with variable substitutions)" cat >Makefile <<!GROK!THIS! ! # $RCSfile: Makefile.SH,v $$Revision: 4.0.1.1 $$Date: 91/04/11 17:30:39 $ # # $Log: Makefile.SH,v $ # Revision 4.0.1.1 91/04/11 17:30:39 lwall # patch1: C flags are now settable on a per-file basis # --- 25,39 ---- echo "Extracting Makefile (with variable substitutions)" cat >Makefile <<!GROK!THIS! ! # $RCSfile: Makefile.SH,v $$Revision: 4.0.1.2 $$Date: 91/06/07 10:14:43 $ # # $Log: Makefile.SH,v $ + # Revision 4.0.1.2 91/06/07 10:14:43 lwall + # patch4: cflags now emits entire cc command except for the filename + # patch4: alternate make programs are now semi-supported + # patch4: uperl.o no longer tries to link in libraries prematurely + # patch4: installperl now installs x2p stuff too + # # Revision 4.0.1.1 91/04/11 17:30:39 lwall # patch1: C flags are now settable on a per-file basis # *************** *** 55,72 **** public = perl taintperl $suidperl !GROK!THIS! cat >>Makefile <<'!NO!SUBS!' ! CFLAGS = `sh cflags.SH $@` private = scripts = h2ph - MAKE = make - manpages = perl.man h2ph.man util = --- 61,79 ---- public = perl taintperl $suidperl + # To use an alternate make, set $altmake in config.sh. + MAKE = ${altmake-make} + !GROK!THIS! cat >>Makefile <<'!NO!SUBS!' ! CCCMD = `sh cflags $@` private = scripts = h2ph manpages = perl.man h2ph.man util = *************** *** 104,110 **** SHELL = /bin/sh .c.o: ! $(CC) -c $(CFLAGS) $*.c all: $(public) $(private) $(util) uperl.o $(scripts) cd x2p; $(MAKE) all --- 111,117 ---- SHELL = /bin/sh .c.o: ! $(CCCMD) $*.c all: $(public) $(private) $(util) uperl.o $(scripts) cd x2p; $(MAKE) all *************** *** 119,125 **** $(CC) $(LARGE) $(CLDFLAGS) $(obj) perly.o usersub.o $(libs) -o perl uperl.o: $& perly.o $(obj) ! -ld $(LARGE) $(LDFLAGS) -r $(obj) perly.o $(libs) -o uperl.o saber: perly.c # load $(c) perly.c --- 126,132 ---- $(CC) $(LARGE) $(CLDFLAGS) $(obj) perly.o usersub.o $(libs) -o perl uperl.o: $& perly.o $(obj) ! -ld $(LARGE) $(LDFLAGS) -r $(obj) perly.o -o uperl.o saber: perly.c # load $(c) perly.c *************** *** 147,267 **** tperly.o: perly.c perly.h $(h) /bin/rm -f tperly.c $(SLN) perly.c tperly.c ! $(CC) -c -DTAINT $(CFLAGS) tperly.c /bin/rm -f tperly.c tperl.o: perl.c perly.h patchlevel.h perl.h $(h) /bin/rm -f tperl.c $(SLN) perl.c tperl.c ! $(CC) -c -DTAINT $(CFLAGS) tperl.c /bin/rm -f tperl.c sperl.o: perl.c perly.h patchlevel.h $(h) /bin/rm -f sperl.c $(SLN) perl.c sperl.c ! $(CC) -c -DTAINT -DIAMSUID $(CFLAGS) sperl.c /bin/rm -f sperl.c tarray.o: array.c $(h) /bin/rm -f tarray.c $(SLN) array.c tarray.c ! $(CC) -c -DTAINT $(CFLAGS) tarray.c /bin/rm -f tarray.c tcmd.o: cmd.c $(h) /bin/rm -f tcmd.c $(SLN) cmd.c tcmd.c ! $(CC) -c -DTAINT $(CFLAGS) tcmd.c /bin/rm -f tcmd.c tcons.o: cons.c $(h) perly.h /bin/rm -f tcons.c $(SLN) cons.c tcons.c ! $(CC) -c -DTAINT $(CFLAGS) tcons.c /bin/rm -f tcons.c tconsarg.o: consarg.c $(h) /bin/rm -f tconsarg.c $(SLN) consarg.c tconsarg.c ! $(CC) -c -DTAINT $(CFLAGS) tconsarg.c /bin/rm -f tconsarg.c tdoarg.o: doarg.c $(h) /bin/rm -f tdoarg.c $(SLN) doarg.c tdoarg.c ! $(CC) -c -DTAINT $(CFLAGS) tdoarg.c /bin/rm -f tdoarg.c tdoio.o: doio.c $(h) /bin/rm -f tdoio.c $(SLN) doio.c tdoio.c ! $(CC) -c -DTAINT $(CFLAGS) tdoio.c /bin/rm -f tdoio.c tdolist.o: dolist.c $(h) /bin/rm -f tdolist.c $(SLN) dolist.c tdolist.c ! $(CC) -c -DTAINT $(CFLAGS) tdolist.c /bin/rm -f tdolist.c tdump.o: dump.c $(h) /bin/rm -f tdump.c $(SLN) dump.c tdump.c ! $(CC) -c -DTAINT $(CFLAGS) tdump.c /bin/rm -f tdump.c teval.o: eval.c $(h) /bin/rm -f teval.c $(SLN) eval.c teval.c ! $(CC) -c -DTAINT $(CFLAGS) teval.c /bin/rm -f teval.c tform.o: form.c $(h) /bin/rm -f tform.c $(SLN) form.c tform.c ! $(CC) -c -DTAINT $(CFLAGS) tform.c /bin/rm -f tform.c thash.o: hash.c $(h) /bin/rm -f thash.c $(SLN) hash.c thash.c ! $(CC) -c -DTAINT $(CFLAGS) thash.c /bin/rm -f thash.c tregcomp.o: regcomp.c $(h) /bin/rm -f tregcomp.c $(SLN) regcomp.c tregcomp.c ! $(CC) -c -DTAINT $(CFLAGS) tregcomp.c /bin/rm -f tregcomp.c tregexec.o: regexec.c $(h) /bin/rm -f tregexec.c $(SLN) regexec.c tregexec.c ! $(CC) -c -DTAINT $(CFLAGS) tregexec.c /bin/rm -f tregexec.c tstab.o: stab.c $(h) /bin/rm -f tstab.c $(SLN) stab.c tstab.c ! $(CC) -c -DTAINT $(CFLAGS) tstab.c /bin/rm -f tstab.c tstr.o: str.c $(h) perly.h /bin/rm -f tstr.c $(SLN) str.c tstr.c ! $(CC) -c -DTAINT $(CFLAGS) tstr.c /bin/rm -f tstr.c ttoke.o: toke.c $(h) perly.h /bin/rm -f ttoke.c $(SLN) toke.c ttoke.c ! $(CC) -c -DTAINT $(CFLAGS) ttoke.c /bin/rm -f ttoke.c tutil.o: util.c $(h) /bin/rm -f tutil.c $(SLN) util.c tutil.c ! $(CC) -c -DTAINT $(CFLAGS) tutil.c /bin/rm -f tutil.c perly.h: perly.c --- 154,274 ---- tperly.o: perly.c perly.h $(h) /bin/rm -f tperly.c $(SLN) perly.c tperly.c ! $(CCCMD) -DTAINT tperly.c /bin/rm -f tperly.c tperl.o: perl.c perly.h patchlevel.h perl.h $(h) /bin/rm -f tperl.c $(SLN) perl.c tperl.c ! $(CCCMD) -DTAINT tperl.c /bin/rm -f tperl.c sperl.o: perl.c perly.h patchlevel.h $(h) /bin/rm -f sperl.c $(SLN) perl.c sperl.c ! $(CCCMD) -DTAINT -DIAMSUID sperl.c /bin/rm -f sperl.c tarray.o: array.c $(h) /bin/rm -f tarray.c $(SLN) array.c tarray.c ! $(CCCMD) -DTAINT tarray.c /bin/rm -f tarray.c tcmd.o: cmd.c $(h) /bin/rm -f tcmd.c $(SLN) cmd.c tcmd.c ! $(CCCMD) -DTAINT tcmd.c /bin/rm -f tcmd.c tcons.o: cons.c $(h) perly.h /bin/rm -f tcons.c $(SLN) cons.c tcons.c ! $(CCCMD) -DTAINT tcons.c /bin/rm -f tcons.c tconsarg.o: consarg.c $(h) /bin/rm -f tconsarg.c $(SLN) consarg.c tconsarg.c ! $(CCCMD) -DTAINT tconsarg.c /bin/rm -f tconsarg.c tdoarg.o: doarg.c $(h) /bin/rm -f tdoarg.c $(SLN) doarg.c tdoarg.c ! $(CCCMD) -DTAINT tdoarg.c /bin/rm -f tdoarg.c tdoio.o: doio.c $(h) /bin/rm -f tdoio.c $(SLN) doio.c tdoio.c ! $(CCCMD) -DTAINT tdoio.c /bin/rm -f tdoio.c tdolist.o: dolist.c $(h) /bin/rm -f tdolist.c $(SLN) dolist.c tdolist.c ! $(CCCMD) -DTAINT tdolist.c /bin/rm -f tdolist.c tdump.o: dump.c $(h) /bin/rm -f tdump.c $(SLN) dump.c tdump.c ! $(CCCMD) -DTAINT tdump.c /bin/rm -f tdump.c teval.o: eval.c $(h) /bin/rm -f teval.c $(SLN) eval.c teval.c ! $(CCCMD) -DTAINT teval.c /bin/rm -f teval.c tform.o: form.c $(h) /bin/rm -f tform.c $(SLN) form.c tform.c ! $(CCCMD) -DTAINT tform.c /bin/rm -f tform.c thash.o: hash.c $(h) /bin/rm -f thash.c $(SLN) hash.c thash.c ! $(CCCMD) -DTAINT thash.c /bin/rm -f thash.c tregcomp.o: regcomp.c $(h) /bin/rm -f tregcomp.c $(SLN) regcomp.c tregcomp.c ! $(CCCMD) -DTAINT tregcomp.c /bin/rm -f tregcomp.c tregexec.o: regexec.c $(h) /bin/rm -f tregexec.c $(SLN) regexec.c tregexec.c ! $(CCCMD) -DTAINT tregexec.c /bin/rm -f tregexec.c tstab.o: stab.c $(h) /bin/rm -f tstab.c $(SLN) stab.c tstab.c ! $(CCCMD) -DTAINT tstab.c /bin/rm -f tstab.c tstr.o: str.c $(h) perly.h /bin/rm -f tstr.c $(SLN) str.c tstr.c ! $(CCCMD) -DTAINT tstr.c /bin/rm -f tstr.c ttoke.o: toke.c $(h) perly.h /bin/rm -f ttoke.c $(SLN) toke.c ttoke.c ! $(CCCMD) -DTAINT ttoke.c /bin/rm -f ttoke.c tutil.o: util.c $(h) /bin/rm -f tutil.c $(SLN) util.c tutil.c ! $(CCCMD) -DTAINT tutil.c /bin/rm -f tutil.c perly.h: perly.c *************** *** 268,287 **** @ echo Dummy dependency for dumb parallel make touch perly.h ! perly.c: perly.y @ echo 'Expect either' 29 shift/reduce and 59 reduce/reduce conflicts... @ echo ' or' 27 shift/reduce and 61 reduce/reduce conflicts... $(YACC) -d perly.y ! sh perly.fixer y.tab.c perly.c mv y.tab.h perly.h echo 'extern YYSTYPE yylval;' >>perly.h perly.o: perly.c perly.h $(h) ! $(CC) -c $(CFLAGS) perly.c install: all ./perl installperl - cd x2p; $(MAKE) install clean: rm -f *.o all perl taintperl suidperl --- 275,293 ---- @ echo Dummy dependency for dumb parallel make touch perly.h ! perly.c: perly.y perly.fixer @ echo 'Expect either' 29 shift/reduce and 59 reduce/reduce conflicts... @ echo ' or' 27 shift/reduce and 61 reduce/reduce conflicts... $(YACC) -d perly.y ! sh ./perly.fixer y.tab.c perly.c mv y.tab.h perly.h echo 'extern YYSTYPE yylval;' >>perly.h perly.o: perly.c perly.h $(h) ! $(CCCMD) perly.c install: all ./perl installperl clean: rm -f *.o all perl taintperl suidperl *************** *** 291,297 **** cd x2p; $(MAKE) realclean rm -f *.orig */*.orig *~ */*~ core $(addedbyconf) h2ph h2ph.man rm -f perly.c perly.h t/perl Makefile config.h makedepend makedir ! rm -f x2p/Makefile # The following lint has practically everything turned on. Unfortunately, # you have to wade through a lot of mumbo jumbo that can't be suppressed. --- 297,303 ---- cd x2p; $(MAKE) realclean rm -f *.orig */*.orig *~ */*~ core $(addedbyconf) h2ph h2ph.man rm -f perly.c perly.h t/perl Makefile config.h makedepend makedir ! rm -f makefile x2p/Makefile x2p/makefile cflags x2p/cflags # The following lint has practically everything turned on. Unfortunately, # you have to wade through a lot of mumbo jumbo that can't be suppressed. *** End of Patch 4 *** exit 0 # Just in case... -- Kent Landfield INTERNET: kent@sparky.IMD.Sterling.COM Sterling Software, IMD UUCP: uunet!sparky!kent Phone: (402) 291-8300 FAX: (402) 291-4362 Please send comp.sources.misc-related mail to kent@uunet.uu.net.