[PATCH 4/4] configure: consistently pass CFLAGS/CXXFLAGS/LDFLAGS to meson

Paolo Bonzini posted 4 patches 5 years, 1 month ago
There is a newer version of this series
[PATCH 4/4] configure: consistently pass CFLAGS/CXXFLAGS/LDFLAGS to meson
Posted by Paolo Bonzini 5 years, 1 month ago
Environment variables like CFLAGS are easy to accidentally change.  Meson
warns if that happens, but in a project with a lot of configuration that
is easy to lose.  It is also surprising behavior since meson caches -D
options and remembers those on reconfiguration (which we rely on,
since configure options become -D options).

By placing the user-provided CFLAGS, CXXFLAGS and LDFLAGS in the
cross file, we at least get consistent behavior.  These environment
variables are still ugly and not really recommended, but there are
distros that rely on them.  For the gory details, refer to
https://github.com/mesonbuild/meson/issues/4664.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 configure   |  4 ++++
 meson.build | 14 ++++++++++++--
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/configure b/configure
index 9a0bbd2a69..952a7479ab 100755
--- a/configure
+++ b/configure
@@ -7794,6 +7794,10 @@ meson_quote() {
 echo "# Automatically generated by configure - do not modify" > $cross
 echo "[properties]" >> $cross
 test -z "$cxx" && echo "link_language = 'c'" >> $cross
+echo "c_args = $(meson_quote $CFLAGS)" >> $cross
+echo "cpp_args = $(meson_quote $CXXFLAGS)" >> $cross
+echo "c_link_args = $(meson_quote $LDFLAGS)" >> $cross
+echo "cpp_link_args = $(meson_quote $LDFLAGS)" >> $cross
 echo "[binaries]" >> $cross
 echo "c = $(meson_quote $cc)" >> $cross
 test -n "$cxx" && echo "cpp = $(meson_quote $cxx)" >> $cross
diff --git a/meson.build b/meson.build
index 1099f2a87c..4d6ef64adf 100644
--- a/meson.build
+++ b/meson.build
@@ -1476,8 +1476,18 @@ if targetos == 'darwin'
   summary_info += {'Objective-C compiler': meson.get_compiler('objc').cmd_array()[0]}
 endif
 summary_info += {'ARFLAGS':           config_host['ARFLAGS']}
-summary_info += {'CFLAGS':            '-O' + get_option('optimization')
-                                           + (get_option('debug') ? ' -g' : '')}
+summary_info += {'CFLAGS':            ' '.join(get_option('c_args')
+                                               + ['-O' + get_option('optimization')]
+                                               + (get_option('debug') ? ['-g'] : []))}
+if link_language == 'cpp'
+  summary_info += {'CXXFLAGS':        ' '.join(get_option('cpp_args')
+                                               + ['-O' + get_option('optimization')]
+                                               + (get_option('debug') ? ['-g'] : []))}
+endif
+link_args = get_option(link_language + '_link_args')
+if link_args.length() > 0
+  summary_info += {'LDFLAGS':         ' '.join(link_args)}
+endif
 summary_info += {'QEMU_CFLAGS':       config_host['QEMU_CFLAGS']}
 summary_info += {'QEMU_LDFLAGS':      config_host['QEMU_LDFLAGS']}
 summary_info += {'make':              config_host['MAKE']}
-- 
2.26.2


Re: [PATCH 4/4] configure: consistently pass CFLAGS/CXXFLAGS/LDFLAGS to meson
Posted by Richard Henderson 5 years, 1 month ago
On 9/20/20 2:30 AM, Paolo Bonzini wrote:
> Environment variables like CFLAGS are easy to accidentally change.  Meson
> warns if that happens, but in a project with a lot of configuration that
> is easy to lose.  It is also surprising behavior since meson caches -D
> options and remembers those on reconfiguration (which we rely on,
> since configure options become -D options).
> 
> By placing the user-provided CFLAGS, CXXFLAGS and LDFLAGS in the
> cross file, we at least get consistent behavior.  These environment
> variables are still ugly and not really recommended, but there are
> distros that rely on them.  For the gory details, refer to
> https://github.com/mesonbuild/meson/issues/4664.
> 
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  configure   |  4 ++++
>  meson.build | 14 ++++++++++++--
>  2 files changed, 16 insertions(+), 2 deletions(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

r~