Parcourir la source

re-fix erand48_r use on BSD

Samuel Thibault il y a 13 ans
Parent
commit
c46d26e887
3 fichiers modifiés avec 15 ajouts et 11 suppressions
  1. 4 0
      configure.ac
  2. 2 8
      include/starpu_config.h.in
  3. 9 3
      include/starpu_rand.h

+ 4 - 0
configure.ac

@@ -140,6 +140,7 @@ AC_CHECK_FUNCS([memalign], [AC_DEFINE([STARPU_HAVE_MEMALIGN], [1], [Define to 1
 
 # Some systems don't have drand48
 AC_CHECK_FUNC([drand48], have_drand48=yes, have_drand48=no)
+AC_CHECK_FUNC([erand48_r], have_erand48_r=yes, have_erand48_r=no)
 # Maybe the user still does not want to use the provided drand48
 AC_ARG_ENABLE(default-drand48, [AS_HELP_STRING([--disable-default-drand48],
 				   [Do not use the default version of drand48])],
@@ -147,6 +148,9 @@ AC_ARG_ENABLE(default-drand48, [AS_HELP_STRING([--disable-default-drand48],
 if test x$have_drand48 = xyes -a x$enable_default_drand48 = xyes ; then
    AC_DEFINE([STARPU_USE_DRAND48], [1], [Define to 1 if drandr48 is available and should be used])
 fi
+if test x$have_erand48_r = xyes ; then
+   AC_DEFINE([STARPU_USE_ERAND48_R], [1], [Define to 1 if erandr48_r is available])
+fi
 
 # Some systems do not define strerror_r
 AC_CHECK_FUNC([strerror_r], [AC_DEFINE([STARPU_HAVE_STRERROR_R], [1], [Define to 1 if the function strerro_r is available.])])

+ 2 - 8
include/starpu_config.h.in

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
- * Copyright (C) 2009-2011  Université de Bordeaux 1
+ * Copyright (C) 2009-2012  Université de Bordeaux 1
  * Copyright (C) 2010, 2011, 2012  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
@@ -75,13 +75,6 @@
 
 #undef STARPU_HAVE_WINDOWS
 
-#undef starpu_drand48
-#undef starpu_srand48
-#undef starpu_erand48
-
-#undef starpu_srand48_r
-#undef starpu_erand48_r
-
 #ifdef _MSC_VER
 typedef long starpu_ssize_t;
 #define __starpu_func__ __FUNCTION__
@@ -93,5 +86,6 @@ typedef ssize_t starpu_ssize_t;
 
 #undef STARPU_SLOW_MACHINE
 #undef STARPU_USE_DRAND48
+#undef STARPU_USE_ERAND48_R
 
 #endif

+ 9 - 3
include/starpu_rand.h

@@ -21,12 +21,18 @@
 #include <starpu_config.h>
 
 #ifdef STARPU_USE_DRAND48
-typedef struct drand48_data starpu_drand48_data;
 #  define starpu_srand48(seed)				srand48(seed)
 #  define starpu_drand48()				drand48()
 #  define starpu_erand48(xsubi)				erand48(xsubi)
-#  define starpu_srand48_r(seed, buffer)		srand48_r(seed, buffer)
-#  define starpu_erand48_r(xsubi, buffer, result)	erand48_r(xsubi, buffer, result)
+#  ifdef STARPU_USE_ERAND48_R
+typedef struct drand48_data starpu_drand48_data;
+#    define starpu_srand48_r(seed, buffer)		srand48_r(seed, buffer)
+#    define starpu_erand48_r(xsubi, buffer, result)	erand48_r(xsubi, buffer, result)
+#else
+typedef int starpu_drand48_data;
+#    define starpu_srand48_r(seed, buffer)		srand48(seed)
+#    define starpu_erand48_r(xsubi, buffer, result)	do {*(result) = erand48(xsubi); } while (0)
+#  endif
 #else
 typedef int starpu_drand48_data;
 #  define starpu_srand48(seed)				srand(seed)