summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsuzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>2022-10-07 16:56:50 +0900
committersuzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>2022-10-07 16:57:10 +0900
commit6ccf0ea362dacf374a7de209d02beafb32d39be6 (patch)
treef59366a6fa6d04eae3d7e6dacc46396c822e6e12
parent15f687349528fb0d7cba1ee7a8becf0af29116ec (diff)
downloadfreetype2-6ccf0ea362dacf374a7de209d02beafb32d39be6.tar.gz
configure.raw: initial draft to ignore the availability of legacy MacOSX functions, if they are warned as deprecated by the compiler attributes
-rw-r--r--builds/unix/ax_gcc_func_attribute.m4242
-rw-r--r--builds/unix/configure.raw130
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/'
;;
*)
;;