Initial attempt to support configure's --(dis|en)able-warnings
authorYang Tse <yangsita@gmail.com>
Thu, 2 Oct 2008 03:56:55 +0000 (03:56 +0000)
committerYang Tse <yangsita@gmail.com>
Thu, 2 Oct 2008 03:56:55 +0000 (03:56 +0000)
option to specify dis(activation) of picky compiler warnings.

If option is specified, it will be honored independant of the
--(dis|en)able-debug option.

If option is not specified, it will follow --(dis|en)able-debug
setting, whose default is disabled if not specified.

acinclude.m4
ares/acinclude.m4
ares/configure.ac
ares/m4/cares-compilers.m4 [new file with mode: 0644]
ares/m4/cares-confopts.m4 [new file with mode: 0644]
configure.ac
m4/curl-compilers.m4 [new file with mode: 0644]
m4/curl-confopts.m4 [new file with mode: 0644]

index 6b0d332..7a758dc 100644 (file)
@@ -2601,57 +2601,6 @@ fi
 ])
 
 
-dnl **********************************************************************
-dnl CURL_DETECT_ICC ([ACTION-IF-YES])
-dnl
-dnl check if this is the Intel ICC compiler, and if so run the ACTION-IF-YES
-dnl sets the $ICC variable to "yes" or "no"
-dnl **********************************************************************
-AC_DEFUN([CURL_DETECT_ICC],
-[
-    ICC="no"
-    AC_MSG_CHECKING([for icc in use])
-    if test "$GCC" = "yes"; then
-       dnl check if this is icc acting as gcc in disguise
-       AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],
-         dnl action if the text is found, this it has not been replaced by the
-         dnl cpp
-         ICC="no",
-         dnl the text was not found, it was replaced by the cpp
-         ICC="yes"
-         AC_MSG_RESULT([yes])
-         [$1]
-       )
-    fi
-    if test "$ICC" = "no"; then
-        # this is not ICC
-        AC_MSG_RESULT([no])
-    fi
-])
-
-dnl We create a function for detecting which compiler we use and then set as
-dnl pendantic compiler options as possible for that particular compiler. The
-dnl options are only used for debug-builds.
-
-AC_DEFUN([CURL_CC_DEBUG_OPTS],
-[
-    dnl strip off optimizer flags
-    NEWFLAGS=""
-    for flag in $CFLAGS; do
-      case "$flag" in
-      -O*)
-        dnl echo "cut off $flag"
-        ;;
-      *)
-        NEWFLAGS="$NEWFLAGS $flag"
-        ;;
-      esac
-    done
-    CFLAGS=$NEWFLAGS
-]) # AC-DEFUN
-
-
-
 # This is only a temporary fix. This macro is here to replace the broken one
 # delivered by the automake project (including the 1.9.6 release). As soon as
 # they ship a working version we SHOULD remove this work-around.
index 06fa2f5..0225f9b 100644 (file)
@@ -1827,60 +1827,6 @@ AC_DEFUN([CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC], [
 ])
 
 
-dnl **********************************************************************
-dnl CURL_DETECT_ICC ([ACTION-IF-YES])
-dnl
-dnl check if this is the Intel ICC compiler, and if so run the ACTION-IF-YES
-dnl sets the $ICC variable to "yes" or "no"
-dnl **********************************************************************
-AC_DEFUN([CURL_DETECT_ICC],
-[
-    ICC="no"
-    AC_MSG_CHECKING([for icc in use])
-    if test "$GCC" = "yes"; then
-       dnl check if this is icc acting as gcc in disguise
-       AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],
-         dnl action if the text is found, this it has not been replaced by the
-         dnl cpp
-         ICC="no",
-         dnl the text was not found, it was replaced by the cpp
-         ICC="yes"
-         AC_MSG_RESULT([yes])
-         [$1]
-       )
-    fi
-    if test "$ICC" = "no"; then
-        # this is not ICC
-        AC_MSG_RESULT([no])
-    fi
-])
-
-dnl We create a function for detecting which compiler we use and then set as
-dnl pendantic compiler options as possible for that particular compiler. The
-dnl options are only used for debug-builds.
-
-dnl This is a copy of the original found in curl's configure script. Don't
-dnl modify this one, edit the one in curl and copy it back here when that one
-dnl is changed.
-
-AC_DEFUN([CURL_CC_DEBUG_OPTS],
-[
-    dnl strip off optimizer flags
-    NEWFLAGS=""
-    for flag in $CFLAGS; do
-      case "$flag" in
-      -O*)
-        dnl echo "cut off $flag"
-        ;;
-      *)
-        NEWFLAGS="$NEWFLAGS $flag"
-        ;;
-      esac
-    done
-    CFLAGS=$NEWFLAGS
-])
-
-
 dnl This macro determines if the specified struct exists in the specified file
 dnl Syntax:
 dnl CARES_CHECK_STRUCT(headers, struct name, if found, [if not found])
index 59c1cdb..39c2495 100644 (file)
@@ -8,6 +8,9 @@ AC_CONFIG_SRCDIR([ares_ipv6.h])
 AM_CONFIG_HEADER([config.h])
 AM_MAINTAINER_MODE
 
+CARES_CHECK_OPTION_DEBUG
+CARES_CHECK_OPTION_WARNINGS
+
 dnl SED is mandatory for configure process and libtool.
 dnl Set it now, allowing it to be changed later.
 AC_PATH_PROG([SED], [sed], [not_found],
@@ -86,43 +89,10 @@ esac
 dnl support building of Windows DLLs
 AC_LIBTOOL_WIN32_DLL
 
-dnl ************************************************************
-dnl Option to switch on debug options. This makes an assumption that
-dnl this is built as an 'ares' subdir in the curl source tree. Subject for
-dnl improval in the future!
-dnl
-AC_MSG_CHECKING([whether to enable debug options])
-AC_ARG_ENABLE(debug,
-AC_HELP_STRING([--enable-debug],[Enable pedantic debug options])
-AC_HELP_STRING([--disable-debug],[Disable debug options]),
-[ case "$enableval" in
-  no)
-       AC_MSG_RESULT(no)
-       ;;
-  *)   AC_MSG_RESULT(yes)
-
-    dnl when doing the debug stuff, use static library only
-    AC_DISABLE_SHARED
-
-    debugbuild="yes"
-
-    dnl the entire --enable-debug is a hack that lives and runs on top of
-    dnl libcurl stuff so this BUILDING_LIBCURL is not THAT much uglier
-    AC_DEFINE(BUILDING_LIBCURL, 1, [when building as static part of libcurl])
+CARES_PROCESS_DEBUG_BUILD_OPTS
 
-    CPPFLAGS="$CPPFLAGS -DCURLDEBUG -I$srcdir/../include"
-    CFLAGS="$CFLAGS -g" 
-
-    dnl set compiler "debug" options to become more picky, and remove
-    dnl optimize options from CFLAGS
-    CURL_CC_DEBUG_OPTS
-
-       ;;
-  esac ],
-       AC_MSG_RESULT(no)
-)
-AM_CONDITIONAL(DEBUGBUILD, test x$debugbuild = xyes)
-AM_CONDITIONAL(CURLDEBUG, test x$debugbuild = xyes)
+AM_CONDITIONAL(DEBUGBUILD, test x$want_debug = xyes)
+AM_CONDITIONAL(CURLDEBUG, test x$want_debug = xyes)
 
 dnl skip libtool C++ and Fortran compiler checks
 m4_ifdef([AC_PROG_CXX], [m4_undefine([AC_PROG_CXX])])
