Blame m4/absolute-header.m4

Packit Service c3aa71
# absolute-header.m4 serial 16
Packit Service c3aa71
dnl Copyright (C) 2006-2015 Free Software Foundation, Inc.
Packit Service c3aa71
dnl This file is free software; the Free Software Foundation
Packit Service c3aa71
dnl gives unlimited permission to copy and/or distribute it,
Packit Service c3aa71
dnl with or without modifications, as long as this notice is preserved.
Packit Service c3aa71
Packit Service c3aa71
dnl From Derek Price.
Packit Service c3aa71
Packit Service c3aa71
# gl_ABSOLUTE_HEADER(HEADER1 HEADER2 ...)
Packit Service c3aa71
# ---------------------------------------
Packit Service c3aa71
# Find the absolute name of a header file, testing first if the header exists.
Packit Service c3aa71
# If the header were sys/inttypes.h, this macro would define
Packit Service c3aa71
# ABSOLUTE_SYS_INTTYPES_H to the '""' quoted absolute name of sys/inttypes.h
Packit Service c3aa71
# in config.h
Packit Service c3aa71
# (e.g. '#define ABSOLUTE_SYS_INTTYPES_H "///usr/include/sys/inttypes.h"').
Packit Service c3aa71
# The three "///" are to pacify Sun C 5.8, which otherwise would say
Packit Service c3aa71
# "warning: #include of /usr/include/... may be non-portable".
Packit Service c3aa71
# Use '""', not '<>', so that the /// cannot be confused with a C99 comment.
Packit Service c3aa71
# Note: This macro assumes that the header file is not empty after
Packit Service c3aa71
# preprocessing, i.e. it does not only define preprocessor macros but also
Packit Service c3aa71
# provides some type/enum definitions or function/variable declarations.
Packit Service c3aa71
AC_DEFUN([gl_ABSOLUTE_HEADER],
Packit Service c3aa71
[AC_REQUIRE([AC_CANONICAL_HOST])
Packit Service c3aa71
AC_LANG_PREPROC_REQUIRE()dnl
Packit Service c3aa71
dnl FIXME: gl_absolute_header and ac_header_exists must be used unquoted
Packit Service c3aa71
dnl until we can assume autoconf 2.64 or newer.
Packit Service c3aa71
m4_foreach_w([gl_HEADER_NAME], [$1],
Packit Service c3aa71
  [AS_VAR_PUSHDEF([gl_absolute_header],
Packit Service c3aa71
                  [gl_cv_absolute_]m4_defn([gl_HEADER_NAME]))dnl
Packit Service c3aa71
  AC_CACHE_CHECK([absolute name of <]m4_defn([gl_HEADER_NAME])[>],
Packit Service c3aa71
    m4_defn([gl_absolute_header]),
Packit Service c3aa71
    [AS_VAR_PUSHDEF([ac_header_exists],
Packit Service c3aa71
                    [ac_cv_header_]m4_defn([gl_HEADER_NAME]))dnl
Packit Service c3aa71
    AC_CHECK_HEADERS_ONCE(m4_defn([gl_HEADER_NAME]))dnl
Packit Service c3aa71
    if test AS_VAR_GET(ac_header_exists) = yes; then
Packit Service c3aa71
      gl_ABSOLUTE_HEADER_ONE(m4_defn([gl_HEADER_NAME]))
Packit Service c3aa71
    fi
Packit Service c3aa71
    AS_VAR_POPDEF([ac_header_exists])dnl
Packit Service c3aa71
    ])dnl
Packit Service c3aa71
  AC_DEFINE_UNQUOTED(AS_TR_CPP([ABSOLUTE_]m4_defn([gl_HEADER_NAME])),
Packit Service c3aa71
                     ["AS_VAR_GET(gl_absolute_header)"],
Packit Service c3aa71
                     [Define this to an absolute name of <]m4_defn([gl_HEADER_NAME])[>.])
Packit Service c3aa71
  AS_VAR_POPDEF([gl_absolute_header])dnl
Packit Service c3aa71
])dnl
Packit Service c3aa71
])# gl_ABSOLUTE_HEADER
Packit Service c3aa71
Packit Service c3aa71
# gl_ABSOLUTE_HEADER_ONE(HEADER)
Packit Service c3aa71
# ------------------------------
Packit Service c3aa71
# Like gl_ABSOLUTE_HEADER, except that:
Packit Service c3aa71
#   - it assumes that the header exists,
Packit Service c3aa71
#   - it uses the current CPPFLAGS,
Packit Service c3aa71
#   - it does not cache the result,
Packit Service c3aa71
#   - it is silent.
Packit Service c3aa71
AC_DEFUN([gl_ABSOLUTE_HEADER_ONE],
Packit Service c3aa71
[
Packit Service c3aa71
  AC_REQUIRE([AC_CANONICAL_HOST])
Packit Service c3aa71
  AC_LANG_CONFTEST([AC_LANG_SOURCE([[#include <]]m4_dquote([$1])[[>]])])
Packit Service c3aa71
  dnl AIX "xlc -E" and "cc -E" omit #line directives for header files
Packit Service c3aa71
  dnl that contain only a #include of other header files and no
Packit Service c3aa71
  dnl non-comment tokens of their own. This leads to a failure to
Packit Service c3aa71
  dnl detect the absolute name of <dirent.h>, <signal.h>, <poll.h>
Packit Service c3aa71
  dnl and others. The workaround is to force preservation of comments
Packit Service c3aa71
  dnl through option -C. This ensures all necessary #line directives
Packit Service c3aa71
  dnl are present. GCC supports option -C as well.
Packit Service c3aa71
  case "$host_os" in
Packit Service c3aa71
    aix*) gl_absname_cpp="$ac_cpp -C" ;;
Packit Service c3aa71
    *)    gl_absname_cpp="$ac_cpp" ;;
Packit Service c3aa71
  esac
Packit Service c3aa71
changequote(,)
Packit Service c3aa71
  case "$host_os" in
Packit Service c3aa71
    mingw*)
Packit Service c3aa71
      dnl For the sake of native Windows compilers (excluding gcc),
Packit Service c3aa71
      dnl treat backslash as a directory separator, like /.
Packit Service c3aa71
      dnl Actually, these compilers use a double-backslash as
Packit Service c3aa71
      dnl directory separator, inside the
Packit Service c3aa71
      dnl   # line "filename"
Packit Service c3aa71
      dnl directives.
Packit Service c3aa71
      gl_dirsep_regex='[/\\]'
Packit Service c3aa71
      ;;
Packit Service c3aa71
    *)
Packit Service c3aa71
      gl_dirsep_regex='\/'
Packit Service c3aa71
      ;;
Packit Service c3aa71
  esac
Packit Service c3aa71
  dnl A sed expression that turns a string into a basic regular
Packit Service c3aa71
  dnl expression, for use within "/.../".
Packit Service c3aa71
  gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
Packit Service c3aa71
  gl_header_literal_regex=`echo '$1' \
Packit Service c3aa71
                           | sed -e "$gl_make_literal_regex_sed"`
Packit Service c3aa71
  gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
Packit Service c3aa71
      s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
Packit Service c3aa71
      s|^/[^/]|//&|
Packit Service c3aa71
      p
Packit Service c3aa71
      q
Packit Service c3aa71
    }'
Packit Service c3aa71
changequote([,])
Packit Service c3aa71
  dnl eval is necessary to expand gl_absname_cpp.
Packit Service c3aa71
  dnl Ultrix and Pyramid sh refuse to redirect output of eval,
Packit Service c3aa71
  dnl so use subshell.
Packit Service c3aa71
  AS_VAR_SET([gl_cv_absolute_]AS_TR_SH([[$1]]),
Packit Service c3aa71
[`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD |
Packit Service c3aa71
  sed -n "$gl_absolute_header_sed"`])
Packit Service c3aa71
])