in reply to Re: ExtUtils::MakeMaker, Makefile.PL: modify existing targets like "all" (as in make all) or "install"
in thread ExtUtils::MakeMaker, Makefile.PL: modify existing targets like "all" (as in make all) or "install"

OK, but do I have to run the overwritten method explicitly? It seems to do nothing:

use 5.006; use strict; use warnings; use ExtUtils::MakeMaker; my %WriteMakefileArgs = ( NAME => 'A::B', AUTHOR => q{ah <abc@abc.abc>}, VERSION_FROM => 'lib/A/B.pm', ABSTRACT_FROM => 'lib/A/B.pm', LICENSE => 'artistic_2', MIN_PERL_VERSION => '5.006', CONFIGURE_REQUIRES => { 'ExtUtils::MakeMaker' => '0', }, TEST_REQUIRES => { 'Test::More' => '0', }, PREREQ_PM => { #'ABC' => '1.6', #'Foo::Bar::Module' => '5.0401', }, dist => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', }, clean => { FILES => 'A-B-*' }, ); # Compatibility with old versions of ExtUtils::MakeMaker unless (eval { ExtUtils::MakeMaker->VERSION('6.64'); 1 }) { my $test_requires = delete $WriteMakefileArgs{TEST_REQUIRES} || {} +; @{$WriteMakefileArgs{PREREQ_PM}}{keys %$test_requires} = values %$ +test_requires; } unless (eval { ExtUtils::MakeMaker->VERSION('6.55_03'); 1 }) { my $build_requires = delete $WriteMakefileArgs{BUILD_REQUIRES} || +{}; @{$WriteMakefileArgs{PREREQ_PM}}{keys %$build_requires} = values % +$build_requires; } delete $WriteMakefileArgs{CONFIGURE_REQUIRES} unless eval { ExtUtils::MakeMaker->VERSION('6.52'); 1 }; delete $WriteMakefileArgs{MIN_PERL_VERSION} unless eval { ExtUtils::MakeMaker->VERSION('6.48'); 1 }; delete $WriteMakefileArgs{LICENSE} unless eval { ExtUtils::MakeMaker->VERSION('6.31'); 1 }; WriteMakefile(%WriteMakefileArgs); sub MY::all_target { my $self = shift; die 123; return <<'MAKE_EXT'; all :: pure_all translations manifypods $(NOECHO) $(NOOP) MAKE_EXT }

Also, no change if placed before WriteMakefile()

  • Comment on Re^2: ExtUtils::MakeMaker, Makefile.PL: modify existing targets like "all" (as in make all) or "install"
  • Select or Download Code

Replies are listed 'Best First'.
Re^3: ExtUtils::MakeMaker, Makefile.PL: modify existing targets like "all" (as in make all) or "install"
by Corion (Patriarch) on Sep 17, 2025 at 16:42 UTC

    Weird. I was going from Overriding MakeMaker Methods, where it claims that stuffing things into MY:: will make them override the rest.

    This is somewhat mildly corroborated by the EU:MM object hierarchy but I have to shamefully admit that I did not test this.

      Oh I found something in ExtUtils::MM_Unix:

      Not all of the methods below are overridable in a Makefile.PL. Overridable methods are marked as (o). All methods are overridable by a platform specific MM_*.pm file.

      So, for example sub MY::c_o { "hello" } works but sub MY::all_target{ ... } does not.

      I ended up using all_targets(o) like this (note that I am using the 2nd method you mentioned, i.e. overriding by creating the MY package explicitly because I want access to the SUPER:

      ... WriteMakefile(%WriteMakefileArgs); package MY; sub top_targets { my $self = shift; my $orig_all = $self->SUPER::top_targets(); # translations target at the end here: $orig_all =~ s/\blinkext\b/linkext translations/; return $orig_all }

      This works but I am absolutely not sure I have the order of the targets right.

Re^3: ExtUtils::MakeMaker, Makefile.PL: modify existing targets like "all" (as in make all) or "install"
by choroba (Cardinal) on Sep 17, 2025 at 16:31 UTC
    You were supposed to subclass the ExtUtils::MakeMaker into the MY class, if I understand it correctly. Do I?

    map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]