freetype-commit
[Top][All Lists]
Advanced

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

[freetype2] check-deprecated-warning-for-macosx 6ccf0ea36 1/5: configure


From: Werner Lemberg
Subject: [freetype2] check-deprecated-warning-for-macosx 6ccf0ea36 1/5: configure.raw: initial draft to ignore the availability of legacy MacOSX functions, if they are warned as deprecated by the compiler attributes
Date: Sun, 9 Oct 2022 05:59:31 -0400 (EDT)

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

    configure.raw: initial draft to ignore the availability of legacy MacOSX 
functions, if they are warned as deprecated by the compiler attributes
---
 builds/unix/ax_gcc_func_attribute.m4 | 242 +++++++++++++++++++++++++++++++++++
 builds/unix/configure.raw            | 130 +++++++++++++------
 2 files changed, 331 insertions(+), 41 deletions(-)

diff --git a/builds/unix/ax_gcc_func_attribute.m4 
b/builds/unix/ax_gcc_func_attribute.m4
new file mode 100644
index 000000000..fa4e089d6
--- /dev/null
+++ b/builds/unix/ax_gcc_func_attribute.m4
@@ -0,0 +1,242 @@
+# ===========================================================================
+#  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 fb943fd2a..ca34c77f6 100644
--- a/builds/unix/configure.raw
+++ b/builds/unix/configure.raw
@@ -253,6 +253,28 @@ 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).
@@ -613,7 +635,11 @@ if test x$with_old_mac_fonts = xyes; then
   orig_LDFLAGS="${LDFLAGS}"
   AC_MSG_CHECKING([CoreServices & ApplicationServices of Mac OS X])
   ft2_extra_libs="-Wl,-framework,CoreServices 
-Wl,-framework,ApplicationServices"
-  LDFLAGS="$LDFLAGS $ft2_extra_libs"
+  LDFLAGS="$LDFLAGS ${ft2_extra_libs}"
+
+  orig_CFLAGS="${CFLAGS}"
+  CFLAGS="${CFLAGS} ${CFLAG_error_deprecated}"
+
   AC_LINK_IFELSE([
     AC_LANG_PROGRAM([
 
@@ -635,10 +661,11 @@ if test x$with_old_mac_fonts = xyes; then
 
       ])],
     [AC_MSG_RESULT([ok])
+     CFLAGS="${orig_CFLAGS}"
      ftmac_c='ftmac.c'
      AC_MSG_CHECKING([whether OS_INLINE macro is ANSI compatible])
-     orig_CFLAGS="$CFLAGS -DFT_MACINTOSH"
-     CFLAGS="$CFLAGS $XX_CFLAGS $XX_ANSIFLAGS"
+     orig_CFLAGS="${CFLAGS} -DFT_MACINTOSH"
+     CFLAGS="${CFLAGS} ${XX_CFLAGS} ${XX_ANSIFLAGS}"
      AC_COMPILE_IFELSE([
        AC_LANG_PROGRAM([
 
@@ -662,15 +689,15 @@ if test x$with_old_mac_fonts = xyes; then
 
          ])],
        [AC_MSG_RESULT([ok])
-        CFLAGS="$orig_CFLAGS"
-        CFLAGS="$CFLAGS -DHAVE_ANSI_OS_INLINE=1"
+        CFLAGS="${orig_CFLAGS}"
+        CFLAGS="${CFLAGS} -DHAVE_ANSI_OS_INLINE=1"
        ],
        [AC_MSG_RESULT([no, ANSI incompatible])
-        CFLAGS="$orig_CFLAGS"
+        CFLAGS="${orig_CFLAGS}"
        ])
      AC_MSG_CHECKING([type ResourceIndex])
-     orig_CFLAGS="$CFLAGS"
-     CFLAGS="$CFLAGS $XX_CFLAGS $XX_ANSIFLAGS"
+     orig_CFLAGS="${CFLAGS}"
+     CFLAGS="${CFLAGS} ${XX_CFLAGS} ${XX_ANSIFLAGS}"
      AC_COMPILE_IFELSE([
        AC_LANG_PROGRAM([
 
@@ -691,22 +718,23 @@ if test x$with_old_mac_fonts = xyes; then
 
          ])],
        [AC_MSG_RESULT([ok])
-        CFLAGS="$orig_CFLAGS"
-        CFLAGS="$CFLAGS -DHAVE_TYPE_RESOURCE_INDEX=1"
+        CFLAGS="${orig_CFLAGS}"
+        CFLAGS="${CFLAGS} -DHAVE_TYPE_RESOURCE_INDEX=1"
        ],
        [AC_MSG_RESULT([no])
-        CFLAGS="$orig_CFLAGS"
-        CFLAGS="$CFLAGS -DHAVE_TYPE_RESOURCE_INDEX=0"
+        CFLAGS="${orig_CFLAGS}"
+        CFLAGS="${CFLAGS} -DHAVE_TYPE_RESOURCE_INDEX=0"
        ])],
     [AC_MSG_RESULT([not found])
+     CFLAGS="${orig_CFLAGS}"
      ft2_extra_libs=""
      LDFLAGS="${orig_LDFLAGS}"
-     CFLAGS="$CFLAGS -DDARWIN_NO_CARBON"])
+     CFLAGS="${CFLAGS} -DDARWIN_NO_CARBON"])
 else
