Sorry for the delay in dealing with this.  I've turned out to not be as
medically fixed up as I thought I was.

Reviewing your libtime-olsontz-data-perl, I'm afraid your patch
doesn't do enough.  You've made the Perl module use the tzfiles from
/usr/share/zoneinfo at runtime, so it gets whatever version of the files
is currently installed as part of the tzdata package, but the rest of
the module has baked-in metadata for a particular version of tzdata.
You must do something to ensure that the module serves metadata for the
same version of tzdata that is installed.

The prebuild script, which you said you don't want to touch, is what
generates the Perl source form of the metadata, based on the Olson
database source.  To do without prebuild entirely, you'd have to get the
metadata into Perl form in some other way.  Some of it (country-based zone
selection data) is available under /usr/share/zoneinfo in a different
form, but some (directional link data) is not.  So it's not feasible
to implement Time::OlsonTZ::Data correctly based entirely on data from
the tzdata package as it currently exists.  It would be a somewhat bad
idea even if tzdata were minimally modified to make it possible: you'd
be applying logic from Time::OlsonTZ::Download at runtime, somewhat
inefficiently.

A sensible approach really requires that you run the prebuild script
against each version of the Olson database.  You can use the wrapper
part of Time-OlsonTZ-Data (from a CPAN version that you're happy with,
eviscerated by "./prebuild bare") and apply it to each new Olson database
version yourself, duplicating what I'd do to make a new version of
Time-OlsonTZ-Data for CPAN.  Your options really revolve around how you
split data between the tzdata and libtime-olsontz-data-perl packages
and how the packages are coupled.

If you keep the metadata in the Time/OlsonTZ/Data.pm file,
and keep the file in the libtime-olsontz-data-perl package, then
libtime-olsontz-data-perl needs to declare that it depends on an exact
version of tzdata.  E.g., libtime-olsontz-data-perl 0.201304 depends
on tzdata=2013d.  Generally, any arrangement that has versioned data in
both packages needs such a dependency declaration, in one direction or
the other, to ensure that the packages upgrade in lockstep.

Other options involve putting all the versioned data in the tzdata
package.  You'd keep the wrapper part of the Time-OlsonTZ-Data source
around as build-helping code for the tzdata package.  When building a
new version of tzdata you'd apply the prebuild script to generate what
amounts to the Time/OlsonTZ/Data.pm file, from its template, and then
install that file as part of the tzdata package.  In the simplest version,
you generate the actual Time/OlsonTZ/Data.pm file, and install it directly
into a Perl module directory.  The libtime-olsontz-data-perl package could
actually be superfluous that way.  Another way, libtime-olsontz-data-perl
installs a Time/OlsonTZ/Data.pm file that doesn't contain metadata itself
but invokes the Perl file from the tzdata package to acquire it.

-zefram

Reply via email to