summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Laird <jlaird@hdfgroup.org>2005-05-05 17:38:59 (GMT)
committerJames Laird <jlaird@hdfgroup.org>2005-05-05 17:38:59 (GMT)
commitb0e5134171d5c92a0b50bae4daba97651eeeafe6 (patch)
treeddef77a0e5d0a56eda180c068b4fe66398998a68
parent8570c314ef67c03f9b3ef9609c49cff7ee6488c0 (diff)
downloadhdf5-b0e5134171d5c92a0b50bae4daba97651eeeafe6.zip
hdf5-b0e5134171d5c92a0b50bae4daba97651eeeafe6.tar.gz
hdf5-b0e5134171d5c92a0b50bae4daba97651eeeafe6.tar.bz2
[svn-r10730] Purpose:
Portability feature Description: The random() and srandom() functions are not available on all machines. Set up the configure script to automatically detect them, rather than requiring their presence or absence to be hardcoded. Solution: Added AC_CHECK_FUNCS macro to configure.in and replaced #ifdef WIN32 conditionals with #ifdef H5_HAVE_RANDOM conditionals. Platforms tested: sleipnir, Windows
-rwxr-xr-xconfigure111
-rw-r--r--configure.in1
-rw-r--r--src/H5config.h.in6
-rw-r--r--src/H5private.h12
4 files changed, 124 insertions, 6 deletions
diff --git a/configure b/configure
index ce25b1d..7bfd0d8 100755
--- a/configure
+++ b/configure
@@ -46511,6 +46511,117 @@ done
+for ac_func in random srandom
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+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. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* 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 $ac_func ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ 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
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
for ac_func in vsnprintf
do
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
diff --git a/configure.in b/configure.in
index 46dcbad..dce7324 100644
--- a/configure.in
+++ b/configure.in
@@ -1493,6 +1493,7 @@ dnl
AC_CHECK_FUNCS(fork frexpf frexpl gethostname getpwuid getrusage)
AC_CHECK_FUNCS(BSDgettimeofday longjmp setsysinfo sigaction)
AC_CHECK_FUNCS(signal snprintf vasprintf strdup system waitpid)
+AC_CHECK_FUNCS(random srandom)
dnl Check for vsnprintf() separately, so we can detect situations where it
dnl doesn't return the correct size for formatted strings that are too large
diff --git a/src/H5config.h.in b/src/H5config.h.in
index d805b36..a5f0d11 100644
--- a/src/H5config.h.in
+++ b/src/H5config.h.in
@@ -205,6 +205,9 @@
/* Define to 1 if you have the <pthread.h> header file. */
#undef HAVE_PTHREAD_H
+/* Define to 1 if you have the `random' function. */
+#undef HAVE_RANDOM
+
/* Define to 1 if you have the <setjmp.h> header file. */
#undef HAVE_SETJMP_H
@@ -223,6 +226,9 @@
/* Define if `socklen_t' is defined */
#undef HAVE_SOCKLEN_T
+/* Define to 1 if you have the `srandom' function. */
+#undef HAVE_SRANDOM
+
/* Define if `struct stat' has the `st_blocks' field */
#undef HAVE_STAT_ST_BLOCKS
diff --git a/src/H5private.h b/src/H5private.h
index ba4ddc7..eb8eae4 100644
--- a/src/H5private.h
+++ b/src/H5private.h
@@ -758,10 +758,10 @@ typedef off_t h5_stat_size_t;
#define HDqsort(M,N,Z,F) qsort(M,N,Z,F)
#define HDraise(N) raise(N)
#define HDrand() rand()
-#ifdef WIN32
-#define HDrandom() rand()
-#else
+#ifdef H5_HAVE_RANDOM
#define HDrandom() random()
+#else
+#define HDrandom() rand()
#endif
#define HDread(F,M,Z) read(F,M,Z)
#define HDreaddir(D) readdir(D)
@@ -801,10 +801,10 @@ typedef off_t h5_stat_size_t;
/* sprintf() variable arguments */
#define HDsqrt(X) sqrt(X)
#define HDsrand(N) srand(N)
-#ifdef WIN32
-#define HDsrandom(N) srand(N)
-#else
+#ifdef H5_HAVE_SRANDOM
#define HDsrandom(N) srandom(N)
+#else
+#define HDsrandom(N) srand(N)
#endif
/* sscanf() variable arguments */