aboutsummaryrefslogtreecommitdiff
path: root/m4/curl-compilers.m4
diff options
context:
space:
mode:
authorYang Tse <yangsita@gmail.com>2008-10-02 03:56:55 +0000
committerYang Tse <yangsita@gmail.com>2008-10-02 03:56:55 +0000
commit2245ac2f884513bb3145f841fb3a9aed80b6ff34 (patch)
treebc60c78e19ae34e8b57ef5bf19c12fe30ae33d33 /m4/curl-compilers.m4
parent1bfaf76dd09a12ccd0dea7f4ec7d1a34b38cbce5 (diff)
Initial attempt to support configure's --(dis|en)able-warnings
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.
Diffstat (limited to 'm4/curl-compilers.m4')
-rw-r--r--m4/curl-compilers.m4316
1 files changed, 316 insertions, 0 deletions
diff --git a/m4/curl-compilers.m4 b/m4/curl-compilers.m4
new file mode 100644
index 000000000..a132ec28b
--- /dev/null
+++ b/m4/curl-compilers.m4
@@ -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
+ #
+])
+
+
+