>From: H.Yamamoto <ocean / m2.ccsnet.ne.jp>
>Date: 02.02.2006 06:14:41
>Subject: Re: [PATCH]  solaris 10  isinf and ruby_setenv fixes
>
>>>Hello.
>>>
>>>>This patch works correctly for me. However there is still the isinf
>>trouble
>>>>(e.g. configure cannot find isinf on solaris 10)
>>>
>>>Well, should I commit your patch [ruby-core:7273],
>>>or define isinf/isnan in [ruby-core:7151] somewhere?
>>
>>      The below thing seems to be bit kludge to me. I can test it if
>>      you can send me a patch that has it put somewhere.
>
>I'm not sure I understand [ruby-core:7151] well, but when I tried
following
>patch
>on TestDrive,
>
>td189.testdrive.hp.com> ./miniruby -e "p 0.0 / 0.0"
>Infinity
>
>Hmm... OK, I'll commit your patch. We can consider [ruby-core:7151] even
after
>that.

 I tested this patch and  got the following errors:
cc -xO3 -g -mt -fsimple=1 -xbuiltin=%all -xlibmil -xlibmopt
-xtarget=opteron -xarch=amd64  -DRUBY_EXPORT  -I. -I..  -c ../array.c
"../missing.h", line 150: warning: macro redefined: isnan
cc -xO3 -g -mt -fsimple=1 -xbuiltin=%all -xlibmil -xlibmopt
-xtarget=opteron -xarch=amd64  -DRUBY_EXPORT  -I. -I..  -c ../bignum.c
"../missing.h", line 150: warning: macro redefined: isnan
"/usr/include/ieeefp.h", line 59: syntax error before or at: !
"/usr/include/ieeefp.h", line 59: warning: old-style declaration or
incorrect type for: isnan_ld
"/usr/include/ieeefp.h", line 59: identifier redefined: isnan_ld
        current : function(double) returning int
        previous: function(long double) returning int : "../missing.h",
line 156
"/usr/include/ieeefp.h", line 59: syntax error before or at: :
"/usr/include/ieeefp.h", line 59: warning: old-style declaration or
incorrect type for: isnan_d
"/usr/include/ieeefp.h", line 59: identifier redefined: isnan_d
        current : function(double) returning int
        previous: function(double) returning int : "../missing.h", line 155
"/usr/include/ieeefp.h", line 59: syntax error before or at: :
"/usr/include/ieeefp.h", line 59: warning: old-style declaration or
incorrect type for: isnan_f
"/usr/include/ieeefp.h", line 59: identifier redefined: isnan_f
        current : function(double) returning int
        previous: function(float) returning int : "../missing.h", line 154
"/usr/include/ieeefp.h", line 59: syntax error before or at: )
"/usr/include/ieeefp.h", line 59: warning: syntax error:  empty declaration
"../bignum.c", line 1309: warning: integer overflow detected: op "<<"
cc: acomp failed for ../bignum.c



>
>Index: configure.in
>===================================================================
>RCS file: /src/ruby/configure.in,v
>retrieving revision 1.212.2.42
>diff -u -w -b -p -r1.212.2.42 configure.in
>--- configure.in 1 Feb 2006 13:27:47 -0000     1.212.2.42
>+++ configure.in 2 Feb 2006 03:57:00 -0000
>@@ -436,7 +436,7 @@ AC_FUNC_FSEEKO
>AC_CHECK_FUNCS(ftello)
>AC_REPLACE_FUNCS(dup2 memmove strcasecmp strncasecmp strerror strftime\
>strchr strstr strtoul crypt flock vsnprintf\
>-           isnan finite isinf hypot acosh erf)
>+           hypot acosh erf)
>AC_CHECK_FUNCS(fmod killpg wait4 waitpid syscall chroot fsync getcwd
eaccess\
>truncate chsize times utimes fcntl lockf lstat symlink link\
>readlink setitimer setruid seteuid setreuid setresuid\
>Index: missing.h
>===================================================================
>RCS file: /src/ruby/missing.h,v
>retrieving revision 1.13.2.3
>diff -u -w -b -p -r1.13.2.3 missing.h
>--- missing.h    25 Jan 2006 13:30:11 -0000    1.13.2.3
>+++ missing.h    2 Feb 2006 03:58:54 -0000
>@@ -43,9 +43,11 @@ extern int dup2 _((int, int));
>extern int eaccess _((const char*, int));
>#endif
>
>+/*
>#ifndef HAVE_FINITE
>extern int finite _((double));
>#endif
>+*/
>
>#ifndef HAVE_FLOCK
>extern int flock _((int, int));
>@@ -66,6 +68,7 @@ extern double erf _((double));
>extern double erfc _((double));
>#endif
>
>+/*
>#ifndef HAVE_ISINF
># if defined(HAVE_FINITE) && defined(HAVE_ISNAN)
># define isinf(x) (!finite(x) && !isnan(x))
>@@ -73,10 +76,13 @@ extern double erfc _((double));
>extern int isinf _((double));
># endif
>#endif
>+*/
>
>+/*
>#ifndef HAVE_ISNAN
>extern int isnan _((double));
>#endif
>+*/
>
>/*
>#ifndef HAVE_MEMCMP
>@@ -139,4 +145,30 @@ extern int snprintf __((char *, size_t n
>extern int vsnprintf _((char *, size_t n, char const *, va_list));
>#endif
>
>+#ifndef isnan
>+# include <math.h>
>+# define isnan(x) \
>+    (sizeof (x) == sizeof (long double) ? isnan_ld (x) \
>+     : sizeof (x) == sizeof (double) ? isnan_d (x) \
>+     : isnan_f (x))
>+static inline int isnan_f  (float       x) { return x != x; }
>+static inline int isnan_d  (double      x) { return x != x; }
>+static inline int isnan_ld (long double x) { return x != x; }
>+#endif
>+
>+# include <math.h>
>+# define isinf(x) \
>+    (sizeof (x) == sizeof (long double) ? isinf_ld (x) \
>+     : sizeof (x) == sizeof (double) ? isinf_d (x) \
>+     : isinf_f (x))
>+static inline int isinf_f  (float       x) { return isnan (x - x); }
>+static inline int isinf_d  (double      x) { return isnan (x - x); }
>+static inline int isinf_ld (long double x) { return isnan (x - x); }
>+#endif
>+
>+# define finite(x) (!isnan(x) && !isinf(x))
>+#endif
>+
>
>
>