dnl GAS_CHECK_DECL_NEEDED(name, typedefname, typedef, headers)
AC_DEFUN([GAS_CHECK_DECL_NEEDED],[
AC_MSG_CHECKING(whether declaration is required for $1)
AC_CACHE_VAL(gas_cv_decl_needed_$1,
AC_TRY_LINK([$4],
[
typedef $3;
$2 x;
x = ($2) $1;
], gas_cv_decl_needed_$1=no, gas_cv_decl_needed_$1=yes))dnl
AC_MSG_RESULT($gas_cv_decl_needed_$1)
if test $gas_cv_decl_needed_$1 = yes; then
 AC_DEFINE([NEED_DECLARATION_]translit($1, [a-z], [A-Z]), 1,
	   [Define if $1 is not declared in system header files.])
fi
])dnl
dnl
dnl Some non-ANSI preprocessors botch requoting inside strings.  That's bad
dnl enough, but on some of those systems, the assert macro relies on requoting
dnl working properly!
dnl GAS_WORKING_ASSERT
AC_DEFUN([GAS_WORKING_ASSERT],
[AC_MSG_CHECKING([for working assert macro])
AC_CACHE_VAL(gas_cv_assert_ok,
AC_TRY_LINK([#include <assert.h>
#include <stdio.h>], [
/* check for requoting problems */
static int a, b, c, d;
static char *s;
assert (!strcmp(s, "foo bar baz quux"));
/* check for newline handling */
assert (a == b
        || c == d);
], gas_cv_assert_ok=yes, gas_cv_assert_ok=no))dnl
AC_MSG_RESULT($gas_cv_assert_ok)
test $gas_cv_assert_ok = yes || AC_DEFINE(BROKEN_ASSERT, 1, [assert broken?])
])dnl
dnl
dnl Since many Bourne shell implementations lack subroutines, use this
dnl hack to simplify the code in configure.ac.
dnl GAS_UNIQ(listvar)
AC_DEFUN([GAS_UNIQ],
[_gas_uniq_list="[$]$1"
_gas_uniq_newlist=""
dnl Protect against empty input list.
for _gas_uniq_i in _gas_uniq_dummy [$]_gas_uniq_list ; do
  case [$]_gas_uniq_i in
  _gas_uniq_dummy) ;;
  *) case " [$]_gas_uniq_newlist " in
       *" [$]_gas_uniq_i "*) ;;
       *) _gas_uniq_newlist="[$]_gas_uniq_newlist [$]_gas_uniq_i" ;;
     esac ;;
  esac
done
$1=[$]_gas_uniq_newlist
])dnl
dnl
dnl Check for existence of member $2 in type $1 in time.h
dnl
AC_DEFUN([GAS_HAVE_TIME_TYPE_MEMBER],
[AC_MSG_CHECKING([for $1.$2 in time.h])
 AC_CACHE_VAL(gas_cv_have_time_type_member_$2,
   [AC_TRY_COMPILE([
#define _BSD_SOURCE 1
#include <time.h>],
      [$1 avar; void* aref = (void*) &avar.$2],
      gas_cv_have_time_type_member_$2=yes,
      gas_cv_have_time_type_member_$2=no
   )])
 if test $gas_cv_have_time_type_member_$2 = yes; then
   AC_DEFINE([HAVE_]translit($2, [a-z], [A-Z]), 1,
	     [Define if <time.h> has $1.$2.])
 fi
 AC_MSG_RESULT($gas_cv_have_time_type_member_$2)
])dnl
dnl
dnl Check for existence of member $2.$3 in type $1 in sys/stat.h
dnl
AC_DEFUN([GAS_HAVE_SYS_STAT_TYPE_MEMBER],
[AC_MSG_CHECKING([for $1.$2.$3 in sys/stat.h])
 AC_CACHE_VAL(gas_cv_have_sys_stat_type_member_$2_$3,
   [AC_TRY_COMPILE([
#define _BSD_SOURCE 1
#include <sys/stat.h>],
      [$1 avar; void* aref = (void*) &avar.$2.$3],
      gas_cv_have_sys_stat_type_member_$2_$3=yes,
      gas_cv_have_sys_stat_type_member_$2_$3=no
   )])
 if test $gas_cv_have_sys_stat_type_member_$2_$3 = yes; then
   AC_DEFINE([HAVE_]translit($2, [a-z], [A-Z])[_]translit($3, [a-z], [A-Z]), 1,
	     [Define if <sys/stat.h> has $1.$2.$3])
 fi
 AC_MSG_RESULT($gas_cv_have_sys_stat_type_member_$2_$3)
])dnl
