I have perl 5.10.0. Ikiwiki 2.44 compiles fine. Compiling 2.45 fails after 'make':
perl -Iblib/lib ikiwiki.out -libdir . -setup docwiki.setup -refresh
refreshing wiki..
docwiki.setup: Failed to load plugin IkiWiki::Plugin::goodstuff: Failed to load plugin IkiWiki::Plugin::shortcut: Too many arguments for IkiWiki::srcfile at IkiWiki/Plugin/shortcut.pm line 16, near "1)"
Compilation failed in require at (eval 31) line 2.
BEGIN failed--compilation aborted at (eval 31) line 2.
BEGIN failed--compilation aborted at (eval 23) line 2.
BEGIN failed--compilation aborted at (eval 10) line 21.
make: *** [extra_build] Error 255
I can't reproduce this. It looks like your IkiWiki.pm is out of sync with
your IkiWiki/Plugin/shortcut.pm. The ones distributed in 2.45 are in
sync. Or your perl is failing to use the right version of Ikiwiki.pm,
perhaps using a previously installed version. But the -Iblib/lib
instructs perl to look in that directory first, and the Makefile
puts Ikiwiki.pm there. --[[Joey]]
I removed all traces of the previous installation, and now 2.45 compiles.
I don't know why it was picking up the old version of Ikiwiki.pm, but now it
works. Please close this bug, and thanks for the help.
Where were the files from the old installation? I still don't
understand why they would be seen, since -Iblib/lib is passed to perl.
--[[Joey]]
They were under /usr/local/{bin,lib,share}. I can try to provide more info,
or try to reproduce it, if you need me to.
Well, here are some things to try.
perl -Iblib/lib -V
This should have blib/lib first in the listed @INC
joey@kodama:~/src/ikiwiki>strace perl -Iblib/lib -e 'use IkiWiki' 2>&1 |grep IkiWiki.pm
stat64("blib/lib/IkiWiki.pmc", 0xbfa1594c) = -1 ENOENT (No such file or directory)
stat64("blib/lib/IkiWiki.pm", {st_mode=S_IFREG|0444, st_size=31982, ...}) = 0
open("blib/lib/IkiWiki.pm", O_RDONLY|O_LARGEFILE) = 5
This is how perl finds IkiWiki.pm here. Note that I've run "make" first.
OK, this is what I'm getting:
$ perl -Iblib/lib -V
@INC:
blib/lib
/usr/lib/perl5/site_perl/5.10.0
/usr/share/perl5/site_perl/5.10.0
/usr/lib/perl5/vendor_perl
/usr/share/perl5/vendor_perl
/usr/share/perl5/vendor_perl
/usr/lib/perl5/core_perl
/usr/share/perl5/core_perl
/usr/lib/perl5/current
/usr/lib/perl5/site_perl/current
I ran the following in my current 2.45 source dir, where the make
already succeded. If you need it, I can post the output
in the case where make
fails.
$ strace perl -Iblib/lib -e 'use IkiWiki' 2>&1 |grep IkiWiki.pm
stat64("blib/lib/IkiWiki.pmc", 0xbfa6167c) = -1 ENOENT (No such file or directory)
stat64("blib/lib/IkiWiki.pm", {st_mode=S_IFREG|0444, st_size=31901, ...}) = 0
open("blib/lib/IkiWiki.pm", O_RDONLY|O_LARGEFILE) = 3
I need to see it in the case where it's failing. --[[Joey]]
I finally had some time to look into this again.
I wiped ikiwiki off my system, and then installed version 2.41. I tried installing
2.46 and get the same error as above, so I'll be using 2.46 below. (BTW, the debian
page still lists 2.45 as current; I had to fiddle with the download link to get 2.46).
After running ./Makefile.PL
I get:
$ perl -Iblib/lib -V
[bunch of lines snipped]
@INC:
blib/lib
[bunch of paths snipped]
Running the strace:
$ strace perl -Iblib/lib -e 'use IkiWiki' 2>&1 |grep IkiWiki.pm
I get a bunch of ENOENTs and then at the end:
stat64("./IkiWiki.pmc", 0xbfa2fe5c) = -1 ENOENT (No such file or directory)
stat64("./IkiWiki.pm", {st_mode=S_IFREG|0644, st_size=31987, ...}) = 0
open("./IkiWiki.pm", O_RDONLY|O_LARGEFILE) = 3
After running make
(and having it fail as described above):
$ strace perl -Iblib/lib -e 'use IkiWiki' 2>&1 |grep IkiWiki.pm
stat64("blib/lib/IkiWiki.pmc", 0xbfd7999c) = -1 ENOENT (No such file or directory)
stat64("blib/lib/IkiWiki.pm", {st_mode=S_IFREG|0444, st_size=31901, ...}) = 0
open("blib/lib/IkiWiki.pm", O_RDONLY|O_LARGEFILE) = 3
I don't know what is going on, but I'll run any more tests you need me to.
No help.
The only further thing I can think to try is strace -f
the entire failing
make
run (or the ikiwiki command that's failing in it, if you can
reproduce the failure at the command line). --[[Joey]]
I have 2.46 installed and I can reproduce the bug reported against 2.49. The command that fails is:
$ /usr/bin/perl -Iblib/lib ikiwiki.out -libdir . -setup docwiki.setup -refresh
docwiki.setup: Failed to load plugin IkiWiki::Plugin::inline: Too many arguments for IkiWiki::htmlize at IkiWiki/Plugin/inline.pm line 359, near "))"
Compilation failed in require at (eval 14) line 2.
BEGIN failed--compilation aborted at (eval 14) line 2.
BEGIN failed--compilation aborted at (eval 10) line 21.
strace -f produces a 112K file. I don't know enough to be comfortable analyzing it.
However, lines like:
stat64("/usr/local/share/perl5/site_perl/5.10.0/IkiWiki.pm", {st_mode=S_IFREG|0444, st_size=31982, ...}) = 0
make me think the make process is not completely independent of a previous
installation. Joey, should I email you the strace log file?
Email it (joey@ikiwiki.info), or post it to a website somewhere.
--[[Joey]]
The relevant part of the file is:
execve("/usr/bin/perl", ["/usr/bin/perl", "-Iblib/lib", "ikiwiki.out", "-libdir", ".", "-setup", "docwiki.setup", "-refresh"], [/* 55 vars */]) = 0
[...]
stat64("blib/lib/5.10.0/i686-linux-thread-multi", 0xbfa72240) = -1 ENOENT (No such file or directory)
stat64("blib/lib/5.10.0", 0xbfa72240) = -1 ENOENT (No such file or directory)
stat64("blib/lib/i686-linux-thread-multi", 0xbfa72240) = -1 ENOENT (No such file or directory)
[...]
stat64("/usr/local/share/perl5/site_perl/5.10.0/IkiWiki.pmc", 0xbfa71e5c) = -1 ENOENT (No such file or directory)
stat64("/usr/local/share/perl5/site_perl/5.10.0/IkiWiki.pm", {st_mode=S_IFREG|0444, st_size=31982, ...}) = 0
open("/usr/local/share/perl5/site_perl/5.10.0/IkiWiki.pm", O_RDONLY|O_LARGEFILE) = 4
So it doesn't look for IkiWiki.pm in blib at all. But it clearly has been asked to look in blib, since it
looks for the 3 directories in it. When I run the same thing locally, I get:
execve("/usr/bin/perl", ["/usr/bin/perl", "-Iblib/lib", "ikiwiki.out", "-libdir", ".", "-setup", "docwiki.setup", "-refresh"], [/* 55 vars */]) = 0
[...]
stat64("blib/lib/5.10.0/i486-linux-gnu-thread-multi", 0xbf84f320) = -1 ENOENT (No such file or directory)
stat64("blib/lib/5.10.0", 0xbf84f320) = -1 ENOENT (No such file or directory)
stat64("blib/lib/i486-linux-gnu-thread-multi", 0xbf84f320) = -1 ENOENT (No such file or directory)
[...]
stat64("blib/lib/IkiWiki.pmc", 0xbf84ef4c) = -1 ENOENT (No such file or directory)
stat64("blib/lib/IkiWiki.pm", {st_mode=S_IFREG|0444, st_size=32204, ...}) = 0
open("blib/lib/IkiWiki.pm", O_RDONLY|O_LARGEFILE) = 6
The thing I really don't understand is why, on the system where perl fails
to look in blib when straced as above, we've already established it does
look for it when perl -Iblib/lib -e 'use IkiWiki'
is straced.
The only differences between the two calls to perl seem to be:
- One runs
perl
, and the other /usr/bin/perl
-- are these really
the same program? Does perl -lblib/lib ikiwiki.out -libdir . -setup docwiki.setup -refresh
fail the same way as the /usr/bin/perl
variant?
- The
-libdir .
, which causes ikiwiki to modify @INC
, adding "." to
the front of it.
I'm entirely at a loss as to why I cannot reproduce this with the same
versions of perl and ikiwiki as the two people who reported it. There must
be something unusual about your systems that we have not figured out yet. --[[Joey]]
Joey, thanks for your time and effort looking into this.
I checked with which
: perl
is indeed /usr/bin/perl
. The commands fail similarly when
calling perl
and /usr/bin/perl
.
However, you might be into something with your libdir
idea. If I remove it from the
command line, the command succeeds. In other words, if I run
perl -Iblib/lib ikiwiki.out -setup docwiki.setup -refresh
then it works perfectly.
Well, that's just weird, because libdir
is handled by code in IkiWiki.pm.
So I don't see how setting it could affect its searching for IkiWiki.pm at all,
actually. It could only affect its searching for files loaded later. Anyway,
can I get a strace of it succeeding this way?
Also, can you show me the first 15 lines of your ikiwiki.out
? It's occurred to me
you might have an unusual use lib
line in it.
By the way, I'm running Arch linux. The perl build script is a bit long, but I
see they install a patch to modify @INC: http://repos.archlinux.org/viewvc.cgi/perl/repos/core-i686/perl-5.10.0-archlinux-inc-order.patch?revision=1&view=markup
Would you suggest I try rebuilding perl without this patch? Debian has a huge perl patch (102K!);
it's not straightforward for me to see if they do something similar to Arch.
I think Debian has a similar patch.
[[done]] -- apparently this was a problem due to a distribution's
customisation to perl, or something. Seems to late now to track down what,
unfortunatly. And ikiwiki's Makefile no longer uses the "-libdir" switch
that seemed to trigger the bug. --[[Joey]]