xref: /aosp_15_r20/external/curl/m4/curl-compilers.m4 (revision 6236dae45794135f37c4eb022389c904c8b0090d)
1*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
2*6236dae4SAndroid Build Coastguard Worker#                                  _   _ ____  _
3*6236dae4SAndroid Build Coastguard Worker#  Project                     ___| | | |  _ \| |
4*6236dae4SAndroid Build Coastguard Worker#                             / __| | | | |_) | |
5*6236dae4SAndroid Build Coastguard Worker#                            | (__| |_| |  _ <| |___
6*6236dae4SAndroid Build Coastguard Worker#                             \___|\___/|_| \_\_____|
7*6236dae4SAndroid Build Coastguard Worker#
8*6236dae4SAndroid Build Coastguard Worker# Copyright (C) Daniel Stenberg, <[email protected]>, et al.
9*6236dae4SAndroid Build Coastguard Worker#
10*6236dae4SAndroid Build Coastguard Worker# This software is licensed as described in the file COPYING, which
11*6236dae4SAndroid Build Coastguard Worker# you should have received as part of this distribution. The terms
12*6236dae4SAndroid Build Coastguard Worker# are also available at https://curl.se/docs/copyright.html.
13*6236dae4SAndroid Build Coastguard Worker#
14*6236dae4SAndroid Build Coastguard Worker# You may opt to use, copy, modify, merge, publish, distribute and/or sell
15*6236dae4SAndroid Build Coastguard Worker# copies of the Software, and permit persons to whom the Software is
16*6236dae4SAndroid Build Coastguard Worker# furnished to do so, under the terms of the COPYING file.
17*6236dae4SAndroid Build Coastguard Worker#
18*6236dae4SAndroid Build Coastguard Worker# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19*6236dae4SAndroid Build Coastguard Worker# KIND, either express or implied.
20*6236dae4SAndroid Build Coastguard Worker#
21*6236dae4SAndroid Build Coastguard Worker# SPDX-License-Identifier: curl
22*6236dae4SAndroid Build Coastguard Worker#
23*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
24*6236dae4SAndroid Build Coastguard Worker
25*6236dae4SAndroid Build Coastguard Worker# File version for 'aclocal' use. Keep it a single number.
26*6236dae4SAndroid Build Coastguard Worker# serial 67
27*6236dae4SAndroid Build Coastguard Worker
28*6236dae4SAndroid Build Coastguard Worker
29*6236dae4SAndroid Build Coastguard Workerdnl CURL_CHECK_COMPILER
30*6236dae4SAndroid Build Coastguard Workerdnl -------------------------------------------------
31*6236dae4SAndroid Build Coastguard Workerdnl Verify if the C compiler being used is known.
32*6236dae4SAndroid Build Coastguard Worker
33*6236dae4SAndroid Build Coastguard WorkerAC_DEFUN([CURL_CHECK_COMPILER], [
34*6236dae4SAndroid Build Coastguard Worker  #
35*6236dae4SAndroid Build Coastguard Worker  compiler_id="unknown"
36*6236dae4SAndroid Build Coastguard Worker  compiler_ver=""
37*6236dae4SAndroid Build Coastguard Worker  compiler_num="0"
38*6236dae4SAndroid Build Coastguard Worker  #
39*6236dae4SAndroid Build Coastguard Worker  flags_dbg_yes="unknown"
40*6236dae4SAndroid Build Coastguard Worker  flags_opt_all="unknown"
41*6236dae4SAndroid Build Coastguard Worker  flags_opt_yes="unknown"
42*6236dae4SAndroid Build Coastguard Worker  flags_opt_off="unknown"
43*6236dae4SAndroid Build Coastguard Worker  #
44*6236dae4SAndroid Build Coastguard Worker  flags_prefer_cppflags="no"
45*6236dae4SAndroid Build Coastguard Worker  #
46*6236dae4SAndroid Build Coastguard Worker  CURL_CHECK_COMPILER_DEC_C
47*6236dae4SAndroid Build Coastguard Worker  CURL_CHECK_COMPILER_HPUX_C
48*6236dae4SAndroid Build Coastguard Worker  CURL_CHECK_COMPILER_IBM_C
49*6236dae4SAndroid Build Coastguard Worker  CURL_CHECK_COMPILER_INTEL_C
50*6236dae4SAndroid Build Coastguard Worker  CURL_CHECK_COMPILER_CLANG
51*6236dae4SAndroid Build Coastguard Worker  CURL_CHECK_COMPILER_GNU_C
52*6236dae4SAndroid Build Coastguard Worker  case $host in
53*6236dae4SAndroid Build Coastguard Worker    mips-sgi-irix*)
54*6236dae4SAndroid Build Coastguard Worker      CURL_CHECK_COMPILER_SGI_MIPSPRO_C
55*6236dae4SAndroid Build Coastguard Worker      CURL_CHECK_COMPILER_SGI_MIPS_C
56*6236dae4SAndroid Build Coastguard Worker    ;;
57*6236dae4SAndroid Build Coastguard Worker  esac
58*6236dae4SAndroid Build Coastguard Worker  CURL_CHECK_COMPILER_SUNPRO_C
59*6236dae4SAndroid Build Coastguard Worker  CURL_CHECK_COMPILER_TINY_C
60*6236dae4SAndroid Build Coastguard Worker  #
61*6236dae4SAndroid Build Coastguard Worker  if test "$compiler_id" = "unknown"; then
62*6236dae4SAndroid Build Coastguard Worker  cat <<_EOF 1>&2
63*6236dae4SAndroid Build Coastguard Worker***
64*6236dae4SAndroid Build Coastguard Worker*** Warning: This configure script does not have information about the
65*6236dae4SAndroid Build Coastguard Worker*** compiler you are using, relative to the flags required to enable or
66*6236dae4SAndroid Build Coastguard Worker*** disable generation of debug info, optimization options or warnings.
67*6236dae4SAndroid Build Coastguard Worker***
68*6236dae4SAndroid Build Coastguard Worker*** Whatever settings are present in CFLAGS will be used for this run.
69*6236dae4SAndroid Build Coastguard Worker***
70*6236dae4SAndroid Build Coastguard Worker*** If you wish to help the curl project to better support your compiler
71*6236dae4SAndroid Build Coastguard Worker*** you can report this and the required info on the libcurl development
72*6236dae4SAndroid Build Coastguard Worker*** mailing list: https://lists.haxx.selistinfo/curl-library/
73*6236dae4SAndroid Build Coastguard Worker***
74*6236dae4SAndroid Build Coastguard Worker_EOF
75*6236dae4SAndroid Build Coastguard Worker  fi
76*6236dae4SAndroid Build Coastguard Worker])
77*6236dae4SAndroid Build Coastguard Worker
78*6236dae4SAndroid Build Coastguard Worker
79*6236dae4SAndroid Build Coastguard Workerdnl CURL_CHECK_COMPILER_CLANG
80*6236dae4SAndroid Build Coastguard Workerdnl -------------------------------------------------
81*6236dae4SAndroid Build Coastguard Workerdnl Verify if compiler being used is clang.
82*6236dae4SAndroid Build Coastguard Worker
83*6236dae4SAndroid Build Coastguard WorkerAC_DEFUN([CURL_CHECK_COMPILER_CLANG], [
84*6236dae4SAndroid Build Coastguard Worker  AC_BEFORE([$0],[CURL_CHECK_COMPILER_GNU_C])dnl
85*6236dae4SAndroid Build Coastguard Worker  AC_MSG_CHECKING([if compiler is clang])
86*6236dae4SAndroid Build Coastguard Worker  CURL_CHECK_DEF([__clang__], [], [silent])
87*6236dae4SAndroid Build Coastguard Worker  if test "$curl_cv_have_def___clang__" = "yes"; then
88*6236dae4SAndroid Build Coastguard Worker    AC_MSG_RESULT([yes])
89*6236dae4SAndroid Build Coastguard Worker    AC_MSG_CHECKING([if compiler is xlclang])
90*6236dae4SAndroid Build Coastguard Worker    CURL_CHECK_DEF([__ibmxl__], [], [silent])
91*6236dae4SAndroid Build Coastguard Worker    if test "$curl_cv_have_def___ibmxl__" = "yes" ; then
92*6236dae4SAndroid Build Coastguard Worker      dnl IBM's almost-compatible clang version
93*6236dae4SAndroid Build Coastguard Worker      AC_MSG_RESULT([yes])
94*6236dae4SAndroid Build Coastguard Worker      compiler_id="XLCLANG"
95*6236dae4SAndroid Build Coastguard Worker    else
96*6236dae4SAndroid Build Coastguard Worker      AC_MSG_RESULT([no])
97*6236dae4SAndroid Build Coastguard Worker      compiler_id="CLANG"
98*6236dae4SAndroid Build Coastguard Worker    fi
99*6236dae4SAndroid Build Coastguard Worker    AC_MSG_CHECKING([if compiler is Apple clang])
100*6236dae4SAndroid Build Coastguard Worker    fullclangver=`$CC -v 2>&1 | grep version`
101*6236dae4SAndroid Build Coastguard Worker    if echo $fullclangver | grep 'Apple' >/dev/null; then
102*6236dae4SAndroid Build Coastguard Worker      AC_MSG_RESULT([yes])
103*6236dae4SAndroid Build Coastguard Worker      appleclang=1
104*6236dae4SAndroid Build Coastguard Worker      compiler_id="APPLECLANG"
105*6236dae4SAndroid Build Coastguard Worker    else
106*6236dae4SAndroid Build Coastguard Worker      AC_MSG_RESULT([no])
107*6236dae4SAndroid Build Coastguard Worker      appleclang=0
108*6236dae4SAndroid Build Coastguard Worker    fi
109*6236dae4SAndroid Build Coastguard Worker    AC_MSG_CHECKING([compiler version])
110*6236dae4SAndroid Build Coastguard Worker    clangver=`echo $fullclangver | grep "based on LLVM " | "$SED" 's/.*(based on LLVM \(@<:@0-9@:>@*\.@<:@0-9@:>@*\).*)/\1/'`
111*6236dae4SAndroid Build Coastguard Worker    if test -z "$clangver"; then
112*6236dae4SAndroid Build Coastguard Worker      clangver=`echo $fullclangver | "$SED" 's/.*version \(@<:@0-9@:>@*\.@<:@0-9@:>@*\).*/\1/'`
113*6236dae4SAndroid Build Coastguard Worker      oldapple=0
114*6236dae4SAndroid Build Coastguard Worker    else
115*6236dae4SAndroid Build Coastguard Worker      oldapple=1
116*6236dae4SAndroid Build Coastguard Worker    fi
117*6236dae4SAndroid Build Coastguard Worker    clangvhi=`echo $clangver | cut -d . -f1`
118*6236dae4SAndroid Build Coastguard Worker    clangvlo=`echo $clangver | cut -d . -f2`
119*6236dae4SAndroid Build Coastguard Worker    compiler_ver="$clangver"
120*6236dae4SAndroid Build Coastguard Worker    compiler_num=`(expr $clangvhi "*" 100 + $clangvlo) 2>/dev/null`
121*6236dae4SAndroid Build Coastguard Worker    if test "$appleclang" = '1' && test "$oldapple" = '0'; then
122*6236dae4SAndroid Build Coastguard Worker      dnl Starting with Xcode 7 / clang 3.7, Apple clang won't tell its upstream version
123*6236dae4SAndroid Build Coastguard Worker      if   test "$compiler_num" -ge '1300'; then compiler_num='1200'
124*6236dae4SAndroid Build Coastguard Worker      elif test "$compiler_num" -ge '1205'; then compiler_num='1101'
125*6236dae4SAndroid Build Coastguard Worker      elif test "$compiler_num" -ge '1204'; then compiler_num='1000'
126*6236dae4SAndroid Build Coastguard Worker      elif test "$compiler_num" -ge '1107'; then compiler_num='900'
127*6236dae4SAndroid Build Coastguard Worker      elif test "$compiler_num" -ge '1103'; then compiler_num='800'
128*6236dae4SAndroid Build Coastguard Worker      elif test "$compiler_num" -ge '1003'; then compiler_num='700'
129*6236dae4SAndroid Build Coastguard Worker      elif test "$compiler_num" -ge '1001'; then compiler_num='600'
130*6236dae4SAndroid Build Coastguard Worker      elif test "$compiler_num" -ge  '904'; then compiler_num='500'
131*6236dae4SAndroid Build Coastguard Worker      elif test "$compiler_num" -ge  '902'; then compiler_num='400'
132*6236dae4SAndroid Build Coastguard Worker      elif test "$compiler_num" -ge  '803'; then compiler_num='309'
133*6236dae4SAndroid Build Coastguard Worker      elif test "$compiler_num" -ge  '703'; then compiler_num='308'
134*6236dae4SAndroid Build Coastguard Worker      else                                       compiler_num='307'
135*6236dae4SAndroid Build Coastguard Worker      fi
136*6236dae4SAndroid Build Coastguard Worker    fi
137*6236dae4SAndroid Build Coastguard Worker    AC_MSG_RESULT([clang '$compiler_num' (raw: '$fullclangver' / '$clangver')])
138*6236dae4SAndroid Build Coastguard Worker    flags_dbg_yes="-g"
139*6236dae4SAndroid Build Coastguard Worker    flags_opt_all="-O -O0 -O1 -O2 -Os -O3 -O4"
140*6236dae4SAndroid Build Coastguard Worker    flags_opt_yes="-O2"
141*6236dae4SAndroid Build Coastguard Worker    flags_opt_off="-O0"
142*6236dae4SAndroid Build Coastguard Worker  else
143*6236dae4SAndroid Build Coastguard Worker    AC_MSG_RESULT([no])
144*6236dae4SAndroid Build Coastguard Worker  fi
145*6236dae4SAndroid Build Coastguard Worker])
146*6236dae4SAndroid Build Coastguard Worker
147*6236dae4SAndroid Build Coastguard Worker
148*6236dae4SAndroid Build Coastguard Workerdnl CURL_CHECK_COMPILER_DEC_C
149*6236dae4SAndroid Build Coastguard Workerdnl -------------------------------------------------
150*6236dae4SAndroid Build Coastguard Workerdnl Verify if compiler being used is DEC C.
151*6236dae4SAndroid Build Coastguard Worker
152*6236dae4SAndroid Build Coastguard WorkerAC_DEFUN([CURL_CHECK_COMPILER_DEC_C], [
153*6236dae4SAndroid Build Coastguard Worker  AC_MSG_CHECKING([if compiler is DEC/Compaq/HP C])
154*6236dae4SAndroid Build Coastguard Worker  CURL_CHECK_DEF([__DECC], [], [silent])
155*6236dae4SAndroid Build Coastguard Worker  CURL_CHECK_DEF([__DECC_VER], [], [silent])
156*6236dae4SAndroid Build Coastguard Worker  if test "$curl_cv_have_def___DECC" = "yes" &&
157*6236dae4SAndroid Build Coastguard Worker     test "$curl_cv_have_def___DECC_VER" = "yes"; then
158*6236dae4SAndroid Build Coastguard Worker    AC_MSG_RESULT([yes])
159*6236dae4SAndroid Build Coastguard Worker    compiler_id="DEC_C"
160*6236dae4SAndroid Build Coastguard Worker    flags_dbg_yes="-g2"
161*6236dae4SAndroid Build Coastguard Worker    flags_opt_all="-O -O0 -O1 -O2 -O3 -O4"
162*6236dae4SAndroid Build Coastguard Worker    flags_opt_yes="-O1"
163*6236dae4SAndroid Build Coastguard Worker    flags_opt_off="-O0"
164*6236dae4SAndroid Build Coastguard Worker  else
165*6236dae4SAndroid Build Coastguard Worker    AC_MSG_RESULT([no])
166*6236dae4SAndroid Build Coastguard Worker  fi
167*6236dae4SAndroid Build Coastguard Worker])
168*6236dae4SAndroid Build Coastguard Worker
169*6236dae4SAndroid Build Coastguard Worker
170*6236dae4SAndroid Build Coastguard Workerdnl CURL_CHECK_COMPILER_GNU_C
171*6236dae4SAndroid Build Coastguard Workerdnl -------------------------------------------------
172*6236dae4SAndroid Build Coastguard Workerdnl Verify if compiler being used is GNU C
173*6236dae4SAndroid Build Coastguard Workerdnl
174*6236dae4SAndroid Build Coastguard Workerdnl $compiler_num will be set to MAJOR * 100 + MINOR for gcc less than version
175*6236dae4SAndroid Build Coastguard Workerdnl 7 and just $MAJOR * 100 for gcc version 7 and later.
176*6236dae4SAndroid Build Coastguard Workerdnl
177*6236dae4SAndroid Build Coastguard Workerdnl Examples:
178*6236dae4SAndroid Build Coastguard Workerdnl Version 1.2.3 => 102
179*6236dae4SAndroid Build Coastguard Workerdnl Version 2.95  => 295
180*6236dae4SAndroid Build Coastguard Workerdnl Version 4.7 =>   407
181*6236dae4SAndroid Build Coastguard Workerdnl Version 9.2.1 => 900
182*6236dae4SAndroid Build Coastguard Workerdnl
183*6236dae4SAndroid Build Coastguard WorkerAC_DEFUN([CURL_CHECK_COMPILER_GNU_C], [
184*6236dae4SAndroid Build Coastguard Worker  AC_REQUIRE([CURL_CHECK_COMPILER_INTEL_C])dnl
185*6236dae4SAndroid Build Coastguard Worker  AC_REQUIRE([CURL_CHECK_COMPILER_CLANG])dnl
186*6236dae4SAndroid Build Coastguard Worker  AC_MSG_CHECKING([if compiler is GNU C])
187*6236dae4SAndroid Build Coastguard Worker  CURL_CHECK_DEF([__GNUC__], [], [silent])
188*6236dae4SAndroid Build Coastguard Worker  if test "$curl_cv_have_def___GNUC__" = "yes" &&
189*6236dae4SAndroid Build Coastguard Worker    test "$compiler_id" = "unknown"; then
190*6236dae4SAndroid Build Coastguard Worker    AC_MSG_RESULT([yes])
191*6236dae4SAndroid Build Coastguard Worker    compiler_id="GNU_C"
192*6236dae4SAndroid Build Coastguard Worker    AC_MSG_CHECKING([compiler version])
193*6236dae4SAndroid Build Coastguard Worker    # strip '-suffix' parts, e.g. Ubuntu Windows cross-gcc returns '10-win32'
194*6236dae4SAndroid Build Coastguard Worker    gccver=`$CC -dumpversion | "$SED" 's/-.\{1,\}$//'`
195*6236dae4SAndroid Build Coastguard Worker    gccvhi=`echo $gccver | cut -d . -f1`
196*6236dae4SAndroid Build Coastguard Worker    if echo $gccver | grep -F '.' >/dev/null; then
197*6236dae4SAndroid Build Coastguard Worker      gccvlo=`echo $gccver | cut -d . -f2`
198*6236dae4SAndroid Build Coastguard Worker    else
199*6236dae4SAndroid Build Coastguard Worker      gccvlo="0"
200*6236dae4SAndroid Build Coastguard Worker    fi
201*6236dae4SAndroid Build Coastguard Worker    compiler_ver="$gccver"
202*6236dae4SAndroid Build Coastguard Worker    compiler_num=`(expr $gccvhi "*" 100 + $gccvlo) 2>/dev/null`
203*6236dae4SAndroid Build Coastguard Worker    AC_MSG_RESULT([gcc '$compiler_num' (raw: '$gccver')])
204*6236dae4SAndroid Build Coastguard Worker    flags_dbg_yes="-g"
205*6236dae4SAndroid Build Coastguard Worker    flags_opt_all="-O -O0 -O1 -O2 -O3 -Os -Og -Ofast"
206*6236dae4SAndroid Build Coastguard Worker    flags_opt_yes="-O2"
207*6236dae4SAndroid Build Coastguard Worker    flags_opt_off="-O0"
208*6236dae4SAndroid Build Coastguard Worker  else
209*6236dae4SAndroid Build Coastguard Worker    AC_MSG_RESULT([no])
210*6236dae4SAndroid Build Coastguard Worker  fi
211*6236dae4SAndroid Build Coastguard Worker])
212*6236dae4SAndroid Build Coastguard Worker
213*6236dae4SAndroid Build Coastguard Worker
214*6236dae4SAndroid Build Coastguard Workerdnl CURL_CHECK_COMPILER_HPUX_C
215*6236dae4SAndroid Build Coastguard Workerdnl -------------------------------------------------
216*6236dae4SAndroid Build Coastguard Workerdnl Verify if compiler being used is HP-UX C.
217*6236dae4SAndroid Build Coastguard Worker
218*6236dae4SAndroid Build Coastguard WorkerAC_DEFUN([CURL_CHECK_COMPILER_HPUX_C], [
219*6236dae4SAndroid Build Coastguard Worker  AC_MSG_CHECKING([if compiler is HP-UX C])
220*6236dae4SAndroid Build Coastguard Worker  CURL_CHECK_DEF([__HP_cc], [], [silent])
221*6236dae4SAndroid Build Coastguard Worker  if test "$curl_cv_have_def___HP_cc" = "yes"; then
222*6236dae4SAndroid Build Coastguard Worker    AC_MSG_RESULT([yes])
223*6236dae4SAndroid Build Coastguard Worker    compiler_id="HP_UX_C"
224*6236dae4SAndroid Build Coastguard Worker    flags_dbg_yes="-g"
225*6236dae4SAndroid Build Coastguard Worker    flags_opt_all="-O +O0 +O1 +O2 +O3 +O4"
226*6236dae4SAndroid Build Coastguard Worker    flags_opt_yes="+O2"
227*6236dae4SAndroid Build Coastguard Worker    flags_opt_off="+O0"
228*6236dae4SAndroid Build Coastguard Worker  else
229*6236dae4SAndroid Build Coastguard Worker    AC_MSG_RESULT([no])
230*6236dae4SAndroid Build Coastguard Worker  fi
231*6236dae4SAndroid Build Coastguard Worker])
232*6236dae4SAndroid Build Coastguard Worker
233*6236dae4SAndroid Build Coastguard Worker
234*6236dae4SAndroid Build Coastguard Workerdnl CURL_CHECK_COMPILER_IBM_C
235*6236dae4SAndroid Build Coastguard Workerdnl -------------------------------------------------
236*6236dae4SAndroid Build Coastguard Workerdnl Verify if compiler being used is IBM C.
237*6236dae4SAndroid Build Coastguard Worker
238*6236dae4SAndroid Build Coastguard WorkerAC_DEFUN([CURL_CHECK_COMPILER_IBM_C], [
239*6236dae4SAndroid Build Coastguard Worker  AC_MSG_CHECKING([if compiler is IBM C])
240*6236dae4SAndroid Build Coastguard Worker  CURL_CHECK_DEF([__IBMC__], [], [silent])
241*6236dae4SAndroid Build Coastguard Worker  if test "$curl_cv_have_def___IBMC__" = "yes"; then
242*6236dae4SAndroid Build Coastguard Worker    AC_MSG_RESULT([yes])
243*6236dae4SAndroid Build Coastguard Worker    compiler_id="IBM_C"
244*6236dae4SAndroid Build Coastguard Worker    flags_dbg_yes="-g"
245*6236dae4SAndroid Build Coastguard Worker    flags_opt_all="-O -O0 -O1 -O2 -O3 -O4 -O5"
246*6236dae4SAndroid Build Coastguard Worker    flags_opt_all="$flags_opt_all -qnooptimize"
247*6236dae4SAndroid Build Coastguard Worker    flags_opt_all="$flags_opt_all -qoptimize=0"
248*6236dae4SAndroid Build Coastguard Worker    flags_opt_all="$flags_opt_all -qoptimize=1"
249*6236dae4SAndroid Build Coastguard Worker    flags_opt_all="$flags_opt_all -qoptimize=2"
250*6236dae4SAndroid Build Coastguard Worker    flags_opt_all="$flags_opt_all -qoptimize=3"
251*6236dae4SAndroid Build Coastguard Worker    flags_opt_all="$flags_opt_all -qoptimize=4"
252*6236dae4SAndroid Build Coastguard Worker    flags_opt_all="$flags_opt_all -qoptimize=5"
253*6236dae4SAndroid Build Coastguard Worker    flags_opt_yes="-O2"
254*6236dae4SAndroid Build Coastguard Worker    flags_opt_off="-qnooptimize"
255*6236dae4SAndroid Build Coastguard Worker    flags_prefer_cppflags="yes"
256*6236dae4SAndroid Build Coastguard Worker  else
257*6236dae4SAndroid Build Coastguard Worker    AC_MSG_RESULT([no])
258*6236dae4SAndroid Build Coastguard Worker  fi
259*6236dae4SAndroid Build Coastguard Worker])
260*6236dae4SAndroid Build Coastguard Worker
261*6236dae4SAndroid Build Coastguard Worker
262*6236dae4SAndroid Build Coastguard Workerdnl CURL_CHECK_COMPILER_INTEL_C
263*6236dae4SAndroid Build Coastguard Workerdnl -------------------------------------------------
264*6236dae4SAndroid Build Coastguard Workerdnl Verify if compiler being used is Intel C.
265*6236dae4SAndroid Build Coastguard Worker
266*6236dae4SAndroid Build Coastguard WorkerAC_DEFUN([CURL_CHECK_COMPILER_INTEL_C], [
267*6236dae4SAndroid Build Coastguard Worker  AC_BEFORE([$0],[CURL_CHECK_COMPILER_GNU_C])dnl
268*6236dae4SAndroid Build Coastguard Worker  AC_MSG_CHECKING([if compiler is Intel C])
269*6236dae4SAndroid Build Coastguard Worker  CURL_CHECK_DEF([__INTEL_COMPILER], [], [silent])
270*6236dae4SAndroid Build Coastguard Worker  if test "$curl_cv_have_def___INTEL_COMPILER" = "yes"; then
271*6236dae4SAndroid Build Coastguard Worker    AC_MSG_RESULT([yes])
272*6236dae4SAndroid Build Coastguard Worker    AC_MSG_CHECKING([compiler version])
273*6236dae4SAndroid Build Coastguard Worker    compiler_num="$curl_cv_def___INTEL_COMPILER"
274*6236dae4SAndroid Build Coastguard Worker    compiler_ver=`echo "$compiler_num" | cut -c -2 | $SED 's/^0//'`.`echo "$compiler_num" | cut -c 3-4 | $SED 's/^0//'`
275*6236dae4SAndroid Build Coastguard Worker    AC_MSG_RESULT([Intel C '$compiler_num'])
276*6236dae4SAndroid Build Coastguard Worker    CURL_CHECK_DEF([__unix__], [], [silent])
277*6236dae4SAndroid Build Coastguard Worker    if test "$curl_cv_have_def___unix__" = "yes"; then
278*6236dae4SAndroid Build Coastguard Worker      compiler_id="INTEL_UNIX_C"
279*6236dae4SAndroid Build Coastguard Worker      flags_dbg_yes="-g"
280*6236dae4SAndroid Build Coastguard Worker      flags_opt_all="-O -O0 -O1 -O2 -O3 -Os"
281*6236dae4SAndroid Build Coastguard Worker      flags_opt_yes="-O2"
282*6236dae4SAndroid Build Coastguard Worker      flags_opt_off="-O0"
283*6236dae4SAndroid Build Coastguard Worker    else
284*6236dae4SAndroid Build Coastguard Worker      compiler_id="INTEL_WINDOWS_C"
285*6236dae4SAndroid Build Coastguard Worker      flags_dbg_yes="/Zi /Oy-"
286*6236dae4SAndroid Build Coastguard Worker      flags_opt_all="/O /O0 /O1 /O2 /O3 /Od /Og /Og- /Oi /Oi-"
287*6236dae4SAndroid Build Coastguard Worker      flags_opt_yes="/O2"
288*6236dae4SAndroid Build Coastguard Worker      flags_opt_off="/Od"
289*6236dae4SAndroid Build Coastguard Worker    fi
290*6236dae4SAndroid Build Coastguard Worker  else
291*6236dae4SAndroid Build Coastguard Worker    AC_MSG_RESULT([no])
292*6236dae4SAndroid Build Coastguard Worker  fi
293*6236dae4SAndroid Build Coastguard Worker])
294*6236dae4SAndroid Build Coastguard Worker
295*6236dae4SAndroid Build Coastguard Worker
296*6236dae4SAndroid Build Coastguard Workerdnl CURL_CHECK_COMPILER_SGI_MIPS_C
297*6236dae4SAndroid Build Coastguard Workerdnl -------------------------------------------------
298*6236dae4SAndroid Build Coastguard Workerdnl Verify if compiler being used is SGI MIPS C.
299*6236dae4SAndroid Build Coastguard Worker
300*6236dae4SAndroid Build Coastguard WorkerAC_DEFUN([CURL_CHECK_COMPILER_SGI_MIPS_C], [
301*6236dae4SAndroid Build Coastguard Worker  AC_REQUIRE([CURL_CHECK_COMPILER_SGI_MIPSPRO_C])dnl
302*6236dae4SAndroid Build Coastguard Worker  AC_MSG_CHECKING([if compiler is SGI MIPS C])
303*6236dae4SAndroid Build Coastguard Worker  CURL_CHECK_DEF([__GNUC__], [], [silent])
304*6236dae4SAndroid Build Coastguard Worker  CURL_CHECK_DEF([__sgi], [], [silent])
305*6236dae4SAndroid Build Coastguard Worker  if test "$curl_cv_have_def___GNUC__" = "no" &&
306*6236dae4SAndroid Build Coastguard Worker    test "$curl_cv_have_def___sgi" = "yes" &&
307*6236dae4SAndroid Build Coastguard Worker    test "$compiler_id" = "unknown"; then
308*6236dae4SAndroid Build Coastguard Worker    AC_MSG_RESULT([yes])
309*6236dae4SAndroid Build Coastguard Worker    compiler_id="SGI_MIPS_C"
310*6236dae4SAndroid Build Coastguard Worker    flags_dbg_yes="-g"
311*6236dae4SAndroid Build Coastguard Worker    flags_opt_all="-O -O0 -O1 -O2 -O3 -Ofast"
312*6236dae4SAndroid Build Coastguard Worker    flags_opt_yes="-O2"
313*6236dae4SAndroid Build Coastguard Worker    flags_opt_off="-O0"
314*6236dae4SAndroid Build Coastguard Worker  else
315*6236dae4SAndroid Build Coastguard Worker    AC_MSG_RESULT([no])
316*6236dae4SAndroid Build Coastguard Worker  fi
317*6236dae4SAndroid Build Coastguard Worker])
318*6236dae4SAndroid Build Coastguard Worker
319*6236dae4SAndroid Build Coastguard Worker
320*6236dae4SAndroid Build Coastguard Workerdnl CURL_CHECK_COMPILER_SGI_MIPSPRO_C
321*6236dae4SAndroid Build Coastguard Workerdnl -------------------------------------------------
322*6236dae4SAndroid Build Coastguard Workerdnl Verify if compiler being used is SGI MIPSpro C.
323*6236dae4SAndroid Build Coastguard Worker
324*6236dae4SAndroid Build Coastguard WorkerAC_DEFUN([CURL_CHECK_COMPILER_SGI_MIPSPRO_C], [
325*6236dae4SAndroid Build Coastguard Worker  AC_BEFORE([$0],[CURL_CHECK_COMPILER_SGI_MIPS_C])dnl
326*6236dae4SAndroid Build Coastguard Worker  AC_MSG_CHECKING([if compiler is SGI MIPSpro C])
327*6236dae4SAndroid Build Coastguard Worker  CURL_CHECK_DEF([__GNUC__], [], [silent])
328*6236dae4SAndroid Build Coastguard Worker  CURL_CHECK_DEF([_COMPILER_VERSION], [], [silent])
329*6236dae4SAndroid Build Coastguard Worker  CURL_CHECK_DEF([_SGI_COMPILER_VERSION], [], [silent])
330*6236dae4SAndroid Build Coastguard Worker  if test "$curl_cv_have_def___GNUC__" = "no" &&
331*6236dae4SAndroid Build Coastguard Worker    (test "$curl_cv_have_def__SGI_COMPILER_VERSION" = "yes" ||
332*6236dae4SAndroid Build Coastguard Worker     test "$curl_cv_have_def__COMPILER_VERSION" = "yes"); then
333*6236dae4SAndroid Build Coastguard Worker    AC_MSG_RESULT([yes])
334*6236dae4SAndroid Build Coastguard Worker    compiler_id="SGI_MIPSPRO_C"
335*6236dae4SAndroid Build Coastguard Worker    flags_dbg_yes="-g"
336*6236dae4SAndroid Build Coastguard Worker    flags_opt_all="-O -O0 -O1 -O2 -O3 -Ofast"
337*6236dae4SAndroid Build Coastguard Worker    flags_opt_yes="-O2"
338*6236dae4SAndroid Build Coastguard Worker    flags_opt_off="-O0"
339*6236dae4SAndroid Build Coastguard Worker  else
340*6236dae4SAndroid Build Coastguard Worker    AC_MSG_RESULT([no])
341*6236dae4SAndroid Build Coastguard Worker  fi
342*6236dae4SAndroid Build Coastguard Worker])
343*6236dae4SAndroid Build Coastguard Worker
344*6236dae4SAndroid Build Coastguard Worker
345*6236dae4SAndroid Build Coastguard Workerdnl CURL_CHECK_COMPILER_SUNPRO_C
346*6236dae4SAndroid Build Coastguard Workerdnl -------------------------------------------------
347*6236dae4SAndroid Build Coastguard Workerdnl Verify if compiler being used is SunPro C.
348*6236dae4SAndroid Build Coastguard Worker
349*6236dae4SAndroid Build Coastguard WorkerAC_DEFUN([CURL_CHECK_COMPILER_SUNPRO_C], [
350*6236dae4SAndroid Build Coastguard Worker  AC_MSG_CHECKING([if compiler is SunPro C])
351*6236dae4SAndroid Build Coastguard Worker  CURL_CHECK_DEF([__SUNPRO_C], [], [silent])
352*6236dae4SAndroid Build Coastguard Worker  if test "$curl_cv_have_def___SUNPRO_C" = "yes"; then
353*6236dae4SAndroid Build Coastguard Worker    AC_MSG_RESULT([yes])
354*6236dae4SAndroid Build Coastguard Worker    compiler_id="SUNPRO_C"
355*6236dae4SAndroid Build Coastguard Worker    flags_dbg_yes="-g"
356*6236dae4SAndroid Build Coastguard Worker    flags_opt_all="-O -xO -xO1 -xO2 -xO3 -xO4 -xO5"
357*6236dae4SAndroid Build Coastguard Worker    flags_opt_yes="-xO2"
358*6236dae4SAndroid Build Coastguard Worker    flags_opt_off=""
359*6236dae4SAndroid Build Coastguard Worker  else
360*6236dae4SAndroid Build Coastguard Worker    AC_MSG_RESULT([no])
361*6236dae4SAndroid Build Coastguard Worker  fi
362*6236dae4SAndroid Build Coastguard Worker])
363*6236dae4SAndroid Build Coastguard Worker
364*6236dae4SAndroid Build Coastguard Worker
365*6236dae4SAndroid Build Coastguard Workerdnl CURL_CHECK_COMPILER_TINY_C
366*6236dae4SAndroid Build Coastguard Workerdnl -------------------------------------------------
367*6236dae4SAndroid Build Coastguard Workerdnl Verify if compiler being used is Tiny C.
368*6236dae4SAndroid Build Coastguard Worker
369*6236dae4SAndroid Build Coastguard WorkerAC_DEFUN([CURL_CHECK_COMPILER_TINY_C], [
370*6236dae4SAndroid Build Coastguard Worker  AC_MSG_CHECKING([if compiler is Tiny C])
371*6236dae4SAndroid Build Coastguard Worker  CURL_CHECK_DEF([__TINYC__], [], [silent])
372*6236dae4SAndroid Build Coastguard Worker  if test "$curl_cv_have_def___TINYC__" = "yes"; then
373*6236dae4SAndroid Build Coastguard Worker    AC_MSG_RESULT([yes])
374*6236dae4SAndroid Build Coastguard Worker    compiler_id="TINY_C"
375*6236dae4SAndroid Build Coastguard Worker    flags_dbg_yes="-g"
376*6236dae4SAndroid Build Coastguard Worker    flags_opt_all=""
377*6236dae4SAndroid Build Coastguard Worker    flags_opt_yes=""
378*6236dae4SAndroid Build Coastguard Worker    flags_opt_off=""
379*6236dae4SAndroid Build Coastguard Worker  else
380*6236dae4SAndroid Build Coastguard Worker    AC_MSG_RESULT([no])
381*6236dae4SAndroid Build Coastguard Worker  fi
382*6236dae4SAndroid Build Coastguard Worker])
383*6236dae4SAndroid Build Coastguard Worker
384*6236dae4SAndroid Build Coastguard Workerdnl CURL_CONVERT_INCLUDE_TO_ISYSTEM
385*6236dae4SAndroid Build Coastguard Workerdnl -------------------------------------------------
386*6236dae4SAndroid Build Coastguard Workerdnl Changes standard include paths present in CFLAGS
387*6236dae4SAndroid Build Coastguard Workerdnl and CPPFLAGS into isystem include paths. This is
388*6236dae4SAndroid Build Coastguard Workerdnl done to prevent GNUC from generating warnings on
389*6236dae4SAndroid Build Coastguard Workerdnl headers from these locations, although on ancient
390*6236dae4SAndroid Build Coastguard Workerdnl GNUC versions these warnings are not silenced.
391*6236dae4SAndroid Build Coastguard Worker
392*6236dae4SAndroid Build Coastguard WorkerAC_DEFUN([CURL_CONVERT_INCLUDE_TO_ISYSTEM], [
393*6236dae4SAndroid Build Coastguard Worker  AC_REQUIRE([CURL_SHFUNC_SQUEEZE])dnl
394*6236dae4SAndroid Build Coastguard Worker  AC_REQUIRE([CURL_CHECK_COMPILER])dnl
395*6236dae4SAndroid Build Coastguard Worker  AC_MSG_CHECKING([convert -I options to -isystem])
396*6236dae4SAndroid Build Coastguard Worker  if test "$compiler_id" = "GNU_C" ||
397*6236dae4SAndroid Build Coastguard Worker    test "$compiler_id" = "CLANG" -o "$compiler_id" = "APPLECLANG"; then
398*6236dae4SAndroid Build Coastguard Worker    AC_MSG_RESULT([yes])
399*6236dae4SAndroid Build Coastguard Worker    tmp_has_include="no"
400*6236dae4SAndroid Build Coastguard Worker    tmp_chg_FLAGS="$CFLAGS"
401*6236dae4SAndroid Build Coastguard Worker    for word1 in $tmp_chg_FLAGS; do
402*6236dae4SAndroid Build Coastguard Worker      case "$word1" in
403*6236dae4SAndroid Build Coastguard Worker        -I*)
404*6236dae4SAndroid Build Coastguard Worker          tmp_has_include="yes"
405*6236dae4SAndroid Build Coastguard Worker          ;;
406*6236dae4SAndroid Build Coastguard Worker      esac
407*6236dae4SAndroid Build Coastguard Worker    done
408*6236dae4SAndroid Build Coastguard Worker    if test "$tmp_has_include" = "yes"; then
409*6236dae4SAndroid Build Coastguard Worker      tmp_chg_FLAGS=`echo "$tmp_chg_FLAGS" | "$SED" 's/^-I/ -isystem /g'`
410*6236dae4SAndroid Build Coastguard Worker      tmp_chg_FLAGS=`echo "$tmp_chg_FLAGS" | "$SED" 's/ -I/ -isystem /g'`
411*6236dae4SAndroid Build Coastguard Worker      CFLAGS="$tmp_chg_FLAGS"
412*6236dae4SAndroid Build Coastguard Worker      squeeze CFLAGS
413*6236dae4SAndroid Build Coastguard Worker    fi
414*6236dae4SAndroid Build Coastguard Worker    tmp_has_include="no"
415*6236dae4SAndroid Build Coastguard Worker    tmp_chg_FLAGS="$CPPFLAGS"
416*6236dae4SAndroid Build Coastguard Worker    for word1 in $tmp_chg_FLAGS; do
417*6236dae4SAndroid Build Coastguard Worker      case "$word1" in
418*6236dae4SAndroid Build Coastguard Worker        -I*)
419*6236dae4SAndroid Build Coastguard Worker          tmp_has_include="yes"
420*6236dae4SAndroid Build Coastguard Worker          ;;
421*6236dae4SAndroid Build Coastguard Worker      esac
422*6236dae4SAndroid Build Coastguard Worker    done
423*6236dae4SAndroid Build Coastguard Worker    if test "$tmp_has_include" = "yes"; then
424*6236dae4SAndroid Build Coastguard Worker      tmp_chg_FLAGS=`echo "$tmp_chg_FLAGS" | "$SED" 's/^-I/ -isystem /g'`
425*6236dae4SAndroid Build Coastguard Worker      tmp_chg_FLAGS=`echo "$tmp_chg_FLAGS" | "$SED" 's/ -I/ -isystem /g'`
426*6236dae4SAndroid Build Coastguard Worker      CPPFLAGS="$tmp_chg_FLAGS"
427*6236dae4SAndroid Build Coastguard Worker      squeeze CPPFLAGS
428*6236dae4SAndroid Build Coastguard Worker    fi
429*6236dae4SAndroid Build Coastguard Worker  else
430*6236dae4SAndroid Build Coastguard Worker    AC_MSG_RESULT([no])
431*6236dae4SAndroid Build Coastguard Worker  fi
432*6236dae4SAndroid Build Coastguard Worker])
433*6236dae4SAndroid Build Coastguard Worker
434*6236dae4SAndroid Build Coastguard Worker
435*6236dae4SAndroid Build Coastguard Workerdnl CURL_COMPILER_WORKS_IFELSE ([ACTION-IF-WORKS], [ACTION-IF-NOT-WORKS])
436*6236dae4SAndroid Build Coastguard Workerdnl -------------------------------------------------
437*6236dae4SAndroid Build Coastguard Workerdnl Verify if the C compiler seems to work with the
438*6236dae4SAndroid Build Coastguard Workerdnl settings that are 'active' at the time the test
439*6236dae4SAndroid Build Coastguard Workerdnl is performed.
440*6236dae4SAndroid Build Coastguard Worker
441*6236dae4SAndroid Build Coastguard WorkerAC_DEFUN([CURL_COMPILER_WORKS_IFELSE], [
442*6236dae4SAndroid Build Coastguard Worker  dnl compilation capability verification
443*6236dae4SAndroid Build Coastguard Worker  tmp_compiler_works="unknown"
444*6236dae4SAndroid Build Coastguard Worker  AC_COMPILE_IFELSE([
445*6236dae4SAndroid Build Coastguard Worker    AC_LANG_PROGRAM([[
446*6236dae4SAndroid Build Coastguard Worker    ]],[[
447*6236dae4SAndroid Build Coastguard Worker      int i = 1;
448*6236dae4SAndroid Build Coastguard Worker      return i;
449*6236dae4SAndroid Build Coastguard Worker    ]])
450*6236dae4SAndroid Build Coastguard Worker  ],[
451*6236dae4SAndroid Build Coastguard Worker    tmp_compiler_works="yes"
452*6236dae4SAndroid Build Coastguard Worker  ],[
453*6236dae4SAndroid Build Coastguard Worker    tmp_compiler_works="no"
454*6236dae4SAndroid Build Coastguard Worker    echo " " >&6
455*6236dae4SAndroid Build Coastguard Worker    sed 's/^/cc-fail: /' conftest.err >&6
456*6236dae4SAndroid Build Coastguard Worker    echo " " >&6
457*6236dae4SAndroid Build Coastguard Worker  ])
458*6236dae4SAndroid Build Coastguard Worker  dnl linking capability verification
459*6236dae4SAndroid Build Coastguard Worker  if test "$tmp_compiler_works" = "yes"; then
460*6236dae4SAndroid Build Coastguard Worker    AC_LINK_IFELSE([
461*6236dae4SAndroid Build Coastguard Worker      AC_LANG_PROGRAM([[
462*6236dae4SAndroid Build Coastguard Worker      ]],[[
463*6236dae4SAndroid Build Coastguard Worker        int i = 1;
464*6236dae4SAndroid Build Coastguard Worker        return i;
465*6236dae4SAndroid Build Coastguard Worker      ]])
466*6236dae4SAndroid Build Coastguard Worker    ],[
467*6236dae4SAndroid Build Coastguard Worker      tmp_compiler_works="yes"
468*6236dae4SAndroid Build Coastguard Worker    ],[
469*6236dae4SAndroid Build Coastguard Worker      tmp_compiler_works="no"
470*6236dae4SAndroid Build Coastguard Worker      echo " " >&6
471*6236dae4SAndroid Build Coastguard Worker      sed 's/^/link-fail: /' conftest.err >&6
472*6236dae4SAndroid Build Coastguard Worker      echo " " >&6
473*6236dae4SAndroid Build Coastguard Worker    ])
474*6236dae4SAndroid Build Coastguard Worker  fi
475*6236dae4SAndroid Build Coastguard Worker  dnl only do runtime verification when not cross-compiling
476*6236dae4SAndroid Build Coastguard Worker  if test "x$cross_compiling" != "xyes" &&
477*6236dae4SAndroid Build Coastguard Worker    test "$tmp_compiler_works" = "yes"; then
478*6236dae4SAndroid Build Coastguard Worker    CURL_RUN_IFELSE([
479*6236dae4SAndroid Build Coastguard Worker      AC_LANG_PROGRAM([[
480*6236dae4SAndroid Build Coastguard Worker        #ifdef __STDC__
481*6236dae4SAndroid Build Coastguard Worker        #  include <stdlib.h>
482*6236dae4SAndroid Build Coastguard Worker        #endif
483*6236dae4SAndroid Build Coastguard Worker      ]],[[
484*6236dae4SAndroid Build Coastguard Worker        int i = 0;
485*6236dae4SAndroid Build Coastguard Worker        exit(i);
486*6236dae4SAndroid Build Coastguard Worker      ]])
487*6236dae4SAndroid Build Coastguard Worker    ],[
488*6236dae4SAndroid Build Coastguard Worker      tmp_compiler_works="yes"
489*6236dae4SAndroid Build Coastguard Worker    ],[
490*6236dae4SAndroid Build Coastguard Worker      tmp_compiler_works="no"
491*6236dae4SAndroid Build Coastguard Worker      echo " " >&6
492*6236dae4SAndroid Build Coastguard Worker      echo "run-fail: test program exited with status $ac_status" >&6
493*6236dae4SAndroid Build Coastguard Worker      echo " " >&6
494*6236dae4SAndroid Build Coastguard Worker    ])
495*6236dae4SAndroid Build Coastguard Worker  fi
496*6236dae4SAndroid Build Coastguard Worker  dnl branch upon test result
497*6236dae4SAndroid Build Coastguard Worker  if test "$tmp_compiler_works" = "yes"; then
498*6236dae4SAndroid Build Coastguard Worker  ifelse($1,,:,[$1])
499*6236dae4SAndroid Build Coastguard Worker  ifelse($2,,,[else
500*6236dae4SAndroid Build Coastguard Worker    $2])
501*6236dae4SAndroid Build Coastguard Worker  fi
502*6236dae4SAndroid Build Coastguard Worker])
503*6236dae4SAndroid Build Coastguard Worker
504*6236dae4SAndroid Build Coastguard Worker
505*6236dae4SAndroid Build Coastguard Workerdnl CURL_SET_COMPILER_BASIC_OPTS
506*6236dae4SAndroid Build Coastguard Workerdnl -------------------------------------------------
507*6236dae4SAndroid Build Coastguard Workerdnl Sets compiler specific options/flags which do not
508*6236dae4SAndroid Build Coastguard Workerdnl depend on configure's debug, optimize or warnings
509*6236dae4SAndroid Build Coastguard Workerdnl options.
510*6236dae4SAndroid Build Coastguard Worker
511*6236dae4SAndroid Build Coastguard WorkerAC_DEFUN([CURL_SET_COMPILER_BASIC_OPTS], [
512*6236dae4SAndroid Build Coastguard Worker  AC_REQUIRE([CURL_CHECK_COMPILER])dnl
513*6236dae4SAndroid Build Coastguard Worker  AC_REQUIRE([CURL_SHFUNC_SQUEEZE])dnl
514*6236dae4SAndroid Build Coastguard Worker  #
515*6236dae4SAndroid Build Coastguard Worker  if test "$compiler_id" != "unknown"; then
516*6236dae4SAndroid Build Coastguard Worker    #
517*6236dae4SAndroid Build Coastguard Worker    tmp_save_CPPFLAGS="$CPPFLAGS"
518*6236dae4SAndroid Build Coastguard Worker    tmp_save_CFLAGS="$CFLAGS"
519*6236dae4SAndroid Build Coastguard Worker    tmp_CPPFLAGS=""
520*6236dae4SAndroid Build Coastguard Worker    tmp_CFLAGS=""
521*6236dae4SAndroid Build Coastguard Worker    #
522*6236dae4SAndroid Build Coastguard Worker    case "$compiler_id" in
523*6236dae4SAndroid Build Coastguard Worker        #
524*6236dae4SAndroid Build Coastguard Worker      CLANG|APPLECLANG)
525*6236dae4SAndroid Build Coastguard Worker        #
526*6236dae4SAndroid Build Coastguard Worker        dnl Disable warnings for unused arguments, otherwise clang will
527*6236dae4SAndroid Build Coastguard Worker        dnl warn about compile-time arguments used during link-time, like
528*6236dae4SAndroid Build Coastguard Worker        dnl -O and -g and -pedantic.
529*6236dae4SAndroid Build Coastguard Worker        tmp_CFLAGS="$tmp_CFLAGS -Qunused-arguments"
530*6236dae4SAndroid Build Coastguard Worker        tmp_CFLAGS="$tmp_CFLAGS -Werror-implicit-function-declaration"
531*6236dae4SAndroid Build Coastguard Worker        ;;
532*6236dae4SAndroid Build Coastguard Worker        #
533*6236dae4SAndroid Build Coastguard Worker      DEC_C)
534*6236dae4SAndroid Build Coastguard Worker        #
535*6236dae4SAndroid Build Coastguard Worker        dnl Select strict ANSI C compiler mode
536*6236dae4SAndroid Build Coastguard Worker        tmp_CFLAGS="$tmp_CFLAGS -std1"
537*6236dae4SAndroid Build Coastguard Worker        dnl Turn off optimizer ANSI C aliasing rules
538*6236dae4SAndroid Build Coastguard Worker        tmp_CFLAGS="$tmp_CFLAGS -noansi_alias"
539*6236dae4SAndroid Build Coastguard Worker        dnl Generate warnings for missing function prototypes
540*6236dae4SAndroid Build Coastguard Worker        tmp_CFLAGS="$tmp_CFLAGS -warnprotos"
541*6236dae4SAndroid Build Coastguard Worker        dnl Change some warnings into fatal errors
542*6236dae4SAndroid Build Coastguard Worker        tmp_CFLAGS="$tmp_CFLAGS -msg_fatal toofewargs,toomanyargs"
543*6236dae4SAndroid Build Coastguard Worker        ;;
544*6236dae4SAndroid Build Coastguard Worker        #
545*6236dae4SAndroid Build Coastguard Worker      GNU_C)
546*6236dae4SAndroid Build Coastguard Worker        #
547*6236dae4SAndroid Build Coastguard Worker        dnl turn implicit-function-declaration warning into error,
548*6236dae4SAndroid Build Coastguard Worker        dnl at least gcc 2.95 and later support this
549*6236dae4SAndroid Build Coastguard Worker        if test "$compiler_num" -ge "295"; then
550*6236dae4SAndroid Build Coastguard Worker          tmp_CFLAGS="$tmp_CFLAGS -Werror-implicit-function-declaration"
551*6236dae4SAndroid Build Coastguard Worker        fi
552*6236dae4SAndroid Build Coastguard Worker        ;;
553*6236dae4SAndroid Build Coastguard Worker        #
554*6236dae4SAndroid Build Coastguard Worker      HP_UX_C)
555*6236dae4SAndroid Build Coastguard Worker        #
556*6236dae4SAndroid Build Coastguard Worker        dnl Disallow run-time dereferencing of null pointers
557*6236dae4SAndroid Build Coastguard Worker        tmp_CFLAGS="$tmp_CFLAGS -z"
558*6236dae4SAndroid Build Coastguard Worker        dnl Disable some remarks
559*6236dae4SAndroid Build Coastguard Worker        dnl #4227: padding struct with n bytes to align member
560*6236dae4SAndroid Build Coastguard Worker        dnl #4255: padding size of struct with n bytes to alignment boundary
561*6236dae4SAndroid Build Coastguard Worker        tmp_CFLAGS="$tmp_CFLAGS +W 4227,4255"
562*6236dae4SAndroid Build Coastguard Worker        ;;
563*6236dae4SAndroid Build Coastguard Worker        #
564*6236dae4SAndroid Build Coastguard Worker      IBM_C)
565*6236dae4SAndroid Build Coastguard Worker        #
566*6236dae4SAndroid Build Coastguard Worker        dnl Ensure that compiler optimizations are always thread-safe.
567*6236dae4SAndroid Build Coastguard Worker        tmp_CPPFLAGS="$tmp_CPPFLAGS -qthreaded"
568*6236dae4SAndroid Build Coastguard Worker        dnl Disable type based strict aliasing optimizations, using worst
569*6236dae4SAndroid Build Coastguard Worker        dnl case aliasing assumptions when compiling. Type based aliasing
570*6236dae4SAndroid Build Coastguard Worker        dnl would restrict the lvalues that could be safely used to access
571*6236dae4SAndroid Build Coastguard Worker        dnl a data object.
572*6236dae4SAndroid Build Coastguard Worker        tmp_CPPFLAGS="$tmp_CPPFLAGS -qnoansialias"
573*6236dae4SAndroid Build Coastguard Worker        dnl Force compiler to stop after the compilation phase, without
574*6236dae4SAndroid Build Coastguard Worker        dnl generating an object code file when compilation has errors.
575*6236dae4SAndroid Build Coastguard Worker        tmp_CPPFLAGS="$tmp_CPPFLAGS -qhalt=e"
576*6236dae4SAndroid Build Coastguard Worker        ;;
577*6236dae4SAndroid Build Coastguard Worker        #
578*6236dae4SAndroid Build Coastguard Worker      INTEL_UNIX_C)
579*6236dae4SAndroid Build Coastguard Worker        #
580*6236dae4SAndroid Build Coastguard Worker        dnl On Unix this compiler uses gcc's header files, so
581*6236dae4SAndroid Build Coastguard Worker        dnl we select ANSI C89 dialect plus GNU extensions.
582*6236dae4SAndroid Build Coastguard Worker        tmp_CFLAGS="$tmp_CFLAGS -std=gnu89"
583*6236dae4SAndroid Build Coastguard Worker        dnl Change some warnings into errors
584*6236dae4SAndroid Build Coastguard Worker        dnl #140: too many arguments in function call
585*6236dae4SAndroid Build Coastguard Worker        dnl #147: declaration is incompatible with 'previous one'
586*6236dae4SAndroid Build Coastguard Worker        dnl #165: too few arguments in function call
587*6236dae4SAndroid Build Coastguard Worker        dnl #266: function declared implicitly
588*6236dae4SAndroid Build Coastguard Worker        tmp_CPPFLAGS="$tmp_CPPFLAGS -diag-error 140,147,165,266"
589*6236dae4SAndroid Build Coastguard Worker        dnl Disable some remarks
590*6236dae4SAndroid Build Coastguard Worker        dnl #279: controlling expression is constant
591*6236dae4SAndroid Build Coastguard Worker        dnl #981: operands are evaluated in unspecified order
592*6236dae4SAndroid Build Coastguard Worker        dnl #1025: zero extending result of unary operation
593*6236dae4SAndroid Build Coastguard Worker        dnl #1469: "cc" clobber ignored
594*6236dae4SAndroid Build Coastguard Worker        dnl #2259: non-pointer conversion from X to Y may lose significant bits
595*6236dae4SAndroid Build Coastguard Worker        tmp_CPPFLAGS="$tmp_CPPFLAGS -diag-disable 279,981,1025,1469,2259"
596*6236dae4SAndroid Build Coastguard Worker        ;;
597*6236dae4SAndroid Build Coastguard Worker        #
598*6236dae4SAndroid Build Coastguard Worker      INTEL_WINDOWS_C)
599*6236dae4SAndroid Build Coastguard Worker        #
600*6236dae4SAndroid Build Coastguard Worker        dnl Placeholder
601*6236dae4SAndroid Build Coastguard Worker        tmp_CFLAGS="$tmp_CFLAGS"
602*6236dae4SAndroid Build Coastguard Worker        ;;
603*6236dae4SAndroid Build Coastguard Worker        #
604*6236dae4SAndroid Build Coastguard Worker      SGI_MIPS_C)
605*6236dae4SAndroid Build Coastguard Worker        #
606*6236dae4SAndroid Build Coastguard Worker        dnl Placeholder
607*6236dae4SAndroid Build Coastguard Worker        tmp_CFLAGS="$tmp_CFLAGS"
608*6236dae4SAndroid Build Coastguard Worker        ;;
609*6236dae4SAndroid Build Coastguard Worker        #
610*6236dae4SAndroid Build Coastguard Worker      SGI_MIPSPRO_C)
611*6236dae4SAndroid Build Coastguard Worker        #
612*6236dae4SAndroid Build Coastguard Worker        dnl Placeholder
613*6236dae4SAndroid Build Coastguard Worker        tmp_CFLAGS="$tmp_CFLAGS"
614*6236dae4SAndroid Build Coastguard Worker        ;;
615*6236dae4SAndroid Build Coastguard Worker        #
616*6236dae4SAndroid Build Coastguard Worker      SUNPRO_C)
617*6236dae4SAndroid Build Coastguard Worker        #
618*6236dae4SAndroid Build Coastguard Worker        dnl Placeholder
619*6236dae4SAndroid Build Coastguard Worker        tmp_CFLAGS="$tmp_CFLAGS"
620*6236dae4SAndroid Build Coastguard Worker        ;;
621*6236dae4SAndroid Build Coastguard Worker        #
622*6236dae4SAndroid Build Coastguard Worker      TINY_C)
623*6236dae4SAndroid Build Coastguard Worker        #
624*6236dae4SAndroid Build Coastguard Worker        dnl Placeholder
625*6236dae4SAndroid Build Coastguard Worker        tmp_CFLAGS="$tmp_CFLAGS"
626*6236dae4SAndroid Build Coastguard Worker        ;;
627*6236dae4SAndroid Build Coastguard Worker        #
628*6236dae4SAndroid Build Coastguard Worker    esac
629*6236dae4SAndroid Build Coastguard Worker    #
630*6236dae4SAndroid Build Coastguard Worker    squeeze tmp_CPPFLAGS
631*6236dae4SAndroid Build Coastguard Worker    squeeze tmp_CFLAGS
632*6236dae4SAndroid Build Coastguard Worker    #
633*6236dae4SAndroid Build Coastguard Worker    if test ! -z "$tmp_CFLAGS" || test ! -z "$tmp_CPPFLAGS"; then
634*6236dae4SAndroid Build Coastguard Worker      AC_MSG_CHECKING([if compiler accepts some basic options])
635*6236dae4SAndroid Build Coastguard Worker      CPPFLAGS="$tmp_save_CPPFLAGS $tmp_CPPFLAGS"
636*6236dae4SAndroid Build Coastguard Worker      CFLAGS="$tmp_save_CFLAGS $tmp_CFLAGS"
637*6236dae4SAndroid Build Coastguard Worker      squeeze CPPFLAGS
638*6236dae4SAndroid Build Coastguard Worker      squeeze CFLAGS
639*6236dae4SAndroid Build Coastguard Worker      CURL_COMPILER_WORKS_IFELSE([
640*6236dae4SAndroid Build Coastguard Worker        AC_MSG_RESULT([yes])
641*6236dae4SAndroid Build Coastguard Worker        AC_MSG_NOTICE([compiler options added: $tmp_CFLAGS $tmp_CPPFLAGS])
642*6236dae4SAndroid Build Coastguard Worker      ],[
643*6236dae4SAndroid Build Coastguard Worker        AC_MSG_RESULT([no])
644*6236dae4SAndroid Build Coastguard Worker        AC_MSG_WARN([compiler options rejected: $tmp_CFLAGS $tmp_CPPFLAGS])
645*6236dae4SAndroid Build Coastguard Worker        dnl restore initial settings
646*6236dae4SAndroid Build Coastguard Worker        CPPFLAGS="$tmp_save_CPPFLAGS"
647*6236dae4SAndroid Build Coastguard Worker        CFLAGS="$tmp_save_CFLAGS"
648*6236dae4SAndroid Build Coastguard Worker      ])
649*6236dae4SAndroid Build Coastguard Worker    fi
650*6236dae4SAndroid Build Coastguard Worker    #
651*6236dae4SAndroid Build Coastguard Worker  fi
652*6236dae4SAndroid Build Coastguard Worker])
653*6236dae4SAndroid Build Coastguard Worker
654*6236dae4SAndroid Build Coastguard Worker
655*6236dae4SAndroid Build Coastguard Workerdnl CURL_SET_COMPILER_DEBUG_OPTS
656*6236dae4SAndroid Build Coastguard Workerdnl -------------------------------------------------
657*6236dae4SAndroid Build Coastguard Workerdnl Sets compiler specific options/flags which depend
658*6236dae4SAndroid Build Coastguard Workerdnl on configure's debug option.
659*6236dae4SAndroid Build Coastguard Worker
660*6236dae4SAndroid Build Coastguard WorkerAC_DEFUN([CURL_SET_COMPILER_DEBUG_OPTS], [
661*6236dae4SAndroid Build Coastguard Worker  AC_REQUIRE([CURL_CHECK_OPTION_DEBUG])dnl
662*6236dae4SAndroid Build Coastguard Worker  AC_REQUIRE([CURL_CHECK_COMPILER])dnl
663*6236dae4SAndroid Build Coastguard Worker  AC_REQUIRE([CURL_SHFUNC_SQUEEZE])dnl
664*6236dae4SAndroid Build Coastguard Worker  #
665*6236dae4SAndroid Build Coastguard Worker  if test "$compiler_id" != "unknown"; then
666*6236dae4SAndroid Build Coastguard Worker    #
667*6236dae4SAndroid Build Coastguard Worker    tmp_save_CFLAGS="$CFLAGS"
668*6236dae4SAndroid Build Coastguard Worker    tmp_save_CPPFLAGS="$CPPFLAGS"
669*6236dae4SAndroid Build Coastguard Worker    #
670*6236dae4SAndroid Build Coastguard Worker    tmp_options=""
671*6236dae4SAndroid Build Coastguard Worker    tmp_CFLAGS="$CFLAGS"
672*6236dae4SAndroid Build Coastguard Worker    tmp_CPPFLAGS="$CPPFLAGS"
673*6236dae4SAndroid Build Coastguard Worker    #
674*6236dae4SAndroid Build Coastguard Worker    if test "$want_debug" = "yes"; then
675*6236dae4SAndroid Build Coastguard Worker      AC_MSG_CHECKING([if compiler accepts debug enabling options])
676*6236dae4SAndroid Build Coastguard Worker      tmp_options="$flags_dbg_yes"
677*6236dae4SAndroid Build Coastguard Worker    fi
678*6236dae4SAndroid Build Coastguard Worker    #
679*6236dae4SAndroid Build Coastguard Worker    if test "$flags_prefer_cppflags" = "yes"; then
680*6236dae4SAndroid Build Coastguard Worker      CPPFLAGS="$tmp_CPPFLAGS $tmp_options"
681*6236dae4SAndroid Build Coastguard Worker      CFLAGS="$tmp_CFLAGS"
682*6236dae4SAndroid Build Coastguard Worker    else
683*6236dae4SAndroid Build Coastguard Worker      CPPFLAGS="$tmp_CPPFLAGS"
684*6236dae4SAndroid Build Coastguard Worker      CFLAGS="$tmp_CFLAGS $tmp_options"
685*6236dae4SAndroid Build Coastguard Worker    fi
686*6236dae4SAndroid Build Coastguard Worker    squeeze CPPFLAGS
687*6236dae4SAndroid Build Coastguard Worker    squeeze CFLAGS
688*6236dae4SAndroid Build Coastguard Worker  fi
689*6236dae4SAndroid Build Coastguard Worker])
690*6236dae4SAndroid Build Coastguard Worker
691*6236dae4SAndroid Build Coastguard Worker
692*6236dae4SAndroid Build Coastguard Workerdnl CURL_SET_COMPILER_OPTIMIZE_OPTS
693*6236dae4SAndroid Build Coastguard Workerdnl -------------------------------------------------
694*6236dae4SAndroid Build Coastguard Workerdnl Sets compiler specific options/flags which depend
695*6236dae4SAndroid Build Coastguard Workerdnl on configure's optimize option.
696*6236dae4SAndroid Build Coastguard Worker
697*6236dae4SAndroid Build Coastguard WorkerAC_DEFUN([CURL_SET_COMPILER_OPTIMIZE_OPTS], [
698*6236dae4SAndroid Build Coastguard Worker  AC_REQUIRE([CURL_CHECK_OPTION_OPTIMIZE])dnl
699*6236dae4SAndroid Build Coastguard Worker  AC_REQUIRE([CURL_CHECK_COMPILER])dnl
700*6236dae4SAndroid Build Coastguard Worker  AC_REQUIRE([CURL_SHFUNC_SQUEEZE])dnl
701*6236dae4SAndroid Build Coastguard Worker  #
702*6236dae4SAndroid Build Coastguard Worker  if test "$compiler_id" != "unknown"; then
703*6236dae4SAndroid Build Coastguard Worker    #
704*6236dae4SAndroid Build Coastguard Worker    tmp_save_CFLAGS="$CFLAGS"
705*6236dae4SAndroid Build Coastguard Worker    tmp_save_CPPFLAGS="$CPPFLAGS"
706*6236dae4SAndroid Build Coastguard Worker    #
707*6236dae4SAndroid Build Coastguard Worker    tmp_options=""
708*6236dae4SAndroid Build Coastguard Worker    tmp_CFLAGS="$CFLAGS"
709*6236dae4SAndroid Build Coastguard Worker    tmp_CPPFLAGS="$CPPFLAGS"
710*6236dae4SAndroid Build Coastguard Worker    honor_optimize_option="yes"
711*6236dae4SAndroid Build Coastguard Worker    #
712*6236dae4SAndroid Build Coastguard Worker    dnl If optimization request setting has not been explicitly specified,
713*6236dae4SAndroid Build Coastguard Worker    dnl it has been derived from the debug setting and initially assumed.
714*6236dae4SAndroid Build Coastguard Worker    dnl This initially assumed optimizer setting will finally be ignored
715*6236dae4SAndroid Build Coastguard Worker    dnl if CFLAGS or CPPFLAGS already hold optimizer flags. This implies
716*6236dae4SAndroid Build Coastguard Worker    dnl that an initially assumed optimizer setting might not be honored.
717*6236dae4SAndroid Build Coastguard Worker    #
718*6236dae4SAndroid Build Coastguard Worker    if test "$want_optimize" = "assume_no" ||
719*6236dae4SAndroid Build Coastguard Worker       test "$want_optimize" = "assume_yes"; then
720*6236dae4SAndroid Build Coastguard Worker      AC_MSG_CHECKING([if compiler optimizer assumed setting might be used])
721*6236dae4SAndroid Build Coastguard Worker      CURL_VAR_MATCH_IFELSE([tmp_CFLAGS],[$flags_opt_all],[
722*6236dae4SAndroid Build Coastguard Worker        honor_optimize_option="no"
723*6236dae4SAndroid Build Coastguard Worker      ])
724*6236dae4SAndroid Build Coastguard Worker      CURL_VAR_MATCH_IFELSE([tmp_CPPFLAGS],[$flags_opt_all],[
725*6236dae4SAndroid Build Coastguard Worker        honor_optimize_option="no"
726*6236dae4SAndroid Build Coastguard Worker      ])
727*6236dae4SAndroid Build Coastguard Worker      AC_MSG_RESULT([$honor_optimize_option])
728*6236dae4SAndroid Build Coastguard Worker      if test "$honor_optimize_option" = "yes"; then
729*6236dae4SAndroid Build Coastguard Worker        if test "$want_optimize" = "assume_yes"; then
730*6236dae4SAndroid Build Coastguard Worker          want_optimize="yes"
731*6236dae4SAndroid Build Coastguard Worker        fi
732*6236dae4SAndroid Build Coastguard Worker        if test "$want_optimize" = "assume_no"; then
733*6236dae4SAndroid Build Coastguard Worker          want_optimize="no"
734*6236dae4SAndroid Build Coastguard Worker        fi
735*6236dae4SAndroid Build Coastguard Worker      fi
736*6236dae4SAndroid Build Coastguard Worker    fi
737*6236dae4SAndroid Build Coastguard Worker    #
738*6236dae4SAndroid Build Coastguard Worker    if test "$honor_optimize_option" = "yes"; then
739*6236dae4SAndroid Build Coastguard Worker      CURL_VAR_STRIP([tmp_CFLAGS],[$flags_opt_all])
740*6236dae4SAndroid Build Coastguard Worker      CURL_VAR_STRIP([tmp_CPPFLAGS],[$flags_opt_all])
741*6236dae4SAndroid Build Coastguard Worker      if test "$want_optimize" = "yes"; then
742*6236dae4SAndroid Build Coastguard Worker        AC_MSG_CHECKING([if compiler accepts optimizer enabling options])
743*6236dae4SAndroid Build Coastguard Worker        tmp_options="$flags_opt_yes"
744*6236dae4SAndroid Build Coastguard Worker      fi
745*6236dae4SAndroid Build Coastguard Worker      if test "$want_optimize" = "no"; then
746*6236dae4SAndroid Build Coastguard Worker        AC_MSG_CHECKING([if compiler accepts optimizer disabling options])
747*6236dae4SAndroid Build Coastguard Worker        tmp_options="$flags_opt_off"
748*6236dae4SAndroid Build Coastguard Worker      fi
749*6236dae4SAndroid Build Coastguard Worker      if test "$flags_prefer_cppflags" = "yes"; then
750*6236dae4SAndroid Build Coastguard Worker        CPPFLAGS="$tmp_CPPFLAGS $tmp_options"
751*6236dae4SAndroid Build Coastguard Worker        CFLAGS="$tmp_CFLAGS"
752*6236dae4SAndroid Build Coastguard Worker      else
753*6236dae4SAndroid Build Coastguard Worker        CPPFLAGS="$tmp_CPPFLAGS"
754*6236dae4SAndroid Build Coastguard Worker        CFLAGS="$tmp_CFLAGS $tmp_options"
755*6236dae4SAndroid Build Coastguard Worker      fi
756*6236dae4SAndroid Build Coastguard Worker      squeeze CPPFLAGS
757*6236dae4SAndroid Build Coastguard Worker      squeeze CFLAGS
758*6236dae4SAndroid Build Coastguard Worker      CURL_COMPILER_WORKS_IFELSE([
759*6236dae4SAndroid Build Coastguard Worker        AC_MSG_RESULT([yes])
760*6236dae4SAndroid Build Coastguard Worker        AC_MSG_NOTICE([compiler options added: $tmp_options])
761*6236dae4SAndroid Build Coastguard Worker      ],[
762*6236dae4SAndroid Build Coastguard Worker        AC_MSG_RESULT([no])
763*6236dae4SAndroid Build Coastguard Worker        AC_MSG_WARN([compiler options rejected: $tmp_options])
764*6236dae4SAndroid Build Coastguard Worker        dnl restore initial settings
765*6236dae4SAndroid Build Coastguard Worker        CPPFLAGS="$tmp_save_CPPFLAGS"
766*6236dae4SAndroid Build Coastguard Worker        CFLAGS="$tmp_save_CFLAGS"
767*6236dae4SAndroid Build Coastguard Worker      ])
768*6236dae4SAndroid Build Coastguard Worker    fi
769*6236dae4SAndroid Build Coastguard Worker    #
770*6236dae4SAndroid Build Coastguard Worker  fi
771*6236dae4SAndroid Build Coastguard Worker])
772*6236dae4SAndroid Build Coastguard Worker
773*6236dae4SAndroid Build Coastguard Worker
774*6236dae4SAndroid Build Coastguard Workerdnl CURL_SET_COMPILER_WARNING_OPTS
775*6236dae4SAndroid Build Coastguard Workerdnl -------------------------------------------------
776*6236dae4SAndroid Build Coastguard Workerdnl Sets compiler options/flags which depend on
777*6236dae4SAndroid Build Coastguard Workerdnl configure's warnings given option.
778*6236dae4SAndroid Build Coastguard Worker
779*6236dae4SAndroid Build Coastguard WorkerAC_DEFUN([CURL_SET_COMPILER_WARNING_OPTS], [
780*6236dae4SAndroid Build Coastguard Worker  AC_REQUIRE([CURL_CHECK_OPTION_WARNINGS])dnl
781*6236dae4SAndroid Build Coastguard Worker  AC_REQUIRE([CURL_CHECK_COMPILER])dnl
782*6236dae4SAndroid Build Coastguard Worker  AC_REQUIRE([CURL_SHFUNC_SQUEEZE])dnl
783*6236dae4SAndroid Build Coastguard Worker  #
784*6236dae4SAndroid Build Coastguard Worker  if test "$compiler_id" != "unknown"; then
785*6236dae4SAndroid Build Coastguard Worker    #
786*6236dae4SAndroid Build Coastguard Worker    tmp_save_CPPFLAGS="$CPPFLAGS"
787*6236dae4SAndroid Build Coastguard Worker    tmp_save_CFLAGS="$CFLAGS"
788*6236dae4SAndroid Build Coastguard Worker    tmp_CPPFLAGS=""
789*6236dae4SAndroid Build Coastguard Worker    tmp_CFLAGS=""
790*6236dae4SAndroid Build Coastguard Worker    #
791*6236dae4SAndroid Build Coastguard Worker    case "$compiler_id" in
792*6236dae4SAndroid Build Coastguard Worker        #
793*6236dae4SAndroid Build Coastguard Worker      CLANG|APPLECLANG)
794*6236dae4SAndroid Build Coastguard Worker        #
795*6236dae4SAndroid Build Coastguard Worker        if test "$want_warnings" = "yes"; then
796*6236dae4SAndroid Build Coastguard Worker          tmp_CFLAGS="$tmp_CFLAGS -pedantic"
797*6236dae4SAndroid Build Coastguard Worker          CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [all extra])
798*6236dae4SAndroid Build Coastguard Worker          CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [pointer-arith write-strings])
799*6236dae4SAndroid Build Coastguard Worker          CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [shadow])
800*6236dae4SAndroid Build Coastguard Worker          CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [inline nested-externs])
801*6236dae4SAndroid Build Coastguard Worker          CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [missing-declarations])
802*6236dae4SAndroid Build Coastguard Worker          CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [missing-prototypes])
803*6236dae4SAndroid Build Coastguard Worker          tmp_CFLAGS="$tmp_CFLAGS -Wno-long-long"
804*6236dae4SAndroid Build Coastguard Worker          CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [float-equal])
805*6236dae4SAndroid Build Coastguard Worker          CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [sign-compare])
806*6236dae4SAndroid Build Coastguard Worker          tmp_CFLAGS="$tmp_CFLAGS -Wno-multichar"
807*6236dae4SAndroid Build Coastguard Worker          CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [undef])
808*6236dae4SAndroid Build Coastguard Worker          tmp_CFLAGS="$tmp_CFLAGS -Wno-format-nonliteral"
809*6236dae4SAndroid Build Coastguard Worker          CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [endif-labels strict-prototypes])
810*6236dae4SAndroid Build Coastguard Worker          CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [declaration-after-statement])
811*6236dae4SAndroid Build Coastguard Worker          CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [cast-align])
812*6236dae4SAndroid Build Coastguard Worker          tmp_CFLAGS="$tmp_CFLAGS -Wno-system-headers"
813*6236dae4SAndroid Build Coastguard Worker          CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [shorten-64-to-32])
814*6236dae4SAndroid Build Coastguard Worker          #
815*6236dae4SAndroid Build Coastguard Worker          dnl Only clang 1.1 or later
816*6236dae4SAndroid Build Coastguard Worker          if test "$compiler_num" -ge "101"; then
817*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [unused])
818*6236dae4SAndroid Build Coastguard Worker          fi
819*6236dae4SAndroid Build Coastguard Worker          #
820*6236dae4SAndroid Build Coastguard Worker          dnl Only clang 2.7 or later
821*6236dae4SAndroid Build Coastguard Worker          if test "$compiler_num" -ge "207"; then
822*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [address])
823*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [attributes])
824*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [bad-function-cast])
825*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [conversion])
826*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [div-by-zero format-security])
827*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [empty-body])
828*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [missing-field-initializers])
829*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [missing-noreturn])
830*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [old-style-definition])
831*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [redundant-decls])
832*6236dae4SAndroid Build Coastguard Worker          # CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [switch-enum])      # Not used because this basically disallows default case
833*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [type-limits])
834*6236dae4SAndroid Build Coastguard Worker          # CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [unused-macros])    # Not practical
835*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [unreachable-code unused-parameter])
836*6236dae4SAndroid Build Coastguard Worker          fi
837*6236dae4SAndroid Build Coastguard Worker          #
838*6236dae4SAndroid Build Coastguard Worker          dnl Only clang 2.8 or later
839*6236dae4SAndroid Build Coastguard Worker          if test "$compiler_num" -ge "208"; then
840*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [ignored-qualifiers])
841*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [vla])
842*6236dae4SAndroid Build Coastguard Worker          fi
843*6236dae4SAndroid Build Coastguard Worker          #
844*6236dae4SAndroid Build Coastguard Worker          dnl Only clang 2.9 or later
845*6236dae4SAndroid Build Coastguard Worker          if test "$compiler_num" -ge "209"; then
846*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [sign-conversion])
847*6236dae4SAndroid Build Coastguard Worker            tmp_CFLAGS="$tmp_CFLAGS -Wno-error=sign-conversion"          # FIXME
848*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [shift-sign-overflow])
849*6236dae4SAndroid Build Coastguard Worker          # CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [padded])  # Not used because we cannot change public structs
850*6236dae4SAndroid Build Coastguard Worker          fi
851*6236dae4SAndroid Build Coastguard Worker          #
852*6236dae4SAndroid Build Coastguard Worker          dnl Only clang 3.0 or later
853*6236dae4SAndroid Build Coastguard Worker          if test "$compiler_num" -ge "300"; then
854*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [language-extension-token])
855*6236dae4SAndroid Build Coastguard Worker            tmp_CFLAGS="$tmp_CFLAGS -Wformat=2"
856*6236dae4SAndroid Build Coastguard Worker          fi
857*6236dae4SAndroid Build Coastguard Worker          #
858*6236dae4SAndroid Build Coastguard Worker          dnl Only clang 3.2 or later
859*6236dae4SAndroid Build Coastguard Worker          if test "$compiler_num" -ge "302"; then
860*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [enum-conversion])
861*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [sometimes-uninitialized])
862*6236dae4SAndroid Build Coastguard Worker            case $host_os in
863*6236dae4SAndroid Build Coastguard Worker              cygwin* | mingw*)
864*6236dae4SAndroid Build Coastguard Worker                dnl skip missing-variable-declarations warnings for Cygwin and
865*6236dae4SAndroid Build Coastguard Worker                dnl MinGW because the libtool wrapper executable causes them
866*6236dae4SAndroid Build Coastguard Worker                ;;
867*6236dae4SAndroid Build Coastguard Worker              *)
868*6236dae4SAndroid Build Coastguard Worker                CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [missing-variable-declarations])
869*6236dae4SAndroid Build Coastguard Worker                ;;
870*6236dae4SAndroid Build Coastguard Worker            esac
871*6236dae4SAndroid Build Coastguard Worker          fi
872*6236dae4SAndroid Build Coastguard Worker          #
873*6236dae4SAndroid Build Coastguard Worker          dnl Only clang 3.4 or later
874*6236dae4SAndroid Build Coastguard Worker          if test "$compiler_num" -ge "304"; then
875*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [header-guard])
876*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [unused-const-variable])
877*6236dae4SAndroid Build Coastguard Worker          fi
878*6236dae4SAndroid Build Coastguard Worker          #
879*6236dae4SAndroid Build Coastguard Worker          dnl Only clang 3.5 or later
880*6236dae4SAndroid Build Coastguard Worker          if test "$compiler_num" -ge "305"; then
881*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [pragmas])
882*6236dae4SAndroid Build Coastguard Worker          # CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [unreachable-code-break])  # Not used: Silent in "unity" builds
883*6236dae4SAndroid Build Coastguard Worker          fi
884*6236dae4SAndroid Build Coastguard Worker          #
885*6236dae4SAndroid Build Coastguard Worker          dnl Only clang 3.6 or later
886*6236dae4SAndroid Build Coastguard Worker          if test "$compiler_num" -ge "306"; then
887*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [double-promotion])
888*6236dae4SAndroid Build Coastguard Worker          fi
889*6236dae4SAndroid Build Coastguard Worker          #
890*6236dae4SAndroid Build Coastguard Worker          dnl Only clang 3.9 or later
891*6236dae4SAndroid Build Coastguard Worker          if test "$compiler_num" -ge "309"; then
892*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [comma])
893*6236dae4SAndroid Build Coastguard Worker            # avoid the varargs warning, fixed in 4.0
894*6236dae4SAndroid Build Coastguard Worker            # https://bugs.llvm.org/show_bug.cgi?id=29140
895*6236dae4SAndroid Build Coastguard Worker            if test "$compiler_num" -lt "400"; then
896*6236dae4SAndroid Build Coastguard Worker              tmp_CFLAGS="$tmp_CFLAGS -Wno-varargs"
897*6236dae4SAndroid Build Coastguard Worker            fi
898*6236dae4SAndroid Build Coastguard Worker          fi
899*6236dae4SAndroid Build Coastguard Worker          dnl clang 7 or later
900*6236dae4SAndroid Build Coastguard Worker          if test "$compiler_num" -ge "700"; then
901*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [assign-enum])
902*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [extra-semi-stmt])
903*6236dae4SAndroid Build Coastguard Worker          fi
904*6236dae4SAndroid Build Coastguard Worker          dnl clang 10 or later
905*6236dae4SAndroid Build Coastguard Worker          if test "$compiler_num" -ge "1000"; then
906*6236dae4SAndroid Build Coastguard Worker            tmp_CFLAGS="$tmp_CFLAGS -Wimplicit-fallthrough"  # we have silencing markup for clang 10.0 and above only
907*6236dae4SAndroid Build Coastguard Worker          fi
908*6236dae4SAndroid Build Coastguard Worker        fi
909*6236dae4SAndroid Build Coastguard Worker        ;;
910*6236dae4SAndroid Build Coastguard Worker        #
911*6236dae4SAndroid Build Coastguard Worker      DEC_C)
912*6236dae4SAndroid Build Coastguard Worker        #
913*6236dae4SAndroid Build Coastguard Worker        if test "$want_warnings" = "yes"; then
914*6236dae4SAndroid Build Coastguard Worker          dnl Select a higher warning level than default level2
915*6236dae4SAndroid Build Coastguard Worker          tmp_CFLAGS="$tmp_CFLAGS -msg_enable level3"
916*6236dae4SAndroid Build Coastguard Worker        fi
917*6236dae4SAndroid Build Coastguard Worker        ;;
918*6236dae4SAndroid Build Coastguard Worker        #
919*6236dae4SAndroid Build Coastguard Worker      GNU_C)
920*6236dae4SAndroid Build Coastguard Worker        #
921*6236dae4SAndroid Build Coastguard Worker        if test "$want_warnings" = "yes"; then
922*6236dae4SAndroid Build Coastguard Worker          #
923*6236dae4SAndroid Build Coastguard Worker          dnl Do not enable -pedantic when cross-compiling with a gcc older
924*6236dae4SAndroid Build Coastguard Worker          dnl than 3.0, to avoid warnings from third party system headers.
925*6236dae4SAndroid Build Coastguard Worker          if test "x$cross_compiling" != "xyes" ||
926*6236dae4SAndroid Build Coastguard Worker            test "$compiler_num" -ge "300"; then
927*6236dae4SAndroid Build Coastguard Worker            tmp_CFLAGS="$tmp_CFLAGS -pedantic"
928*6236dae4SAndroid Build Coastguard Worker          fi
929*6236dae4SAndroid Build Coastguard Worker          #
930*6236dae4SAndroid Build Coastguard Worker          dnl Set of options we believe *ALL* gcc versions support:
931*6236dae4SAndroid Build Coastguard Worker          CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [all])
932*6236dae4SAndroid Build Coastguard Worker          tmp_CFLAGS="$tmp_CFLAGS -W"
933*6236dae4SAndroid Build Coastguard Worker          #
934*6236dae4SAndroid Build Coastguard Worker          dnl Only gcc 1.4 or later
935*6236dae4SAndroid Build Coastguard Worker          if test "$compiler_num" -ge "104"; then
936*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [pointer-arith write-strings])
937*6236dae4SAndroid Build Coastguard Worker            dnl If not cross-compiling with a gcc older than 3.0
938*6236dae4SAndroid Build Coastguard Worker            if test "x$cross_compiling" != "xyes" ||
939*6236dae4SAndroid Build Coastguard Worker              test "$compiler_num" -ge "300"; then
940*6236dae4SAndroid Build Coastguard Worker              CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [unused shadow])
941*6236dae4SAndroid Build Coastguard Worker            fi
942*6236dae4SAndroid Build Coastguard Worker          fi
943*6236dae4SAndroid Build Coastguard Worker          #
944*6236dae4SAndroid Build Coastguard Worker          dnl Only gcc 2.7 or later
945*6236dae4SAndroid Build Coastguard Worker          if test "$compiler_num" -ge "207"; then
946*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [inline nested-externs])
947*6236dae4SAndroid Build Coastguard Worker            dnl If not cross-compiling with a gcc older than 3.0
948*6236dae4SAndroid Build Coastguard Worker            if test "x$cross_compiling" != "xyes" ||
949*6236dae4SAndroid Build Coastguard Worker              test "$compiler_num" -ge "300"; then
950*6236dae4SAndroid Build Coastguard Worker              CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [missing-declarations])
951*6236dae4SAndroid Build Coastguard Worker              CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [missing-prototypes])
952*6236dae4SAndroid Build Coastguard Worker            fi
953*6236dae4SAndroid Build Coastguard Worker          fi
954*6236dae4SAndroid Build Coastguard Worker          #
955*6236dae4SAndroid Build Coastguard Worker          dnl Only gcc 2.95 or later
956*6236dae4SAndroid Build Coastguard Worker          if test "$compiler_num" -ge "295"; then
957*6236dae4SAndroid Build Coastguard Worker            tmp_CFLAGS="$tmp_CFLAGS -Wno-long-long"
958*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [bad-function-cast])
959*6236dae4SAndroid Build Coastguard Worker          fi
960*6236dae4SAndroid Build Coastguard Worker          #
961*6236dae4SAndroid Build Coastguard Worker          dnl Only gcc 2.96 or later
962*6236dae4SAndroid Build Coastguard Worker          if test "$compiler_num" -ge "296"; then
963*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [float-equal])
964*6236dae4SAndroid Build Coastguard Worker            tmp_CFLAGS="$tmp_CFLAGS -Wno-multichar"
965*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [sign-compare])
966*6236dae4SAndroid Build Coastguard Worker            dnl -Wundef used only if gcc is 2.96 or later since we get
967*6236dae4SAndroid Build Coastguard Worker            dnl lots of "`_POSIX_C_SOURCE' is not defined" in system
968*6236dae4SAndroid Build Coastguard Worker            dnl headers with gcc 2.95.4 on FreeBSD 4.9
969*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [undef])
970*6236dae4SAndroid Build Coastguard Worker          fi
971*6236dae4SAndroid Build Coastguard Worker          #
972*6236dae4SAndroid Build Coastguard Worker          dnl Only gcc 2.97 or later
973*6236dae4SAndroid Build Coastguard Worker          if test "$compiler_num" -ge "297"; then
974*6236dae4SAndroid Build Coastguard Worker            tmp_CFLAGS="$tmp_CFLAGS -Wno-format-nonliteral"
975*6236dae4SAndroid Build Coastguard Worker          fi
976*6236dae4SAndroid Build Coastguard Worker          #
977*6236dae4SAndroid Build Coastguard Worker          dnl Only gcc 3.0 or later
978*6236dae4SAndroid Build Coastguard Worker          if test "$compiler_num" -ge "300"; then
979*6236dae4SAndroid Build Coastguard Worker            dnl -Wunreachable-code seems totally unreliable on my gcc 3.3.2 on
980*6236dae4SAndroid Build Coastguard Worker            dnl on i686-Linux as it gives us heaps with false positives.
981*6236dae4SAndroid Build Coastguard Worker            dnl Also, on gcc 4.0.X it is totally unbearable and complains all
982*6236dae4SAndroid Build Coastguard Worker            dnl over making it unusable for generic purposes. Let's not use it.
983*6236dae4SAndroid Build Coastguard Worker            tmp_CFLAGS="$tmp_CFLAGS"
984*6236dae4SAndroid Build Coastguard Worker          fi
985*6236dae4SAndroid Build Coastguard Worker          #
986*6236dae4SAndroid Build Coastguard Worker          dnl Only gcc 3.3 or later
987*6236dae4SAndroid Build Coastguard Worker          if test "$compiler_num" -ge "303"; then
988*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [endif-labels strict-prototypes])
989*6236dae4SAndroid Build Coastguard Worker          fi
990*6236dae4SAndroid Build Coastguard Worker          #
991*6236dae4SAndroid Build Coastguard Worker          dnl Only gcc 3.4 or later
992*6236dae4SAndroid Build Coastguard Worker          if test "$compiler_num" -ge "304"; then
993*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [declaration-after-statement])
994*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [old-style-definition])
995*6236dae4SAndroid Build Coastguard Worker          fi
996*6236dae4SAndroid Build Coastguard Worker          #
997*6236dae4SAndroid Build Coastguard Worker          dnl Only gcc 4.0 or later
998*6236dae4SAndroid Build Coastguard Worker          if test "$compiler_num" -ge "400"; then
999*6236dae4SAndroid Build Coastguard Worker            tmp_CFLAGS="$tmp_CFLAGS -Wstrict-aliasing=3"
1000*6236dae4SAndroid Build Coastguard Worker          fi
1001*6236dae4SAndroid Build Coastguard Worker          #
1002*6236dae4SAndroid Build Coastguard Worker          dnl Only gcc 4.1 or later
1003*6236dae4SAndroid Build Coastguard Worker          if test "$compiler_num" -ge "401"; then
1004*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [attributes])
1005*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [div-by-zero format-security])
1006*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [missing-field-initializers])
1007*6236dae4SAndroid Build Coastguard Worker            case $host in
1008*6236dae4SAndroid Build Coastguard Worker              *-*-msys*)
1009*6236dae4SAndroid Build Coastguard Worker                ;;
1010*6236dae4SAndroid Build Coastguard Worker              *)
1011*6236dae4SAndroid Build Coastguard Worker                CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [missing-noreturn])  # Seen to clash with libtool-generated stub code
1012*6236dae4SAndroid Build Coastguard Worker                ;;
1013*6236dae4SAndroid Build Coastguard Worker            esac
1014*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [unreachable-code unused-parameter])
1015*6236dae4SAndroid Build Coastguard Worker          # CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [padded])           # Not used because we cannot change public structs
1016*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [pragmas])
1017*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [redundant-decls])
1018*6236dae4SAndroid Build Coastguard Worker          # CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [switch-enum])      # Not used because this basically disallows default case
1019*6236dae4SAndroid Build Coastguard Worker          # CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [unused-macros])    # Not practical
1020*6236dae4SAndroid Build Coastguard Worker          fi
1021*6236dae4SAndroid Build Coastguard Worker          #
1022*6236dae4SAndroid Build Coastguard Worker          dnl Only gcc 4.2 or later
1023*6236dae4SAndroid Build Coastguard Worker          if test "$compiler_num" -ge "402"; then
1024*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [cast-align])
1025*6236dae4SAndroid Build Coastguard Worker          fi
1026*6236dae4SAndroid Build Coastguard Worker          #
1027*6236dae4SAndroid Build Coastguard Worker          dnl Only gcc 4.3 or later
1028*6236dae4SAndroid Build Coastguard Worker          if test "$compiler_num" -ge "403"; then
1029*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [address])
1030*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [type-limits old-style-declaration])
1031*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [missing-parameter-type empty-body])
1032*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [clobbered ignored-qualifiers])
1033*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [conversion trampolines])
1034*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [sign-conversion])
1035*6236dae4SAndroid Build Coastguard Worker            tmp_CFLAGS="$tmp_CFLAGS -Wno-error=sign-conversion"          # FIXME
1036*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [vla])
1037*6236dae4SAndroid Build Coastguard Worker            dnl required for -Warray-bounds, included in -Wall
1038*6236dae4SAndroid Build Coastguard Worker            tmp_CFLAGS="$tmp_CFLAGS -ftree-vrp"
1039*6236dae4SAndroid Build Coastguard Worker          fi
1040*6236dae4SAndroid Build Coastguard Worker          #
1041*6236dae4SAndroid Build Coastguard Worker          dnl Only gcc 4.5 or later
1042*6236dae4SAndroid Build Coastguard Worker          if test "$compiler_num" -ge "405"; then
1043*6236dae4SAndroid Build Coastguard Worker            dnl Only Windows targets
1044*6236dae4SAndroid Build Coastguard Worker            if test "$curl_cv_native_windows" = "yes"; then
1045*6236dae4SAndroid Build Coastguard Worker              tmp_CFLAGS="$tmp_CFLAGS -Wno-pedantic-ms-format"
1046*6236dae4SAndroid Build Coastguard Worker            fi
1047*6236dae4SAndroid Build Coastguard Worker          fi
1048*6236dae4SAndroid Build Coastguard Worker          #
1049*6236dae4SAndroid Build Coastguard Worker          dnl Only gcc 4.6 or later
1050*6236dae4SAndroid Build Coastguard Worker          if test "$compiler_num" -ge "406"; then
1051*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [double-promotion])
1052*6236dae4SAndroid Build Coastguard Worker          fi
1053*6236dae4SAndroid Build Coastguard Worker          #
1054*6236dae4SAndroid Build Coastguard Worker          dnl only gcc 4.8 or later
1055*6236dae4SAndroid Build Coastguard Worker          if test "$compiler_num" -ge "408"; then
1056*6236dae4SAndroid Build Coastguard Worker            tmp_CFLAGS="$tmp_CFLAGS -Wformat=2"
1057*6236dae4SAndroid Build Coastguard Worker          fi
1058*6236dae4SAndroid Build Coastguard Worker          #
1059*6236dae4SAndroid Build Coastguard Worker          dnl Only gcc 5 or later
1060*6236dae4SAndroid Build Coastguard Worker          if test "$compiler_num" -ge "500"; then
1061*6236dae4SAndroid Build Coastguard Worker            tmp_CFLAGS="$tmp_CFLAGS -Warray-bounds=2"
1062*6236dae4SAndroid Build Coastguard Worker          fi
1063*6236dae4SAndroid Build Coastguard Worker          #
1064*6236dae4SAndroid Build Coastguard Worker          dnl Only gcc 6 or later
1065*6236dae4SAndroid Build Coastguard Worker          if test "$compiler_num" -ge "600"; then
1066*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [shift-negative-value])
1067*6236dae4SAndroid Build Coastguard Worker            tmp_CFLAGS="$tmp_CFLAGS -Wshift-overflow=2"
1068*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [null-dereference])
1069*6236dae4SAndroid Build Coastguard Worker            tmp_CFLAGS="$tmp_CFLAGS -fdelete-null-pointer-checks"
1070*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [duplicated-cond])
1071*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [unused-const-variable])
1072*6236dae4SAndroid Build Coastguard Worker          fi
1073*6236dae4SAndroid Build Coastguard Worker          #
1074*6236dae4SAndroid Build Coastguard Worker          dnl Only gcc 7 or later
1075*6236dae4SAndroid Build Coastguard Worker          if test "$compiler_num" -ge "700"; then
1076*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [duplicated-branches])
1077*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [restrict])
1078*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [alloc-zero])
1079*6236dae4SAndroid Build Coastguard Worker            tmp_CFLAGS="$tmp_CFLAGS -Wformat-truncation=2"
1080*6236dae4SAndroid Build Coastguard Worker            tmp_CFLAGS="$tmp_CFLAGS -Wimplicit-fallthrough"
1081*6236dae4SAndroid Build Coastguard Worker          fi
1082*6236dae4SAndroid Build Coastguard Worker          #
1083*6236dae4SAndroid Build Coastguard Worker          dnl Only gcc 10 or later
1084*6236dae4SAndroid Build Coastguard Worker          if test "$compiler_num" -ge "1000"; then
1085*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [arith-conversion])
1086*6236dae4SAndroid Build Coastguard Worker            CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [enum-conversion])
1087*6236dae4SAndroid Build Coastguard Worker          fi
1088*6236dae4SAndroid Build Coastguard Worker          #
1089*6236dae4SAndroid Build Coastguard Worker        fi
1090*6236dae4SAndroid Build Coastguard Worker        #
1091*6236dae4SAndroid Build Coastguard Worker        dnl Do not issue warnings for code in system include paths.
1092*6236dae4SAndroid Build Coastguard Worker        if test "$compiler_num" -ge "300"; then
1093*6236dae4SAndroid Build Coastguard Worker          tmp_CFLAGS="$tmp_CFLAGS -Wno-system-headers"
1094*6236dae4SAndroid Build Coastguard Worker        else
1095*6236dae4SAndroid Build Coastguard Worker          dnl When cross-compiling with a gcc older than 3.0, disable
1096*6236dae4SAndroid Build Coastguard Worker          dnl some warnings triggered on third party system headers.
1097*6236dae4SAndroid Build Coastguard Worker          if test "x$cross_compiling" = "xyes"; then
1098*6236dae4SAndroid Build Coastguard Worker            if test "$compiler_num" -ge "104"; then
1099*6236dae4SAndroid Build Coastguard Worker              dnl gcc 1.4 or later
1100*6236dae4SAndroid Build Coastguard Worker              tmp_CFLAGS="$tmp_CFLAGS -Wno-unused -Wno-shadow"
1101*6236dae4SAndroid Build Coastguard Worker            fi
1102*6236dae4SAndroid Build Coastguard Worker            if test "$compiler_num" -ge "207"; then
1103*6236dae4SAndroid Build Coastguard Worker              dnl gcc 2.7 or later
1104*6236dae4SAndroid Build Coastguard Worker              tmp_CFLAGS="$tmp_CFLAGS -Wno-missing-declarations"
1105*6236dae4SAndroid Build Coastguard Worker              tmp_CFLAGS="$tmp_CFLAGS -Wno-missing-prototypes"
1106*6236dae4SAndroid Build Coastguard Worker            fi
1107*6236dae4SAndroid Build Coastguard Worker          fi
1108*6236dae4SAndroid Build Coastguard Worker        fi
1109*6236dae4SAndroid Build Coastguard Worker        ;;
1110*6236dae4SAndroid Build Coastguard Worker        #
1111*6236dae4SAndroid Build Coastguard Worker      HP_UX_C)
1112*6236dae4SAndroid Build Coastguard Worker        #
1113*6236dae4SAndroid Build Coastguard Worker        if test "$want_warnings" = "yes"; then
1114*6236dae4SAndroid Build Coastguard Worker          dnl Issue all warnings
1115*6236dae4SAndroid Build Coastguard Worker          tmp_CFLAGS="$tmp_CFLAGS +w1"
1116*6236dae4SAndroid Build Coastguard Worker        fi
1117*6236dae4SAndroid Build Coastguard Worker        ;;
1118*6236dae4SAndroid Build Coastguard Worker        #
1119*6236dae4SAndroid Build Coastguard Worker      IBM_C)
1120*6236dae4SAndroid Build Coastguard Worker        #
1121*6236dae4SAndroid Build Coastguard Worker        dnl Placeholder
1122*6236dae4SAndroid Build Coastguard Worker        tmp_CFLAGS="$tmp_CFLAGS"
1123*6236dae4SAndroid Build Coastguard Worker        ;;
1124*6236dae4SAndroid Build Coastguard Worker        #
1125*6236dae4SAndroid Build Coastguard Worker      INTEL_UNIX_C)
1126*6236dae4SAndroid Build Coastguard Worker        #
1127*6236dae4SAndroid Build Coastguard Worker        if test "$want_warnings" = "yes"; then
1128*6236dae4SAndroid Build Coastguard Worker          if test "$compiler_num" -gt "600"; then
1129*6236dae4SAndroid Build Coastguard Worker            dnl Show errors, warnings, and remarks
1130*6236dae4SAndroid Build Coastguard Worker            tmp_CPPFLAGS="$tmp_CPPFLAGS -Wall -w2"
1131*6236dae4SAndroid Build Coastguard Worker            dnl Perform extra compile-time code checking
1132*6236dae4SAndroid Build Coastguard Worker            tmp_CPPFLAGS="$tmp_CPPFLAGS -Wcheck"
1133*6236dae4SAndroid Build Coastguard Worker            dnl Warn on nested comments
1134*6236dae4SAndroid Build Coastguard Worker            tmp_CPPFLAGS="$tmp_CPPFLAGS -Wcomment"
1135*6236dae4SAndroid Build Coastguard Worker            dnl Show warnings relative to deprecated features
1136*6236dae4SAndroid Build Coastguard Worker            tmp_CPPFLAGS="$tmp_CPPFLAGS -Wdeprecated"
1137*6236dae4SAndroid Build Coastguard Worker            dnl Enable warnings for missing prototypes
1138*6236dae4SAndroid Build Coastguard Worker            tmp_CPPFLAGS="$tmp_CPPFLAGS -Wmissing-prototypes"
1139*6236dae4SAndroid Build Coastguard Worker            dnl Enable warnings for 64-bit portability issues
1140*6236dae4SAndroid Build Coastguard Worker            tmp_CPPFLAGS="$tmp_CPPFLAGS -Wp64"
1141*6236dae4SAndroid Build Coastguard Worker            dnl Enable warnings for questionable pointer arithmetic
1142*6236dae4SAndroid Build Coastguard Worker            tmp_CPPFLAGS="$tmp_CPPFLAGS -Wpointer-arith"
1143*6236dae4SAndroid Build Coastguard Worker            dnl Check for function return typw issues
1144*6236dae4SAndroid Build Coastguard Worker            tmp_CPPFLAGS="$tmp_CPPFLAGS -Wreturn-type"
1145*6236dae4SAndroid Build Coastguard Worker            dnl Warn on variable declarations hiding a previous one
1146*6236dae4SAndroid Build Coastguard Worker            tmp_CPPFLAGS="$tmp_CPPFLAGS -Wshadow"
1147*6236dae4SAndroid Build Coastguard Worker            dnl Warn when a variable is used before initialized
1148*6236dae4SAndroid Build Coastguard Worker            tmp_CPPFLAGS="$tmp_CPPFLAGS -Wuninitialized"
1149*6236dae4SAndroid Build Coastguard Worker            dnl Warn if a declared function is not used
1150*6236dae4SAndroid Build Coastguard Worker            tmp_CPPFLAGS="$tmp_CPPFLAGS -Wunused-function"
1151*6236dae4SAndroid Build Coastguard Worker          fi
1152*6236dae4SAndroid Build Coastguard Worker        fi
1153*6236dae4SAndroid Build Coastguard Worker        dnl Disable using EBP register in optimizations
1154*6236dae4SAndroid Build Coastguard Worker        tmp_CFLAGS="$tmp_CFLAGS -fno-omit-frame-pointer"
1155*6236dae4SAndroid Build Coastguard Worker        dnl Disable use of ANSI C aliasing rules in optimizations
1156*6236dae4SAndroid Build Coastguard Worker        tmp_CFLAGS="$tmp_CFLAGS -fno-strict-aliasing"
1157*6236dae4SAndroid Build Coastguard Worker        dnl Value-safe optimizations on floating-point data
1158*6236dae4SAndroid Build Coastguard Worker        tmp_CFLAGS="$tmp_CFLAGS -fp-model precise"
1159*6236dae4SAndroid Build Coastguard Worker        ;;
1160*6236dae4SAndroid Build Coastguard Worker        #
1161*6236dae4SAndroid Build Coastguard Worker      INTEL_WINDOWS_C)
1162*6236dae4SAndroid Build Coastguard Worker        #
1163*6236dae4SAndroid Build Coastguard Worker        dnl Placeholder
1164*6236dae4SAndroid Build Coastguard Worker        tmp_CFLAGS="$tmp_CFLAGS"
1165*6236dae4SAndroid Build Coastguard Worker        ;;
1166*6236dae4SAndroid Build Coastguard Worker        #
1167*6236dae4SAndroid Build Coastguard Worker      SGI_MIPS_C)
1168*6236dae4SAndroid Build Coastguard Worker        #
1169*6236dae4SAndroid Build Coastguard Worker        if test "$want_warnings" = "yes"; then
1170*6236dae4SAndroid Build Coastguard Worker          dnl Perform stricter semantic and lint-like checks
1171*6236dae4SAndroid Build Coastguard Worker          tmp_CFLAGS="$tmp_CFLAGS -fullwarn"
1172*6236dae4SAndroid Build Coastguard Worker        fi
1173*6236dae4SAndroid Build Coastguard Worker        ;;
1174*6236dae4SAndroid Build Coastguard Worker        #
1175*6236dae4SAndroid Build Coastguard Worker      SGI_MIPSPRO_C)
1176*6236dae4SAndroid Build Coastguard Worker        #
1177*6236dae4SAndroid Build Coastguard Worker        if test "$want_warnings" = "yes"; then
1178*6236dae4SAndroid Build Coastguard Worker          dnl Perform stricter semantic and lint-like checks
1179*6236dae4SAndroid Build Coastguard Worker          tmp_CFLAGS="$tmp_CFLAGS -fullwarn"
1180*6236dae4SAndroid Build Coastguard Worker          dnl Disable some remarks
1181*6236dae4SAndroid Build Coastguard Worker          dnl #1209: controlling expression is constant
1182*6236dae4SAndroid Build Coastguard Worker          tmp_CFLAGS="$tmp_CFLAGS -woff 1209"
1183*6236dae4SAndroid Build Coastguard Worker        fi
1184*6236dae4SAndroid Build Coastguard Worker        ;;
1185*6236dae4SAndroid Build Coastguard Worker        #
1186*6236dae4SAndroid Build Coastguard Worker      SUNPRO_C)
1187*6236dae4SAndroid Build Coastguard Worker        #
1188*6236dae4SAndroid Build Coastguard Worker        if test "$want_warnings" = "yes"; then
1189*6236dae4SAndroid Build Coastguard Worker          dnl Perform stricter semantic and lint-like checks
1190*6236dae4SAndroid Build Coastguard Worker          tmp_CFLAGS="$tmp_CFLAGS -v"
1191*6236dae4SAndroid Build Coastguard Worker        fi
1192*6236dae4SAndroid Build Coastguard Worker        ;;
1193*6236dae4SAndroid Build Coastguard Worker        #
1194*6236dae4SAndroid Build Coastguard Worker      TINY_C)
1195*6236dae4SAndroid Build Coastguard Worker        #
1196*6236dae4SAndroid Build Coastguard Worker        if test "$want_warnings" = "yes"; then
1197*6236dae4SAndroid Build Coastguard Worker          dnl Activate all warnings
1198*6236dae4SAndroid Build Coastguard Worker          CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [all])
1199*6236dae4SAndroid Build Coastguard Worker          dnl Make string constants be of type const char *
1200*6236dae4SAndroid Build Coastguard Worker          CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [write-strings])
1201*6236dae4SAndroid Build Coastguard Worker          dnl Warn use of unsupported GCC features ignored by TCC
1202*6236dae4SAndroid Build Coastguard Worker          CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [unsupported])
1203*6236dae4SAndroid Build Coastguard Worker        fi
1204*6236dae4SAndroid Build Coastguard Worker        ;;
1205*6236dae4SAndroid Build Coastguard Worker        #
1206*6236dae4SAndroid Build Coastguard Worker    esac
1207*6236dae4SAndroid Build Coastguard Worker    #
1208*6236dae4SAndroid Build Coastguard Worker    squeeze tmp_CPPFLAGS
1209*6236dae4SAndroid Build Coastguard Worker    squeeze tmp_CFLAGS
1210*6236dae4SAndroid Build Coastguard Worker    #
1211*6236dae4SAndroid Build Coastguard Worker    if test ! -z "$tmp_CFLAGS" || test ! -z "$tmp_CPPFLAGS"; then
1212*6236dae4SAndroid Build Coastguard Worker      AC_MSG_CHECKING([if compiler accepts strict warning options])
1213*6236dae4SAndroid Build Coastguard Worker      CPPFLAGS="$tmp_save_CPPFLAGS $tmp_CPPFLAGS"
1214*6236dae4SAndroid Build Coastguard Worker      CFLAGS="$tmp_save_CFLAGS $tmp_CFLAGS"
1215*6236dae4SAndroid Build Coastguard Worker      squeeze CPPFLAGS
1216*6236dae4SAndroid Build Coastguard Worker      squeeze CFLAGS
1217*6236dae4SAndroid Build Coastguard Worker      CURL_COMPILER_WORKS_IFELSE([
1218*6236dae4SAndroid Build Coastguard Worker        AC_MSG_RESULT([yes])
1219*6236dae4SAndroid Build Coastguard Worker        AC_MSG_NOTICE([compiler options added: $tmp_CFLAGS $tmp_CPPFLAGS])
1220*6236dae4SAndroid Build Coastguard Worker      ],[
1221*6236dae4SAndroid Build Coastguard Worker        AC_MSG_RESULT([no])
1222*6236dae4SAndroid Build Coastguard Worker        AC_MSG_WARN([compiler options rejected: $tmp_CFLAGS $tmp_CPPFLAGS])
1223*6236dae4SAndroid Build Coastguard Worker        dnl restore initial settings
1224*6236dae4SAndroid Build Coastguard Worker        CPPFLAGS="$tmp_save_CPPFLAGS"
1225*6236dae4SAndroid Build Coastguard Worker        CFLAGS="$tmp_save_CFLAGS"
1226*6236dae4SAndroid Build Coastguard Worker      ])
1227*6236dae4SAndroid Build Coastguard Worker    fi
1228*6236dae4SAndroid Build Coastguard Worker    #
1229*6236dae4SAndroid Build Coastguard Worker  fi
1230*6236dae4SAndroid Build Coastguard Worker])
1231*6236dae4SAndroid Build Coastguard Worker
1232*6236dae4SAndroid Build Coastguard Worker
1233*6236dae4SAndroid Build Coastguard Workerdnl CURL_SHFUNC_SQUEEZE
1234*6236dae4SAndroid Build Coastguard Workerdnl -------------------------------------------------
1235*6236dae4SAndroid Build Coastguard Workerdnl Declares a shell function squeeze() which removes
1236*6236dae4SAndroid Build Coastguard Workerdnl redundant whitespace out of a shell variable.
1237*6236dae4SAndroid Build Coastguard Worker
1238*6236dae4SAndroid Build Coastguard WorkerAC_DEFUN([CURL_SHFUNC_SQUEEZE], [
1239*6236dae4SAndroid Build Coastguard Workersqueeze() {
1240*6236dae4SAndroid Build Coastguard Worker  _sqz_result=""
1241*6236dae4SAndroid Build Coastguard Worker  eval _sqz_input=\[$][$]1
1242*6236dae4SAndroid Build Coastguard Worker  for _sqz_token in $_sqz_input; do
1243*6236dae4SAndroid Build Coastguard Worker    if test -z "$_sqz_result"; then
1244*6236dae4SAndroid Build Coastguard Worker      _sqz_result="$_sqz_token"
1245*6236dae4SAndroid Build Coastguard Worker    else
1246*6236dae4SAndroid Build Coastguard Worker      _sqz_result="$_sqz_result $_sqz_token"
1247*6236dae4SAndroid Build Coastguard Worker    fi
1248*6236dae4SAndroid Build Coastguard Worker  done
1249*6236dae4SAndroid Build Coastguard Worker  eval [$]1=\$_sqz_result
1250*6236dae4SAndroid Build Coastguard Worker  return 0
1251*6236dae4SAndroid Build Coastguard Worker}
1252*6236dae4SAndroid Build Coastguard Worker])
1253*6236dae4SAndroid Build Coastguard Worker
1254*6236dae4SAndroid Build Coastguard Worker
1255*6236dae4SAndroid Build Coastguard Workerdnl CURL_CHECK_COMPILER_HALT_ON_ERROR
1256*6236dae4SAndroid Build Coastguard Workerdnl -------------------------------------------------
1257*6236dae4SAndroid Build Coastguard Workerdnl Verifies if the compiler actually halts after the
1258*6236dae4SAndroid Build Coastguard Workerdnl compilation phase without generating any object
1259*6236dae4SAndroid Build Coastguard Workerdnl code file, when the source compiles with errors.
1260*6236dae4SAndroid Build Coastguard Worker
1261*6236dae4SAndroid Build Coastguard WorkerAC_DEFUN([CURL_CHECK_COMPILER_HALT_ON_ERROR], [
1262*6236dae4SAndroid Build Coastguard Worker  AC_MSG_CHECKING([if compiler halts on compilation errors])
1263*6236dae4SAndroid Build Coastguard Worker  AC_COMPILE_IFELSE([
1264*6236dae4SAndroid Build Coastguard Worker    AC_LANG_PROGRAM([[
1265*6236dae4SAndroid Build Coastguard Worker    ]],[[
1266*6236dae4SAndroid Build Coastguard Worker      #error force compilation error
1267*6236dae4SAndroid Build Coastguard Worker    ]])
1268*6236dae4SAndroid Build Coastguard Worker  ],[
1269*6236dae4SAndroid Build Coastguard Worker    AC_MSG_RESULT([no])
1270*6236dae4SAndroid Build Coastguard Worker    AC_MSG_ERROR([compiler does not halt on compilation errors.])
1271*6236dae4SAndroid Build Coastguard Worker  ],[
1272*6236dae4SAndroid Build Coastguard Worker    AC_MSG_RESULT([yes])
1273*6236dae4SAndroid Build Coastguard Worker  ])
1274*6236dae4SAndroid Build Coastguard Worker])
1275*6236dae4SAndroid Build Coastguard Worker
1276*6236dae4SAndroid Build Coastguard Worker
1277*6236dae4SAndroid Build Coastguard Workerdnl CURL_CHECK_COMPILER_ARRAY_SIZE_NEGATIVE
1278*6236dae4SAndroid Build Coastguard Workerdnl -------------------------------------------------
1279*6236dae4SAndroid Build Coastguard Workerdnl Verifies if the compiler actually halts after the
1280*6236dae4SAndroid Build Coastguard Workerdnl compilation phase without generating any object
1281*6236dae4SAndroid Build Coastguard Workerdnl code file, when the source code tries to define a
1282*6236dae4SAndroid Build Coastguard Workerdnl type for a constant array with negative dimension.
1283*6236dae4SAndroid Build Coastguard Worker
1284*6236dae4SAndroid Build Coastguard WorkerAC_DEFUN([CURL_CHECK_COMPILER_ARRAY_SIZE_NEGATIVE], [
1285*6236dae4SAndroid Build Coastguard Worker  AC_REQUIRE([CURL_CHECK_COMPILER_HALT_ON_ERROR])dnl
1286*6236dae4SAndroid Build Coastguard Worker  AC_MSG_CHECKING([if compiler halts on negative sized arrays])
1287*6236dae4SAndroid Build Coastguard Worker  AC_COMPILE_IFELSE([
1288*6236dae4SAndroid Build Coastguard Worker    AC_LANG_PROGRAM([[
1289*6236dae4SAndroid Build Coastguard Worker      typedef char bad_t[sizeof(char) == sizeof(int) ? -1 : -1 ];
1290*6236dae4SAndroid Build Coastguard Worker    ]],[[
1291*6236dae4SAndroid Build Coastguard Worker      bad_t dummy;
1292*6236dae4SAndroid Build Coastguard Worker    ]])
1293*6236dae4SAndroid Build Coastguard Worker  ],[
1294*6236dae4SAndroid Build Coastguard Worker    AC_MSG_RESULT([no])
1295*6236dae4SAndroid Build Coastguard Worker    AC_MSG_ERROR([compiler does not halt on negative sized arrays.])
1296*6236dae4SAndroid Build Coastguard Worker  ],[
1297*6236dae4SAndroid Build Coastguard Worker    AC_MSG_RESULT([yes])
1298*6236dae4SAndroid Build Coastguard Worker  ])
1299*6236dae4SAndroid Build Coastguard Worker])
1300*6236dae4SAndroid Build Coastguard Worker
1301*6236dae4SAndroid Build Coastguard Worker
1302*6236dae4SAndroid Build Coastguard Workerdnl CURL_CHECK_COMPILER_STRUCT_MEMBER_SIZE
1303*6236dae4SAndroid Build Coastguard Workerdnl -------------------------------------------------
1304*6236dae4SAndroid Build Coastguard Workerdnl Verifies if the compiler is capable of handling the
1305*6236dae4SAndroid Build Coastguard Workerdnl size of a struct member, struct which is a function
1306*6236dae4SAndroid Build Coastguard Workerdnl result, as a compilation-time condition inside the
1307*6236dae4SAndroid Build Coastguard Workerdnl type definition of a constant array.
1308*6236dae4SAndroid Build Coastguard Worker
1309*6236dae4SAndroid Build Coastguard WorkerAC_DEFUN([CURL_CHECK_COMPILER_STRUCT_MEMBER_SIZE], [
1310*6236dae4SAndroid Build Coastguard Worker  AC_REQUIRE([CURL_CHECK_COMPILER_ARRAY_SIZE_NEGATIVE])dnl
1311*6236dae4SAndroid Build Coastguard Worker  AC_MSG_CHECKING([if compiler struct member size checking works])
1312*6236dae4SAndroid Build Coastguard Worker  tst_compiler_check_one_works="unknown"
1313*6236dae4SAndroid Build Coastguard Worker  AC_COMPILE_IFELSE([
1314*6236dae4SAndroid Build Coastguard Worker    AC_LANG_PROGRAM([[
1315*6236dae4SAndroid Build Coastguard Worker      struct mystruct {
1316*6236dae4SAndroid Build Coastguard Worker        int  mi;
1317*6236dae4SAndroid Build Coastguard Worker        char mc;
1318*6236dae4SAndroid Build Coastguard Worker        struct mystruct *next;
1319*6236dae4SAndroid Build Coastguard Worker      };
1320*6236dae4SAndroid Build Coastguard Worker      struct mystruct myfunc();
1321*6236dae4SAndroid Build Coastguard Worker      typedef char good_t1[sizeof(myfunc().mi) == sizeof(int)  ? 1 : -1 ];
1322*6236dae4SAndroid Build Coastguard Worker      typedef char good_t2[sizeof(myfunc().mc) == sizeof(char) ? 1 : -1 ];
1323*6236dae4SAndroid Build Coastguard Worker    ]],[[
1324*6236dae4SAndroid Build Coastguard Worker      good_t1 dummy1;
1325*6236dae4SAndroid Build Coastguard Worker      good_t2 dummy2;
1326*6236dae4SAndroid Build Coastguard Worker    ]])
1327*6236dae4SAndroid Build Coastguard Worker  ],[
1328*6236dae4SAndroid Build Coastguard Worker    tst_compiler_check_one_works="yes"
1329*6236dae4SAndroid Build Coastguard Worker  ],[
1330*6236dae4SAndroid Build Coastguard Worker    tst_compiler_check_one_works="no"
1331*6236dae4SAndroid Build Coastguard Worker    sed 's/^/cc-src: /' conftest.$ac_ext >&6
1332*6236dae4SAndroid Build Coastguard Worker    sed 's/^/cc-err: /' conftest.err >&6
1333*6236dae4SAndroid Build Coastguard Worker  ])
1334*6236dae4SAndroid Build Coastguard Worker  tst_compiler_check_two_works="unknown"
1335*6236dae4SAndroid Build Coastguard Worker  AC_COMPILE_IFELSE([
1336*6236dae4SAndroid Build Coastguard Worker    AC_LANG_PROGRAM([[
1337*6236dae4SAndroid Build Coastguard Worker      struct mystruct {
1338*6236dae4SAndroid Build Coastguard Worker        int  mi;
1339*6236dae4SAndroid Build Coastguard Worker        char mc;
1340*6236dae4SAndroid Build Coastguard Worker        struct mystruct *next;
1341*6236dae4SAndroid Build Coastguard Worker      };
1342*6236dae4SAndroid Build Coastguard Worker      struct mystruct myfunc();
1343*6236dae4SAndroid Build Coastguard Worker      typedef char bad_t1[sizeof(myfunc().mi) != sizeof(int)  ? 1 : -1 ];
1344*6236dae4SAndroid Build Coastguard Worker      typedef char bad_t2[sizeof(myfunc().mc) != sizeof(char) ? 1 : -1 ];
1345*6236dae4SAndroid Build Coastguard Worker    ]],[[
1346*6236dae4SAndroid Build Coastguard Worker      bad_t1 dummy1;
1347*6236dae4SAndroid Build Coastguard Worker      bad_t2 dummy2;
1348*6236dae4SAndroid Build Coastguard Worker    ]])
1349*6236dae4SAndroid Build Coastguard Worker  ],[
1350*6236dae4SAndroid Build Coastguard Worker    tst_compiler_check_two_works="no"
1351*6236dae4SAndroid Build Coastguard Worker  ],[
1352*6236dae4SAndroid Build Coastguard Worker    tst_compiler_check_two_works="yes"
1353*6236dae4SAndroid Build Coastguard Worker  ])
1354*6236dae4SAndroid Build Coastguard Worker  if test "$tst_compiler_check_one_works" = "yes" &&
1355*6236dae4SAndroid Build Coastguard Worker    test "$tst_compiler_check_two_works" = "yes"; then
1356*6236dae4SAndroid Build Coastguard Worker    AC_MSG_RESULT([yes])
1357*6236dae4SAndroid Build Coastguard Worker  else
1358*6236dae4SAndroid Build Coastguard Worker    AC_MSG_RESULT([no])
1359*6236dae4SAndroid Build Coastguard Worker    AC_MSG_ERROR([compiler fails struct member size checking.])
1360*6236dae4SAndroid Build Coastguard Worker  fi
1361*6236dae4SAndroid Build Coastguard Worker])
1362*6236dae4SAndroid Build Coastguard Worker
1363*6236dae4SAndroid Build Coastguard Worker
1364*6236dae4SAndroid Build Coastguard Workerdnl CURL_CHECK_COMPILER_SYMBOL_HIDING
1365*6236dae4SAndroid Build Coastguard Workerdnl -------------------------------------------------
1366*6236dae4SAndroid Build Coastguard Workerdnl Verify if compiler supports hiding library internal symbols, setting
1367*6236dae4SAndroid Build Coastguard Workerdnl shell variable supports_symbol_hiding value as appropriate, as well as
1368*6236dae4SAndroid Build Coastguard Workerdnl variables symbol_hiding_CFLAGS and symbol_hiding_EXTERN when supported.
1369*6236dae4SAndroid Build Coastguard Worker
1370*6236dae4SAndroid Build Coastguard WorkerAC_DEFUN([CURL_CHECK_COMPILER_SYMBOL_HIDING], [
1371*6236dae4SAndroid Build Coastguard Worker  AC_REQUIRE([CURL_CHECK_COMPILER])dnl
1372*6236dae4SAndroid Build Coastguard Worker  AC_BEFORE([$0],[CURL_CONFIGURE_SYMBOL_HIDING])dnl
1373*6236dae4SAndroid Build Coastguard Worker  AC_MSG_CHECKING([if compiler supports hiding library internal symbols])
1374*6236dae4SAndroid Build Coastguard Worker  supports_symbol_hiding="no"
1375*6236dae4SAndroid Build Coastguard Worker  symbol_hiding_CFLAGS=""
1376*6236dae4SAndroid Build Coastguard Worker  symbol_hiding_EXTERN=""
1377*6236dae4SAndroid Build Coastguard Worker  tmp_CFLAGS=""
1378*6236dae4SAndroid Build Coastguard Worker  tmp_EXTERN=""
1379*6236dae4SAndroid Build Coastguard Worker  case "$compiler_id" in
1380*6236dae4SAndroid Build Coastguard Worker    CLANG|APPLECLANG)
1381*6236dae4SAndroid Build Coastguard Worker      dnl All versions of clang support -fvisibility=
1382*6236dae4SAndroid Build Coastguard Worker      tmp_EXTERN="__attribute__((__visibility__(\"default\")))"
1383*6236dae4SAndroid Build Coastguard Worker      tmp_CFLAGS="-fvisibility=hidden"
1384*6236dae4SAndroid Build Coastguard Worker      supports_symbol_hiding="yes"
1385*6236dae4SAndroid Build Coastguard Worker      ;;
1386*6236dae4SAndroid Build Coastguard Worker    GNU_C)
1387*6236dae4SAndroid Build Coastguard Worker      dnl Only gcc 3.4 or later
1388*6236dae4SAndroid Build Coastguard Worker      if test "$compiler_num" -ge "304"; then
1389*6236dae4SAndroid Build Coastguard Worker        if $CC --help --verbose 2>/dev/null | grep fvisibility= >/dev/null ; then
1390*6236dae4SAndroid Build Coastguard Worker          tmp_EXTERN="__attribute__((__visibility__(\"default\")))"
1391*6236dae4SAndroid Build Coastguard Worker          tmp_CFLAGS="-fvisibility=hidden"
1392*6236dae4SAndroid Build Coastguard Worker          supports_symbol_hiding="yes"
1393*6236dae4SAndroid Build Coastguard Worker        fi
1394*6236dae4SAndroid Build Coastguard Worker      fi
1395*6236dae4SAndroid Build Coastguard Worker      ;;
1396*6236dae4SAndroid Build Coastguard Worker    INTEL_UNIX_C)
1397*6236dae4SAndroid Build Coastguard Worker      dnl Only icc 9.0 or later
1398*6236dae4SAndroid Build Coastguard Worker      if test "$compiler_num" -ge "900"; then
1399*6236dae4SAndroid Build Coastguard Worker        if $CC --help --verbose 2>&1 | grep fvisibility= > /dev/null ; then
1400*6236dae4SAndroid Build Coastguard Worker          tmp_save_CFLAGS="$CFLAGS"
1401*6236dae4SAndroid Build Coastguard Worker          CFLAGS="$CFLAGS -fvisibility=hidden"
1402*6236dae4SAndroid Build Coastguard Worker          AC_LINK_IFELSE([
1403*6236dae4SAndroid Build Coastguard Worker            AC_LANG_PROGRAM([[
1404*6236dae4SAndroid Build Coastguard Worker              #include <stdio.h>
1405*6236dae4SAndroid Build Coastguard Worker            ]],[[
1406*6236dae4SAndroid Build Coastguard Worker              printf("icc fvisibility bug test");
1407*6236dae4SAndroid Build Coastguard Worker            ]])
1408*6236dae4SAndroid Build Coastguard Worker          ],[
1409*6236dae4SAndroid Build Coastguard Worker            tmp_EXTERN="__attribute__((__visibility__(\"default\")))"
1410*6236dae4SAndroid Build Coastguard Worker            tmp_CFLAGS="-fvisibility=hidden"
1411*6236dae4SAndroid Build Coastguard Worker            supports_symbol_hiding="yes"
1412*6236dae4SAndroid Build Coastguard Worker          ])
1413*6236dae4SAndroid Build Coastguard Worker          CFLAGS="$tmp_save_CFLAGS"
1414*6236dae4SAndroid Build Coastguard Worker        fi
1415*6236dae4SAndroid Build Coastguard Worker      fi
1416*6236dae4SAndroid Build Coastguard Worker      ;;
1417*6236dae4SAndroid Build Coastguard Worker    SUNPRO_C)
1418*6236dae4SAndroid Build Coastguard Worker      if $CC 2>&1 | grep flags >/dev/null && $CC -flags | grep xldscope= >/dev/null ; then
1419*6236dae4SAndroid Build Coastguard Worker        tmp_EXTERN="__global"
1420*6236dae4SAndroid Build Coastguard Worker        tmp_CFLAGS="-xldscope=hidden"
1421*6236dae4SAndroid Build Coastguard Worker        supports_symbol_hiding="yes"
1422*6236dae4SAndroid Build Coastguard Worker      fi
1423*6236dae4SAndroid Build Coastguard Worker      ;;
1424*6236dae4SAndroid Build Coastguard Worker  esac
1425*6236dae4SAndroid Build Coastguard Worker  if test "$supports_symbol_hiding" = "yes"; then
1426*6236dae4SAndroid Build Coastguard Worker    tmp_save_CFLAGS="$CFLAGS"
1427*6236dae4SAndroid Build Coastguard Worker    CFLAGS="$tmp_save_CFLAGS $tmp_CFLAGS"
1428*6236dae4SAndroid Build Coastguard Worker    squeeze CFLAGS
1429*6236dae4SAndroid Build Coastguard Worker    AC_COMPILE_IFELSE([
1430*6236dae4SAndroid Build Coastguard Worker      AC_LANG_PROGRAM([[
1431*6236dae4SAndroid Build Coastguard Worker        $tmp_EXTERN char *dummy(char *buff);
1432*6236dae4SAndroid Build Coastguard Worker        char *dummy(char *buff)
1433*6236dae4SAndroid Build Coastguard Worker        {
1434*6236dae4SAndroid Build Coastguard Worker          if(buff)
1435*6236dae4SAndroid Build Coastguard Worker            return ++buff;
1436*6236dae4SAndroid Build Coastguard Worker          else
1437*6236dae4SAndroid Build Coastguard Worker            return buff;
1438*6236dae4SAndroid Build Coastguard Worker        }
1439*6236dae4SAndroid Build Coastguard Worker      ]],[[
1440*6236dae4SAndroid Build Coastguard Worker        char b[16];
1441*6236dae4SAndroid Build Coastguard Worker        char *r = dummy(&b[0]);
1442*6236dae4SAndroid Build Coastguard Worker        if(r)
1443*6236dae4SAndroid Build Coastguard Worker          return (int)*r;
1444*6236dae4SAndroid Build Coastguard Worker      ]])
1445*6236dae4SAndroid Build Coastguard Worker    ],[
1446*6236dae4SAndroid Build Coastguard Worker      supports_symbol_hiding="yes"
1447*6236dae4SAndroid Build Coastguard Worker      if test -f conftest.err; then
1448*6236dae4SAndroid Build Coastguard Worker        grep 'visibility' conftest.err >/dev/null
1449*6236dae4SAndroid Build Coastguard Worker        if test "$?" -eq "0"; then
1450*6236dae4SAndroid Build Coastguard Worker          supports_symbol_hiding="no"
1451*6236dae4SAndroid Build Coastguard Worker        fi
1452*6236dae4SAndroid Build Coastguard Worker      fi
1453*6236dae4SAndroid Build Coastguard Worker    ],[
1454*6236dae4SAndroid Build Coastguard Worker      supports_symbol_hiding="no"
1455*6236dae4SAndroid Build Coastguard Worker      echo " " >&6
1456*6236dae4SAndroid Build Coastguard Worker      sed 's/^/cc-src: /' conftest.$ac_ext >&6
1457*6236dae4SAndroid Build Coastguard Worker      sed 's/^/cc-err: /' conftest.err >&6
1458*6236dae4SAndroid Build Coastguard Worker      echo " " >&6
1459*6236dae4SAndroid Build Coastguard Worker    ])
1460*6236dae4SAndroid Build Coastguard Worker    CFLAGS="$tmp_save_CFLAGS"
1461*6236dae4SAndroid Build Coastguard Worker  fi
1462*6236dae4SAndroid Build Coastguard Worker  if test "$supports_symbol_hiding" = "yes"; then
1463*6236dae4SAndroid Build Coastguard Worker    AC_MSG_RESULT([yes])
1464*6236dae4SAndroid Build Coastguard Worker    symbol_hiding_CFLAGS="$tmp_CFLAGS"
1465*6236dae4SAndroid Build Coastguard Worker    symbol_hiding_EXTERN="$tmp_EXTERN"
1466*6236dae4SAndroid Build Coastguard Worker  else
1467*6236dae4SAndroid Build Coastguard Worker    AC_MSG_RESULT([no])
1468*6236dae4SAndroid Build Coastguard Worker  fi
1469*6236dae4SAndroid Build Coastguard Worker])
1470*6236dae4SAndroid Build Coastguard Worker
1471*6236dae4SAndroid Build Coastguard Worker
1472*6236dae4SAndroid Build Coastguard Workerdnl CURL_CHECK_COMPILER_PROTOTYPE_MISMATCH
1473*6236dae4SAndroid Build Coastguard Workerdnl -------------------------------------------------
1474*6236dae4SAndroid Build Coastguard Workerdnl Verifies if the compiler actually halts after the
1475*6236dae4SAndroid Build Coastguard Workerdnl compilation phase without generating any object
1476*6236dae4SAndroid Build Coastguard Workerdnl code file, when the source code tries to redefine
1477*6236dae4SAndroid Build Coastguard Workerdnl a prototype which does not match previous one.
1478*6236dae4SAndroid Build Coastguard Worker
1479*6236dae4SAndroid Build Coastguard WorkerAC_DEFUN([CURL_CHECK_COMPILER_PROTOTYPE_MISMATCH], [
1480*6236dae4SAndroid Build Coastguard Worker  AC_REQUIRE([CURL_CHECK_COMPILER_HALT_ON_ERROR])dnl
1481*6236dae4SAndroid Build Coastguard Worker  AC_MSG_CHECKING([if compiler halts on function prototype mismatch])
1482*6236dae4SAndroid Build Coastguard Worker  AC_COMPILE_IFELSE([
1483*6236dae4SAndroid Build Coastguard Worker    AC_LANG_PROGRAM([[
1484*6236dae4SAndroid Build Coastguard Worker      #include <stdlib.h>
1485*6236dae4SAndroid Build Coastguard Worker      int rand(int n);
1486*6236dae4SAndroid Build Coastguard Worker      int rand(int n)
1487*6236dae4SAndroid Build Coastguard Worker      {
1488*6236dae4SAndroid Build Coastguard Worker        if(n)
1489*6236dae4SAndroid Build Coastguard Worker          return ++n;
1490*6236dae4SAndroid Build Coastguard Worker        else
1491*6236dae4SAndroid Build Coastguard Worker          return n;
1492*6236dae4SAndroid Build Coastguard Worker      }
1493*6236dae4SAndroid Build Coastguard Worker    ]],[[
1494*6236dae4SAndroid Build Coastguard Worker      int i[2]={0,0};
1495*6236dae4SAndroid Build Coastguard Worker      int j = rand(i[0]);
1496*6236dae4SAndroid Build Coastguard Worker      if(j)
1497*6236dae4SAndroid Build Coastguard Worker        return j;
1498*6236dae4SAndroid Build Coastguard Worker    ]])
1499*6236dae4SAndroid Build Coastguard Worker  ],[
1500*6236dae4SAndroid Build Coastguard Worker    AC_MSG_RESULT([no])
1501*6236dae4SAndroid Build Coastguard Worker    AC_MSG_ERROR([compiler does not halt on function prototype mismatch.])
1502*6236dae4SAndroid Build Coastguard Worker  ],[
1503*6236dae4SAndroid Build Coastguard Worker    AC_MSG_RESULT([yes])
1504*6236dae4SAndroid Build Coastguard Worker  ])
1505*6236dae4SAndroid Build Coastguard Worker])
1506*6236dae4SAndroid Build Coastguard Worker
1507*6236dae4SAndroid Build Coastguard Worker
1508*6236dae4SAndroid Build Coastguard Workerdnl CURL_VAR_MATCH (VARNAME, VALUE)
1509*6236dae4SAndroid Build Coastguard Workerdnl -------------------------------------------------
1510*6236dae4SAndroid Build Coastguard Workerdnl Verifies if shell variable VARNAME contains VALUE.
1511*6236dae4SAndroid Build Coastguard Workerdnl Contents of variable VARNAME and VALUE are handled
1512*6236dae4SAndroid Build Coastguard Workerdnl as whitespace separated lists of words. If at least
1513*6236dae4SAndroid Build Coastguard Workerdnl one word of VALUE is present in VARNAME the match
1514*6236dae4SAndroid Build Coastguard Workerdnl is considered positive, otherwise false.
1515*6236dae4SAndroid Build Coastguard Worker
1516*6236dae4SAndroid Build Coastguard WorkerAC_DEFUN([CURL_VAR_MATCH], [
1517*6236dae4SAndroid Build Coastguard Worker  ac_var_match_word="no"
1518*6236dae4SAndroid Build Coastguard Worker  for word1 in $[$1]; do
1519*6236dae4SAndroid Build Coastguard Worker    for word2 in [$2]; do
1520*6236dae4SAndroid Build Coastguard Worker      if test "$word1" = "$word2"; then
1521*6236dae4SAndroid Build Coastguard Worker        ac_var_match_word="yes"
1522*6236dae4SAndroid Build Coastguard Worker      fi
1523*6236dae4SAndroid Build Coastguard Worker    done
1524*6236dae4SAndroid Build Coastguard Worker  done
1525*6236dae4SAndroid Build Coastguard Worker])
1526*6236dae4SAndroid Build Coastguard Worker
1527*6236dae4SAndroid Build Coastguard Worker
1528*6236dae4SAndroid Build Coastguard Workerdnl CURL_VAR_MATCH_IFELSE (VARNAME, VALUE,
1529*6236dae4SAndroid Build Coastguard Workerdnl                        [ACTION-IF-MATCH], [ACTION-IF-NOT-MATCH])
1530*6236dae4SAndroid Build Coastguard Workerdnl -------------------------------------------------
1531*6236dae4SAndroid Build Coastguard Workerdnl This performs a CURL_VAR_MATCH check and executes
1532*6236dae4SAndroid Build Coastguard Workerdnl first branch if the match is positive, otherwise
1533*6236dae4SAndroid Build Coastguard Workerdnl the second branch is executed.
1534*6236dae4SAndroid Build Coastguard Worker
1535*6236dae4SAndroid Build Coastguard WorkerAC_DEFUN([CURL_VAR_MATCH_IFELSE], [
1536*6236dae4SAndroid Build Coastguard Worker  CURL_VAR_MATCH([$1],[$2])
1537*6236dae4SAndroid Build Coastguard Worker  if test "$ac_var_match_word" = "yes"; then
1538*6236dae4SAndroid Build Coastguard Worker  ifelse($3,,:,[$3])
1539*6236dae4SAndroid Build Coastguard Worker  ifelse($4,,,[else
1540*6236dae4SAndroid Build Coastguard Worker    $4])
1541*6236dae4SAndroid Build Coastguard Worker  fi
1542*6236dae4SAndroid Build Coastguard Worker])
1543*6236dae4SAndroid Build Coastguard Worker
1544*6236dae4SAndroid Build Coastguard Worker
1545*6236dae4SAndroid Build Coastguard Workerdnl CURL_VAR_STRIP (VARNAME, VALUE)
1546*6236dae4SAndroid Build Coastguard Workerdnl -------------------------------------------------
1547*6236dae4SAndroid Build Coastguard Workerdnl Contents of variable VARNAME and VALUE are handled
1548*6236dae4SAndroid Build Coastguard Workerdnl as whitespace separated lists of words. Each word
1549*6236dae4SAndroid Build Coastguard Workerdnl from VALUE is removed from VARNAME when present.
1550*6236dae4SAndroid Build Coastguard Worker
1551*6236dae4SAndroid Build Coastguard WorkerAC_DEFUN([CURL_VAR_STRIP], [
1552*6236dae4SAndroid Build Coastguard Worker  AC_REQUIRE([CURL_SHFUNC_SQUEEZE])dnl
1553*6236dae4SAndroid Build Coastguard Worker  ac_var_stripped=""
1554*6236dae4SAndroid Build Coastguard Worker  for word1 in $[$1]; do
1555*6236dae4SAndroid Build Coastguard Worker    ac_var_strip_word="no"
1556*6236dae4SAndroid Build Coastguard Worker    for word2 in [$2]; do
1557*6236dae4SAndroid Build Coastguard Worker      if test "$word1" = "$word2"; then
1558*6236dae4SAndroid Build Coastguard Worker        ac_var_strip_word="yes"
1559*6236dae4SAndroid Build Coastguard Worker      fi
1560*6236dae4SAndroid Build Coastguard Worker    done
1561*6236dae4SAndroid Build Coastguard Worker    if test "$ac_var_strip_word" = "no"; then
1562*6236dae4SAndroid Build Coastguard Worker      ac_var_stripped="$ac_var_stripped $word1"
1563*6236dae4SAndroid Build Coastguard Worker    fi
1564*6236dae4SAndroid Build Coastguard Worker  done
1565*6236dae4SAndroid Build Coastguard Worker  dnl squeeze whitespace out of result
1566*6236dae4SAndroid Build Coastguard Worker  [$1]="$ac_var_stripped"
1567*6236dae4SAndroid Build Coastguard Worker  squeeze [$1]
1568*6236dae4SAndroid Build Coastguard Worker])
1569*6236dae4SAndroid Build Coastguard Worker
1570*6236dae4SAndroid Build Coastguard Workerdnl CURL_ADD_COMPILER_WARNINGS (WARNING-LIST, NEW-WARNINGS)
1571*6236dae4SAndroid Build Coastguard Workerdnl -------------------------------------------------------
1572*6236dae4SAndroid Build Coastguard Workerdnl Contents of variable WARNING-LIST and NEW-WARNINGS are
1573*6236dae4SAndroid Build Coastguard Workerdnl handled as whitespace separated lists of words.
1574*6236dae4SAndroid Build Coastguard Workerdnl Add each compiler warning from NEW-WARNINGS that has not
1575*6236dae4SAndroid Build Coastguard Workerdnl been disabled via CFLAGS to WARNING-LIST.
1576*6236dae4SAndroid Build Coastguard Worker
1577*6236dae4SAndroid Build Coastguard WorkerAC_DEFUN([CURL_ADD_COMPILER_WARNINGS], [
1578*6236dae4SAndroid Build Coastguard Worker  AC_REQUIRE([CURL_SHFUNC_SQUEEZE])dnl
1579*6236dae4SAndroid Build Coastguard Worker  ac_var_added_warnings=""
1580*6236dae4SAndroid Build Coastguard Worker  for warning in [$2]; do
1581*6236dae4SAndroid Build Coastguard Worker    CURL_VAR_MATCH(CFLAGS, [-Wno-$warning -W$warning])
1582*6236dae4SAndroid Build Coastguard Worker    if test "$ac_var_match_word" = "no"; then
1583*6236dae4SAndroid Build Coastguard Worker      ac_var_added_warnings="$ac_var_added_warnings -W$warning"
1584*6236dae4SAndroid Build Coastguard Worker    fi
1585*6236dae4SAndroid Build Coastguard Worker  done
1586*6236dae4SAndroid Build Coastguard Worker  dnl squeeze whitespace out of result
1587*6236dae4SAndroid Build Coastguard Worker  [$1]="$[$1] $ac_var_added_warnings"
1588*6236dae4SAndroid Build Coastguard Worker  squeeze [$1]
1589*6236dae4SAndroid Build Coastguard Worker])
1590