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.

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?

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?

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<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