Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitdcd6200

Browse files
committed
Fix configure's AC_CHECK_DECLS tests to work correctly with clang.
The test case that Autoconf uses to discover whether a function hasbeen declared doesn't work reliably with clang, because clang reportsa warning not an error if the name is a known built-in function.On some platforms, this results in a lot of compile-time warnings aboutstrlcpy and related functions not having been declared.There is a fix for this (by Noah Misch) in the upstream Autoconf sources,but since they've not made a release in years and show no indication ofdoing so anytime soon, let's just absorb their fix directly. We canrevert this when and if we update to a newer Autoconf release.Back-patch to all supported branches.Discussion:https://postgr.es/m/26819.1542515567@sss.pgh.pa.us
1 parenta4db7fe commitdcd6200

File tree

4 files changed

+223
-7
lines changed

4 files changed

+223
-7
lines changed

‎aclocal.m4

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ m4_include([config/ax_prog_perl_modules.m4])
44
m4_include([config/ax_pthread.m4])
55
m4_include([config/c-compiler.m4])
66
m4_include([config/c-library.m4])
7+
m4_include([config/check_decls.m4])
78
m4_include([config/docbook.m4])
89
m4_include([config/general.m4])
910
m4_include([config/libtool.m4])

‎config/check_decls.m4

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
# config/check_decls.m4
2+
3+
# This file redefines the standard Autoconf macro _AC_CHECK_DECL_BODY,
4+
# and adds a supporting function _AC_UNDECLARED_WARNING, to make
5+
# AC_CHECK_DECLS behave correctly when checking for built-in library
6+
# functions with clang.
7+
8+
# This is based on commit 82ef7805faffa151e724aa76c245ec590d174580
9+
# in the Autoconf git repository. We can drop it if they ever get
10+
# around to releasing a new version of Autoconf. In the meantime,
11+
# it's distributed under Autoconf's license:
12+
13+
# This file is part of Autoconf. This program is free
14+
# software; you can redistribute it and/or modify it under the
15+
# terms of the GNU General Public License as published by the
16+
# Free Software Foundation, either version 3 of the License, or
17+
# (at your option) any later version.
18+
#
19+
# This program is distributed in the hope that it will be useful,
20+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
21+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22+
# GNU General Public License for more details.
23+
#
24+
# Under Section 7 of GPL version 3, you are granted additional
25+
# permissions described in the Autoconf Configure Script Exception,
26+
# version 3.0, as published by the Free Software Foundation.
27+
#
28+
# You should have received a copy of the GNU General Public License
29+
# and a copy of the Autoconf Configure Script Exception along with
30+
# this program; see the files COPYINGv3 and COPYING.EXCEPTION
31+
# respectively. If not, see <http://www.gnu.org/licenses/>.
32+
33+
# Written by David MacKenzie, with help from
34+
# Franc,ois Pinard, Karl Berry, Richard Pixley, Ian Lance Taylor,
35+
# Roland McGrath, Noah Friedman, david d zuhn, and many others.
36+
37+
38+
# _AC_UNDECLARED_WARNING
39+
# ----------------------
40+
# Set ac_[]_AC_LANG_ABBREV[]_decl_warn_flag=yes if the compiler uses a warning,
41+
# not a more-customary error, to report some undeclared identifiers. Fail when
42+
# an affected compiler warns also on valid input. _AC_PROG_PREPROC_WORKS_IFELSE
43+
# solves a related problem.
44+
AC_DEFUN([_AC_UNDECLARED_WARNING],
45+
[# The Clang compiler raises a warning for an undeclared identifier that matches
46+
# a compiler builtin function. All extant Clang versions are affected, as of
47+
# Clang 3.6.0. Test a builtin known to every version. This problem affects the
48+
# C and Objective C languages, but Clang does report an error under C++ and
49+
# Objective C++.
50+
#
51+
# Passing -fno-builtin to the compiler would suppress this problem. That
52+
# strategy would have the advantage of being insensitive to stray warnings, but
53+
# it would make tests less realistic.
54+
AC_CACHE_CHECK([how $[]_AC_CC[] reports undeclared, standard C functions],
55+
[ac_cv_[]_AC_LANG_ABBREV[]_decl_report],
56+
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[(void) strchr;])],
57+
[AS_IF([test -s conftest.err],[dnl
58+
# For AC_CHECK_DECL to react to warnings, the compiler must be silent on
59+
# valid AC_CHECK_DECL input. No library function is consistently available
60+
# on freestanding implementations, so test against a dummy declaration.
61+
# Include always-available headers on the off chance that they somehow
62+
# elicit warnings.
63+
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([dnl
64+
#include <float.h>
65+
#include <limits.h>
66+
#include <stdarg.h>
67+
#include <stddef.h>
68+
extern void ac_decl (int, char *);],
69+
[@%:@ifdef __cplusplus
70+
(void) ac_decl ((int) 0, (char *) 0);
71+
(void) ac_decl;
72+
@%:@else
73+
(void) ac_decl;
74+
@%:@endif
75+
])],
76+
[AS_IF([test -s conftest.err],
77+
[AC_MSG_FAILURE([cannot detect from compiler exit status or warnings])],
78+
[ac_cv_[]_AC_LANG_ABBREV[]_decl_report=warning])],
79+
[AC_MSG_FAILURE([cannot compile a simple declaration test])])],
80+
[AC_MSG_FAILURE([compiler does not report undeclared identifiers])])],
81+
[ac_cv_[]_AC_LANG_ABBREV[]_decl_report=error])])
82+
83+
case $ac_cv_[]_AC_LANG_ABBREV[]_decl_report in
84+
warning) ac_[]_AC_LANG_ABBREV[]_decl_warn_flag=yes ;;
85+
*) ac_[]_AC_LANG_ABBREV[]_decl_warn_flag= ;;
86+
esac
87+
])# _AC_UNDECLARED_WARNING
88+
89+
# _AC_CHECK_DECL_BODY
90+
# -------------------
91+
# Shell function body for AC_CHECK_DECL.
92+
m4_define([_AC_CHECK_DECL_BODY],
93+
[ AS_LINENO_PUSH([$[]1])
94+
# Initialize each $ac_[]_AC_LANG_ABBREV[]_decl_warn_flag once.
95+
AC_DEFUN([_AC_UNDECLARED_WARNING_]_AC_LANG_ABBREV,
96+
[_AC_UNDECLARED_WARNING])dnl
97+
AC_REQUIRE([_AC_UNDECLARED_WARNING_]_AC_LANG_ABBREV)dnl
98+
[as_decl_name=`echo $][2|sed 's/ *(.*//'`]
99+
[as_decl_use=`echo $][2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`]
100+
AC_CACHE_CHECK([whether $as_decl_name is declared],[$[]3],
101+
[ac_save_werror_flag=$ac_[]_AC_LANG_ABBREV[]_werror_flag
102+
ac_[]_AC_LANG_ABBREV[]_werror_flag="$ac_[]_AC_LANG_ABBREV[]_decl_warn_flag$ac_[]_AC_LANG_ABBREV[]_werror_flag"
103+
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$[]4],
104+
[@%:@ifndef $[]as_decl_name
105+
@%:@ifdef __cplusplus
106+
(void) $[]as_decl_use;
107+
@%:@else
108+
(void) $[]as_decl_name;
109+
@%:@endif
110+
@%:@endif
111+
])],
112+
[AS_VAR_SET([$[]3],[yes])],
113+
[AS_VAR_SET([$[]3],[no])])
114+
ac_[]_AC_LANG_ABBREV[]_werror_flag=$ac_save_werror_flag])
115+
AS_LINENO_POP
116+
])# _AC_CHECK_DECL_BODY

