#!/usr/bin/perl
use strict;
use File::Find::Rule;
use File::Basename ;
use File::Path;
use Carp;
# use the _zone_package method, kill the chicken
package Data::ICal::TimeZone::List;
$INC{'Data/ICal/TimeZone/List.pm'} = 1;
use base qw( Exporter );
our @EXPORT_OK = qw( zones );
sub zones {}
package main;
require Data::ICal::TimeZone;
# we expect that you've generated the zone as .ics files into a
# directory called zoneinfo using Vzic
# http://dialspace.dial.pipex.com/prod/dialspace/town/pipexdsl/s/asbm26/vzic/
my @zones;
for my $infile (find( file => name => '*.ics', in => 'zoneinfo' )) {
my $zone = $infile;
$zone =~ s{^zoneinfo/}{};
$zone =~ s{\.ics$}{};
push @zones, $zone;
my $package = Data::ICal::TimeZone->_zone_package( $zone );
my $outfile = "lib/$package.pm";
$outfile =~ s{::}{/}g;
#print "$zone => $module => $outfile\n";
mkpath [ dirname $outfile ];
open my $out, '>', $outfile or croak "open $outfile $!";
open my $in, '<', $infile or croak "open $infile $1";
print {$out} <<"END";
# this class is autogenerated. use make_zones to regenerate
package $package;
use strict;
use base qw( Data::ICal::TimeZone::Object );
my \$data = join '', <DATA>;
close DATA; # avoid leaking many many filehandles
__PACKAGE__->new->_load( \$data );
1;
__DATA__
END
my @ics = <$in>;
for (@ics) {
s{^TZID:/myorganization.org/.*?/}{TZID:}; # fixup bizarro TZID
}
print {$out} @ics;
}
open my $fh, '>', 'lib/Data/ICal/TimeZone/List.pm' or die "can't open List.pm $!";
print {$fh} <<'END';
# this is autogenerated. use make_zones to regenerate
package Data::ICal::TimeZone::List;
use strict;
use base qw( Exporter );
our @EXPORT_OK = qw( zones );
sub zones {
return (
END
print {$fh} map " '$_',\n", sort @zones;
print {$fh} <<'END';
);
}
1;
__END__
END