On 05/04/2012 07:22, Marvin Humphrey wrote:
The patch sequence looks great. +1 to commit, with the caveat that I'd like to
relitigate the minimum version for Module::Build. :)
A few notes:
* The end product, Clownfish::CFC::Perl::Build has no POD describing its
public API. That's the most important part! You're such a strong coder
that we can have a lot of confidence in your implementations -- but we
need to build consensus about the public interface.
I suppose all the features utilized by the extension Build.PL file you
provided that are not in the Module::Build API constitute the
public API, no?
I will write some POD once the implementation is stable. Currently, the
C::C::P::B API looks like this:
C::C::P::B is a subclass of Module::Build.
There's a new constructor argument 'clownfish_params' that takes a
hashref containing the following entries:
* cf_include_dirs: arrayref of Clownfish include dirs containing .cfh
files. Empty by default. Extensions will typically set this to
cf_system_include_dirs (see below).
* extra_c_sources: arrayref of extra C source dirs or files. Empty by
default.
* autogen_header: header for autogenerated files. Defaults to a "do not
edit" text without license.
* core_source_dir: directory containing the core Clownfish sources (.cfh
and .c files). Defaults to 'core' or '../core'. Doesn't have to be
provided normally.
There's also an accessor for 'clownfish_params'.
Then there are two class methods:
my @dirs = C::C::P::B->cf_system_include_dirs;
Returns the list of system-wide Clownfish include dirs in
$Config{installsitearch} and $Config{installvendorarch}.
my $path = C::C::P::B->cf_system_library_file($module_name);
Returns the installed library file (.so or .dll) for a module. This is
needed by extensions which have to link against the library of the
module they're extending.
* We currently require Module::Build version 0.2808_01, which is what
shipped with Perl 5.10.0. I'm reluctant to bump the Module::Build version
number to 0.3404 in order to get c_source accepting multiple directories,
since that would exclude stock installs of Perl 5.10.x and 5.12.x. Can we
remain with 0.2808_01 and hack up something approximating the
clownfish_params property instead of bumping to 0.31 to get
Module::Build#add_property?
Yes, that's possible. I can try to mirror the API we would get with
Module::Build#add_property using an inside-out class attribute.
* See http://markmail.org/message/hx3nmnu2mtt2t3mb for why we have been
avoiding M::B#dist_version up till now. Man, how I hate Perl's TMTOWTDI
version numbers. :(
I'm OK with this change nevertheless, because the worst it will do is
cause XSLoader to error out because of a mismatch between an X.Y.Z version
in the shared object and an X.YYYZZZ version in Lucy.pm. If that happens,
we'll get a bunch of CPAN testers failures.
Doesn't that mean that Lucy can't be loaded which sounds like the worst
case to me? Is it that only that some versions of XSLoader have
problems? It would be easy to switch to the old way of parsing the
version number from Lucy.pm.
* I'd like to do some work on parcels. It looked like you were handling
them as an implementation detail to be generalized, so I don't think we'll
collide.
Yes, I simply use the last part of the module name as parcel without any
configuration mechanism. That seems to work for extensions.
Nick