From: Christophe CURIS <[email protected]> The current code in WINGs makes use of the 'rint' function at a few places to round a double when the result is to be stored into an int typed variable.
The right function to do this is actually 'lrint', but as both functions suffer from portability issues we check for a few ones and pick the first that is available. The function then becomes available as a macro 'wm_rint()' from 'config.h'. Signed-off-by: Christophe CURIS <[email protected]> --- m4/wm_libmath.m4 | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/m4/wm_libmath.m4 b/m4/wm_libmath.m4 index 49bd677..acca5d7 100644 --- a/m4/wm_libmath.m4 +++ b/m4/wm_libmath.m4 @@ -21,12 +21,20 @@ # # Checks the needed library link flags needed to have math lib # Sets variable LIBM with the appropriates flags +# +# Checks for an appropriate rounding function as needed by WINGs +# and defines a macro 'wm_rint' for it in 'config.h' AC_DEFUN_ONCE([WM_CHECK_LIBM], [AC_CHECK_HEADER([math.h], [], [AC_MSG_ERROR([header for math library not found])]) _WM_SEARCH_MATHLIB([atan], [], [AC_MSG_FAILURE([could not link with math library])] ) AC_SUBST(LIBM) dnl +_WM_FIND_MATHFUNC([for math rounding function], + [roundfct], [lrint rint round floor], + [AC_DEFINE_UNQUOTED([wm_rint(x)], [${wm_cv_mathlib_roundfct}[( x )]], + [Macro to round a double-float to be converted to integer])], + [AC_MSG_ERROR([no known rounding function found in math library])]) dnl ]) # _WM_SHELLFN_MATHLINK @@ -94,3 +102,26 @@ AC_CACHE_CHECK([for math library using $1], [wm_cv_mathlib_lflags], [LIBM="$wm_cv_mathlib_lflags" $2]) dnl ]) + +# _WM_FIND_MATHFUNC(description, name, function_list, [action-if-ok], [action-if-nok]) +# ------------------------------------------------------------------------------------ +# (internal macro only!) +# +# Search for the first function in the list that can be linked to, using $LIBM +# for the linker options (typically math library detected from previous macro) +# +# the description is used for the message displayed +# +# on success, the name is stored in 'wm_cv_mathlib_$name' before executing +# the action-if-ok +AC_DEFUN([_WM_FIND_MATHFUNC], +[AC_REQUIRE([_WM_SHELLFN_MATHLINK]) +AC_CACHE_CHECK([$1], [wm_cv_mathlib_$2], + [for FCT in $3 + do + AS_IF([wm_fn_c_try_link_mathfunc $FCT "$LIBM"], + [wm_cv_mathlib_$2=$FCT + break]) + done]) +AS_VAR_SET_IF([wm_cv_mathlib_$2], [$4], [$5]) dnl +]) -- 1.7.10.4 -- To unsubscribe, send mail to [email protected].
