Put all the tzdata in one file.

I'll come back and remove the separate files (and change the regular 'generate'
script) when the separate files are obsolete, but in the interim period, it's
easier to have both old and new files available.

Bug: 7012465
Change-Id: I36e2fd49c08ff79ded6eca1c5bc4c08837cc490a
diff --git a/libc/tools/zoneinfo/generate-single-file b/libc/tools/zoneinfo/generate-single-file
new file mode 100755
index 0000000..a67713c
--- /dev/null
+++ b/libc/tools/zoneinfo/generate-single-file
@@ -0,0 +1,77 @@
+#!/usr/bin/python
+# Run with no arguments from any directory, with no special setup required.
+
+import ftplib
+import hashlib
+import os
+import re
+import shutil
+import string
+import struct
+import subprocess
+import sys
+import tarfile
+import tempfile
+
+# Find the bionic directory, searching upward from this script.
+bionic_libc_tools_zoneinfo_dir = os.path.realpath(os.path.dirname(sys.argv[0]))
+bionic_libc_tools_dir = os.path.dirname(bionic_libc_tools_zoneinfo_dir)
+bionic_libc_dir = os.path.dirname(bionic_libc_tools_dir)
+bionic_dir = os.path.dirname(bionic_libc_dir)
+bionic_libc_zoneinfo_dir = '%s/libc/zoneinfo' % bionic_dir
+if not os.path.isdir(bionic_libc_tools_zoneinfo_dir) or not os.path.isdir(bionic_libc_zoneinfo_dir):
+  print "Couldn't find bionic/libc/tools/zoneinfo!"
+  sys.exit(1)
+
+
+
+
+def current_tzdata_version():
+  return open('%s/zoneinfo.version' % bionic_libc_zoneinfo_dir).readline().rstrip('\n')
+
+
+# TODO: make the regular "generate" script just output this format directly.
+
+# Open the output file.
+f = open('%s/tzdata' % bionic_libc_zoneinfo_dir, 'wb+')
+
+#  -- header
+# char[12] tzdata_version          -- 'tzdata2012f\0'
+# u32 file_format_version          -- probably won't need this, but just in case
+# u32 index_offset                 -- likewise
+# u32 data_offset
+# u32 zonetab_offset
+header_format = "! 12s i i i i"
+header_size = struct.calcsize(header_format)
+
+index_offset = header_size
+index_bytes = open('%s/zoneinfo.idx' % bionic_libc_zoneinfo_dir, "rb").read()
+index_size = len(index_bytes)
+
+data_offset = index_offset + index_size
+data_bytes = open('%s/zoneinfo.dat' % bionic_libc_zoneinfo_dir).read()
+data_size = len(data_bytes)
+
+zonetab_offset = 0 # TODO: data_offset + data_size
+
+tzdata_version = current_tzdata_version()
+file_format_version = 1
+
+header = struct.pack(header_format, 'tzdata%s' % tzdata_version, file_format_version, index_offset, data_offset, zonetab_offset)
+f.write(header)
+
+# -- index (@index_offset)
+# u8* index_bytes
+f.write(index_bytes)
+
+# -- data (@data_offset)
+# u8* data_bytes
+f.write(data_bytes)
+
+# TODO: zonetab
+# -- zonetab (@zonetab_offset)
+# u8* zonetab_bytes
+
+f.close()
+
+sys.exit(0)
diff --git a/libc/zoneinfo/Android.mk b/libc/zoneinfo/Android.mk
index 7cd9139..e3bc8ea 100644
--- a/libc/zoneinfo/Android.mk
+++ b/libc/zoneinfo/Android.mk
@@ -30,6 +30,15 @@
 LOCAL_MODULE_PATH := $(TARGET_OUT)/usr/share/zoneinfo
 include $(BUILD_PREBUILT)
 
+############################################
+include $(CLEAR_VARS)
+LOCAL_MODULE := tzdata
+LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
+LOCAL_SRC_FILES := $(LOCAL_MODULE)
+LOCAL_MODULE_CLASS := ETC
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_PATH := $(TARGET_OUT)/usr/share/zoneinfo
+include $(BUILD_PREBUILT)
 
 # The host build doesn't use bionic, but it does use bionic's zoneinfo data
 ifeq ($(WITH_HOST_DALVIK),true)
@@ -70,4 +79,16 @@
 LOCAL_MODULE_PATH := $(HOST_OUT)/usr/share/zoneinfo
 include $(BUILD_PREBUILT)
 
+############################################
+include $(CLEAR_VARS)
+LOCAL_MODULE := tzdata-host
+LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
+LOCAL_IS_HOST_MODULE := true
+LOCAL_SRC_FILES := tzdata
+LOCAL_MODULE_CLASS := ETC
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_STEM := $(LOCAL_SRC_FILES)
+LOCAL_MODULE_PATH := $(HOST_OUT)/usr/share/zoneinfo
+include $(BUILD_PREBUILT)
+
 endif
diff --git a/libc/zoneinfo/tzdata b/libc/zoneinfo/tzdata
new file mode 100644
index 0000000..3529c8b
--- /dev/null
+++ b/libc/zoneinfo/tzdata
Binary files differ