From 4a9aaf7c2621c2800b163efe928512c20bd422e2 Mon Sep 17 00:00:00 2001 From: Sam James Date: Thu, 9 Feb 2023 23:17:53 +0000 Subject: [PATCH] ITS#10011 build: fix compatibility with stricter C99 compilers Fix the following warnings: - -Wimplicit-int (fatal with Clang 16) - -Wimplicit-function-declaration (fatal with Clang 16) - -Wincompatible-function-pointer-types (fatal with Clang 16) - -Wint-conversion (fatal with Clang 15) - Old style prototypes (K&R, removed from C23) These warnings-now-error led to misconfigurations and failure to build OpenLDAP, as the tests used during configure caused the wrong results to be emitted. For more information, see LWN.net [0] or LLVM's Discourse [1], the Gentoo wiki [2], or the (new) c-std-porting mailing list [3]. [0] https://lwn.net/Articles/913505/ [1] https://discourse.llvm.org/t/configure-script-breakage-with-the-new-werror-implicit-function-declaration/65213 [2] https://wiki.gentoo.org/wiki/Modern_C_porting [3] hosted at lists.linux.dev. Bug: https://bugs.gentoo.org/871288 Signed-off-by: Sam James --- build/openldap.m4 | 16 +++++++++++++--- configure.ac | 29 +++++++++++++++++++++-------- 2 files changed, 34 insertions(+), 11 deletions(-) diff --git a/build/openldap.m4 b/build/openldap.m4 index c7fa19e42e..9419aafa21 100644 --- a/build/openldap.m4 +++ b/build/openldap.m4 @@ -154,6 +154,7 @@ fi if test $ol_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. AC_RUN_IFELSE([AC_LANG_SOURCE([[#include +#include #ifndef HAVE_EBCDIC # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) @@ -303,8 +304,12 @@ AC_DEFUN([OL_PTHREAD_TEST_INCLUDES], [[ #define NULL (void*)0 #endif +#ifdef __STDC__ +static void *task(void *p) +#else static void *task(p) void *p; +#endif { return (void *) (p == NULL); } @@ -360,9 +365,13 @@ AC_DEFUN([OL_PTHREAD_TEST_FUNCTION],[[ AC_DEFUN([OL_PTHREAD_TEST_PROGRAM], [AC_LANG_SOURCE([OL_PTHREAD_TEST_INCLUDES +#ifdef __STDC__ +int main(int argc, char **argv) +#else int main(argc, argv) int argc; char **argv; +#endif { OL_PTHREAD_TEST_FUNCTION } @@ -484,7 +493,7 @@ AC_CACHE_CHECK([for compatible POSIX regex],ol_cv_c_posix_regex,[ #include #include static char *pattern, *string; -main() +int main(void) { int rc; regex_t re; @@ -511,7 +520,8 @@ AC_DEFUN([OL_C_UPPER_LOWER], [AC_CACHE_CHECK([if toupper() requires islower()],ol_cv_c_upper_lower,[ AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include -main() +#include +int main(void) { if ('C' == toupper('C')) exit(0); @@ -569,7 +579,7 @@ AC_DEFUN([OL_NONPOSIX_STRERROR_R], ]])],[ol_cv_nonposix_strerror_r=yes],[ol_cv_nonposix_strerror_r=no]) else AC_RUN_IFELSE([AC_LANG_SOURCE([[ - main() { + int main(void) { char buf[100]; buf[0] = 0; strerror_r( 1, buf, sizeof buf ); diff --git a/configure.ac b/configure.ac index 3943f62650..83ef528047 100644 --- a/configure.ac +++ b/configure.ac @@ -1009,7 +1009,11 @@ dnl ---------------------------------------------------------------- AC_CHECK_HEADERS( sys/epoll.h ) if test "${ac_cv_header_sys_epoll_h}" = yes; then AC_MSG_CHECKING(for epoll system call) - AC_RUN_IFELSE([AC_LANG_SOURCE([[int main(int argc, char **argv) + AC_RUN_IFELSE([AC_LANG_SOURCE([[#include +#ifdef HAVE_SYS_POLL_H +#include +#endif +int main(int argc, char **argv) { int epfd = epoll_create(256); exit (epfd == -1 ? 1 : 0); @@ -1362,10 +1366,10 @@ case $ol_with_threads in auto | yes | posix) dnl pthread_create() in -lpthread (many) dnl pthread_create() in -lc_r (FreeBSD) dnl - dnl Check pthread (draft4) flags (depreciated) + dnl Check pthread (draft4) flags (deprecated) dnl pthread_create() with -threads (OSF/1) dnl - dnl Check pthread (draft4) libraries (depreciated) + dnl Check pthread (draft4) libraries (deprecated) dnl pthread_mutex_unlock() in -lpthreads -lmach -lexc -lc_r (OSF/1) dnl pthread_mutex_lock() in -lpthreads -lmach -lexc (OSF/1) dnl pthread_mutex_trylock() in -lpthreads -lexc (OSF/1) @@ -1386,7 +1390,7 @@ case $ol_with_threads in auto | yes | posix) ol_link_threads=posix ol_link_pthreads="" fi - + dnl OL_PTHREAD_TRY([-mt], [ol_cv_pthread_mt]) OL_PTHREAD_TRY([-kthread], [ol_cv_pthread_kthread]) OL_PTHREAD_TRY([-pthread], [ol_cv_pthread_pthread]) @@ -1473,10 +1477,8 @@ pthread_rwlock_t rwlock; dnl save the flags AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include -#ifndef NULL -#define NULL (void*)0 -#endif -]], [[pthread_detach(NULL);]])],[ol_cv_func_pthread_detach=yes],[ol_cv_func_pthread_detach=no]) +pthread_t thread; +]], [[pthread_detach(thread);]])],[ol_cv_func_pthread_detach=yes],[ol_cv_func_pthread_detach=no]) ]) if test $ol_cv_func_pthread_detach = no ; then @@ -1531,6 +1533,9 @@ dnl esac AC_CACHE_CHECK([if select yields when using pthreads], ol_cv_pthread_select_yields,[ AC_RUN_IFELSE([AC_LANG_SOURCE([[ +#define _XOPEN_SOURCE 500 /* For pthread_setconcurrency() on glibc */ +#include +#include #include #include #include @@ -1541,8 +1546,12 @@ dnl esac static int fildes[2]; +#ifdef __STDC__ +static void *task(void *p) +#else static void *task(p) void *p; +#endif { int i; struct timeval tv; @@ -1566,9 +1575,13 @@ static void *task(p) exit(0); /* if we exit here, the select blocked the whole process */ } +#ifdef __STDC__ +int main(int argc, char **argv) +#else int main(argc, argv) int argc; char **argv; +#endif { pthread_t t; -- 2.47.2