configure.raw: initial draft to ignore the availability of legacy MacOSX functions, if they are warned as deprecated by the compiler attributes

This commit is contained in:
suzuki toshiya 2022-10-07 16:56:50 +09:00
parent 15f6873495
commit 6ccf0ea362
2 changed files with 331 additions and 41 deletions

View File

@ -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])
])

View File

@ -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/'
;;
*)
;;