[Rcpp-devel] plugin in a package - how is it registered?

Simon Zehnder szehnder at uni-bonn.de
Mon Oct 14 11:55:06 CEST 2013


I would like to continue this thread regarding my latest experience with constructing a plugin for inline:

I followed the inline.R file in RcppArmadillo and my function looks now like this one:

inlineCxxPlugin <- Rcpp:::Rcpp.plugin.maker(
                                            include.before  = "#include <nlopt.hpp>",
                                            libs            = paste(nloptr::nloptrLdFlags()),
                                            package         = "nloptr", 
                                            )

where my nloptr::nloptrLdFlags() function is similar to the RcppLdFlags() function of the Rcpp package. Constructing everything was pretty easy. I tested everything in R and I get no errors. Though, I get two warnings of the type:

In file(con, "r") :
  file("") only supports open = "w+" and open = "w+b": using the former

I am very unsure if this is produced by the function of the inline package or rather due to a certain setting of my system. I debugged the readLines function and I can tell, that this function is called at least three times on the certain connection 'con'. The first two times con = "" and the warnings are produced. The third time con = "file20c62a48c701.cpp.err.txt" and no warning occurs.

Does anyone have an explanation what is going on and if I might have forgotten something in my code? 


Best

Simon

On Oct 12, 2013, at 9:55 AM, Simon Zehnder <szehnder at uni-bonn.de> wrote:

> Hi J.J.,
> 
> that makes it precise! As I see now also in RcppArmadillo the naming inlineCxxPlugin is used and this is the 'identifier' as you say. Great! I modify my code to make use of this pattern.
> 
> Thank you for your response!
> 
> Simon
> 
> On Oct 12, 2013, at 1:01 AM, JJ Allaire <jj.allaire at gmail.com> wrote:
> 
>> Simon,
>> 
>> To make a plugin available for use with both inline and Rcpp attributes you need only define a function named "inlineCxxPlugin" within your package (which can in turn call Rcpp.plugin.maker). This allow you to use it with inline as well as Rcpp::depends.
>> 
>> I think this is the scenario you are targeting (since you are writing a package). The registerPlugin function is used when you want to make available a plugin that isn't part of a package (e.g. for some type of ad-hoc complier/linker recipe you need to cook up).
>> 
>> J.J.
>> 
>> 
>> On Fri, Oct 11, 2013 at 5:54 PM, Dirk Eddelbuettel <edd at debian.org> wrote:
>> 
>> Simon,
>> 
>> On 11 October 2013 at 23:43, Simon Zehnder wrote:
>> | I have a very short question in regard to plugins in packages. I have written my own plugin using Rcpp.plugin.maker (very well documented in FAQ btw).
>> |
>> | I know, that on the command line calling registerPlugin() registers the plugin. From RcppArmadillo I can see, that the registerPlugin function is never called inside the package - but I see also, that the file is called inline.R. How does the inline package register/identify a plugin? Is a plugin registered automatically when called inside cxxfunction? Does it have to be put into a file called 'inline.R'?
>> 
>> What is your actual intent?  To support inline? To support Rcpp Attributes?
>> 
>> I have not looked at this in a while, but I think we may not actually
>> required registration (ie there is no run-time state vector accumulating
>> plugin callbacks...) but when a plugin is invoked, it points to a package and
>> hence the package namespace is searched and a corresponding function is
>> called.
>> 
>> This is from memory. Actual details may differ. Void where prohibited :)
>> 
>> Dirk
>> 
>> --
>> Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com
>> _______________________________________________
>> Rcpp-devel mailing list
>> Rcpp-devel at lists.r-forge.r-project.org
>> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
>> 
> 
> _______________________________________________
> Rcpp-devel mailing list
> Rcpp-devel at lists.r-forge.r-project.org
> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel



More information about the Rcpp-devel mailing list