I'm happy enough with the way that the gmp and mpfr libraries are building. GMP has its own fallback (printf/repl_vsnprintf.c) to use when vsnprintf is found to be unavailable or faulty in behaviour. That fallback seems to work quite well for gmp, but mpfr does not adapt perfectly to it. However, that's not really a bug or defect in MPFR as their INSTALL file says:
In order to have the MPFR formatted output functions based on an ISO-conforming printf(), you need to compile GMP (not MPFR) with CC="gcc -D__USE_MINGW_ANSI_STDIO" (since the standard printf modifiers %e, %Ld and %td are passed to GMP). If I stray from that, then I think it's up to *me* to clean up the mess. And I have no objection to following that directive, anyway. The only reason I stopped defining __USE_MINGW_ANSI_STDIO was that it didn't appear to be doing anything any more. And then I started using UCRT compilers, and have eventually realized that, in at least some situations. it definitely *does* do something. I wasn't expecting such a difference between UCRT and MSVCRT builds of gcc, and just wanted to check that there was nothing amiss going on. I think I can now say that there's no need for any concerns about that - I should just follow the mpfr documentation and move on. I'll outline the problem I struck, for anyone interested, though I think it's off-topic to this thread: Both GMP and MPFR have their own formatting functions - for example gmp_printf and mpfr_printf. These formatting functions are primarily there to format the values held within the GMP and MPFR structs, but they should also handle formatting of the usual C data types (longs, doubles, etc.). So, for a given double precision variable called (say) "d", the following 3 pieces of code should all print the same thing to stdout: printf("%a\n", d); gmp_printf("%a\n", d); mpfr_printf("%a\n", d); And, if GMP was configured with __USE_MINGW_ANSI_STDIO defined, they all work as expected. But if GMP was configured *without* that symbol being defined (in which case the repl_vsnprintf.c fallback is used) then "mpfr_printf("%a\n", d);" simply outputs the error: repl-vsnprintf.c:388: GNU MP assertion failed: len < total_width Thank you for the replies. Much appreciated. Cheers, Rob _______________________________________________ Mingw-w64-public mailing list Mingw-w64-public@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mingw-w64-public