@@ -171,160 +141,24 @@ dnl **********************************************************************
 dnl platform/compiler/architecture specific checks/flags
 dnl **********************************************************************
 
-ac_cv_compiler="unknown"
-ac_cv_compiler_num="unknown"
-
-AC_MSG_CHECKING([whether we are using the IBM C compiler])
-CURL_CHECK_DEF([__IBMC__], [], [silent])
-if test "$curl_cv_have_def___IBMC__" = "yes"; then
-  AC_MSG_RESULT([yes])
-  ac_cv_compiler="IBMC"
-  dnl Ensure that compiler optimizations are always thread-safe.
-  CFLAGS="$CFLAGS -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.
-  CFLAGS="$CFLAGS -qnoansialias"
-  dnl Force compiler to stop after the compilation phase, without
-  dnl generating an object code file when compilation has errors.
-  CFLAGS="$CFLAGS -qhalt=e"
-else
-  AC_MSG_RESULT([no])
-fi
-
-AC_MSG_CHECKING([whether we are using the Intel C compiler])
-CURL_CHECK_DEF([__INTEL_COMPILER], [], [silent])
-if test "$curl_cv_have_def___INTEL_COMPILER" = "yes"; then
-  AC_MSG_RESULT([yes])
-  ac_cv_compiler="ICC"
-  ac_cv_compiler_num="$curl_cv_def___INTEL_COMPILER"
-  dnl On unix this compiler uses gcc's header files, so
-  dnl we select ANSI C89 dialect plus GNU extensions.
-  CPPFLAGS="$CPPFLAGS -std=gnu89"
-  if test "$ac_cv_compiler_num" -gt "600"; then
-    dnl Show errors, warnings, and remarks
-    CPPFLAGS="$CPPFLAGS -Wall"
-    dnl Perform extra compile-time code checking
-    CPPFLAGS="$CPPFLAGS -Wcheck"
-  fi
-  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
-  CPPFLAGS="$CPPFLAGS -we 140,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
-  if test "$ac_cv_compiler_num" -lt "910"; then
-    CPPFLAGS="$CPPFLAGS -wd 279"
-  fi
-  CPPFLAGS="$CPPFLAGS -wd 981,1469"
-  dnl Disable use of ANSI C aliasing rules in optimizations
-  CFLAGS="$CFLAGS -no-ansi-alias"
-  dnl Disable floating point optimizations
-  CFLAGS="$CFLAGS -fp-model precise -mp"
-else
-  AC_MSG_RESULT([no])
-fi
-
-AC_MSG_CHECKING([whether we are using the DEC/Compaq C compiler])
-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])
-  ac_cv_compiler="DECC"
-  dnl Select strict ANSI C compiler mode
-  CFLAGS="$CFLAGS -std1"
-  dnl Turn off optimizer ANSI C aliasing rules
-  CFLAGS="$CFLAGS -noansi_alias"
-  dnl Select a higher warning level than default level2
-  CFLAGS="$CFLAGS -msg_enable level3"
-  dnl Generate warnings for missing function prototypes
-  CFLAGS="$CFLAGS -warnprotos"
-  dnl Change some warnings into fatal errors
-  CFLAGS="$CFLAGS -msg_fatal toofewargs,toomanyargs"
-else
-  AC_MSG_RESULT([no])
-fi
-
-AC_MSG_CHECKING([whether we are using the GNU C compiler])
-CURL_CHECK_DEF([__GNUC__], [], [silent])
-if test "$curl_cv_have_def___GNUC__" = "yes" &&
-  test "$ac_cv_compiler" = "unknown"; then
-  AC_MSG_RESULT([yes])
-  ac_cv_compiler="GNUC"
-  gccver=`$CC -dumpversion`
-  gccvhi=`echo $gccver | cut -d . -f1`
-  gccvlo=`echo $gccver | cut -d . -f2`
-  gccnum=`(expr $gccvhi "*" 100 + $gccvlo) 2>/dev/null`
-  ac_cv_compiler_num="$gccnum"
-  dnl this is a set of options we believe *ALL* gcc versions support:
-  WARN="-W -Wall -Wwrite-strings -pedantic -Wpointer-arith -Wnested-externs -Winline -Wmissing-prototypes"
-  dnl -Wcast-align is a bit too annoying on all gcc versions ;-)
-  if test "$ac_cv_compiler_num" -ge "207"; then
-    dnl gcc 2.7 or later
-    WARN="$WARN -Wmissing-declarations"
-  fi
-  if test "$ac_cv_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!
-    WARN="$WARN -Wundef -Wno-long-long -Wsign-compare -Wshadow -Wno-multichar"
-  fi
-  if test "$ac_cv_compiler_num" -ge "296"; then
-    dnl gcc 2.96 or later
-    WARN="$WARN -Wfloat-equal"
-  fi
-  if test "$ac_cv_compiler_num" -gt "296"; then
-    dnl this option does not exist in 2.96
-    WARN="$WARN -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.
-  if test "$ac_cv_compiler_num" -ge "303"; then
-    dnl gcc 3.3 and later
-    WARN="$WARN -Wendif-labels -Wstrict-prototypes"
-  fi
-  if test "$ac_cv_compiler_num" -ge "304"; then
-    # try these on gcc 3.4
-    WARN="$WARN -Wdeclaration-after-statement"
-  fi
-  for flag in $CPPFLAGS; do
-    case "$flag" in
-      -I*)
-        dnl Include path, provide a -isystem option for the same dir
-        dnl to prevent warnings in those dirs. The -isystem was not very
-        dnl reliable on earlier gcc versions.
-        add=`echo $flag | sed 's/^-I/-isystem /g'`
-        WARN="$WARN $add"
-        ;;
-    esac
-  done
-  CFLAGS="$CFLAGS $WARN"
-  AC_MSG_NOTICE([Added this set of compiler options: $WARN])
-else
-  AC_MSG_RESULT([no])
-fi
+CARES_CHECK_COMPILER
+CARES_PROCESS_CC_BASIC_OPTS
+CARES_PROCESS_CC_DEBUG_OPTS
+CARES_PROCESS_CC_WARNING_OPTS
 
 case $host in
   #
   x86_64*linux*|amd64*freebsd*|ia64*freebsd*)
     #
