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