diff options
Diffstat (limited to 'm4/curl-compilers.m4')
-rw-r--r-- | m4/curl-compilers.m4 | 316 |
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 + # +]) + + + |