stdnoreturn.m4 revision 290001
1# Check for stdnoreturn.h that conforms to C11.
2
3dnl Copyright 2012-2015 Free Software Foundation, Inc.
4dnl This file is free software; the Free Software Foundation
5dnl gives unlimited permission to copy and/or distribute it,
6dnl with or without modifications, as long as this notice is preserved.
7
8# Prepare for substituting <stdnoreturn.h> if it is not supported.
9
10AC_DEFUN([gl_STDNORETURN_H],
11[
12  AC_CACHE_CHECK([for working stdnoreturn.h],
13    [gl_cv_header_working_stdnoreturn_h],
14    [AC_COMPILE_IFELSE(
15       [AC_LANG_PROGRAM(
16          [[#include <stdlib.h>
17            #include <stdnoreturn.h>
18            /* Do not check for 'noreturn' after the return type.
19               C11 allows it, but it's rarely done that way
20               and circa-2012 bleeding-edge GCC rejects it when given
21               -Werror=old-style-declaration.  */
22            noreturn void foo1 (void) { exit (0); }
23            _Noreturn void foo2 (void) { exit (0); }
24            int testit (int argc, char **argv) {
25              if (argc & 1)
26                return 0;
27              (argv[0][0] ? foo1 : foo2) ();
28            }
29          ]])],
30       [gl_cv_header_working_stdnoreturn_h=yes],
31       [gl_cv_header_working_stdnoreturn_h=no])])
32
33  if test $gl_cv_header_working_stdnoreturn_h = yes; then
34    STDNORETURN_H=''
35  else
36    STDNORETURN_H='stdnoreturn.h'
37  fi
38
39  AC_SUBST([STDNORETURN_H])
40  AM_CONDITIONAL([GL_GENERATE_STDNORETURN_H], [test -n "$STDNORETURN_H"])
41])
42