[Bioc-devel] Rscript on Bioconductor test servers

Henning Redestig henning.red at googlemail.com
Tue Jan 5 07:11:33 CET 2010


Hi Seth,

2010/1/5 Seth Falcon <sfalcon at fhcrc.org>:
> It seems like this should be a case where LinkingTo should help you.
> From Writing R Extensions:
>
> * WRE 5.4 Registering native routines
>>
>> A package that wishes to make use of header files in other packages
>> needs to declare them as a comma-separated list in the field
>> LinkingTo in the DESCRIPTION file. For example
>>
>> Depends: link2, link3 LinkingTo: link2, link3
>>
>> It should also `Depend' on those packages for they have to be
>> installed prior to this one, and loaded prior to this one (so the
>> path to their compiled code can be found).
>>
>> This then arranges that the include directories in the installed
>> linked-to packages are added to the include paths for C and C++ code.

According to the author of Rcpp, Dirk Eddelbuettel, this is tricky for C++.

>From http://dirk.eddelbuettel.com/code/rcpp.html :
   What about using LinkingTo in the DESCRIPTION file?  Great
   question, but nobody has explained yet how to do that for C++. For
   C, we could do what lme4 and matrix do. But for C++? The 'name
   mangling' really gets in the way. Let us know if you know how to do this.

and therefore he suggests the Makevars script approach.

> Your suggested solution has two potential problems:
>
> 1. You are proposing to use ":::" to access private functions from within a
> package.  If these functions are meant to be used outside of Rcpp, then they
> should be exported and then be accessible using "::".

Good point, I have forwarded this to the Rcpp-devel list.

> 2. Calling Rscript or even R without qualification can be a problem since it
> may not refer to the version of R that is doing the installation. I will do
> some looking, but I think a better way would be to refer to $(R_HOME)/bin/R
> in Makevars. You don't need Rscript for this, the following would work:
>
> $(R_HOME)/bin/R --slave -e "1:5" # your code here

On my computer (ubuntu) I could get:

PKG_CPPFLAGS = $(shell $(R_HOME)/bin/R --slave -e 'Rcpp:::CxxFlags()')
PKG_LIBS = $(shell $(R_HOME)/bin/R --slave -e 'Rcpp:::LdFlags()')

to work, and am now waiting to see what Bioconductors servers think.

cheers,

-- 
/Henning Redestig

Metabolomics Research Group | RIKEN Plant Science Center



More information about the Bioc-devel mailing list