Blame m4/xiph_compiler.m4

Packit Service 102f81
dnl xiph_compiler.m4
Packit Service 102f81
dnl $Id: xiph_compiler.m4 8320 2004-11-30 20:36:09Z karl $
Packit Service 102f81
Packit Service 102f81
dnl XIPH_FUNC_VA_COPY
Packit Service 102f81
dnl Karl Heyes
Packit Service 102f81
dnl
Packit Service 102f81
# XIPH_FUNC_VA_COPY
Packit Service 102f81
# Test for implementation of va_copy, or define appropriately if missing
Packit Service 102f81
AC_DEFUN([XIPH_FUNC_VA_COPY],
Packit Service 102f81
[dnl
Packit Service 102f81
AC_MSG_CHECKING([for va_copy])
Packit Service 102f81
AC_TRY_LINK([#include <stdarg.h>], [va_list ap1, ap2; va_copy(ap1, ap2);],
Packit Service 102f81
  AC_MSG_RESULT([va_copy]),
Packit Service 102f81
  [dnl
Packit Service 102f81
  AH_TEMPLATE([va_copy], [define if va_copy is not available])
Packit Service 102f81
  AC_TRY_LINK([#include <stdarg.h>], [va_list ap1, ap2; __va_copy(ap1, ap2);],
Packit Service 102f81
    [dnl
Packit Service 102f81
    AC_DEFINE([va_copy], [__va_copy])
Packit Service 102f81
    AC_MSG_RESULT([__va_copy])],
Packit Service 102f81
    [dnl
Packit Service 102f81
    AC_DEFINE([va_copy(dest,src)], [memcpy(&dest,&src,sizeof(va_list))])
Packit Service 102f81
    AC_MSG_RESULT([memcpy])
Packit Service 102f81
    ])
Packit Service 102f81
  ])
Packit Service 102f81
])
Packit Service 102f81
])dnl XIPH_FUNC_VA_COPY
Packit Service 102f81
Packit Service 102f81
dnl XIPH_C_ATTRIBUTE
Packit Service 102f81
dnl Karl Heyes
Packit Service 102f81
dnl
Packit Service 102f81
# XIPH_C_ATTRIBUTE
Packit Service 102f81
# Define __attribute__ to be empty if the compiler does not support it
Packit Service 102f81
AC_DEFUN([XIPH_C_ATTRIBUTE],
Packit Service 102f81
[dnl
Packit Service 102f81
AC_TRY_COMPILE([int func(void) __attribute__((unused));],
Packit Service 102f81
  [int x __attribute__ ((unused));],,[dnl
Packit Service 102f81
  AH_TEMPLATE([__attribute__],[Define to empty if __attribute__ is not supported])
Packit Service 102f81
  AC_DEFINE([__attribute__(x)],[])
Packit Service 102f81
])
Packit Service 102f81
])dnl XIPH_C_ATTRIBUTE
Packit Service 102f81
Packit Service 102f81
dnl XIPH_GCC_WARNING
Packit Service 102f81
dnl Karl Heyes
Packit Service 102f81
dnl
Packit Service 102f81
# XIPH_GCC_WARNING(flag, action-if-warning, action-if-not)
Packit Service 102f81
# Tests whether GCC emits a warning if explicitly asked to use flag.
Packit Service 102f81
# Useful for eg system default include paths
Packit Service 102f81
AC_DEFUN([XIPH_GCC_WARNING],
Packit Service 102f81
[AC_REQUIRE([AC_PROG_CC])
Packit Service 102f81
xt_warning=no
Packit Service 102f81
if test x"$GCC" = "xyes"
Packit Service 102f81
then
Packit Service 102f81
  save_cflags="$CFLAGS"
Packit Service 102f81
  CFLAGS="-Werror $1"
Packit Service 102f81
  AC_TRY_COMPILE(,,,xt_warning=yes)
Packit Service 102f81
  CFLAGS="$save_cflags"
Packit Service 102f81
fi
Packit Service 102f81
if test "$xt_warning" = "yes"
Packit Service 102f81
then
Packit Service 102f81
  ifelse([$2],,:,[$2])
Packit Service 102f81
else
Packit Service 102f81
  ifelse([$3],,:,[$3])
Packit Service 102f81
fi
Packit Service 102f81
])dnl XIPH_GCC_WARNING
Packit Service 102f81
Packit Service 102f81
dnl XIPH_CLEAN_CCFLAGS
Packit Service 102f81
dnl Brendan Cully <brendan@xiph.org> 20030612
Packit Service 102f81
dnl
Packit Service 102f81
# XIPH_CLEAN_CCFLAGS(flag-list, dest-shell-var-name)
Packit Service 102f81
# Filters out duplicate compiler flags, and -I flags if XIPH_GCC_WARNING
Packit Service 102f81
# complains about them
Packit Service 102f81
# Operates right-to-left on -l flags, left-to-right on everything else
Packit Service 102f81
# eg XIPH_CLEAN_CCFLAGS([-L/opt/lib -lfoo -lm -L/opt/lib -lbar -lm], [MY_LDFLAGS])
Packit Service 102f81
# => MY_LDFLAGS="-L/opt/lib -lfoo -lbar -lm"
Packit Service 102f81
# the cat<
Packit Service 102f81
AC_DEFUN([XIPH_CLEAN_CCFLAGS],
Packit Service 102f81
[AC_REQUIRE([AC_PROG_FGREP])
Packit Service 102f81
xt_FLAGS=''
Packit Service 102f81
Packit Service 102f81
for flag in $1
Packit Service 102f81
do
Packit Service 102f81
  case "$flag" in
Packit Service 102f81
  -l*)
Packit Service 102f81
    xt_FLAGS="$flag $xt_FLAGS"
Packit Service 102f81
    ;;
Packit Service 102f81
  *)
