blob: a67713cbc09641794296d034146d8696953eebfa [file] [log] [blame]
Elliott Hughesfb018a22012-10-17 14:24:50 -07001#!/usr/bin/python
2# Run with no arguments from any directory, with no special setup required.
3
4import ftplib
5import hashlib
6import os
7import re
8import shutil
9import string
10import struct
11import subprocess
12import sys
13import tarfile
14import tempfile
15
16# Find the bionic directory, searching upward from this script.
17bionic_libc_tools_zoneinfo_dir = os.path.realpath(os.path.dirname(sys.argv[0]))
18bionic_libc_tools_dir = os.path.dirname(bionic_libc_tools_zoneinfo_dir)
19bionic_libc_dir = os.path.dirname(bionic_libc_tools_dir)
20bionic_dir = os.path.dirname(bionic_libc_dir)
21bionic_libc_zoneinfo_dir = '%s/libc/zoneinfo' % bionic_dir
22if not os.path.isdir(bionic_libc_tools_zoneinfo_dir) or not os.path.isdir(bionic_libc_zoneinfo_dir):
23 print "Couldn't find bionic/libc/tools/zoneinfo!"
24 sys.exit(1)
25
26
27
28
29def current_tzdata_version():
30 return open('%s/zoneinfo.version' % bionic_libc_zoneinfo_dir).readline().rstrip('\n')
31
32
33# TODO: make the regular "generate" script just output this format directly.
34
35# Open the output file.
36f = open('%s/tzdata' % bionic_libc_zoneinfo_dir, 'wb+')
37
38# -- header
39# char[12] tzdata_version -- 'tzdata2012f\0'
40# u32 file_format_version -- probably won't need this, but just in case
41# u32 index_offset -- likewise
42# u32 data_offset
43# u32 zonetab_offset
44header_format = "! 12s i i i i"
45header_size = struct.calcsize(header_format)
46
47index_offset = header_size
48index_bytes = open('%s/zoneinfo.idx' % bionic_libc_zoneinfo_dir, "rb").read()
49index_size = len(index_bytes)
50
51data_offset = index_offset + index_size
52data_bytes = open('%s/zoneinfo.dat' % bionic_libc_zoneinfo_dir).read()
53data_size = len(data_bytes)
54
55zonetab_offset = 0 # TODO: data_offset + data_size
56
57tzdata_version = current_tzdata_version()
58file_format_version = 1
59
60header = struct.pack(header_format, 'tzdata%s' % tzdata_version, file_format_version, index_offset, data_offset, zonetab_offset)
61f.write(header)
62
63# -- index (@index_offset)
64# u8* index_bytes
65f.write(index_bytes)
66
67# -- data (@data_offset)
68# u8* data_bytes
69f.write(data_bytes)
70
71# TODO: zonetab
72# -- zonetab (@zonetab_offset)
73# u8* zonetab_bytes
74
75f.close()
76
77sys.exit(0)