Unicode is used to generate the unicode data in src/corelib/text/.

To update:
* Find the data (UAX #44, UCD; not the XML version) at
  ftp://www.unicode.org/Public/zipped/$Version/
* Unpack the zip file; for each file in data/, replace with the new
  version; find the *BreakProperty.txt in auxiliary/. (These last are
  only in the zip, not in the web-space's unpacked versions.)
* If needed, add an entry to enum QChar::UnicodeVersion for the new
  Unicode version
* In that case, also update main.cpp's initAgeMap and DATA_VERSION_S*
  to match
* Build this project. Its binary, unicode, ignores command-line
  options and assumes it is being run from this directory. When run,
  it produces lots of output. Hopefully that doesn't matter.
* Assertions may trigger: if so, study code and understand what's more
  complicated about this update; talk to folk named in the git logs,
  maybe push a WIP to gerrit to solicit advice. Some bit-field may
  need to be expanded, for example. In some cases QChar may need
  additions to some of its enums.
* Build with the modified code, fix any compilation issues.
* That may have updated qtbase/src/corelib/text/qunicodetables.cpp;
  if so the update matters; be sure to commit the changes to data/ at
  the same time and update text/qt_attribution.json to match; use the
  UCD Revision number, rather than the Unicode standard number, as the
  Version, for all that qunicodetables.cpp uses the latter.

The script writingSystems.sh generates a list of writing systems,
ostensibly as a the basis for updating QFontDatabase::WritingSystem
enum; however, the Release 20 output of it contains many more writing
systems than are present in that enum, suggesting it has not been run
in a very long time. Further research needed.
