#!/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 '', ; 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