[Rd] R as OS X Framework

Simon Urbanek Simon.Urbanek at math.uni-augsburg.de
Sun Nov 30 21:38:03 MET 2003

On Nov 29, 2003, at 9:33 PM, Prof Brian Ripley wrote:

> On Sat, 29 Nov 2003, Simon Urbanek wrote:
>> BTW: This is not Mac specific - I was fighting this on Windows (and
>> unix for that matter) as well - it is possible to run an .exe linked 
>> to
>> R.dll from anywhere, if R.dll is in the PATH. But then, one has to
>> determine R_HOME somehow (yes, there is the registry, but that's not
>> really safe if more R versions are installed).
> How do you do that?  For R's own executables on Windows R_HOME is
> determined from where they are loaded from.  You cannot AFAIK determine
> from within an executable where the R.dll was linked from.  That's why 
> the
> rproxy.dll uses the registry.  I believe you have even less 
> information on
> Windows.

On Mac OS X there is a very nice CoreFoundation function: 
CFBundleGetBundleWithIdentifier. Each bundle can have an unique 
identifier and the above function will return the bundle reference if 
the bundle was loaded by the current application - and a framework is a 
bundle. So for Mac OS X this piece of code will determine R_HOME of the 
linked R.framework:

CFBundleRef bundle = 
CFBundleGetBundleWithIdentifier(CFSTR("org.r-project.r-framework") );
CFURLRef rdir=CFBundleCopyBundleURL(bundle);
CFStringRef rhome=CFURLCopyFileSystemPath(rdir,kCFURLPOSIXPathStyle);

I doubt there is any standard way on unix platforms in general. I have 
a vague feeling that I saw some relevant API on Windows - at least form 
the DLL itself, but I'm stuck with my PowerBook for three more week 
until I get home, so I can't check that easily.

I would suggest a fallback for cases where the location cannot be 
determined: we could use a tiny source file like location.c.in (could 
be config.h.in itself for that matter) which gets processed by 
configure and contains the install path. Then any program linked to R 
shlib could call a function like char* R_installPath(); Although that 
is not optimal, it is in general unlikely that the user would move R 
after doing make install (unless it's a network installation of course 
- then we're in trouble) and it is even safer that the registry on 
Windows. It would be an useful fallback for platforms where we simply 
don't know.


PS: My script mentioned in the original post doesn't create proper 
Info,plist if ran by /bin/sh - you can get the correct Info.plist for R 
1.8.1 from http://stats.math.uni-augsburg.de/misc/Info.plist and copy 
it to .../R.framework/Resources/

Simon Urbanek
Department of computer oriented statistics and data analysis
Universitätsstr. 14
86135 Augsburg

Tel: +49-821-598-2236
Fax: +49-821-598-2280

Simon.Urbanek at Math.Uni-Augsburg.de

More information about the R-devel mailing list