in reply to cpan module with binary data: when to build?

You are running the example db copy operation in the perl Makefile.PL stage of building, which is too soon. The solution is to make the copy a target in the make stage. PREREQ having hauled in DBD::SQLite, the copy should work then.

According to the ExtUtils::MakeMaker pod, you can add a target to the default build target with the lowercase parameter,

depend { all => 'example_data' }
and define the target with a &MY::postamble, which I think should look something like this,
sub MY::postamble { return << "DODB"; example_data \tperl -e'\\ \t your;\\ \t code;\\ \t here;' DODB }
That's untested, but something like it should work.

After Compline,
Zaxo

Replies are listed 'Best First'.
Re^2: cpan module with binary data: when to build? (working)
by thpfft (Chaplain) on Sep 02, 2004 at 20:45 UTC

    update: lots of whining snipped out here.

    Thank you. And Smylers. After quite a lot of headbanging, and with your help, I've got something that seems to work.

    I can't use this:

    depend => { all => 'example_data' }

    because it creates a single-colon rule for 'all' and there is already a double-colon rule for 'all' (and for 'test', and 'install'). The answer is to intercept the double-colon rule and prepend the extra dependency. It's ugly, but it works. The same technique is used in the Template Toolkit (ie I nicked it from there), and if it's good enough for TT...

    This is what I've added to the usual Makefile.PL:

    package MY; sub postamble { return <<"EOF"; data: \tperl ./useful/makedb.pl EOF } sub test { my $class = shift; my $makefragment = $class->SUPER::test(@_); $makefragment =~ s/^(test ::)/$1 data/m; return $makefragment; } sub install { my $class = shift; my $makefragment = $class->SUPER::install(@_); $makefragment =~ s/^(install ::)/$1 data/m; return $makefragment; }

    The 'data' target just invokes an external script, as you can see. Cleaner that way, and easier for people to edit.

    Thanks for your help.