I'd like to install two versions of the rgl package DLL, with the .onLoad hook choosing which one to load. Can anyone tell me of another package that does this successfully?

Here's the background:

Some MacOS users of rgl can't load it. I think this is because of problems with XQuartz on their machines. (See https://github.com/dmurdoch/rgl/issues/11 for a couple of reports.) I don't know if these users are using the new cpus or what else might be causing their problems.

I've set it up to allow users to skip everything related to X11 by specifying --disable-opengl when installing, and have attempted to make it do this automatically when configuring: so I think the problem is solved for users who can install rgl from source.

I'd like to try to make a solution for users who can't build it, by installing two copies of the DLL: the regular one linked to the X11 libraries, and one built with the --disable-opengl option.

This is somewhat similar to how things were handled on MacOS up to 2015, when a second DLL was built to use Apple's AGL, while the default used GLX. I resurrected that old code and modified it for the current use, and it works, but generates two check issues:

1. The Makevars file had various GNU-isms. I'd really like to see a successful package that does this without them, but I guess I can declare that it uses GNU make if I have to.

2. Routine registration seems to think the second DLL (called "nullrgl") is in a different package, so I get warnings like:

❯ checking foreign function calls ... WARNING
  Foreign function calls to a different package:
    .C(rgl_abclines, ...)
    .C(rgl_addtosubscene, ...)

    ...

    .Call(rgl_setWheelCallback, ...)
  Undeclared package in foreign function calls:
     ‘nullrgl’

I am pretty sure this is a false positive in the checks, e.g. printing rgl_abclines shows this:


> rgl:::rgl_abclines
$name
[1] "rgl_abclines"

$address
<pointer: 0x7f994a00f330>
attr(,"class")
[1] "RegisteredNativeSymbol"

$dll
DLL name: nullrgl
Filename:

/Library/Frameworks/R.framework/Versions/4.0/Resources/library/rgl/libs/nullrgl.so
Dynamic lookup: FALSE

$numParameters
[1] 4

attr(,"class")
[1] "CRoutine"         "NativeSymbolInfo"

The code in QC.R (here: https://github.com/wch/r-source/blob/8cf68878a1361d00ff2125db2e1ac7dc8f6c8009/src/library/tools/R/QC.R#L2118) looks at the "DLL name", and ignores the fact that the path to the DLL is in the rgl libs directory. I'll try to put together a patch for R that fixes this.

Duncan Murdoch

______________________________________________
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel

Reply via email to