[Rd] R CMD check warning about compiler warning flags

Prof Brian Ripley ripley at stats.ox.ac.uk
Wed Dec 20 23:26:56 CET 2017


On 20/12/2017 17:42, Winston Chang wrote:
> On recent builds of R-devel, R CMD check gives a WARNING when some
> compiler warning flags are detected, such as -Werror, because they are
> non-portable. This appears to have been added in this commit:
>    https://github.com/wch/r-source/commit/2e80059

That is not the canonical R sources.  And your description seems wrong: 
there is now an _optional_ check controlled by an environment variable, 
primarily for CRAN checks.

> I'm working on a package where these compiler warning flags are
> present in a Makefile generated by a configure script -- that is, the
> configure script detects whether the compiler supports these flags,
> and if so, puts them in the Makefile. (The configure script is for a
> third-party C library which is in a subdirectory of src/.)
> 
> Because the flags are added only if the system supports them, there
> shouldn't be any worries about portability in practice.

Please read the explanation in the manual: there are serious concerns 
about such flags which have bitten CRAN users several times.

To take your example, you cannot know what -Werror does on all compilers 
(past, present or future) where it is supported (and -W flags do do 
different things on different compilers).  On current gcc it does

        -Werror
            Make all warnings into errors.

and so its effect depends on what other flags are used (people typically 
use -Wall, and most new versions of both gcc and clang add more warnings 
to -Wall -- I read this week exactly such a discussion about the 
interaction of -Werror with -Wtautological-constant-compare as part of 
-Wall in clang trunk).

> Is there a way to get R CMD check to not raise warnings in cases like
> this? I know I could modify the C library's configure.ac (which is
> used to generate the configure script) but I'd prefer to leave the
> library's code untouched if possible.
You don't need to (and most likely should not) use the C[XX]FLAGS it 
generates ... just use the flags which R passes to the package to use.

> 
> -Winston

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Emeritus Professor of Applied Statistics, University of Oxford



More information about the R-devel mailing list