On 9/23/21 4:27 PM, Simon Marchi wrote: > > > On 2021-09-08 8:15 a.m., Tom de Vries wrote: >> Hi, >> >> The problem reported in PR28318 is that when using a gcc version that (while >> supporting c++11) does not support c++11 by default, the configure test for >> std::thread support will fail. >> >> If gdb would use the default AX_CXX_COMPILE_STDCXX from autoconf, then we'd >> have: >> ... >> CXX="g++ -std=gnu++11" >> ... >> and the test for std::thread support would succeed. >> >> Instead, gdb uses a custom AX_CXX_COMPILE_STDCXX (see commit 0bcda685399) >> which does: >> ... >> CXX=g++ >> CXX_DIALECT=-std=gnu++11 >> ... >> >> We could add $CXX_DIALECT to the test for std::thread support, but that would >> have to be repeated for each added c++ support test. >> >> Instead, fix this by doing: >> ... >> CXX="g++ -std=gnu++11" >> CXX_DIALECT=-std=gnu++11 >> ... >> >> The code added in gdb/ax_cxx_compile_stdcxx.m4 is copied from the default >> AX_CXX_COMPILE_STDCXX from autoconf. > > From autoconf-archive? > Yes, updated. > At first glance, it looks like CXX_DIALECT would not be needed anymore, > since it's only used to be appended to CXX in Makefiles. So now it > would end up twice in the command-line, which is not harmful but not > useful. > > However, if we look at the original explanation of why we have this > local modification: > > We need to tweak AX_CXX_COMPILE_STDCXX a bit though. Pristine > upstream AX_CXX_COMPILE_STDCXX appends -std=gnu++11 to CXX directly. > That doesn't work for us, because the top level Makefile passes CXX > down to subdirs, and that overrides whatever gdb/Makefile may set CXX > to. The result would be that a make invocation from the build/gdb/ > directory would use "g++ -std=gnu++11" as expected, while a make > invocation at the top level would not. > > So instead of having AX_CXX_COMPILE_STDCXX set CXX directly, tweak it > to AC_SUBST a separate variable -- CXX_DIALECT -- and use '$(CXX) > (CXX_DIALECT)' to compile/link. > > https://gitlab.com/gnutools/binutils-gdb/-/commit/0bcda68539948828795564b35a497dc69c27f768 > > So it sounds like we need both (and your patch is correct): > > - the switch in CXX for the std::thread tests (and other tests) > - the switch in CXX_DIALECT so it can be appended in Makefiles, to > counteract the fact that the top-level Makefile overrides CXX > > This should probably be explained in the comment, because that situation > is strange, and people might wonder why we end up with two -std=... > switches, and might try to "fix" it. Ack, I've rewritten the commit log to make this more clear (and copied part of you comments). Any further comments? Thanks, - Tom