| Tips and tasks when updating harfbuzz sources to a newer version. | |
| ----------------------------------------------------------------- | |
| STEP 1: UPDATING FILES | |
| ---------------------- | |
| Download and unzip the latest version from https://github.com/harfbuzz/harfbuzz/releases | |
| We only use files from the src directory and even then only the ones we need. | |
| So just C++ include and source files and only the ones needed for the library, | |
| and even then just the ones we use. | |
| IMPORTANT! DO NOT just copy everything. | |
| - Harfbuzz is not modular, so the update is not a straightforward process. | |
| - The main thing is we do NOT want any | |
| * "test" programs (test in the name, have a main are clues) | |
| * support for (eg) GLib, DirectWrite, Graphite, GDI, ICU, Uniscribe | |
| * aggregators like harfbuzz.cc - since it includes things from the above | |
| as well as hb-ft.cc which we specifically exclude in the Makefile | |
| * but we do use core text support on macOS. | |
| * I really wish that "src" were just library source, but I expect the authors | |
| have their reasons. | |
| So one way to update is to | |
| - copy over from the updated harfbuzz the exact same files we already have | |
| - it isn't a flat directory so watch out for that. | |
| - For files that are no longer available (for which copy fails), we remove such files, | |
| but these may come back later if they were actually renamed. | |
| - look for files in the destination that were NOT updated - perhaps they | |
| are removed or renamed in the upstream. Remove them if they are really | |
| obsolete, or add their replacements/renames. | |
| In IntelliJ IDE: | |
| Newly added files are shown in RED | |
| Modified in BLUE | |
| NOT Updated in WHITE | |
| This feature might be helpful to keep track of new, modified and unchanged files. | |
| STEP 2: BUILD CHANGES INCREMENTALLY | |
| ----------------------------------- | |
| - iterate over : build and see what new file is missing that causes a build failure. | |
| Sometimes just running a build does not show up any failures due to stale files. | |
| Clean followed by build would be helpful in this situation. | |
| - You might run into compiler warnings that are treated as errors or the requirement | |
| to set certain compiler flags if the build fails on a specific platform. | |
| Check "COMPILER WARNINGS AND SETTING FLAGS" section for more details. | |
| - when this is done we have something buildable, make sure it builds | |
| on all supported platforms. | |
| STEP 3: COMPILER WARNINGS AND SETTING FLAGS | |
| ------------------------------------------- | |
| - Update make parameters in make/modules/java.desktop/lib/ClientLibraries.gmk | |
| Since we don't use configure we need to manually specify the options | |
| we need in the Harfbuzz section of ClientLibraries.gmk. | |
| As well as adding new options, we may need to clean up obsolete options. | |
| Note there may be platform variations in the flags. | |
| - As with other 3rd party libs we do not fix the code to eliminate compiler | |
| warnings unless they are critical and clearly avoiding a bug. Even then | |
| we'd report it upstream and apply the patch once it is made available. | |
| The usual practice is do just disable the warnings. | |
| STEP 4: UPDATING .md FILE | |
| ------------------------- | |
| - we do not apply any header file changes so this is not an issue. | |
| - verify the license text is unchanged (extra steps are needed if it is) and update | |
| src/java.desktop/share/legal/harfbuzz.md with the new version. | |
| STEP 5: REPLACE TABS & REMOVE TRAILING SPACES | |
| --------------------------------------------- | |
| - clean up trailing white space and tabs to follow jcheck rules. | |
| Use "expand" and "sed" to remove tabs and trailing white space from the | |
| imported sources. | |
| To clean up the extra spaces and tabs run the following script at | |
| each folder level within libharfbuzz. | |
| shopt -s nullglob | |
| for f in *.c *.h *.cc *.hh; | |
| do | |
| # replace tabs with spaces | |
| expand ${f} > ${f}.tmp; | |
| mv ${f}.tmp $f; | |
| # fix line endings to LF | |
| sed -e 's/\r$//g' ${f} > ${f}.tmp; | |
| mv ${f}.tmp $f; | |
| # remove trailing spaces | |
| sed -e 's/[ ]* $//g' ${f} > ${f}.tmp; | |
| mv ${f}.tmp $f; | |
| done | |
| STEP 6: TESTING | |
| --------------- | |
| - test using all the automated jtreg tests on all platforms. | |
| - do MANUAL verification of Arabic, Hebrew, Thai, Indic against previous releases. | |
| Look for manual related layout jtreg tests (test/jdk/java/awt/font/TextLayout) | |
| and run on Windows,Linux and Mac. | |
| Use Font2DTest set to TextLayout and check the above languages. Probably | |
| not going to see layout problems in code at this point of time but it needs to | |
| be checked. | |
| Different unicode combinations can be checked using Font2DTest. | |
| Run Font2DTest, select 'UserText' option for 'Text to use'. | |
| Paste unicodes of different languages (Arabic, Hebrew, Thai, Indic) | |
| and compare the glyphs with previous versions. | |
| It should look the same in both cases. | |
| - FINALLY, Do update THIS UPDATING.txt file too if it is outdated. |