On Sun, Nov 13, 2011 at 6:25 PM, Simon Urbanek
<simon.urba...@r-project.org>wrote:

>
> On Nov 13, 2011, at 6:48 PM, Tyler Pirtle wrote:
>
> >
> >
> > On Sun, Nov 13, 2011 at 7:27 AM, Uwe Ligges <
> lig...@statistik.tu-dortmund.de> wrote:
> >
> >
> > On 13.11.2011 05:22, Tyler Pirtle wrote:
> > On Sat, Nov 12, 2011 at 8:08 PM, Tyler Pirtle<r...@google.com>  wrote:
> >
> > Thanks Simon, a few replies...
> >
> > On Sat, Nov 12, 2011 at 6:14 AM, Simon Urbanek<
> > simon.urba...@r-project.org>  wrote:
> >
> > Tyler,
> >
> > On Nov 11, 2011, at 7:55 PM, Tyler Pirtle wrote:
> >
> > Hi,
> >
> > I've got a C extension structured roughly like:
> >
> > package/
> >  src/
> >    Makevars
> >    foo.c
> >    some-lib/...
> >    some-other-lib/..
> >
> > where foo.c and Makevars define dependencies on some-lib and
> > some-other-lib. Currently I'm having
> > Makevars configure;make install some-lib and some-other-lib into a local
> > build directory, which produces
> > shard libraries that ultimately I reference for foo.o in PKG_LIBS.
> >
> > I'm concerned about distribution. I've setup the appropriate magic with
> > rpath for the packages .so
> >
> > That is certainly non-portable and won't work for a vast majority of
> > users.
> >
> >
> > Yea I figured, but apparently I have other, more pressing problems.. ;)
> >
> >
> >
> > (meaning
> > that when the final .so is produced the dynamic libraries dependencies
> > on
> > some-lib and some-other-lib
> > will prefer the location built in src/some-lib/... and
> > src/some-other-lib/... But does this preclude me from
> > being able to distribute a binary package?
> >
> > Yes. And I doubt the package will work the way you described it at all,
> > because the "deep" .so won't be even installed. Also there are potential
> > issues in multi-arch R (please consider testing that as well).
> >
> >
> > Understood. I wasn't a fan of any of the potential solutions I'd seen
> (one
> > of wich included source-only availability).
> > I've seen some other folks using the inst/ or data/ dirs for purposes
> like
> > this, but I agree it's ugly and has
> > issues. You raise a great point, too, about multi-arch R. I have
> potential
> > users that are definitely on
> > heterogeneous architectures, I noticed that when I R CMD INSTALL --build
> .
> > to check my current build,
> > I end up with a src-${ARCH} for both x86_64 and i386 - is there more
> > explicit multiarch testing I should be
> > doing?
> >
> >
> >
> > If I do want to build a binary
> > distribution, is there a way I can
> > package up everything needed, not just the resulting .so?
> >
> > Or, are there better ways to bundle extension-specific third party
> > dependencies? ;) I'd rather not have
> > my users have to install obscure libraries globally on their systems.
> >
> >
> > Typically the best solution is to compile the dependencies as
> > --disable-shared --enable-static --with-pic (in autoconf speak - you
> don't
> > need to actually use autoconf). That way your .so has all its
> dependencies
> > inside and you avoid all run-time hassle. Note that it is very unlikely
> > that you can take advantage of the dynamic nature of the dependencies
> > (since no one else knows about them anyway) so there is not real point to
> > build them dynamically.
> >
> >
> > That is a much better solution and the one I've been looking for! I was
> > afraid I'd have to manually specific all the dependency objects but if I
> > just disable
> > shared than that makes much more sense, I can let the compiler and linker
> > do the work for me.
> >
> >
> > Also note that typically you want to use the package-level configure to
> > run subconfigures, and *not* Makevars. (There may be reasons for an
> > exception to that convention, but you need to be aware of the differences
> > in multi-arch builds since Makevars builds all architectures at once from
> > separate copies of the src directories whereas the presence of configure
> > allows you to treat your package as one architecture at a time and you
> can
> > pass-though parameters).
> >
> >
> > Understood. Is src/ still the appropriate directory then for my third
> > party packages? Also, do you happen to know of any packages off-hand
> that I
> > can use
> > as a reference?
> >
> > Thanks Simon! Your insights here are invaluable. I really appreciate it.
> >
> >
> >
> > Tyler
> >
> >
> >
> > Ah, also a few more questions...
> >
> > I don't really understand the flow for developing multi-arch extensions.
> > Does configure run only once?
> >
> > Depends on the platform. For example: If you are on Windows and have a
> configure.win, you can tell R to run it for each architecture: See the R
> Installation and Administration manual  and also
> >
> > R CMD INSTALL --help which has, e.g., under Windows:
> >
> >  --force-biarch    attempt to build both architectures
> >                    even if there is a non-empty configure.win
> >
> >
> >
> > Once per arch? What is the state of
> > src-${ARCH} by the time the src/Makevars or Makefile is executed? Is any
> of
> > this actually in the manual and am I just missing it? ;)
> >
> > The Makevars/-file is executed for each architecture.
> >
> >
> >
> > And why does R_ARCH start with a '/'? ;)
> >
> > It is typically used as part of a path's name.
> >
> > Uwe Ligges
> >
> >
> > Thanks Uwe, very helpful stuff. I have the problem that I can't
> configure all my
> > third party packages at once since they're inter-dependent, so I have to
> deal with
> > R_ARCH in my Makefile.
> >
>
> You should not need to since it's irrelevant for you as a package author,
> it is used internally by R. (Also note that Makevars are preferred to
> Makefile since it is much more fragile to re-create the R build process in
> the latter and thus the latter is only used in very special circumstances)
>
>
That explains a few details then, I thought I was ultimately responsible
for producing binaries, but as you pointed out below
thats not the case...
 And I misspoke - I'm using a Makevars, I saw the warning elsewhere as
