@@ -1325,6 +1325,7 @@ if not meson.is_cross_build() and fs.exists('/dev/tty')
13251325 libgit_c_args += ' -DHAVE_DEV_TTY'
13261326endif
13271327
1328+ csprng_backend = get_option (' csprng_backend' )
13281329https_backend = get_option (' https_backend' )
13291330sha1_backend = get_option (' sha1_backend' )
13301331sha1_unsafe_backend = get_option (' sha1_unsafe_backend' )
@@ -1336,7 +1337,7 @@ if https_backend == 'auto' and security_framework.found()
13361337 https_backend = ' CommonCrypto'
13371338endif
13381339
1339- openssl_required = ' openssl' in [https_backend, sha1_backend, sha1_unsafe_backend, sha256_backend]
1340+ openssl_required = ' openssl' in [csprng_backend, https_backend, sha1_backend, sha1_unsafe_backend, sha256_backend]
13401341openssl = dependency (' openssl' , required : openssl_required, default_options : [' default_library=static' ])
13411342if https_backend == ' auto' and openssl.found()
13421343 https_backend = ' openssl'
@@ -1421,18 +1422,28 @@ else
14211422 error (' Unhandled SHA256 backend ' + sha256_backend)
14221423endif
14231424
1424- if compiler.has_header_symbol(' stdlib.h' , ' arc4random_buf' )
1425+ if csprng_backend in [ ' auto ' , ' arc4random ' ] and compiler.has_header_symbol(' stdlib.h' , ' arc4random_buf' , required : csprng_backend == ' arc4random ' )
14251426 libgit_c_args += ' -DHAVE_ARC4RANDOM'
1426- elif compiler.has_header_symbol(' bsd/stdlib.h' , ' arc4random_buf' )
1427+ csprng_backend = ' arc4random'
1428+ elif csprng_backend in [' auto' , ' arc4random_bsd' ] and compiler.has_header_symbol(' bsd/stdlib.h' , ' arc4random_buf' , required : csprng_backend == ' arc4random_bsd' )
14271429 libgit_c_args += ' -DHAVE_ARC4RANDOM_BSD'
1428- elif compiler.has_function(' getrandom' , prefix : ' #include <sys/random.h>' )
1430+ csprng_backend = ' arc4random_bsd'
1431+ elif csprng_backend in [' auto' , ' getrandom' ] and compiler.has_function(' getrandom' , prefix : ' #include <sys/random.h>' , required : csprng_backend == ' getrandom' )
14291432 libgit_c_args += ' -DHAVE_GETRANDOM'
1430- elif compiler.has_function(' getentropy' , prefix : ' #include <unistd.h>' )
1433+ csprng_backend = ' getrandom'
1434+ elif csprng_backend in [' auto' , ' getentropy' ] and compiler.has_function(' getentropy' , prefix : ' #include <unistd.h>' , required : csprng_backend == ' getentropy' )
14311435 libgit_c_args += ' -DHAVE_GETENTROPY'
1432- elif compiler.has_function(' RtlGenRandom' , prefix : ' #include <windows.h>\n #include <ntsecapi.h>' )
1436+ csprng_backend = ' getentropy'
1437+ elif csprng_backend in [' auto' , ' rtlgenrandom' ] and compiler.has_function(' RtlGenRandom' , prefix : ' #include <windows.h>\n #include <ntsecapi.h>' , required : csprng_backend == ' rtlgenrandom' )
14331438 libgit_c_args += ' -DHAVE_RTLGENRANDOM'
1434- elif openssl.found()
1439+ csprng_backend = ' rtlgenrandom'
1440+ elif csprng_backend in [' auto' , ' openssl' ] and openssl.found()
14351441 libgit_c_args += ' -DHAVE_OPENSSL_CSPRNG'
1442+ csprng_backend = ' openssl'
1443+ elif csprng_backend in [' auto' , ' urandom' ]
1444+ csprng_backend = ' urandom'
1445+ else
1446+ error (' Unsupported CSPRNG backend: ' + csprng_backend)
14361447endif
14371448
14381449if get_option (' runtime_prefix' )
@@ -1969,6 +1980,7 @@ summary({
19691980}, section : ' Auto-detected features' )
19701981
19711982summary ({
1983+ ' csprng' : csprng_backend,
19721984 ' https' : https_backend,
19731985 ' sha1' : sha1_backend,
19741986 ' sha1_unsafe' : sha1_unsafe_backend,
0 commit comments