#!/usr/bin/perl -w use strict; use warnings; use File::chdir; use File::Temp (); use Getopt::Long; use Net::FTP; my %opts = ( download => 1, dir => undef, ); GetOptions( 'download!' => \$opts{download}, 'dir:s' => \$opts{dir}, ); my $olson_version; my $dir = $opts{dir} ? $opts{dir} : File::Temp::tempdir( CLEANUP => 1 ); { local $CWD = $dir; if ( $opts{download} ) { my $ftp = Net::FTP->new( 'elsie.nci.nih.gov', Passive => 1 ) or die "Cannot connect to elsie.nci.nih.gov: $@"; $ftp->login() or die 'Cannot login: ', $ftp->message; $ftp->cwd('/pub') or die 'Cannot cwd to /pub: ', $ftp->message; for my $f ( $ftp->ls ) { if ( $f =~ /^tz(?:code|data)/ ) { print "Getting $f\n"; $ftp->get($f); system( 'tar', 'xzf', $f ); ($olson_version) = $f =~ /(\d\d\d\d\w)/; } } die "Did not retrieve anything from elsie" unless $olson_version; } else { $dir =~ s{/$}{}; ($olson_version) = $dir =~ m{/([^/]+)$}; } system( 'make' ) and die "Cannot run make: $!"; for my $f ( qw( africa antarctica asia australasia europe northamerica pacificnew southamerica backward ) ) { system( 'sudo', './zic', '-d', '/usr/share/zoneinfo', $f ) and die "Cannot run zic on $f"; } } { system( './tools/parse_olson', '--clean', '--version', $olson_version, '--dir', $dir, ) and die "Cannot run parse_olson: $!"; print "Generating tests from zdump\n"; system( './tools/tests_from_zdump' ) and die "Cannot run tests_from_zdump: $!"; }