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