Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!swrinde!elroy.jpl.nasa.gov!usc!wuarchive!emory!gatech!purdue!haven!uvaarpa!mmdf From: marc@athena.mit.edu (Marc Horowitz) Newsgroups: comp.lang.perl Subject: perl 4.0 beta Message-ID: <1991Feb20.074839.24201@uvaarpa.Virginia.EDU> Date: 20 Feb 91 07:48:39 GMT Sender: mmdf@uvaarpa.Virginia.EDU (Uvaarpa Mail System) Reply-To: marc@mit.edu Organization: The Internet Lines: 210 I've built perl 4.0 beta for the following systems. All passed all tests. VAX, BSD 4.3, AFS, gcc version 1.39 -g -O IBM RT, AOS 4 (BSD 4.3), AFS, hc2.1y -O DECstation 3100, Ultrix 3.1, AFS, gcc version 1.37.1 OSF 1.9.2.13 Ultrix Dec Mips Dec 14 1990 -g -O I will be attempting to build on a PS/2, AIX 1.2 and a NeXT 2.0 later this week. I haven't had a chance to seriously test this version, but so far I haven't had any difficulty. Here is my file of bugs/comments/patches from building/installing the beta release. All patches are mine, submitted to Larry for his approval. === Configure uses test -x. test -x doesn't exist everywhere. It definitely does not exist in BSD or Ultrix {3.1,4.0}. I am told it exists in SunOS and GNU test. === installperl doesn't install the man pages properly. From installperl: for (@manpages) { ($new = $_) =~ s/man$/$manext/; print STDERR " Installing $mansrc/$new\n"; next if $nonono; open(MI,$_); open(MO,">$new"); print MO ".ds RP Release $release Patchlevel $patchlevel\n"; while () { print MO; } close MI; close MO; } If I understood everything correctly, $mansrc contains the directory nroff-source man pages should go in, from config.sh. But this isn't in he name of the output file, and there's no chdir to put it there. *** /tmp/,RCSt1a06552 Mon Feb 18 21:59:29 1991 --- installperl Mon Feb 18 21:57:24 1991 *************** *** 113,119 **** print STDERR " Installing $mansrc/$new\n"; next if $nonono; open(MI,$_); ! open(MO,">$new"); print MO ".ds RP Release $release Patchlevel $patchlevel\n"; while () { print MO; --- 113,119 ---- print STDERR " Installing $mansrc/$new\n"; next if $nonono; open(MI,$_); ! open(MO,">$mansrc/$new"); print MO ".ds RP Release $release Patchlevel $patchlevel\n"; while () { print MO; === hc2 warnings which seem to be valid: w "cons.c",L140/C2: Expression of type "SUBR*" should be returned. w "doarg.c",L937/C1: do_unshift: Function has no return statement. w "doio.c",L1182/C1: do_execfree: Function has no return statement. w "perl.c",L824/C1: magicname: Function has no return statement. w "stab.c",L655/C2: Expression of type "int" should be returned. ; This one is tricky, as we know the signal handler will never ; return, but the compiler doesn't know that. perhaps define a ; returnfromhandler macro in the same place handlertype is ; defined? w "toke.c",L1415/C3: Expression of type "int" should be returned. w "util.c",L860/C29: tmps | Passing an argument of type "char*" where "long" is expected. w "util.c",L860/C6: fatal: Insufficient number of arguments to function. w "util.c",L1238/C3: fatal: Insufficient number of arguments to function. w "util.c",L1395/C2: fatal: Insufficient number of arguments to function. ; This is ALL evil. you aren't using varargs, when you should be. ; You are assuming char* and long have the same storage class. ; There is, of course, no good, portable solution. w "util.c",L1397: Variable "count" is never referenced. w "util.c",L1398: Variable "str" is never referenced. This is all my judgement given that I am not really familiar with the internals of perl. hope it all helps. === nitpick: perl.c has an rcs header and comments which imply that the filename is perly.c, but perly.c is the output from perly.y. === on my vax bsd, Configure printed: No ndir library found, but you have readdir() so we'll use that. u_short d_namlen; /* length of string in d_name */ * null byte (dp->d_namlen+1), rounded up to a 4 byte boundary. ((sizeof (struct direct) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3)) This is because $contains prints to stdout. You put >/dev/null 2>&1 in most places, but missed a few: *** /tmp/,RCSt1a07912 Tue Feb 19 03:19:10 1991 --- Configure Tue Feb 19 03:18:18 1991 *************** *** 1844,1850 **** ndiro='' if $test -r $inclPath/usr/include/dirent.h; then echo "dirent.h found." ! if $contains 'd_namlen' $inclPath/usr/include/dirent.h; then d_dirnamlen="$define" fi i_dirent="$define" --- 1844,1850 ---- ndiro='' if $test -r $inclPath/usr/include/dirent.h; then echo "dirent.h found." ! if $contains 'd_namlen' $inclPath/usr/include/dirent.h >/dev/null 2>&1; then d_dirnamlen="$define" fi i_dirent="$define" *************** *** 1867,1873 **** ;; esac fi ! if $contains 'd_namlen' $xxx; then d_dirnamlen="$define" fi case "$xxx" in --- 1867,1873 ---- ;; esac fi ! if $contains 'd_namlen' $xxx >/dev/null 2>&1; then d_dirnamlen="$define" fi case "$xxx" in *************** *** 1882,1888 **** # The next line used to require this to be a bsd system. if $contains '^readdir$' libc.list >/dev/null 2>&1 ; then echo "No ndir library found, but you have readdir() so we'll use that."! if $contains 'd_namlen' $inclPath/usr/include/sys/dir.h; then d_dirnamlen="$define" fi i_sys_dir="$define" --- 1882,1888 ---- # The next line used to require this to be a bsd system. if $contains '^readdir$' libc.list >/dev/null 2>&1 ; then echo "No ndir library found, but you have readdir() so we'll use that."! if $contains 'd_namlen' $inclPath/usr/include/sys/dir.h >/dev/null 2>&1; then d_dirnamlen="$define" fi i_sys_dir="$define" *************** *** 1891,1897 **** # This will lose since $d_ndir.h is in another directory. # I doubt we can rely on it being in ../$d_ndir.h . # At least it will fail in a conservative manner. ! if $contains 'd_namlen' $d_ndir.h; then d_dirnamlen="$define" fi i_my_dir="$define" --- 1891,1897 ---- # This will lose since $d_ndir.h is in another directory. # I doubt we can rely on it being in ../$d_ndir.h . # At least it will fail in a conservative manner. ! if $contains 'd_namlen' $d_ndir.h >/dev/null 2>&1; then d_dirnamlen="$define" fi i_my_dir="$define" === As usual, I had to manually undef waitpid on my ultrix 3.1 box. I realize there's no better way to do this. === on all machines: if test ! -f config.sh; then ln ../config.sh . || \ ln ../../config.sh . || \ ln ../../../config.sh . || \ (echo "Can't find config.sh."; exit 1) fi I get "./config.sh: Cross-device link" from the first ln. Is there a reason not to send all output from these ln's to /dev/null ? === Have fun :-) Marc