[MacPorts] #27685: enable 'aqua' graphics for R

MacPorts noreply at macports.org
Wed Dec 15 10:01:16 PST 2010


#27685: enable 'aqua' graphics for R
--------------------------------------+-------------------------------------
 Reporter:  adfernandes@…             |       Owner:  kjell.konis@…      
     Type:  enhancement               |      Status:  new                
 Priority:  Normal                    |   Milestone:                     
Component:  ports                     |     Version:                     
 Keywords:  haspatch                  |        Port:  R                  
--------------------------------------+-------------------------------------
 R needs a Fortran compiler, and hence the `macports-gcc-*` compilers are
 used by default to build it. However, none of these compilers can handle
 the apple-compiler specific files required by the `aqua` build.

 The attached patches fix that, allowing the `Quartz` graphics device on
 32-bit and 64-bit builds of R. It is a ''little'' bit of a hack so I'm not
 sure if it should be a default variant.

 The only caveat is that I have only tested on 10.6 and, due to the way the
 headers work, I don't think it will work on 10.5.

 This is important as the `quartz` graphics subsystem is 2-3 orders of
 magnitude faster than the `x11` backend - literally. When you are plotting
 thousands of points, lines, and symbols, this is ''really'' important.

 What the patch does is two-fold. First, it patches
 `src/include/R_ext/QuartzDevice.h` to add a definition of
 `__INTEL_COMPILER`  around
 {{{
 #define __INTEL_COMPILER
 #include <ApplicationServices/ApplicationServices.h>
 #undef __INTEL_COMPILER
 }}}
 so that the apple-specific CF_FORMAT_FUNCTION CF_FORMAT_ARGUMENT macros in
 `CFString.h` are defined to `null`s. The FSF `gcc`s cannot handle the
 actual definition of these macros. It looks like `gcc-4.6` will be patched
 to accept them, but until then... I searched all the apple SDK files, and
 the 10.6 `CFString.h` file is the '''only''' place where the
 `__INTEL_COMPILER` macro is used. Of course, this is not guaranteed for
 the future, but since Intel's compiler is mostly `gcc`-compatible, I think
 this is safe.

 Second, the patch forces the `objective-c` compiler to be apple's own. It
 is the only one that can compile the `qdCocoa.m` file for the quartz
 device. This is the ''only'' objective-c file in the entire `R`
 distribution.

 I've run a '''lot''' of plotting through this, mixing `x11` and `quartz`
 devices, with many font, symbol, and drawing tests, and it all looks fine
 to me (10.6.4, gcc-4.5) with no hangs, problems, or crashes.

-- 
Ticket URL: <https://trac.macports.org/ticket/27685>
MacPorts <http://www.macports.org/>
Ports system for Mac OS


More information about the macports-tickets mailing list