Compiler-specific flags with PKG_CFLAGS
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)