Hi everyone, I have a question about the DESCRIPTION file of an R package that has some c++ dependencies. This package of mine builds c++ code during an interactive R session, but does not contain any source c++ in itself. The c++ files make reference to some dependencies that are made available by other third party R packages. LinkingTo is the appropriate field for the DESCRIPTION file (usually) here, not Imports, but if If I remove the dependencies (BH and RcppEigen) from the Imports field, the code examples in the vignette will fail to build on a fresh machine. The NOTES in my build mention that, because I have no src/ directory, LinkingTo is ignored. Simultaneously, there is another note that mentions Imports is also excessive. It?s kind of a catch 22. It feels like my options are either add the Imports lines and ignore the NOTE, or add a superfluous src/ directory to silence the NOTE. Which option is the preferred one? Or is there a third? Best, Taylor R. Brown, Ph.D. Assistant Professor of Statistics, General Faculty Department of Statistics University of Virginia
[R-pkg-devel] DESCRIPTION file question
4 messages · taylor brown, Dirk Eddelbuettel, Taylor R. Brown
Taylor, I believe we have been over this at StackOverflow but you may by now have deleted the question/
On 21 July 2023 at 20:51, taylor brown via R-package-devel wrote:
| I have a question about the DESCRIPTION file of an R package that has some c++ dependencies. | | This package of mine builds c++ code during an interactive R session, but | does not contain any source c++ in itself. The c++ files make reference to | some dependencies that are made available by other third party R packages. | | LinkingTo is the appropriate field for the DESCRIPTION file (usually) here, not Imports, but if If I remove the dependencies (BH and RcppEigen) from the Imports field, the code examples in the vignette will fail to build on a fresh machine. | | The NOTES in my build mention that, because I have no src/ directory, LinkingTo is ignored. Simultaneously, there is another note that mentions Imports is also excessive. As your package has no src/ directory and does no compilation itself, you do not need / have no use for LinkingTo to provide the include/ directory of one or more listed packages. (If you have offer that compilation ability in a helper function you need to tell the deal with it in the function. You can use `requireNamespace()` to check if a package is present, warn or error if not, and compute the include/ directory location using R helper functions such as system.file().) | It?s kind of a catch 22. It feels like my options are either add the Imports lines and ignore the NOTE, or add a superfluous src/ directory to silence the NOTE. Which option is the preferred one? Or is there a third? I think all you need is in Writing R Extensions. For us to help you more a concrete example, maybe even from a mock package, would help. Cheers, Dirk
dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org
On 22 July 2023 at 16:07, Dirk Eddelbuettel wrote:
| | Taylor, | | I believe we have been over this at StackOverflow but you may by now have | deleted the question/ |
| On 21 July 2023 at 20:51, taylor brown via R-package-devel wrote:
| | I have a question about the DESCRIPTION file of an R package that has some c++ dependencies. | | | | This package of mine builds c++ code during an interactive R session, but | | does not contain any source c++ in itself. The c++ files make reference to | | some dependencies that are made available by other third party R packages. | | | | LinkingTo is the appropriate field for the DESCRIPTION file (usually) here, not Imports, but if If I remove the dependencies (BH and RcppEigen) from the Imports field, the code examples in the vignette will fail to build on a fresh machine. | | | | The NOTES in my build mention that, because I have no src/ directory, LinkingTo is ignored. Simultaneously, there is another note that mentions Imports is also excessive. | | As your package has no src/ directory and does no compilation itself, you do | not need / have no use for LinkingTo to provide the include/ directory of one | or more listed packages. | | (If you have offer that compilation ability in a helper function you need to | tell the deal with it in the function. You can use `requireNamespace()` to | check if a package is present, warn or error if not, and compute the include/ | directory location using R helper functions such as system.file().) | | | It?s kind of a catch 22. It feels like my options are either add the Imports lines and ignore the NOTE, or add a superfluous src/ directory to silence the NOTE. Which option is the preferred one? Or is there a third? | | I think all you need is in Writing R Extensions. For us to help you more a | concrete example, maybe even from a mock package, would help. PS An existing example is provided by the 'inline' package, originally by Oleg Sklyar, extented by many, and maintained by me for some time. It lets you work on code in C, C++, Fortran, ... and it compiles, links and loads it for you from an R session just you seem to desire. And 'inline' has no LinkingTo and only one Imports for 'methods' as it uses some S4. Hth, Dirk
dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org
1 day later
Hi Dirk, Yes, that helps very much. Thank you. Right, my package calls out to inline::cxxfunction() to interface with one particular c++ library. inline is a much more ambitious project obviously, and I get how it can't require everything as a dependency. Regarding your first paragraph, okay I'm on board now. I think we're both looking at the same passage in Writing R Extensions, too. I had some grammatical confusion. When I read "Specifying a package in ?LinkingTo? suffices if these are C/C++ headers containing source code or static linking is done at installation" it sounds like it's referring to c/c++ headers being included at potentially other times besides installation. In other words, it sounds like "at installation" only applies to the second of those two conditions. However, if I continue on reading that same paragraph, I now think that "at installation" applies to both conditions. It even gives explicit instructions regarding what to do about vignettes requiring packages, which is my exact situation. I just removed everything from both LinkingTo and Imports, stuck them in Suggests, and now all the notes are silenced after checking on a variety of OSes. Thanks again. Best, Taylor
On Sat, Jul 22, 2023 at 6:27?PM Dirk Eddelbuettel <edd at debian.org> wrote:
On 22 July 2023 at 16:07, Dirk Eddelbuettel wrote: | | Taylor, | | I believe we have been over this at StackOverflow but you may by now have | deleted the question/ | | On 21 July 2023 at 20:51, taylor brown via R-package-devel wrote: | | I have a question about the DESCRIPTION file of an R package that has some c++ dependencies. | | | | This package of mine builds c++ code during an interactive R session, but | | does not contain any source c++ in itself. The c++ files make reference to | | some dependencies that are made available by other third party R packages. | | | | LinkingTo is the appropriate field for the DESCRIPTION file (usually) here, not Imports, but if If I remove the dependencies (BH and RcppEigen) from the Imports field, the code examples in the vignette will fail to build on a fresh machine. | | | | The NOTES in my build mention that, because I have no src/ directory, LinkingTo is ignored. Simultaneously, there is another note that mentions Imports is also excessive. | | As your package has no src/ directory and does no compilation itself, you do | not need / have no use for LinkingTo to provide the include/ directory of one | or more listed packages. | | (If you have offer that compilation ability in a helper function you need to | tell the deal with it in the function. You can use `requireNamespace()` to | check if a package is present, warn or error if not, and compute the include/ | directory location using R helper functions such as system.file().) | | | It?s kind of a catch 22. It feels like my options are either add the Imports lines and ignore the NOTE, or add a superfluous src/ directory to silence the NOTE. Which option is the preferred one? Or is there a third? | | I think all you need is in Writing R Extensions. For us to help you more a | concrete example, maybe even from a mock package, would help. PS An existing example is provided by the 'inline' package, originally by Oleg Sklyar, extented by many, and maintained by me for some time. It lets you work on code in C, C++, Fortran, ... and it compiles, links and loads it for you from an R session just you seem to desire. And 'inline' has no LinkingTo and only one Imports for 'methods' as it uses some S4. Hth, Dirk -- dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org
Taylor R. Brown, Ph.D. Assistant Professor of Statistics, General Faculty Department of Statistics University of Virginia [[alternative HTML version deleted]]