[FFmpeg-devel] [PATCH 2/2] configure: libbsd support for arc4random()

Ganesh Ajjanagadde gajjanagadde at gmail.com
Mon Dec 7 04:56:33 CET 2015


On non-BSD machines, there exists a package libbsd for providing BSD
functionality. This can be used to get support for arc4random.

Thus, an opt-in --enable-libbsd is added to configure for this
functionality.

Tested on GNU/Linux.

Signed-off-by: Ganesh Ajjanagadde <gajjanagadde at gmail.com>
---
 configure               | 23 +++++++++++++++++++++++
 libavutil/random_seed.c |  7 ++++++-
 2 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/configure b/configure
index e676269..bf18198 100755
--- a/configure
+++ b/configure
@@ -211,6 +211,7 @@ External library support:
   --enable-libass          enable libass subtitles rendering,
                            needed for subtitles and ass filter [no]
   --enable-libbluray       enable BluRay reading using libbluray [no]
+  --enable-libbsd          enable random seeding via arc4random [no]
   --enable-libbs2b         enable bs2b DSP library [no]
   --enable-libcaca         enable textual display using libcaca [no]
   --enable-libcelt         enable CELT decoding via libcelt [no]
@@ -1295,6 +1296,26 @@ require_pkg_config(){
     use_pkg_config "$@" || die "ERROR: $pkg not found using pkg-config$pkg_config_fail_message"
 }
 
+require_libbsd(){
+    log require_libbsd "$@"
+    pkg="libbsd"
+    check_cmd $pkg_config --exists --print-errors $pkg \
+      || die "ERROR: $pkg not found"
+    pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)
+    pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg)
+    {
+        echo "#define _DEFAULT_SOURCE"
+        echo "#include <bsd/stdlib.h>"
+        echo "long check_func(void) { return (long) arc4random; }"
+        echo "int main(void) { return 0; }"
+    } | check_ld "cc" $pkg_cflags $pkg_libs \
+      && set_safe "${pkg}_cflags" $pkg_cflags \
+      && set_safe "${pkg}_libs"   $pkg_libs \
+      || die "ERROR: $pkg not found"
+    add_cflags    $(get_safe "${pkg}_cflags")
+    add_extralibs $(get_safe "${pkg}_libs")
+}
+
 require_libfreetype(){
     log require_libfreetype "$@"
     pkg="freetype2"
@@ -1441,6 +1462,7 @@ EXTERNAL_LIBRARY_LIST="
     libaacplus
     libass
     libbluray
+    libbsd
     libbs2b
     libcaca
     libcdio
@@ -5386,6 +5408,7 @@ enabled libiec61883       && require libiec61883 libiec61883/iec61883.h iec61883
 enabled libaacplus        && require "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus
 enabled libass            && require_pkg_config libass ass/ass.h ass_library_init
 enabled libbluray         && require_pkg_config libbluray libbluray/bluray.h bd_open
+enabled libbsd            && require_libbsd
 enabled libbs2b           && require_pkg_config libbs2b bs2b.h bs2b_open
 enabled libcelt           && require libcelt celt/celt.h celt_decode -lcelt0 &&
                              { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
diff --git a/libavutil/random_seed.c b/libavutil/random_seed.c
index 205a636..464b406 100644
--- a/libavutil/random_seed.c
+++ b/libavutil/random_seed.c
@@ -20,6 +20,8 @@
 
 #include "config.h"
 
+#define _DEFAULT_SOURCE
+#define _BSD_SOURCE
 #if HAVE_UNISTD_H
 #include <unistd.h>
 #endif
@@ -30,6 +32,9 @@
 #include <windows.h>
 #include <wincrypt.h>
 #endif
+#if CONFIG_LIBBSD
+#include <bsd/stdlib.h>
+#endif
 #include <fcntl.h>
 #include <math.h>
 #include <time.h>
@@ -121,7 +126,7 @@ uint32_t av_get_random_seed(void)
     }
 #endif
 
-#if HAVE_ARC4RANDOM
+#if HAVE_ARC4RANDOM || CONFIG_LIBBSD
     return arc4random();
 #endif
 
-- 
2.6.3



More information about the ffmpeg-devel mailing list