[Rcpp-devel] Advice on installing CHOLMOD/Suitesparse
Rodney Sparapani
rsparapa at mcw.edu
Fri Aug 31 18:35:27 CEST 2012
On 08/31/2012 11:20 AM, Douglas Bates wrote:
> We seem to be talking at crossed purposes.
>
> What I meant to say is that for some mysterious reason the standard R
> configuration defines
>
> CPPFLAGS=-I/usr/local/include
>
> or
>
> CPPFLAGS=-I/opt/local/include
>
Actually, it is not mysterious. I just checked it with R 2.15.1
and, if you build it with a blank CPPFLAGS in your environment, then
within $RHOME/etc/Makeconf CPPFLAGS is blank as well. So, as I say,
the problem was self-inflicted since our standard set up had
CPPFLAGS=-I/opt/local/include
But, that is a habit inherited from UNIX where /opt/local (or
/usr/local) was quite necessary for all of the GNU/FOSS stuff.
On GNU Linux, where "everything" is already included or added via
the package manager, this is not needed and, as you suggest,
dangerous.
> whichever is available and that doesn't make sense to me because the
> /usr/local/ or /opt/local directories are, well, local. So any
> package that looks for header files in the form
>
> #include<foo/bar.h>
>
> where there is a foo directory in the $PKG/inst/include (source
> package) or $PKG/include (installed package) directory will break if
> there happens to be a/usr/local/include/foo/ directory.
>
> This makes being an author of packages like RcppArmadillo or RcppEigen
> rather difficult because the author can't just deposit the header
> files needed by those packages linking to the Rcpp* package in
> $PKG/inst/include. He/she must anticipate what potential users may
> have in their /usr/local/include or /opt/local/include directories.
> One way around this, I suppose, is for me to rename
> RcppEigen/inst/include/Eigen and RcppEigen/inst/include/unsupported to
> other names and go in and modify every file in those directories to
> use nonstandard names. Of course, this makes maintenance awkward.
>
> Your solution of changing the name in include/Eigen/CholmodSupport to
> <suitesparse/cholmod.h> is dangerous because it can result in version
> skew. The CHOLMOD code will be pulled from the Matrix package and the
> headers for that version of CHOLMOD are those in RcppEigenCholmod.h
> If you use your own headers you may end up with a different version of
> many of the structs that are defined in those headers, with
> unpredictable consequences.
>
It's not ideal. It was just a workaround to get RcppEigen working so
that we can start working on a new project.
> To me the cleanest way out of this is to move /opt/local/include/Eigen
> and /opt/local/include/unsupported into a subdirectory like
> /opt/local/include/eigen3.
>
That would definitely work. Since we always have shiny new R releases,
I'm just upgrading to 2.15.1 with CPPFLAGS= ;o)
> Did you perhaps install suitesparse and Eigen just for the purposes of
> using RcppEigen. If so, you don't need to have them. Between the
> Matrix package and Rcpp and RcppEigen all the necessary code is
> provided in R packages.
No, I have been using CHOLMOD for a long time. And, recently I have
been using Eigen as well. But, I see your point. Everything that
RcppEigen needs is provided (I should have checked the source
immediately). Thanks
--
Rodney Sparapani, PhD Center for Patient Care and Outcomes Research
Sr. Biostatistician http://www.mcw.edu/pcor
4 wheels good, 2 wheels better! Medical College of Wisconsin (MCW)
WWLD?: What Would Lombardi Do? Milwaukee, WI, USA
More information about the Rcpp-devel
mailing list