Packit Service 102f81
    if { cat <
Packit Service 102f81
 $xt_FLAGS x
Packit Service 102f81
EOF
Packit Service 102f81
} | $FGREP -v -e " $flag " > /dev/null
Packit Service 102f81
    then
Packit Service 102f81
      xt_FLAGS="$flag $xt_FLAGS"
Packit Service 102f81
    fi
Packit Service 102f81
    ;;
Packit Service 102f81
  esac
Packit Service 102f81
done
Packit Service 102f81
Packit Service 102f81
$2=''
Packit Service 102f81
for flag in $xt_FLAGS
Packit Service 102f81
do
Packit Service 102f81
  if { cat <
Packit Service 102f81
 $$2 x
Packit Service 102f81
EOF
Packit Service 102f81
} | $FGREP -v -e " $flag " > /dev/null
Packit Service 102f81
  then
Packit Service 102f81
    $2="$flag $$2"
Packit Service 102f81
  fi
Packit Service 102f81
done
Packit Service 102f81
Packit Service 102f81
# Prune -I flags if $CC warns about them
Packit Service 102f81
xt_FLAGS=''
Packit Service 102f81
for flag in $$2
Packit Service 102f81
do
Packit Service 102f81
  case "$flag" in
Packit Service 102f81
  -I*)
Packit Service 102f81
    XIPH_GCC_WARNING([$flag], [], [xt_FLAGS="$xt_FLAGS $flag"])
Packit Service 102f81
    ;;
Packit Service 102f81
  *)
Packit Service 102f81
    xt_FLAGS="$xt_FLAGS $flag"
Packit Service 102f81
    ;;
Packit Service 102f81
  esac
Packit Service 102f81
done
Packit Service 102f81
$2="$xt_FLAGS"
Packit Service 102f81
])dnl XIPH_CLEAN_CCFLAGS
Packit Service 102f81
Packit Service 102f81
dnl XIPH_VAR_APPEND
Packit Service 102f81
dnl Karl Heyes
Packit Service 102f81
dnl
Packit Service 102f81
# XIPH_VAR_APPEND(shell-var, list)
Packit Service 102f81
# Append each item in list to shell-var iff shell-var doesn't already have it
Packit Service 102f81
# eg XIPH_VAR_APPEND([CFLAGS], [-O2 -I/opt/packages/include])
Packit Service 102f81
AC_DEFUN([XIPH_VAR_APPEND],
Packit Service 102f81
[dnl
Packit Service 102f81
AC_REQUIRE([AC_PROG_FGREP])
Packit Service 102f81
for arg in $2
Packit Service 102f81
do
Packit Service 102f81
  if { cat <
Packit Service 102f81
 $$1 x
Packit Service 102f81
EOF
Packit Service 102f81
} | $FGREP -v -e " $arg " > /dev/null
Packit Service 102f81
  then
Packit Service 102f81
    $1="$$1 $arg"
Packit Service 102f81
  fi
Packit Service 102f81
done
Packit Service 102f81
])dnl XIPH_VAR_APPEND
Packit Service 102f81
Packit Service 102f81
dnl XIPH_VAR_PREPEND
Packit Service 102f81
dnl Karl Heyes
Packit Service 102f81
dnl
Packit Service 102f81
# XIPH_VAR_PREPEND(shell-var, list)
Packit Service 102f81
# see XIPH_VAR_APPEND
Packit Service 102f81
AC_DEFUN([XIPH_VAR_PREPEND],
Packit Service 102f81
[dnl
Packit Service 102f81
AC_REQUIRE([AC_PROG_FGREP])
Packit Service 102f81
xt_compare="$$1"
Packit Service 102f81
xt_filtered=""   
Packit Service 102f81
for arg in $2
Packit Service 102f81
do
Packit Service 102f81
  if { cat <
Packit Service 102f81
 $xt_compare x
Packit Service 102f81
EOF
Packit Service 102f81
} | $FGREP -v -e " $arg " > /dev/null
Packit Service 102f81
  then
Packit Service 102f81
    xt_compare="$arg $xt_compare"
Packit Service 102f81
    xt_filtered="$xt_filtered $arg"
Packit Service 102f81
  fi
Packit Service 102f81
done
Packit Service 102f81
$1="$xt_filtered $$1"
Packit Service 102f81
])dnl XIPH_VAR_PREPEND
Packit Service 102f81
Packit Service 102f81
dnl XIPH_C__FUNC__
Packit Service 102f81
dnl Karl Heyes <karl@xiph.org> 07/2004
Packit Service 102f81
AC_DEFUN([XIPH_C__FUNC__],
Packit Service 102f81
[dnl
Packit Service 102f81
AC_MSG_CHECKING([for __func__])
Packit Service 102f81
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[const char *x = __func__;])],
Packit Service 102f81
    [ AC_MSG_RESULT([yes])],
Packit Service 102f81
    [ AH_TEMPLATE([__func__], [Replace __func__ if not supported])
Packit Service 102f81
    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[const char *x = __FUNCTION__;])],
Packit Service 102f81
        [ AC_DEFINE([__func__],[__FUNCTION__])
Packit Service 102f81
        AC_MSG_RESULT([yes])],
Packit Service 102f81
        [ AC_DEFINE([__func__],[""])
Packit Service 102f81
        AC_MSG_RESULT([no])
Packit Service 102f81
        ])
Packit Service 102f81
    ])
Packit Service 102f81
])dnl XIPH_C__FUNC__
Packit Service 102f81