Skip Menu |
Report information
Id: 872
Status: resolved
Priority: 0/
Queue: perl5

Owner: Nobody
Requestors: wpm [at]

Operating System: Solaris
PatchStatus: (no value)
Severity: medium
Type: library
Perl Version: 5.005_03
Fixed In: (no value)

From: "W. Phillip Moore" <wpm [...]>
Date: Tue, 15 Jun 1999 17:01:46 -0400 (EDT)
To: perlbug [...]
Cc: wpm [...]
Subject: 5.005_03 h2ph.PL can generate syntactically incorrect
Download (untitled) / with headers
text/plain 4.3k
The h2ph included with 5.00503 will autogenerate, and the file it creates is then explicitly required by each and every *.ph file subsequently generated. Unfortunately, the file is not necessarily syntactically correct: Warning: Use of "defined" without parens is ambiguous at /usr/tools/lib/perl5/ line 2. Can't use subscript on subroutine entry at /usr/tools/lib/perl5/ line 2, near "} }" (Did you mean $ or @ instead of &?) syntax error at /usr/tools/lib/perl5/ line 4, near "unless" The offensive line is: unless (defined &) { sub () { "" } } This causes modules such as Sys::Syslog, which requires, to fail at compile time. This is bad... The problem is caused by the _extract_cc_defines() subroutine, which parses the values found in 3 %Config values, but doesn't deal with empty values correctly. In my case, building with SunProC 4.2 on Solaris 2.5.1, $Config{ccsymbols} is empty, and this results in the null key, and the bogus, and thus the very unhappy users. BTW, the test suite doesn't catch this, as it compares the resulting test of an h2ph invocation, but doesn't require the code to verify that it is syntactically correct. The h2ph.PL patch is exceedingly trivial (sorry, no time to hack the test suite today). *** h2ph.PL.orig Tue Jun 15 16:30:52 1999 --- h2ph.PL Tue Jun 15 16:31:21 1999 *************** *** 576,582 **** # Split compiler pre-definitions into `key=value' pairs: foreach (split /\s+/, $allsymbols) { ! /(.*?)=(.*)/; $define{$1} = $2; if ($opt_D) { --- 576,582 ---- # Split compiler pre-definitions into `key=value' pairs: foreach (split /\s+/, $allsymbols) { ! next unless /(.*?)=(.*)/; $define{$1} = $2; if ($opt_D) { --- This perlbug was built using Perl 5.00503 - Thu May 20 11:43:00 EDT 1999 It is being executed now by Perl 5.00503 - Thu May 20 11:45:48 EDT 1999. Site configuration information for perl 5.00503: Configured by wpm at Thu May 20 11:45:48 EDT 1999. Summary of my perl5 (5.0 patchlevel 5 subversion 3) configuration: Platform: osname=solaris, osvers=2.5.1, archname=sun4-solaris uname='sunos sascs1 5.5.1 generic_103640-24 sun4u sparc sunw,ultra-enterprise ' hint=recommended, useposix=true, d_sigaction=define usethreads=undef useperlio=undef d_sfio=undef Compiler: cc='cc', optimize='-O', gccversion= cppflags='-DAPPLLIB_EXP="/ms/dist/perl5/VERS/5.00503-core/lib/perl5:/ms/dist/perl5/VERS/5.005-core/lib/perl5" -I/usr/local/include' ccflags ='-DAPPLLIB_EXP="/ms/dist/perl5/VERS/5.00503-core/lib/perl5:/ms/dist/perl5/VERS/5.005-core/lib/perl5" -I/usr/local/include' stdchar='unsigned char', d_stdstdio=define, usevfork=false intsize=4, longsize=4, ptrsize=4, doublesize=8 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16 alignbytes=8, usemymalloc=n, prototype=define Linker and Libraries: ld='cc', ldflags =' -L/usr/local/lib' libpth=/usr/local/lib /lib /usr/lib /usr/ccs/lib libs=-lsocket -lnsl -ldb -ldl -lm -lc -lcrypt libc=/lib/, so=so, useshrplib=false, libperl=libperl.a Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags=' ' cccdlflags='-KPIC', lddlflags='-G -L/usr/local/lib' Locally applied patches: --- @INC for perl 5.00503: /ms/dist/perl5/VERS/5.00503-core/lib/perl5 /ms/dist/perl5/VERS/5.005-core/lib/perl5 /ms/dist/perl5/PROJ/core/5.00503/exec/lib/perl5 /ms/dist/perl5/PROJ/core/5.00503/common/lib/perl5 /ms/dist/perl5/VERS/5.00503/lib/perl5 /ms/dist/perl5/VERS/5.005/lib/perl5 /ms/dist/perl5/lib/perl5 /ms/dist/aurora/lib/perl5 . --- Environment for perl 5.00503: HOME=/ms/user/w/wpm LANG (unset) LANGUAGE (unset) LD_LIBRARY_PATH=/usr/dt/lib:/usr/openwin/lib:/ms/dist/aurora/lib LOGDIR (unset) PATH=/ms/dist/perl5/bin:/ms/dist/i18n/bin:/ms/dist/afs/PROJ/vms/beta/common/bin:/ms/dist/afs/PROJ/vms/beta/common/sbin:/ms/dist/msde/PROJ/msde/1.4/bin:/ms/user/w/wpm/bin:/ms/user/w/wpm/bin/@sys:/ms/dist/aurora/hackbin:/ms/dist/aurora/bin:/usr/dt/bin:/usr/openwin/bin:/bin:/usr/ccs/bin:/usr/ucb:/ms/dist/fsf/bin:/ms/dist/afs/bin:/ms/dist/aurora/sbin:/usr/sbin:/ms/dist/afs/sbin:/ms/dist/fidunix/bin:.:/ms/dist/eoffice/bin:/ms/dist/mq/sbin:/ms/dist/mq/bin:/opt/mqm/bin:/opt/mqm/samp/bin:/ms/dist/syb/bin PERL_BADLANG (unset) SHELL=/bin/ksh

This service is sponsored and maintained by Best Practical Solutions and runs on infrastructure.

For issues related to this RT instance (aka "perlbug"), please contact perlbug-admin at