freetype-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[freetype2] check-deprecated-warning-for-macosx 42b0ff871 2/5: use my ow


From: Werner Lemberg
Subject: [freetype2] check-deprecated-warning-for-macosx 42b0ff871 2/5: use my own __attribute__((deprecated)) checking
Date: Sun, 9 Oct 2022 05:59:31 -0400 (EDT)

branch: check-deprecated-warning-for-macosx
commit 42b0ff871a2890742f10fde5a657fe8c8e652d28
Author: suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
Commit: suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>

    use my own __attribute__((deprecated)) checking
---
 builds/unix/ax_gcc_func_attribute.m4 | 242 -----------------------------------
 builds/unix/configure.raw            |  99 ++++++++++----
 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}"



reply via email to

[Prev in Thread] Current Thread [Next in Thread]