Skip to content

Commit

Permalink
Problem: posix_memalign autoconf check broken on some platforms
Browse files Browse the repository at this point in the history
Solution: import macro from autoconf-archive that works better
than AC_CHECK_FUNCS
  • Loading branch information
bluca committed Jan 19, 2019
1 parent 4a0c83f commit 8040e28
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 1 deletion.
4 changes: 3 additions & 1 deletion configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ m4_include([m4/ax_cxx_compile_stdcxx_11.m4])
m4_include([m4/ax_code_coverage.m4])
m4_include([m4/ax_valgrind_check.m4])
m4_include([m4/ax_check_vscript.m4])
m4_include([m4/ax_func_posix_memalign.m4])
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])

# This lets us use PACKAGE_VERSION in Makefiles
Expand Down Expand Up @@ -78,6 +79,7 @@ AC_LIBTOOL_WIN32_DLL
AC_PROG_LIBTOOL
AX_VALGRIND_CHECK
AX_CHECK_VSCRIPT
AX_FUNC_POSIX_MEMALIGN

AC_ARG_ENABLE([force-CXX98-compat],
[AS_HELP_STRING([--enable-force-CXX98-compat], [force C++98 build [default=disabled]])])
Expand Down Expand Up @@ -670,7 +672,7 @@ AC_LANG_POP([C++])

# Checks for library functions.
AC_TYPE_SIGNAL
AC_CHECK_FUNCS(perror gettimeofday clock_gettime memset socket getifaddrs freeifaddrs fork posix_memalign mkdtemp accept4)
AC_CHECK_FUNCS(perror gettimeofday clock_gettime memset socket getifaddrs freeifaddrs fork mkdtemp accept4)
AC_CHECK_HEADERS([alloca.h])

# pthread_setname is non-posix, and there are at least 4 different implementations
Expand Down
50 changes: 50 additions & 0 deletions m4/ax_func_posix_memalign.m4
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# ===========================================================================
# https://www.gnu.org/software/autoconf-archive/ax_func_posix_memalign.html
# ===========================================================================
#
# SYNOPSIS
#
# AX_FUNC_POSIX_MEMALIGN
#
# DESCRIPTION
#
# Some versions of posix_memalign (notably glibc 2.2.5) incorrectly apply
# their power-of-two check to the size argument, not the alignment
# argument. AX_FUNC_POSIX_MEMALIGN defines HAVE_POSIX_MEMALIGN if the
# power-of-two check is correctly applied to the alignment argument.
#
# LICENSE
#
# Copyright (c) 2008 Scott Pakin <[email protected]>
#
# 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 9

AC_DEFUN([AX_FUNC_POSIX_MEMALIGN],
[AC_CACHE_CHECK([for working posix_memalign],
[ax_cv_func_posix_memalign_works],
[AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <stdlib.h>
int
main ()
{
void *buffer;
/* Some versions of glibc incorrectly perform the alignment check on
* the size word. */
exit (posix_memalign (&buffer, sizeof(void *), 123) != 0);
}
]])],
[ax_cv_func_posix_memalign_works=yes],
[ax_cv_func_posix_memalign_works=no],
[ax_cv_func_posix_memalign_works=no])])
if test "$ax_cv_func_posix_memalign_works" = "yes" ; then
AC_DEFINE([HAVE_POSIX_MEMALIGN], [1],
[Define to 1 if `posix_memalign' works.])
fi
])

0 comments on commit 8040e28

Please sign in to comment.