-    if test "$ac_cv_compiler" = "ICC"; then
+    if test "$compiler_id" = "ICC_unix"; then
       #
-      if test "$ac_cv_compiler_num" -ge "900" &&
-        test "$ac_cv_compiler_num" -lt "1000"; then
+      if test "$compiler_num" -ge "900" &&
+        test "$compiler_num" -lt "1000"; then
         dnl icc 9.X specific
         CFLAGS="$CFLAGS -i-dynamic"
       fi
       #
-      if test "$ac_cv_compiler_num" -ge "1000"; then
+      if test "$compiler_num" -ge "1000"; then
         dnl icc 10.X or later
         CFLAGS="$CFLAGS -shared-intel"
       fi
diff --git a/ares/m4/cares-compilers.m4 b/ares/m4/cares-compilers.m4
new file mode 100644 (file)
index 0000000..23aa017
--- /dev/null
@@ -0,0 +1,319 @@
+#***************************************************************************
+# $Id$
+#
+# Copyright (C) 2008 by Daniel Stenberg et al
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose and without fee is hereby granted, provided
+# that the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of M.I.T. not be used in advertising or
+# publicity pertaining to distribution of the software without specific,
+# written prior permission.  M.I.T. makes no representations about the
+# suitability of this software for any purpose.  It is provided "as is"
+# without express or implied warranty.
+#
+#***************************************************************************
+
+# File version for 'aclocal' use. Keep it a single number.
+# serial 1
+
+
+dnl CARES_CHECK_COMPILER
+dnl -------------------------------------------------
+dnl Verify if the C compiler being used is known.
+
+AC_DEFUN([CARES_CHECK_COMPILER], [
+  #
+  compiler_id="unknown"
+  compiler_num="0"
+  #
+  CARES_CHECK_COMPILER_DEC
+  CARES_CHECK_COMPILER_IBM
+  CARES_CHECK_COMPILER_INTEL
+  CARES_CHECK_COMPILER_GNU
+  #
+])
+
+
+dnl CARES_CHECK_COMPILER_DEC
+dnl -------------------------------------------------
+dnl Verify if the C compiler being used is DEC's.
+
+AC_DEFUN([CARES_CHECK_COMPILER_DEC], [
+  AC_MSG_CHECKING([whether we are using the DEC/Compaq C compiler])
+  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"
+  else
+    AC_MSG_RESULT([no])
+  fi
+])
+
+
+dnl CARES_CHECK_COMPILER_GNU
+dnl -------------------------------------------------
+dnl Verify if the C compiler being used is GNU's.
+
+AC_DEFUN([CARES_CHECK_COMPILER_GNU], [
+  AC_REQUIRE([CARES_CHECK_COMPILER_INTEL])dnl
+  #
+  AC_MSG_CHECKING([whether we are using the GNU C compiler])
+  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"
+    gccver=`$CC -dumpversion`
+    gccvhi=`echo $gccver | cut -d . -f1`
+    gccvlo=`echo $gccver | cut -d . -f2`
+    compiler_num=`(expr $gccvhi "*" 100 + $gccvlo) 2>/dev/null`
+  else
+    AC_MSG_RESULT([no])
+  fi
+])
+
+
+dnl CARES_CHECK_COMPILER_IBM
+dnl -------------------------------------------------
+dnl Verify if the C compiler being used is IBM's.
+
+AC_DEFUN([CARES_CHECK_COMPILER_IBM], [
+  AC_MSG_CHECKING([whether we are using the IBM C compiler])
+  CURL_CHECK_DEF([__IBMC__], [], [silent])
+  if test "$curl_cv_have_def___IBMC__" = "yes"; then
+    AC_MSG_RESULT([yes])
+    compiler_id="IBMC"
+  else
+    AC_MSG_RESULT([no])
+  fi
+])
+
+
+dnl CARES_CHECK_COMPILER_INTEL
+dnl -------------------------------------------------
+dnl Verify if the C compiler being used is Intel's.
+
+AC_DEFUN([CARES_CHECK_COMPILER_INTEL], [
+  AC_BEFORE([$0],[CARES_CHECK_COMPILER_GNU])dnl
+  AC_MSG_CHECKING([whether we are using the Intel C compiler])
+  CURL_CHECK_DEF([__INTEL_COMPILER], [], [silent])
+  if test "$curl_cv_have_def___INTEL_COMPILER" = "yes"; then
+    AC_MSG_RESULT([yes])
+    CURL_CHECK_DEF([__unix__], [], [silent])
+    if test "$curl_cv_have_def___unix__" = "yes"; then
+      compiler_id="ICC_unix"
+    else
+      compiler_id="ICC_windows"
+    fi
+    compiler_num="$curl_cv_def___INTEL_COMPILER"
+  else
+    AC_MSG_RESULT([no])
+  fi
+])
+
+
+dnl CARES_PROCESS_CC_BASIC_OPTS
+dnl -------------------------------------------------
+dnl Sets compiler options/flags which are independant
+dnl of configure's debug or warnings options.
+
+AC_DEFUN([CARES_PROCESS_CC_BASIC_OPTS], [
+  AC_REQUIRE([CARES_CHECK_COMPILER])dnl
+  #
+  if test "$compiler_id" = "DECC"; then
+    dnl Select strict ANSI C compiler mode
+    CFLAGS="$CFLAGS -std1"
+    dnl Turn off optimizer ANSI C aliasing rules
+    CFLAGS="$CFLAGS -noansi_alias"
+    dnl Generate warnings for missing function prototypes
+    CFLAGS="$CFLAGS -warnprotos"
+    dnl Change some warnings into fatal errors
+    CFLAGS="$CFLAGS -msg_fatal toofewargs,toomanyargs"
+  fi
+  #
+  if test "$compiler_id" = "IBMC"; then
+    dnl Ensure that compiler optimizations are always thread-safe.
+    CFLAGS="$CFLAGS -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.
+    CFLAGS="$CFLAGS -qnoansialias"
+    dnl Force compiler to stop after the compilation phase, without
+    dnl generating an object code file when compilation has errors.
+    CFLAGS="$CFLAGS -qhalt=e"
+  fi
+  #
+  if test "$compiler_id" = "ICC_unix"; then
+    dnl On unix this compiler uses gcc's header files, so
+    dnl we select ANSI C89 dialect plus GNU extensions.
+    CPPFLAGS="$CPPFLAGS -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
+    CPPFLAGS="$CPPFLAGS -we 140,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
+    if test "$compiler_num" -lt "910"; then
+      CPPFLAGS="$CPPFLAGS -wd 279"
+    fi
+    CPPFLAGS="$CPPFLAGS -wd 981,1469"
+    dnl Disable use of ANSI C aliasing rules in optimizations
+    CFLAGS="$CFLAGS -no-ansi-alias"
+    dnl Disable floating point optimizations
+    CFLAGS="$CFLAGS -fp-model precise"
+  fi
+])
+
+
+dnl CARES_PROCESS_CC_DEBUG_OPTS
+dnl -------------------------------------------------
+dnl Sets compiler options/flags and other settings
+dnl which depend on configure's debug given option.
+
+AC_DEFUN([CARES_PROCESS_CC_DEBUG_OPTS], [
+  AC_REQUIRE([CARES_CHECK_OPTION_DEBUG])dnl
+  AC_REQUIRE([CARES_CHECK_COMPILER])dnl
+  #
+  if test "$want_debug" = "yes"; then
+    CFLAGS="$CFLAGS -g"
+  fi
+  #
+  if test "$want_debug" = "no"; then
+    dnl strip off optimizer flags
+    NEWFLAGS=""
+    for flag in $CFLAGS; do
+      case "$flag" in
+        -O*)
+          dnl echo "cut off $flag"
+          ;;
+        *)
+          NEWFLAGS="$NEWFLAGS $flag"
+          ;;
+      esac
+    done
+    CFLAGS=$NEWFLAGS
+  fi
+  #
+])
+
+
+dnl CARES_PROCESS_CC_WARNING_OPTS
+dnl -------------------------------------------------
+dnl Sets compiler options/flags which depend on
+dnl configure's warnings given option.
+
+AC_DEFUN([CARES_PROCESS_CC_WARNING_OPTS], [
+  AC_REQUIRE([CARES_CHECK_OPTION_WARNINGS])dnl
+  AC_REQUIRE([CARES_CHECK_COMPILER])dnl
+  #
+  if test "$compiler_id" = "DECC"; then
+    if test "$want_warnings" = "yes"; then
+      dnl Select a higher warning level than default level2
+      CFLAGS="$CFLAGS -msg_enable level3"
+    fi
+  fi
+  #
+  if test "$compiler_id" = "ICC_unix"; then
+    if test "$want_warnings" = "yes"; then
+      if test "$compiler_num" -gt "600"; then
+        dnl Show errors, warnings, and remarks
+        CPPFLAGS="$CPPFLAGS -Wall"
+        dnl Perform extra compile-time code checking
+        CPPFLAGS="$CPPFLAGS -Wcheck"
+      fi
+    fi
+  fi
+  #
+  if test "$compiler_id" = "GNUC"; then
+    #
+    # FIXME: Some of these warnings should be changed into errors
+    #        and moved to CARES-PROCESS-CC-BASIC-OPTS
+    #
+    if test "$want_warnings" = "yes"; then
+      dnl this is a set of options we believe *ALL* gcc versions support:
+      WARN="-W -Wall -Wwrite-strings -pedantic -Wpointer-arith -Wnested-externs -Winline -Wmissing-prototypes"
+      dnl -Wcast-align is a bit too annoying on all gcc versions ;-)
+      if test "$compiler_num" -ge "207"; then
+        dnl gcc 2.7 or later
+        WARN="$WARN -Wmissing-declarations"
+      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!
+        WARN="$WARN -Wundef -Wno-long-long -Wsign-compare -Wshadow -Wno-multichar"
+      fi
+      if test "$compiler_num" -ge "296"; then
+        dnl gcc 2.96 or later
+        WARN="$WARN -Wfloat-equal"
+      fi
+      if test "$compiler_num" -gt "296"; then
+        dnl this option does not exist in 2.96
+        WARN="$WARN -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.
+      if test "$compiler_num" -ge "303"; then
+        dnl gcc 3.3 and later
+        WARN="$WARN -Wendif-labels -Wstrict-prototypes"
+      fi
+      if test "$compiler_num" -ge "304"; then
+        # try these on gcc 3.4
+        WARN="$WARN -Wdeclaration-after-statement"
+      fi
+      for flag in $CPPFLAGS; do
+        case "$flag" in
+          -I*)
+            dnl Include path, provide a -isystem option for the same dir
+            dnl to prevent warnings in those dirs. The -isystem was not very
+            dnl reliable on earlier gcc versions.
+            add=`echo $flag | sed 's/^-I/-isystem /g'`
+            WARN="$WARN $add"
+            ;;
+        esac
+      done
+      CFLAGS="$CFLAGS $WARN"
+      AC_MSG_NOTICE([Added this set of compiler options: $WARN])
+    fi
+  fi
+  #
+])
+
+
+dnl CARES_PROCESS_DEBUG_BUILD_OPTS
+dnl -------------------------------------------------
+dnl Settings which depend on configure's debug given
+dnl option, and further configure the build process.
+
+AC_DEFUN([CARES_PROCESS_DEBUG_BUILD_OPTS], [
+  AC_REQUIRE([CARES_CHECK_OPTION_DEBUG])dnl
+  AC_BEFORE([$0],[AC_PROG_LIBTOOL])dnl
+  #
+  if test "$want_debug" = "yes"; then
+
+    dnl when doing the debug stuff, use static library only
+    AC_DISABLE_SHARED
+
+    debugbuild="yes"
+
+    dnl the entire --enable-debug is a hack that lives and runs on top of
+    dnl libcurl stuff so this BUILDING_LIBCURL is not THAT much uglier
+    AC_DEFINE(BUILDING_LIBCURL, 1, [when building as static part of libcurl])
+
+    CPPFLAGS="$CPPFLAGS -DCURLDEBUG -I$srcdir/../include"
+  fi
+  #
+])
+
+
diff --git a/ares/m4/cares-confopts.m4 b/ares/m4/cares-confopts.m4
new file mode 100644 (file)
index 0000000..2299b60
--- /dev/null
@@ -0,0 +1,86 @@
+#***************************************************************************
+# $Id$
+#
+# Copyright (C) 2008 by Daniel Stenberg et al
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose and without fee is hereby granted, provided
+# that the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of M.I.T. not be used in advertising or
+# publicity pertaining to distribution of the software without specific,
+# written prior permission.  M.I.T. makes no representations about the
+# suitability of this software for any purpose.  It is provided "as is"
+# without express or implied warranty.
+#
+#***************************************************************************
+
+# File version for 'aclocal' use. Keep it a single number.
+# serial 1
+
+
+dnl CARES_CHECK_OPTION_DEBUG
+dnl -------------------------------------------------
+dnl Verify if configure has been invoked with option
+dnl --enable-debug or --disable-debug, and set shell
+dnl variable want_debug value as appropriate.
+
+AC_DEFUN([CARES_CHECK_OPTION_DEBUG], [
+  AC_BEFORE([$0],[CARES_CHECK_OPTION_WARNINGS])dnl
+  AC_BEFORE([$0],[AC_PROG_CC])dnl
+  AC_MSG_CHECKING([whether to enable debug build options])
+  OPT_DEBUG_BUILD="default"
+  AC_ARG_ENABLE(debug,
+    AC_HELP_STRING([--enable-debug],[Enable debug build options])
+    AC_HELP_STRING([--disable-debug],[Disable debug build options]),
+    OPT_DEBUG_BUILD=$enableval)
+  case "$OPT_DEBUG_BUILD" in
+    no)
+      dnl --disable-debug option used
+      want_debug="no"
+      ;;
+    default)
+      dnl configure option not specified
+      want_debug="no"
+      ;;
+    *)
+      dnl --enable-debug option used
+      want_debug="yes"
+      ;;
+  esac
+  AC_MSG_RESULT([$want_debug])
+])
+
+
+dnl CARES_CHECK_OPTION_WARNINGS
+dnl -------------------------------------------------
+dnl Verify if configure has been invoked with option
+dnl --enable-warnings or --disable-warnings, and set
+DNL shell variable want_warnings as appropriate.
+
+AC_DEFUN([CARES_CHECK_OPTION_WARNINGS], [
+  AC_REQUIRE([CARES_CHECK_OPTION_DEBUG])dnl
+  AC_BEFORE([$0],[AC_PROG_CC])dnl
+  AC_MSG_CHECKING([whether to enable strict compiler warnings])
+  OPT_COMPILER_WARNINGS="default"
+  AC_ARG_ENABLE(warnings,
+    AC_HELP_STRING([--enable-warnings],[Enable strict compiler warnings])
+    AC_HELP_STRING([--disable-warnings],[Disable strict compiler warnings]),
+    OPT_COMPILER_WARNINGS=$enableval)
+  case "$OPT_COMPILER_WARNINGS" in
+    no)
+      dnl --disable-warnings option used
+      want_warnings="no"
+      ;;
+    default)
+      dnl configure option not specified, so
+      dnl use same setting as --enable-debug
+      want_warnings="$want_debug"
+      ;;
+    *)
+      dnl --enable-warnings option used
+      want_warnings="yes"
+      ;;
+  esac
+  AC_MSG_RESULT([$want_warnings])
+])
index ace7a5e..935ee46 100644 (file)
@@ -36,6 +36,9 @@ AC_CONFIG_SRCDIR([lib/urldata.h])
 AM_CONFIG_HEADER(lib/config.h src/config.h include/curl/curlbuild.h)
 AM_MAINTAINER_MODE
 
