ASPN ActiveState Programmer Network
ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups


Recent Messages
List Archives
About the List
List Leaders
Subscription Options

View Subscriptions
Help

View by Topic
ActiveState
.NET Framework
Open Source
Perl
PHP
Python
Tcl
Web Services
XML & XSLT

View by Category
Database
General
SOAP
System Administration
Tools
User Interfaces
Web Programming
XML Programming


MyASPN >> Mail Archive >> perl5-porters
perl5-porters
[ID 20000928.002] perlcc & ByteCode.pm option mismatch
by Nicholas Clark other posts by this author
Sep 28 2000 12:18PM messages near this date
RE: Goodbye, Farewell, Amen | Re: [ID 20000928.001] Pod::Text not -w clean
This is a bug report for perl from nick@[...].cx,
generated with the help of perlbug 1.32 running under perl v5.7.0.


-----------------------------------------------------------------
[Please enter your report here]

perlcc, Stash and the C backends use -u to list packages to use
When Benjamin Stuhl improved Bytecode.pm so that it would only compile
named packages he used -P as his option.

As perlcc also eats all backend diagnostics if the backend exit code is
success, this hasn't been noticed.

Patches

1: Make perlcc for bytecode display "unexpected" output (ie anything other
   than "foo syntax OK"
2: Change Bytecode.pm to use -u instead of -P

With (1) not (2) the output looks like this:

nick@fruitbat [bleadperl]$ ./perl -Ilib utils/perlcc -B -vvvv test.pl 
utils/perlcc: Compiling test.pl
utils/perlcc: Calling ./perl -Ilib -I/usr/local/lib/perl5/5.7.0/i586-linux -I/usr/local/lib/
perl5/5.7.0 -I/usr/local/lib/perl5/site_perl/5.7.0/i586-linux -I/usr/local/lib/perl5/site_pe
rl/5.7.0 -I/usr/local/lib/perl5/site_perl -I.  -MB::Stash -c test.pl
utils/perlcc: Stash:   main GDBM_File Devel Devel::Peek Devel::DProf SDBM_File attrs Opcode 
attributes DB Data Data::Dumper IPC IPC::SysV re Fcntl ODBM_File subs ByteLoader DB_File Sto
rable File File::Glob POSIX Sys Sys::Hostname Sys::Syslog Socket
utils/perlcc: Writing on a.out
utils/perlcc: Compiling...
utils/perlcc: Calling ./perl -Ilib -I/usr/local/lib/perl5/5.7.0/i586-linux -I/usr/local/lib/
perl5/5.7.0 -I/usr/local/lib/perl5/site_perl/5.7.0/i586-linux -I/usr/local/lib/perl5/site_pe
rl/5.7.0 -I/usr/local/lib/perl5/site_perl -I.  -MO=Bytecode,-umain,-uGDBM_File,-uDevel,-uDev
el::Peek,-uDevel::DProf,-uSDBM_File,-uattrs,-uOpcode,-uattributes,-uDB,-uData,-uData::Dumper
,-uIPC,-uIPC::SysV,-ure,-uFcntl,-uODBM_File,-usubs,-uByteLoader,-uDB_File,-uStorable,-uFile,
-uFile::Glob,-uPOSIX,-uSys,-uSys::Hostname,-uSys::Syslog,-uSocket test.pl
utils/perlcc: Unexpected compiler output:
ignoring unknown option "umain"
 ignoring unknown option "uGDBM_File"
 ignoring unknown option "uDevel"
 ignoring unknown option "uDevel::Peek"
 ignoring unknown option "uDevel::DProf"
 ignoring unknown option "uSDBM_File"
 ignoring unknown option "uattrs"
 ignoring unknown option "uOpcode"
 ignoring unknown option "uattributes"
 ignoring unknown option "uDB"
 ignoring unknown option "uData"
 ignoring unknown option "uData::Dumper"
 ignoring unknown option "uIPC"
 ignoring unknown option "uIPC::SysV"
 ignoring unknown option "ure"
 ignoring unknown option "uFcntl"
 ignoring unknown option "uODBM_File"
 ignoring unknown option "usubs"
 ignoring unknown option "uByteLoader"
 ignoring unknown option "uDB_File"
 ignoring unknown option "uStorable"
 ignoring unknown option "uFile"
 ignoring unknown option "uFile::Glob"
 ignoring unknown option "uPOSIX"
 ignoring unknown option "uSys"
 ignoring unknown option "uSys::Hostname"
 ignoring unknown option "uSys::Syslog"
 ignoring unknown option "uSocket"
 No package specified for compilation, assuming main::

--- utils/perlcc.PL.orig  Fri Aug  4 13:35:21 2000
+++ utils/perlcc.PL   Thu Sep 28 11:34:48 2000
@@ -232,16 +232,17 @@
     vprint 3, "Calling $command";
 
        my ($output_r, $error_r) = spawnit($command);
-       my @output = @$output_r;
-       my @error = @$error_r;
 
-    if (@error && $? != 0) {
-        die "$0: $Input did not compile, which can't happen:\n@error\n";
+    if (@$error_r && $? != 0) {
+        die "$0: $Input did not compile, which can't happen:\n@$error_r\n";
+    } else {
+      my @error = grep { !/^$Input syntax OK$/o } @$error_r;
+      warn "$0: Unexpected compiler output:\n@error" if @error;
     }
 
     # Write it and leave.
-    print OUT @output               or die "can't write $Output: $!";
-    close OUT                       or die "can't close $Output: $!";
+    print OUT @$output_r               or die "can't write $Output: $!";
+    close OUT                          or die "can't close $Output: $!";
 
     # wait, how could it be anything but what you see next?
     chmod 0777 & ~umask, $Output    or die "can't chmod $Output: $!";
--- ext/B/B/Bytecode.pm.orig  Tue Aug 22 17:15:13 2000
+++ ext/B/B/Bytecode.pm Thu Sep 28 11:25:59 2000
@@ -850,7 +850,7 @@
                $compress_nullops = 1;
                $omit_seq = 1;
            }
-       } elsif ($opt eq "P") {
+       } elsif ($opt eq "u") {
            $arg ||= shift @options;
            push @packages, $arg;
        } else {
@@ -975,7 +975,7 @@
 Output (bytecode) assembler source rather than piping it
 through the assembler and outputting bytecode.
 
-=item B<-Ppackage> 
+=item B<-upackage> 
   
 Stores package in the output.
   
@@ -983,16 +983,16 @@
 
 =head1 EXAMPLES
 
-    perl -MO=Bytecode,-O6,-ofoo.plc,-Pmain foo.pl
+    perl -MO=Bytecode,-O6,-ofoo.plc,-umain foo.pl
 
-    perl -MO=Bytecode,-S,-Pmain foo.pl >  foo.S
+    perl -MO=Bytecode,-S,-umain foo.pl >  foo.S
     assemble foo.S >  foo.plc
 
 Note that C<assemble>  lives in the C<B> subdirectory of your perl
 library directory. The utility called perlcc may also be used to 
 help make use of this compiler.
 
-    perl -MO=Bytecode,-PFoo,-oFoo.pmc Foo.pm
+    perl -MO=Bytecode,-uFoo,-oFoo.pmc Foo.pm
 
 =head1 BUGS
 


Interesting, bytecode for package main only for perlcc is about 161,000
bytes and works enough to compile more bytecode. (But not enough to
give the -help message)
Whereas with the fixes above bytecode for all packages pulled in by perlcc
is 1398952 bytes and doesn't work:

nick@fruitbat [bleadperl]$ ./a.out   
Constant subroutine MAX_TRIES redefined at /usr/local/lib/perl5/5.7.0/constant.pm line 91.
Constant subroutine MINX redefined at /usr/local/lib/perl5/5.7.0/constant.pm line 91.
Constant subroutine TEMPXXX redefined at /usr/local/lib/perl5/5.7.0/constant.pm line 91.
Constant subroutine STANDARD redefined at /usr/local/lib/perl5/5.7.0/constant.pm line 91.
Constant subroutine MEDIUM redefined at /usr/local/lib/perl5/5.7.0/constant.pm line 91.
Constant subroutine HIGH redefined at /usr/local/lib/perl5/5.7.0/constant.pm line 91.
Can't upgrade that kind of scalar at ./a.out line 2.


Inspiration for what to do next?

Nicholas Clark

[Please do not change anything below this line]
-----------------------------------------------------------------
---
Flags:
    category=utilities
    severity=low
---
Site configuration information for perl v5.7.0:

Configured by nick at Fri Sep 15 16:17:09 BST 2000.

Summary of my perl5 (revision 5.0 version 7 subversion 0) configuration:
  Platform:
    osname=linux, osvers=2.2.16, archname=i586-linux
    uname='linux fruitbat 2.2.16 #6 tue aug 1 12:35:02 bst 2000 i586 unknown '
    config_args=''
    hint=previous, useposix=true, d_sigaction=define
    usethreads=undef use5005threads=undef useithreads=undef usemultiplicity=undef
    useperlio=define d_sfio=define uselargefiles=define usesocks=undef
    use64bitint=undef use64bitall=undef uselongdouble=undef
  Compiler:
    cc='cc', ccflags ='-D_REENTRANT -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_S
OURCE -D_FILE_OFFSET_BITS=64',
    optimize='-O2',
    cppflags='-D_REENTRANT -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_
FILE_OFFSET_BITS=64'
    ccversion='', gccversion='2.95.2 20000220 (Debian GNU/Linux)', gccosandvers=''
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
    ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=4, usemymalloc=n, prototype=define
  Linker and Libraries:
    ld='cc', ldflags =' -L/usr/local/lib'
    libpth=/usr/local/lib /lib /usr/lib
    libs=-lnsl -lndbm -lgdbm -ldbm -ldb -ldl -lm -lpthread -lc -lposix -lcrypt -lutil -lsfio
    libc=/lib/libc-2.1.3.so, so=so, useshrplib=false, libperl=libperl.a
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-rdynamic'
    cccdlflags='-fpic', lddlflags='-shared -L/usr/local/lib'

Locally applied patches:
    DEVEL7093

---
@INC for perl v5.7.0:
    /usr/local/lib/perl5/5.7.0/i586-linux
    /usr/local/lib/perl5/5.7.0
    /usr/local/lib/perl5/site_perl/5.7.0/i586-linux
    /usr/local/lib/perl5/site_perl/5.7.0
    /usr/local/lib/perl5/site_perl
    .

---
Environment for perl v5.7.0:
    HOME=/home/nick
    LANG=C
    LANGUAGE (unset)
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
    PERL_BADLANG (unset)
    SHELL=/bin/bash

Privacy Policy | Email Opt-out | Feedback | Syndication
© ActiveState Software Inc. All rights reserved