-  case x$host_os in
+  case "x${host_os}" in
   xdarwin*)
     dnl AC_MSG_WARN([host system is MacOS but configured to build without 
Carbon])
-    CFLAGS="$CFLAGS -DDARWIN_NO_CARBON"
+    CFLAGS="${CFLAGS} -DDARWIN_NO_CARBON"
     ;;
   *)
     ;;
@@ -719,9 +747,11 @@ fi
 AC_ARG_WITH([fsspec],
   AS_HELP_STRING([--with-fsspec],
                  [use obsolete FSSpec API of MacOS, if available 
(default=yes)]))
-if test x$with_fsspec = xno; then
-  CFLAGS="$CFLAGS -DHAVE_FSSPEC=0"
-elif test x$with_old_mac_fonts = xyes -a x$with_fsspec != x; then
+if test "x${with_fsspec}" = "xno"; then
+  CFLAGS="${CFLAGS} -DHAVE_FSSPEC=0"
+elif test "x${with_old_mac_fonts}" = "xyes" -a "x${with_fsspec}" != "x"; then
+  orig_CFLAGS="${CFLAGS}"
+  CFLAGS="${CFLAGS} ${CFLAG_error_deprecated}"
   AC_MSG_CHECKING([FSSpec-based FileManager])
   AC_LINK_IFELSE([
     AC_LANG_PROGRAM([
@@ -750,9 +780,11 @@ elif test x$with_old_mac_fonts = xyes -a x$with_fsspec != 
x; then
 
       ])],
     [AC_MSG_RESULT([ok])
-     CFLAGS="$CFLAGS -DHAVE_FSSPEC=1"],
+     CFLAGS="${orig_CFLAGS}"
+     CFLAGS="${CFLAGS} -DHAVE_FSSPEC=1"],
     [AC_MSG_RESULT([not found])
-     CFLAGS="$CFLAGS -DHAVE_FSSPEC=0"])
+     CFLAGS="${orig_CFLAGS}"
+     CFLAGS="${CFLAGS} -DHAVE_FSSPEC=0"])
 fi
 
 
@@ -761,14 +793,16 @@ fi
 AC_ARG_WITH([fsref],
   AS_HELP_STRING([--with-fsref],
                  [use Carbon FSRef API of MacOS, if available (default=yes)]))
-if test x$with_fsref = xno; then
+if test "x${with_fsref}" = "xno"; then
   AC_MSG_WARN([
 *** WARNING
     FreeType2 built without FSRef API cannot load
     data-fork fonts on MacOS, except of XXX.dfont.
     ])
-  CFLAGS="$CFLAGS -DHAVE_FSREF=0"
-elif test x$with_old_mac_fonts = xyes -a x$with_fsref != x; then
+  CFLAGS="${CFLAGS} -DHAVE_FSREF=0"
+elif test "x${with_old_mac_fonts}" = "xyes" -a "x${with_fsref}" != "x"; then
+  orig_CFLAGS="${CFLAGS}"
+  CFLAGS="${CFLAGS} ${CFLAG_error_deprecated}"
   AC_MSG_CHECKING([FSRef-based FileManager])
   AC_LINK_IFELSE([
     AC_LANG_PROGRAM([
@@ -817,9 +851,11 @@ elif test x$with_old_mac_fonts = xyes -a x$with_fsref != 
x; then
 #endif
       ])],
     [AC_MSG_RESULT([ok])
-     CFLAGS="$CFLAGS -DHAVE_FSREF=1"],
+     CFLAGS="${orig_CFLAGS}"
+     CFLAGS="${CFLAGS} -DHAVE_FSREF=1"],
     [AC_MSG_RESULT([not found])
-     CFLAGS="$CFLAGS -DHAVE_FSREF=0"])
+     CFLAGS="${orig_CFLAGS}"
+     CFLAGS="${CFLAGS} -DHAVE_FSREF=0"])
 fi
 
 
@@ -829,9 +865,11 @@ fi
 AC_ARG_WITH([quickdraw-toolbox],
   AS_HELP_STRING([--with-quickdraw-toolbox],
                  [use MacOS QuickDraw in ToolBox, if available (default=yes)]))
-if test x$with_quickdraw_toolbox = xno; then
+if test "x${with_quickdraw_toolbox}" = "xno"; then
   CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_TOOLBOX=0"
