Hide ICU C++ APIs from pg_locale.h
authorJohn Naylor <john.naylor@postgresql.org>
Wed, 9 Jul 2025 07:20:22 +0000 (14:20 +0700)
committerJohn Naylor <john.naylor@postgresql.org>
Wed, 9 Jul 2025 07:20:22 +0000 (14:20 +0700)
commited26c4e25a444fcdd8a9120d4fe4b5a08d2b262b
tree9ed597c820cf8cc94182097626cf018db7ff8374
parentdf286a5b830ae8cc8aac4bd6c999ea4991f0b092
Hide ICU C++ APIs from pg_locale.h

The cpluspluscheck script wraps our headers in `extern "C"`. This
disables name mangling, which is necessary for the C++ templates
in system ICU headers. cpluspluscheck thus fails when the build is
configured with ICU (the default). CI worked around this by disabling
ICU, but let's make it work so others can run the script.

We can specify we only want the C APIs by defining U_SHOW_CPLUSPLUS_API
to be 0 in pg_locale.h. Extensions that want the C++ APIs can include
ICU headers separately before including PostgreSQL headers.

ICU documentation:
http://github.com/unicode-org/icu/blob/main/docs/processes/release/tasks/healthy-code.md#test-icu4c-headers

Suggested-by: Andres Freund <andres@anarazel.de>
Reviewed-by: Peter Eisentraut <peter@eisentraut.org>
Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us>
Reviewed-by: Andres Freund <andres@anarazel.de>
Discussion: http://postgr.es/m/20220323002024.f2g6tivduzrktgfa%40alap3.anarazel.de
Discussion: http://postgr.es/m/CANWCAZbgiaz1_0-F4SD%2B%3D-e9onwAnQdBGJbhg94EqUu4Gb7WyA%40mail.gmail.com
.cirrus.tasks.yml
src/include/utils/pg_locale.h