| ********************************************************************** |
| * Copyright (c) 2003-2005, International Business Machines |
| * Corporation and others. All Rights Reserved. |
| ********************************************************************** |
| * Author: Alan Liu |
| * Created: August 18 2003 |
| * Since: ICU 2.8 |
| ********************************************************************** |
| |
| ---------------------------------------------------------------------- |
| OVERVIEW |
| |
| This file describes the tools in icu/source/tools/tzcode |
| |
| The purpose of these tools is to process the zoneinfo or "Olson" time |
| zone database into a form usable by ICU4C (release 2.8 and later). |
| Unlike earlier releases, ICU4C 2.8 supports historical time zone |
| behavior, as well as the full set of Olson compatibility IDs. |
| |
| References: |
| |
| ICU4C: http://icu.sourceforge.net/ |
| Olson: ftp://elsie.nci.nih.gov/pub/ |
| |
| ---------------------------------------------------------------------- |
| ICU4C vs. ICU4J |
| |
| For ICU releases >= 2.8, both ICU4C and ICU4J implement full |
| historical time zones, based on Olson data. The implementations in C |
| and Java are somewhat different. The C implementation is a |
| self-contained implementation, whereas ICU4J uses the underlying JDK |
| 1.3 or 1.4 time zone implementation. |
| |
| Older versions of ICU (C and Java <= 2.6) implement a "present day |
| snapshot". This only reflects current time zone behavior, without |
| historical variation. Furthermore, it lacks the full set of Olson |
| compatibility IDs. |
| |
| ---------------------------------------------------------------------- |
| BACKGROUND |
| |
| The zoneinfo or "Olson" time zone package is used by various systems |
| to describe the behavior of time zones. The package consists of |
| several parts. E.g.: |
| |
| Index of ftp://elsie.nci.nih.gov/pub/ |
| |
| classictzcode.tar.gz 65 KB 12/10/1994 12:00:00 AM |
| classictzdata.tar.gz 67 KB 12/10/1994 12:00:00 AM |
| e5+57.tar.gz 2909 KB 3/22/1993 12:00:00 AM |
| iso8601.ps.gz 16 KB 7/27/1996 12:00:00 AM |
| leastsq.xls 49 KB 4/24/1997 12:00:00 AM |
| ltroff.tar.gz 36 KB 7/16/1993 12:00:00 AM |
| pi.shar.gz 4 KB 3/9/1994 12:00:00 AM |
| tzarchive.gz 3412 KB 8/18/2003 4:00:00 AM |
| tzcode2003a.tar.gz 98 KB 3/24/2003 2:32:00 PM |
| tzdata2003a.tar.gz 132 KB 3/24/2003 2:32:00 PM |
| |
| ICU only uses the tzcodeYYYYV.tar.gz and tzdataYYYYV.tar.gz files, |
| where YYYY is the year and V is the version letter ('a'...'z'). |
| |
| ---------------------------------------------------------------------- |
| HOWTO |
| |
| 1. Obtain the current versions of tzcodeYYYYV.tar.gz (aka `tzcode') |
| and tzdataYYYYV.tar.gz (aka `tzdata') from the FTP site given |
| above. Either manually download or use wget: |
| |
| $ cd {path_to}/icu/source/tools/tzcode |
| $ wget "ftp://elsie.nci.nih.gov/pub/tz*.tar.gz" |
| |
| 2. Unpack tzcode and tzdata directly into the directory tzcode: |
| |
| $ tar xzvf tzcode*.tar.gz |
| $ tar xzvf tzdata*.tar.gz |
| |
| *** Make sure you only have ONE FILE named tzdata*.tar.gz in the |
| directory. |
| *** Do NOT delete the tzdata*.tar.gz file. |
| |
| The Makefile looks in the current directory to determine the |
| version of Olson data it is building by looking for tzdata*.tar.gz. |
| |
| 3. Apply the ICU patch to zic.c: |
| |
| $ patch < patch-icu-tzcode |
| |
| If patch complains at this point, there is a mismatch that must be |
| manually addressed. See the CVS log of `patch-icu-tzcode' for |
| version details. |
| |
| 4. Build: |
| |
| $ make icu_data |
| |
| 5. Copy the data files to the correct location in the ICU4C/ICU4J |
| source trees: |
| |
| $ cp zoneinfo.txt ../../../data/misc/ |
| $ cp ZoneMetaData.java {path_to}/icu4j/src/com/ibm/icu/impl |
| |
| 6. Rebuild ICU: |
| |
| $ cd ../../../ |
| $ {*make} |
| |
| 7. Don't forget to check in the new zoneinfo.txt (from its location at |
| {path_to}/icu/source/data/misc/zoneinfo.txt) into CVS. |
| |
| ---------------------------------------------------------------------- |
| HOWTO regenerate patch-icu-tzcode |
| |
| If you need to edit any of the tzcode* files, you will need to |
| regenerate the patch file as follows. |
| |
| 1. Follow the above instructions to extract and patch the tzcode* |
| files in {path_to}/icu/source/tools/tzcode. Modify any of the |
| tzcode files. |
| |
| 2. Extract a clean set of the tzcode* files into a new directory, |
| ../tzcode.orig/: |
| |
| $ mkdir ../tzcode.orig |
| $ cd ../tzcode.orig |
| $ tar xzf ../tzcode/tzcode*.tar.gz |
| $ cd ../tzcode |
| |
| 3. Compute diffs, ignoring files that are in only one directory: |
| |
| $ diff -ur ../tzcode.orig . | grep -vE -e "^Only in " > patch-icu-tzcode |
| |
| 4. Test the patch-icu-tzcode file by regenerating and diffing the |
| files again in another directory. The expected output from the |
| final diff command is *nothing*. |
| |
| $ mkdir ../tzcode.new |
| $ cd ../tzcode.new |
| $ tar xzf ../tzcode/tzcode*.tar.gz |
| $ patch < ../tzcode/patch-icu-tzcode |
| $ cd ../tzcode |
| $ diff -ur ../tzcode.new . | grep -vE -e "^Only in " |
| |
| 5. Check in the new patch-icu-tzcode file. |
| |
| ---------------------------------------------------------------------- |
| eof |