Macro: ac_prog_cc_strict_prototypes

Back to the Main Page. | Download the M4 Source.

# ac_prog_cc_strict_prototypes

## Synopsis

`AC_PROG_CC_STRICT_PROTOTYPES(substvar [,hard])`

## Version

1.1.1.1 (2001/07/26) C_Support @ ac-archive-0.5.32

## Author

Guido Draheim <guidod@gmx.de>

## Description

Try to find a compiler option that warns when a function prototype is not fully defined. Enable it only if the the system headers are reasonably clean with respect to compiling with strict-prototypes.

The sanity check is done by looking at sys/signal.h which has a set of macro-definitions SIG_DFL and SIG_IGN that are cast to the local signal-handler type. If that signal-handler type is not fully qualified then the system headers are not seen as strictly prototype clean.

Currently this macro knows about GCC. hopefully will evolve to use: Solaris C compiler, Digital Unix C compiler, C for AIX Compiler, HP-UX C compiler, and IRIX C compiler.

## M4 Source Code

    AC_DEFUN([AC_PROG_CC_STRICT_PROTOTYPES], [
      pushdef([CV], ac_cv_prog_cc_strict_prototypes)dnl
      hard=$2
      if test -z "$hard"; then
        msg="C to warn at nonstrict prototypes"
      else
        msg="C to require strict prototypes"
      fi
      AC_CACHE_CHECK($msg, CV, [
      cat > conftest.c <<EOF
    #include <sys/signal.h>
    int main (void)
    {
       if (signal (SIGINT, SIG_IGN) == SIG_DFL) return 0;
       return 1;
    }
    EOF

      dnl GCC
      if test "$GCC" = "yes"; then
        if test -z "$hard"; then
          CV="-Wstrict-prototypes"
        else
          CV="-fstrict-prototypes -Wstrict-prototypes"
        fi

        if test -n "`${CC-cc} -c $CV conftest.c 2>&1`" ; then
          CV="suppressed...sys/stat.h"
        fi

      dnl Solaris C compiler

      dnl HP-UX C compiler

      dnl Digital Unix C compiler

      dnl C for AIX Compiler

      dnl IRIX C compiler

      fi
      rm -f conftest.*
      ])
      if test -z "[$]$1" ; then
        if test -n "$CV" ; then
          case "$CV" in
            *...*) $1="" ;; # known but suppressed
            *)  $1="$CV" ;;
          esac
        fi
      fi
      AC_SUBST($1)
      popdef([CV])dnl
    ])