On Mar 1, 2012, at 3:09 PM, Marvin Humphrey wrote:
> *Our* code needs the version number because it has to be embedded in the Lucy
> shared object. (The version number needs to be embedded in the shared object
> because the XSLoader::load() invocation from Lucy.pm validates the version and
> throws an error if they don't match.)
>
> However, *our* code is no longer a problem, because I've changed it to use
> regexes rather than the Module::Build::ModuleInfo routine.
Okay.
> The current problem with Perl 5.14.1 seems to be that *Module::Build* wants to
> build MYMETA.json/MYMETA.yml when you run "perl Build.PL", and it apparently
> needs per-package version information for that.
Ah!
> Maybe we could persuade Module::Build not to run the version parsing code if
> we kept a current META.json file around, but I don't think that's a good
> solution. First, META.json is a serious PITA to keep up-to-date.
./Build distmeta
> Second,
> there's no guarantee that Module::Build won't run that version extraction code
> under other circumstances -- where and when M::B decides that it wants to run
> its version extraction routine is an implementation detail of M::B, since it
> assumes that routine is always safe to run.
Yeah.
>> * Why are you reading the version at all? If that's a subclass of
>> Module::Build, you can just use $self->dist_version
>
> $self->dist_version is an X.Y.Z version number; $Lucy::VERSION is an X.YYYZZZ
> version number. We need the X.YYYZZZ version number to build the XS
> extension so that it will match what is in Lucy.pm.
>
> It is theoretically possible to derive an X.YYYZZZ version from an X.Y.Z
> version number, but I don't know whether dist_version() is going to give us a
> string or a version.pm object. It is simpler to just pull it out of Lucy.pm
> ourselves with a regex than to guarantee that we can derive it under all
> possible configurations.
Pretty sure you could get a version.pm object out of it.
>
>> * Module::Build::ModuleInfo is deprecated; use Module::Metadata instead.
>
> Our own usage of Module::Build::ModuleInfo has now been eliminated entirely,
> so there is no longer any need to transistion to Module::Metadata.
Okay.
>>> It is hard to guarantee that that ModuleInfo code will not be run too soon,
>>> as
>>> it seems that Module::Build assumes it will always be safe.
>>
>> It should be. Lucy.pm should not `require Lucy`. It is choking on reading
>> the version from Lucy.pm, yes?
>
> Module::Build is having problems reading lib/Lucy/Store/RAMFile.pm. Here is
> that file's contents, minus comments:
>
> package Lucy::Store::RAMFile;
> use Lucy; our $VERSION = $Lucy::VERSION;
>
> 1;
>
> Error message below. Note that the build actually completes; it just
> complains loudly.
And it’s doing that when trying to build the MYMETA.json files?
In that case, I say use constant version declarations in each file have have
your versioning script update them all.
Best,
David