‎configure

Lines changed: 100 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1757,13 +1757,16 @@ fi
17571757
ac_fn_c_check_decl ()
17581758
{
17591759
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
1760-
as_decl_name=`echo $2|sed 's/ *(.*//'`
1760+
# Initialize each $ac_[]_AC_LANG_ABBREV[]_decl_warn_flag once.
1761+
as_decl_name=`echo $2|sed 's/ *(.*//'`
17611762
as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
17621763
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
17631764
$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
17641765
if eval \${$3+:} false; then :
17651766
$as_echo_n "(cached) " >&6
17661767
else
1768+
ac_save_werror_flag=$ac_c_werror_flag
1769+
ac_c_werror_flag="$ac_c_decl_warn_flag$ac_c_werror_flag"
17671770
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
17681771
/* end confdefs.h. */
17691772
$4
@@ -1788,6 +1791,7 @@ else
17881791
eval "$3=no"
17891792
fi
17901793
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
1794+
ac_c_werror_flag=$ac_save_werror_flag
17911795
fi
17921796
eval ac_res=\$$3
17931797
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
@@ -4807,11 +4811,100 @@ fi
48074811
test -n "$AWK" && break
48084812
done
48094813

4814+
# The Clang compiler raises a warning for an undeclared identifier that matches
4815+
# a compiler builtin function. All extant Clang versions are affected, as of
4816+
# Clang 3.6.0. Test a builtin known to every version. This problem affects the
4817+
# C and Objective C languages, but Clang does report an error under C++ and
4818+
# Objective C++.
4819+
#
4820+
# Passing -fno-builtin to the compiler would suppress this problem. That
4821+
# strategy would have the advantage of being insensitive to stray warnings, but
4822+
# it would make tests less realistic.
4823+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how $CC reports undeclared, standard C functions" >&5
4824+
$as_echo_n "checking how $CC reports undeclared, standard C functions... " >&6; }
4825+
if ${ac_cv_c_decl_report+:} false; then :
4826+
$as_echo_n "(cached) " >&6
4827+
else
4828+
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
4829+
/* end confdefs.h. */
4830+
4831+
int
4832+
main ()
4833+
{
4834+
(void) strchr;
4835+
;
4836+
return 0;
4837+
}
4838+
_ACEOF
4839+
if ac_fn_c_try_compile "$LINENO"; then :
4840+
if test -s conftest.err; then :
4841+
# For AC_CHECK_DECL to react to warnings, the compiler must be silent on
4842+
# valid AC_CHECK_DECL input. No library function is consistently available
4843+
# on freestanding implementations, so test against a dummy declaration.
4844+
# Include always-available headers on the off chance that they somehow
4845+
# elicit warnings.
4846+
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
4847+
/* end confdefs.h. */
4848+
#include <float.h>
4849+
#include <limits.h>
4850+
#include <stdarg.h>
4851+
#include <stddef.h>
4852+
extern void ac_decl (int, char *);
4853+
int
4854+
main ()
4855+
{
4856+
#ifdef __cplusplus
4857+
(void) ac_decl ((int) 0, (char *) 0);
4858+
(void) ac_decl;
4859+
#else
4860+
(void) ac_decl;
4861+
#endif
4862+
4863+
;
4864+
return 0;
4865+
}
4866+
_ACEOF
4867+
if ac_fn_c_try_compile "$LINENO"; then :
4868+
if test -s conftest.err; then :
4869+
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
4870+
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
4871+
as_fn_error $? "cannot detect from compiler exit status or warnings
4872+
See \`config.log' for more details" "$LINENO" 5; }
4873+
else
4874+
ac_cv_c_decl_report=warning
4875+
fi
4876+
else
4877+
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
4878+
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
4879+
as_fn_error $? "cannot compile a simple declaration test
4880+
See \`config.log' for more details" "$LINENO" 5; }
4881+
fi
4882+
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
4883+
else
4884+
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
4885+
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
4886+
as_fn_error $? "compiler does not report undeclared identifiers
4887+
See \`config.log' for more details" "$LINENO" 5; }
4888+
fi
4889+
else
4890+
ac_cv_c_decl_report=error
4891+
fi
4892+
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
4893+
fi
4894+
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_decl_report" >&5
4895+
$as_echo "$ac_cv_c_decl_report" >&6; }
4896+
4897+
case $ac_cv_c_decl_report in
4898+
warning) ac_c_decl_warn_flag=yes ;;
4899+
*) ac_c_decl_warn_flag= ;;
4900+
esac
4901+
48104902
if test "$with_llvm" = yes; then :
48114903

48124904

48134905

48144906

4907+
48154908
if test -z "$LLVM_CONFIG"; then
48164909
for ac_prog in llvm-config llvm-config-7 llvm-config-6.0 llvm-config-5.0 llvm-config-4.0 llvm-config-3.9
48174910
do
@@ -5067,7 +5160,8 @@ _ACEOF
50675160

50685161

50695162

5070-
fi
5163+
5164+
fi # fi
50715165

50725166

50735167
unset CFLAGS
@@ -15036,7 +15130,8 @@ esac
1503615130
# posix_fadvise() is a no-op on Solaris, so don't incur function overhead
1503715131
# by calling it, 2009-04-02
1503815132
# http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/libc/port/gen/posix_fadvise.c
15039-
if test "$PORTNAME" != "solaris"; then
15133+
if test "$PORTNAME" != "solaris"; then :
15134+
1504015135
for ac_func in posix_fadvise
1504115136
do :
1504215137
ac_fn_c_check_func "$LINENO" "posix_fadvise" "ac_cv_func_posix_fadvise"
@@ -15060,7 +15155,8 @@ cat >>confdefs.h <<_ACEOF
1506015155
#define HAVE_DECL_POSIX_FADVISE $ac_have_decl
1506115156
_ACEOF
1506215157

15063-
fi
15158+
15159+
fi # fi
1506415160

1506515161
ac_fn_c_check_decl "$LINENO" "fdatasync" "ac_cv_have_decl_fdatasync" "#include <unistd.h>
1506615162
"

‎configure.in

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,9 @@ PGAC_ARG_BOOL(with, llvm, no, [build with LLVM based JIT support],
384384
[AC_DEFINE([USE_LLVM], 1, [Define to 1 to build with LLVM based JIT support. (--with-llvm)])])
385385
AC_SUBST(with_llvm)
386386
dnl must use AS_IF here, else AC_REQUIRES inside PGAC_LLVM_SUPPORT malfunctions
387-
AS_IF([test "$with_llvm" = yes], [PGAC_LLVM_SUPPORT()])
387+
AS_IF([test "$with_llvm" = yes], [
388+
PGAC_LLVM_SUPPORT()
389+
]) # fi
388390

389391

390392
unset CFLAGS
@@ -1582,10 +1584,11 @@ esac
15821584
# posix_fadvise() is a no-op on Solaris, so don't incur function overhead
15831585
# by calling it, 2009-04-02
15841586
# http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/libc/port/gen/posix_fadvise.c
1585-
if test "$PORTNAME" != "solaris"; then
1587+
dnl must use AS_IF here, else AC_REQUIRES inside AC_CHECK_DECLS malfunctions
1588+
AS_IF([test "$PORTNAME" != "solaris"], [
15861589
AC_CHECK_FUNCS(posix_fadvise)
15871590
AC_CHECK_DECLS(posix_fadvise, [], [], [#include <fcntl.h>])
1588-
fi
1591+
]) #fi
15891592

15901593
AC_CHECK_DECLS(fdatasync, [], [], [#include <unistd.h>])
15911594
AC_CHECK_DECLS([strlcat, strlcpy, strnlen])

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp