On Tue, Jul 1, 2025 at 9:24 PM Tom Lane <t...@sss.pgh.pa.us> wrote:
> Ha, indeed you are right.  On my RHEL9 box, it's kinda drowned out
> by complaints about
>
> /usr/include/c++/11/bits/range_access.h:109:3: error: template with C linkage
>   109 |   template<typename _Tp> _Tp* end(valarray<_Tp>&) noexcept;
>       |   ^~~~~~~~
> /tmp/headerscheck.u5CrRM/test.cpp:1:1: note: ‘extern "C"’ linkage started here
>     1 | extern "C" {
>       | ^~~~~~~~~~

After pushing my fix, I looked into this, and CI works around this by
disabling ICU. A proper fix was discussed here, but it trailed off:

https://www.postgresql.org/message-id/flat/20230311033727.koa4saxy5wyquu6s%40awork3.anarazel.de#03346c63050bbc69dfca8981a5698e4a

I came up with the attached -- Andres, Peter, does this match your recollection?

--
John Naylor
Amazon Web Services
From 6a2a016799a1ba8473cc66aad8509890f00b4ec4 Mon Sep 17 00:00:00 2001
From: John Naylor <john.nay...@postgresql.org>
Date: Wed, 2 Jul 2025 13:56:32 +0700
Subject: [PATCH v1] Properly fix cpluspluscheck with ICU

---
 .cirrus.tasks.yml             | 3 ---
 src/include/utils/pg_locale.h | 5 +++++
 2 files changed, 5 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..300c78ba93c 100644
--- a/src/include/utils/pg_locale.h
+++ b/src/include/utils/pg_locale.h
@@ -15,7 +15,12 @@
 #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>
+/* restore so that extensions can include the C++ APIs */
+#undef U_SHOW_CPLUSPLUS_API
 #endif
 
 /* use for libc locale names */
-- 
2.50.0

Reply via email to