Skip Menu |

This queue is for tickets about the CPAN CPAN distribution.

Report information
The Basics
Id: 35256
Status: open
Priority: 0/
Queue: CPAN

People
Owner: Nobody in particular
Requestors: tony [...] irational.org
Cc:
AdminCc:

Bug Information
Severity: Important
Broken in: 1.9205
Fixed in: (no value)



Subject: perldoc command broken, 2 lines long proposed fix provided
perldoc command doesn't find lynx and html2text correctly. I added little bit of debugging and the following shows the problem: cpan[1]> perldoc OpenOffice::OODoc Debug(CPAN,CPAN.pm,273): line[perldoc|OpenOffice::OODoc] Running perldoc for module 'OpenOffice::OODoc' + _display_url(http://search.cpan.org/perldoc?OpenOffice::OODoc) /usr/bin/lynx + _check_binary(/usr/bin/lynx) CPAN: File::Which loaded ok (v0.05) File::Which installed. Looking for /usr/bin/lynx. + _check_binary(html2text.pl) File::Which installed. Looking for html2text.pl. You need to install lynx or html2text.pl to use this feature. Since I do have both lynx and html2text installed, i tried: perl -MFile::Which -e 'print File::Which::which("/usr/bin/lynx");' again no result. However, when i tried: perl -MFile::Which -e 'print File::Which::which("lynx");' /usr/bin/lynx Which reveals our problem: we're passing CPAN::config->{lynx} to File:Which, in this case /usr/bin/lynx. Instead, what File::Which needs is just the binary name on its own eg "lynx". Problem is in: #-> sub CPAN::Distribution::_display_url In code: my $web_browser = $CPAN::Config->{'lynx'} || undef; $CPAN::Frontend->myprint(qq{$web_browser \n}); my $web_browser_out = $web_browser ? CPAN::Distribution->_check_binary($self,$web_browser) : undef; How we resolve it? Do we pass to File::Which only the binary name (lynx), as opposed to whole path (/usr/bin/lynx)? That solves the problem, at least on my machine (debian/unstable). All i did is to replace: my $web_browser = $CPAN::Config->{'lynx'} || undef; with: my ($volume,$directories,$file) = File::Spec->splitpath( $CPAN::Config->{'lynx'} ); my $web_browser = $file || undef; While looking at this, i had a look at CPAN bugs and realized that my perldoc/recent additions caused some problems, as seen in #21791 and #22893 . I'll have a look at HTML::Display and check whether it would be a good replacement for lynx-via-File::Which path. By default, HTML::Display on my laptop opens Konqueror, although i actually run under Gnome. What i wanted with perldoc command is precisely the opposite, to be able to remain in shell and still read documents quickly, so that i can inspect module docs while installing them. I'll do more checks on HTML::Display. regards, toni
Subject: env.txt
Linux giant 2.6.25-t1 #1 SMP Sun Apr 20 00:35:49 BST 2008 i686 GNU/Linux Summary of my perl5 (revision 5 version 8 subversion 8) configuration: Platform: osname=linux, osvers=2.6.22.10, archname=i486-linux-gnu-thread-multi uname='linux ninsei 2.6.22.10 #1 smp preempt thu oct 25 08:49:01 pdt 2007 i686 gnulinux ' config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN -Dcccdlflags=-fPIC -Darchname=i486-linux-gnu -Dprefix=/usr -Dprivlib=/usr/share/perl/5.8 -Darchlib=/usr/lib/perl/5.8 -Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 -Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl/5.8.8 -Dsitearch=/usr/local/lib/perl/5.8.8 -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1 -Dsiteman3dir=/usr/local/man/man3 -Dman1ext=1 -Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Ud_ualarm -Uusesfio -Uusenm -Duseshrplib -Dlibperl=libperl.so.5.8.8 -Dd_dosuid -des' hint=recommended, useposix=true, d_sigaction=define usethreads=define use5005threads=undef useithreads=define usemultiplicity=define useperlio=define d_sfio=undef uselargefiles=define usesocks=undef use64bitint=undef use64bitall=undef uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64', optimize='-O2', cppflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include' ccversion='', gccversion='4.2.3 20071014 (prerelease) (Debian 4.2.2-3)', 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, prototype=define Linker and Libraries: ld='cc', ldflags =' -L/usr/local/lib' libpth=/usr/local/lib /lib /usr/lib libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt perllibs=-ldl -lm -lpthread -lc -lcrypt libc=/lib/libc-2.6.1.so, so=so, useshrplib=true, libperl=libperl.so.5.8.8 gnulibc_version='2.6.1' Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E' cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib' Characteristics of this binary (from libperl): Compile-time options: MULTIPLICITY PERL_IMPLICIT_CONTEXT PERL_MALLOC_WRAP THREADS_HAVE_PIDS USE_ITHREADS USE_LARGE_FILES USE_PERLIO USE_REENTRANT_API Built under linux Compiled at Nov 12 2007 06:07:55 @INC: /etc/perl /usr/local/lib/perl/5.8.8 /usr/local/share/perl/5.8.8 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.8 /usr/share/perl/5.8 /usr/local/lib/site_perl .
Subject: Re: [rt.cpan.org #35256] perldoc command broken, 2 lines long proposed fix provided
Date: Mon, 21 Apr 2008 08:12:08 -0700
To: bug-CPAN [...] rt.cpan.org
From: Michael G Schwern <schwern [...] pobox.com>
Toni Prug via RT wrote: Show quoted text
> Which reveals our problem: we're passing CPAN::config->{lynx} to > File:Which, in this case /usr/bin/lynx. Instead, what File::Which needs > is just the binary name on its own eg "lynx". > > Problem is in: > #-> sub CPAN::Distribution::_display_url > In code: > > my $web_browser = $CPAN::Config->{'lynx'} || undef; > $CPAN::Frontend->myprint(qq{$web_browser \n}); > my $web_browser_out = $web_browser > ? CPAN::Distribution->_check_binary($self,$web_browser) > : undef; > > How we resolve it? Do we pass to File::Which only the binary name > (lynx), as opposed to whole path (/usr/bin/lynx)? That solves the > problem, at least on my machine (debian/unstable).
If you have the full path to lynx, why bother using which at all? -- 185. My name is not a killing word. -- The 213 Things Skippy Is No Longer Allowed To Do In The U.S. Army http://skippyslist.com/list/
Subject: Re: [rt.cpan.org #35256] perldoc command broken, 2 lines long proposed fix provided
Date: Mon, 21 Apr 2008 20:14:48 +0100
To: bug-CPAN [...] rt.cpan.org
From: Toni Prug <tony [...] irational.org>
Show quoted text
> If you have the full path to lynx, why bother using which at all?
If lynx is in Config, it will make sure it actually exists. Otherwise, good point. If Config has /usr/bin/lynx for lynx, and lynx is not on the system, perldoc will fail with: sh: /usr/bin/lynx: No such file or directory which is not that bad. Using which would enable us to exit better than this error though. So, should we only check whether CPAN::Config->{lynx} is defined? And if it is, let it run? Also, in POD, we have the following ---- =head2 Configuring lynx or ncftp for going through a firewall If you can go through your firewall with e.g. lynx, presumably with a command such as /usr/local/bin/lynx -pscott:tiger ---- in which case using which would ignore this setting and use only the path that which finds. Hmm. So the meta code could look like: CPAN::Config->{lynx} set ? YES - proceed with running it NO - use which to find it Which i tested with following code change inside _display_url: my $web_browser = $CPAN::Config->{'lynx'} ? $CPAN::Config->{'lynx'} : CPAN::Distribution->_check_binary($self,'lynx'); $CPAN::Frontend->myprint(qq{$web_browser \n}); if ($web_browser) { # web browser found, run the action my $browser = $CPAN::Config->{'lynx'} ? CPAN::HandleConfig->safe_quote($CPAN::Config->{'lynx'}) : $web_browser; In this case, we leave Config path as it is, and look for lynx binary only if the config is empty. I removed lynx and tested, works OK for me. As to the comment inside _display_url that says: # should we define it in the config instead? my $html_converter = "html2text.pl"; I think that we should. For example, on my debian/unstable it is "html2text", without .pl extension, which this code can't accommodate. I'm happy to do these changes (after my May exam) if no one objects. toni
Subject: Re: [rt.cpan.org #35256] perldoc command broken, 2 lines long proposed fix provided
Date: Mon, 21 Apr 2008 11:35:15 -0700
To: bug-CPAN [...] rt.cpan.org
From: Michael G Schwern <schwern [...] pobox.com>
Toni Prug via RT wrote: Show quoted text
> Queue: CPAN > Ticket <URL: http://rt.cpan.org/Ticket/Display.html?id=35256 > >
>> If you have the full path to lynx, why bother using which at all?
> > If lynx is in Config, it will make sure it actually exists. Otherwise, > good point. If Config has /usr/bin/lynx for lynx, and lynx is not on the > system, perldoc will fail with: > > sh: /usr/bin/lynx: No such file or directory > > which is not that bad. Using which would enable us to exit better than > this error though. > > So, should we only check whether CPAN::Config->{lynx} is defined? > And if it is, let it run?
Yes, trust that the configuration is correct. If it's not, address it inside the config code, not at every point it's used. -- 151. The proper way to report to my Commander is “Specialist Schwarz, reporting as ordered, Sir” not “You can’t prove a thing!” -- The 213 Things Skippy Is No Longer Allowed To Do In The U.S. Army http://skippyslist.com/list/