Re: [PATCH] gdb: Respect CXXFLAGS when building with C++ compiler

Pedro Alves
2016-01-20T20:40:22Z

On 01/20/2016 08:05 PM, Simon Marchi wrote:
> On 16-01-20 06:07 AM, Pedro Alves wrote:
>> Currently, even when built with --enable-build-with-cxx, gdb uses
>> CFLAGS instead of CXXFLAGS. This commit fixes it.
>>
>> CXXFLAGS set in the environment when configure was run is now honored
>> in the generated gdb/Makefile, and you can also override CXXFLAGS in
>> the command like at make time, with the usual 'make CXXFLAGS="..."'
>>
>> Objects built with a C compiler (e.g., gnulib) still honor CFLAGS
>> instead.
>>
>> gdb/ChangeLog:
>> 2016-01-20 Pedro Alves <palves@redhat.com>
>>
>> * Makefile.in (COMPILER_CFLAGS): New.
>> (CXXFLAGS): Get it from configure.
>> (INTERNAL_CFLAGS_BASE, INTERNAL_LDFLAGS): Use COMPILER_CFLAGS
>> instead of CFLAGS.
>> * build-with-cxx.m4 (GDB_AC_BUILD_WITH_CXX): Set and AC_SUBST
>> COMPILER_CFLAGS.
>> * configure: Regenerate.
>>
>> gdb/gdbserver/ChangeLog:
>> 2016-01-20 Pedro Alves <palves@redhat.com>
>>
>> * Makefile.in (COMPILER_CFLAGS, CXXFLAGS): New.
>> (INTERNAL_CFLAGS_BASE, INTERNAL_LDFLAGS): Use COMPILER_CFLAGS
>> instead of CFLAGS.
>> * configure: Regenerate.
>> ---
>> gdb/Makefile.in | 18 +++++++++---------
>> gdb/build-with-cxx.m4 | 3 +++
>> gdb/configure | 4 ++++
>> gdb/gdbserver/Makefile.in | 7 +++++--
>> gdb/gdbserver/configure | 4 ++++
>> 5 files changed, 25 insertions(+), 11 deletions(-)
>>
>> diff --git a/gdb/Makefile.in b/gdb/Makefile.in
>> index 895ece6..5e8eb9a 100644
>> --- a/gdb/Makefile.in
>> +++ b/gdb/Makefile.in
>> @@ -81,6 +81,8 @@ CATALOGS = @CATALOGS@
>>
>> # The name of the compiler to use.
>> COMPILER = @COMPILER@
>> +# Set to CFLAGS or CXXFLAGS, depending on compiler/language.
>> +COMPILER_CFLAGS = @COMPILER_CFLAGS@
>>
>> # If you are compiling with GCC, make sure that either 1) You have the
>> # fixed include files where GCC can reach them, or 2) You use the
>> @@ -551,9 +553,10 @@ GLOBAL_CFLAGS = $(MH_CFLAGS)
>>
>> PROFILE_CFLAGS = @PROFILE_CFLAGS@
>>
>> -# CFLAGS is specifically reserved for setting from the command line
>> -# when running make. I.E. "make CFLAGS=-Wmissing-prototypes".
>> +# These are specifically reserved for setting from the command line
>> +# when running make. I.E.: "make CFLAGS=-Wmissing-prototypes".
>> CFLAGS = @CFLAGS@
>> +CXXFLAGS = @CXXFLAGS@
>>
>> # Set by configure, for e.g. expat. Python installations are such that
>> # C headers are included using their basename (for example, we #include
>> @@ -563,14 +566,9 @@ CFLAGS = @CFLAGS@
>> # a bit the consequences by putting the Python includes last in the list.
>> INTERNAL_CPPFLAGS = @CPPFLAGS@ @GUILE_CPPFLAGS@ @PYTHON_CPPFLAGS@
>>
>> -# Need to pass this to testsuite for "make check". Probably should be
>> -# consistent with top-level Makefile.in and gdb/testsuite/Makefile.in
>> -# so "make check" has the same result no matter where it is run.
>> -CXXFLAGS = -g -O
>> -
>> # INTERNAL_CFLAGS is the aggregate of all other *CFLAGS macros.
>> INTERNAL_CFLAGS_BASE = \
>> - $(CFLAGS) $(GLOBAL_CFLAGS) $(PROFILE_CFLAGS) \
>> + $(COMPILER_CFLAGS) $(GLOBAL_CFLAGS) $(PROFILE_CFLAGS) \
>> $(GDB_CFLAGS) $(OPCODES_CFLAGS) $(READLINE_CFLAGS) $(ZLIBINC) \
>> $(BFD_CFLAGS) $(INCLUDE_CFLAGS) $(LIBDECNUMBER_CFLAGS) \
>> $(INTL_CFLAGS) $(INCGNU) $(ENABLE_CFLAGS) $(INTERNAL_CPPFLAGS)
>> @@ -585,7 +583,9 @@ LDFLAGS = @LDFLAGS@
>> # I think it's perfectly reasonable for a user to set -pg in CFLAGS
>> # and have it work; that's why CFLAGS is here.
>> # PROFILE_CFLAGS is _not_ included, however, because we use monstartup.
>> -INTERNAL_LDFLAGS = $(CFLAGS) $(GLOBAL_CFLAGS) $(MH_LDFLAGS) $(LDFLAGS) $(CONFIG_LDFLAGS)
>> +INTERNAL_LDFLAGS = \
>> + $(COMPILER_CFLAGS) $(GLOBAL_CFLAGS) $(MH_LDFLAGS) \
>> + $(LDFLAGS) $(CONFIG_LDFLAGS)
>>
>> # If your system is missing alloca(), or, more likely, it's there but
>> # it doesn't work, then refer to libiberty.
>> diff --git a/gdb/build-with-cxx.m4 b/gdb/build-with-cxx.m4
>> index d282092..6eb9143 100644
>> --- a/gdb/build-with-cxx.m4
>> +++ b/gdb/build-with-cxx.m4
>> @@ -33,8 +33,11 @@ AC_DEFUN([GDB_AC_BUILD_WITH_CXX],
>>
>> if test "$enable_build_with_cxx" = "yes"; then
>> COMPILER='$(CXX)'
>> + COMPILER_CFLAGS='$(CXXFLAGS)'
>> else
>> COMPILER='$(CC)'
>> + COMPILER_CFLAGS='$(CFLAGS)'
>> fi
>> AC_SUBST(COMPILER)
>> + AC_SUBST(COMPILER_CFLAGS)
>> ])
>> diff --git a/gdb/configure b/gdb/configure
>> index 56deb9c..34d6539 100755
>> --- a/gdb/configure
>> +++ b/gdb/configure
>> @@ -731,6 +731,7 @@ MAKE
>> CCDEPMODE
>> DEPDIR
>> am__leading_dot
>> +COMPILER_CFLAGS
>> COMPILER
>> INSTALL_STRIP_PROGRAM
>> STRIP
>> @@ -5015,12 +5016,15 @@ fi
>>
>> if test "$enable_build_with_cxx" = "yes"; then
>> COMPILER='$(CXX)'
>> + COMPILER_CFLAGS='$(CXXFLAGS)'
>> else
>> COMPILER='$(CC)'
>> + COMPILER_CFLAGS='$(CFLAGS)'
>> fi
>>
>>
>>
>> +
>> # Dependency checking.
>> rm -rf .tst 2>/dev/null
>> mkdir .tst 2>/dev/null
>> diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in
>> index 4719e48..f9b9dbe 100644
>> --- a/gdb/gdbserver/Makefile.in
>> +++ b/gdb/gdbserver/Makefile.in
>> @@ -51,6 +51,8 @@ RANLIB = @RANLIB@
>>
>> # The name of the compiler to use.
>> COMPILER = @COMPILER@
>> +# Set to CFLAGS or CXXFLAGS, depending on compiler/language.
>> +COMPILER_CFLAGS = @COMPILER_CFLAGS@
>
> Maybe call this COMPILER_FLAGS?

Yeah, it crossed my mind too, but then all others end up _CFLAGS,
like INTERNAL_CFLAGS, GLOBAL_CFLAGS, GDB_WERROR_CFLAGS,
INTERNAL_WARN_CFLAGS, etc., which are used in c++ too,
that I thought it ended up looking the odd one out. WDYT?

>
> Otherwise, LGTM.
>

Thanks,
Pedro Alves