Perl / perl5

🐪 The Perl programming language
https://dev.perl.org/perl5/
Other
1.85k stars 527 forks source link

5.005_03 h2ph.PL can generate syntactically incorrect _h2ph_pre.ph #70

Closed p5pRT closed 20 years ago

p5pRT commented 24 years ago

Migrated from rt.perl.org#872 (status was 'resolved')

Searchable as RT872$

p5pRT commented 24 years ago

From wpm@ms.com

The h2ph included with 5.00503 will autogenerate _h2ph_pre.ph\, 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/_h2ph_pre.ph line 2. Can't use subscript on subroutine entry at /usr/tools/lib/perl5/_h2ph_pre.ph line 2\, near "} }" (Did you mean $ or @​ instead of &?) syntax error at /usr/tools/lib/perl5/_h2ph_pre.ph line 4\, near "unless"

The offensive line is​:

unless (defined &) { sub () { "" } }

This causes modules such as Sys​::Syslog\, which requires syslog.ph\, 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 _h2ph_pre.ph\, 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/libc.so\, 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