well.


> > I'm afraid I don't understand at all how portability is managed with
> respect to packages. I mean,
> > I'm not sure how multi-arch and CRAN all sort of fit together to make my
> package ultimately
> > available via binary distribution to users an all sorts of platforms.
> How does all this work?
> >
>
> As long as your code is portable and you use R's facilities (instead of
> creating your own), it's all automatic. Packages are built on each platform
> separately and then distributed on CRAN. To answer your previous question:
> for multi-arch platforms (on CRAN that is Windows and Mac OS X) the package
> is built separately for each architecture if your package contains
> configure or Makefile. Otherwise it is built in one go (see R-admin 6.3.4).
>
>
I guess thats the interesting question, is my code portable? Thats
something else that I don't fully understand, why are all architectures
built
if configure or Makefile are missing? I guess I don't really understand the
purpose of multiple sub-architectures (maybe, for example, if I were
on windows and building both natively and with cygwin? Is that the
purpose?). I'm not sure I get you when you say its "built in one go" - what
is? My package? It seems to be building just my (guessed) arch as well.




> > Say I can test and am willing to support certain architectures and
> certain OS distributions,
> > say Mac OS X, Linux, Windows, etc. and I can verify that my package
> builds in those
> > environments (under some minimal set of conditions). What is CRAN's
> purpose then?
> >
> > Am I meant to submit a binary build for each arch/OS as separate
> packages?
> >
>
> You're not supposed to supply any binaries. CRAN builds them from the
> sources you provide.
>
>
Thanks for the clarification.




> Cheers,
> Simon
>
>
> > My apologies for these questions, I'm quite new to this community, and
> all of your
> > help has been amazing, I really do appreciate it. Please point me at any
> relevant
> > documentation as well, I'm happy to go read.
> >
> > Hopefully I can contribute something back in a timely fashion here that
> will be
> > helpful to a wider audience ;)
> >
> >
> > Thanks,
> >
> >
> > Tyler
> >
> >
> >
> >
> > thanks again!
> >
> >
> > Tyler
> >
> >
> >
> >
> >
> >
> > Cheers,
> > Simon
> >
> >
> >
> >
> >
> >        [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > R-devel@r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-devel
> >
>
>

        [[alternative HTML version deleted]]

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to