Martin Evans wrote:
> Apologies for bothering you but I am not sure if this is a bug so did
> not want to rtpan it.

Thanks for that, but it's actually more of a bother this way and I encourage
folks to report first, and worry about whether or not it's actually a bug later.

Takes more effort to make a ticket then to close one, I'd rather have the
not-a-bug discussion on record in the tracker.


> Between ExtUtils::MakeMaker 6.32 and 6.33 the order that CONFIGURE is
> run has changed from after PREREQ_PM to before PREREQ_PM.

I love reading bug reports about MakeMaker because I learn about these
surprising new features. :)  I had no idea about CONFIGURE.


> I don't think
> it can be classed as a bug since the pod does not specifically say
> CONFIGURE is run after PREREQ_PM. This causes me a problem as I was
> using a require in CONFIGURE sub which was also in PREREQ_PM so
> PREREQ_PM would error if the required module was not found (and hence
> not cause a failure on cpan-testers). Since 6.33 the require in
> CONFIGURE fails which causes a cpan-testers failure. The thread on
> cpan-testers-discuss where this came about is:
> 
> http://www.mail-archive.com/cpan-testers-discuss%40perl.org/msg00076.html
> 
> and my specific code is:
> 
>     $opts{PREREQ_PM} = { "DBI" => 1.21 };
>     $opts{CONFIGURE} = sub {
>         require DBI::DBD;
>         my $dbi_arch_dir = dbd_dbi_arch_dir();
>         if (exists($opts{INC})) {
>             return {INC => "$opts{INC} -I$dbi_arch_dir"};
>         } else {
>             return {INC => "-I$dbi_arch_dir"};
>         }
>     };
> }
> 
> My module needs DBI installing first because of the call to
> dbd_dbi_arch_dir() above which I need to change INC. I was relying on
> PREREQ_PM failing before CONFIGURE was run.

This is one of those interesting "that doesn't work... and never should have
worked" situations.  The CONFIGURE and PREREQ_PM logic haven't been touched in
years.  And it shouldn't work anyway because whether or not the CONFIGURE is
run before or after PREREQ_PM, dependencies aren't resolved until after the
whole Makefile.PL is run.

I see the missing piece is that you were using PREREQ_FATAL.  Yes, that did
move in 6.33.  I didn't log why, it was part of some changes to the
PREREQ_FATAL docs and message.  The code move doesn't look like it was
necessary.  I guess I can move it back.

But I don't know if it will help.  I know neither CPAN nor CPANPLUS do
anything with a PREREQ_FATAL message.  They're left with no Makefile, so it's
going to fail anyway.  Maybe CPAN::Reporter has special logic for that?

As mentioned in the thread, configure_requires is the proper way to handle
this.  At the moment there is no documented way to do this in MakeMaker, but
Module::Build can do it.  Also while CPAN supports it, CPANPLUS still doesn't
support it.

Welcome to one of the nasty little bits of CPAN.  We're working on it.


-- 
Stabbing you in the face so you don't have to.

Reply via email to