+CURL_CHECK_OPTION_DEBUG
+CURL_CHECK_OPTION_WARNINGS
+
 dnl SED is mandatory for configure process and libtool.
 dnl Set it now, allowing it to be changed later.
 AC_PATH_PROG([SED], [sed], [not_found],
@@ -147,6 +150,8 @@ AC_SYS_LARGEFILE
 dnl support building of Windows DLLs
 AC_LIBTOOL_WIN32_DLL
 
+CURL_PROCESS_DEBUG_BUILD_OPTS
+
 dnl skip libtool C++ and Fortran compiler checks
 m4_ifdef([AC_PROG_CXX], [m4_undefine([AC_PROG_CXX])])
 m4_defun([AC_PROG_CXX],[])
@@ -245,160 +250,24 @@ dnl **********************************************************************
 dnl platform/compiler/architecture specific checks/flags
 dnl **********************************************************************
 
-ac_cv_compiler="unknown"
-ac_cv_compiler_num="unknown"
-
-AC_MSG_CHECKING([whether we are using the IBM C compiler])
-CURL_CHECK_DEF([__IBMC__], [], [silent])
-if test "$curl_cv_have_def___IBMC__" = "yes"; then
-  AC_MSG_RESULT([yes])
-  ac_cv_compiler="IBMC"
-  dnl Ensure that compiler optimizations are always thread-safe.
-  CFLAGS="$CFLAGS -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.
-  CFLAGS="$CFLAGS -qnoansialias"
-  dnl Force compiler to stop after the compilation phase, without
-  dnl generating an object code file when compilation has errors.
-  CFLAGS="$CFLAGS -qhalt=e"
-else
-  AC_MSG_RESULT([no])
-fi
-
-AC_MSG_CHECKING([whether we are using the Intel C compiler])
-CURL_CHECK_DEF([__INTEL_COMPILER], [], [silent])
-if test "$curl_cv_have_def___INTEL_COMPILER" = "yes"; then
-  AC_MSG_RESULT([yes])
-  ac_cv_compiler="ICC"
-  ac_cv_compiler_num="$curl_cv_def___INTEL_COMPILER"
-  dnl On unix this compiler uses gcc's header files, so
-  dnl we select ANSI C89 dialect plus GNU extensions.
-  CPPFLAGS="$CPPFLAGS -std=gnu89"
-  if test "$ac_cv_compiler_num" -gt "600"; then
-    dnl Show errors, warnings, and remarks
-    CPPFLAGS="$CPPFLAGS -Wall"
-    dnl Perform extra compile-time code checking
-    CPPFLAGS="$CPPFLAGS -Wcheck"
-  fi
-  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
-  CPPFLAGS="$CPPFLAGS -we 140,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
-  if test "$ac_cv_compiler_num" -lt "910"; then
-    CPPFLAGS="$CPPFLAGS -wd 279"
-  fi
-  CPPFLAGS="$CPPFLAGS -wd 981,1469"
-  dnl Disable use of ANSI C aliasing rules in optimizations
-  CFLAGS="$CFLAGS -no-ansi-alias"
-  dnl Disable floating point optimizations
-  CFLAGS="$CFLAGS -fp-model precise -mp"
-else
-  AC_MSG_RESULT([no])
-fi
-
-AC_MSG_CHECKING([whether we are using the DEC/Compaq C compiler])
-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])
-  ac_cv_compiler="DECC"
-  dnl Select strict ANSI C compiler mode
-  CFLAGS="$CFLAGS -std1"
-  dnl Turn off optimizer ANSI C aliasing rules
-  CFLAGS="$CFLAGS -noansi_alias"
-  dnl Select a higher warning level than default level2
-  CFLAGS="$CFLAGS -msg_enable level3"
-  dnl Generate warnings for missing function prototypes
-  CFLAGS="$CFLAGS -warnprotos"
-  dnl Change some warnings into fatal errors
-  CFLAGS="$CFLAGS -msg_fatal toofewargs,toomanyargs"
-else
-  AC_MSG_RESULT([no])
-fi
-
-AC_MSG_CHECKING([whether we are using the GNU C compiler])
-CURL_CHECK_DEF([__GNUC__], [], [silent])
-if test "$curl_cv_have_def___GNUC__" = "yes" &&
-  test "$ac_cv_compiler" = "unknown"; then
-  AC_MSG_RESULT([yes])
-  ac_cv_compiler="GNUC"
-  gccver=`$CC -dumpversion`
-  gccvhi=`echo $gccver | cut -d . -f1`
-  gccvlo=`echo $gccver | cut -d . -f2`
-  gccnum=`(expr $gccvhi "*" 100 + $gccvlo) 2>/dev/null`
-  ac_cv_compiler_num="$gccnum"
-  dnl this is a set of options we believe *ALL* gcc versions support:
-  WARN="-W -Wall -Wwrite-strings -pedantic -Wpointer-arith -Wnested-externs -Winline -Wmissing-prototypes"
-  dnl -Wcast-align is a bit too annoying on all gcc versions ;-)
-  if test "$ac_cv_compiler_num" -ge "207"; then
-    dnl gcc 2.7 or later
-    WARN="$WARN -Wmissing-declarations"
-  fi
-  if test "$ac_cv_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!
-    WARN="$WARN -Wundef -Wno-long-long -Wsign-compare -Wshadow -Wno-multichar"
-  fi
-  if test "$ac_cv_compiler_num" -ge "296"; then
-    dnl gcc 2.96 or later
-    WARN="$WARN -Wfloat-equal"
-  fi
-  if test "$ac_cv_compiler_num" -gt "296"; then
-    dnl this option does not exist in 2.96
-    WARN="$WARN -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.
-  if test "$ac_cv_compiler_num" -ge "303"; then
-    dnl gcc 3.3 and later
-    WARN="$WARN -Wendif-labels -Wstrict-prototypes"
-  fi
-  if test "$ac_cv_compiler_num" -ge "304"; then
-    # try these on gcc 3.4
-    WARN="$WARN -Wdeclaration-after-statement"
-  fi
-  for flag in $CPPFLAGS; do
-    case "$flag" in
-      -I*)
-        dnl Include path, provide a -isystem option for the same dir
-        dnl to prevent warnings in those dirs. The -isystem was not very
-        dnl reliable on earlier gcc versions.
-        add=`echo $flag | sed 's/^-I/-isystem /g'`
-        WARN="$WARN $add"
-        ;;
-    esac
-  done
-  CFLAGS="$CFLAGS $WARN"
-  AC_MSG_NOTICE([Added this set of compiler options: $WARN])
-else
-  AC_MSG_RESULT([no])
-fi
+CURL_CHECK_COMPILER
+CURL_PROCESS_CC_BASIC_OPTS
+CURL_PROCESS_CC_DEBUG_OPTS
+CURL_PROCESS_CC_WARNING_OPTS
 
 case $host in
   #
   x86_64*linux*|amd64*freebsd*|ia64*freebsd*)
     #
