[PATCH] change llvm configure arc4random presence test to fix broken configuration

Todd Fiala tfiala at google.com
Tue Feb 4 16:40:49 PST 2014


Take 2 - this time with the cmake #define name adjusted to match the name
change generated by using a different autoconf macro for the arc4random
check.

Verified by running and building with cmake on Ubuntu 12.04 x86_64 and
verifying the variable name generated was correct:

~/work/build4: $ grep -R HAVE_DECL_ARC4RANDOM *
CMakeCache.txt:HAVE_DECL_ARC4RANDOM:INTERNAL=

How does that look?



On Tue, Feb 4, 2014 at 4:20 PM, Todd Fiala <tfiala at google.com> wrote:

> Thanks,Peter - I'm working on that now.
>
>
> On Tue, Feb 4, 2014 at 4:12 PM, Peter Collingbourne <peter at pcc.me.uk>wrote:
>
>> On Tue, Feb 04, 2014 at 04:03:29PM -0800, Todd Fiala wrote:
>> > -#if !defined(HAVE_ARC4RANDOM)
>> > +#if !defined(HAVE_DECL_ARC4RANDOM) || !HAVE_DECL_ARC4RANDOM
>>
>> I think you also need to rename the symbol in the CMake scripts
>> (cmake/config-ix.cmake
>> and include/llvm/Config/config.h.cmake).
>>
>> Thanks,
>> --
>> Peter
>>
>
>
>
> --
> Todd Fiala | Software Engineer |  tfiala at google.com |  650-943-3180
>



-- 
Todd Fiala | Software Engineer | tfiala at google.com | 650-943-3180
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140204/03982b55/attachment.html>
-------------- next part --------------
Index: include/llvm/Config/config.h.in
===================================================================
--- include/llvm/Config/config.h.in	(revision 200725)
+++ include/llvm/Config/config.h.in	(working copy)
@@ -33,9 +33,6 @@
 /* Directory where gcc is installed. */
 #undef GCC_INSTALL_PREFIX
 
-/* Define to 1 if you have the `arc4random' function. */
-#undef HAVE_ARC4RANDOM
-
 /* Define to 1 if you have the `argz_append' function. */
 #undef HAVE_ARGZ_APPEND
 
@@ -75,6 +72,10 @@
 /* Define to 1 if you have the <cxxabi.h> header file. */
 #undef HAVE_CXXABI_H
 
+/* Define to 1 if you have the declaration of `arc4random', and to 0 if you
+   don't. */
+#undef HAVE_DECL_ARC4RANDOM
+
 /* Define to 1 if you have the declaration of `FE_ALL_EXCEPT', and to 0 if you
    don't. */
 #undef HAVE_DECL_FE_ALL_EXCEPT
Index: lib/Support/Unix/Process.inc
===================================================================
--- lib/Support/Unix/Process.inc	(revision 200725)
+++ lib/Support/Unix/Process.inc	(working copy)
@@ -343,7 +343,7 @@
   return "\033[0m";
 }
 
-#if !defined(HAVE_ARC4RANDOM)
+#if !defined(HAVE_DECL_ARC4RANDOM) || !HAVE_DECL_ARC4RANDOM
 static unsigned GetRandomNumberSeed() {
   // Attempt to get the initial seed from /dev/urandom, if possible.
   if (FILE *RandomSource = ::fopen("/dev/urandom", "r")) {
@@ -364,7 +364,7 @@
 #endif
 
 unsigned llvm::sys::Process::GetRandomNumber() {
-#if defined(HAVE_ARC4RANDOM)
+#if defined(HAVE_DECL_ARC4RANDOM) && HAVE_DECL_ARC4RANDOM
   return arc4random();
 #else
   static int x = (::srand(GetRandomNumberSeed()), 0);
Index: autoconf/configure.ac
===================================================================
--- autoconf/configure.ac	(revision 200725)
+++ autoconf/configure.ac	(working copy)
@@ -1757,13 +1757,16 @@
 AC_CHECK_FUNCS([getpagesize getrusage getrlimit setrlimit gettimeofday ])
 AC_CHECK_FUNCS([isatty mkdtemp mkstemp ])
 AC_CHECK_FUNCS([mktemp posix_spawn pread realpath sbrk setrlimit ])
-AC_CHECK_FUNCS([strerror strerror_r setenv arc4random ])
+AC_CHECK_FUNCS([strerror strerror_r setenv ])
 AC_CHECK_FUNCS([strtoll strtoq sysconf malloc_zone_statistics ])
 AC_CHECK_FUNCS([setjmp longjmp sigsetjmp siglongjmp writev])
 AC_CHECK_FUNCS([futimes futimens])
 AC_C_PRINTF_A
 AC_FUNC_RAND48
 
+dnl Check for arc4random accessible via AC_INCLUDES_DEFAULT.
+AC_CHECK_DECLS([arc4random])
+
 dnl Check the declaration "Secure API" on Windows environments.
 AC_CHECK_DECLS([strerror_s])
 
Index: cmake/config-ix.cmake
===================================================================
--- cmake/config-ix.cmake	(revision 200725)
+++ cmake/config-ix.cmake	(working copy)
@@ -115,7 +115,7 @@
 endif()
 
 # function checks
-check_symbol_exists(arc4random "stdlib.h" HAVE_ARC4RANDOM)
+check_symbol_exists(arc4random "stdlib.h" HAVE_DECL_ARC4RANDOM)
 check_symbol_exists(backtrace "execinfo.h" HAVE_BACKTRACE)
 check_symbol_exists(getpagesize unistd.h HAVE_GETPAGESIZE)
 check_symbol_exists(getrusage sys/resource.h HAVE_GETRUSAGE)
Index: configure
===================================================================
--- configure	(revision 200725)
+++ configure	(working copy)
@@ -18527,8 +18527,7 @@
 
 
 
-
-for ac_func in strerror strerror_r setenv arc4random
+for ac_func in strerror strerror_r setenv
 do
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
 { echo "$as_me:$LINENO: checking for $ac_func" >&5
@@ -19161,6 +19160,93 @@
 fi
 
 
+{ echo "$as_me:$LINENO: checking whether arc4random is declared" >&5
+echo $ECHO_N "checking whether arc4random is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_arc4random+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.  */
+$ac_includes_default
+int
+main ()
+{
+#ifndef arc4random
+  char *p = (char *) arc4random;
+  return !p;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+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_compile") 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'
+  { (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_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (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_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_have_decl_arc4random=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_have_decl_arc4random=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_arc4random" >&5
+echo "${ECHO_T}$ac_cv_have_decl_arc4random" >&6; }
+if test $ac_cv_have_decl_arc4random = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ARC4RANDOM 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ARC4RANDOM 0
+_ACEOF
+
+
+fi
+
+
+
 { echo "$as_me:$LINENO: checking whether strerror_s is declared" >&5
 echo $ECHO_N "checking whether strerror_s is declared... $ECHO_C" >&6; }
 if test "${ac_cv_have_decl_strerror_s+set}" = set; then


More information about the llvm-commits mailing list