[Rd] Using FPP preprocessor for Fortran Code

Prof Brian Ripley ripley at stats.ox.ac.uk
Mon Dec 1 10:45:53 CET 2014

On 30/11/2014 06:46, Michael Hahsler wrote:
> Dear R Developers,
> For package seriation I use Fortran code. I recently got a request to add
> #if defined(__ICC) || defined(__INTEL_COMPILER)
>        USE IFPORT
> #endif
> to the code since the Intel Fortran compiler otherwise has problems with
> rand(). However, to enable the FPP preprocessor I have to either add a

'Writing R Extensions' advises you not to use system RNGs, so this is a 
good time to comply.  §6.6 of 'Writing R Extensions' describes how to 
use the R RNG from Fortran.

> compiler flag (-cpp for gFortran) which is possibly not portable or
> change the extension to .F, .fpp, .FPP (and a few others) which
> automatically invokes the preprocessor (hopefully on all platforms). I

Many compilers do not know about .fpp or .FPP, and .F is not portable to 
case-independent file systems.

> tried .fpp and added the following to Makevars:
> OBJECTS=arsa.o bburcg.o bbwrcg.o bea.o criterion.o dist.o fprintf.o
> greedy.o optimal.o stress.o
> %.o: %.fpp
>          $(F77) $(ALL_FFLAGS) -c $< -o $@
> It seems to work (I tried Linux and Windows) but R CMD check gives me:
> * checking if this is a source package ... WARNING
> Subdirectory ‘src’ contains:
>    arsa.fpp bburcg.fpp
> Is there a different preferred method to do this? Is it possible to add
> support for Fortran with the fpp preprocessor (.fpp files) to the R
> package building process?

The support is as described in 'Writing R Extensions' §1.1.5.

You could add flags in PKG_FFLAGS, but you would have to use a configure 
script to find the right one (-xpp=fpp is also used).

Brian D. Ripley,                  ripley at stats.ox.ac.uk
Emeritus Professor of Applied Statistics, University of Oxford
1 South Parks Road, Oxford OX1 3TG, UK

More information about the R-devel mailing list