On Mar 12, 2013, at 2:01 PM, Hervé Pagès wrote: > Hi, > > On 03/12/2013 09:55 AM, Simon Urbanek wrote: >> >> On Mar 12, 2013, at 12:30 PM, Kevin Horan wrote: >> >>> >>> Thanks for your input. To clarify, I don't need to use any part of GSL >>> in my R code, nor do I wish to make any part of it accessible to users of >>> eiR. I need it to compile other C/C++ code (LSH KIT), which I did not >>> write, that will itself be used in eiR. >>> My goal is allow the user to install eiR without also having to install >>> GSL before hand. >> >> If your package is on CRAN they won't need to as we are providing Mac and >> Windows binaries. > > I think that at least on Windows, the user would still need to have the > GSL installed on his/her machine. >
Why? > >> Linux can get the binaries form their distro, so the dependencies are >> installed automatically. >> >> >>> The target audience is people in bioinformatics who may not how to install >>> something like GSL. It seems like what I was suggesting is not such a good >>> idea, if it will be hard to reliably find the header files from another R >>> package. I could also push all of GSL into eiR, but as GSL has over 5000 >>> files, this makes the package very large ( >22 MB) and slow to compile. >>> Both of which are a problem when submitting a package to bioconductor. It >>> may very well be that leaving GSL as an external dependency to eiR is >>> really the best and easiest way, but I just wanted to see if there was any >>> way to make it easier for the user. >> >> Can you clarify what you mean by "user"? The vast majority of R users use >> binaries, so all this is irrelevant to them as they don't need to install >> GSL at all. > > FWIW we currently have 7 or 8 Bioconductor packages that require the > GSL as an external system lib. That's because even if we provide Windows > binaries for those packages, those binaries are dynamically linked. > Is there a way to build those binaries that would avoid that dependency? > Yes, use static libgsl. > Anyway, to answer Kevin's original question: > > how do I know where the GSL library and header files, packaged > in GSLR, would live so I can point the compiler at them? > > Use the LinkingTo field. > No, you're not linking to another package, your'e linking to a *library*. LinkingTo uses R's own mechanism for symbol detection in another *package*. I know, the name is a bit misleading but those are two different things. Cheers, Simon > Cheers, > H. > >> >> Cheers, >> Simon >> >> >>> So, any other suggestions about how this could be accomplished? Thanks. >>> >>> Kevin >>> >>> On 03/12/2013 05:26 AM, Simon Urbanek wrote: >>>> Kevin, >>>> >>>> On Mar 11, 2013, at 5:20 PM, Kevin Horan wrote: >>>> >>>>> I am developing an R package, eiR, which depends on another C library, >>>>> GNU scientific library (GSL). In order to make life easier for the user, >>>>> it would be nice to not have this as an external dependency, thus I would >>>>> like to wrap this library in another R package, say GSLR for example. >>>>> Thus far I know how to do this. The C code in eiR requires the .so >>>>> library and the header files from GSL in order to compile. So the idea is >>>>> that eiR would depend on GSLR, then GSLR gets compiled and installed >>>>> first, then, while eiR is installing, it should be able to make use of >>>>> the GSL library and header files while compiling. So my question is, how >>>>> do I know where the GSL library and header files, packaged in GSLR, would >>>>> live so I can point the compiler at them? I know how to find the >>>>> installed directory of an R package from within R, but is there way to >>>>> find that out using just Makevars or a Makefile? I'm open to suggestions >>>>> about a better way organize all of this as well. I like the > ! >> idea of keeping the GSL code separate so that it can be updated/changed >> independently from eiR though. >>>> Have a look at Rcpp. >>>> >>>> >>>>> I'm also aware of the gsl R library on CRAN, however, this just wraps >>>>> GSL in R functions, but I need to use the GSL C functions in other C code >>>>> in eiR. >>>>> >>>> Why is what you are proposing any better than simply using GSL in eiR? You >>>> will still need the GSL external dependency for GSLR and you are only >>>> adding a lot of complexity by linking into another package's external >>>> directory (you cannot use libs) which is in itself very tricky (you'll >>>> have to deal with both static and shared version, multi-arch setups, >>>> possible relocation etc.). It won't make it any easier on the user, rather >>>> to the contrary as there will be more things to break. The only reason >>>> Rcpp goes into such length to do this is because it has no choice (the >>>> Rcpp library has to use the same libR so cannot be used as external >>>> dependency) - I would certainly not recommend it for something as trivial >>>> as providing GSL. >>>> >>>> Cheers, >>>> Simon >>>> >>>> >>>>> Thanks. >>>>> >>>>> Kevin >>>>> >>>>> ______________________________________________ >>>>> [email protected] mailing list >>>>> https://stat.ethz.ch/mailman/listinfo/r-devel >>>>> >>>>> >>> >>> >> >> ______________________________________________ >> [email protected] mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel >> > > -- > Hervé Pagès > > Program in Computational Biology > Division of Public Health Sciences > Fred Hutchinson Cancer Research Center > 1100 Fairview Ave. N, M1-B514 > P.O. Box 19024 > Seattle, WA 98109-1024 > > E-mail: [email protected] > Phone: (206) 667-5791 > Fax: (206) 667-1319 > > ______________________________________________ > [email protected] mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > > ______________________________________________ [email protected] mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
