| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- dnl --------------------------------------------------------------------------
- dnl PA_SYM(prefix, string)
- dnl
- dnl Convert a (semi-) arbitrary string to a CPP symbol
- dnl --------------------------------------------------------------------------
- AC_DEFUN(PA_SYM,
- [[$1]m4_bpatsubsts(m4_toupper([$2]),[[^ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]+],[_],[^._?\(.*\)_.$],[[\1]])])
- dnl --------------------------------------------------------------------------
- dnl PA_ADD_CFLAGS(flag [,actual_flag])
- dnl
- dnl Attempt to add the given option to CFLAGS, if it doesn't break
- dnl compilation. If the option to be tested is different than the
- dnl option that should actually be added, add the option to be
- dnl actually added as a second argument.
- dnl --------------------------------------------------------------------------
- AC_DEFUN(PA_ADD_CFLAGS,
- [AC_MSG_CHECKING([if $CC accepts $1])
- pa_add_cflags__old_cflags="$CFLAGS"
- CFLAGS="$CFLAGS $1"
- AC_TRY_LINK(AC_INCLUDES_DEFAULT,
- [printf("Hello, World!\n");],
- [AC_MSG_RESULT([yes])
- CFLAGS="$pa_add_cflags__old_cflags ifelse([$2],[],[$1],[$2])"
- AC_DEFINE(PA_SYM([CFLAG_],[$1]), 1,
- [Define to 1 if compiled with the `$1' compiler flag])],
- [AC_MSG_RESULT([no])
- CFLAGS="$pa_add_cflags__old_cflags"])])
- dnl --------------------------------------------------------------------------
- dnl PA_ADD_CLDFLAGS(flag [,actual_flag])
- dnl
- dnl Attempt to add the given option to CFLAGS and LDFLAGS,
- dnl if it doesn't break compilation
- dnl --------------------------------------------------------------------------
- AC_DEFUN(PA_ADD_CLDFLAGS,
- [AC_MSG_CHECKING([if $CC accepts $1])
- pa_add_cldflags__old_cflags="$CFLAGS"
- CFLAGS="$CFLAGS $1"
- pa_add_cldflags__old_ldflags="$LDFLAGS"
- LDFLAGS="$LDFLAGS $1"
- AC_TRY_LINK(AC_INCLUDES_DEFAULT,
- [printf("Hello, World!\n");],
- [AC_MSG_RESULT([yes])
- CFLAGS="$pa_add_cldflags__old_cflags ifelse([$2],[],[$1],[$2])"
- LDFLAGS="$pa_add_cldflags__old_ldflags ifelse([$2],[],[$1],[$2])"
- AC_DEFINE(PA_SYM([CFLAG_],[$1]), 1,
- [Define to 1 if compiled with the `$1' compiler flag])],
- [AC_MSG_RESULT([no])
- CFLAGS="$pa_add_cldflags__old_cflags"
- LDFLAGS="$pa_add_cldflags__old_ldflags"])])
- dnl --------------------------------------------------------------------------
- dnl PA_HAVE_FUNC(func_name)
- dnl
- dnl Look for a function with the specified arguments which could be
- dnl a builtin/intrinsic function.
- dnl --------------------------------------------------------------------------
- AC_DEFUN(PA_HAVE_FUNC,
- [AC_MSG_CHECKING([for $1])
- AC_LINK_IFELSE([AC_LANG_SOURCE([
- AC_INCLUDES_DEFAULT
- int main(void) {
- (void)$1$2;
- return 0;
- }
- ])],
- [AC_MSG_RESULT([yes])
- AC_DEFINE(AS_TR_CPP([HAVE_$1]), 1,
- [Define to 1 if you have the `$1' intrinsic function.])],
- [AC_MSG_RESULT([no])])
- ])
- dnl --------------------------------------------------------------------------
- dnl PA_LIBEXT
- dnl
- dnl Guess the library extension based on the object extension
- dnl --------------------------------------------------------------------------
- AC_DEFUN(PA_LIBEXT,
- [AC_MSG_CHECKING([for suffix of library files])
- if test x"$LIBEXT" = x; then
- case "$OBJEXT" in
- obj )
- LIBEXT=lib
- ;;
- *)
- LIBEXT=a
- ;;
- esac
- fi
- AC_MSG_RESULT([$LIBEXT])
- AC_SUBST([LIBEXT])])
- dnl --------------------------------------------------------------------------
- dnl PA_FUNC_ATTRIBUTE(attribute_name)
- dnl
- dnl See if this compiler supports the equivalent of a specific gcc
- dnl attribute on a function, using the __attribute__(()) syntax.
- dnl All arguments except the attribute name are optional.
- dnl PA_FUNC_ATTRIBUTE(attribute, attribute_opts, return_type,
- dnl prototype_args, call_args)
- dnl --------------------------------------------------------------------------
- AC_DEFUN(PA_FUNC_ATTRIBUTE,
- [AC_MSG_CHECKING([if $CC supports the $1 function attribute])
- AC_COMPILE_IFELSE([AC_LANG_SOURCE([
- AC_INCLUDES_DEFAULT
- extern ifelse([$3],[],[void *],[$3]) __attribute__(($1$2))
- bar(ifelse([$4],[],[int],[$4]));
- ifelse([$3],[],[void *],[$3]) foo(void);
- ifelse([$3],[],[void *],[$3]) foo(void)
- {
- ifelse([$3],[void],[],[return])
- bar(ifelse([$5],[],[1],[$5]));
- }
- ])],
- [AC_MSG_RESULT([yes])
- AC_DEFINE(PA_SYM([HAVE_FUNC_ATTRIBUTE_],[$1]), 1,
- [Define to 1 if your compiler supports __attribute__(($1)) on functions])],
- [AC_MSG_RESULT([no])])
- ])
- dnl --------------------------------------------------------------------------
- dnl PA_FUNC_ATTRIBUTE_ERROR
- dnl
- dnl See if this compiler supports __attribute__((error("foo")))
- dnl The generic version of this doesn't work as it makes the compiler
- dnl throw an error by design.
- dnl --------------------------------------------------------------------------
- AC_DEFUN(PA_FUNC_ATTRIBUTE_ERROR,
- [AC_MSG_CHECKING([if $CC supports the error function attribute])
- AC_COMPILE_IFELSE([AC_LANG_SOURCE([
- AC_INCLUDES_DEFAULT
- extern void __attribute__((error("message"))) barf(void);
- void foo(void);
- void foo(void)
- {
- if (0)
- barf();
- }
- ])],
- [AC_MSG_RESULT([yes])
- AC_DEFINE([HAVE_FUNC_ATTRIBUTE_ERROR], 1,
- [Define to 1 if your compiler supports __attribute__((error)) on functions])],
- [AC_MSG_RESULT([no])])
- ])
- dnl --------------------------------------------------------------------------
- dnl PA_ARG_ENABLED(option, helptext [,enabled_action [,disabled_action]])
- dnl PA_ARG_DISABLED(option, helptext [,disabled_action [,enabled_action]])
- dnl
- dnl Simpler-to-use versions of AC_ARG_ENABLED, that include the
- dnl test for $enableval and the AS_HELP_STRING definition
- dnl --------------------------------------------------------------------------
- AC_DEFUN(PA_ARG_ENABLED,
- [AC_ARG_ENABLE([$1], [AS_HELP_STRING([--enable-$1],[$2])], [], [enableval=no])
- AS_IF([test x"$enableval" != xno], [$3], [$4])
- ])
- AC_DEFUN(PA_ARG_DISABLED,
- [AC_ARG_ENABLE([$1],[AS_HELP_STRING([--disable-$1],[$2])], [], [enableval=yes])
- AS_IF([test x"$enableval" = xno], [$3], [$4])
- ])
- dnl --------------------------------------------------------------------------
- dnl PA_ADD_HEADERS(headers...)
- dnl
- dnl Call AC_CHECK_HEADERS(), and add to ac_includes_default if found
- dnl --------------------------------------------------------------------------
- AC_DEFUN(_PA_ADD_HEADER,
- [AC_CHECK_HEADERS([$1],[ac_includes_default="$ac_includes_default
- #include <$1>"
- ])])
- AC_DEFUN(PA_ADD_HEADERS,
- [m4_map_args_w([$1],[_PA_ADD_HEADER(],[)])])
- dnl --------------------------------------------------------------------------
- dnl PA_CHECK_BAD_STDC_INLINE
- dnl
- dnl Some versions of gcc seem to apply -Wmissing-prototypes to C99
- dnl inline functions, which means we need to use GNU inline syntax
- dnl --------------------------------------------------------------------------
- AC_DEFUN(PA_CHECK_BAD_STDC_INLINE,
- [AC_MSG_CHECKING([if $CC supports C99 external inlines])
- AC_COMPILE_IFELSE([AC_LANG_SOURCE([
- AC_INCLUDES_DEFAULT
- /* Don't mistake GNU inlines for c99 */
- #ifdef __GNUC_GNU_INLINE__
- # error "Using gnu inline standard"
- #endif
- inline int foo(int x)
- {
- return x+1;
- }
- ])],
- [AC_MSG_RESULT([yes])
- AC_DEFINE(HAVE_STDC_INLINE, 1,
- [Define to 1 if your compiler supports C99 extern inline])],
- [AC_MSG_RESULT([no])
- PA_ADD_CFLAGS([-fgnu89-inline])])])
|