Re: How to get autoconf to respect CC="gcc -std=c89"?

Evgeny Grin <[email protected]> Wed, 11 Oct 2023 17:47:58 +0300
Newsgroups gmane.comp.sysutils.autoconf.general
Message-ID <[email protected]>

On 11.10.2023 17:10, Zack Weinberg wrote:
> On Wed, Oct 11, 2023, at 9:34 AM, Evgeny Grin wrote:
>> It works, actually. ./configure CC=gcc CFLAGS=-std=c89
>>
>> C99 check would fail, compiler would be accepted as C89-compatible.
> 
> This only works if both configure.ac and all the Makefiles have been
> written "correctly".  I put "correctly" in quotes because, yes, it *is*
> how you should write them, and it *is* what you get if you aren't trying
> to do anything complicated -- but if you *do* need to do something
> complicated, it is very easy to break this property by accident and
> without noticing.  And I don't think everything you need to do to avoid
> breaking it is documented, so we can't even claim that we warned people.

It can be broken if:
* CFLAGS are filtered by 'configure' / Makefiles
* CFLAGS value is not passed to Makefiles / not unsed in Makefiles
* Some '-std=xxx' flag is added *after* user CFLAGS in configure / Makefiles

The first case is an intentional break of autoconf design.
The second option is very badly designed configuration, not supported at 
all.
The last one is incorrect as well and intentional prevention of 
user-specified C standard.

In other cases it will work.
Configure will not add -std= overriding flags and CFLAGS are used in 
Makefiles.

However, I agree that current autoconf + automake design is confusing.
At first user's CFLAGS are passed to 'configure'.
The configure *must* pass the same CFLAGS to automake, so if 'make' is 
executed with some CFLAGS=... override, such override must replace only 
user-supplied (for configure) CFLAGS and not automatically added 
compiler flags. At the same time, user CFLAGS should be added *after* 
automatic/configure-detected flags to be able to override them.

Knowing that each and every configure check (for C compiler) uses 
CFLAGS, it is very tempting just to modify CFLAGS inside the configure.

I'm not sure whether there are any suggested way of 
using/passing/modifying flags, which is documented for configure. In my 
projects I use special variable to hold user-supplied CFLAGS, in other 
variable I accumulate configure-detected additional flags. Before every 
check I combine flags like CFLAGS="conf_CFLAGS user_CFLAGS". Finally the 
value of "user_CFLAGS" is passed to automake files as "CFLAGS", value of 
"conf_CFLAGS" is used as part of AM_CFLAGS.
Not sure whether it is the best way and why it is not fully documented, 
but this is another story.

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

wsF5BAABCAAjFiEE6oEtvvpafvF9qPLBRgoxfDMm0q4FAmUmtZ8FAwAAAAAACgkQRgoxfDMm0q4O
1RAAqoiPzh6l30se6Zh+sO0QUZqeNSwyrnZamznjsxRRU/V0KXn5lQx472RcqccbFvmXyKXI8uwK
Eka+ujVchXutfLBFMO67U3WOxZQshWD5iB6dvEMl3qft0m6v0p18VkH+vbn3ovxzCm7UGt3kkbur
9gLv1GDZ5jeNICq1BB3nmgWMIkisdPdUB79ljMx5E/xdW+wg5Bl38HHzVbe9j1cH4+WIbUk/TjiB
5WCGHeY9dZrRIQ1jY/wvDqTT6z7H6+B1C3VBgDGuDVEnPfeh50woqv5buwZCVG3K0koDiEc1hHeK
jg5PqDkF+W5rtwi0MOsBbaDZn5mtqtMnjji1Z0O5lLbPdk5uBYKV6fbFWM2dCIClDF/byWq51V+2
UYxBK1pSGe57AwWoK5AGS6P+kbLrmnexbpcxSupP+bIHm+SQF4hWHA/aCHKGz2cw2XZkUGYG7yHi
SK0/HLbZggh+bquFMQkdsYOaszhh5aO5RhKQPDTb7nWE9jYVinfFeic8xjGYeuCAxRCBg21l+qEO
0a9vWiikoQTLDzMFAyQL7EB1MVjHECtH0u+kQGObcXlnMfmNEimDm+4QdFzB9vkZAXCDGT4q3xQR
yp8lAIb59b+FNfI2AkuY2IeQiQyVM+vZrjpwWe10PwYP4YOBMiQjefHoTKOg/+krxhv/1q5FVY7P
NtY=
=+B6w
-----END PGP SIGNATURE-----