Skip to content

Change in the Tcl/Tk loading in R 2.7.0 (under Unix/Mac OS X)?

3 messages · Brian Ripley, Philippe GROSJEAN

#
Hello,

Up to R 2.6.2, I used to start Tcl *without Tk* (I need only Tcl for 
some part of my work, like a socket server written in Tcl only, for 
instance) with this code under Mac OS X (particularly on this system, 
because I don't want to start X11 just to use Tcl code, which is 
required for Tk!):

 > Sys.unsetenv("DISPLAY")
 > library(tcltk)

I got then the message "no DISPLAY variable so Tk is not available", but 
could work with Tcl without problems.

Now, with R 2.7.0, I got the following and Tcl failed to load:
Loading Tcl/Tk interface ... Error in fun(...) : no display name and no 
$DISPLAY environment variable
Error : .onLoad failed in 'loadNamespace' for 'tcltk'
Error: package/namespace load failed for 'tcltk'

I try to locate the message "no display name and no $DISPLAY environment 
variable" in the code but I cannot find it. Could someone help me please?

 > sessionInfo()
R version 2.7.0 Patched (2008-04-22 r45460)
i386-apple-darwin8.10.1

locale:
en_US.UTF-8/en_US.UTF-8/C/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

Many thanks,

Philippe Grosjean
#
First, this does depend on what build of R you use.  The 'HAVE_AQUA' 
define matters, and is only defined on some Mac OS X builds (e.g. not the 
default one, but the one used for the CRAN binary).

Second, there are several possible versions of Tcl/Tk and X11 on MacOS X, 
and as I suspect one of your R versions was not a CRAN build, I am not 
willing to make assumptions here.  (E.g. I do run a self-compiled 
command-line version of R using ActiveTcl's 8.5.2 code.)

Finally, I see no evidence that this is not specific to Mac OS X, and your 
desired behaviour is still present on other Unix-alikes.

If you want the ability to start Tcl and not Tk on a CRAN build of R for 
Mac OS X, I think you need to negotiate a way to do it as I believe it is 
not intended to be available.  But that's definitely an R-sig-mac topic.
On Sun, 4 May 2008, Philippe Grosjean wrote:

            
That message is only given if (src/library/tcltk/src/tcltk.c in both 2.6.2 
and 2.7.0)

#if !defined(Win32) && !defined(HAVE_AQUA)

so your 2.6.x build appears not to have been defining HAVE_AQUA, which a 
CRAN build would.
I think it is coming from Tk_Init, at

         code = Tk_Init(RTcl_interp);  /* Load Tk into interpreter */
         if (code != TCL_OK)
             error(Tcl_GetStringResult(RTcl_interp));

  
    
#
Prof Brian Ripley wrote:
Indeed!
OK, thanks. I repost this question to r-sig-mac.

Philippe