Patrick Steinhardt <ps@xxxxxx> writes: > The CSPRNG backend is not configurable in Meson and isn't quite > discoverable, either. Make it configurable and add the actual backend > used to the summary. Makes sense. Thanks. > +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 IIRC, the precedence order of CPP macros related to csprng backends were chosen to reflect our preference for more secure and faster ones over the ones that are less so. Does the above list recreate the same order, and do we want to somehow make sure future developers would not break that order without knowing our intention, saying "when all things are equal, we should sort in alphabetical order" or something? Thanks.