configure.ac: Check for trunc and truncf in libm.

* configure.ac: Check for trunc and truncf in libm.
	* configure: Regenerate.
	* config.h.in: Likewise.
	* intrinsics/c99_functions.c (trunc, truncf): New functions.
	* c99_protos.h (trunc, truncf): Declare them.

From-SVN: r100040
This commit is contained in:
Eric Botcazou 2005-05-21 08:44:50 +02:00 committed by Eric Botcazou
parent 542b52ddb2
commit 69a2d125d6
6 changed files with 191 additions and 1 deletions

View File

@ -1,3 +1,11 @@
2005-05-21 Eric Botcazou <ebotcazou@libertysurf.fr>
* configure.ac: Check for trunc and truncf in libm.
* configure: Regenerate.
* config.h.in: Likewise.
* intrinsics/c99_functions.c (trunc, truncf): New functions.
* c99_protos.h (trunc, truncf): Declare them.
2005-05-18 Thomas Koenig <Thomas.Koenig@online.de> 2005-05-18 Thomas Koenig <Thomas.Koenig@online.de>
PR libfortran/21127 PR libfortran/21127

View File

@ -113,6 +113,14 @@ extern float tanf(float);
extern float tanhf(float); extern float tanhf(float);
#endif #endif
#ifndef HAVE_TRUNC
extern double trunc(double x);
#endif
#ifndef HAVE_TRUNCF
extern float truncf(float x);
#endif
#ifndef HAVE_NEXTAFTERF #ifndef HAVE_NEXTAFTERF
extern float nextafterf(float, float); extern float nextafterf(float, float);
#endif #endif

View File

@ -264,6 +264,12 @@
/* Define to 1 if you have the <time.h> header file. */ /* Define to 1 if you have the <time.h> header file. */
#undef HAVE_TIME_H #undef HAVE_TIME_H
/* libm includes trunc */
#undef HAVE_TRUNC
/* libm includes truncf */
#undef HAVE_TRUNCF
/* Define to 1 if you have the <unistd.h> header file. */ /* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H #undef HAVE_UNISTD_H

146
libgfortran/configure vendored
View File

@ -2937,7 +2937,7 @@ if test "x$GCC" = "xyes"; then
AM_FCFLAGS="-Wall" AM_FCFLAGS="-Wall"
## We like to use C99 routines when available. This makes sure that ## We like to use C99 routines when available. This makes sure that
## __STDC_VERSION__ is set such that libc includes make them available. ## __STDC_VERSION__ is set such that libc includes make them available.
AM_CFLAGS="-std=gnu99 -Wall -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -Wextra -Wwrite-strings" AM_CFLAGS="-std=gnu99 -Wall -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -Wextra -Wwrite-strings"
fi fi
@ -9570,6 +9570,150 @@ _ACEOF
fi fi
echo "$as_me:$LINENO: checking for trunc in -lm" >&5
echo $ECHO_N "checking for trunc in -lm... $ECHO_C" >&6
if test "${ac_cv_lib_m_trunc+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lm $LIBS"
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
extern "C"
#endif
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char trunc ();
int
main ()
{
trunc ();
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
(eval $ac_link) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
{ ac_try='test -s conftest$ac_exeext'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
ac_cv_lib_m_trunc=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_cv_lib_m_trunc=no
fi
rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
echo "$as_me:$LINENO: result: $ac_cv_lib_m_trunc" >&5
echo "${ECHO_T}$ac_cv_lib_m_trunc" >&6
if test $ac_cv_lib_m_trunc = yes; then
cat >>confdefs.h <<\_ACEOF
#define HAVE_TRUNC 1
_ACEOF
fi
echo "$as_me:$LINENO: checking for truncf in -lm" >&5
echo $ECHO_N "checking for truncf in -lm... $ECHO_C" >&6
if test "${ac_cv_lib_m_truncf+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lm $LIBS"
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
extern "C"
#endif
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char truncf ();
int
main ()
{
truncf ();
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
(eval $ac_link) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
{ ac_try='test -s conftest$ac_exeext'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
ac_cv_lib_m_truncf=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_cv_lib_m_truncf=no
fi
rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
echo "$as_me:$LINENO: result: $ac_cv_lib_m_truncf" >&5
echo "${ECHO_T}$ac_cv_lib_m_truncf" >&6
if test $ac_cv_lib_m_truncf = yes; then
cat >>confdefs.h <<\_ACEOF
#define HAVE_TRUNCF 1
_ACEOF
fi
echo "$as_me:$LINENO: checking for erf in -lm" >&5 echo "$as_me:$LINENO: checking for erf in -lm" >&5
echo $ECHO_N "checking for erf in -lm... $ECHO_C" >&6 echo $ECHO_N "checking for erf in -lm... $ECHO_C" >&6
if test "${ac_cv_lib_m_erf+set}" = set; then if test "${ac_cv_lib_m_erf+set}" = set; then

View File

@ -206,6 +206,8 @@ AC_CHECK_LIB([m],[sinhf],[AC_DEFINE([HAVE_SINHF],[1],[libm includes sinhf])])
AC_CHECK_LIB([m],[sqrtf],[AC_DEFINE([HAVE_SQRTF],[1],[libm includes sqrtf])]) AC_CHECK_LIB([m],[sqrtf],[AC_DEFINE([HAVE_SQRTF],[1],[libm includes sqrtf])])
AC_CHECK_LIB([m],[tanf],[AC_DEFINE([HAVE_TANF],[1],[libm includes tanf])]) AC_CHECK_LIB([m],[tanf],[AC_DEFINE([HAVE_TANF],[1],[libm includes tanf])])
AC_CHECK_LIB([m],[tanhf],[AC_DEFINE([HAVE_TANHF],[1],[libm includes tanhf])]) AC_CHECK_LIB([m],[tanhf],[AC_DEFINE([HAVE_TANHF],[1],[libm includes tanhf])])
AC_CHECK_LIB([m],[trunc],[AC_DEFINE([HAVE_TRUNC],[1],[libm includes trunc])])
AC_CHECK_LIB([m],[truncf],[AC_DEFINE([HAVE_TRUNCF],[1],[libm includes truncf])])
AC_CHECK_LIB([m],[erf],[AC_DEFINE([HAVE_ERF],[1],[libm includes erf])]) AC_CHECK_LIB([m],[erf],[AC_DEFINE([HAVE_ERF],[1],[libm includes erf])])
AC_CHECK_LIB([m],[erfc],[AC_DEFINE([HAVE_ERFC],[1],[libm includes erfc])]) AC_CHECK_LIB([m],[erfc],[AC_DEFINE([HAVE_ERFC],[1],[libm includes erfc])])
AC_CHECK_LIB([m],[erfcf],[AC_DEFINE([HAVE_ERFCF],[1],[libm includes erfcf])]) AC_CHECK_LIB([m],[erfcf],[AC_DEFINE([HAVE_ERFCF],[1],[libm includes erfcf])])

View File

@ -202,6 +202,28 @@ tanhf(float x)
} }
#endif #endif
#ifndef HAVE_TRUNC
double
trunc(double x)
{
if (!isfinite (x))
return x;
if (x < 0.0)
return - floor (-x);
else
return floor (x);
}
#endif
#ifndef HAVE_TRUNCF
float
truncf(float x)
{
return (float) trunc (x);
}
#endif
#ifndef HAVE_NEXTAFTERF #ifndef HAVE_NEXTAFTERF
/* This is a portable implementation of nextafterf that is intended to be /* This is a portable implementation of nextafterf that is intended to be
independent of the floating point format or its in memory representation. independent of the floating point format or its in memory representation.