Thanks for looking into this. Some comments. This doesn't let you say "I want either c89 or c99, but not c11".
+ m4_ifdef([_AC_C_STANDARD_VERSION_LIST], + [m4_fatal([AC_PROG_C_STANDARD_VERSION should only be used once], 1)])
Why have this check? How about something simpler, like replacing this: m4_map([_AC_PROG_CC_STDC_EDITION_TRY], [[11], [99], [89]])]) with this: m4_map([_AC_PROG_CC_STDC_EDITION_TRY], [m4_default([_AC_C_STANDARD_VERSION_LIST], [[11], [99], [89]])]) and not bothering to check for allowed or duplicated version lists?