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-----