Eric Blake wrote: > On 09/06/2012 12:07 AM, Jim Meyering wrote: >> Eric Blake wrote: >> >>> I compiled on FreeBSD 8.2 (gcc 4.2.1), and when I updated to the latest >>> gnulib, I started to see the following in config.log when running >>> ./configure CFLAGS=-g: >>> > >> When you configure with one set of warning options and later >> build with another, as with your "make CFLAGS=-g", you're >> short-circuiting the build tests. When I do that, I >> simply turn off -Werror and ignore the warnings: >> >> make CFLAGS=-g WERROR_CFLAGS= > > But note that I did: > > ./configure CFLAGS=-g
Ah... I didn't read carefully enough. > at the outset. Yes, I'm aware that _if_ you override CFLAGS at make > time, you may have to also disable warnings at that time as well. But > here, I'm talking about the case where I configured optimization to be > off without needing to override CFLAGS at make time; that is, in a > situation where we CAN run a configure test to see whether the warning > will even be effective. > >> >> Of course, you could simply rerun configure with CFLAGS=-g, > > Which is what I did... > >> and it would test each -W option individually... > > except that each -W option individually succeeds. -Wuninitialized only > warns, not errors out, on this particular gcc 4.2.1 build. You _have_ > to test the combination of '-Wuninitialized -Werror' but no -O, in order > to hit the failure. But I'm not sure how best to modify manywarnings.m4 > to do that testing. Then again, we've already special-cased > -Wno-missing-field-initializer to work around gcc infelicities, so I > guess I could enhance the module by adding another test along those lines. Yes, it looks like if we're using both of those, we'll have to add code to reject -Wuninitialized (maybe with a warning?) when configuring without -O. Actually, with GNU make, this is something that we could probably adjust at make-time. And since we're typically enabling warnings only when we have reasonable development tools, that might be even better (simpler). E.g., [here's simple PoC, i.e., it doesn't know about -O0, but you get the idea ] W = -Wuninitialized -Werror CFLAGS = -O ifneq (,$(findstring -Wuninitialized,$(W))) ifneq (,$(findstring -Werror,$(W))) ifneq (,$(findstring -O,$(CFLAGS))) W := $(subst -Wuninitialized,,$(W)) endif endif endif all: @echo $(W)