Apache::TestMM(3)

πŸ“¦ version 2.0.13, in nixos 26.05, nixpkgs unstable

πŸ’… Apache::TestMM πŸ’…

ok so this is a page from the User Contributed Perl Documentation section of the manual (yes bestie, the perl people let users contribute docs, iconic behaviour honestly 🫢). It's all about a little wrapper module that makes ExtUtils::MakeMaker play nice with Apache::Test. Let's get into it ✨


🌸 NAME 🌸

Apache::TestMM β€” it provides MakeMaker Wrapper Methods, periodt. That's the whole vibe. πŸŽ€


πŸ¦‹ SYNOPSIS πŸ¦‹

like, here's the whole flow in one go:

  require Apache::TestMM;

  # import MY::test and MY::clean overrides for MM
  Apache::TestMM->import(qw(test clean));

  # parse command line args
  Apache::TestMM::filter_args();

  # autogenerate the script
  Apache::TestMM::generate_script('t/TEST');

that's it, that's the ritual πŸ’…


✨ DESCRIPTION ✨

Apache::TestMM hands you wrappers for the ExtUtils::MakeMaker craft (yes, "craft", like it's a whole artisanal thing 🧚). The point? It makes extending the autogenerated Makefile with Apache::Test so much easier. no cap, it just does the fiddly bits for you.


πŸ”₯ FUNCTIONS πŸ”₯

⭐ import

you can do it either way, bestie:

  use Apache::TestMM qw(test clean);

or:

  Apache::TestMM->import(qw(test clean));

Either one imports MY:: overrides for the default ExtUtils::MakeMaker test and clean targets β€” exactly as if you'd written this yourself in Makefile.PL:

  sub MY::test {...}
  sub MY::clean {...}

Apache::TestMM does this for you so that these Makefile targets will run the Apache server and the tests for it, and clean up after its mess. (the mess is real 😭 but she handles it 🫢)


🌈 filter_args

ok so picture this:

  push @ARGV, '-apxs', $apxs_path;
  Apache::TestMM::filter_args();
  WriteMakefile(...);

When WriteMakefile() is called it parses @ARGV, hoping to find special options like PREFIX=/home/stas/perl. But here's the thing β€” Apache::Test accepts a lot of configuration options of its own πŸ‘€. So when Apache::TestMM::filter_args() is called, it removes any Apache::Test-specific options from @ARGV and stores them internally, so when WriteMakefile() is called they aren't in @ARGV and thus won't be processed by WriteMakefile(). clean. πŸ’…

You can set the options right when Makefile.PL is called:

  % perl Makefile.PL -apxs /path/to/apxs

Or you can push them manually to @ARGV from the code:

  push @ARGV, '-apxs', $apxs_path;

And then when:

  Apache::TestMM::generate_script('t/TEST');

is called, the Apache::Test-specific options extracted by Apache::TestMM::filter_args() are written to the autogenerated file. In our example, the autogenerated t/TEST will include:

  %Apache::TestConfig::Argv = qw(apxs /path/to/apxs);

which is going to be used by the Apache::Test runtime. she remembers everything, bestie 🧠✨

The other frequently used options are:

  • -httpd β€” tells it where to find the httpd (usually when the -apxs option is not used)
  • -libmodperl β€” use a specific mod_perl shared object (if your mod_perl is built as DSO)
  • -maxclients β€” change the default number of the configured MaxClients directive
  • -port β€” start the server on a specific port
  • etc. (yes, "etc.", the manpage said it, not me πŸ™ˆ)

To get the complete list of available configuration options and their purpose and syntax, run:

  % perl -MApache::TestConfig -le 'Apache::TestConfig::usage()'
πŸ’‘ lowkey a good idea: you may wish to document some of these in your application's README file, especially the -apxs and -httpd options. future-you will thank you, fr fr 🫢

πŸŽ€ generate_script

  Apache::TestMM::generate_script('t/TEST');

generate_script() accepts the name of the script to generate, and it'll look for a template with the same name and suffix .PL. So in our example it'll look for t/TEST.PL. The autogenerated script t/TEST will include the contents of t/TEST.PL, and special directives, including any configuration options passed via filter_args() called from Makefile.PL, special fixup code, etc. it's giving "glow up via template" 🌟


so yeah, that's the whole page, bestie β€” go forth and Makefile.PL with confidence πŸ‘‘

πŸ’– this page is from the User Contributed Perl Documentation, and it ships with perl v5.42.3, dated 2023-10-21. slay. πŸ’…βœ¨
πŸ“¦ where this page comes from