The current version of Gnulib's 'getrandom' has a couple of problems when compiled with MinGW:
1. It assumes that the header bcrypt.h is always available. This is true for MinGW64, but not for mingw.org's MinGW. A proposed patch to allow the code be compiled without bcrypt.h is below, it is required in Emacs because Emacs still supports versions of Windows older than Vista. 2. It causes the calling program to be linked against bcrypt.dll if that library is available at build time. This will cause problems if the produced program is then copied to a system where bcrypt.dll is not available, because the program will refuse to start. Since the code to dynamically load bcrypt.dll is already in getrandom.c, I suggest to leave only it, and remove the possibility of linking against the DLL -- it is IMO more trouble than help. (In Emacs, I needed to set gl_cv_lib_assume_bcrypt=no to avoid producing such problematic binaries, but most people won't look so close at the code, and will not understand the consequences.) Here's the patch I propose to let getrandom.c compile for versions of Windows older than Vista: diff --git a/lib/getrandom.c b/lib/getrandom.c index f0b3f53..112c100 100644 --- a/lib/getrandom.c +++ b/lib/getrandom.c @@ -29,7 +29,13 @@ #if defined _WIN32 && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include <windows.h> -# include <bcrypt.h> +# if _WIN32_WINNT >= 0x0600 +# include <bcrypt.h> +# else + typedef LONG NTSTATUS; + typedef void *BCRYPT_ALG_HANDLE; +# define BCRYPT_USE_SYSTEM_PREFERRED_RNG 0x00000002 +# endif # if !HAVE_LIB_BCRYPT # include <wincrypt.h> # ifndef CRYPT_VERIFY_CONTEXT