From maechler at stat.math.ethz.ch  Sat May 20 15:35:10 2017
From: maechler at stat.math.ethz.ch (Martin Maechler)
Date: Sat, 20 May 2017 15:35:10 +0200
Subject: [Rd] test fails when requesting LC_CTYPE
In-Reply-To: <CAC2h7uvwn9x68OpHgmnhYy0Zih=hZKMgp8YOxpjoWfx-UNEs0A@mail.gmail.com>
References: <CAC2h7usJEYG_xt4LoMCkZmOO9S36gw=L0=jJzVkE36q53Qv8sA@mail.gmail.com>
 <CAC2h7uvwn9x68OpHgmnhYy0Zih=hZKMgp8YOxpjoWfx-UNEs0A@mail.gmail.com>
Message-ID: <22816.17934.988043.394635@stat.math.ethz.ch>

>>>>> Kasper Daniel Hansen <kasperdanielhansen at gmail.com>
>>>>>     on Fri, 19 May 2017 20:09:24 -0400 writes:

    > I rebuilt R with
    > export LC_CTYPE=en_US.UTF-8
    > and the test still fail.  Surprisingly, when I run R from the bin directory
    > and execute the test code, it runs without error:

  >> oloc <- Sys.getlocale("LC_CTYPE")
  >> mbyte.lc <- {
  > +     if(.Platform$OS.type == "windows")
  > +       "English_United States.28605"
  > +     else if(grepl("[.]UTF-8$", oloc, ignore.case=TRUE)) # typically nowadays
  > +       oloc
  > +     else
  > +       "C.UTF-8" # or rather "en_US.UTF-8" (? from  system("locale -a| fgrep .UTF-8") )
  > + }
  >> stopifnot(identical(Sys.setlocale("LC_CTYPE", mbyte.lc), mbyte.lc))
  >> oloc
  > [1] "en_US.UTF-8"
  >> mbyte.lc
  > [1] "en_US.UTF-8"

I had been making these changes in R-devel after offline
discussions with Linux users for which the original check (using "en_UK.UTF-8")
failed.

What I read below is suggesting that "C.UTF-8" is not okay
either, as a fallback.

It seems we should use "en_US.UTF-8" as fallback instead
(though I assume that won't work in North Korea).

I've committed a version that does that _and_ no longer stops
when that identical() does not give a 'TRUE'.

Martin

    > On Fri, May 19, 2017 at 7:29 PM, Kasper Daniel Hansen <
    > kasperdanielhansen at gmail.com> wrote:

    >> On RedHat Enterprise Linux 6, the test below fails (this is using the
    >> stock GCC 4.4.7) from R-devel r72707.  LC_CTYPE is unset when I run it, but
    >> LANG=en_US.UTF-8
    >> 
    >> It also failed "yesterday" where as far as I recall the test code looked a
    >> bit different.
    >> 
    >> Best,
    >> Kasper
    >> 
    >> > ## Results differed by platform, but some gave incorrect results on
    >> string 10.
    >> >
    >> >
    >> > ## str() on large strings (in multibyte locales; changing locale may not
    >> work everywhere
    >> > oloc <- Sys.getlocale("LC_CTYPE")
    >> > mbyte.lc <- {
    >> +     if(.Platform$OS.type == "windows")
    >> +       "English_United States.28605"
    >> +     else if(grepl("[.]UTF-8$", oloc, ignore.case=TRUE)) # typically
    >> nowadays
    >> +       oloc
    >> +     else
    >> +       "C.UTF-8" # or rather "en_US.UTF-8" (? from  system("locale -a|
    >> fgrep .UTF-8") )
    >> + }
    >> > stopifnot(identical(Sys.setlocale("LC_CTYPE", mbyte.lc), mbyte.lc))
    >> Error: identical(Sys.setlocale("LC_CTYPE", mbyte.lc), mbyte.lc) is not
    >> TRUE
    >> In addition: Warning message:
    >> In Sys.setlocale("LC_CTYPE", mbyte.lc) :
    >> OS reports request to set locale to "C.UTF-8" cannot be honored
    >> Execution halted
    >>



[Rd] test fails when requesting LC_CTYPE
Martin Maechler