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