Blame acinclude.m4

Packit d370c2
dnl Macros to check the presence of generic (non-typed) symbols.
Packit d370c2
dnl Copyright (c) 2006-2008 Diego Pettenò <flameeyes@gmail.com>
Packit d370c2
dnl Copyright (c) 2006-2008 xine project
Packit d370c2
dnl Copyright (c) 2012 Lucas De Marchi <lucas.de.marchi@gmail.com>
Packit d370c2
dnl
Packit d370c2
dnl This program is free software; you can redistribute it and/or modify
Packit d370c2
dnl it under the terms of the GNU General Public License as published by
Packit d370c2
dnl the Free Software Foundation; either version 2, or (at your option)
Packit d370c2
dnl any later version.
Packit d370c2
dnl
Packit d370c2
dnl This program is distributed in the hope that it will be useful,
Packit d370c2
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit d370c2
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit d370c2
dnl GNU General Public License for more details.
Packit d370c2
dnl
Packit d370c2
dnl You should have received a copy of the GNU General Public License
Packit d370c2
dnl along with this program; if not, write to the Free Software
Packit d370c2
dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
Packit d370c2
dnl 02110-1301, USA.
Packit d370c2
dnl
Packit d370c2
dnl As a special exception, the copyright owners of the
Packit d370c2
dnl macro gives unlimited permission to copy, distribute and modify the
Packit d370c2
dnl configure scripts that are the output of Autoconf when processing the
Packit d370c2
dnl Macro. You need not follow the terms of the GNU General Public
Packit d370c2
dnl License when using or distributing such scripts, even though portions
Packit d370c2
dnl of the text of the Macro appear in them. The GNU General Public
Packit d370c2
dnl License (GPL) does govern all other use of the material that
Packit d370c2
dnl constitutes the Autoconf Macro.
Packit d370c2
dnl
Packit d370c2
dnl This special exception to the GPL applies to versions of the
Packit d370c2
dnl Autoconf Macro released by this project. When you make and
Packit d370c2
dnl distribute a modified version of the Autoconf Macro, you may extend
Packit d370c2
dnl this special exception to the GPL to apply to your modified version as
Packit d370c2
dnl well.
Packit d370c2
Packit d370c2
dnl Check if FLAG in ENV-VAR is supported by compiler and append it
Packit d370c2
dnl to WHERE-TO-APPEND variable. Note that we invert -Wno-* checks to
Packit d370c2
dnl -W* as gcc cannot test for negated warnings.
Packit d370c2
dnl CC_CHECK_FLAG_APPEND([WHERE-TO-APPEND], [ENV-VAR], [FLAG])
Packit d370c2
Packit d370c2
AC_DEFUN([CC_CHECK_FLAG_APPEND], [
Packit d370c2
  AC_CACHE_CHECK([if $CC supports flag $3 in envvar $2],
Packit d370c2
                 AS_TR_SH([cc_cv_$2_$3]),
Packit d370c2
          [eval "AS_TR_SH([cc_save_$2])='${$2}'"
Packit d370c2
           eval "AS_TR_SH([$2])='-Werror `echo "$3" | sed 's/^-Wno-/-W/'`'"
Packit d370c2
           AC_LINK_IFELSE([AC_LANG_SOURCE([int main(void) { return 0; } ])],
Packit d370c2
                          [eval "AS_TR_SH([cc_cv_$2_$3])='yes'"],
Packit d370c2
                          [eval "AS_TR_SH([cc_cv_$2_$3])='no'"])
Packit d370c2
           eval "AS_TR_SH([$2])='$cc_save_$2'"])
Packit d370c2
Packit d370c2
  AS_IF([eval test x$]AS_TR_SH([cc_cv_$2_$3])[ = xyes],
Packit d370c2
        [eval "$1='${$1} $3'"])
Packit d370c2
])
Packit d370c2
Packit d370c2
dnl CC_CHECK_FLAGS_APPEND([WHERE-TO-APPEND], [ENV-VAR], [FLAG1 FLAG2])
Packit d370c2
AC_DEFUN([CC_CHECK_FLAGS_APPEND], [
Packit d370c2
  for flag in $3; do
Packit d370c2
    CC_CHECK_FLAG_APPEND($1, $2, $flag)
Packit d370c2
  done
Packit d370c2
])
Packit d370c2
Packit d370c2
dnl Check if the flag is supported by linker (cacheable)
Packit d370c2
dnl CC_CHECK_LDFLAGS([FLAG], [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND])
Packit d370c2
Packit d370c2
AC_DEFUN([CC_CHECK_LDFLAGS], [
Packit d370c2
  AC_CACHE_CHECK([if $CC supports $1 flag],
Packit d370c2
    AS_TR_SH([cc_cv_ldflags_$1]),
Packit d370c2
    [ac_save_LDFLAGS="$LDFLAGS"
Packit d370c2
     LDFLAGS="$LDFLAGS $1"
Packit d370c2
     AC_LINK_IFELSE([int main() { return 1; }],
Packit d370c2
       [eval "AS_TR_SH([cc_cv_ldflags_$1])='yes'"],
Packit d370c2
       [eval "AS_TR_SH([cc_cv_ldflags_$1])="])
Packit d370c2
     LDFLAGS="$ac_save_LDFLAGS"
Packit d370c2
    ])
Packit d370c2
Packit d370c2
  AS_IF([eval test x$]AS_TR_SH([cc_cv_ldflags_$1])[ = xyes],
Packit d370c2
    [$2], [$3])
Packit d370c2
])
Packit d370c2
Packit d370c2
dnl define the LDFLAGS_NOUNDEFINED variable with the correct value for
Packit d370c2
dnl the current linker to avoid undefined references in a shared object.
Packit d370c2
AC_DEFUN([CC_NOUNDEFINED], [
Packit d370c2
  dnl We check $host for which systems to enable this for.
Packit d370c2
  AC_REQUIRE([AC_CANONICAL_HOST])
Packit d370c2
Packit d370c2
  case $host in
Packit d370c2
     dnl FreeBSD (et al.) does not complete linking for shared objects when pthreads
Packit d370c2
     dnl are requested, as different implementations are present; to avoid problems
Packit d370c2
     dnl use -Wl,-z,defs only for those platform not behaving this way.
Packit d370c2
     *-freebsd* | *-openbsd*) ;;
Packit d370c2
     *)
