From 1fea66e5279bb0265dfb0089e4253089683d33a1 Mon Sep 17 00:00:00 2001 From: Yang Tse Date: Wed, 8 Oct 2008 16:12:10 +0000 Subject: refactoring of COMPILER_BASIC_OPTS --- ares/m4/cares-compilers.m4 | 231 ++++++++++++++++++++++++++++++++------------- 1 file changed, 164 insertions(+), 67 deletions(-) (limited to 'ares') diff --git a/ares/m4/cares-compilers.m4 b/ares/m4/cares-compilers.m4 index 0bc762320..ef4227f6d 100644 --- a/ares/m4/cares-compilers.m4 +++ b/ares/m4/cares-compilers.m4 @@ -129,7 +129,7 @@ AC_DEFUN([CARES_CHECK_COMPILER_HP], [ CURL_CHECK_DEF([__HP_cc], [], [silent]) if test "$curl_cv_have_def___HP_cc" = "yes"; then AC_MSG_RESULT([yes]) - compiler_id="HPC" + compiler_id="HPUXC" flags_dbg_all="-g -s" flags_dbg_yes="-g" flags_dbg_off="-s" @@ -235,6 +235,64 @@ AC_DEFUN([CARES_CHECK_COMPILER_SUN], [ ]) +dnl CARES_COMPILER_WORKS_IFELSE ([ACTION-IF-WORKS], [ACTION-IF-NOT-WORKS]) +dnl ------------------------------------------------- +dnl Verify if the C compiler seems to work with the +dnl settings that are 'active' at the time the test +dnl is performed. + +AC_DEFUN([CARES_COMPILER_WORKS_IFELSE], [ + dnl compilation capability verification + tmp_compiler_works="unknown" + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + ]],[[ + int i = 1; + return i; + ]]) + ],[ + tmp_compiler_works="yes" + ],[ + tmp_compiler_works="no" + ]) + dnl linking capability verification + if test "$tmp_compiler_works" = "yes"; then + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + ]],[[ + int i = 1; + return i; + ]]) + ],[ + tmp_compiler_works="yes" + ],[ + tmp_compiler_works="no" + ]) + fi + dnl only do runtime verification when not cross-compiling + if test "x$cross_compiling" != "xyes" && + test "$tmp_compiler_works" = "yes"; then + AC_RUN_IFELSE([ + AC_LANG_PROGRAM([[ + ]],[[ + int i = 0; + exit(i); + ]]) + ],[ + tmp_compiler_works="yes" + ],[ + tmp_compiler_works="no" + ]) + fi + dnl branch upon test result + if test "$tmp_compiler_works" = "yes"; then + ifelse($1,,:,[$1]) + ifelse($2,,,[else + $2]) + fi +]) + + dnl CARES_SET_COMPILER_BASIC_OPTS dnl ------------------------------------------------- dnl Sets compiler specific options/flags which do not @@ -244,57 +302,108 @@ dnl options. AC_DEFUN([CARES_SET_COMPILER_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" = "HPC"; then - dnl Disallow run-time dereferencing of null pointers - CFLAGS="$CFLAGS -z" - 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" + if test "$compiler_id" != "unknown"; then + # + tmp_save_CPPFLAGS="$CPPFLAGS" + tmp_save_CFLAGS="$CFLAGS" + tmp_CPPFLAGS="" + tmp_CFLAGS="" + # + case "$compiler_id" in + # + DECC) + # + dnl Select strict ANSI C compiler mode + tmp_CFLAGS="$tmp_CFLAGS -std1" + dnl Turn off optimizer ANSI C aliasing rules + tmp_CFLAGS="$tmp_CFLAGS -noansi_alias" + dnl Generate warnings for missing function prototypes + tmp_CFLAGS="$tmp_CFLAGS -warnprotos" + dnl Change some warnings into fatal errors + tmp_CFLAGS="$tmp_CFLAGS -msg_fatal toofewargs,toomanyargs" + ;; + # + GNUC) + # + dnl Placeholder + tmp_CFLAGS="$tmp_CFLAGS" + ;; + # + HPUXC) + # + dnl Placeholder + tmp_CFLAGS="$tmp_CFLAGS" + ;; + # + IBMC) + # + dnl Ensure that compiler optimizations are always thread-safe. + tmp_CFLAGS="$tmp_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. + tmp_CFLAGS="$tmp_CFLAGS -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" + ;; + # + ICC_unix) + # + 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" + 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" + 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" + ;; + # + ICC_windows) + # + dnl Placeholder + tmp_CFLAGS="$tmp_CFLAGS" + ;; + # + SUNC) + # + dnl Placeholder + tmp_CFLAGS="$tmp_CFLAGS" + ;; + # + esac + # + tmp_CPPFLAGS=`eval echo $tmp_CPPFLAGS` + tmp_CFLAGS=`eval echo $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` + CARES_COMPILER_WORKS_IFELSE([ + AC_MSG_RESULT([yes]) + AC_MSG_NOTICE([compiler options added: $tmp_CFLAGS $tmp_CPPFLAGS]) + ],[ + AC_MSG_RESULT([no]) + AC_MSG_NOTICE([compiler options rejected: $tmp_CFLAGS $tmp_CPPFLAGS]) + dnl restore initial settings + CPPFLAGS="$tmp_save_CPPFLAGS" + CFLAGS="$tmp_save_CFLAGS" + ]) 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 ]) @@ -324,13 +433,7 @@ AC_DEFUN([CARES_SET_COMPILER_DEBUG_OPTS], [ CFLAGS="$CFLAGS $flags_dbg_off" AC_MSG_CHECKING([if compiler accepts debug disabling flags $flags_dbg_off]) fi - AC_COMPILE_IFELSE([ - AC_LANG_PROGRAM([[ - ]],[[ - int i = 1; - return i; - ]]) - ],[ + CARES_COMPILER_WORKS_IFELSE([ AC_MSG_RESULT([yes]) ],[ AC_MSG_RESULT([no]) @@ -398,13 +501,7 @@ AC_DEFUN([CARES_SET_COMPILER_OPTIMIZE_OPTS], [ CFLAGS="$CFLAGS $flags_opt_off" AC_MSG_CHECKING([if compiler accepts optimizer disabling flags $flags_opt_off]) fi - AC_COMPILE_IFELSE([ - AC_LANG_PROGRAM([[ - ]],[[ - int i = 1; - return i; - ]]) - ],[ + CARES_COMPILER_WORKS_IFELSE([ AC_MSG_RESULT([yes]) ],[ AC_MSG_RESULT([no]) @@ -492,7 +589,7 @@ AC_DEFUN([CARES_SET_COMPILER_WARNING_OPTS], [ fi fi # - if test "$compiler_id" = "HPC"; then + if test "$compiler_id" = "HPUXC"; then if test "$want_warnings" = "yes"; then dnl Issue all warnings CFLAGS="$CFLAGS +w1" @@ -597,7 +694,7 @@ AC_DEFUN([CARES_VAR_MATCH_IFELSE], [ if test "$ac_var_match_word" = "yes"; then ifelse($3,,:,[$3]) ifelse($4,,,[else - [$4]]) + $4]) fi ]) -- cgit v1.2.3