Dovecot在FreeBSD 14上编译报错的处理
编译dovecot 2.3.21的时候报错,编译停在src/lib-test/test-common.h处,错误代码来自src/lib-index/test-mail-index-transaction-update.c中,出错信息如下:
../../src/lib-test/test-common.h:20:8: note: expanded from macro 'test_assert'
if (!(code)) test_assert_failed(#code, __FILE__, __LINE__); \
^
test-mail-index-transaction-update.c:648:42: warning: arithmetic on a pointer to the function type 'char *(int, int)' is a GNU extension [-Wgnu-pointer-arith]
hdr.day_stamp = tests[i].old_day_stamp + timezone;
^ ~~~~~~~~
test-mail-index-transaction-update.c:648:17: error: incompatible pointer to integer conversion assigning to 'uint32_t' (aka 'unsigned int') from 'char *(*)(int, int)' [-Wint-conversion]
hdr.day_stamp = tests[i].old_day_stamp + timezone;
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
test-mail-index-transaction-update.c:650:49: warning: arithmetic on a pointer to the function type 'char *(int, int)' is a GNU extension [-Wgnu-pointer-arith]
mail_index_update_day_headers(t, tests[i].now + timezone);
^ ~~~~~~~~
test-mail-index-transaction-update.c:650:36: error: incompatible pointer to integer conversion passing 'char *(*)(int, int)' to parameter of type 'time_t' (aka 'long') [-Wint-conversion]
mail_index_update_day_headers(t, tests[i].now + timezone);
^~~~~~~~~~~~~~~~~~~~~~~
./mail-index-transaction-private.h:127:77: note: passing argument to parameter 'day_stamp' here
void mail_index_update_day_headers(struct mail_index_transaction *t, time_t day_stamp);
^
test-mail-index-transaction-update.c:654:63: warning: arithmetic on a pointer to the function type 'char *(int, int)' is a GNU extension [-Wgnu-pointer-arith]
test_assert_idx(new_hdr.day_stamp == tests[i].new_day_stamp + timezone, i);
^ ~~~~~~~~
../../src/lib-test/test-common.h:26:9: note: expanded from macro 'test_assert_idx'
if (!(code)) test_assert_failed_idx(#code, __FILE__, __LINE__, i); \
^~~~
test-mail-index-transaction-update.c:654:37: warning: comparison between pointer and integer ('uint32_t' (aka 'unsigned int') and 'char *(*)(int, int)') [-Wpointer-integer-compare]
test_assert_idx(new_hdr.day_stamp == tests[i].new_day_stamp + timezone, i);
~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../src/lib-test/test-common.h:26:9: note: expanded from macro 'test_assert_idx'
if (!(code)) test_assert_failed_idx(#code, __FILE__, __LINE__, i); \
^~~~
打个这三个patch后编译成功:
Fix these warnings and errors by importing:
https://github.com/dovecot/core/commit/e983ead775671186b3c8567d59973d2e52b678c7
https://github.com/dovecot/core/commit/1a7b1f66fe4b86cb642dbcfe5a0192c1b77d0e17
https://github.com/dovecot/core/commit/867a37fa7b74f798a931fb582214b5377f57610e