Skip to content

Commit

Permalink
build: create a macro to check for, and replace, possibly-inline func…
Browse files Browse the repository at this point in the history
…tions.

mingw (both 32 and 64) provides a number of functions that have no C
linkage, but are only available as static inline. Define a macro that can
check for the function declaration but acts like AC_REPLACE_FUNC.

Use the new macro for asprintf/vasprintf (previously implemented in
configure.ac directly).

Signed-off-by: Diego Elio Pettenò <[email protected]>
Signed-off-by: Rémi Denis-Courmont <[email protected]>
  • Loading branch information
Flameeyes authored and Rémi Denis-Courmont committed Mar 16, 2015
1 parent d60d510 commit 358ae6b
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 14 deletions.
16 changes: 2 additions & 14 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -562,20 +562,8 @@ AC_CHECK_FUNCS(fdatasync,,
])

dnl mingw64 implements those as static inline, not functions with C linkage
AC_LINK_IFELSE([
AC_LANG_PROGRAM([#include <stdio.h>], [
char *c;
if (asprintf(&c, "%s %d", "string", 1) == -1)
c = NULL;
])],[AC_DEFINE([HAVE_ASPRINTF],[1],[Define to 1 if you have asprintf function])],[AC_LIBOBJ([asprintf])])
AC_LINK_IFELSE([
AC_LANG_PROGRAM([#include <stdio.h>
#include <stdarg.h>], [
char *c;
va_list ap;
if (vasprintf(&c, "%s %d", ap) == -1)
c = NULL;
])],[AC_DEFINE([HAVE_VASPRINTF],[1],[Define to 1 if you have asprintf function])],[AC_LIBOBJ([vasprintf])])
VLC_REPLACE_DECL([asprintf], [#include <stdio.h>])
VLC_REPLACE_DECL([vasprintf], [#include <stdio.h>])

dnl C11 static_assert()
AC_MSG_CHECKING([for static_assert in assert.h])
Expand Down
20 changes: 20 additions & 0 deletions m4/vlc.m4
Original file line number Diff line number Diff line change
Expand Up @@ -96,3 +96,23 @@ AC_DEFUN([VLC_LIBRARY_SUFFIX], [
AC_MSG_RESULT(${LIBEXT})
AC_DEFINE_UNQUOTED(LIBEXT, "${LIBEXT}", [Dynamic object extension])
])

dnl ===========================================================================
dnl Custom macros for checking functions with inline fallback, for mingw32/64

dnl VLC_REPLACE_DECL([funcname], [include])
AC_DEFUN([VLC_REPLACE_DECL], [
AS_VAR_PUSHDEF([CACHEVAR], [vlc_cv_replace_decl] AS_TR_SH([$1]))
AC_CACHE_VAL(CACHEVAR, [
AC_CHECK_DECL(
[$1],
AS_VAR_SET(CACHEVAR, [yes]),
AS_VAR_SET(CACHEVAR, [no]),
[$2]
)
])
AS_IF([test x"AS_VAR_GET(CACHEVAR)" = xyes],
[AC_DEFINE(AS_TR_CPP([HAVE_$1]), [1], [Define to 1 if you have $1 function])],
[AC_LIBOBJ([$1])])
AS_VAR_POPDEF([CACHEVAR])
])

0 comments on commit 358ae6b

Please sign in to comment.