Re: ExtUtils::MakeMaker help - PL_FILES

Michael G Schwern <[email protected]> Tue, 27 Oct 2009 17:27:11 -0700
Newsgroups gmane.comp.lang.perl.modules.extutils-makemaker.devel
Message-ID <[email protected]>
Alberto Simões wrote:
> Heyas
> 
> Michael G Schwern wrote:
>>> I am using PL_FILES => { foo/bar.PL => foo/bar }, and foo/bar.PL uses a
>>> lateral file (say, ugh.txt) on the distro to build the script foo/bar.
>>>
>>> How can I force the dependency, so make knows it should rebuild foo/bar
>>> when I change ugh.txt?
>> You should be able to add the dep in a postamble.
>>
>> sub MY::postamble {
>>     return qq[
>>
>> foo/bar.PL :: ugh.txt
>>     $(NOOP)
>> ];
>> }
>>
> 
> Unfortunately it is not working. Tried also foo/bar :: ugh.txt but
> foo/bar is not rebuilt when I change ugh.txt

Ahh, it needs to be added as a dependency on the original statement.  That is:

foo/bar :: foo/bar.PL pm_to_blib
	$(PERLRUNINST) foo/bar.PL foo/bar

has to be changed to

foo/bar :: foo/bar.PL pm_to_blib ugh.txt
	$(PERLRUNINST) foo/bar.PL foo/bar

Unfortunately the only way to do this is to override processPL() and do a s/// 
on the output of $self->SUPER::processPL.

package MY;
sub processPL {
     my $self = shift;

     my $make = $self->SUPER::processPL(@_);
     $make =~ s{pm_to_blib}{pm_to_blib ugh.txt};

     return $make;
}

This simple s/// will break if you have more than one PL file.  Repairing it 
is left as an exercise for the reader.


-- 
E: "Would you want to maintain a 5000 line Perl program?"
d: "Why would you write a 5000 line program?"