-elif test x$with_old_mac_fonts = xyes -a x$with_quickdraw_toolbox != x; then
+elif test "x${with_old_mac_fonts}" = "xyes" -a "x${with_quickdraw_toolbox}" != 
"x"; then
+  orig_CFLAGS="${CFLAGS}"
+  CFLAGS="${CFLAGS} ${CFLAG_error_deprecated}"
   AC_MSG_CHECKING([QuickDraw FontManager functions in ToolBox])
   AC_LINK_IFELSE([
     AC_LANG_PROGRAM([
@@ -859,9 +897,11 @@ elif test x$with_old_mac_fonts = xyes -a 
x$with_quickdraw_toolbox != x; then
 
       ])],
     [AC_MSG_RESULT([ok])
-     CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_TOOLBOX=1"],
+     CFLAGS="${orig_CFLAGS}"
+     CFLAGS="${CFLAGS} -DHAVE_QUICKDRAW_TOOLBOX=1"],
     [AC_MSG_RESULT([not found])
-     CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_TOOLBOX=0"])
+     CFLAGS="${orig_CFLAGS}"
+     CFLAGS="${CFLAGS} -DHAVE_QUICKDRAW_TOOLBOX=0"])
 fi
 
 
@@ -871,9 +911,11 @@ fi
 AC_ARG_WITH([quickdraw-carbon],
   AS_HELP_STRING([--with-quickdraw-carbon],
                  [use MacOS QuickDraw in Carbon, if available (default=yes)]))
-if test x$with_quickdraw_carbon = xno; then
-  CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_CARBON=0"
-elif test x$with_old_mac_fonts = xyes -a x$with_quickdraw_carbon != x; then
+if test "x${with_quickdraw_carbon}" = "xno"; then
+  CFLAGS="${CFLAGS} -DHAVE_QUICKDRAW_CARBON=0"
+elif test "x${with_old_mac_fonts}" = "xyes" -a "x${with_quickdraw_carbon}" != 
"x"; then
+  orig_CFLAGS="${CFLAGS}"
+  CFLAGS="${CFLAGS} ${CFLAG_error_deprecated}"
   AC_MSG_CHECKING([QuickDraw FontManager functions in Carbon])
   AC_LINK_IFELSE([
     AC_LANG_PROGRAM([
@@ -911,9 +953,11 @@ elif test x$with_old_mac_fonts = xyes -a 
x$with_quickdraw_carbon != x; then
 
       ])],
     [AC_MSG_RESULT([ok])
-     CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_CARBON=1"],
+     CFLAGS="${orig_CFLAGS}"
+     CFLAGS="${CFLAGS} -DHAVE_QUICKDRAW_CARBON=1"],
     [AC_MSG_RESULT([not found])
-     CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_CARBON=0"])
+     CFLAGS="${orig_CFLAGS}"
+     CFLAGS="${CFLAGS} -DHAVE_QUICKDRAW_CARBON=0"])
 fi
 
 
@@ -922,9 +966,11 @@ fi
 AC_ARG_WITH([ats],
   AS_HELP_STRING([--with-ats],
                  [use AppleTypeService, if available (default=yes)]))
-if test x$with_ats = xno; then
-  CFLAGS="$CFLAGS -DHAVE_ATS=0"
-elif test x$with_old_mac_fonts = xyes -a x$with_ats != x; then
+if test "x${with_ats}" = "xno"; then
+  CFLAGS="${CFLAGS} -DHAVE_ATS=0"
+elif test "x${with_old_mac_fonts}" = "xyes" -a "x${with_ats}" != "x"; then
+  orig_CFLAGS="${CFLAGS}"
+  CFLAGS="${CFLAGS} ${CFLAG_error_deprecated}"
   AC_MSG_CHECKING([AppleTypeService functions])
   AC_LINK_IFELSE([
     AC_LANG_PROGRAM([
@@ -950,19 +996,21 @@ elif test x$with_old_mac_fonts = xyes -a x$with_ats != x; 
then
 
       ])],
     [AC_MSG_RESULT([ok])
-     CFLAGS="$CFLAGS -DHAVE_ATS=1"],
+     CFLAGS="${orig_CFLAGS}"
+     CFLAGS="${CFLAGS} -DHAVE_ATS=1"],
     [AC_MSG_RESULT([not found])
-     CFLAGS="$CFLAGS -DHAVE_ATS=0"])
+     CFLAGS="${orig_CFLAGS}"
+     CFLAGS="${CFLAGS} -DHAVE_ATS=0"])
 fi
 
-case "$CFLAGS" in
+case "${CFLAGS}" in
   *HAVE_FSSPEC* | *HAVE_FSREF* | *HAVE_QUICKDRAW* | *HAVE_ATS* )
     AC_MSG_WARN([
 *** WARNING
     FSSpec/FSRef/QuickDraw/ATS options are explicitly given,
     thus it is recommended to replace src/base/ftmac.c by builds/mac/ftmac.c.
     ])
-    CFLAGS="$CFLAGS "'-I$(TOP_DIR)/builds/mac/'
+    CFLAGS="${CFLAGS} "'-I$(TOP_DIR)/builds/mac/'
     ;;
   *)
     ;;



reply via email to

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