1# ceil.m4 serial 15 2dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. 3dnl This file is free software; the Free Software Foundation 4dnl gives unlimited permission to copy and/or distribute it, 5dnl with or without modifications, as long as this notice is preserved. 6 7AC_DEFUN([gl_FUNC_CEIL], 8[ 9 m4_divert_text([DEFAULTS], [gl_ceil_required=plain]) 10 AC_REQUIRE([gl_MATH_H_DEFAULTS]) 11 dnl Test whether ceil() can be used without libm. 12 gl_FUNC_CEIL_LIBS 13 if test "$CEIL_LIBM" = "?"; then 14 CEIL_LIBM= 15 fi 16 m4_ifdef([gl_FUNC_CEIL_IEEE], [ 17 if test $gl_ceil_required = ieee && test $REPLACE_CEIL = 0; then 18 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles 19 AC_CACHE_CHECK([whether ceil works according to ISO C 99 with IEC 60559], 20 [gl_cv_func_ceil_ieee], 21 [ 22 save_LIBS="$LIBS" 23 LIBS="$LIBS $CEIL_LIBM" 24 AC_RUN_IFELSE( 25 [AC_LANG_SOURCE([[ 26#ifndef __NO_MATH_INLINES 27# define __NO_MATH_INLINES 1 /* for glibc */ 28#endif 29#include <math.h> 30]gl_DOUBLE_MINUS_ZERO_CODE[ 31]gl_DOUBLE_SIGNBIT_CODE[ 32static double dummy (double f) { return 0; } 33int main (int argc, char *argv[]) 34{ 35 double (* volatile my_ceil) (double) = argc ? ceil : dummy; 36 int result = 0; 37 /* Test whether ceil (-0.0) is -0.0. */ 38 if (signbitd (minus_zerod) && !signbitd (my_ceil (minus_zerod))) 39 result |= 1; 40 /* Test whether ceil (-0.3) is -0.0. */ 41 if (signbitd (-0.3) && !signbitd (my_ceil (-0.3))) 42 result |= 2; 43 return result; 44} 45 ]])], 46 [gl_cv_func_ceil_ieee=yes], 47 [gl_cv_func_ceil_ieee=no], 48 [case "$host_os" in 49 # Guess yes on glibc systems. 50 *-gnu* | gnu*) gl_cv_func_ceil_ieee="guessing yes" ;; 51 # Guess yes on musl systems. 52 *-musl*) gl_cv_func_ceil_ieee="guessing yes" ;; 53 # Guess yes on native Windows. 54 mingw*) gl_cv_func_ceil_ieee="guessing yes" ;; 55 # If we don't know, obey --enable-cross-guesses. 56 *) gl_cv_func_ceil_ieee="$gl_cross_guess_normal" ;; 57 esac 58 ]) 59 LIBS="$save_LIBS" 60 ]) 61 case "$gl_cv_func_ceil_ieee" in 62 *yes) ;; 63 *) REPLACE_CEIL=1 ;; 64 esac 65 fi 66 ]) 67 if test $REPLACE_CEIL = 1; then 68 dnl No libraries are needed to link lib/ceil.c. 69 CEIL_LIBM= 70 fi 71 AC_SUBST([CEIL_LIBM]) 72]) 73 74# Determines the libraries needed to get the ceil() function. 75# Sets CEIL_LIBM. 76AC_DEFUN([gl_FUNC_CEIL_LIBS], 77[ 78 gl_CACHE_VAL_SILENT([gl_cv_func_ceil_libm], [ 79 gl_cv_func_ceil_libm=? 80 AC_LINK_IFELSE( 81 [AC_LANG_PROGRAM( 82 [[#ifndef __NO_MATH_INLINES 83 # define __NO_MATH_INLINES 1 /* for glibc */ 84 #endif 85 #include <math.h> 86 double (*funcptr) (double) = ceil; 87 double x;]], 88 [[x = funcptr(x) + ceil(x);]])], 89 [gl_cv_func_ceil_libm=]) 90 if test "$gl_cv_func_ceil_libm" = "?"; then 91 save_LIBS="$LIBS" 92 LIBS="$LIBS -lm" 93 AC_LINK_IFELSE( 94 [AC_LANG_PROGRAM( 95 [[#ifndef __NO_MATH_INLINES 96 # define __NO_MATH_INLINES 1 /* for glibc */ 97 #endif 98 #include <math.h> 99 double (*funcptr) (double) = ceil; 100 double x;]], 101 [[x = funcptr(x) + ceil(x);]])], 102 [gl_cv_func_ceil_libm="-lm"]) 103 LIBS="$save_LIBS" 104 fi 105 ]) 106 CEIL_LIBM="$gl_cv_func_ceil_libm" 107]) 108