Merge "Put all the tzdata in one file."
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