On Tue, Mar 7, 2017 at 2:45 PM, Dirk Eddelbuettel <edd at debian.org> wrote: [...]> > Could you resort to preprocessor conditioning to only compile the code > relevant for a particular platform while hiding away the inapplicable parts?Yes, I do exactly that. The problem is that the R code still has .Call(c_non_existent_function_on_this_platform, ...) and R CMD check picks up on that. But I just found that using string literals in .Call() works just fine. Hopefully this will still be allowed in the long run: .Call("c_non_existent_function_on_this_platform", ...) Gabor
Dirk Eddelbuettel
2017-Mar-07 14:51 UTC
[Rd] Platform dependent native routine registration
On 7 March 2017 at 14:47, G?bor Cs?rdi wrote: | On Tue, Mar 7, 2017 at 2:45 PM, Dirk Eddelbuettel <edd at debian.org> wrote: | [...] | > | > Could you resort to preprocessor conditioning to only compile the code | > relevant for a particular platform while hiding away the inapplicable parts? | | Yes, I do exactly that. The problem is that the R code still has | | .Call(c_non_existent_function_on_this_platform, ...) | | and R CMD check picks up on that. Silly me. Of course -- R code does not see the preprocessor. You could move up one level then and ... do it via configure, ie have 'hidden' files osx-init.c, lnx-init.c, win-init.c and copy in the one you need on a given platform. | But I just found that using string literals in .Call() works just | fine. Hopefully | this will still be allowed in the long run: | | .Call("c_non_existent_function_on_this_platform", ...) So you are adjusting the literals on the fly at compilation time? Dirk -- http://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org
On Tue, Mar 7, 2017 at 2:51 PM, Dirk Eddelbuettel <edd at debian.org> wrote: [...]> | But I just found that using string literals in .Call() works just > | fine. Hopefully > | this will still be allowed in the long run: > | > | .Call("c_non_existent_function_on_this_platform", ...) > > So you are adjusting the literals on the fly at compilation time?No, I just leave them there. They are not supposed to be called on a platform where the C function does not exist, and even if they would be, that's just an error, which is fine. I could dynamically include/exclude R code at install time, but that is not so easy, either, I would probably need to deal with the docs as well, etc. So I'll just leave it there.... G.> Dirk > > -- > http://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org