On Mon, Jan 13, 2025 at 09:33:40AM +0100, Patrick Steinhardt wrote: > diff --git a/meson.build b/meson.build > index 5e1373f6a52a91beb527d00d8fd5c55d377c718b..cb352ce6fd50616e3281a776104692c5b2bfa5b2 100644 > --- a/meson.build > +++ b/meson.build > @@ -1325,6 +1325,7 @@ if not meson.is_cross_build() and fs.exists('/dev/tty') > @@ -1421,18 +1422,28 @@ else > error('Unhandled SHA256 backend ' + sha256_backend) > endif > > -if compiler.has_header_symbol('stdlib.h', 'arc4random_buf') > +if csprng_backend in ['auto', 'arc4random'] and compiler.has_header_symbol('stdlib.h', 'arc4random_buf', required: csprng_backend == 'arc4random') > libgit_c_args += '-DHAVE_ARC4RANDOM' > -elif compiler.has_header_symbol('bsd/stdlib.h', 'arc4random_buf') > + csprng_backend = 'arc4random' > +elif csprng_backend in ['auto', 'arc4random_bsd'] and compiler.has_header_symbol('bsd/stdlib.h', 'arc4random_buf', required: csprng_backend == 'arc4random_bsd') > libgit_c_args += '-DHAVE_ARC4RANDOM_BSD' > -elif compiler.has_function('getrandom', prefix: '#include <sys/random.h>') > + csprng_backend = 'arc4random_bsd' > +elif csprng_backend in ['auto', 'getrandom'] and compiler.has_function('getrandom', prefix: '#include <sys/random.h>', required: csprng_backend == 'getrandom') > libgit_c_args += '-DHAVE_GETRANDOM' > -elif compiler.has_function('getentropy', prefix: '#include <unistd.h>') > + csprng_backend = 'getrandom' > +elif csprng_backend in ['auto', 'getentropy'] and compiler.has_function('getentropy', prefix: '#include <unistd.h>', required: csprng_backend == 'getentropy') > libgit_c_args += '-DHAVE_GETENTROPY' > -elif compiler.has_function('RtlGenRandom', prefix: '#include <windows.h>\n#include <ntsecapi.h>') > + csprng_backend = 'getentropy' > +elif csprng_backend in ['auto', 'rtlgenrandom'] and compiler.has_function('RtlGenRandom', prefix: '#include <windows.h>\n#include <ntsecapi.h>', required: csprng_backend == 'rtlgenrandom') > libgit_c_args += '-DHAVE_RTLGENRANDOM' > -elif openssl.found() > + csprng_backend = 'rtlgenrandom' > +elif csprng_backend in ['auto', 'openssl'] and openssl.found() > libgit_c_args += '-DHAVE_OPENSSL_CSPRNG' > + csprng_backend = 'openssl' > +elif csprng_backend in ['auto', 'urandom'] > + csprng_backend = 'urandom' > +else > + error('Unsupported CSPRNG backend: ' + csprng_backend) > endif > > if get_option('runtime_prefix') I just noticed that this generates warnings because we use features not yet in Meson v0.61.0, which is our minimum required version. I'll convert these to instead use `compiler.has_header_symbol()` consistently, which is nicer to read anyway, and will add another patch on top that makes us use `--fatal-meson-warnings` in CI so that warnings will cause us to abort the build. Patrick