Using the latest patched R 3.0.2 on Mac OS X Maverics (10.9.1) with Xcode 5.0.2 
command line tools and clang set as a compiler, the following kind of C code 
somewhere in a package results in a dynamic link to symbol ___sincos_stret:

double sincos(double n) { return(sin(n)+cos(n)); }

It is obvious that ___sincos_stret is an LLVM optimization: if code calls 
sin(n) and then cos(n) and uses both results, the compiler will make one call 
to the structure-returning sincos method.

The actual problem is that such symbol is available in system library 
/usr/lib/system/libsystem_m.dylib only since Mavericks (10.9 SDK) and a package 
installed from binary (.tgz) compiled on 10.9 but run on 10.8 or older fails: 
Symbol not found: ___sincos_stret

One ”solution" is to make minor changes to the C code so that compiler won’t 
detect a need for optimization. A better solution is to use compiler flag 
-mmacosx-version-min=10.8. However, these solutions to a single concrete 
problem give only partial answers to the more general question:

How to (maximize the possibility to) create OS X 10.6+ (i.e. R 3.0.0+) 
compatible .tgz binary packages using a computer with OS X 10.9 and Xcode 5.0 
(and without using CRAN or RForge building services)? 

Any tips would be appreciated.

Best wishes,
Reijo Sund

_______________________________________________
R-SIG-Mac mailing list
[email protected]
https://stat.ethz.ch/mailman/listinfo/r-sig-mac

Reply via email to