Thread
-
Validate user-supplied c_args in meson builds
Bertrand Drouvot <bertranddrouvot.pg@gmail.com> — 2026-03-18T10:01:53Z
Hi hackers, While using an invalid c_args by mistake with clang and meson, I observed the following: $ CC="clang" meson setup meson_build -Dc_args="-Wbad" produces: meson.build:645:4: ERROR: Problem encountered: C compiler does not support C11 This is misleading: my C compiler does support C11 but the C11 check fails due to the invalid arg, as stated in meson-log.txt: " stderr: error: unknown warning option '-Wbad' [-Werror,-Wunknown-warning-option] " OTOH, providing an invalid CFLAG with autoconf and using clang currently produces warnings like: " warning: unknown warning option '-Wbad' [-Wunknown-warning-option] " That's perfectly fine and not misleading. If using gcc instead of clang, then: 1/ with autoconf, we get: " checking whether the C compiler works... no configure: error: in `/home/postgres/postgresql/postgres': configure: error: C compiler cannot create executables See `config.log' for more details " and in config.log: " configure:4028: checking whether the C compiler works configure:4050: gcc -O0 -Wbad conftest.c >&5 gcc: error: unrecognized command-line option '-Wbad'" That's not misleading. 2/ with meson, we get: " $ CC="gcc" meson setup meson_build -Dc_args="-Wbad" meson.build:9:0: ERROR: Compiler gcc cannot compile programs. " That's not misleading. So it looks like that GCC treats an invalid CFLAG as an error by itself, while clang only treats it as a warning (unless -Werror=unknown-warning-option is present). Also, it looks like that when using clang, meson injects -Werror=unknown-warning-option into cc.compiles(). This can be confirmed by creating a simple meson.build as: " project('test', 'c') cc = meson.get_compiler('c') cc.compiles('int main(void){return 0;}', name: 'test probe') " and running the compilation with a valid arg: $ CC=gcc meson setup testbuild -Dc_args="-Wunused-value" and check: $ grep -c unknown-warning-option testbuild/meson-logs/meson-log.txt 0 While (with clang): $ CC=clang meson setup testbuild -Dc_args="-Wunused-value" $ grep -c unknown-warning-option testbuild/meson-logs/meson-log.txt 1 So, PFA, a patch that adds a cc.has_multi_arguments() check before the C11 test so that : CC="clang" meson setup meson_build -Dc_args="-Wbad" now produces: " Compiler for C supports arguments -Wbad: NO meson.build:625:2: ERROR: Problem encountered: One or more c_args are not supported by clang 21.0.0 " and does not report wrongly that the C compiler does not support C11 when using clang with meson (and an invalid c_args). Regards, -- Bertrand Drouvot PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com -
Re: Validate user-supplied c_args in meson builds
Tristan Partin <tristan@partin.io> — 2026-04-15T21:36:35Z
I actually think this is a bug in Meson. I created a PR[0] to propose a fix, but one person's bug is another person's feature. The actual content of the patch seems fine to me, but I would wait to see the result of the pull request fist. [0]: https://github.com/mesonbuild/meson/pull/15714 -- Tristan Partin PostgreSQL Contributors Team AWS (https://aws.amazon.com)