[R-SIG-Mac] Mac OS X tcltk/X11 issues
John Chambers
jmc at r-project.org
Tue Jul 15 03:41:22 CEST 2014
See ?setLoadActions, which arranges for functions to be called while the package's namespace is still accessible during load.
The .onLoad function is essentially useless for anything not in the base R.
JMC
On Jul 14, 2014, at 5:08 PM, John Fox <jfox at mcmaster.ca> wrote:
> Dear Marc and Kasper,
>
> I already know how to test whether the Rcmdr is running under Mac OS X and
> to test whether X11 is installed. But AFAICS there is no way for me to run
> this code in the Rcmdr package at startup *before* tcltk fails to load -- I
> did try to do this, both in .onLoad() and in .onAttach().
>
> I thought that I'd made this problem clear in my initial message but
> apparently I hadn't. I'd be happy if someone proved me wrong by showing me
> another way to intercept the problem on startup of the Rcmdr package, but I
> think that the fix has to go into tcltk, as Kasper suggests.
>
> Best,
> John
>
>> -----Original Message-----
>> From: Marc Schwartz [mailto:marc_schwartz at me.com]
>> Sent: Monday, July 14, 2014 6:33 PM
>> To: Kasper Daniel Hansen
>> Cc: John Fox; urbanek at research.att.com; r-sig-mac at r-project.org
>> Subject: Re: [R-SIG-Mac] Mac OS X tcltk/X11 issues
>>
>> Kasper,
>>
>> Understood. I was not sure if there was someplace in John's startup
>> code that might catch it early on before tcltk loads, but that may be
>> confounded by the sequence of the package import process as John notes
>> below.
>>
>> Reading R-exts and the related help files does not make it clear to me
>> that there is a window of opportunity to run the check before the
>> import occurs, but I would defer to Simon et al on the finer points
>> here.
>>
>> Regards,
>>
>> Marc
>>
>>
>> On Jul 14, 2014, at 5:07 PM, Kasper Daniel Hansen
>> <kasperdanielhansen at gmail.com> wrote:
>>
>>
>> Basically John is asking for code like this to be included in
>> tcltk.
>>
>> Best,
>> Kasper
>>
>>
>> On Mon, Jul 14, 2014 at 11:53 PM, Marc Schwartz
>> <marc_schwartz at me.com> wrote:
>>
>>
>> On Jul 14, 2014, at 4:13 PM, John Fox <jfox at mcmaster.ca>
>> wrote:
>>
>> > Dear Simon and list members,
>> >
>> > As many of you are aware, when X11 isn't installed on Mac
>> OS X, loading the
>> > tcltk package produces an error, with a message that many
>> users find
>> > cryptic. There was yet another instance of this problem
>> reported to the list
>> > today.
>> >
>> > I'm interested in the issue because the Rcmdr package uses
>> tcltk and thus
>> > fails to load when X11 is absent. Rcmdr users tend to be
>> inexperienced and
>> > so, unless they find their way to the Rcmdr installation
>> webpage, where
>> > detailed installation instructions are provided, they tend
>> to be stymied by
>> > the problem.
>> >
>> > If I could, I'd intercept the problem by checking
>> capabilities()["X11"] in
>> > the Rcmdr .onLoad() or .onAttach() function, but because
>> the Rcmdr package
>> > imports the tcltk namespace, the error occurs before these
>> startup functions
>> > are executed -- a chicken-and-egg problem.
>> >
>> > It occurs to me that tcltk could fail more gracefully on
>> Mac OS X when X11
>> > is absent, perhaps popping up a webpage in a browser with
>> instructions and a
>> > link for installing XQuartz. I'd do this myself in the
>> Rcmdr package if I
>> > could. Or tcltk could check for the presence of X11 and
> not
>> try to start it
>> > if it's absent, reporting a warning rather than throwing
> an
>> error.
>> >
>> > Alternatively, I'd be grateful if someone could suggest
> how
>> I might detect
>> > the problem in the Rcmdr package before loading fails. The
>> only thing that I
>> > could think of was writing a separate RcmdrInstall package
>> that bypasses
>> > tcltk, but that would be awkward and would only help users
>> who discovered
>> > that RcmdrInstall exists.
>> >
>> > Thanks,
>> > John
>>
>>
>>
>> John,
>>
>> Is there someplace in your startup process where you could
>> run code along the lines of:
>>
>> if (grepl("apple", R.version$platform) &
>> length(list.files("/opt/X11/bin", pattern = "Xquartz")) == 0) {
>> cat("X11 is required. Please visit
>> http://xquartz.macosforge.org <http://xquartz.macosforge.org/> to
>> download and install Xquartz.")
>> stop()
>> }
>>
>>
>> The above code will check to see if the user is running R on
>> OS X and also if the Xquartz binary is present in the default location.
>>
>> Not sure if this is helpful.
>>
>> Regards,
>>
>> Marc Schwartz
>>
>>
>> _______________________________________________
>> R-SIG-Mac mailing list
>> R-SIG-Mac at r-project.org
>> https://stat.ethz.ch/mailman/listinfo/r-sig-mac
>>
>>
>>
>
> _______________________________________________
> R-SIG-Mac mailing list
> R-SIG-Mac at r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-mac
More information about the R-SIG-Mac
mailing list