Since I use Dist::Zilla to help manage my Perl distributions, I wanted to use it with the XS package that I am working on. This post is just a small note how how to do that if you are using Alien::Base to build your native library.
Dist::Zilla usually writes it's own Makefile.PL so that
ExtUtils::MakeMaker will know how to build, test, and
install the code. However, since I'm using Alien::Base, I need to pass the
compiler and linker flags to ExtUtils::MakeMaker as well. To do that, I grabbed
the Dist::Zilla::Plugin::MakeMaker::Awesome
plugin. Setting that up in your dist.ini is relatively straightforward:
The line
[=inc::MyLibMakeMaker]
specifies that the code that will be used to generate the Makefile.PL will be
in a module called inc/MyLibMakeMaker.pm. Now, in that file, I'll need to specify
the compilation flags by calling the cflags and libs methods on my Alien::Base
subclass (Alien::MyLib). But this needs to happen when Makefile.PL is run by
the user, not when Dist::Zilla writes out the file. The following code does that
by appending our own options to the string we write out to in Makefile.PL.
We use the CONFIGURE option to set CCFLAGS and LIBS instead of setting
CCFLAGS and LIBS directly because these need to be set after the
Alien::MyLib prerequisite has been met.