I have some code in rgl and rgl2gltf that should be run during the package install process, and not later. (It's a call to rgl::makeDependency, which does some stuff with Javascript files and writes into the package installation directory, saving the paths of the files it wrote.)

Currently rgl handles this by simply placing calls to makeDependency in one of the .R files, relying on the fact that they are run at install time and not later. It creates rgl:::rglDependency and another similar object. That works fine.

Tomas just pointed out to me that rgl2gltf is trying to modify its installation location after installation. This is happening because it calls makeDependency in a function the user can call, and that's bad, so I'm fixing it.

The problem is that rgl2gltf uses Roxygen for documentation, and Roxygen executes all the code in the package when it is producing Rd files. (Normally this just creates the functions in the package, it doesn't actually call them, so it's harmless. But calling makeDependency from Roxygen fails because I wasn't expecting that.)

So I'd like to ask for suggestions for the simplest way to deal with this in rgl2gltf.

1. One choice is to fix rgl::makeDependency so it can tell that it is being run after installation, and stop trying to write any files. It should just return the object. I can probably do this, but I've just had two rgl releases in the last few weeks, so I'd prefer to limit the changes to rgl2gltf.

2. I can use pkgload::is_loading() to detect the load_all() call from Roxygen and not run makeDependency in that situation. But that forces a dependence on pkgload, and that's not very appealing.

3. Maybe I can mark the file that contains the makeDependency call so that Roxygen ignores it. Is that possible?

4. I can write a Makevars file that runs makeDependency.  That seems
like a pretty heavyweight solution, especially since I need to save the result of the call so it is available later.

Does anyone else have this problem, and a nice solution for it?

Duncan Murdoch

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

Reply via email to