smtp: use the upload buffer size for scratch buffer malloc
[platform/upstream/curl.git] / m4 / curl-compilers.m4
index d25cba6..422946e 100644 (file)
@@ -5,11 +5,11 @@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
 #
 # This software is licensed as described in the file COPYING, which
 # you should have received as part of this distribution. The terms
-# are also available at http://curl.haxx.se/docs/copyright.html.
+# are also available at https://curl.haxx.se/docs/copyright.html.
 #
 # You may opt to use, copy, modify, merge, publish, distribute and/or sell
 # copies of the Software, and permit persons to whom the Software is
 # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 # KIND, either express or implied.
 #
-# $Id$
 #***************************************************************************
 
 # File version for 'aclocal' use. Keep it a single number.
-# serial 23
+# serial 67
 
 
 dnl CURL_CHECK_COMPILER
@@ -41,16 +40,20 @@ AC_DEFUN([CURL_CHECK_COMPILER], [
   flags_opt_yes="unknown"
   flags_opt_off="unknown"
   #
-  CURL_CHECK_COMPILER_DEC
-  CURL_CHECK_COMPILER_HP
-  CURL_CHECK_COMPILER_IBM
-  CURL_CHECK_COMPILER_INTEL
-  CURL_CHECK_COMPILER_GNU
+  flags_prefer_cppflags="no"
+  #
+  CURL_CHECK_COMPILER_DEC_C
+  CURL_CHECK_COMPILER_HPUX_C
+  CURL_CHECK_COMPILER_IBM_C
+  CURL_CHECK_COMPILER_INTEL_C
+  CURL_CHECK_COMPILER_CLANG
+  CURL_CHECK_COMPILER_GNU_C
   CURL_CHECK_COMPILER_LCC
-  CURL_CHECK_COMPILER_SGI_MIPSpro_C
+  CURL_CHECK_COMPILER_SGI_MIPSPRO_C
   CURL_CHECK_COMPILER_SGI_MIPS_C
-  CURL_CHECK_COMPILER_SUN
-  CURL_CHECK_COMPILER_TINYC
+  CURL_CHECK_COMPILER_SUNPRO_C
+  CURL_CHECK_COMPILER_TINY_C
+  CURL_CHECK_COMPILER_WATCOM_C
   #
   if test "$compiler_id" = "unknown"; then
   cat <<_EOF 1>&2
@@ -61,30 +64,73 @@ AC_DEFUN([CURL_CHECK_COMPILER], [
 ***
 *** Whatever settings are present in CFLAGS will be used for this run.
 ***
-*** If you wish to help the cURL project to better support your compiler
+*** If you wish to help the curl project to better support your compiler
 *** you can report this and the required info on the libcurl development
-*** mailing list: http://cool.haxx.se/mailman/listinfo/curl-library/
+*** mailing list: https://cool.haxx.se/mailman/listinfo/curl-library/
 ***
 _EOF
   fi
 ])
 
 
-dnl CURL_CHECK_COMPILER_DEC
+dnl CURL_CHECK_COMPILER_CLANG
 dnl -------------------------------------------------
-dnl Verify if the C compiler being used is DEC's.
+dnl Verify if compiler being used is clang.
 
-AC_DEFUN([CURL_CHECK_COMPILER_DEC], [
-  AC_MSG_CHECKING([whether we are using the DEC/Compaq C compiler])
+AC_DEFUN([CURL_CHECK_COMPILER_CLANG], [
+  AC_BEFORE([$0],[CURL_CHECK_COMPILER_GNU_C])dnl
+  AC_MSG_CHECKING([if compiler is clang])
+  CURL_CHECK_DEF([__clang__], [], [silent])
+  if test "$curl_cv_have_def___clang__" = "yes"; then
+    AC_MSG_RESULT([yes])
+    compiler_id="CLANG"
+    fullclangver=`$CC -v 2>&1 | grep version`
+    clangver=`echo $fullclangver | grep "based on LLVM " | "$SED" 's/.*(based on LLVM \(@<:@0-9@:>@*\.@<:@0-9@:>@*\).*)/\1/'`
+    if test -z "$clangver"; then
+      if echo $fullclangver | grep "Apple LLVM version " >/dev/null; then
+        dnl Starting with XCode 7 / clang 3.7, Apple clang won't tell its upstream version
+        clangver="3.7"
+      else
+        clangver=`echo $fullclangver | "$SED" 's/.*version \(@<:@0-9@:>@*\.@<:@0-9@:>@*\).*/\1/'`
+      fi
+    fi
+    clangvhi=`echo $clangver | cut -d . -f1`
+    clangvlo=`echo $clangver | cut -d . -f2`
+    compiler_num=`(expr $clangvhi "*" 100 + $clangvlo) 2>/dev/null`
+    flags_dbg_all="-g -g0 -g1 -g2 -g3"
+    flags_dbg_all="$flags_dbg_all -ggdb"
+    flags_dbg_all="$flags_dbg_all -gstabs"
+    flags_dbg_all="$flags_dbg_all -gstabs+"
+    flags_dbg_all="$flags_dbg_all -gcoff"
+    flags_dbg_all="$flags_dbg_all -gxcoff"
+    flags_dbg_all="$flags_dbg_all -gdwarf-2"
+    flags_dbg_all="$flags_dbg_all -gvms"
+    flags_dbg_yes="-g"
+    flags_dbg_off=""
+    flags_opt_all="-O -O0 -O1 -O2 -Os -O3 -O4"
+    flags_opt_yes="-Os"
+    flags_opt_off="-O0"
+  else
+    AC_MSG_RESULT([no])
+  fi
+])
+
+
+dnl CURL_CHECK_COMPILER_DEC_C
+dnl -------------------------------------------------
+dnl Verify if compiler being used is DEC C.
+
+AC_DEFUN([CURL_CHECK_COMPILER_DEC_C], [
+  AC_MSG_CHECKING([if compiler is DEC/Compaq/HP C])
   CURL_CHECK_DEF([__DECC], [], [silent])
   CURL_CHECK_DEF([__DECC_VER], [], [silent])
   if test "$curl_cv_have_def___DECC" = "yes" &&
     test "$curl_cv_have_def___DECC_VER" = "yes"; then
     AC_MSG_RESULT([yes])
-    compiler_id="DECC"
+    compiler_id="DEC_C"
     flags_dbg_all="-g -g0 -g1 -g2 -g3"
     flags_dbg_yes="-g2"
-    flags_dbg_off="-g0"
+    flags_dbg_off=""
     flags_opt_all="-O -O0 -O1 -O2 -O3 -O4"
     flags_opt_yes="-O1"
     flags_opt_off="-O0"
@@ -94,19 +140,19 @@ AC_DEFUN([CURL_CHECK_COMPILER_DEC], [
 ])
 
 
-dnl CURL_CHECK_COMPILER_GNU
+dnl CURL_CHECK_COMPILER_GNU_C
 dnl -------------------------------------------------
-dnl Verify if the C compiler being used is GNU's.
+dnl Verify if compiler being used is GNU C.
 
-AC_DEFUN([CURL_CHECK_COMPILER_GNU], [
-  AC_REQUIRE([CURL_CHECK_COMPILER_INTEL])dnl
-  #
-  AC_MSG_CHECKING([whether we are using the GNU C compiler])
+AC_DEFUN([CURL_CHECK_COMPILER_GNU_C], [
+  AC_REQUIRE([CURL_CHECK_COMPILER_INTEL_C])dnl
+  AC_REQUIRE([CURL_CHECK_COMPILER_CLANG])dnl
+  AC_MSG_CHECKING([if compiler is GNU C])
   CURL_CHECK_DEF([__GNUC__], [], [silent])
   if test "$curl_cv_have_def___GNUC__" = "yes" &&
     test "$compiler_id" = "unknown"; then
     AC_MSG_RESULT([yes])
-    compiler_id="GNUC"
+    compiler_id="GNU_C"
     gccver=`$CC -dumpversion`
     gccvhi=`echo $gccver | cut -d . -f1`
     gccvlo=`echo $gccver | cut -d . -f2`
@@ -120,26 +166,27 @@ AC_DEFUN([CURL_CHECK_COMPILER_GNU], [
     flags_dbg_all="$flags_dbg_all -gdwarf-2"
     flags_dbg_all="$flags_dbg_all -gvms"
     flags_dbg_yes="-g"
-    flags_dbg_off="-g0"
-    flags_opt_all="-O -O0 -O1 -O2 -O3 -Os"
+    flags_dbg_off=""
+    flags_opt_all="-O -O0 -O1 -O2 -O3 -Os -Og -Ofast"
     flags_opt_yes="-O2"
     flags_opt_off="-O0"
+    CURL_CHECK_DEF([_WIN32], [], [silent])
   else
     AC_MSG_RESULT([no])
   fi
 ])
 
 
-dnl CURL_CHECK_COMPILER_HP
+dnl CURL_CHECK_COMPILER_HPUX_C
 dnl -------------------------------------------------
-dnl Verify if the C compiler being used is HP's.
+dnl Verify if compiler being used is HP-UX C.
 
-AC_DEFUN([CURL_CHECK_COMPILER_HP], [
-  AC_MSG_CHECKING([whether we are using the HP C compiler])
+AC_DEFUN([CURL_CHECK_COMPILER_HPUX_C], [
+  AC_MSG_CHECKING([if compiler is HP-UX C])
   CURL_CHECK_DEF([__HP_cc], [], [silent])
   if test "$curl_cv_have_def___HP_cc" = "yes"; then
     AC_MSG_RESULT([yes])
-    compiler_id="HPUXC"
+    compiler_id="HP_UX_C"
     flags_dbg_all="-g -s"
     flags_dbg_yes="-g"
     flags_dbg_off="-s"
@@ -152,16 +199,16 @@ AC_DEFUN([CURL_CHECK_COMPILER_HP], [
 ])
 
 
-dnl CURL_CHECK_COMPILER_IBM
+dnl CURL_CHECK_COMPILER_IBM_C
 dnl -------------------------------------------------
-dnl Verify if the C compiler being used is IBM's.
+dnl Verify if compiler being used is IBM C.
 
-AC_DEFUN([CURL_CHECK_COMPILER_IBM], [
-  AC_MSG_CHECKING([whether we are using the IBM C compiler])
+AC_DEFUN([CURL_CHECK_COMPILER_IBM_C], [
+  AC_MSG_CHECKING([if compiler is IBM C])
   CURL_CHECK_DEF([__IBMC__], [], [silent])
   if test "$curl_cv_have_def___IBMC__" = "yes"; then
     AC_MSG_RESULT([yes])
-    compiler_id="IBMC"
+    compiler_id="IBM_C"
     flags_dbg_all="-g -g0 -g1 -g2 -g3"
     flags_dbg_yes="-g"
     flags_dbg_off=""
@@ -175,33 +222,35 @@ AC_DEFUN([CURL_CHECK_COMPILER_IBM], [
     flags_opt_all="$flags_opt_all -qoptimize=5"
     flags_opt_yes="-O2"
     flags_opt_off="-qnooptimize"
+    flags_prefer_cppflags="yes"
   else
     AC_MSG_RESULT([no])
   fi
 ])
 
 
-dnl CURL_CHECK_COMPILER_INTEL
+dnl CURL_CHECK_COMPILER_INTEL_C
 dnl -------------------------------------------------
-dnl Verify if the C compiler being used is Intel's.
+dnl Verify if compiler being used is Intel C.
 
-AC_DEFUN([CURL_CHECK_COMPILER_INTEL], [
-  AC_BEFORE([$0],[CURL_CHECK_COMPILER_GNU])dnl
-  AC_MSG_CHECKING([whether we are using the Intel C compiler])
+AC_DEFUN([CURL_CHECK_COMPILER_INTEL_C], [
+  AC_BEFORE([$0],[CURL_CHECK_COMPILER_GNU_C])dnl
+  AC_MSG_CHECKING([if compiler is Intel C])
   CURL_CHECK_DEF([__INTEL_COMPILER], [], [silent])
   if test "$curl_cv_have_def___INTEL_COMPILER" = "yes"; then
     AC_MSG_RESULT([yes])
+    compiler_num="$curl_cv_def___INTEL_COMPILER"
     CURL_CHECK_DEF([__unix__], [], [silent])
     if test "$curl_cv_have_def___unix__" = "yes"; then
-      compiler_id="ICC_unix"
+      compiler_id="INTEL_UNIX_C"
       flags_dbg_all="-g -g0"
       flags_dbg_yes="-g"
-      flags_dbg_off="-g0"
+      flags_dbg_off=""
       flags_opt_all="-O -O0 -O1 -O2 -O3 -Os"
       flags_opt_yes="-O2"
       flags_opt_off="-O0"
     else
-      compiler_id="ICC_windows"
+      compiler_id="INTEL_WINDOWS_C"
       flags_dbg_all="/ZI /Zi /zI /zi /ZD /Zd /zD /zd /Z7 /z7 /Oy /Oy-"
       flags_dbg_all="$flags_dbg_all /debug"
       flags_dbg_all="$flags_dbg_all /debug:none"
@@ -216,7 +265,6 @@ AC_DEFUN([CURL_CHECK_COMPILER_INTEL], [
       flags_opt_yes="/O2"
       flags_opt_off="/Od"
     fi
-    compiler_num="$curl_cv_def___INTEL_COMPILER"
   else
     AC_MSG_RESULT([no])
   fi
@@ -225,10 +273,10 @@ AC_DEFUN([CURL_CHECK_COMPILER_INTEL], [
 
 dnl CURL_CHECK_COMPILER_LCC
 dnl -------------------------------------------------
-dnl Verify if the C compiler being used is LCC.
+dnl Verify if compiler being used is LCC.
 
 AC_DEFUN([CURL_CHECK_COMPILER_LCC], [
-  AC_MSG_CHECKING([whether we are using the LCC C compiler])
+  AC_MSG_CHECKING([if compiler is LCC])
   CURL_CHECK_DEF([__LCC__], [], [silent])
   if test "$curl_cv_have_def___LCC__" = "yes"; then
     AC_MSG_RESULT([yes])
@@ -247,10 +295,10 @@ AC_DEFUN([CURL_CHECK_COMPILER_LCC], [
 
 dnl CURL_CHECK_COMPILER_SGI_MIPS_C
 dnl -------------------------------------------------
-dnl Verify if the C compiler being used is SGI's.
+dnl Verify if compiler being used is SGI MIPS C.
 
 AC_DEFUN([CURL_CHECK_COMPILER_SGI_MIPS_C], [
-  AC_REQUIRE([CURL_CHECK_COMPILER_SGI_MIPSpro_C])dnl
+  AC_REQUIRE([CURL_CHECK_COMPILER_SGI_MIPSPRO_C])dnl
   AC_MSG_CHECKING([if compiler is SGI MIPS C])
   CURL_CHECK_DEF([__GNUC__], [], [silent])
   CURL_CHECK_DEF([__sgi], [], [silent])
@@ -261,7 +309,7 @@ AC_DEFUN([CURL_CHECK_COMPILER_SGI_MIPS_C], [
     compiler_id="SGI_MIPS_C"
     flags_dbg_all="-g -g0 -g1 -g2 -g3"
     flags_dbg_yes="-g"
-    flags_dbg_off="-g0"
+    flags_dbg_off=""
     flags_opt_all="-O -O0 -O1 -O2 -O3 -Ofast"
     flags_opt_yes="-O2"
     flags_opt_off="-O0"
@@ -271,11 +319,11 @@ AC_DEFUN([CURL_CHECK_COMPILER_SGI_MIPS_C], [
 ])
 
 
-dnl CURL_CHECK_COMPILER_SGI_MIPSpro_C
+dnl CURL_CHECK_COMPILER_SGI_MIPSPRO_C
 dnl -------------------------------------------------
-dnl Verify if the C compiler being used is SGI's.
+dnl Verify if compiler being used is SGI MIPSpro C.
 
-AC_DEFUN([CURL_CHECK_COMPILER_SGI_MIPSpro_C], [
+AC_DEFUN([CURL_CHECK_COMPILER_SGI_MIPSPRO_C], [
   AC_BEFORE([$0],[CURL_CHECK_COMPILER_SGI_MIPS_C])dnl
   AC_MSG_CHECKING([if compiler is SGI MIPSpro C])
   CURL_CHECK_DEF([__GNUC__], [], [silent])
@@ -285,10 +333,10 @@ AC_DEFUN([CURL_CHECK_COMPILER_SGI_MIPSpro_C], [
     (test "$curl_cv_have_def__SGI_COMPILER_VERSION" = "yes" ||
      test "$curl_cv_have_def__COMPILER_VERSION" = "yes"); then
     AC_MSG_RESULT([yes])
-    compiler_id="SGI_MIPSpro_C"
+    compiler_id="SGI_MIPSPRO_C"
     flags_dbg_all="-g -g0 -g1 -g2 -g3"
     flags_dbg_yes="-g"
-    flags_dbg_off="-g0"
+    flags_dbg_off=""
     flags_opt_all="-O -O0 -O1 -O2 -O3 -Ofast"
     flags_opt_yes="-O2"
     flags_opt_off="-O0"
@@ -298,16 +346,16 @@ AC_DEFUN([CURL_CHECK_COMPILER_SGI_MIPSpro_C], [
 ])
 
 
-dnl CURL_CHECK_COMPILER_SUN
+dnl CURL_CHECK_COMPILER_SUNPRO_C
 dnl -------------------------------------------------
-dnl Verify if the C compiler being used is SUN's.
+dnl Verify if compiler being used is SunPro C.
 
-AC_DEFUN([CURL_CHECK_COMPILER_SUN], [
-  AC_MSG_CHECKING([whether we are using the SUN C compiler])
+AC_DEFUN([CURL_CHECK_COMPILER_SUNPRO_C], [
+  AC_MSG_CHECKING([if compiler is SunPro C])
   CURL_CHECK_DEF([__SUNPRO_C], [], [silent])
   if test "$curl_cv_have_def___SUNPRO_C" = "yes"; then
     AC_MSG_RESULT([yes])
-    compiler_id="SUNC"
+    compiler_id="SUNPRO_C"
     flags_dbg_all="-g -s"
     flags_dbg_yes="-g"
     flags_dbg_off="-s"
@@ -320,18 +368,18 @@ AC_DEFUN([CURL_CHECK_COMPILER_SUN], [
 ])
 
 
-dnl CURL_CHECK_COMPILER_TINYC
+dnl CURL_CHECK_COMPILER_TINY_C
 dnl -------------------------------------------------
-dnl Verify if the C compiler being used is TINYC.
+dnl Verify if compiler being used is Tiny C.
 
-AC_DEFUN([CURL_CHECK_COMPILER_TINYC], [
-  AC_MSG_CHECKING([whether we are using the TinyCC C compiler])
+AC_DEFUN([CURL_CHECK_COMPILER_TINY_C], [
+  AC_MSG_CHECKING([if compiler is Tiny C])
   CURL_CHECK_DEF([__TINYC__], [], [silent])
   if test "$curl_cv_have_def___TINYC__" = "yes"; then
     AC_MSG_RESULT([yes])
-    compiler_id="TINYC"
+    compiler_id="TINY_C"
     flags_dbg_all="-g -b"
-    flags_dbg_yes="-g -b"
+    flags_dbg_yes="-g"
     flags_dbg_off=""
     flags_opt_all=""
     flags_opt_yes=""
@@ -342,42 +390,82 @@ AC_DEFUN([CURL_CHECK_COMPILER_TINYC], [
 ])
 
 
+dnl CURL_CHECK_COMPILER_WATCOM_C
+dnl -------------------------------------------------
+dnl Verify if compiler being used is Watcom C.
+
+AC_DEFUN([CURL_CHECK_COMPILER_WATCOM_C], [
+  AC_MSG_CHECKING([if compiler is Watcom C])
+  CURL_CHECK_DEF([__WATCOMC__], [], [silent])
+  if test "$curl_cv_have_def___WATCOMC__" = "yes"; then
+    AC_MSG_RESULT([yes])
+    CURL_CHECK_DEF([__UNIX__], [], [silent])
+    if test "$curl_cv_have_def___UNIX__" = "yes"; then
+      compiler_id="WATCOM_UNIX_C"
+      flags_dbg_all="-g1 -g1+ -g2 -g3"
+      flags_dbg_yes="-g2"
+      flags_dbg_off=""
+      flags_opt_all="-O0 -O1 -O2 -O3"
+      flags_opt_yes="-O2"
+      flags_opt_off="-O0"
+    else
+      compiler_id="WATCOM_WINDOWS_C"
+      flags_dbg_all=""
+      flags_dbg_yes=""
+      flags_dbg_off=""
+      flags_opt_all=""
+      flags_opt_yes=""
+      flags_opt_off=""
+    fi
+  else
+    AC_MSG_RESULT([no])
+  fi
+])
+
+
 dnl CURL_CONVERT_INCLUDE_TO_ISYSTEM
 dnl -------------------------------------------------
 dnl Changes standard include paths present in CFLAGS
 dnl and CPPFLAGS into isystem include paths. This is
 dnl done to prevent GNUC from generating warnings on
-dnl headers from these locations, even though this is
-dnl not reliable on ancient GNUC versions.
+dnl headers from these locations, although on ancient
+dnl GNUC versions these warnings are not silenced.
 
 AC_DEFUN([CURL_CONVERT_INCLUDE_TO_ISYSTEM], [
-  tmp_has_include="no"
-  tmp_chg_FLAGS=$CFLAGS
-  for word1 in $tmp_chg_FLAGS; do
-    case "$word1" in
-      -I*)
-        tmp_has_include="yes"
-        ;;
-    esac
-  done
-  if test "$tmp_has_include" = "yes"; then
-    tmp_chg_FLAGS=`echo $tmp_chg_FLAGS | sed 's/^-I/ -isystem /g'`
-    tmp_chg_FLAGS=`echo $tmp_chg_FLAGS | sed 's/ -I/ -isystem /g'`
-    CFLAGS=`eval echo $tmp_chg_FLAGS`
-  fi
-  tmp_has_include="no"
-  tmp_chg_FLAGS=$CPPFLAGS
-  for word1 in $tmp_chg_FLAGS; do
-    case "$word1" in
-      -I*)
-        tmp_has_include="yes"
-        ;;
-    esac
-  done
-  if test "$tmp_has_include" = "yes"; then
-    tmp_chg_FLAGS=`echo $tmp_chg_FLAGS | sed 's/^-I/ -isystem /g'`
-    tmp_chg_FLAGS=`echo $tmp_chg_FLAGS | sed 's/ -I/ -isystem /g'`
-    CPPFLAGS=`eval echo $tmp_chg_FLAGS`
+  AC_REQUIRE([CURL_SHFUNC_SQUEEZE])dnl
+  AC_REQUIRE([CURL_CHECK_COMPILER])dnl
+  if test "$compiler_id" = "GNU_C" ||
+    test "$compiler_id" = "CLANG"; then
+    tmp_has_include="no"
+    tmp_chg_FLAGS="$CFLAGS"
+    for word1 in $tmp_chg_FLAGS; do
+      case "$word1" in
+        -I*)
+          tmp_has_include="yes"
+          ;;
+      esac
+    done
+    if test "$tmp_has_include" = "yes"; then
+      tmp_chg_FLAGS=`echo "$tmp_chg_FLAGS" | "$SED" 's/^-I/ -isystem /g'`
+      tmp_chg_FLAGS=`echo "$tmp_chg_FLAGS" | "$SED" 's/ -I/ -isystem /g'`
+      CFLAGS="$tmp_chg_FLAGS"
+      squeeze CFLAGS
+    fi
+    tmp_has_include="no"
+    tmp_chg_FLAGS="$CPPFLAGS"
+    for word1 in $tmp_chg_FLAGS; do
+      case "$word1" in
+        -I*)
+          tmp_has_include="yes"
+          ;;
+      esac
+    done
+    if test "$tmp_has_include" = "yes"; then
+      tmp_chg_FLAGS=`echo "$tmp_chg_FLAGS" | "$SED" 's/^-I/ -isystem /g'`
+      tmp_chg_FLAGS=`echo "$tmp_chg_FLAGS" | "$SED" 's/ -I/ -isystem /g'`
+      CPPFLAGS="$tmp_chg_FLAGS"
+      squeeze CPPFLAGS
+    fi
   fi
 ])
 
@@ -402,7 +490,7 @@ AC_DEFUN([CURL_COMPILER_WORKS_IFELSE], [
   ],[
     tmp_compiler_works="no"
     echo " " >&6
-    sed 's/^/cc-fail> /' conftest.err >&6
+    sed 's/^/cc-fail: /' conftest.err >&6
     echo " " >&6
   ])
   dnl linking capability verification
@@ -418,7 +506,7 @@ AC_DEFUN([CURL_COMPILER_WORKS_IFELSE], [
     ],[
       tmp_compiler_works="no"
       echo " " >&6
-      sed 's/^/ln-fail> /' conftest.err >&6
+      sed 's/^/link-fail: /' conftest.err >&6
       echo " " >&6
     ])
   fi
@@ -439,7 +527,7 @@ AC_DEFUN([CURL_COMPILER_WORKS_IFELSE], [
     ],[
       tmp_compiler_works="no"
       echo " " >&6
-      echo "rn-fail test program exited with status $ac_status" >&6
+      echo "run-fail: test program exited with status $ac_status" >&6
       echo " " >&6
     ])
   fi
@@ -460,10 +548,12 @@ dnl options.
 
 AC_DEFUN([CURL_SET_COMPILER_BASIC_OPTS], [
   AC_REQUIRE([CURL_CHECK_COMPILER])dnl
+  AC_REQUIRE([CURL_SHFUNC_SQUEEZE])dnl
   #
   if test "$compiler_id" != "unknown"; then
     #
-    if test "$compiler_id" = "GNUC"; then
+    if test "$compiler_id" = "GNU_C" ||
+      test "$compiler_id" = "CLANG"; then
       CURL_CONVERT_INCLUDE_TO_ISYSTEM
     fi
     #
@@ -474,7 +564,15 @@ AC_DEFUN([CURL_SET_COMPILER_BASIC_OPTS], [
     #
     case "$compiler_id" in
         #
-      DECC)
+      CLANG)
+        #
+        dnl Disable warnings for unused arguments, otherwise clang will
+        dnl warn about compile-time arguments used during link-time, like
+        dnl -O and -g and -pedantic.
+        tmp_CFLAGS="$tmp_CFLAGS -Qunused-arguments"
+        ;;
+        #
+      DEC_C)
         #
         dnl Select strict ANSI C compiler mode
         tmp_CFLAGS="$tmp_CFLAGS -std1"
@@ -486,13 +584,16 @@ AC_DEFUN([CURL_SET_COMPILER_BASIC_OPTS], [
         tmp_CFLAGS="$tmp_CFLAGS -msg_fatal toofewargs,toomanyargs"
         ;;
         #
-      GNUC)
+      GNU_C)
         #
-        dnl Placeholder
-        tmp_CFLAGS="$tmp_CFLAGS"
+        dnl turn implicit-function-declaration warning into error,
+        dnl at least gcc 2.95 and later support this
+        if test "$compiler_num" -ge "295"; then
+          tmp_CFLAGS="$tmp_CFLAGS -Werror-implicit-function-declaration"
+        fi
         ;;
         #
-      HPUXC)
+      HP_UX_C)
         #
         dnl Disallow run-time dereferencing of null pointers
         tmp_CFLAGS="$tmp_CFLAGS -z"
@@ -502,43 +603,39 @@ AC_DEFUN([CURL_SET_COMPILER_BASIC_OPTS], [
         tmp_CFLAGS="$tmp_CFLAGS +W 4227,4255"
         ;;
         #
-      IBMC)
+      IBM_C)
         #
         dnl Ensure that compiler optimizations are always thread-safe.
-        tmp_CFLAGS="$tmp_CFLAGS -qthreaded"
+        tmp_CPPFLAGS="$tmp_CPPFLAGS -qthreaded"
         dnl Disable type based strict aliasing optimizations, using worst
         dnl case aliasing assumptions when compiling. Type based aliasing
         dnl would restrict the lvalues that could be safely used to access
         dnl a data object.
-        tmp_CFLAGS="$tmp_CFLAGS -qnoansialias"
+        tmp_CPPFLAGS="$tmp_CPPFLAGS -qnoansialias"
         dnl Force compiler to stop after the compilation phase, without
         dnl generating an object code file when compilation has errors.
-        tmp_CFLAGS="$tmp_CFLAGS -qhalt=e"
+        tmp_CPPFLAGS="$tmp_CPPFLAGS -qhalt=e"
         ;;
         #
-      ICC_unix)
+      INTEL_UNIX_C)
         #
         dnl On unix this compiler uses gcc's header files, so
         dnl we select ANSI C89 dialect plus GNU extensions.
-        tmp_CPPFLAGS="$tmp_CPPFLAGS -std=gnu89"
+        tmp_CFLAGS="$tmp_CFLAGS -std=gnu89"
         dnl Change some warnings into errors
         dnl #140: too many arguments in function call
         dnl #147: declaration is incompatible with 'previous one'
         dnl #165: too few arguments in function call
         dnl #266: function declared implicitly
-        tmp_CPPFLAGS="$tmp_CPPFLAGS -we 140,147,165,266"
+        tmp_CPPFLAGS="$tmp_CPPFLAGS -we140,147,165,266"
         dnl Disable some remarks
         dnl #279: controlling expression is constant
         dnl #981: operands are evaluated in unspecified order
         dnl #1469: "cc" clobber ignored
-        tmp_CPPFLAGS="$tmp_CPPFLAGS -wd 279,981,1469"
-        dnl Disable use of ANSI C aliasing rules in optimizations
-        tmp_CFLAGS="$tmp_CFLAGS -no-ansi-alias"
-        dnl Disable floating point optimizations
-        tmp_CFLAGS="$tmp_CFLAGS -fp-model precise"
+        tmp_CPPFLAGS="$tmp_CPPFLAGS -wd279,981,1469"
         ;;
         #
-      ICC_windows)
+      INTEL_WINDOWS_C)
         #
         dnl Placeholder
         tmp_CFLAGS="$tmp_CFLAGS"
@@ -556,19 +653,31 @@ AC_DEFUN([CURL_SET_COMPILER_BASIC_OPTS], [
         tmp_CFLAGS="$tmp_CFLAGS"
         ;;
         #
-      SGI_MIPSpro_C)
+      SGI_MIPSPRO_C)
         #
         dnl Placeholder
         tmp_CFLAGS="$tmp_CFLAGS"
         ;;
         #
-      SUNC)
+      SUNPRO_C)
         #
         dnl Placeholder
         tmp_CFLAGS="$tmp_CFLAGS"
         ;;
         #
-      TINYC)
+      TINY_C)
+        #
+        dnl Placeholder
+        tmp_CFLAGS="$tmp_CFLAGS"
+        ;;
+        #
+      WATCOM_UNIX_C)
+        #
+        dnl Placeholder
+        tmp_CFLAGS="$tmp_CFLAGS"
+        ;;
+        #
+      WATCOM_WINDOWS_C)
         #
         dnl Placeholder
         tmp_CFLAGS="$tmp_CFLAGS"
@@ -576,13 +685,15 @@ AC_DEFUN([CURL_SET_COMPILER_BASIC_OPTS], [
         #
     esac
     #
-    tmp_CPPFLAGS=`eval echo $tmp_CPPFLAGS`
-    tmp_CFLAGS=`eval echo $tmp_CFLAGS`
+    squeeze tmp_CPPFLAGS
+    squeeze tmp_CFLAGS
     #
     if test ! -z "$tmp_CFLAGS" || test ! -z "$tmp_CPPFLAGS"; then
       AC_MSG_CHECKING([if compiler accepts some basic options])
-      CPPFLAGS=`eval echo $tmp_save_CPPFLAGS $tmp_CPPFLAGS`
-      CFLAGS=`eval echo $tmp_save_CFLAGS $tmp_CFLAGS`
+      CPPFLAGS="$tmp_save_CPPFLAGS $tmp_CPPFLAGS"
+      CFLAGS="$tmp_save_CFLAGS $tmp_CFLAGS"
+      squeeze CPPFLAGS
+      squeeze CFLAGS
       CURL_COMPILER_WORKS_IFELSE([
         AC_MSG_RESULT([yes])
         AC_MSG_NOTICE([compiler options added: $tmp_CFLAGS $tmp_CPPFLAGS])
@@ -607,6 +718,7 @@ dnl on configure's debug option.
 AC_DEFUN([CURL_SET_COMPILER_DEBUG_OPTS], [
   AC_REQUIRE([CURL_CHECK_OPTION_DEBUG])dnl
   AC_REQUIRE([CURL_CHECK_COMPILER])dnl
+  AC_REQUIRE([CURL_SHFUNC_SQUEEZE])dnl
   #
   if test "$compiler_id" != "unknown"; then
     #
@@ -628,8 +740,15 @@ AC_DEFUN([CURL_SET_COMPILER_DEBUG_OPTS], [
       tmp_options="$flags_dbg_off"
     fi
     #
-    CPPFLAGS=`eval echo $tmp_CPPFLAGS`
-    CFLAGS=`eval echo $tmp_CFLAGS $tmp_options`
+    if test "$flags_prefer_cppflags" = "yes"; then
+      CPPFLAGS="$tmp_CPPFLAGS $tmp_options"
+      CFLAGS="$tmp_CFLAGS"
+    else
+      CPPFLAGS="$tmp_CPPFLAGS"
+      CFLAGS="$tmp_CFLAGS $tmp_options"
+    fi
+    squeeze CPPFLAGS
+    squeeze CFLAGS
     CURL_COMPILER_WORKS_IFELSE([
       AC_MSG_RESULT([yes])
       AC_MSG_NOTICE([compiler options added: $tmp_options])
@@ -653,6 +772,7 @@ dnl on configure's optimize option.
 AC_DEFUN([CURL_SET_COMPILER_OPTIMIZE_OPTS], [
   AC_REQUIRE([CURL_CHECK_OPTION_OPTIMIZE])dnl
   AC_REQUIRE([CURL_CHECK_COMPILER])dnl
+  AC_REQUIRE([CURL_SHFUNC_SQUEEZE])dnl
   #
   if test "$compiler_id" != "unknown"; then
     #
@@ -701,8 +821,15 @@ AC_DEFUN([CURL_SET_COMPILER_OPTIMIZE_OPTS], [
         AC_MSG_CHECKING([if compiler accepts optimizer disabling options])
         tmp_options="$flags_opt_off"
       fi
-      CPPFLAGS=`eval echo $tmp_CPPFLAGS`
-      CFLAGS=`eval echo $tmp_CFLAGS $tmp_options`
+      if test "$flags_prefer_cppflags" = "yes"; then
+        CPPFLAGS="$tmp_CPPFLAGS $tmp_options"
+        CFLAGS="$tmp_CFLAGS"
+      else
+        CPPFLAGS="$tmp_CPPFLAGS"
+        CFLAGS="$tmp_CFLAGS $tmp_options"
+      fi
+      squeeze CPPFLAGS
+      squeeze CFLAGS
       CURL_COMPILER_WORKS_IFELSE([
         AC_MSG_RESULT([yes])
         AC_MSG_NOTICE([compiler options added: $tmp_options])
@@ -727,6 +854,7 @@ dnl configure's warnings given option.
 AC_DEFUN([CURL_SET_COMPILER_WARNING_OPTS], [
   AC_REQUIRE([CURL_CHECK_OPTION_WARNINGS])dnl
   AC_REQUIRE([CURL_CHECK_COMPILER])dnl
+  AC_REQUIRE([CURL_SHFUNC_SQUEEZE])dnl
   #
   if test "$compiler_id" != "unknown"; then
     #
@@ -737,7 +865,73 @@ AC_DEFUN([CURL_SET_COMPILER_WARNING_OPTS], [
     #
     case "$compiler_id" in
         #
-      DECC)
+      CLANG)
+        #
+        if test "$want_warnings" = "yes"; then
+          tmp_CFLAGS="$tmp_CFLAGS -pedantic"
+          tmp_CFLAGS="$tmp_CFLAGS -Wall -Wextra"
+          tmp_CFLAGS="$tmp_CFLAGS -Wpointer-arith -Wwrite-strings"
+          tmp_CFLAGS="$tmp_CFLAGS -Wshadow"
+          tmp_CFLAGS="$tmp_CFLAGS -Winline -Wnested-externs"
+          tmp_CFLAGS="$tmp_CFLAGS -Wmissing-declarations"
+          tmp_CFLAGS="$tmp_CFLAGS -Wmissing-prototypes"
+          tmp_CFLAGS="$tmp_CFLAGS -Wno-long-long"
+          tmp_CFLAGS="$tmp_CFLAGS -Wfloat-equal"
+          tmp_CFLAGS="$tmp_CFLAGS -Wno-multichar -Wsign-compare"
+          tmp_CFLAGS="$tmp_CFLAGS -Wundef"
+          tmp_CFLAGS="$tmp_CFLAGS -Wno-format-nonliteral"
+          tmp_CFLAGS="$tmp_CFLAGS -Wendif-labels -Wstrict-prototypes"
+          tmp_CFLAGS="$tmp_CFLAGS -Wdeclaration-after-statement"
+          tmp_CFLAGS="$tmp_CFLAGS -Wcast-align"
+          tmp_CFLAGS="$tmp_CFLAGS -Wno-system-headers"
+          tmp_CFLAGS="$tmp_CFLAGS -Wshorten-64-to-32"
+          #
+          dnl Only clang 1.1 or later
+          if test "$compiler_num" -ge "101"; then
+            tmp_CFLAGS="$tmp_CFLAGS -Wunused"
+          fi
+          #
+          dnl Only clang 2.8 or later
+          if test "$compiler_num" -ge "208"; then
+            tmp_CFLAGS="$tmp_CFLAGS -Wvla"
+          fi
+          #
+          dnl Only clang 2.9 or later
+          if test "$compiler_num" -ge "209"; then
+            tmp_CFLAGS="$tmp_CFLAGS -Wshift-sign-overflow"
+          fi
+          #
+          dnl Only clang 3.2 or later
+          if test "$compiler_num" -ge "302"; then
+            case $host_os in
+            cygwin* | mingw*)
+              dnl skip missing-variable-declarations warnings for cygwin and
+              dnl mingw because the libtool wrapper executable causes them
+              ;;
+            *)
+              tmp_CFLAGS="$tmp_CFLAGS -Wmissing-variable-declarations"
+              ;;
+            esac
+          fi
+          #
+          dnl Only clang 3.6 or later
+          if test "$compiler_num" -ge "306"; then
+            tmp_CFLAGS="$tmp_CFLAGS -Wdouble-promotion"
+          fi
+          #
+          dnl Only clang 3.9 or later
+          if test "$compiler_num" -ge "309"; then
+            tmp_CFLAGS="$tmp_CFLAGS -Wcomma"
+            # avoid the varargs warning, fixed in 4.0
+            # https://bugs.llvm.org/show_bug.cgi?id=29140
+            if test "$compiler_num" -lt "400"; then
+              tmp_CFLAGS="$tmp_CFLAGS -Wno-varargs"
+            fi
+          fi
+        fi
+        ;;
+        #
+      DEC_C)
         #
         if test "$want_warnings" = "yes"; then
           dnl Select a higher warning level than default level2
@@ -745,91 +939,189 @@ AC_DEFUN([CURL_SET_COMPILER_WARNING_OPTS], [
         fi
         ;;
         #
-      GNUC)
+      GNU_C)
         #
         if test "$want_warnings" = "yes"; then
+          #
           dnl Do not enable -pedantic when cross-compiling with a gcc older
           dnl than 3.0, to avoid warnings from third party system headers.
           if test "x$cross_compiling" != "xyes" ||
             test "$compiler_num" -ge "300"; then
             tmp_CFLAGS="$tmp_CFLAGS -pedantic"
           fi
+          #
           dnl Set of options we believe *ALL* gcc versions support:
-          tmp_CFLAGS="$tmp_CFLAGS -Wall -W -Winline -Wnested-externs"
-          tmp_CFLAGS="$tmp_CFLAGS -Wmissing-prototypes -Wpointer-arith"
-          tmp_CFLAGS="$tmp_CFLAGS -Wwrite-strings"
-          dnl -Wcast-align is a bit too annoying on all gcc versions ;-)
+          tmp_CFLAGS="$tmp_CFLAGS -Wall -W"
+          #
+          dnl Only gcc 1.4 or later
+          if test "$compiler_num" -ge "104"; then
+            tmp_CFLAGS="$tmp_CFLAGS -Wpointer-arith -Wwrite-strings"
+            dnl If not cross-compiling with a gcc older than 3.0
+            if test "x$cross_compiling" != "xyes" ||
+              test "$compiler_num" -ge "300"; then
+              tmp_CFLAGS="$tmp_CFLAGS -Wunused -Wshadow"
+            fi
+          fi
+          #
+          dnl Only gcc 2.7 or later
           if test "$compiler_num" -ge "207"; then
-            dnl gcc 2.7 or later
-            tmp_CFLAGS="$tmp_CFLAGS -Wmissing-declarations"
+            tmp_CFLAGS="$tmp_CFLAGS -Winline -Wnested-externs"
+            dnl If not cross-compiling with a gcc older than 3.0
+            if test "x$cross_compiling" != "xyes" ||
+              test "$compiler_num" -ge "300"; then
+              tmp_CFLAGS="$tmp_CFLAGS -Wmissing-declarations"
+              tmp_CFLAGS="$tmp_CFLAGS -Wmissing-prototypes"
+            fi
           fi
-          if test "$compiler_num" -gt "295"; then
-            dnl only if the compiler is newer than 2.95 since we got lots of
-            dnl "`_POSIX_C_SOURCE' is not defined" in system headers with
-            dnl gcc 2.95.4 on FreeBSD 4.9!
-            tmp_CFLAGS="$tmp_CFLAGS -Wno-long-long -Wno-multichar -Wshadow"
-            tmp_CFLAGS="$tmp_CFLAGS -Wsign-compare -Wundef"
+          #
+          dnl Only gcc 2.95 or later
+          if test "$compiler_num" -ge "295"; then
+            tmp_CFLAGS="$tmp_CFLAGS -Wno-long-long"
           fi
+          #
+          dnl Only gcc 2.96 or later
           if test "$compiler_num" -ge "296"; then
-            dnl gcc 2.96 or later
             tmp_CFLAGS="$tmp_CFLAGS -Wfloat-equal"
+            tmp_CFLAGS="$tmp_CFLAGS -Wno-multichar -Wsign-compare"
+            dnl -Wundef used only if gcc is 2.96 or later since we get
+            dnl lots of "`_POSIX_C_SOURCE' is not defined" in system
+            dnl headers with gcc 2.95.4 on FreeBSD 4.9
+            tmp_CFLAGS="$tmp_CFLAGS -Wundef"
           fi
-          if test "$compiler_num" -gt "296"; then
-            dnl this option does not exist in 2.96
+          #
+          dnl Only gcc 2.97 or later
+          if test "$compiler_num" -ge "297"; then
             tmp_CFLAGS="$tmp_CFLAGS -Wno-format-nonliteral"
           fi
-          dnl -Wunreachable-code seems totally unreliable on my gcc 3.3.2 on
-          dnl on i686-Linux as it gives us heaps with false positives.
-          dnl Also, on gcc 4.0.X it is totally unbearable and complains all
-          dnl over making it unusable for generic purposes. Let's not use it.
+          #
+          dnl Only gcc 3.0 or later
+          if test "$compiler_num" -ge "300"; then
+            dnl -Wunreachable-code seems totally unreliable on my gcc 3.3.2 on
+            dnl on i686-Linux as it gives us heaps with false positives.
+            dnl Also, on gcc 4.0.X it is totally unbearable and complains all
+            dnl over making it unusable for generic purposes. Let's not use it.
+            tmp_CFLAGS="$tmp_CFLAGS"
+          fi
+          #
+          dnl Only gcc 3.3 or later
           if test "$compiler_num" -ge "303"; then
-            dnl gcc 3.3 and later
             tmp_CFLAGS="$tmp_CFLAGS -Wendif-labels -Wstrict-prototypes"
           fi
+          #
+          dnl Only gcc 3.4 or later
           if test "$compiler_num" -ge "304"; then
-            dnl gcc 3.4 and later
             tmp_CFLAGS="$tmp_CFLAGS -Wdeclaration-after-statement"
           fi
+          #
+          dnl Only gcc 4.0 or later
+          if test "$compiler_num" -ge "400"; then
+            tmp_CFLAGS="$tmp_CFLAGS -Wstrict-aliasing=3"
+          fi
+          #
+          dnl Only gcc 4.2 or later
+          if test "$compiler_num" -ge "402"; then
+            tmp_CFLAGS="$tmp_CFLAGS -Wcast-align"
+          fi
+          #
+          dnl Only gcc 4.3 or later
+          if test "$compiler_num" -ge "403"; then
+            tmp_CFLAGS="$tmp_CFLAGS -Wtype-limits -Wold-style-declaration"
+            tmp_CFLAGS="$tmp_CFLAGS -Wmissing-parameter-type -Wempty-body"
+            tmp_CFLAGS="$tmp_CFLAGS -Wclobbered -Wignored-qualifiers"
+            tmp_CFLAGS="$tmp_CFLAGS -Wconversion -Wno-sign-conversion -Wvla"
+          fi
+          #
+          dnl Only gcc 4.5 or later
+          if test "$compiler_num" -ge "405"; then
+            dnl Only windows targets
+            if test "$curl_cv_have_def__WIN32" = "yes"; then
+              tmp_CFLAGS="$tmp_CFLAGS -Wno-pedantic-ms-format"
+            fi
+          fi
+          #
+          dnl Only gcc 4.6 or later
+          if test "$compiler_num" -ge "406"; then
+            tmp_CFLAGS="$tmp_CFLAGS -Wdouble-promotion"
+          fi
+          #
         fi
         #
         dnl Do not issue warnings for code in system include paths.
         if test "$compiler_num" -ge "300"; then
-          dnl gcc 3.0 and later
           tmp_CFLAGS="$tmp_CFLAGS -Wno-system-headers"
+        else
+          dnl When cross-compiling with a gcc older than 3.0, disable
+          dnl some warnings triggered on third party system headers.
+          if test "x$cross_compiling" = "xyes"; then
+            if test "$compiler_num" -ge "104"; then
+              dnl gcc 1.4 or later
+              tmp_CFLAGS="$tmp_CFLAGS -Wno-unused -Wno-shadow"
+            fi
+            if test "$compiler_num" -ge "207"; then
+              dnl gcc 2.7 or later
+              tmp_CFLAGS="$tmp_CFLAGS -Wno-missing-declarations"
+              tmp_CFLAGS="$tmp_CFLAGS -Wno-missing-prototypes"
+            fi
+          fi
         fi
         ;;
         #
-      HPUXC)
+      HP_UX_C)
         #
         if test "$want_warnings" = "yes"; then
           dnl Issue all warnings
-          dnl tmp_CFLAGS="$tmp_CFLAGS +w1"
-          dnl Due to the HP-UX socklen_t issue it is insane to use the +w1
-          dnl warning level. Until the issue is somehow fixed we will just
-          dnl use the +w2 warning level.
-          tmp_CFLAGS="$tmp_CFLAGS +w2"
+          tmp_CFLAGS="$tmp_CFLAGS +w1"
         fi
         ;;
         #
-      IBMC)
+      IBM_C)
         #
         dnl Placeholder
         tmp_CFLAGS="$tmp_CFLAGS"
         ;;
         #
-      ICC_unix)
+      INTEL_UNIX_C)
         #
         if test "$want_warnings" = "yes"; then
           if test "$compiler_num" -gt "600"; then
             dnl Show errors, warnings, and remarks
-            tmp_CPPFLAGS="$tmp_CPPFLAGS -Wall"
+            tmp_CPPFLAGS="$tmp_CPPFLAGS -Wall -w2"
             dnl Perform extra compile-time code checking
             tmp_CPPFLAGS="$tmp_CPPFLAGS -Wcheck"
+            dnl Warn on nested comments
+            tmp_CPPFLAGS="$tmp_CPPFLAGS -Wcomment"
+            dnl Show warnings relative to deprecated features
+            tmp_CPPFLAGS="$tmp_CPPFLAGS -Wdeprecated"
+            dnl Enable warnings for missing prototypes
+            tmp_CPPFLAGS="$tmp_CPPFLAGS -Wmissing-prototypes"
+            dnl Enable warnings for 64-bit portability issues
+            tmp_CPPFLAGS="$tmp_CPPFLAGS -Wp64"
+            dnl Enable warnings for questionable pointer arithmetic
+            tmp_CPPFLAGS="$tmp_CPPFLAGS -Wpointer-arith"
+            dnl Check for function return typw issues
+            tmp_CPPFLAGS="$tmp_CPPFLAGS -Wreturn-type"
+            dnl Warn on variable declarations hiding a previous one
+            tmp_CPPFLAGS="$tmp_CPPFLAGS -Wshadow"
+            dnl Warn when a variable is used before initialized
+            tmp_CPPFLAGS="$tmp_CPPFLAGS -Wuninitialized"
+            dnl Warn if a declared function is not used
+            tmp_CPPFLAGS="$tmp_CPPFLAGS -Wunused-function"
           fi
         fi
+        dnl Disable using EBP register in optimizations
+        tmp_CFLAGS="$tmp_CFLAGS -fno-omit-frame-pointer"
+        dnl Disable use of ANSI C aliasing rules in optimizations
+        tmp_CFLAGS="$tmp_CFLAGS -fno-strict-aliasing"
+        dnl Value-safe optimizations on floating-point data
+        tmp_CFLAGS="$tmp_CFLAGS -fp-model precise"
+        dnl Only icc 10.0 or later
+        if test "$compiler_num" -ge "1000"; then
+          dnl Disable vectorizer diagnostic information
+          tmp_CFLAGS="$tmp_CFLAGS -vec-report0"
+        fi
         ;;
         #
-      ICC_windows)
+      INTEL_WINDOWS_C)
         #
         dnl Placeholder
         tmp_CFLAGS="$tmp_CFLAGS"
@@ -840,7 +1132,7 @@ AC_DEFUN([CURL_SET_COMPILER_WARNING_OPTS], [
         if test "$want_warnings" = "yes"; then
           dnl Highest warning level is double -A, next is single -A.
           dnl Due to the big number of warnings these trigger on third
-          dnl party header files it is impratical for us to use any of
+          dnl party header files it is impractical for us to use any of
           dnl them here. If you want them simply define it in CPPFLAGS.
           tmp_CFLAGS="$tmp_CFLAGS"
         fi
@@ -854,7 +1146,7 @@ AC_DEFUN([CURL_SET_COMPILER_WARNING_OPTS], [
         fi
         ;;
         #
-      SGI_MIPSpro_C)
+      SGI_MIPSPRO_C)
         #
         if test "$want_warnings" = "yes"; then
           dnl Perform stricter semantic and lint-like checks
@@ -865,7 +1157,7 @@ AC_DEFUN([CURL_SET_COMPILER_WARNING_OPTS], [
         fi
         ;;
         #
-      SUNC)
+      SUNPRO_C)
         #
         if test "$want_warnings" = "yes"; then
           dnl Perform stricter semantic and lint-like checks
@@ -873,7 +1165,7 @@ AC_DEFUN([CURL_SET_COMPILER_WARNING_OPTS], [
         fi
         ;;
         #
-      TINYC)
+      TINY_C)
         #
         if test "$want_warnings" = "yes"; then
           dnl Activate all warnings
@@ -885,15 +1177,31 @@ AC_DEFUN([CURL_SET_COMPILER_WARNING_OPTS], [
         fi
         ;;
         #
+      WATCOM_UNIX_C)
+        #
+        if test "$want_warnings" = "yes"; then
+          dnl Issue all warnings
+          tmp_CFLAGS="$tmp_CFLAGS -Wall -Wextra"
+        fi
+        ;;
+        #
+      WATCOM_WINDOWS_C)
+        #
+        dnl Placeholder
+        tmp_CFLAGS="$tmp_CFLAGS"
+        ;;
+        #
     esac
     #
-    tmp_CPPFLAGS=`eval echo $tmp_CPPFLAGS`
-    tmp_CFLAGS=`eval echo $tmp_CFLAGS`
+    squeeze tmp_CPPFLAGS
+    squeeze tmp_CFLAGS
     #
     if test ! -z "$tmp_CFLAGS" || test ! -z "$tmp_CPPFLAGS"; then
       AC_MSG_CHECKING([if compiler accepts strict warning options])
-      CPPFLAGS=`eval echo $tmp_save_CPPFLAGS $tmp_CPPFLAGS`
-      CFLAGS=`eval echo $tmp_save_CFLAGS $tmp_CFLAGS`
+      CPPFLAGS="$tmp_save_CPPFLAGS $tmp_CPPFLAGS"
+      CFLAGS="$tmp_save_CFLAGS $tmp_CFLAGS"
+      squeeze CPPFLAGS
+      squeeze CFLAGS
       CURL_COMPILER_WORKS_IFELSE([
         AC_MSG_RESULT([yes])
         AC_MSG_NOTICE([compiler options added: $tmp_CFLAGS $tmp_CPPFLAGS])
@@ -910,34 +1218,333 @@ AC_DEFUN([CURL_SET_COMPILER_WARNING_OPTS], [
 ])
 
 
-dnl CURL_PROCESS_DEBUG_BUILD_OPTS
+dnl CURL_SHFUNC_SQUEEZE
 dnl -------------------------------------------------
-dnl Settings which depend on configure's debug given
-dnl option, and further configure the build process.
-dnl Don't use this macro for compiler dependant stuff.
+dnl Declares a shell function squeeze() which removes
+dnl redundant whitespace out of a shell variable.
+
+AC_DEFUN([CURL_SHFUNC_SQUEEZE], [
+squeeze() {
+  _sqz_result=""
+  eval _sqz_input=\[$][$]1
+  for _sqz_token in $_sqz_input; do
+    if test -z "$_sqz_result"; then
+      _sqz_result="$_sqz_token"
+    else
+      _sqz_result="$_sqz_result $_sqz_token"
+    fi
+  done
+  eval [$]1=\$_sqz_result
+  return 0
+}
+])
 
-AC_DEFUN([CURL_PROCESS_DEBUG_BUILD_OPTS], [
-  AC_REQUIRE([CURL_CHECK_OPTION_DEBUG])dnl
-  AC_BEFORE([$0],[AC_PROG_LIBTOOL])dnl
+
+dnl CURL_CHECK_CURLDEBUG
+dnl -------------------------------------------------
+dnl Settings which depend on configure's curldebug given
+dnl option, and other additional configure pre-requisites.
+dnl Actually the curl debug memory tracking feature can
+dnl only be used/enabled when libcurl is built as a static
+dnl library or as a shared one on those systems on which
+dnl shared libraries support undefined symbols.
+
+AC_DEFUN([CURL_CHECK_CURLDEBUG], [
+  AC_REQUIRE([XC_LIBTOOL])dnl
+  AC_REQUIRE([CURL_SHFUNC_SQUEEZE])dnl
+  supports_curldebug="unknown"
+  if test "$want_curldebug" = "yes"; then
+    if test "x$enable_shared" != "xno" &&
+      test "x$enable_shared" != "xyes"; then
+      AC_MSG_WARN([unknown enable_shared setting.])
+      supports_curldebug="no"
+    fi
+    if test "x$enable_static" != "xno" &&
+      test "x$enable_static" != "xyes"; then
+      AC_MSG_WARN([unknown enable_static setting.])
+      supports_curldebug="no"
+    fi
+    if test "$supports_curldebug" != "no"; then
+      if test "$enable_shared" = "yes" &&
+        test "x$xc_lt_shlib_use_no_undefined" = 'xyes'; then
+        supports_curldebug="no"
+        AC_MSG_WARN([shared library does not support undefined symbols.])
+      fi
+    fi
+  fi
   #
-  if test "$want_debug" = "yes"; then
-    CPPFLAGS="$CPPFLAGS -DCURLDEBUG"
+  if test "$want_curldebug" = "yes"; then
+    AC_MSG_CHECKING([if curl debug memory tracking can be enabled])
+    test "$supports_curldebug" = "no" || supports_curldebug="yes"
+    AC_MSG_RESULT([$supports_curldebug])
+    if test "$supports_curldebug" = "no"; then
+      AC_MSG_WARN([cannot enable curl debug memory tracking.])
+      want_curldebug="no"
+    fi
   fi
   #
+  if test "$want_curldebug" = "yes"; then
+    CPPFLAGS="-DCURLDEBUG $CPPFLAGS"
+    squeeze CPPFLAGS
+  fi
+  if test "$want_debug" = "yes"; then
+    CPPFLAGS="-DDEBUGBUILD $CPPFLAGS"
+    squeeze CPPFLAGS
+  fi
+])
+
+
+
+dnl CURL_CHECK_COMPILER_HALT_ON_ERROR
+dnl -------------------------------------------------
+dnl Verifies if the compiler actually halts after the
+dnl compilation phase without generating any object
+dnl code file, when the source compiles with errors.
+
+AC_DEFUN([CURL_CHECK_COMPILER_HALT_ON_ERROR], [
+  AC_MSG_CHECKING([if compiler halts on compilation errors])
+  AC_COMPILE_IFELSE([
+    AC_LANG_PROGRAM([[
+    ]],[[
+      force compilation error
+    ]])
+  ],[
+    AC_MSG_RESULT([no])
+    AC_MSG_ERROR([compiler does not halt on compilation errors.])
+  ],[
+    AC_MSG_RESULT([yes])
+  ])
+])
+
+
+dnl CURL_CHECK_COMPILER_ARRAY_SIZE_NEGATIVE
+dnl -------------------------------------------------
+dnl Verifies if the compiler actually halts after the
+dnl compilation phase without generating any object
+dnl code file, when the source code tries to define a
+dnl type for a constant array with negative dimension.
+
+AC_DEFUN([CURL_CHECK_COMPILER_ARRAY_SIZE_NEGATIVE], [
+  AC_REQUIRE([CURL_CHECK_COMPILER_HALT_ON_ERROR])dnl
+  AC_MSG_CHECKING([if compiler halts on negative sized arrays])
+  AC_COMPILE_IFELSE([
+    AC_LANG_PROGRAM([[
+      typedef char bad_t[sizeof(char) == sizeof(int) ? -1 : -1 ];
+    ]],[[
+      bad_t dummy;
+    ]])
+  ],[
+    AC_MSG_RESULT([no])
+    AC_MSG_ERROR([compiler does not halt on negative sized arrays.])
+  ],[
+    AC_MSG_RESULT([yes])
+  ])
+])
+
+
+dnl CURL_CHECK_COMPILER_STRUCT_MEMBER_SIZE
+dnl -------------------------------------------------
+dnl Verifies if the compiler is capable of handling the
+dnl size of a struct member, struct which is a function
+dnl result, as a compilation-time condition inside the
+dnl type definition of a constant array.
+
+AC_DEFUN([CURL_CHECK_COMPILER_STRUCT_MEMBER_SIZE], [
+  AC_REQUIRE([CURL_CHECK_COMPILER_ARRAY_SIZE_NEGATIVE])dnl
+  AC_MSG_CHECKING([if compiler struct member size checking works])
+  tst_compiler_check_one_works="unknown"
+  AC_COMPILE_IFELSE([
+    AC_LANG_PROGRAM([[
+      struct mystruct {
+        int  mi;
+        char mc;
+        struct mystruct *next;
+      };
+      struct mystruct myfunc();
+      typedef char good_t1[sizeof(myfunc().mi) == sizeof(int)  ? 1 : -1 ];
+      typedef char good_t2[sizeof(myfunc().mc) == sizeof(char) ? 1 : -1 ];
+    ]],[[
+      good_t1 dummy1;
+      good_t2 dummy2;
+    ]])
+  ],[
+    tst_compiler_check_one_works="yes"
+  ],[
+    tst_compiler_check_one_works="no"
+    sed 's/^/cc-src: /' conftest.$ac_ext >&6
+    sed 's/^/cc-err: /' conftest.err >&6
+  ])
+  tst_compiler_check_two_works="unknown"
+  AC_COMPILE_IFELSE([
+    AC_LANG_PROGRAM([[
+      struct mystruct {
+        int  mi;
+        char mc;
+        struct mystruct *next;
+      };
+      struct mystruct myfunc();
+      typedef char bad_t1[sizeof(myfunc().mi) != sizeof(int)  ? 1 : -1 ];
+      typedef char bad_t2[sizeof(myfunc().mc) != sizeof(char) ? 1 : -1 ];
+    ]],[[
+      bad_t1 dummy1;
+      bad_t2 dummy2;
+    ]])
+  ],[
+    tst_compiler_check_two_works="no"
+  ],[
+    tst_compiler_check_two_works="yes"
+  ])
+  if test "$tst_compiler_check_one_works" = "yes" &&
+    test "$tst_compiler_check_two_works" = "yes"; then
+    AC_MSG_RESULT([yes])
+  else
+    AC_MSG_RESULT([no])
+    AC_MSG_ERROR([compiler fails struct member size checking.])
+  fi
+])
+
+
+dnl CURL_CHECK_COMPILER_SYMBOL_HIDING
+dnl -------------------------------------------------
+dnl Verify if compiler supports hiding library internal symbols, setting
+dnl shell variable supports_symbol_hiding value as appropriate, as well as
+dnl variables symbol_hiding_CFLAGS and symbol_hiding_EXTERN when supported.
+
+AC_DEFUN([CURL_CHECK_COMPILER_SYMBOL_HIDING], [
+  AC_REQUIRE([CURL_CHECK_COMPILER])dnl
+  AC_BEFORE([$0],[CURL_CONFIGURE_SYMBOL_HIDING])dnl
+  AC_MSG_CHECKING([if compiler supports hiding library internal symbols])
+  supports_symbol_hiding="no"
+  symbol_hiding_CFLAGS=""
+  symbol_hiding_EXTERN=""
+  tmp_CFLAGS=""
+  tmp_EXTERN=""
+  case "$compiler_id" in
+    CLANG)
+      dnl All versions of clang support -fvisibility=
+      tmp_EXTERN="__attribute__ ((__visibility__ (\"default\")))"
+      tmp_CFLAGS="-fvisibility=hidden"
+      supports_symbol_hiding="yes"
+      ;;
+    GNU_C)
+      dnl Only gcc 3.4 or later
+      if test "$compiler_num" -ge "304"; then
+        if $CC --help --verbose 2>/dev/null | grep fvisibility= >/dev/null ; then
+          tmp_EXTERN="__attribute__ ((__visibility__ (\"default\")))"
+          tmp_CFLAGS="-fvisibility=hidden"
+          supports_symbol_hiding="yes"
+        fi
+      fi
+      ;;
+    INTEL_UNIX_C)
+      dnl Only icc 9.0 or later
+      if test "$compiler_num" -ge "900"; then
+        if $CC --help --verbose 2>&1 | grep fvisibility= > /dev/null ; then
+          tmp_save_CFLAGS="$CFLAGS"
+          CFLAGS="$CFLAGS -fvisibility=hidden"
+          AC_LINK_IFELSE([
+            AC_LANG_PROGRAM([[
+#             include <stdio.h>
+            ]],[[
+              printf("icc fvisibility bug test");
+            ]])
+          ],[
+            tmp_EXTERN="__attribute__ ((__visibility__ (\"default\")))"
+            tmp_CFLAGS="-fvisibility=hidden"
+            supports_symbol_hiding="yes"
+          ])
+          CFLAGS="$tmp_save_CFLAGS"
+        fi
+      fi
+      ;;
+    SUNPRO_C)
+      if $CC 2>&1 | grep flags >/dev/null && $CC -flags | grep xldscope= >/dev/null ; then
+        tmp_EXTERN="__global"
+        tmp_CFLAGS="-xldscope=hidden"
+        supports_symbol_hiding="yes"
+      fi
+      ;;
+  esac
+  if test "$supports_symbol_hiding" = "yes"; then
+    tmp_save_CFLAGS="$CFLAGS"
+    CFLAGS="$tmp_save_CFLAGS $tmp_CFLAGS"
+    squeeze CFLAGS
+    AC_COMPILE_IFELSE([
+      AC_LANG_PROGRAM([[
+        $tmp_EXTERN char *dummy(char *buff);
+        char *dummy(char *buff)
+        {
+         if(buff)
+           return ++buff;
+         else
+           return buff;
+        }
+      ]],[[
+        char b[16];
+        char *r = dummy(&b[0]);
+        if(r)
+          return (int)*r;
+      ]])
+    ],[
+      supports_symbol_hiding="yes"
+      if test -f conftest.err; then
+        grep 'visibility' conftest.err >/dev/null
+        if test "$?" -eq "0"; then
+          supports_symbol_hiding="no"
+        fi
+      fi
+    ],[
+      supports_symbol_hiding="no"
+      echo " " >&6
+      sed 's/^/cc-src: /' conftest.$ac_ext >&6
+      sed 's/^/cc-err: /' conftest.err >&6
+      echo " " >&6
+    ])
+    CFLAGS="$tmp_save_CFLAGS"
+  fi
+  if test "$supports_symbol_hiding" = "yes"; then
+    AC_MSG_RESULT([yes])
+    symbol_hiding_CFLAGS="$tmp_CFLAGS"
+    symbol_hiding_EXTERN="$tmp_EXTERN"
+  else
+    AC_MSG_RESULT([no])
+  fi
 ])
 
 
-dnl CURL_CHECK_PROG_CC
+dnl CURL_CHECK_COMPILER_PROTOTYPE_MISMATCH
 dnl -------------------------------------------------
-dnl Check for compiler program, preventing CFLAGS and
-dnl CPPFLAGS from being unexpectedly changed.
-
-AC_DEFUN([CURL_CHECK_PROG_CC], [
-  ac_save_CFLAGS="$CFLAGS"
-  ac_save_CPPFLAGS="$CPPFLAGS"
-  AC_PROG_CC
-  CFLAGS="$ac_save_CFLAGS"
-  CPPFLAGS="$ac_save_CPPFLAGS"
+dnl Verifies if the compiler actually halts after the
+dnl compilation phase without generating any object
+dnl code file, when the source code tries to redefine
+dnl a prototype which does not match previous one.
+
+AC_DEFUN([CURL_CHECK_COMPILER_PROTOTYPE_MISMATCH], [
+  AC_REQUIRE([CURL_CHECK_COMPILER_HALT_ON_ERROR])dnl
+  AC_MSG_CHECKING([if compiler halts on function prototype mismatch])
+  AC_COMPILE_IFELSE([
+    AC_LANG_PROGRAM([[
+#     include <stdlib.h>
+      int rand(int n);
+      int rand(int n)
+      {
+        if(n)
+          return ++n;
+        else
+          return n;
+      }
+    ]],[[
+      int i[2]={0,0};
+      int j = rand(i[0]);
+      if(j)
+        return j;
+    ]])
+  ],[
+    AC_MSG_RESULT([no])
+    AC_MSG_ERROR([compiler does not halt on function prototype mismatch.])
+  ],[
+    AC_MSG_RESULT([yes])
+  ])
 ])
 
 
@@ -985,6 +1592,7 @@ dnl as whitespace separated lists of words. Each word
 dnl from VALUE is removed from VARNAME when present.
 
 AC_DEFUN([CURL_VAR_STRIP], [
+  AC_REQUIRE([CURL_SHFUNC_SQUEEZE])dnl
   ac_var_stripped=""
   for word1 in $[$1]; do
     ac_var_strip_word="no"
@@ -998,5 +1606,7 @@ AC_DEFUN([CURL_VAR_STRIP], [
     fi
   done
   dnl squeeze whitespace out of result
-  [$1]=`eval echo $ac_var_stripped`
+  [$1]="$ac_var_stripped"
+  squeeze [$1]
 ])
+