On Mar 12, 2013, at 2:48 PM, Hervé Pagès wrote: > On 03/12/2013 11:09 AM, Simon Urbanek wrote: >> >> 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. > > Ah yes, of course. Thanks for the reminder. Just checked with Dan and > turns out that we are using that libgsl.a too (made by Brian D. Ripley) > on our build system. Some Bioconductor packages have README or INSTALL > files that still mention that the Windows user needs to install the GSL > but that doesn't seem to be the case so we'll make sure this information > gets updated. > > Also the SystemRequirements field in the DESCRIPTION file can be a > little bit confusing as it suggests that everybody requires the stuff > listed here when it actually depends whether the user is installing the > binary or not and how the binary was made. > >> >> >>> 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. > > I understand that but that's what Kevin wants right, i.e. linking > to another package.
No (you cannot link to another package - that's the misnomer), he wants to link to a library provided by another package (see his e-mail, he's asking about how to locate the GSL library supplied with RGSL, not to RGSL itself). > Yes there is the extra difficulty to register all the C functions in the GSL > API (as pointed out by Dirk) but that's another story. > That's not another story - that's very much part of the story why using LinkingTo is not a good idea. Cheers, Simon > Thanks, > H. > >> >> 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 t > he >>> ! >>>> 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 >>>>>>> >>>>>>> ______________________________________________ >>>>>>> R-devel@r-project.org mailing list >>>>>>> https://stat.ethz.ch/mailman/listinfo/r-devel >>>>>>> >>>>>>> >>>>> >>>>> >>>> >>>> ______________________________________________ >>>> R-devel@r-project.org 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: hpa...@fhcrc.org >>> Phone: (206) 667-5791 >>> Fax: (206) 667-1319 >>> >>> ______________________________________________ >>> R-devel@r-project.org 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: hpa...@fhcrc.org > Phone: (206) 667-5791 > Fax: (206) 667-1319 > > ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel