| ********************************************************************** | 
 | * Copyright (c) 2003-2004, 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://oss.software.ibm.com/icu/ | 
 | 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 |