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_. -# -# The macro caches its result in the ax_cv_have_func_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 -# -# 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 +# include +#else +# include +# include +#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}"