]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#10011 build: fix compatibility with stricter C99 compilers
authorSam James <sam@gentoo.org>
Thu, 9 Feb 2023 23:17:53 +0000 (23:17 +0000)
committerQuanah Gibson-Mount <quanah@openldap.org>
Mon, 17 Apr 2023 18:48:40 +0000 (18:48 +0000)
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 <sam@gentoo.org>
build/openldap.m4
configure.ac

index c7fa19e42eebc6ec3f81835b79cbe5a05f6c814e..9419aafa213a99d32119ea2b6563ee0f1064416b 100644 (file)
@@ -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 <ctype.h>
+#include <stdlib.h>
 #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 <sys/types.h>
 #include <regex.h>
 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 <ctype.h>
-main()
+#include <stdlib.h>
+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 );
index 3943f6265060065483db582e5c7bef14fe934d80..83ef5280475a7529b44a783ec58790269a6214e2 100644 (file)
@@ -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 <stdlib.h>
+#ifdef HAVE_SYS_POLL_H
+#include <sys/epoll.h>
+#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 <pthread.h>
-#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 <stdlib.h>
+#include <stdio.h>
 #include <sys/types.h>
 #include <sys/time.h>
 #include <unistd.h>
@@ -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;