diff --git a/configure b/configure index 87a5a173e82..2f1f1ca7ec8 100755 --- a/configure +++ b/configure @@ -21233,6 +21233,66 @@ _ACEOF fi +{ echo "$as_me:$LINENO: checking for isinf" >&5 +echo $ECHO_N "checking for isinf... $ECHO_C" >&6; } +if test "${ac_cv_have_isinf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +float f = 0.0; isinf(f) + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&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); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_have_isinf="yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_have_isinf="no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_have_isinf" >&5 +echo "${ECHO_T}$ac_cv_have_isinf" >&6; } +if test "$ac_cv_have_isinf" = "yes" +then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ISINF 1 +_ACEOF + +fi + case $host_cpu in *i[3456789]86*) { echo "$as_me:$LINENO: checking whether we need to define __i386__" >&5 diff --git a/configure.ac b/configure.ac index 5c02fb43af5..e38f5e761d0 100644 --- a/configure.ac +++ b/configure.ac @@ -1607,6 +1607,14 @@ then AC_DEFINE(HAVE_DAYLIGHT, 1, [Define if you have the daylight variable]) fi +dnl Check for isinf +AC_CACHE_CHECK([for isinf], ac_cv_have_isinf, + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], [[float f = 0.0; isinf(f)]])],[ac_cv_have_isinf="yes"],[ac_cv_have_isinf="no"])) +if test "$ac_cv_have_isinf" = "yes" +then + AC_DEFINE(HAVE_ISINF, 1, [Define to 1 if you have the `isinf' function.]) +fi + dnl *** check for the need to define platform-specific symbols case $host_cpu in diff --git a/include/config.h.in b/include/config.h.in index 8763be3049b..e384f964196 100644 --- a/include/config.h.in +++ b/include/config.h.in @@ -249,6 +249,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_IO_H +/* Define to 1 if you have the `isinf' function. */ +#undef HAVE_ISINF + /* Define to 1 if you have the header file. */ #undef HAVE_JACK_JACK_H diff --git a/include/wine/port.h b/include/wine/port.h index 67278912360..01ee8353d8b 100644 --- a/include/wine/port.h +++ b/include/wine/port.h @@ -299,6 +299,10 @@ size_t getpagesize(void); pid_t gettid(void); #endif /* HAVE_GETTID */ +#ifndef HAVE_ISINF +int isinf(double x); +#endif + #ifndef HAVE_LSTAT int lstat(const char *file_name, struct stat *buf); #endif /* HAVE_LSTAT */ diff --git a/libs/port/Makefile.in b/libs/port/Makefile.in index b7adc1281f4..1c25bf22e5b 100644 --- a/libs/port/Makefile.in +++ b/libs/port/Makefile.in @@ -15,6 +15,7 @@ C_SRCS = \ getpagesize.c \ gettid.c \ interlocked.c \ + isinf.c \ lstat.c \ memcpy_unaligned.c \ memmove.c \ diff --git a/libs/port/isinf.c b/libs/port/isinf.c new file mode 100644 index 00000000000..e0c35ad1771 --- /dev/null +++ b/libs/port/isinf.c @@ -0,0 +1,38 @@ +/* + * isinf function + * + * Copyright 2008 Petr Sumbera + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "config.h" +#include "wine/port.h" + +#ifndef HAVE_ISINF + +#ifdef HAVE_IEEEFP_H +#include + +int isinf(double x) +{ + return (!(finite(x) || isnand(x))); +} + +#else +#error No isinf() implementation available. +#endif + +#endif /* HAVE_ISINF */