Install R without support for long doubles (noLD) on Ubuntu

[This article was first published on Computational Psychology - Henrik Singmann, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

R packages on CRAN needs to pass a series of technical checks. These checks can also be invoked by any user when running R CMD check on the package tar.gz (to emulate CRAN as much as possible one should also set the --as-cran option when doing so). These checks need to be passed before a package is accepted on CRAN. In addition, these checks are regularly run for each package on CRAN to ensure that new R features or updates of upstream packages do not break the package. Furthermore, CRAN checks regularly become stricter. Thus, keeping a package on CRAN may require regular effort from the package maintainer. Whereas this sometimes can be rather frustrating for the maintainer, partly because of CRAN’s rather short two week limit in case of newly appearing issues, this is one the features that ensures the high technical quality of packages on CRAN.

As an example for the increasingly stricter checks, CRAN now also performs a set of additional checks in addition to the CRAN checks on all R platforms that are shown on a packages check page (e.g., for the MPTmultiverse). These additional checks include tests for memory access errors (e.g., using valgrind), R compiled using alternative compilers, different numerical algebra libraries, but also tests for an R version without support for long doubles (i.e., noLD). It now has happened for the second time that one of my packages showed a problem on the R version without long double support

In my case, the problem on the R version without long double support appeared in the package examples or in the unit tests of the package. Therefore, I did not only want to fix the check issue, I also wanted to understand what was happening. Thus, I needed a working version of R without support for long doubles. Unfortunately, the description of this setup is rather sparse. The only information on CRAN is rather sparse:

tests on x86_64 Linux with R-devel configured using --disable-long-double

Other details as https://www.stats.ox.ac.uk/pub/bdr/Rconfig/r-devel-linux-x86_64-fedora-gcc

Similarly sparse information is given in Writing R Extensions:

If you must try to establish a tolerance empirically, configure and build R with –disable-long-double and use appropriate compiler flags (such as -ffloat-store and -fexcess-precision=standard for gcc, depending on the CPU type86) to mitigate the effects of extended-precision calculations.

Unfortunately, my first approach in which I simply tried to add the --disable-long-double option to the R-devel install script failed. After quite a bit of searching I found the solution on the RStudio community forum thanks to David F. Severski. In addition to --disable-long-double one also needs to add --enable-long-double=no to configure. At least on Ubuntu, this successfully compiles an R version without long double support. This can be confirmed with a call to capabilities() in R.

The rest of this post gives a list of all the packages I needed to install on a fresh Ubuntu version to successfully compile R in this way. This set of packages should of course also hold for compiling normal R versions. I hope I did not forget too many packages, but this hopefully covers most. Feel free to post a comment if something is missing and I will try to update the list.

sudo apt-get update
sudo apt-get install build-essential
sudo apt-get install gfortran
sudo apt-get install libpcre2-dev
sudo apt-get install xorg-dev
sudo apt-get install libcurl
sudo apt-get install libcurl4-openssl-dev
sudo apt-get install libbz2-dev
sudo apt-get install texlive-fonts-extra
sudo apt-get install default-jdk
sudo apt-get install curl

After this, we should be able to build R. For this, I followed the `RStudio` instructions for installing multiple R versions in parallel. We begin by setting an environment variable and downloading R.

export R_VERSION=4.0.1

curl -O https://cran.rstudio.com/src/base/R-4/R-${R_VERSION}.tar.gz
tar -xzvf R-${R_VERSION}.tar.gz
cd R-${R_VERSION}

We can then install R (here I set the options for disabling long doubles):

./configure \
    --prefix=/opt/R/${R_VERSION} \
    --enable-R-shlib \
    --with-blas \
    --with-lapack \
    --disable-long-double \
    --enable-long-double=no

make 
sudo make install

To test the installation we can use:

/opt/R/${R_VERSION}/bin/R --version

Finally, we need to create a symbolic link:

sudo ln -s /opt/R/${R_VERSION}/bin/R /usr/local/bin/R
sudo ln -s /opt/R/${R_VERSION}/bin/Rscript /usr/local/bin/Rscript

We can then run R and check the capabilities of the installation:

> capabilities()
       jpeg         png        tiff       tcltk         X11 
      FALSE        TRUE       FALSE       FALSE        TRUE 
       aqua    http/ftp     sockets      libxml        fifo 
      FALSE        TRUE        TRUE        TRUE        TRUE 
     cledit       iconv         NLS     profmem       cairo 
       TRUE        TRUE        TRUE       FALSE       FALSE 
        ICU long.double     libcurl 
       TRUE       FALSE        TRUE

Or shorter:

> capabilities()[["long.double"]]
[1] FALSE

 

 

 

 

To leave a comment for the author, please follow the link and comment on their blog: Computational Psychology - Henrik Singmann.

R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

Never miss an update!
Subscribe to R-bloggers to receive
e-mails with the latest R posts.
(You will not see this message again.)

Click here to close (This popup will not appear again)