This is a very nice entry to the faq. Thanks Simon. btw, wouldn't it be possible to create a small app (with an embedded script) to do this? Which possibly makes a copy of R.app, so if you discover you need a additional package, you install it in the original R.app and repackage.
stefano p.s. I'm not volunteering though :) On 08/mar/08, at 20:37, Simon Urbanek wrote: > Following the point brought up by Vince Carey, I thought I'll share > some info how you can create a version of R that is fully contained in > the R.app bundle. i.e. all you have is just the "R" icon that can be > moved/copied anywhere. > > Prerequisities: > - Mac OS X 10.4 or higher > - Xcode developer tools installed (see R for Mac FAQ) > - somewhat recent, working R.app + R framework (e.g. from CRAN) in > default locations > > For simplicity I assume that you'll be assembling the R on your > Desktop and you are using regular CRAN binary, but you can do that > anywhere with any R. > > copy/paste in Terminal (I hope your mailer doesn't wrap this): > > cd ~/Desktop > # copy R.app > ditto /Applications/R.app R.app > cd R.app/Contents > # copy the R.framework inside > mkdir Frameworks > ditto /Library/Frameworks/R.framework R.framework > > # fix all executables and libraries > for f in `find . \( -perm +a+x -a -type f \)`; do > if otool -L $f 2>/dev/null|grep Versions/.../Resources/lib >/dev/null > 2>&1; then > libs=`otool -L $f 2>/dev/null|sed -n 's:.*\(/Library/Frameworks/ > R.framework/Versions.*\) (.*:\1:p'` > for lib in $libs; do > nlib=`echo $lib|sed 's:/Library/Frameworks/R.framework/ > Versions/...:@executable_path/../Frameworks/R.framework:'` > echo $f:$lib > install_name_tool -change $lib $nlib $f > done > fi > done > > Now you have a fully working R.app on your desktop that you can copy > anywhere and it is self-contained. All paths are relative to the > executable, hence relative to R.app. > > [Note: in order to test the fact that it is relocatable, you have to > move/rename/delete /Library/Frameworks/R.framework first, otherwise > rogue packages might fall back to that] > > CAVEAT: There is a caveat, though: you *cannot* install any packages > with such R. Installing source package is a no-no (they won't compile) > and installing binary packages will only work if you fix them before > use (i.e. cd into R.app/Contents and re-run the script above starting > with "for f...") > [Another caveat is that the command-line version of such R won't work, > but that is expected, because the R start script contains hard-coded > R_HOME path, so you'd have to fix that whenever you move R.app.] > > Therefore you should install all necessary packages (in the system- > wide location) *before* you package it. > > This is indented for those who wish to carry R with them on a USB > stick temporarily and/or give a specifically setup version of R to > others (class/workshop ...). It is not intended for "regular" use and > is not officially supported. Use at your own risk ;). > > Hint: to create a compressed disk image of this R such that you can > use it without installing, run > cd ~/Desktop > mkdir R > mv R.app R > hdiutil create -srcfolder R R.dmg > > Cheers, > Simon > > For advanced users: you can also use install_name_tool -id to change > the IDs of libraries in $R_HOME/lib. If you do that to your system R, > all compiled packages will be correctly linked so you don't need the > fixup anymore. > > _______________________________________________ > R-SIG-Mac mailing list > [email protected] > https://stat.ethz.ch/mailman/listinfo/r-sig-mac > _______________________________________________ R-SIG-Mac mailing list [email protected] https://stat.ethz.ch/mailman/listinfo/r-sig-mac
