1#!/usr/bin/perl -w
2
3use strict;
4use warnings;
5
6use File::chdir;
7use File::Temp ();
8use Getopt::Long;
9use Net::FTP;
10
11my %opts = ( download => 1,
12             dir      => undef,
13           );
14
15GetOptions( 'download!' => \$opts{download},
16            'dir:s'     => \$opts{dir},
17          );
18
19my $olson_version;
20my $dir = $opts{dir} ? $opts{dir} : File::Temp::tempdir( CLEANUP => 1 );
21
22{
23    local $CWD = $dir;
24
25    if ( $opts{download} )
26    {
27        my $ftp = Net::FTP->new( 'elsie.nci.nih.gov', Passive => 1 )
28            or die "Cannot connect to elsie.nci.nih.gov: $@";
29        $ftp->login()
30            or die 'Cannot login: ', $ftp->message;
31        $ftp->cwd('/pub')
32            or die 'Cannot cwd to /pub: ', $ftp->message;
33
34        for my $f ( $ftp->ls )
35        {
36            if ( $f =~ /^tz(?:code|data)/ )
37            {
38                print "Getting $f\n";
39                $ftp->get($f);
40
41                system( 'tar', 'xzf', $f );
42
43                ($olson_version) = $f =~ /(\d\d\d\d\w)/;
44            }
45        }
46
47        die "Did not retrieve anything from elsie"
48            unless $olson_version;
49    }
50    else
51    {
52        $dir =~ s{/$}{};
53        ($olson_version) = $dir =~ m{/([^/]+)$};
54    }
55
56    system( 'make' )
57        and die "Cannot run make: $!";
58
59    for my $f ( qw( africa antarctica asia australasia
60                    europe northamerica pacificnew
61                    southamerica backward
62                  )
63                )
64    {
65        system( 'sudo', './zic', '-d', '/usr/share/zoneinfo', $f )
66            and die "Cannot run zic on $f";
67    }
68}
69
70{
71    system( './tools/parse_olson',
72            '--clean',
73            '--version', $olson_version,
74            '--dir', $dir,
75          )
76        and die "Cannot run parse_olson: $!";
77
78    print "Generating tests from zdump\n";
79    system( './tools/tests_from_zdump' )
80        and die "Cannot run tests_from_zdump: $!";
81}
82