Build Updates

Regenerate configure

Don't forget to re-run and check in the configure file along with This is normally supposed to be done when or aclocal.m4 are modified. It also should be done whenever the version numbers change in uvernum.h

Update urename.h

Update urename.h to catch all possible ICU4C library exports (especially on non-Windows systems that tend to ignore export qualifiers). See icu/source/tools/genren/README.

Diff the new one with the previous one; there are typically a few bad #defines in there.

You are looking to make sure that the defines all are correct exported symbols and that the Perl script hasn't inadvertently grabbed extraneous text. Each of the defines should be of the format "uxxxx_NamingConvention". If not then you need to determine if it's a script issue or a poorly named method.

Also, please look out for this type of message: "*** WARNING Bad namespace (not 'icu') on ShoeSize::ShoeSize()" - it probably means that there is a class not defined inside the "icu" namespace. Consider adding U_NAMESPACE_BEGIN and U_NAMESPACE_END around the class and member definitions.

Update the pool bundles

The locale data resource bundles use pool.res bundles (one per bundle tree) for sharing most of their resource table key strings. We should update the pool bundles once per release, or when we get new data from CLDR, or change the tree or key structure, to capture the changing set of key strings.

  1. Build ICU4C
  2. Temporarily modify the data makefile: s/usePoolBundle/writePoolBundle/
  3. If you are not on Windows, you probably need to make other changes to the Makefile as well. See (contains a data/Makefile patch; use the latest version there)
    1. Try to patch it in rather than redoing it manually: ~/$ patch -p0 < ~/Downloads/Makefile-writePoolBundle.patch
  4. Rebuild the data (make sure it actually gets rebuilt: cd data, make clean, make)
  5. Copy $icu4c_out/data/out/build/icudt.../pool.res to $icu4c_root/source/data/locales/pool.res
  6. Copy $icu4c_out/data/out/build/icudt.../curr/pool.res to $icu4c_root/source/data/curr/pool.res
  7. Copy all of the pool.res files like this
    1. Linux ICU 59, from inside the build output's data directory:
    2. ICUDT=icudt59l
    3. cp out/build/$ICUDT/pool.res ../../../src/icu4c/source/data/locales
    4. cp out/build/$ICUDT/lang/pool.res ../../../src/icu4c/source/data/lang
    5. cp out/build/$ICUDT/region/pool.res ../../../src/icu4c/source/data/region
    6. cp out/build/$ICUDT/zone/pool.res ../../../src/icu4c/source/data/zone
    7. cp out/build/$ICUDT/curr/pool.res ../../../src/icu4c/source/data/curr
    8. cp out/build/$ICUDT/unit/pool.res ../../../src/icu4c/source/data/unit
  8. Revert the data makefile change
  9. Rebuild the data (make sure it actually gets rebuilt: make clean, make)
  10. Run ICU4C tests
  11. Rebuild the ICU4J data .jar files
    1. See icu4c/source/data/icu4j-readme.txt
    2. And/or see "update Java data files" in icu4c/source/data/unidata/changes.txt

If there are new bundle trees that should use pool.res files (like the "unit" tree in ICU 54 ticket #11092), then first modify the data makefiles (Windows and Linux) to add the new pool.res to the appropriate file lists and initially add --writePoolBundle which at the end also needs to be turned into --usePoolBundle. Or, simpler, initially copy (svn cp) the parent tree's pool bundle, and update it later (maybe during release task work).