** testing if installed package can be loaded
Error in dyn.load(file, DLLpath = DLLpath, ...) :
impossible de charger l'objet partagé '/usr/local/sage-6.3beta6/local/lib/R/library/rstan/libs/rstan.so':
/usr/local/sage-6.3beta6/local/lib/R/library/rstan/libs/rstan.so: undefined symbol: _ZN4stan5agrad18var_nochain_stack_E
Erreur : le chargement a échoué
Exécution arrêtée
ERROR: loading failed
* removing ‘/usr/local/sage-6.3beta6/local/lib/R/library/rstan’
The downloaded source packages are in
‘/tmp/Rtmp0xOKsZ/downloaded_packages’
Erreur dans library(rstan) : there is no package called ‘rstan’
De plus : Message d'avis :
In install.packages("rstan", type = "source") :
installation of package ‘rstan’ had non-zero exit status
Any hint ? I note that rstan seems to need its very own versin of Rcpp and RcppEigen. Could this be the cause of the problems ?
They are unmodified Rcpp and RcppEigen from CRAN. My guess is that there is something going on with Sage that causes it to not link correctly. I'll try to figure it out. Can you install rstan outside of R via Sage? And you are using the g++ that comes with Sage or the system one (and if so what version)?
What's your g++ version?
Can you get the latest version of Rcpp to install
and run a simple example? (Is the simple example still
in our install instructions?)
I don't know what you mean by "very own version of Rcpp".
Is RStan somehow unusual in how it depends on other R
packages?
And you are using the g++ that comes with Sage or the system one (and if so what version)?
Ben
[ BTW : I wonder about the necessity for the install_rstan script to install an already installed.package, if the latest available package on CRAN is sufficent... ]
On Wednesday, July 23, 2014 4:37:35 PM UTC-4, Emmanuel Charpentier wrote:[ BTW : I wonder about the necessity for the install_rstan script to install an already installed.package, if the latest available package on CRAN is sufficent... ]We had some problems attributable to the binary version of Rcpp being compiled on CRAN with a different compiler than that which is being used to build rstan.
So, we need to install Rcpp from source with the same compiler, rather than merely having it be installed.
I'll build the sage beta tonight and see if I can figure out why it is acting differently.
Additional information : the same problem, exacly arises on another (much smaller) laptop with Ubuntu 14.04 which has g++ 4.8.2 coming from Ubuntu and a locally-compiled sage 6.3beta6.
g++ -I/opt/r-devel/include -DNDEBUG -I"../inst/include/stansrc" -I"../inst/include" -DBOOST_RESULT_OF_USE_TR1 -DBOOST_NO_DECLTYPE -DBOOST_DISABLE_ASSERTS -ftemplate-depth-256 -I/usr/local/include -I"/opt/r-devel/library/Rcpp/include" -I"/opt/r-devel/library/RcppEigen/include" -I"/opt/r-devel/library/BH/include" -fpic -g -O2 -c gm__ast_def.cpp -o gm__ast_def.o
In file included from gm__ast_def.cpp:1:0:
../inst/include/stansrc/stan/gm/ast_def.cpp: In constructor ‘stan::gm::function_signatures::function_signatures()’:
../inst/include/stansrc/stan/gm/ast_def.cpp:378:5: note: variable tracking size limit exceeded with -fvar-tracking-assignments, retrying without
function_signatures::function_signatures() {
^
CC=clang
CXX=clang++
install.packages("rstan", type = 'source')
It looks like this error is the one built with cpp optimization level 0 with g++, see here
https://travis-ci.org/stan-dev/rstan/builds/30479408
Jiqiang
It looks like this error is the one built with cpp optimization level 0 with g++, see here
https://travis-ci.org/stan-dev/rstan/builds/30479408
Sys.setenv(MAKEFLAGS = "-j4"). They did install uneventfully after restarting a new session without this call...essai de l'URL 'http://rstan.org/repo/src/contrib/rstan_2.4.0.tar.gz'Content type 'application/x-gzip' length 1399541 bytes (1.3 Mb)
URL ouverte
==================================================
downloaded 1.3 Mb
* installing *source* package ‘rstan’ ...
** package ‘rstan’ correctement décompressé et sommes MD5 vérifiées
** libs
g++ -I/usr/local/sage-6.3beta6/local/lib/R//include -DNDEBUG -I"../inst/include/stansrc" -I"../inst/include" -DBOOST_RESULT_OF_USE_TR1 -DBOOST_NO_DECLTYPE -DBOOST_DISABLE_ASSERTS -ftemplate-depth-256 -I"/usr/local/sage-6.3beta6/local/lib/R/library/Rcpp/include" -I"/usr/local/sage-6.3beta6/local/lib/R/library/RcppEigen/include" -I"/usr/local/sage-6.3beta6/local/lib/R/library/BH/include" -fpic -c stanc.cpp -o stanc.o
g++ -I/opt/r-devel/include -DNDEBUG -I"../inst/include/stansrc" -I"../inst/include" -DBOOST_RESULT_OF_USE_TR1 -DBOOST_NO_DECLTYPE -DBOOST_DISABLE_ASSERTS -ftemplate-depth-256 -I/usr/local/include -I"/opt/r-devel/library/Rcpp/include" -I"/opt/r-devel/library/RcppEigen/include" -I"/opt/r-devel/library/BH/include" -fpic -g -O2 -c stanc.cpp -o stanc.oOn Thursday, July 24, 2014 3:12:54 PM UTC-4, Emmanuel Charpentier wrote:essai de l'URL 'http://rstan.org/repo/src/contrib/rstan_2.4.0.tar.gz'Content type 'application/x-gzip' length 1399541 bytes (1.3 Mb)
URL ouverte
==================================================
downloaded 1.3 Mb
* installing *source* package ‘rstan’ ...
** package ‘rstan’ correctement décompressé et sommes MD5 vérifiées
** libs
g++ -I/usr/local/sage-6.3beta6/local/lib/R//include -DNDEBUG -I"../inst/include/stansrc" -I"../inst/include" -DBOOST_RESULT_OF_USE_TR1 -DBOOST_NO_DECLTYPE -DBOOST_DISABLE_ASSERTS -ftemplate-depth-256 -I"/usr/local/sage-6.3beta6/local/lib/R/library/Rcpp/include" -I"/usr/local/sage-6.3beta6/local/lib/R/library/RcppEigen/include" -I"/usr/local/sage-6.3beta6/local/lib/R/library/BH/include" -fpic -c stanc.cpp -o stanc.o
This should have a -O2 somewhere as ing++ -I/opt/r-devel/include -DNDEBUG -I"../inst/include/stansrc" -I"../inst/include" -DBOOST_RESULT_OF_USE_TR1 -DBOOST_NO_DECLTYPE -DBOOST_DISABLE_ASSERTS -ftemplate-depth-256 -I/usr/local/include -I"/opt/r-devel/library/Rcpp/include" -I"/opt/r-devel/library/RcppEigen/include" -I"/opt/r-devel/library/BH/include" -fpic -g -O2 -cstanc.cpp -o stanc.o
In the absence of that, it is implicitly -O0. Is there a Sage ticket for this issue?
Le jeudi 24 juillet 2014 21:37:31 UTC+2, Ben Goodrich a écrit :On Thursday, July 24, 2014 3:12:54 PM UTC-4, Emmanuel Charpentier wrote:essai de l'URL 'http://rstan.org/repo/src/contrib/rstan_2.4.0.tar.gz'Content type 'application/x-gzip' length 1399541 bytes (1.3 Mb)
URL ouverte
==================================================
downloaded 1.3 Mb
* installing *source* package ‘rstan’ ...
** package ‘rstan’ correctement décompressé et sommes MD5 vérifiées
** libs
g++ -I/usr/local/sage-6.3beta6/local/lib/R//include -DNDEBUG -I"../inst/include/stansrc" -I"../inst/include" -DBOOST_RESULT_OF_USE_TR1 -DBOOST_NO_DECLTYPE -DBOOST_DISABLE_ASSERTS -ftemplate-depth-256 -I"/usr/local/sage-6.3beta6/local/lib/R/library/Rcpp/include" -I"/usr/local/sage-6.3beta6/local/lib/R/library/RcppEigen/include" -I"/usr/local/sage-6.3beta6/local/lib/R/library/BH/include" -fpic -c stanc.cpp -o stanc.o
This should have a -O2 somewhere as ing++ -I/opt/r-devel/include -DNDEBUG -I"../inst/include/stansrc" -I"../inst/include" -DBOOST_RESULT_OF_USE_TR1 -DBOOST_NO_DECLTYPE -DBOOST_DISABLE_ASSERTS -ftemplate-depth-256 -I/usr/local/include -I"/opt/r-devel/library/Rcpp/include" -I"/opt/r-devel/library/RcppEigen/include" -I"/opt/r-devel/library/BH/include" -fpic -g -O2 -cstanc.cpp -o stanc.o
In the absence of that, it is implicitly -O0. Is there a Sage ticket for this issue?
Not yet. I would rather diagnose this before yelling "wolf !".
Do you see how to pass this flag to GCC through R ? E. g. via Sys.setenv() ? or via Makevars ? This could allow to pinpoint the problem.
CXXFLAGS = -O2 # or -03
options(repos = c(getOption("repos"),
rstan = "http://rstan.org/repo/"))
install.packages("rstan", type = 'source')
It seems that my problem (and problems with installing other libraries after enabling parallel compilation) might have been caused by this (undocumented) leftover of the installation of Rstan 3.2 -O3 is a bit *too* optimizing for complex tasks...
> system(paste0(Sys.getenv('R_HOME'), "/bin/R", " CMD config CXXFLAGS"))
BTW : could you explicitely state this in the rstan install document
make rstan depend on CRAN's Rcpp, inline and BH,
> source("http://mc-stan.org/rstan/install.R", max.deparse.length = 1500, echo = TRUE)
> install_rstan <- function() {
+ on.exit(Sys.unsetenv("R_MAKEVARS_USER"))
+ on.exit(Sys.unsetenv("R_MAKEVARS_SITE"), add = TRUE)
+
+ try(remove.packages("rstan"), silent = TRUE)
+ Sys.setenv(R_MAKEVARS_USER = "foobar")
+ Sys.setenv(R_MAKEVARS_SITE = "foobar")
+ install.packages(c("inline", "BH", "RcppEigen"))
+ install.packages("Rcpp", type = "source")
+ library(inline)
+ library(Rcpp)
+ src <- '
+ std::vector<std::string> s;
+ s.push_back("hello");
+ s.push_back("world");
+ return Rcpp::wrap(s);
+ '
+ hellofun <- cxxfunction(body = src, includes = '', plugin = 'Rcpp', verbose = FALSE)
+ test <- try(hellofun())
+ if(inherits(test, "try-error")) stop("hello world failed; ask for help on Rcpp list")
+
+ options(repos = c(getOption("repos"),
+ rstan = "http://rstan.org/repo/"))
+ install.packages("rstan", type = 'source')
+ library(rstan)
+ set_cppo("fast")
+ if (any(grepl("^darwin", R.version$os, ignore.case = TRUE))) {
+ cat('\nCC=clang', 'CXX=clang++ -arch x86_64 -ftemplate-depth-256',
+ file = "~/.R/Makevars", sep = "\n", append = TRUE)
+ }
+ return(invisible(NULL))
+ }
use a simpler install command (see above) AND GET RID OF THE DAMN INSTALL SCRIPT ?
Just my two cents... What do you think ?
Thanks for bearing with this and for the feedback.
More below.
On Jul 25, 2014, at 2:34 AM, Emmanuel Charpentier <emanuel.c...@gmail.com> wrote:
> Turns out tha the olf might have been your dog.
olf?
Can you compile models using -O3? That's the important part.
>
> BTW : could you explicitely state this in the rstan install document, make rstan depend on CRAN's Rcpp, inline and BH,
RStan 2.3 didn't depend on BH, but I believe 2.4 (or the release
after) will depend on BH and RcppEigen (although I hate the dependencies,
it seems the only way to get it into CRAN, which should hopefully simplify
some of the installs).
> use a simpler install command (see above) AND GET RID OF THE DAMN INSTALL SCRIPT ?
>
> Just my two cents... What do you think ?
For one, Andrew would kill us if we got rid of the install script.
That's because it's cleaned up most of the install procedures for
"standard" installations, which are very fiddly and error prone.
We figured people running non-standard installs would be able to
deal with a little more customization on their own.
Having said that, I have no idea what Sage is (other than what
I see on their home page: http://www.sagemath.org).
Maybe we just need to
build Stan into Sage so nobody has to install it manually.
Isn't that
the point of these mega-integrations?
Having said that, we can add special instructions for special versions
of R.
- Bob
> system(paste0(Sys.getenv('R_HOME'), "/bin/R", " CMD config CXXFLAGS"))
BTW : could you explicitely state this in the rstan install document
yes
make rstan depend on CRAN's Rcpp, inline and BH,
it does (for rstan 2.4.0)
+ install.packages(c("inline", "BH", "RcppEigen"))
+ install.packages("Rcpp", type = "source")
use a simpler install command (see above) AND GET RID OF THE DAMN INSTALL SCRIPT ?
Just my two cents... What do you think ?
I think I have been advocating getting rstan onto CRAN for more than two years
https://groups.google.com/d/msg/stan-dev/wIpu_otqK10/H5OZnHOX5PQJ
and am the only Stan developer that is strongly in favor of getting rstan onto CRAN, so you are shouting at the wrong person.
BH 1.54.0-x was the first version of the BH package that would build rstan and rstan 1.0.1 was rejected from CRAN on September 15, 2012 largely for bundling the necessary parts of Boost. Since then, we have dealt with one installation problem after another on Windows and Mac OSX (and occasionally Linux) that has culminated in the script you are keen to get rid of, which has reduced installation problems of rstan 2.3.0 and rstan 2.4.0 to a trickle. For rstan 2.4.0, we switched to depend on the R packages BH and RcppEigen instead of bundling Boost and Eigen to see if there were any problems, so that we could try again to get rstan onto CRAN for the next rstan version. That seems to be going fine and rstan 2.4.0 builds on the CRAN server (because the CRAN server uses the default CXXFLAGS), but there are a few more things we would have to do to make rstan fully CRAN-compliant.
Dear Ben,
Just saw your answer. I might have an answer, but I'll ave to check a couple things first, and that won't be before tonight.
Just a couple of comments :
Le vendredi 25 juillet 2014 16:12:00 UTC+2, Ben Goodrich a écrit :
[ ... ]> system(paste0(Sys.getenv('R_HOME'), "/bin/R", " CMD config CXXFLAGS"))
*This* is the right way the install script (if any) should do intallation, not permanenlly dropping an undocumented configuration file !
...
on.exit(Sys.unsetenv("R_MAKEVARS_USER"))
on.exit(Sys.unsetenv("R_MAKEVARS_SITE"), add = TRUE)
try(remove.packages("rstan"), silent = TRUE)
Sys.setenv(R_MAKEVARS_USER = "foobar")
Sys.setenv(R_MAKEVARS_SITE = "foobar")
...
[ ... ]
+ install.packages(c("inline", "BH", "RcppEigen"))
+ install.packages("Rcpp", type = "source")
No : here, you unconditionally install whatever Rcpp and BH version happens to be available on CRAN at install time. You should install use the "Depends" field of the DESCRIPTION file, which would install the packages *if necessary* (even with version constraints if necessary).
"Field ‘Depends’ should nowadays be used rarely, only for packages which are intended to be put on the search path to make their facilities available to the end user (and not to the package itself)"
A package that wishes to make use of header files in other packages needs to declare them as a comma-separated list in the field ‘LinkingTo’ in the DESCRIPTION file. For example
LinkingTo: link1, link2As from R 3.0.2 the ‘LinkingTo’ field can have a version requirement which is checked at installation. (In earlier versions of R it would cause the specification to be ignored.)
Specifying a package in ‘LinkingTo’ suffices if these are C++ headers containing source code or static linking is done at installation: the packages do not need to be (and usually should not be) listed in the ‘Depends’ or ‘Imports’ fields. This includes CRAN packages BH and almost all users of RcppArmadillo and RcppEigen.
Depends: R (>= 3.0.2), Rcpp (>= 0.9.10), utils, inline, methods
LinkingTo: Rcpp, RcppEigen, BH (>= 1.54)
Suggests: RUnit, RcppEigen, BH (>= 1.54), parallel
On Friday, July 25, 2014 11:20:02 AM UTC-4, Emmanuel Charpentier wrote:Dear Ben,
Just saw your answer. I might have an answer, but I'll ave to check a couple things first, and that won't be before tonight.
Just a couple of comments :
Le vendredi 25 juillet 2014 16:12:00 UTC+2, Ben Goodrich a écrit :
[ ... ]> system(paste0(Sys.getenv('R_HOME'), "/bin/R", " CMD config CXXFLAGS"))
*This* is the right way the install script (if any) should do intallation, not permanenlly dropping an undocumented configuration file !
We don't permanently drop anything. We ignore ~/.R/Makevars by instead searching for foobar inside the install_rstan() function and then read from it thereafter
...
on.exit(Sys.unsetenv("R_MAKEVARS_USER"))
on.exit(Sys.unsetenv("R_MAKEVARS_SITE"), add = TRUE)
try(remove.packages("rstan"), silent = TRUE)
Sys.setenv(R_MAKEVARS_USER = "foobar")
Sys.setenv(R_MAKEVARS_SITE = "foobar")
...
The rstan package should install with R's CXXFLAGS. It is a very minor rstan bug that it currently does not install if R's CXXFLAGS are empty, in which case g++ compiles at -O0. It is a less minor bug in Sage that it builds R with empty CXXFLAGS. You can work around both bugs by filling out ~/.R/Makevars however you like (excluding CXXFLAGS=-O0 if CXX=g++) and installing rstan without the install_rstan() function.
I think you are objecting to the set_cppo() function, which is called by install_rstan() after rstan is installed and modifies ~/.R/Makevars
so that it is correctly formatted and by default uses -O3 because that makes Stan programs run slightly faster than -O2 and much faster than any other optimization level. Setting -O3 probably breaks some other R packages, which I would be sympathetic to if that happened on your system,
but it changes a non-executable file, is documented and also prints a message to the console when it is called.
[ ... ]
+ install.packages(c("inline", "BH", "RcppEigen"))
+ install.packages("Rcpp", type = "source")
No : here, you unconditionally install whatever Rcpp and BH version happens to be available on CRAN at install time. You should install use the "Depends" field of the DESCRIPTION file, which would install the packages *if necessary* (even with version constraints if necessary).
No:
http://cran.r-project.org/doc/manuals/R-exts.html#Package-Dependencies"Field ‘Depends’ should nowadays be used rarely, only for packages which are intended to be put on the search path to make their facilities available to the end user (and not to the package itself)"
and later on in that same sectionA package that wishes to make use of header files in other packages needs to declare them as a comma-separated list in the field ‘LinkingTo’ in the DESCRIPTION file. For example
LinkingTo: link1, link2As from R 3.0.2 the ‘LinkingTo’ field can have a version requirement which is checked at installation. (In earlier versions of R it would cause the specification to be ignored.)
Specifying a package in ‘LinkingTo’ suffices if these are C++ headers containing source code or static linking is done at installation: the packages do not need to be (and usually should not be) listed in the ‘Depends’ or ‘Imports’ fields. This includes CRAN packages BH and almost all users of RcppArmadillo and RcppEigen.
which is exactly what the DESCRIPTION file in rstan does
https://raw.githubusercontent.com/stan-dev/rstan/develop/rstan/rstan/DESCRIPTIONDepends: R (>= 3.0.2), Rcpp (>= 0.9.10), utils, inline, methods
LinkingTo: Rcpp, RcppEigen, BH (>= 1.54)
Suggests: RUnit, RcppEigen, BH (>= 1.54), parallel
with the added Suggests line to work around the undocumented fact that the rstan vignette would not build without it.
Ben
1) Sages'R indeed needs -O2 (or -O3, but I'd settle for -O2 since -O3 leads to invalid objects for other libraries, such as nloptr, which is the workhorse of a lot of other packages...).
2) I did not (yet) found a way to pass it from R to an installation od rstan othar than via "./RMakevars"
On Jul 25, 2014, at 10:55 AM, Emmanuel Charpentier <emanuel.c...@gmail.com> wrote:
> AN INSTALL SCRIPT SHOULD NOT MAKE PERMANENT AND UNDOCUMENTED CHANGES TO THE USER'S SYSTEM, dammit !
Agreed. See Ben's reply. No need to shout, though.
If you want to shout, please direct it at the other R package
writers who modify these things and caused the problems for us
in the first place. And at the people who configure R itself
for Windows (the installer doesn't match their recommendations
on paths, for example).
...
> In this case, I second CRAN's attitude : this standard greatly simplifies the life of people needing to use R for other purposes than Stan's frontend.
First, see Ben's response again.
We haven't been able to finagle our package onto CRAN (yet) due
to their rather severe limits on size, compile times, and
test times.
The BH package is not a complete version of the Boost lib, again
due to CRAN's restrictions. It's also not up to date, being based
on Boost 1.54 rather than the now 9-month old Boost 1.55.
I hate hate hate that depending on BH now hobbles Stan's ability
to keep up with Boost improvements.
Plus, every time we want to use something in Boost that's not in
BH, we have to ask the maintainers of BH to add it.
Bioconductor (bio's equivalent of CRAN) is just as bad as CRAN
in terms of restrictions on what they'll package.
Basically, R is a huge pain.
We haven't had any of these
problems with Python (at least as far as I'm aware).
- Bob
Dear Ben :
A couple more datapoints :
1) Sages'R indeed needs -O2 (or -O3, but I'd settle for -O2 since -O3 leads to invalid objects for other libraries, such as nloptr, which is the workhorse of a lot of other packages...).
2) I did not (yet) found a way to pass it from R to an installation od rstan othar than via "./RMakevars". GCC mysteries...
R is now configured for x86_64-unknown-linux-gnu
Source directory: .
Installation directory: /usr/local
C compiler: gcc -std=gnu99 -g -O2
Fortran 77 compiler: gfortran -g -O2
C++ compiler: g++ -g -O2
C++ 11 compiler: g++ -std=c++11 -g -O2
Fortran 90/95 compiler: gfortran -g -O2
3) System's R does not seem to *need* -O2|3, but gives a couple of warnings about 'exceeded limits. Retrying without limits".
4) GCC mysteries : any compilation of rstan seem to need about 2 Gb (!!!) of memory. Parallelizing it seriously accelerates the process, but needs as much as 11,2 Gb (!!!!) of RAM.
5) Consequences of 4) : any model compilation (even a small one) on a 2 Gb machine leads to swapping.
[...]
Rstan 2.3 still left me with .//Makevars... (notwithstanding the set_cppo hypothesis).
Shouldn't setting this option be *internal* to rstan's wrapper functions ? Again, the idea is to avoid to modify the state of thge user's computer. To your garden-variety biostatistician, GCC is something like an endemic disease (fortunately non-mortal (usually...)) ; the CXXFLAGS some sort of prognostic factor. The Stan USER should NOT have to worry with such technical details -but these should be documented for the special cases).
[...]
I think you are objecting to the set_cppo() function, which is called by install_rstan() after rstan is installed and modifies ~/.R/Makevars
That might be the case. I didn't think of that... But this should be documented as a potentially serious side effect. And, if possible at all, limited in scope by the R wrapper functions.
so that it is correctly formatted and by default uses -O3 because that makes Stan programs run slightly faster than -O2 and much faster than any other optimization level. Setting -O3 probably breaks some other R packages, which I would be sympathetic to if that happened on your system,
It did. More than once ...
but it changes a non-executable file, is documented and also prints a message to the console when it is called.
Not during installation !
[ ... ]
+ install.packages(c("inline", "BH", "RcppEigen"))
+ install.packages("Rcpp", type = "source")
No : here, you unconditionally install whatever Rcpp and BH version happens to be available on CRAN at install time. You should install use the "Depends" field of the DESCRIPTION file, which would install the packages *if necessary* (even with version constraints if necessary).
No:
http://cran.r-project.org/doc/manuals/R-exts.html#Package-Dependencies"Field ‘Depends’ should nowadays be used rarely, only for packages which are intended to be put on the search path to make their facilities available to the end user (and not to the package itself)"
and later on in that same sectionA package that wishes to make use of header files in other packages needs to declare them as a comma-separated list in the field ‘LinkingTo’ in the DESCRIPTION file. For example
LinkingTo: link1, link2As from R 3.0.2 the ‘LinkingTo’ field can have a version requirement which is checked at installation. (In earlier versions of R it would cause the specification to be ignored.)
Specifying a package in ‘LinkingTo’ suffices if these are C++ headers containing source code or static linking is done at installation: the packages do not need to be (and usually should not be) listed in the ‘Depends’ or ‘Imports’ fields. This includes CRAN packages BH and almost all users of RcppArmadillo and RcppEigen.
which is exactly what the DESCRIPTION file in rstan does
https://raw.githubusercontent.com/stan-dev/rstan/develop/rstan/rstan/DESCRIPTIONDepends: R (>= 3.0.2), Rcpp (>= 0.9.10), utils, inline, methods
LinkingTo: Rcpp, RcppEigen, BH (>= 1.54)
Suggests: RUnit, RcppEigen, BH (>= 1.54), parallel
with the added Suggests line to work around the undocumented fact that the rstan vignette would not build without it.
Okay. So why unconditionally install BH and RcppEigen ?