summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsuzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>2022-10-07 22:20:52 +0900
committersuzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>2022-10-07 22:21:09 +0900
commit42b0ff871a2890742f10fde5a657fe8c8e652d28 (patch)
tree51e5ce8361489770fd9dadd7cb17fc2de8d9ecc0
parent6ccf0ea362dacf374a7de209d02beafb32d39be6 (diff)
downloadfreetype2-42b0ff871a2890742f10fde5a657fe8c8e652d28.tar.gz
use my own __attribute__((deprecated)) checking
-rw-r--r--builds/unix/ax_gcc_func_attribute.m4242
-rw-r--r--builds/unix/configure.raw99
2 files changed, 75 insertions, 266 deletions
diff --git a/builds/unix/ax_gcc_func_attribute.m4 b/builds/unix/ax_gcc_func_attribute.m4
deleted file mode 100644
index fa4e089d6..000000000
--- a/builds/unix/ax_gcc_func_attribute.m4
+++ /dev/null
@@ -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])
-])
diff --git a/builds/unix/configure.raw b/builds/unix/configure.raw
index ca34c77f6..12a2c6f1e 100644
--- a/builds/unix/configure.raw
+++ b/builds/unix/configure.raw
@@ -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}"