diff options
author | James Laird <jlaird@hdfgroup.org> | 2005-05-05 17:38:59 (GMT) |
---|---|---|
committer | James Laird <jlaird@hdfgroup.org> | 2005-05-05 17:38:59 (GMT) |
commit | b0e5134171d5c92a0b50bae4daba97651eeeafe6 (patch) | |
tree | ddef77a0e5d0a56eda180c068b4fe66398998a68 | |
parent | 8570c314ef67c03f9b3ef9609c49cff7ee6488c0 (diff) | |
download | hdf5-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-x | configure | 111 | ||||
-rw-r--r-- | configure.in | 1 | ||||
-rw-r--r-- | src/H5config.h.in | 6 | ||||
-rw-r--r-- | src/H5private.h | 12 |
4 files changed, 124 insertions, 6 deletions
@@ -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 */ |