postgres.git / summary / log / commit / refs

commit    ed26c4e25a444fcdd8a9120d4fe4b5a08d2b262b
Author:   John Naylor <john.naylor@postgresql.org>
Date:     Wed Jul 09 07:20:22 2025 +0000

    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:
    https://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: https://postgr.es/m/20220323002024.f2g6tivduzrktgfa%40alap3.anarazel.de
    Discussion: https://postgr.es/m/CANWCAZbgiaz1_0-F4SD%2B%3D-e9onwAnQdBGJbhg94EqUu4Gb7WyA%40mail.gmail.com


.cirrus.tasks.yml | 3 --- src/include/utils/pg_locale.h | 3 +++ 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.cirrus.tasks.yml b/.cirrus.tasks.yml index 92057006c93..1a366975d82 100644 --- a/.cirrus.tasks.yml +++ b/.cirrus.tasks.yml @@ -938,14 +938,11 @@ task: # - Don't use ccache, the files are uncacheable, polluting ccache's # cache # - Use -fmax-errors, as particularly cpluspluscheck can be very verbose - # - XXX have to disable ICU to avoid errors: - # https://postgr.es/m/20220323002024.f2g6tivduzrktgfa%40alap3.anarazel.de ### always: headers_headerscheck_script: | time ./configure \ ${LINUX_CONFIGURE_FEATURES} \ - --without-icu \ --quiet \ CC="gcc" CXX"=g++" CLANG="clang-16" make -s -j${BUILD_JOBS} clean diff --git a/src/include/utils/pg_locale.h b/src/include/utils/pg_locale.h index 44ff60a25b4..1cd7c76a0a7 100644 --- a/src/include/utils/pg_locale.h +++ b/src/include/utils/pg_locale.h @@ -15,6 +15,9 @@ #include "mb/pg_wchar.h" #ifdef USE_ICU +/* only include the C APIs, to avoid errors in cpluspluscheck */ +#undef U_SHOW_CPLUSPLUS_API +#define U_SHOW_CPLUSPLUS_API 0 #include <unicode/ucol.h> #endif [parent: df286a5b830a]