Packit d370c2
        dnl First of all check for the --no-undefined variant of GNU ld. This allows
Packit d370c2
        dnl for a much more readable command line, so that people can understand what
Packit d370c2
        dnl it does without going to look for what the heck -z defs does.
Packit d370c2
        for possible_flags in "-Wl,--no-undefined" "-Wl,-z,defs"; do
Packit d370c2
           CC_CHECK_LDFLAGS([$possible_flags], [LDFLAGS_NOUNDEFINED="$possible_flags"])
Packit d370c2
           break
Packit d370c2
        done
Packit d370c2
     ;;
Packit d370c2
  esac
Packit d370c2
Packit d370c2
  AC_SUBST([LDFLAGS_NOUNDEFINED])
Packit d370c2
])
Packit d370c2
Packit d370c2
dnl Check for a -Werror flag or equivalent. -Werror is the GCC
Packit d370c2
dnl and ICC flag that tells the compiler to treat all the warnings
Packit d370c2
dnl as fatal. We usually need this option to make sure that some
Packit d370c2
dnl constructs (like attributes) are not simply ignored.
Packit d370c2
dnl
Packit d370c2
dnl Other compilers don't support -Werror per se, but they support
Packit d370c2
dnl an equivalent flag:
Packit d370c2
dnl  - Sun Studio compiler supports -errwarn=%all
Packit d370c2
AC_DEFUN([CC_CHECK_WERROR], [
Packit d370c2
  AC_CACHE_CHECK(
Packit d370c2
    [for $CC way to treat warnings as errors],
Packit d370c2
    [cc_cv_werror],
Packit d370c2
    [CC_CHECK_CFLAGS_SILENT([-Werror], [cc_cv_werror=-Werror],
Packit d370c2
      [CC_CHECK_CFLAGS_SILENT([-errwarn=%all], [cc_cv_werror=-errwarn=%all])])
Packit d370c2
    ])
Packit d370c2
])
Packit d370c2
Packit d370c2
AC_DEFUN([CC_CHECK_ATTRIBUTE], [
Packit d370c2
  AC_REQUIRE([CC_CHECK_WERROR])
Packit d370c2
  AC_CACHE_CHECK([if $CC supports __attribute__(( ifelse([$2], , [$1], [$2]) ))],
Packit d370c2
    AS_TR_SH([cc_cv_attribute_$1]),
Packit d370c2
    [ac_save_CFLAGS="$CFLAGS"
Packit d370c2
     CFLAGS="$CFLAGS $cc_cv_werror"
Packit d370c2
     AC_COMPILE_IFELSE([AC_LANG_SOURCE([$3])],
Packit d370c2
       [eval "AS_TR_SH([cc_cv_attribute_$1])='yes'"],
Packit d370c2
       [eval "AS_TR_SH([cc_cv_attribute_$1])='no'"])
Packit d370c2
     CFLAGS="$ac_save_CFLAGS"
Packit d370c2
    ])
Packit d370c2
Packit d370c2
  AS_IF([eval test x$]AS_TR_SH([cc_cv_attribute_$1])[ = xyes],
Packit d370c2
    [AC_DEFINE(
Packit d370c2
       AS_TR_CPP([SUPPORT_ATTRIBUTE_$1]), 1,
Packit d370c2
         [Define this if the compiler supports __attribute__(( ifelse([$2], , [$1], [$2]) ))]
Packit d370c2
         )
Packit d370c2
     $4],
Packit d370c2
    [$5])
Packit d370c2
])
Packit d370c2
Packit d370c2
AC_DEFUN([CC_ATTRIBUTE_CONSTRUCTOR], [
Packit d370c2
  CC_CHECK_ATTRIBUTE(
Packit d370c2
    [constructor],,
Packit d370c2
    [void __attribute__((constructor)) ctor() { int a; }],
Packit d370c2
    [$1], [$2])
Packit d370c2
])
Packit d370c2
Packit d370c2
AC_DEFUN([CC_ATTRIBUTE_FORMAT], [
Packit d370c2
  CC_CHECK_ATTRIBUTE(
Packit d370c2
    [format], [format(printf, n, n)],
Packit d370c2
    [void __attribute__((format(printf, 1, 2))) printflike(const char *fmt, ...) { fmt = (void *)0; }],
Packit d370c2
    [$1], [$2])
Packit d370c2
])
Packit d370c2
Packit d370c2
AC_DEFUN([CC_ATTRIBUTE_FORMAT_ARG], [
Packit d370c2
  CC_CHECK_ATTRIBUTE(
Packit d370c2
    [format_arg], [format_arg(printf)],
Packit d370c2
    [char *__attribute__((format_arg(1))) gettextlike(const char *fmt) { fmt = (void *)0; }],
Packit d370c2
    [$1], [$2])
Packit d370c2
])
Packit d370c2
Packit d370c2
AC_DEFUN([CC_ATTRIBUTE_VISIBILITY], [
Packit d370c2
  CC_CHECK_ATTRIBUTE(
Packit d370c2
    [visibility_$1], [visibility("$1")],
Packit d370c2
    [void __attribute__((visibility("$1"))) $1_function() { }],
Packit d370c2
    [$2], [$3])
Packit d370c2
])
Packit d370c2
Packit d370c2
AC_DEFUN([CC_ATTRIBUTE_NONNULL], [
Packit d370c2
  CC_CHECK_ATTRIBUTE(
Packit d370c2
    [nonnull], [nonnull()],
Packit d370c2
    [void __attribute__((nonnull())) some_function(void *foo, void *bar) { foo = (void*)0; bar = (void*)0; }],
Packit d370c2
    [$1], [$2])
Packit d370c2
])
Packit d370c2
Packit d370c2
AC_DEFUN([CC_ATTRIBUTE_UNUSED], [
Packit d370c2
  CC_CHECK_ATTRIBUTE(
Packit d370c2
    [unused], ,
Packit d370c2
    [void some_function(void *foo, __attribute__((unused)) void *bar);],
Packit d370c2
    [$1], [$2])
Packit d370c2
])
Packit d370c2
Packit d370c2
AC_DEFUN([CC_ATTRIBUTE_SENTINEL], [
Packit d370c2
  CC_CHECK_ATTRIBUTE(
Packit d370c2
    [sentinel], ,
Packit d370c2
    [void some_function(void *foo, ...) __attribute__((sentinel));],
Packit d370c2
    [$1], [$2])
Packit d370c2
])
Packit d370c2
Packit d370c2
AC_DEFUN([CC_ATTRIBUTE_DEPRECATED], [
Packit d370c2
  CC_CHECK_ATTRIBUTE(
Packit d370c2
    [deprecated], ,
Packit d370c2
    [void some_function(void *foo, ...) __attribute__((deprecated));],
Packit d370c2
    [$1], [$2])
Packit d370c2
])
Packit d370c2
Packit d370c2
AC_DEFUN([CC_ATTRIBUTE_ALIAS], [
Packit d370c2
  CC_CHECK_ATTRIBUTE(
Packit d370c2
    [alias], [weak, alias],
Packit d370c2
    [void other_function(void *foo) { }
Packit d370c2
     void some_function(void *foo) __attribute__((weak, alias("other_function")));],
Packit d370c2
    [$1], [$2])
Packit d370c2
])
Packit d370c2
Packit d370c2
AC_DEFUN([CC_ATTRIBUTE_MALLOC], [
Packit d370c2
  CC_CHECK_ATTRIBUTE(
Packit d370c2
    [malloc], ,
Packit d370c2
    [void * __attribute__((malloc)) my_alloc(int n);],
Packit d370c2
    [$1], [$2])
Packit d370c2
])
Packit d370c2
Packit d370c2
AC_DEFUN([CC_ATTRIBUTE_PACKED], [
Packit d370c2
  CC_CHECK_ATTRIBUTE(
Packit d370c2
    [packed], ,
Packit d370c2
    [struct astructure { char a; int b; long c; void *d; } __attribute__((packed));],
Packit d370c2
    [$1], [$2])
Packit d370c2
])
Packit d370c2
Packit d370c2
AC_DEFUN([CC_ATTRIBUTE_CONST], [
Packit d370c2
  CC_CHECK_ATTRIBUTE(
Packit d370c2
    [const], ,
Packit d370c2
    [int __attribute__((const)) twopow(int n) { return 1 << n; } ],
Packit d370c2
    [$1], [$2])
Packit d370c2
])
Packit d370c2
Packit d370c2
AC_DEFUN([CC_FLAG_VISIBILITY], [
Packit d370c2
  AC_REQUIRE([CC_CHECK_WERROR])
Packit d370c2
  AC_CACHE_CHECK([if $CC supports -fvisibility=hidden],
Packit d370c2
    [cc_cv_flag_visibility],
Packit d370c2
    [cc_flag_visibility_save_CFLAGS="$CFLAGS"
Packit d370c2
     CFLAGS="$CFLAGS $cc_cv_werror"
Packit d370c2
     CC_CHECK_CFLAGS_SILENT([-fvisibility=hidden],
Packit d370c2
     cc_cv_flag_visibility='yes',
Packit d370c2
     cc_cv_flag_visibility='no')
Packit d370c2
     CFLAGS="$cc_flag_visibility_save_CFLAGS"])
Packit d370c2
Packit d370c2
  AS_IF([test "x$cc_cv_flag_visibility" = "xyes"],
Packit d370c2
    [AC_DEFINE([SUPPORT_FLAG_VISIBILITY], 1,
Packit d370c2
       [Define this if the compiler supports the -fvisibility flag])
Packit d370c2
     $1],
Packit d370c2
    [$2])
Packit d370c2
])
Packit d370c2
Packit d370c2
AC_DEFUN([CC_FUNC_EXPECT], [
Packit d370c2
  AC_REQUIRE([CC_CHECK_WERROR])
Packit d370c2
  AC_CACHE_CHECK([if compiler has __builtin_expect function],
Packit d370c2
    [cc_cv_func_expect],
Packit d370c2
    [ac_save_CFLAGS="$CFLAGS"
Packit d370c2
     CFLAGS="$CFLAGS $cc_cv_werror"
Packit d370c2
     AC_COMPILE_IFELSE([AC_LANG_SOURCE(
Packit d370c2
       [int some_function() {
Packit d370c2
        int a = 3;
Packit d370c2
        return (int)__builtin_expect(a, 3);
Packit d370c2
     }])],
Packit d370c2
       [cc_cv_func_expect=yes],
Packit d370c2
       [cc_cv_func_expect=no])
Packit d370c2
     CFLAGS="$ac_save_CFLAGS"
Packit d370c2
    ])
Packit d370c2
Packit d370c2
  AS_IF([test "x$cc_cv_func_expect" = "xyes"],
Packit d370c2
    [AC_DEFINE([SUPPORT__BUILTIN_EXPECT], 1,
Packit d370c2
     [Define this if the compiler supports __builtin_expect() function])
Packit d370c2
     $1],
Packit d370c2
    [$2])
Packit d370c2
])
Packit d370c2
Packit d370c2
AC_DEFUN([CC_ATTRIBUTE_ALIGNED], [
Packit d370c2
  AC_REQUIRE([CC_CHECK_WERROR])
Packit d370c2
  AC_CACHE_CHECK([highest __attribute__ ((aligned ())) supported],
Packit d370c2
    [cc_cv_attribute_aligned],
Packit d370c2
    [ac_save_CFLAGS="$CFLAGS"
Packit d370c2
     CFLAGS="$CFLAGS $cc_cv_werror"
Packit d370c2
     for cc_attribute_align_try in 64 32 16 8 4 2; do
Packit d370c2
        AC_COMPILE_IFELSE([AC_LANG_SOURCE([
Packit d370c2
          int main() {
Packit d370c2
            static char c __attribute__ ((aligned($cc_attribute_align_try))) = 0;
Packit d370c2
            return c;
Packit d370c2
          }])], [cc_cv_attribute_aligned=$cc_attribute_align_try; break])
Packit d370c2
     done
Packit d370c2
     CFLAGS="$ac_save_CFLAGS"
Packit d370c2
  ])
Packit d370c2
Packit d370c2
  if test "x$cc_cv_attribute_aligned" != "x"; then
Packit d370c2
     AC_DEFINE_UNQUOTED([ATTRIBUTE_ALIGNED_MAX], [$cc_cv_attribute_aligned],
Packit d370c2
       [Define the highest alignment supported])
Packit d370c2
  fi
Packit d370c2
])