-    if test "$ac_cv_compiler" = "ICC"; then
+    if test "$compiler_id" = "ICC_unix"; then
       #
-      if test "$ac_cv_compiler_num" -ge "900" &&
-        test "$ac_cv_compiler_num" -lt "1000"; then
+      if test "$compiler_num" -ge "900" &&
+        test "$compiler_num" -lt "1000"; then
         dnl icc 9.X specific
         CFLAGS="$CFLAGS -i-dynamic"
       fi
       #
-      if test "$ac_cv_compiler_num" -ge "1000"; then
+      if test "$compiler_num" -ge "1000"; then
         dnl icc 10.X or later
         CFLAGS="$CFLAGS -shared-intel"
       fi
@@ -2463,31 +2332,6 @@ AC_HELP_STRING([--disable-sspi],[Disable SSPI]),
 )
 
 dnl ************************************************************
-dnl lame option to switch on debug options
-dnl
-AC_MSG_CHECKING([whether to enable debug options])
-AC_ARG_ENABLE(debug,
-AC_HELP_STRING([--enable-debug],[Enable pedantic debug options])
-AC_HELP_STRING([--disable-debug],[Disable debug options]),
-[ case "$enableval" in
-  no)
-       AC_MSG_RESULT(no)
-       ;;
-  *)   AC_MSG_RESULT(yes)
-
-    CPPFLAGS="$CPPFLAGS -DCURLDEBUG"
-    CFLAGS="$CFLAGS -g"
-
-    dnl set compiler "debug" options to become more picky, and remove
-    dnl optimize options from CFLAGS
-    CURL_CC_DEBUG_OPTS
-       ;;
-  esac
- ],
-       AC_MSG_RESULT(no)
-)
-
-dnl ************************************************************
 dnl disable cryptographic authentication
 dnl
 AC_MSG_CHECKING([whether to enable cryptographic authentication methods])
