[cmake-developers] CMake API for warnings
Ruslan Baratov
ruslan_baratov at yahoo.com
Sun Apr 10 22:24:12 EDT 2016
Sounds good?
On 06-Apr-16 01:03, Ruslan Baratov via cmake-developers wrote:
> On 05-Apr-16 21:03, Brad King wrote:
>> On 03/31/2016 12:47 PM, Ruslan Baratov wrote:
>>> What about 3 properties containing list of <warning-id>'s (groups
>>> unexpanded):
>>>
>>> * COMPILE_WARNINGS_DISABLE # e.g. "shift-sign-overflow;unused"
>>> * COMPILE_WARNINGS_ENABLE # e.g. "ALL"
>>> * COMPILE_WARNINGS_TREAT_AS_ERROR # e.g. group + specific:
>>> "inline;undef"
>> We would need to define behavior when a warning appears in more than
>> one list.
>
> Report an error in case of any type of conflicts. It may happens not
> only when same type appears in both DISABLE and ENABLE but for example
> when warning already defined by some group. E.g. "EVERYTHING;undef" is
> the same as "EVERYTHING". If user okay with having intersections (for
> any reason) new variable like CMAKE_CHECK_WARNINGS_CONFLICTS=OFF may
> control this.
>
>> Perhaps we need to define some kind of `=on/off/error/no-error`
>> syntax for each list entry.
>
> You mean this:
>
> compatibility-c++98=off
> inline=off
> special-members=off
> catch-semantic-changed=off
> covered-switch-default=off
> inherits-via-dominance=off
> name-length-exceeded=off
> padded=off
> this-used-in-init=off
> EVERYTHING=on
> EVERYTHING=error
>
> versus this one:
>
> DISABLE
> compatibility-c++98
> inline
> special-members
> catch-semantic-changed
> covered-switch-default
> inherits-via-dominance
> name-length-exceeded
> padded
> this-used-in-init
> ENABLE
> EVERYTHING
> TREAT_AS_ERROR
> EVERYTHING
>
> ?
>
> Second variant looks clearer for me.
>
>>
>> The name "ALL" may not be representative. Even -Wall does not really
>> enable
>> all possible warnings on some compilers. I'd like to find another
>> name that
>> captures the idea of enabling most warnings. Or we could try to
>> subsume it
>> into an interface for the warning level, with -Wall considered "high".
>
> Agree. May be EVERYTHING? Or ALLWARNINGS, FULLSET?
>
>>
>>> I'm not sure about mixing more languages. I think it will be similar to
>>> COMPILE_OPTIONS (?), see no language specification in
>>> `add_compile_options` command.
>> Right. We do have the COMPILE_LANGUAGE genex for some limited use
>> cases.
>> Its documentation even includes a COMPILE_OPTIONS example. However, it
>> also documents that it is not possible to implement fully on VS IDE
>> generators. For example, VS does not distinguish between C and C++
>> flags. The same set is always used for both.
>
> Since /Wall can be set by 'target_compile_options' then abstracting it
> by `target_compile_warnings(... ENABLE ALL)` should not be a problem I
> think.
>
>>
>> Another option is to have the warning names themselves have a language
>> in them, similar to the COMPILE_FEATURES names.
>
> See no point of this one. So say we have switch-enum warning which is
> only for C++, why do we need cxx-switch-enum? There is no
> c-switch-enum or any other *-switch-enum. If we are talking about
> 'undef' why do we need c-undef and cxx-undef? It mean the same and I
> think will be set or unset simultaneously.
>
> Ruslo
More information about the cmake-developers
mailing list