Re: How to get autoconf to respect CC="gcc -std=c89"?
Evgeny Grin <[email protected]> Wed, 11 Oct 2023 15:27:21 +0300
| Newsgroups | gmane.comp.sysutils.autoconf.general |
|---|---|
| Message-ID | <[email protected]> |
I don't think that proposed patch would work as expected by users. For example, if compiler supports by default C17 and user specified AC_C_STANDARD_VERSION([c89 c99 c11]) then tests would finish with C17 enabled. Moreover, if user stated AC_C_STANDARD_VERSION([c89]), and C89 must be the only accepted version, the tests would finish with the same C17 support enabled. If C11 is enabled by default, it would be enabled regardless what is specified by AC_C_STANDARD_VERSION. The problem is the checks are written in forward-compatible way, so C89 check would succeed with C11. The current implementation does not check whether C99 would fail if C89 is requested and does not try to find compiler options to *minimize* supported C version. This wouldn't work for the original problem: detection of C++-style comments by force enabling C89-only to check that sources still could be compiled with C89 compiler. -- Evgeny On 11.10.2023 10:43, Niels Möller wrote: > Niels Möller <[email protected]> writes: > >> Updated patch below. > > How do we move this forward? I think we first need to settle the > user-visible part, i.e., how AC_C_STANDARD_VERSION should work (and if > that's a good name). Latest patch aims for the following, which seems > reasonable to me: > > * Single argument, white-space separated list of C language versions, in > order of preference. Known versions being c89, c99, c11 (upper- or > lower-case). > > * Error on unknown version, error on empty (space-only) argument. > > * Error if used after AC_PROG_CC, or used multiple times. > > The effect is to test, in order, if the C compiler supports the given > language version, or can be made to support it by adding additional > flags to ${CC}. Default behavior is unchanged, and equivalent to > > AC_C_STANDARD_VERSION([c11 c99 c89]) > > I'd be happy to sign FSF copyright assignment forms, if required. > > Regards, > /Niels > >> diff --git a/lib/autoconf/c.m4 b/lib/autoconf/c.m4 >> index 77ff1af8..adb718f3 100644 >> --- a/lib/autoconf/c.m4 >> +++ b/lib/autoconf/c.m4 >> @@ -1561,6 +1561,26 @@ m4_define([_AC_C_C11_OPTIONS], [ >> -std=gnu11 >> ]) >> >> +# _AC_C_CHECK_STANDARD_VERSION >> +# ---------------------------- >> +# Translate C version c89, c99, c11 to just the numeric year, >> +# and raise an error for unknown versions. >> +AC_DEFUN([_AC_C_CHECK_STANDARD_VERSION], [dnl >> +m4_case(m4_translit([$1], [C], [c]), [c89], 89, [c99], 99, [c11], 11, >> +[m4_fatal([Unknown C language revision $1], 1)])dnl >> +]) >> + >> +# AC_C_STANDARD_VERSION(VERSIONS) >> +# ------------------------------- >> +# Specifies a whitespace separated list of wanted C versions, in order >> +# of preference, e.g., AC_C_STANDARD_VERSION([c99 c89]) >> +AC_DEFUN([AC_C_STANDARD_VERSION], [ >> + m4_ifdef([_AC_C_STANDARD_VERSION_LIST], >> + [m4_fatal([AC_PROG_CC_STANDARD_EDITION used after AC_PROG_CC], 1)]) >> + m4_ifblank([$1], [m4_fatal([C language revision not specified], 1)]) >> + m4_define([_AC_C_STANDARD_VERSION_LIST], >> + [m4_map_args_w([$1],[_AC_C_CHECK_STANDARD_VERSION(], [)], [,])]) >> +]) >> >> # _AC_PROG_CC_STDC_EDITION_TRY(EDITION) >> # ------------------------------------- >> @@ -1623,7 +1643,8 @@ AS_IF([test "x$ac_cv_prog_cc_c$1" = xno], >> # variable ac_prog_cc_stdc to indicate the edition. >> AC_DEFUN([_AC_PROG_CC_STDC_EDITION], >> [ac_prog_cc_stdc=no >> -m4_map([_AC_PROG_CC_STDC_EDITION_TRY], [[11], [99], [89]])]) >> +m4_define_default([_AC_C_STANDARD_VERSION_LIST], [[11], [99], [89]]) >> +m4_map([_AC_PROG_CC_STDC_EDITION_TRY], [_AC_C_STANDARD_VERSION_LIST])]) >> >> >> # _AC_PROG_CC_C89(ACTION-IF-SUPPORTED, ACTION-IF-NOT-SUPPORTED) >
OpenPGP_0x460A317C3326D2AE.asc
(application/pgp-keys, 3.9 KB)
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 =JMK1 -----END PGP PUBLIC KEY BLOCK-----
OpenPGP_signature.asc
(application/pgp-signature, 840 B)
-----BEGIN PGP SIGNATURE----- wsF5BAABCAAjFiEE6oEtvvpafvF9qPLBRgoxfDMm0q4FAmUmlKoFAwAAAAAACgkQRgoxfDMm0q5x oBAAiT1kqOviYqjweUdktRj4Y1skSQ9nYXXfY1KjIlDMreCFarqOu6E0mYzWHOoEwELDehSjtsKf NcEHz7HK96b7/Hc4DTY8Tqm6Rvm3k6+u2m1uer4lFpkGHfzuIzT4oMMrhRVfZgM1WhP7DkxrBy5H gqeR0xj9aV3p57qtwlHQTkHGh65HuAbTUDd4A1S5uGcXa3HMulOlLK7x+Xn44YU/I0nIHuf93lCG JiCXJ0yjwK4Z8YW2bkbCnMuNUhdUS0E/o1Qddqt7NG7OyDEIEN+hhWgLtsAVHfFUdGPPB7WydUA1 hUHqL3dKB1qM2F4wb+LQ6XGdk1EOeGquk2KlO0yMyFIPaF4xTvw9YEfc8lnLOEXfl015OrbWDmUn 2DOGhSdztnebm5NNbnWUwF8IZi19qacSOsXSa6A6nOjSUIilirEpG8pBRylwZ4GXBmHXucYi7ZUk 5IauZoYEIa3s+2eqUqG11vuYPtRrkluLLBj1L8B7IcHQU4Unudu1I2NM/1l1WNYak4fZHo+WpOZU kvNnlG7/6NfW9Zfvx3eb66sJIbwH/1IXARAGWnZZ5Lo4BKR7BrbxzHw/HO1G3TNJLpUXPLuehgro Sv+dedtjuN9e1FjyKgpvdJv84F7EtFXlqD0CNWlc6cumsF+9vxNE/F6K2m0cyzNosptHOZqSC1F5 vhc= =5Vf7 -----END PGP SIGNATURE-----