[Rd] Re: Compiler-specific flags with PKG_CFLAGS

Paul Roebuck roebuck at odin.mdacc.tmc.edu
Wed Feb 9 22:48:53 CET 2005


On Wed, 9 Feb 2005, Kurt Hornik wrote:

> >>>>> Paul Roebuck writes:
>
> > On Wed, 9 Feb 2005, Kurt Hornik wrote:
> >> >>>>> Paul Roebuck writes:
> >>
> >> > On Tue, 8 Feb 2005, Kurt Hornik wrote:
> >> >> This concerns the packages...
> >> >> for which current versions of r-devel now report problems with
> >> >> non-portable compilation flags in Makevars[.in] files:
> >> >>
> >> >> Problems in package 'rwt':
> >> >> Non-portable flags in variable 'PKG_CFLAGS':
> >> >> -Wall -ansi -pedantic
> >> >>
> >> >> These flags are mostly GCC specific and not portable.
> >> >> (Do not assume that any -Ox will work.)
> >> >>
> >> >> Can you please fix these problems, and provide an update of your
> >> >> package?
> >>
> >> > It has been on my todo list since Ripley brought it up
> >> > several weeks ago in r-devel but hadn't exactly figured
> >> > out how to package it as such. Someone have an example
> >> > of how to add compiler flags for GCC when it is being
> >> > used and otherwise not? I'm assuming Makevars isn't being
> >> > passed through cpp and I can't just use #ifdef. In this case,
> >> > I could just leave them out but I hate to lose the warnings
> >> > for development. Using 'configure' is probably the only
> >> > option but really didn't want to use it for just stricter
> >> > error checking during compilation.
> >>
> >> I think the simplest way to achieve this is to configure R
> >> locally (for yourself) with CFLAGS="-O2 -Wall -pedantic" but
> >> leave the corresponding PKG_CFLAGS etc variables in package
> >> src/Makevars alone.
>
> > I can do that for workstations which I have admin priviledges
> > and have a private version of R; how about the ones I don't?
>
> It depends: R-exts says
>
> 	Flags which are set in file `etc/Makeconf' can be overridden by
> 	the environment variable `MAKEFLAGS' (at least for systems using
> 	GNU `make'), as in (Bourne shell syntax)
>
> 	     MAKEFLAGS="CFLAGS=-O3" R CMD SHLIB *.c
>
> 	or by using a `Makefile'.
>
> so if you have GNU Make, you can actually set MAKEFLAGS accordingly in
> your R_ENVIRON file.
>
> What you can also try is to have a make (Sys.getenv("MAKE")) script in
> your PATH which does something like
>
> 	/path/to/real/make $* CFLAGS=-O3
>
> (but I am never sure whether command line vars override the ones in
> files?)

Thanks for the suggestions. Setting the environment prior to running
R CMD is not practical for me, typing-wise. I guess if made my
.Renviron file architecture-specific it might work, but that seems
overkill. That leaves writing a makefile, a script to rename
'src/Makevars' as 'src/Makevars_d' prior to upload, or adding the
file to my .Rbuildignore as I only really need to see the additional
warnings when running R CMD check.

> >> R 2.1.0 will provide a portable way of overriding the configured
> >> "site" compilation flags via user-level ~/.R/Makevars files.
>
> > Will this also cover how to merge or augment compilation
> > flags with the site-specified ones? And how will it handle
> > the situation where one's home directory is NFS mounted
> > across several architectures? There will be a variable to
> > override the default location, right?.
>
> No but there is
>
> 	~/.R/Makeconf-$platform
>
> where $platform is the same as in R_PLATFORM, which is looked for ahead
> of ~/.R/Makeconf.  (That should be better than having an R_MAKECONF env
> var.)
>
> Btw, I assume that if all Makes are GNU Make you might actually be able
> to conditionalize inside.

GNU make availability is unlikely at best. And I don't think
this approach is going to be much help for me. I only wanted
to augment the compiler settings for the packages I'm developing,
not override the ones for the R itself. You've managed to make
me think a package configure script might not be so hard after
all :)

Thanks for your insight.

----------------------------------------------------------
SIGSIG -- signature too long (core dumped)



More information about the R-devel mailing list