On 4. Nov 2025, at 14.12, adesh--- via dovecot <[email protected]> wrote: > > When building Dovecot 2.4.2 on modern compilers (GCC ≥ 5, Clang, or any > C99/C11-compliant environment), the build fails in > src/lib/unicode-transform.c due to the use of non-constant initializers in > static const global variables. > > The affected lines define Hangul composition constants using other const > variables instead of compile-time constants, which is not allowed in standard > C99 and later. > > error log: > unicode-transform.c:211:1: error: initializer element is not constant > static const size_t uni_hangul_n_count = uni_hangul_v_count * > uni_hangul_t_count; > ^ > unicode-transform.c:212:1: error: initializer element is not constant > static const uint16_t uni_hangul_l_end = uni_hangul_l_base + > uni_hangul_l_count; > ^ > unicode-transform.c:213:1: error: initializer element is not constant > static const uint16_t uni_hangul_v_end = uni_hangul_v_base + > uni_hangul_v_count; > ^ > unicode-transform.c:214:1: error: initializer element is not constant > static const uint16_t uni_hangul_t_end = uni_hangul_t_base + > uni_hangul_t_count; > ^
Need to fix it, but .. > This issue prevents building Dovecot 2.4.x on modern systems without > non-standard compiler flags, breaking out-of-the-box builds on up-to-date > Linux distributions. This can't be true. We've been compiling it with latest distros, and we don't see such compiling errors. For example locally I have clang 18.1.3 and gcc 13.3.0, and I can't get these errors with any -std options. Does it compile with the following patch? Unlikely to be the final fix, but I just want to know if there are other issues: diff --git a/src/lib/unicode-transform.c b/src/lib/unicode-transform.c index 3be88f7a0b..58bd1c1e04 100644 --- a/src/lib/unicode-transform.c +++ b/src/lib/unicode-transform.c @@ -201,13 +201,13 @@ unicode_static_array_sink_input(struct unicode_transform *trans, * Hangul syllable (de)composition */ -static const uint16_t uni_hangul_s_base = 0xac00; -static const uint16_t uni_hangul_l_base = 0x1100; -static const uint16_t uni_hangul_v_base = 0x1161; -static const uint16_t uni_hangul_t_base = 0x11a7; -static const size_t uni_hangul_l_count = 19; -static const size_t uni_hangul_v_count = 21; -static const size_t uni_hangul_t_count = 28; +#define uni_hangul_s_base 0xac00 +#define uni_hangul_l_base 0x1100 +#define uni_hangul_v_base 0x1161 +#define uni_hangul_t_base 0x11a7 +#define uni_hangul_l_count 19 +#define uni_hangul_v_count 21 +#define uni_hangul_t_count 28 static const size_t uni_hangul_n_count = uni_hangul_v_count * uni_hangul_t_count; static const uint16_t uni_hangul_l_end = uni_hangul_l_base + uni_hangul_l_count; static const uint16_t uni_hangul_v_end = uni_hangul_v_base + uni_hangul_v_count; _______________________________________________ dovecot mailing list -- [email protected] To unsubscribe send an email to [email protected]
