use my own __attribute__((deprecated)) checking
This commit is contained in:
parent
6ccf0ea362
commit
42b0ff871a
|
@ -1,242 +0,0 @@
|
|||
# ===========================================================================
|
||||
# https://www.gnu.org/software/autoconf-archive/ax_gcc_func_attribute.html
|
||||
# ===========================================================================
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
# AX_GCC_FUNC_ATTRIBUTE(ATTRIBUTE)
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# This macro checks if the compiler supports one of GCC's function
|
||||
# attributes; many other compilers also provide function attributes with
|
||||
# the same syntax. Compiler warnings are used to detect supported
|
||||
# attributes as unsupported ones are ignored by default so quieting
|
||||
# warnings when using this macro will yield false positives.
|
||||
#
|
||||
# The ATTRIBUTE parameter holds the name of the attribute to be checked.
|
||||
#
|
||||
# If ATTRIBUTE is supported define HAVE_FUNC_ATTRIBUTE_<ATTRIBUTE>.
|
||||
#
|
||||
# The macro caches its result in the ax_cv_have_func_attribute_<attribute>
|
||||
# variable.
|
||||
#
|
||||
# The macro currently supports the following function attributes:
|
||||
#
|
||||
# alias
|
||||
# aligned
|
||||
# alloc_size
|
||||
# always_inline
|
||||
# artificial
|
||||
# cold
|
||||
# const
|
||||
# constructor
|
||||
# constructor_priority for constructor attribute with priority
|
||||
# deprecated
|
||||
# destructor
|
||||
# dllexport
|
||||
# dllimport
|
||||
# error
|
||||
# externally_visible
|
||||
# fallthrough
|
||||
# flatten
|
||||
# format
|
||||
# format_arg
|
||||
# gnu_format
|
||||
# gnu_inline
|
||||
# hot
|
||||
# ifunc
|
||||
# leaf
|
||||
# malloc
|
||||
# noclone
|
||||
# noinline
|
||||
# nonnull
|
||||
# noreturn
|
||||
# nothrow
|
||||
# optimize
|
||||
# pure
|
||||
# sentinel
|
||||
# sentinel_position
|
||||
# unused
|
||||
# used
|
||||
# visibility
|
||||
# warning
|
||||
# warn_unused_result
|
||||
# weak
|
||||
# weakref
|
||||
#
|
||||
# Unsupported function attributes will be tested with a prototype
|
||||
# returning an int and not accepting any arguments and the result of the
|
||||
# check might be wrong or meaningless so use with care.
|
||||
#
|
||||
# LICENSE
|
||||
#
|
||||
# Copyright (c) 2013 Gabriele Svelto <gabriele.svelto@gmail.com>
|
||||
#
|
||||
# Copying and distribution of this file, with or without modification, are
|
||||
# permitted in any medium without royalty provided the copyright notice
|
||||
# and this notice are preserved. This file is offered as-is, without any
|
||||
# warranty.
|
||||
|
||||
#serial 13
|
||||
|
||||
AC_DEFUN([AX_GCC_FUNC_ATTRIBUTE], [
|
||||
AS_VAR_PUSHDEF([ac_var], [ax_cv_have_func_attribute_$1])
|
||||
|
||||
AC_CACHE_CHECK([for __attribute__(($1))], [ac_var], [
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([
|
||||
m4_case([$1],
|
||||
[alias], [
|
||||
int foo( void ) { return 0; }
|
||||
int bar( void ) __attribute__(($1("foo")));
|
||||
],
|
||||
[aligned], [
|
||||
int foo( void ) __attribute__(($1(32)));
|
||||
],
|
||||
[alloc_size], [
|
||||
void *foo(int a) __attribute__(($1(1)));
|
||||
],
|
||||
[always_inline], [
|
||||
inline __attribute__(($1)) int foo( void ) { return 0; }
|
||||
],
|
||||
[artificial], [
|
||||
inline __attribute__(($1)) int foo( void ) { return 0; }
|
||||
],
|
||||
[cold], [
|
||||
int foo( void ) __attribute__(($1));
|
||||
],
|
||||
[const], [
|
||||
int foo( void ) __attribute__(($1));
|
||||
],
|
||||
[constructor_priority], [
|
||||
int foo( void ) __attribute__((__constructor__(65535/2)));
|
||||
],
|
||||
[constructor], [
|
||||
int foo( void ) __attribute__(($1));
|
||||
],
|
||||
[deprecated], [
|
||||
int foo( void ) __attribute__(($1("")));
|
||||
],
|
||||
[destructor], [
|
||||
int foo( void ) __attribute__(($1));
|
||||
],
|
||||
[dllexport], [
|
||||
__attribute__(($1)) int foo( void ) { return 0; }
|
||||
],
|
||||
[dllimport], [
|
||||
int foo( void ) __attribute__(($1));
|
||||
],
|
||||
[error], [
|
||||
int foo( void ) __attribute__(($1("")));
|
||||
],
|
||||
[externally_visible], [
|
||||
int foo( void ) __attribute__(($1));
|
||||
],
|
||||
[fallthrough], [
|
||||
void foo( int x ) {switch (x) { case 1: __attribute__(($1)); case 2: break ; }};
|
||||
],
|
||||
[flatten], [
|
||||
int foo( void ) __attribute__(($1));
|
||||
],
|
||||
[format], [
|
||||
int foo(const char *p, ...) __attribute__(($1(printf, 1, 2)));
|
||||
],
|
||||
[gnu_format], [
|
||||
int foo(const char *p, ...) __attribute__((format(gnu_printf, 1, 2)));
|
||||
],
|
||||
[format_arg], [
|
||||
char *foo(const char *p) __attribute__(($1(1)));
|
||||
],
|
||||
[gnu_inline], [
|
||||
inline __attribute__(($1)) int foo( void ) { return 0; }
|
||||
],
|
||||
[hot], [
|
||||
int foo( void ) __attribute__(($1));
|
||||
],
|
||||
[ifunc], [
|
||||
int my_foo( void ) { return 0; }
|
||||
static int (*resolve_foo(void))(void) { return my_foo; }
|
||||
int foo( void ) __attribute__(($1("resolve_foo")));
|
||||
],
|
||||
[leaf], [
|
||||
__attribute__(($1)) int foo( void ) { return 0; }
|
||||
],
|
||||
[malloc], [
|
||||
void *foo( void ) __attribute__(($1));
|
||||
],
|
||||
[noclone], [
|
||||
int foo( void ) __attribute__(($1));
|
||||
],
|
||||
[noinline], [
|
||||
__attribute__(($1)) int foo( void ) { return 0; }
|
||||
],
|
||||
[nonnull], [
|
||||
int foo(char *p) __attribute__(($1(1)));
|
||||
],
|
||||
[noreturn], [
|
||||
void foo( void ) __attribute__(($1));
|
||||
],
|
||||
[nothrow], [
|
||||
int foo( void ) __attribute__(($1));
|
||||
],
|
||||
[optimize], [
|
||||
__attribute__(($1(3))) int foo( void ) { return 0; }
|
||||
],
|
||||
[pure], [
|
||||
int foo( void ) __attribute__(($1));
|
||||
],
|
||||
[sentinel], [
|
||||
int foo(void *p, ...) __attribute__(($1));
|
||||
],
|
||||
[sentinel_position], [
|
||||
int foo(void *p, ...) __attribute__(($1(1)));
|
||||
],
|
||||
[returns_nonnull], [
|
||||
void *foo( void ) __attribute__(($1));
|
||||
],
|
||||
[unused], [
|
||||
int foo( void ) __attribute__(($1));
|
||||
],
|
||||
[used], [
|
||||
int foo( void ) __attribute__(($1));
|
||||
],
|
||||
[visibility], [
|
||||
int foo_def( void ) __attribute__(($1("default")));
|
||||
int foo_hid( void ) __attribute__(($1("hidden")));
|
||||
int foo_int( void ) __attribute__(($1("internal")));
|
||||
int foo_pro( void ) __attribute__(($1("protected")));
|
||||
],
|
||||
[warning], [
|
||||
int foo( void ) __attribute__(($1("")));
|
||||
],
|
||||
[warn_unused_result], [
|
||||
int foo( void ) __attribute__(($1));
|
||||
],
|
||||
[weak], [
|
||||
int foo( void ) __attribute__(($1));
|
||||
],
|
||||
[weakref], [
|
||||
static int foo( void ) { return 0; }
|
||||
static int bar( void ) __attribute__(($1("foo")));
|
||||
],
|
||||
[
|
||||
m4_warn([syntax], [Unsupported attribute $1, the test may fail])
|
||||
int foo( void ) __attribute__(($1));
|
||||
]
|
||||
)], [])
|
||||
],
|
||||
dnl GCC doesn't exit with an error if an unknown attribute is
|
||||
dnl provided but only outputs a warning, so accept the attribute
|
||||
dnl only if no warning were issued.
|
||||
[AS_IF([grep -- -Wattributes conftest.err],
|
||||
[AS_VAR_SET([ac_var], [no])],
|
||||
[AS_VAR_SET([ac_var], [yes])])],
|
||||
[AS_VAR_SET([ac_var], [no])])
|
||||
])
|
||||
|
||||
AS_IF([test yes = AS_VAR_GET([ac_var])],
|
||||
[AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_FUNC_ATTRIBUTE_$1), 1,
|
||||
[Define to 1 if the system has the `$1' function attribute])], [])
|
||||
|
||||
AS_VAR_POPDEF([ac_var])
|
||||
])
|
|
@ -253,28 +253,6 @@ if test "${found_visibility_flag}" = "no"; then
|
|||
AC_MSG_RESULT(no)])
|
||||
fi
|
||||
|
||||
orig_CFLAGS="${CFLAGS}"
|
||||
AX_GCC_FUNC_ATTRIBUTE([deprecated])
|
||||
CFLAGS="${orig_CFLAGS}"
|
||||
CFLAG_error_deprecated=""
|
||||
if test "${ax_cv_have_func_attribute_deprecated}" = "yes"; then
|
||||
AC_MSG_CHECKING([for -Werror=deprecated-declarations compiler flag])
|
||||
orig_CFLAGS="${CFLAGS}"
|
||||
CFLAGS="${CFLAGS} -Werror=deprecated-declarations"
|
||||
AC_COMPILE_IFELSE([
|
||||
AC_LANG_PROGRAM([],[
|
||||
int x __attribute__((deprecated));
|
||||
x = 0;
|
||||
])
|
||||
],[ # compilation passed, as unexpected
|
||||
AC_MSG_RESULT(no)
|
||||
],[ # compilation failed, as expected
|
||||
AC_MSG_RESULT(yes)
|
||||
CFLAG_error_deprecated="-Werror=deprecated-declarations"
|
||||
])
|
||||
fi
|
||||
|
||||
|
||||
# All library tests below try `pkg-config' first. If that fails, a function
|
||||
# from the library is tested in the traditional autoconf way (zlib, bzip2),
|
||||
# or a config script is called (libpng).
|
||||
|
@ -626,6 +604,52 @@ set ${save_config_args}
|
|||
|
||||
# Whether to use Mac OS resource-based fonts.
|
||||
|
||||
# to prevent the dependency with the deprecated APIs on Mac OS X,
|
||||
# check the compiler flag to detect the declared deprecation.
|
||||
#
|
||||
# test the flag "-Werror=deprecated-declarations" availability.
|
||||
# test 1: test whether the compiler accepts __attribute__((deprecated)).
|
||||
# test 2: test whether the compiler passes normal source if the flag is given.
|
||||
# test 3: test whether the compiler rejects the source using deprecated variable.
|
||||
|
||||
CFLAG_error_deprecated=""
|
||||
|
||||
# test 1
|
||||
AC_MSG_CHECKING([${CC} accepts __attribute__((deprecated))])
|
||||
AC_COMPILE_IFELSE([
|
||||
AC_LANG_PROGRAM([],[int x __attribute__((deprecated)); x = 0;])
|
||||
],[
|
||||
AC_MSG_RESULT(yes)
|
||||
# test 2
|
||||
AC_MSG_CHECKING([${CC} compiler flag -Werror=deprecated-declarations])
|
||||
orig_CFLAGS="${CFLAGS}"
|
||||
CFLAGS="-Werror=deprecated-declarations"
|
||||
AC_COMPILE_IFELSE([
|
||||
AC_LANG_PROGRAM([],[int x; x = 0;])
|
||||
],[
|
||||
AC_MSG_RESULT([supported])
|
||||
# test 3
|
||||
AC_MSG_CHECKING([${CC} -Werror=deprecated-declarations works properly])
|
||||
AC_COMPILE_IFELSE([
|
||||
AC_LANG_PROGRAM([],[int x __attribute__((deprecated)); x = 0;])
|
||||
],[
|
||||
AC_MSG_RESULT([no]) # compiler cannot refuse a problematic source.
|
||||
],[
|
||||
AC_MSG_RESULT([yes]) # compiler refuses a problematic source.
|
||||
CFLAG_error_deprecated="-Werror=deprecated-declarations"
|
||||
])
|
||||
],[ # test 2 failed: -Werror=deprecated-declarations is invalid flag.
|
||||
AC_MSG_RESULT([unavailable])
|
||||
])
|
||||
],[ # test 1 failed: __attribute__((deprecate)) is not parsed properly.
|
||||
AC_MSG_RESULT([no])
|
||||
])
|
||||
CFLAGS="${orig_CFLAGS}"
|
||||
if expr "${CC} ${CFLAGS} " : ".* -Wno-deprecated-declarations .*" > /dev/null; then
|
||||
AC_MSG_WARN([-Wno-deprecated-declaraions is given, some warnings would be hidden.])
|
||||
CFLAG_error_deprecated=""
|
||||
fi
|
||||
|
||||
ftmac_c="" # src/base/ftmac.c should not be included in makefiles by default
|
||||
|
||||
AC_ARG_WITH([old-mac-fonts],
|
||||
|
@ -637,6 +661,33 @@ if test x$with_old_mac_fonts = xyes; then
|
|||
ft2_extra_libs="-Wl,-framework,CoreServices -Wl,-framework,ApplicationServices"
|
||||
LDFLAGS="$LDFLAGS ${ft2_extra_libs}"
|
||||
|
||||
AC_LINK_IFELSE([
|
||||
AC_LANG_PROGRAM([
|
||||
|
||||
#if defined(__GNUC__) && defined(__APPLE_CC__)
|
||||
# include <CoreServices/CoreServices.h>
|
||||
# include <ApplicationServices/ApplicationServices.h>
|
||||
#else
|
||||
# include <ConditionalMacros.h>
|
||||
# include <Files.h>
|
||||
#endif
|
||||
|
||||
],
|
||||
[
|
||||
|
||||
short res = 0;
|
||||
|
||||
|
||||
UseResFile( res );
|
||||
|
||||
])
|
||||
],[
|
||||
AC_MSG_RESULT([available])
|
||||
],[
|
||||
AC_MSG_RESULT([not found])
|
||||
])
|
||||
|
||||
AC_MSG_CHECKING([whether UseRes() is deprecated])
|
||||
orig_CFLAGS="${CFLAGS}"
|
||||
CFLAGS="${CFLAGS} ${CFLAG_error_deprecated}"
|
||||
|
||||
|
@ -660,7 +711,7 @@ if test x$with_old_mac_fonts = xyes; then
|
|||
UseResFile( res );
|
||||
|
||||
])],
|
||||
[AC_MSG_RESULT([ok])
|
||||
[AC_MSG_RESULT([not deprecated])
|
||||
CFLAGS="${orig_CFLAGS}"
|
||||
ftmac_c='ftmac.c'
|
||||
AC_MSG_CHECKING([whether OS_INLINE macro is ANSI compatible])
|
||||
|
@ -725,7 +776,7 @@ if test x$with_old_mac_fonts = xyes; then
|
|||
CFLAGS="${orig_CFLAGS}"
|
||||
CFLAGS="${CFLAGS} -DHAVE_TYPE_RESOURCE_INDEX=0"
|
||||
])],
|
||||
[AC_MSG_RESULT([not found])
|
||||
[AC_MSG_RESULT([deprecated, Carbon API would not be used])
|
||||
CFLAGS="${orig_CFLAGS}"
|
||||
ft2_extra_libs=""
|
||||
LDFLAGS="${orig_LDFLAGS}"
|
||||
|
|
Loading…
Reference in New Issue