| # Copyright © 2005 Scott James Remnant <scott@netsplit.com> |
| # Copyright © 2008, 2009 Guillem Jover <guillem@debian.org> |
| |
| # DPKG_FUNC_VA_COPY |
| # ----------------- |
| # Define HAVE_VA_COPY if we have va_copy, fail if they can't be assigned |
| AC_DEFUN([DPKG_FUNC_VA_COPY], |
| [AC_CACHE_CHECK([for va_copy], [dpkg_cv_va_copy], |
| [AC_RUN_IFELSE([AC_LANG_SOURCE( |
| [[#include <stdarg.h> |
| int main() |
| { |
| va_list v1, v2; |
| va_copy (v1, v2); |
| exit (0); |
| } |
| ]])], |
| [dpkg_cv_va_copy=yes], |
| [dpkg_cv_va_copy=no], |
| [dpkg_cv_va_copy=no])]) |
| AS_IF([test "x$dpkg_cv_va_copy" = "xyes"], |
| [AC_DEFINE([HAVE_VA_COPY], 1, |
| [Define to 1 if the 'va_copy' macro exists])]) |
| ])# DPKG_FUNC_VA_COPY |
| |
| # DPKG_FUNC_C99_SNPRINTF |
| # ----------------------- |
| # Define HAVE_C99_SNPRINTF if we have C99 snprintf family semantics |
| AC_DEFUN([DPKG_FUNC_C99_SNPRINTF], |
| [AC_CACHE_CHECK([for C99 snprintf functions], [dpkg_cv_c99_snprintf], |
| [AC_RUN_IFELSE([AC_LANG_SOURCE([[ |
| #include <stdarg.h> |
| #include <stdio.h> |
| #include <string.h> |
| int test_vsnprintf(const char *fmt, ...) |
| { |
| int n; |
| va_list args; |
| |
| va_start(args, fmt); |
| n = vsnprintf(NULL, 0, fmt, args); |
| va_end(args); |
| |
| return n; |
| } |
| int main() |
| { |
| int n; |
| |
| n = snprintf(NULL, 0, "format %s %d", "string", 10); |
| if (n != strlen("format string 10")) |
| return 1; |
| |
| n = test_vsnprintf("format %s %d", "string", 10); |
| if (n != strlen("format string 10")) |
| return 1; |
| |
| return 0; |
| } |
| ]])], |
| [dpkg_cv_c99_snprintf=yes], |
| [dpkg_cv_c99_snprintf=no], |
| [dpkg_cv_c99_snprintf=no])]) |
| AS_IF([test "x$dpkg_cv_c99_snprintf" = "xyes"], |
| [AC_DEFINE([HAVE_C99_SNPRINTF], 1, |
| [Define to 1 if the 'snprintf' family is C99 conformant])], |
| ) |
| AM_CONDITIONAL(HAVE_C99_SNPRINTF, [test "x$dpkg_cv_c99_snprintf" = "xyes"]) |
| ])# DPKG_FUNC_C99_SNPRINTF |
| |
| # DPKG_MMAP |
| # --------- |
| # Define USE_MMAP if mmap() is available and it was requested |
| AC_DEFUN([DPKG_MMAP], |
| [ |
| AC_ARG_ENABLE([mmap], |
| AS_HELP_STRING([--enable-mmap], |
| [enable usage of unrealiable mmap if available]), |
| [], |
| [enable_mmap=no]) |
| |
| AS_IF([test "x$enable_mmap" = "xyes"], [ |
| AC_CHECK_FUNCS([mmap]) |
| AC_DEFINE(USE_MMAP, 1, [Use unreliable mmap support]) |
| ]) |
| ]) |
| |
| # DPKG_CHECK_PROGNAME |
| # ------------------- |
| # Check for system implementations of program name tracking. |
| AC_DEFUN([DPKG_CHECK_PROGNAME], |
| [ |
| AC_MSG_CHECKING([for program_invocation_short_name]) |
| AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <errno.h>]], |
| [[const char *p = program_invocation_short_name;]])], |
| [AC_DEFINE([HAVE_PROGRAM_INVOCATION_SHORT_NAME], [1], |
| [Define to 1 if you have program_invocation_short_name]) |
| AC_MSG_RESULT([yes])], |
| [AC_MSG_RESULT([no])]) |
| |
| AC_MSG_CHECKING([for __progname]) |
| AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], |
| [[extern char *__progname; |
| const char *p = __progname;]])], |
| [AC_DEFINE([HAVE___PROGNAME], [1], |
| [Define to 1 if you have __progname]) |
| AC_MSG_RESULT([yes])], |
| [AC_MSG_RESULT([no])]) |
| ]) # DPKG_CHECK_PROGNAME |
| |
| # DPKG_CHECK_COMPAT_FUNCS(LIST) |
| # ----------------------- |
| # Check each function and define an automake conditional |
| AC_DEFUN([DPKG_CHECK_COMPAT_FUNCS], |
| [ |
| AC_CHECK_FUNCS([$1]) |
| m4_foreach_w([ac_func], [$1], [ |
| AM_CONDITIONAL(HAVE_[]AS_TR_CPP(ac_func), |
| [test "x$ac_cv_func_[]AS_TR_SH(ac_func)" = "xyes"]) |
| ]) |
| ]) # DPKG_CHECK_COMPAT_FUNCS |