diff --git a/m4/curl-compilers.m4 b/m4/curl-compilers.m4
new file mode 100644 (file)
index 0000000..a132ec2
--- /dev/null
@@ -0,0 +1,316 @@
+#***************************************************************************
+#                                  _   _ ____  _
+#  Project                     ___| | | |  _ \| |
+#                             / __| | | | |_) | |
+#                            | (__| |_| |  _ <| |___
+#                             \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2008, 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.
+#
+# 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
+# furnished to do so, under the terms of the COPYING file.
+#
+# 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 1
+
+
+dnl CURL_CHECK_COMPILER
+dnl -------------------------------------------------
+dnl Verify if the C compiler being used is known.
+
+AC_DEFUN([CURL_CHECK_COMPILER], [
+  #
+  compiler_id="unknown"
+  compiler_num="0"
+  #
+  CURL_CHECK_COMPILER_DEC
+  CURL_CHECK_COMPILER_IBM
+  CURL_CHECK_COMPILER_INTEL
+  CURL_CHECK_COMPILER_GNU
+  #
+])
+
+
+dnl CURL_CHECK_COMPILER_DEC
+dnl -------------------------------------------------
+dnl Verify if the C compiler being used is DEC's.
+
+AC_DEFUN([CURL_CHECK_COMPILER_DEC], [
+  AC_MSG_CHECKING([whether we are using the DEC/Compaq C compiler])
+  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"
+  else
+    AC_MSG_RESULT([no])
+  fi
+])
+
+
+dnl CURL_CHECK_COMPILER_GNU
+dnl -------------------------------------------------
+dnl Verify if the C compiler being used is GNU's.
+
+AC_DEFUN([CURL_CHECK_COMPILER_GNU], [
+  AC_REQUIRE([CURL_CHECK_COMPILER_INTEL])dnl
+  #
+  AC_MSG_CHECKING([whether we are using the GNU C compiler])
+  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"
+    gccver=`$CC -dumpversion`
+    gccvhi=`echo $gccver | cut -d . -f1`
+    gccvlo=`echo $gccver | cut -d . -f2`
+    compiler_num=`(expr $gccvhi "*" 100 + $gccvlo) 2>/dev/null`
+  else
+    AC_MSG_RESULT([no])
+  fi
+])
+
+
+dnl CURL_CHECK_COMPILER_IBM
+dnl -------------------------------------------------
+dnl Verify if the C compiler being used is IBM's.
+
+AC_DEFUN([CURL_CHECK_COMPILER_IBM], [
+  AC_MSG_CHECKING([whether we are using the IBM C compiler])
+  CURL_CHECK_DEF([__IBMC__], [], [silent])
+  if test "$curl_cv_have_def___IBMC__" = "yes"; then
+    AC_MSG_RESULT([yes])
+    compiler_id="IBMC"
+  else
+    AC_MSG_RESULT([no])
+  fi
+])
+
+
+dnl CURL_CHECK_COMPILER_INTEL
+dnl -------------------------------------------------
+dnl Verify if the C compiler being used is Intel's.
+
+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])
+  CURL_CHECK_DEF([__INTEL_COMPILER], [], [silent])
+  if test "$curl_cv_have_def___INTEL_COMPILER" = "yes"; then
+    AC_MSG_RESULT([yes])
+    CURL_CHECK_DEF([__unix__], [], [silent])
+    if test "$curl_cv_have_def___unix__" = "yes"; then
+      compiler_id="ICC_unix"
+    else
+      compiler_id="ICC_windows"
+    fi
+    compiler_num="$curl_cv_def___INTEL_COMPILER"
+  else
+    AC_MSG_RESULT([no])
+  fi
+])
+
+
+dnl CURL_PROCESS_CC_BASIC_OPTS
+dnl -------------------------------------------------
+dnl Sets compiler options/flags which are independant
+dnl of configure's debug or warnings options.
+
+AC_DEFUN([CURL_PROCESS_CC_BASIC_OPTS], [
+  AC_REQUIRE([CURL_CHECK_COMPILER])dnl
+  #
+  if test "$compiler_id" = "DECC"; then
+    dnl Select strict ANSI C compiler mode
+    CFLAGS="$CFLAGS -std1"
+    dnl Turn off optimizer ANSI C aliasing rules
+    CFLAGS="$CFLAGS -noansi_alias"
+    dnl Generate warnings for missing function prototypes
+    CFLAGS="$CFLAGS -warnprotos"
+    dnl Change some warnings into fatal errors
+    CFLAGS="$CFLAGS -msg_fatal toofewargs,toomanyargs"
+  fi
+  #
+  if test "$compiler_id" = "IBMC"; then
+    dnl Ensure that compiler optimizations are always thread-safe.
+    CFLAGS="$CFLAGS -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.
+    CFLAGS="$CFLAGS -qnoansialias"
+    dnl Force compiler to stop after the compilation phase, without
+    dnl generating an object code file when compilation has errors.
+    CFLAGS="$CFLAGS -qhalt=e"
+  fi
+  #
+  if test "$compiler_id" = "ICC_unix"; then
+    dnl On unix this compiler uses gcc's header files, so
+    dnl we select ANSI C89 dialect plus GNU extensions.
+    CPPFLAGS="$CPPFLAGS -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
+    CPPFLAGS="$CPPFLAGS -we 140,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
+    if test "$compiler_num" -lt "910"; then
+      CPPFLAGS="$CPPFLAGS -wd 279"
+    fi
+    CPPFLAGS="$CPPFLAGS -wd 981,1469"
+    dnl Disable use of ANSI C aliasing rules in optimizations
+    CFLAGS="$CFLAGS -no-ansi-alias"
+    dnl Disable floating point optimizations
+    CFLAGS="$CFLAGS -fp-model precise"
+  fi
+])
+
+
+dnl CURL_PROCESS_CC_DEBUG_OPTS
+dnl -------------------------------------------------
+dnl Sets compiler options/flags which depend on
+dnl configure's debug given option.
+
+AC_DEFUN([CURL_PROCESS_CC_DEBUG_OPTS], [
+  AC_REQUIRE([CURL_CHECK_OPTION_DEBUG])dnl
+  AC_REQUIRE([CURL_CHECK_COMPILER])dnl
+  #
+  if test "$want_debug" = "yes"; then
+    CFLAGS="$CFLAGS -g"
+  fi
+  #
+  if test "$want_debug" = "no"; then
+    dnl strip off optimizer flags
+    NEWFLAGS=""
+    for flag in $CFLAGS; do
+      case "$flag" in
+        -O*)
+          dnl echo "cut off $flag"
+          ;;
+        *)
+          NEWFLAGS="$NEWFLAGS $flag"
+          ;;
+      esac
+    done
+    CFLAGS=$NEWFLAGS
+  fi
+  #
+])
+
+
+dnl CURL_PROCESS_CC_WARNING_OPTS
+dnl -------------------------------------------------
+dnl Sets compiler options/flags which depend on
+dnl configure's warnings given option.
+
+AC_DEFUN([CURL_PROCESS_CC_WARNING_OPTS], [
+  AC_REQUIRE([CURL_CHECK_OPTION_WARNINGS])dnl
+  AC_REQUIRE([CURL_CHECK_COMPILER])dnl
+  #
+  if test "$compiler_id" = "DECC"; then
+    if test "$want_warnings" = "yes"; then
+      dnl Select a higher warning level than default level2
+      CFLAGS="$CFLAGS -msg_enable level3"
+    fi
+  fi
+  #
+  if test "$compiler_id" = "ICC_unix"; then
+    if test "$want_warnings" = "yes"; then
+      if test "$compiler_num" -gt "600"; then
+        dnl Show errors, warnings, and remarks
+        CPPFLAGS="$CPPFLAGS -Wall"
+        dnl Perform extra compile-time code checking
+        CPPFLAGS="$CPPFLAGS -Wcheck"
+      fi
+    fi
+  fi
+  #
+  if test "$compiler_id" = "GNUC"; then
+    #
+    # FIXME: Some of these warnings should be changed into errors
+    #        and moved to CURL-PROCESS-CC-BASIC-OPTS
+    #
+    if test "$want_warnings" = "yes"; then
+      dnl this is a set of options we believe *ALL* gcc versions support:
+      WARN="-W -Wall -Wwrite-strings -pedantic -Wpointer-arith -Wnested-externs -Winline -Wmissing-prototypes"
+      dnl -Wcast-align is a bit too annoying on all gcc versions ;-)
+      if test "$compiler_num" -ge "207"; then
+        dnl gcc 2.7 or later
+        WARN="$WARN -Wmissing-declarations"
+      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!
+        WARN="$WARN -Wundef -Wno-long-long -Wsign-compare -Wshadow -Wno-multichar"
+      fi
+      if test "$compiler_num" -ge "296"; then
+        dnl gcc 2.96 or later
+        WARN="$WARN -Wfloat-equal"
+      fi
+      if test "$compiler_num" -gt "296"; then
+        dnl this option does not exist in 2.96
+        WARN="$WARN -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.
+      if test "$compiler_num" -ge "303"; then
+        dnl gcc 3.3 and later
+        WARN="$WARN -Wendif-labels -Wstrict-prototypes"
+      fi
+      if test "$compiler_num" -ge "304"; then
+        # try these on gcc 3.4
+        WARN="$WARN -Wdeclaration-after-statement"
+      fi
+      for flag in $CPPFLAGS; do
+        case "$flag" in
+          -I*)
+            dnl Include path, provide a -isystem option for the same dir
+            dnl to prevent warnings in those dirs. The -isystem was not very
+            dnl reliable on earlier gcc versions.
+            add=`echo $flag | sed 's/^-I/-isystem /g'`
+            WARN="$WARN $add"
+            ;;
+        esac
+      done
+      CFLAGS="$CFLAGS $WARN"
+      AC_MSG_NOTICE([Added this set of compiler options: $WARN])
+    fi
+  fi
+  #
+])
+
+
+dnl CURL_PROCESS_DEBUG_BUILD_OPTS
+dnl -------------------------------------------------
+dnl Settings which depend on configure's debug given
+dnl option, and further configure the build process.
+
+AC_DEFUN([CURL_PROCESS_DEBUG_BUILD_OPTS], [
+  AC_REQUIRE([CURL_CHECK_OPTION_DEBUG])dnl
+  AC_BEFORE([$0],[AC_PROG_LIBTOOL])dnl
+  #
+  if test "$want_debug" = "yes"; then
+    CPPFLAGS="$CPPFLAGS -DCURLDEBUG"
+  fi
+  #
+])
+
+
+
diff --git a/m4/curl-confopts.m4 b/m4/curl-confopts.m4
new file mode 100644 (file)
index 0000000..5daf2df
--- /dev/null
@@ -0,0 +1,93 @@
+#***************************************************************************
+#                                  _   _ ____  _
+#  Project                     ___| | | |  _ \| |
+#                             / __| | | | |_) | |
+#                            | (__| |_| |  _ <| |___
+#                             \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2008, 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.
+#
+# 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
+# furnished to do so, under the terms of the COPYING file.
+#
+# 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 1
+
+
+dnl CURL_CHECK_OPTION_DEBUG
+dnl -------------------------------------------------
+dnl Verify if configure has been invoked with option
+dnl --enable-debug or --disable-debug, and set shell
+dnl variable want_debug value as appropriate.
+
+AC_DEFUN([CURL_CHECK_OPTION_DEBUG], [
+  AC_BEFORE([$0],[CURL_CHECK_OPTION_DEBUG])dnl
+  AC_BEFORE([$0],[AC_PROG_CC])dnl
+  AC_MSG_CHECKING([whether to enable debug build options])
+  OPT_DEBUG_BUILD="default"
+  AC_ARG_ENABLE(debug,
+    AC_HELP_STRING([--enable-debug],[Enable debug build options])
+    AC_HELP_STRING([--disable-debug],[Disable debug build options]),
+    OPT_DEBUG_BUILD=$enableval)
+  case "$OPT_DEBUG_BUILD" in
+    no)
+      dnl --disable-debug option used
+      want_debug="no"
+      ;;
+    default)
+      dnl configure option not specified
+      want_debug="no"
+      ;;
+    *)
+      dnl --enable-debug option used
+      want_debug="yes"
+      ;;
+  esac
+  AC_MSG_RESULT([$want_debug])
+])
+
+
+dnl CURL_CHECK_OPTION_WARNINGS
+dnl -------------------------------------------------
+dnl Verify if configure has been invoked with option
+dnl --enable-warnings or --disable-warnings, and set
+DNL shell variable want_warnings as appropriate.
+
+AC_DEFUN([CURL_CHECK_OPTION_WARNINGS], [
+  AC_REQUIRE([CURL_CHECK_OPTION_DEBUG])dnl
+  AC_BEFORE([$0],[AC_PROG_CC])dnl
+  AC_MSG_CHECKING([whether to enable strict compiler warnings])
+  OPT_COMPILER_WARNINGS="default"
+  AC_ARG_ENABLE(warnings,
+    AC_HELP_STRING([--enable-warnings],[Enable strict compiler warnings])
+    AC_HELP_STRING([--disable-warnings],[Disable strict compiler warnings]),
+    OPT_COMPILER_WARNINGS=$enableval)
+  case "$OPT_COMPILER_WARNINGS" in
+    no)
+      dnl --disable-warnings option used
+      want_warnings="no"
+      ;;
+    default)
+      dnl configure option not specified, so
+      dnl use same setting as --enable-debug
+      want_warnings="$want_debug"
+      ;;
+    *)
+      dnl --enable-warnings option used
+      want_warnings="yes"
+      ;;
+  esac
+  AC_MSG_RESULT([$want_warnings])
+])
+