use strict;
my %TZ;
-my $tzdir = $ARGV[0] || "/usr/share/zoneinfo";
-chdir($tzdir) || die "chdir($tzdir): $!\n";
+my $tzdin = $ARGV[0] || "/usr/share/zoneinfo";
+my $tzdout = $ARGV[1] || "./libs/sys/luasrc/sys/zoneinfo";
local $/ = "\012";
-open( ZTAB, "< ./zone.tab" ) || die "Unable to open zone.tab: $!";
+open( ZTAB, "< $tzdin/zone.tab" ) || die "open($tzdin/zone.tab): $!";
while( ! eof ZTAB ) {
chomp( my $line = readline ZTAB );
printf STDERR "%-40s", $zone;
- if( open ZONE, "< ./$zone" ) {
+ if( open ZONE, "< $tzdin/$zone" ) {
seek ZONE, -2, 2;
while( tell(ZONE) > 0 ) {
}
else
{
- print STDERR "Unable to open $zone: $!\n";
+ print STDERR "open($tzdin/$zone): $!\n";
}
}
close ZTAB;
-print <<HEAD;
+open(O, "> $tzdout/tzdata.lua") || die "open($tzdout/tzdata.lua): $!\n";
+
+print STDERR "Writing time zones to $tzdout/tzdata.lua ... ";
+print O <<HEAD;
--[[
LuCI - Autogenerated Zoneinfo Module
]]--
-module "luci.sys.zoneinfo"
+module "luci.sys.zoneinfo.tzdata"
TZ = {
HEAD
foreach my $zone ( sort keys %TZ ) {
- printf "\t{ '%s', '%s' },\n", $zone, $TZ{$zone}
+ printf O "\t{ '%s', '%s' },\n", $zone, $TZ{$zone}
}
-print <<HEAD;
-}
+print O "}\n";
+close O;
+
+print STDERR "done\n";
+
+
+open (O, "> $tzdout/tzoffset.lua") || die "open($tzdout/tzoffset.lua): $!\n";
+
+print STDERR "Writing time offsets to $tzdout/tzoffset.lua ... ";
+print O <<HEAD;
+--[[
+LuCI - Autogenerated Zoneinfo Module
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+]]--
+
+module "luci.sys.zoneinfo.tzoffset"
OFFSET = {
HEAD
$offset = $s * $h * 60 * 60;
$offset += $s * $m * 60;
- printf("\t%-5s = %6d,\t-- %s\n",
- lc($std), $offset, $std);
+ printf O "\t%-5s = %6d,\t-- %s\n",
+ lc($std), $offset, $std;
$seen{$std} = 1;
$offset += 60 * 60;
}
- printf("\t%-5s = %6d,\t-- %s\n",
- lc($dst), $offset, $dst);
+ printf O "\t%-5s = %6d,\t-- %s\n",
+ lc($dst), $offset, $dst;
$seen{$dst} = 1;
}
}
else {
- printf("\t%-5s = %6d,\t-- %s\n",
- lc($std), $offset, $std);
+ printf O "\t%-5s = %6d,\t-- %s\n",
+ lc($std), $offset, $std;
$seen{$std} = 1;
}
}
}
-print "}\n";
+print O "}\n";
+close O;
+
+print STDERR "done\n";