From 1fea66e5279bb0265dfb0089e4253089683d33a1 Mon Sep 17 00:00:00 2001
From: Yang Tse <yangsita@gmail.com>
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/m4')

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