Re: Small patch: fix warnings during compilation on FreeBSD - Mailing list pgsql-hackers
From | Tom Lane |
---|---|
Subject | Re: Small patch: fix warnings during compilation on FreeBSD |
Date | |
Msg-id | 5236.1458063187@sss.pgh.pa.us Whole thread Raw |
In response to | Re: Small patch: fix warnings during compilation on FreeBSD (Aleksander Alekseev <a.alekseev@postgrespro.ru>) |
Responses |
Re: Small patch: fix warnings during compilation on
FreeBSD
|
List | pgsql-hackers |
Aleksander Alekseev <a.alekseev@postgrespro.ru> writes: > OK, I'm not an expert in Autotools but this patch (see attachment) seems > to solve a problem. I fooled around with this some. I felt originally that it should use AC_CHECK_DECL, but that turns out not to work because AC_CHECK_DECL has caching behavior built-in and so the second call did nothing. However, we should still adopt the probe methodology it uses rather than inventing our own; basically that's #ifndef wcstombs_l (void) wcstombs_l; #endif Also, after reviewing the bidding a bit more it seems likely to me that wcstombs_l() might be declared in <locale.h> on some platforms; which would be problematic for this test as written if <xlocale.h> pulls in <locale.h>. So the right way to make the comparison is to determine whether stdlib.h+locale.h+xlocale.h succeeds where stdlib.h+locale.h fails. I've checked this on my OS X box, which turns out to have the interesting property that xlocale.h declares wcstombs_l(), but only if you previously included stdlib.h ... wtf? But anyway that behavior is part of the motivation for leaving stdlib.h in the test. Please verify that the committed version solves your problem on FreeBSD. > Please note that these changes: > ... were generated but `autoreconf -iv`. I was not sure what to do > about them. Eventually I decided to keep them. Still these changes could > be safely discarded. Yeah, it's not uncommon for platforms to carry local patches in their autoconf packages, which results in changes like these. We make a point of generating our configure using unmodified GNU autoconf installations, so as to avoid dependencies on which platform a committer was using to run autoconf. regards, tom lane diff --git a/config/c-library.m4 b/config/c-library.m4 index 1d28c45..50d068d 100644 *** a/config/c-library.m4 --- b/config/c-library.m4 *************** fi *** 316,319 **** if test "$pgac_cv_type_locale_t" = 'yes (in xlocale.h)'; then AC_DEFINE(LOCALE_T_IN_XLOCALE, 1, [Define to 1 if `locale_t' requires <xlocale.h>.]) ! fi])])# PGAC_HEADER_XLOCALE --- 316,349 ---- if test "$pgac_cv_type_locale_t" = 'yes (in xlocale.h)'; then AC_DEFINE(LOCALE_T_IN_XLOCALE, 1, [Define to 1 if `locale_t' requires <xlocale.h>.]) ! fi])# PGAC_TYPE_LOCALE_T ! ! ! # PGAC_FUNC_WCSTOMBS_L ! # -------------------- ! # Try to find a declaration for wcstombs_l(). It might be in stdlib.h ! # (following the POSIX requirement for wcstombs()), or in locale.h, or in ! # xlocale.h. If it's in the latter, define WCSTOMBS_L_IN_XLOCALE. ! # ! AC_DEFUN([PGAC_FUNC_WCSTOMBS_L], ! [AC_CACHE_CHECK([for wcstombs_l declaration], pgac_cv_func_wcstombs_l, ! [AC_COMPILE_IFELSE([AC_LANG_PROGRAM( ! [#include <stdlib.h> ! #include <locale.h>], ! [#ifndef wcstombs_l ! (void) wcstombs_l; ! #endif])], ! [pgac_cv_func_wcstombs_l='yes'], ! [AC_COMPILE_IFELSE([AC_LANG_PROGRAM( ! [#include <stdlib.h> ! #include <locale.h> ! #include <xlocale.h>], ! [#ifndef wcstombs_l ! (void) wcstombs_l; ! #endif])], ! [pgac_cv_func_wcstombs_l='yes (in xlocale.h)'], ! [pgac_cv_func_wcstombs_l='no'])])]) ! if test "$pgac_cv_func_wcstombs_l" = 'yes (in xlocale.h)'; then ! AC_DEFINE(WCSTOMBS_L_IN_XLOCALE, 1, ! [Define to 1 if `wcstombs_l' requires <xlocale.h>.]) ! fi])# PGAC_FUNC_WCSTOMBS_L diff --git a/configure b/configure index 08cff23..a45be67 100755 *** a/configure --- b/configure *************** $as_echo "#define GETTIMEOFDAY_1ARG 1" > *** 12364,12369 **** --- 12364,12422 ---- fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wcstombs_l declaration" >&5 + $as_echo_n "checking for wcstombs_l declaration... " >&6; } + if ${pgac_cv_func_wcstombs_l+:} false; then : + $as_echo_n "(cached) " >&6 + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ + #include <stdlib.h> + #include <locale.h> + int + main () + { + #ifndef wcstombs_l + (void) wcstombs_l; + #endif + ; + return 0; + } + _ACEOF + if ac_fn_c_try_compile "$LINENO"; then : + pgac_cv_func_wcstombs_l='yes' + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ + #include <stdlib.h> + #include <locale.h> + #include <xlocale.h> + int + main () + { + #ifndef wcstombs_l + (void) wcstombs_l; + #endif + ; + return 0; + } + _ACEOF + if ac_fn_c_try_compile "$LINENO"; then : + pgac_cv_func_wcstombs_l='yes (in xlocale.h)' + else + pgac_cv_func_wcstombs_l='no' + fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_func_wcstombs_l" >&5 + $as_echo "$pgac_cv_func_wcstombs_l" >&6; } + if test "$pgac_cv_func_wcstombs_l" = 'yes (in xlocale.h)'; then + + $as_echo "#define WCSTOMBS_L_IN_XLOCALE 1" >>confdefs.h + + fi # Some versions of libedit contain strlcpy(), setproctitle(), and other # symbols that that library has no business exposing to the world. Pending diff --git a/configure.in b/configure.in index 0b7dd97..c298926 100644 *** a/configure.in --- b/configure.in *************** fi *** 1423,1428 **** --- 1423,1429 ---- PGAC_VAR_INT_TIMEZONE AC_FUNC_ACCEPT_ARGTYPES PGAC_FUNC_GETTIMEOFDAY_1ARG + PGAC_FUNC_WCSTOMBS_L # Some versions of libedit contain strlcpy(), setproctitle(), and other # symbols that that library has no business exposing to the world. Pending diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in index b3ceea5..3813226 100644 *** a/src/include/pg_config.h.in --- b/src/include/pg_config.h.in *************** *** 851,856 **** --- 851,859 ---- /* Define to select Win32-style shared memory. */ #undef USE_WIN32_SHARED_MEMORY + /* Define to 1 if `wcstombs_l' requires <xlocale.h>. */ + #undef WCSTOMBS_L_IN_XLOCALE + /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ #if defined AC_APPLE_UNIVERSAL_BUILD diff --git a/src/include/pg_config.h.win32 b/src/include/pg_config.h.win32 index 8566065..eba36df 100644 *** a/src/include/pg_config.h.win32 --- b/src/include/pg_config.h.win32 *************** *** 657,662 **** --- 657,665 ---- /* Define to select Win32-style semaphores. */ #define USE_WIN32_SEMAPHORES 1 + /* Define to 1 if `wcstombs_l' requires <xlocale.h>. */ + /* #undef WCSTOMBS_L_IN_XLOCALE */ + /* Number of bits in a file offset, on hosts where this is settable. */ /* #undef _FILE_OFFSET_BITS */ diff --git a/src/include/utils/pg_locale.h b/src/include/utils/pg_locale.h index 2e6dba1..0a4b9f7 100644 *** a/src/include/utils/pg_locale.h --- b/src/include/utils/pg_locale.h *************** *** 13,19 **** #define _PG_LOCALE_ #include <locale.h> ! #ifdef LOCALE_T_IN_XLOCALE #include <xlocale.h> #endif --- 13,19 ---- #define _PG_LOCALE_ #include <locale.h> ! #if defined(LOCALE_T_IN_XLOCALE) || defined(WCSTOMBS_L_IN_XLOCALE) #include <xlocale.h> #endif
pgsql-hackers by date: