0byt3m1n1
Path:
C:
/
Program Files
/
R
/
R-4.4.1
/
doc
/
manual
/
[
Home
]
File: R-admin.html
<!DOCTYPE html> <html> <!-- Created by GNU Texinfo 7.1, https://www.gnu.org/software/texinfo/ --> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <!-- This manual is for R, version 4.4.1 (2024-06-14). Copyright © 2001-2024 R Core Team Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the R Core Team. --> <title>R Installation and Administration</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="description" content="R Installation and Administration"> <meta name="keywords" content="R Installation and Administration"> <meta name="resource-type" content="document"> <meta name="distribution" content="global"> <meta name="Generator" content="texi2any"> <meta name="viewport" content="width=device-width,initial-scale=1"> <link href="#Top" rel="start" title="Top"> <link href="#Function-and-variable-index" rel="index" title="Function and variable index"> <link href="#SEC_Contents" rel="contents" title="Table of Contents"> <link href="#Obtaining-R" rel="next" title="Obtaining R"> <style type="text/css"> <!-- a.copiable-link {visibility: hidden; text-decoration: none; line-height: 0em} a.summary-letter-printindex {text-decoration: none} div.example {margin-left: 3.2em} kbd.kbd {font-style: oblique} span.r {font-family: initial; font-weight: normal; font-style: normal} span:hover a.copiable-link {visibility: visible} td.printindex-index-entry {vertical-align: top} td.printindex-index-section {vertical-align: top; padding-left: 1em} th.entries-header-printindex {text-align:left} th.sections-header-printindex {text-align:left; padding-left: 1em} ul.mark-bullet {list-style-type: disc} ul.toc-numbered-mark {list-style: none} body { margin-left: 5%; margin-right: 5%; } h1 { background: white; color: rgb(25%, 25%, 25%); font-family: monospace; font-size: xx-large; text-align: center; } h2 { background: white; color: rgb(40%, 40%, 40%); font-family: monospace; font-size: x-large; text-align: center; } h3 { background: white; color: rgb(40%, 40%, 40%); font-family: monospace; font-size: large; } h4 { background: white; color: rgb(40%, 40%, 40%); font-family: monospace; } span.samp { font-family: monospace; } span.command { font-family: monospace; } span.option { font-family: monospace; } span.file { font-family: monospace; } span.env { font-family: monospace; } ul { margin-top: 0.25ex; margin-bottom: 0.25ex; } li { margin-top: 0.25ex; margin-bottom: 0.25ex; } p { margin-top: 0.6ex; margin-bottom: 1.2ex; } /* hide top navigation bar in Texinfo >= 6.8 output */ #Top > .header, #Top > .nav-panel { display: none } --> </style> </head> <body lang="en"> <div class="top-level-extent" id="Top"> <div class="nav-panel"> <p> Next: <a href="#Obtaining-R" accesskey="n" rel="next">Obtaining R</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h1 class="top" id="R-Installation-and-Administration"><span>R Installation and Administration<a class="copiable-link" href="#R-Installation-and-Administration"> ¶</a></span></h1> <p>This is a guide to installation and administration for R. </p> <p>This manual is for R, version 4.4.1 (2024-06-14). </p> <p>Copyright © 2001–2024 R Core Team </p> <blockquote class="quotation"> <p>Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. </p> <p>Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. </p> <p>Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the R Core Team. </p></blockquote> <div class="element-contents" id="SEC_Contents"> <h2 class="contents-heading">Table of Contents</h2> <div class="contents"> <ul class="toc-numbered-mark"> <li><a id="toc-Obtaining-R-1" href="#Obtaining-R">1 Obtaining R</a> <ul class="toc-numbered-mark"> <li><a id="toc-Getting-and-unpacking-the-sources-1" href="#Getting-and-unpacking-the-sources">1.1 Getting and unpacking the sources</a></li> <li><a id="toc-Getting-patched-and-development-versions-1" href="#Getting-patched-and-development-versions">1.2 Getting patched and development versions</a> <ul class="toc-numbered-mark"> <li><a id="toc-Using-Subversion-and-rsync-1" href="#Using-Subversion-and-rsync">1.2.1 Using Subversion and rsync</a></li> </ul></li> </ul></li> <li><a id="toc-Installing-R-under-Unix_002dalikes-1" href="#Installing-R-under-Unix_002dalikes">2 Installing R under Unix-alikes</a> <ul class="toc-numbered-mark"> <li><a id="toc-Simple-compilation-1" href="#Simple-compilation">2.1 Simple compilation</a></li> <li><a id="toc-Help-options-1" href="#Help-options">2.2 Help options</a></li> <li><a id="toc-Making-the-manuals-1" href="#Making-the-manuals">2.3 Making the manuals</a></li> <li><a id="toc-Installation-1" href="#Installation">2.4 Installation</a></li> <li><a id="toc-Uninstallation-1" href="#Uninstallation">2.5 Uninstallation</a></li> <li><a id="toc-Sub_002darchitectures-1" href="#Sub_002darchitectures">2.6 Sub-architectures</a></li> <li><a id="toc-Other-Options-1" href="#Other-Options">2.7 Other Options</a> <ul class="toc-numbered-mark"> <li><a id="toc-Debugging-Symbols-1" href="#Debugging-Symbols">2.7.1 Debugging Symbols</a></li> <li><a id="toc-OpenMP-Support-1" href="#OpenMP-Support">2.7.2 <abbr class="abbr">OpenMP</abbr> Support</a></li> <li><a id="toc-C_002b_002b-Support-1" href="#C_002b_002b-Support">2.7.3 C++ Support</a></li> <li><a id="toc-C-standards-1" href="#C-standards">2.7.4 C standards</a></li> <li><a id="toc-Link_002dTime-Optimization-1" href="#Link_002dTime-Optimization">2.7.5 Link-Time Optimization</a> <ul class="toc-numbered-mark"> <li><a id="toc-LTO-with-GCC-1" href="#LTO-with-GCC">2.7.5.1 <abbr class="abbr">LTO</abbr> with GCC</a></li> <li><a id="toc-LTO-with-LLVM-1" href="#LTO-with-LLVM">2.7.5.2 <abbr class="abbr">LTO</abbr> with LLVM</a></li> <li><a id="toc-LTO-for-package-checking-1" href="#LTO-for-package-checking">2.7.5.3 <abbr class="abbr">LTO</abbr> for package checking</a></li> </ul></li> </ul></li> <li><a id="toc-Testing-an-Installation" href="#Testing-a-Unix_002dalike-Installation">2.8 Testing an Installation</a></li> </ul></li> <li><a id="toc-Installing-R-under-Windows-1" href="#Installing-R-under-Windows">3 Installing R under Windows</a> <ul class="toc-numbered-mark"> <li><a id="toc-Building-from-source-1" href="#Building-from-source">3.1 Building from source</a> <ul class="toc-numbered-mark"> <li><a id="toc-The-Windows-toolset-1" href="#The-Windows-toolset">3.1.1 The Windows toolset</a></li> <li><a id="toc-LaTeX" href="#LaTeX-on-Windows">3.1.2 LaTeX</a></li> </ul></li> <li><a id="toc-Checking-the-build-1" href="#Checking-the-build">3.2 Checking the build</a></li> <li><a id="toc-Testing-an-Installation-1" href="#Testing-a-Windows-Installation">3.3 Testing an Installation</a></li> </ul></li> <li><a id="toc-Installing-R-under-macOS-1" href="#Installing-R-under-macOS">4 Installing R under macOS</a> <ul class="toc-numbered-mark"> <li><a id="toc-Running-R-under-macOS-1" href="#Running-R-under-macOS">4.1 Running R under macOS</a></li> <li><a id="toc-Uninstalling-under-macOS-1" href="#Uninstalling-under-macOS">4.2 Uninstalling under macOS</a></li> <li><a id="toc-Multiple-versions-1" href="#Multiple-versions">4.3 Multiple versions</a></li> </ul></li> <li><a id="toc-Running-R-1" href="#Running-R">5 Running R</a></li> <li><a id="toc-Add_002don-packages-1" href="#Add_002don-packages">6 Add-on packages</a> <ul class="toc-numbered-mark"> <li><a id="toc-Default-packages-1" href="#Default-packages">6.1 Default packages</a></li> <li><a id="toc-Managing-libraries-1" href="#Managing-libraries">6.2 Managing libraries</a></li> <li><a id="toc-Installing-packages-1" href="#Installing-packages">6.3 Installing packages</a> <ul class="toc-numbered-mark"> <li><a id="toc-Windows" href="#Windows-packages">6.3.1 Windows</a></li> <li><a id="toc-macOS-1" href="#macOS-packages">6.3.2 macOS</a></li> <li><a id="toc-Customizing-package-compilation-1" href="#Customizing-package-compilation">6.3.3 Customizing package compilation</a></li> <li><a id="toc-Multiple-sub_002darchitectures-1" href="#Multiple-sub_002darchitectures">6.3.4 Multiple sub-architectures</a></li> <li><a id="toc-Byte_002dcompilation-1" href="#Byte_002dcompilation">6.3.5 Byte-compilation</a></li> <li><a id="toc-External-software-1" href="#External-software">6.3.6 External software</a></li> </ul></li> <li><a id="toc-Updating-packages-1" href="#Updating-packages">6.4 Updating packages</a></li> <li><a id="toc-Removing-packages-1" href="#Removing-packages">6.5 Removing packages</a></li> <li><a id="toc-Setting-up-a-package-repository-1" href="#Setting-up-a-package-repository">6.6 Setting up a package repository</a></li> <li><a id="toc-Checking-installed-source-packages-1" href="#Checking-installed-source-packages">6.7 Checking installed source packages</a></li> </ul></li> <li><a id="toc-Internationalization-and-Localization" href="#Internationalization">7 Internationalization and Localization</a> <ul class="toc-numbered-mark"> <li><a id="toc-Locales-1" href="#Locales">7.1 Locales</a> <ul class="toc-numbered-mark"> <li><a id="toc-Locales-under-Unix_002dalikes-1" href="#Locales-under-Unix_002dalikes">7.1.1 Locales under Unix-alikes</a></li> <li><a id="toc-Locales-under-Windows-1" href="#Locales-under-Windows">7.1.2 Locales under Windows</a></li> <li><a id="toc-Locales-under-macOS-1" href="#Locales-under-macOS">7.1.3 Locales under macOS</a></li> </ul></li> <li><a id="toc-Localization-of-messages-1" href="#Localization-of-messages">7.2 Localization of messages</a></li> </ul></li> <li><a id="toc-Choosing-between-32_002d-and-64_002dbit-builds-1" href="#Choosing-between-32_002d-and-64_002dbit-builds">8 Choosing between 32- and 64-bit builds</a></li> <li><a id="toc-The-standalone-Rmath-library-1" href="#The-standalone-Rmath-library">9 The standalone Rmath library</a> <ul class="toc-numbered-mark"> <li><a id="toc-Unix_002dalikes" href="#Unix_002dalike-standalone">9.1 Unix-alikes</a></li> <li><a id="toc-Windows-1" href="#Windows-standalone">9.2 Windows</a></li> </ul></li> <li><a id="toc-Essential-and-useful-other-programs-under-a-Unix_002dalike-1" href="#Essential-and-useful-other-programs-under-a-Unix_002dalike">Appendix A Essential and useful other programs under a Unix-alike</a> <ul class="toc-numbered-mark"> <li><a id="toc-Essential-programs-and-libraries-1" href="#Essential-programs-and-libraries">A.1 Essential programs and libraries</a></li> <li><a id="toc-Useful-libraries-and-programs-1" href="#Useful-libraries-and-programs">A.2 Useful libraries and programs</a> <ul class="toc-numbered-mark"> <li><a id="toc-Tcl_002fTk-1" href="#Tcl_002fTk">A.2.1 Tcl/Tk</a></li> <li><a id="toc-Java-support-1" href="#Java-support">A.2.2 Java support</a></li> <li><a id="toc-Other-compiled-languages-1" href="#Other-compiled-languages">A.2.3 Other compiled languages</a></li> </ul></li> <li><a id="toc-Linear-algebra-1" href="#Linear-algebra">A.3 Linear algebra</a> <ul class="toc-numbered-mark"> <li><a id="toc-BLAS-1" href="#BLAS">A.3.1 BLAS</a> <ul class="toc-numbered-mark"> <li><a id="toc-ATLAS-1" href="#ATLAS">A.3.1.1 ATLAS</a></li> <li><a id="toc-OpenBLAS-and-BLIS-1" href="#OpenBLAS-and-BLIS">A.3.1.2 OpenBLAS and BLIS</a></li> <li><a id="toc-Intel-MKL" href="#MKL">A.3.1.3 Intel MKL</a></li> <li><a id="toc-Shared-BLAS-1" href="#Shared-BLAS">A.3.1.4 Shared BLAS</a></li> </ul></li> <li><a id="toc-LAPACK-1" href="#LAPACK">A.3.2 LAPACK</a></li> <li><a id="toc-Caveats-1" href="#Caveats">A.3.3 Caveats</a></li> </ul></li> </ul></li> <li><a id="toc-Configuration-on-a-Unix_002dalike-1" href="#Configuration-on-a-Unix_002dalike">Appendix B Configuration on a Unix-alike</a> <ul class="toc-numbered-mark"> <li><a id="toc-Configuration-options-1" href="#Configuration-options">B.1 Configuration options</a></li> <li><a id="toc-Internationalization-support-1" href="#Internationalization-support">B.2 Internationalization support</a></li> <li><a id="toc-Configuration-variables-1" href="#Configuration-variables">B.3 Configuration variables</a> <ul class="toc-numbered-mark"> <li><a id="toc-Setting-paper-size-1" href="#Setting-paper-size">B.3.1 Setting paper size</a></li> <li><a id="toc-Setting-the-browsers-1" href="#Setting-the-browsers">B.3.2 Setting the browsers</a></li> <li><a id="toc-Compilation-flags-1" href="#Compilation-flags">B.3.3 Compilation flags</a></li> <li><a id="toc-Making-manuals-1" href="#Making-manuals">B.3.4 Making manuals</a></li> </ul></li> <li><a id="toc-Setting-the-shell-1" href="#Setting-the-shell">B.4 Setting the shell</a></li> <li><a id="toc-Using-make-1" href="#Using-make">B.5 Using make</a></li> <li><a id="toc-Using-Fortran-1" href="#Using-Fortran">B.6 Using Fortran</a></li> <li><a id="toc-Compile-and-load-flags-1" href="#Compile-and-load-flags">B.7 Compile and load flags</a></li> <li><a id="toc-Maintainer-mode-1" href="#Maintainer-mode">B.8 Maintainer mode</a></li> </ul></li> <li><a id="toc-Platform-notes-1" href="#Platform-notes">Appendix C Platform notes</a> <ul class="toc-numbered-mark"> <li><a id="toc-X11-issues-1" href="#X11-issues">C.1 X11 issues</a></li> <li><a id="toc-Linux-1" href="#Linux">C.2 Linux</a> <ul class="toc-numbered-mark"> <li><a id="toc-Clang-1" href="#Clang">C.2.1 Clang</a></li> <li><a id="toc-flang-1" href="#flang">C.2.2 flang</a></li> <li><a id="toc-Intel-compilers-1" href="#Intel-compilers">C.2.3 Intel compilers</a></li> </ul></li> <li><a id="toc-macOS-2" href="#macOS">C.3 macOS</a> <ul class="toc-numbered-mark"> <li><a id="toc-Prerequisites-1" href="#Prerequisites">C.3.1 Prerequisites</a></li> <li><a id="toc-Fortran-compiler" href="#Fortran-compilers">C.3.2 Fortran compiler</a></li> <li><a id="toc-Cairo-graphics-1" href="#Cairo-graphics">C.3.3 Cairo graphics</a></li> <li><a id="toc-Other-C_002fC_002b_002b-compilers-1" href="#Other-C_002fC_002b_002b-compilers">C.3.4 Other C/C++ compilers</a></li> <li><a id="toc-Other-libraries-1" href="#Other-libraries">C.3.5 Other libraries</a> <ul class="toc-numbered-mark"> <li><a id="toc-Accelerate-1" href="#Accelerate">C.3.5.1 Accelerate</a></li> <li><a id="toc-OpenBLAS" href="#OpenBLAS-_0028macOS_0029">C.3.5.2 OpenBLAS</a></li> </ul></li> <li><a id="toc-Tcl_002fTk-headers-and-libraries-1" href="#Tcl_002fTk-headers-and-libraries">C.3.6 Tcl/Tk headers and libraries</a></li> <li><a id="toc-Java" href="#Java-_0028macOS_0029">C.3.7 Java</a></li> <li><a id="toc-Frameworks-1" href="#Frameworks">C.3.8 Frameworks</a></li> <li><a id="toc-Building-R_002eapp-1" href="#Building-R_002eapp">C.3.9 Building R.app</a></li> <li><a id="toc-Building-binary-packages-1" href="#Building-binary-packages">C.3.10 Building binary packages</a></li> <li><a id="toc-Building-for-Intel-on-arm64-1" href="#Building-for-Intel-on-arm64">C.3.11 Building for Intel on ‘<samp class="samp">arm64</samp>’</a></li> <li><a id="toc-Installer-1" href="#Installer">C.3.12 Installer</a></li> </ul></li> <li><a id="toc-FreeBSD-1" href="#FreeBSD">C.4 FreeBSD</a></li> <li><a id="toc-OpenBSD-1" href="#OpenBSD">C.5 OpenBSD</a></li> <li><a id="toc-Cygwin-1" href="#Cygwin">C.6 Cygwin</a></li> <li><a id="toc-New-platforms-1" href="#New-platforms">C.7 New platforms</a></li> </ul></li> <li><a id="toc-Function-and-variable-index-1" href="#Function-and-variable-index" rel="index">Function and variable index</a></li> <li><a id="toc-Concept-index-1" href="#Concept-index" rel="index">Concept index</a></li> <li><a id="toc-Environment-variable-index-1" href="#Environment-variable-index" rel="index">Environment variable index</a></li> </ul> </div> </div> <hr> <div class="chapter-level-extent" id="Obtaining-R"> <div class="nav-panel"> <p> Next: <a href="#Installing-R-under-Unix_002dalikes" accesskey="n" rel="next">Installing R under Unix-alikes</a>, Previous: <a href="#Top" accesskey="p" rel="prev">R Installation and Administration</a>, Up: <a href="#Top" accesskey="u" rel="up">R Installation and Administration</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h2 class="chapter" id="Obtaining-R-1"><span>1 Obtaining R<a class="copiable-link" href="#Obtaining-R-1"> ¶</a></span></h2> <a class="index-entry-id" id="index-Obtaining-R"></a> <p>Sources, binaries and documentation for R can be obtained via <abbr class="acronym">CRAN</abbr>, the “Comprehensive R Archive Network” whose current members are listed at <a class="uref" href="https://CRAN.R-project.org/mirrors.html">https://CRAN.R-project.org/mirrors.html</a>. </p> <ul class="mini-toc"> <li><a href="#Getting-and-unpacking-the-sources" accesskey="1">Getting and unpacking the sources</a></li> <li><a href="#Getting-patched-and-development-versions" accesskey="2">Getting patched and development versions</a></li> </ul> <hr> <div class="section-level-extent" id="Getting-and-unpacking-the-sources"> <div class="nav-panel"> <p> Next: <a href="#Getting-patched-and-development-versions" accesskey="n" rel="next">Getting patched and development versions</a>, Previous: <a href="#Obtaining-R" accesskey="p" rel="prev">Obtaining R</a>, Up: <a href="#Obtaining-R" accesskey="u" rel="up">Obtaining R</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Getting-and-unpacking-the-sources-1"><span>1.1 Getting and unpacking the sources<a class="copiable-link" href="#Getting-and-unpacking-the-sources-1"> ¶</a></span></h3> <a class="index-entry-id" id="index-Sources-for-R"></a> <p>The simplest way is to download the most recent <samp class="file">R-<var class="var">x</var>.<var class="var">y</var>.<var class="var">z</var>.tar.gz</samp> file, and unpack it with </p> <div class="example"> <pre class="example-preformatted">tar -xf R-<var class="var">x</var>.<var class="var">y</var>.<var class="var">z</var>.tar.gz </pre></div> <p>on systems that have a suitable<a class="footnote" id="DOCF1" href="#FOOT1"><sup>1</sup></a> <code class="command">tar</code> installed. On other systems you need to have the <code class="command">gzip</code> program installed, when you can use </p> <div class="example"> <pre class="example-preformatted">gzip -dc R-<var class="var">x</var>.<var class="var">y</var>.<var class="var">z</var>.tar.gz | tar -xf - </pre></div> <p>The pathname of the directory into which the sources are unpacked should not contain spaces, as most <code class="command">make</code> programs (and specifically <abbr class="acronym">GNU</abbr> <code class="command">make</code>) do not expect spaces. </p> <p>If you want the build to be usable by a group of users, set <code class="code">umask</code> before unpacking so that the files will be readable by the target group (e.g., <code class="code">umask 022</code> to be usable by all users). Keep this setting of <code class="code">umask</code> whilst building and installing. </p> <p>If you use a fairly recent <abbr class="acronym">GNU</abbr> version of <code class="command">tar</code> and do this as a root account (which on Windows includes accounts with administrator privileges) you may see many warnings about changing ownership. In which case you can use </p> <div class="example"> <pre class="example-preformatted">tar --no-same-owner -xf R-<var class="var">x</var>.<var class="var">y</var>.<var class="var">z</var>.tar.gz </pre></div> <p>and perhaps also include the option <samp class="option">--no-same-permissions</samp>. <a class="index-entry-id" id="index-TAR_005fOPTIONS"></a> (These options can also be set in the <code class="env">TAR_OPTIONS</code> environment variable: if more than one option is included they should be separated by spaces.) </p> <hr> </div> <div class="section-level-extent" id="Getting-patched-and-development-versions"> <div class="nav-panel"> <p> Previous: <a href="#Getting-and-unpacking-the-sources" accesskey="p" rel="prev">Getting and unpacking the sources</a>, Up: <a href="#Obtaining-R" accesskey="u" rel="up">Obtaining R</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Getting-patched-and-development-versions-1"><span>1.2 Getting patched and development versions<a class="copiable-link" href="#Getting-patched-and-development-versions-1"> ¶</a></span></h3> <p>A patched version of the current release, ‘<samp class="samp">r-patched</samp>’, and the current development version, ‘<samp class="samp">r-devel</samp>’, are available as daily tarballs and via access to the R Subversion repository. (For the two weeks prior to the release of a minor (4.x.0) version, ‘<samp class="samp">r-patched</samp>’ tarballs may refer to beta/release candidates of the upcoming release, the patched version of the current release being available via Subversion.) </p> <p>The tarballs are available from <a class="uref" href="https://stat.ethz.ch/R/daily/">https://stat.ethz.ch/R/daily/</a>. Download <samp class="file">R-patched.tar.gz</samp> or <samp class="file">R-devel.tar.gz</samp> (or the <samp class="file">.tar.bz2</samp> versions) and unpack as described in the previous section. They are built in exactly the same way as distributions of R releases. </p> <ul class="mini-toc"> <li><a href="#Using-Subversion-and-rsync" accesskey="1">Using Subversion and rsync</a></li> </ul> <hr> <div class="subsection-level-extent" id="Using-Subversion-and-rsync"> <div class="nav-panel"> <p> Previous: <a href="#Getting-patched-and-development-versions" accesskey="p" rel="prev">Getting patched and development versions</a>, Up: <a href="#Getting-patched-and-development-versions" accesskey="u" rel="up">Getting patched and development versions</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="Using-Subversion-and-rsync-1"><span>1.2.1 Using Subversion and rsync<a class="copiable-link" href="#Using-Subversion-and-rsync-1"> ¶</a></span></h4> <a class="index-entry-id" id="index-Subversion"></a> <p>Sources are also available via <a class="uref" href="https://svn.R-project.org/R/">https://svn.R-project.org/R/</a>, the R Subversion repository. If you have a Subversion client (see <a class="uref" href="https://subversion.apache.org/">https://subversion.apache.org/</a>), you can check out and update the current ‘<samp class="samp">r-devel</samp>’ from <a class="uref" href="https://svn.r-project.org/R/trunk/">https://svn.r-project.org/R/trunk/</a> and the current ‘<samp class="samp">r-patched</samp>’ from ‘<samp class="samp">https://svn.r-project.org/R/branches/R-<var class="var">x</var>-<var class="var">y</var>-branch/</samp>’ (where <var class="var">x</var> and <var class="var">y</var> are the major and minor number of the current released version of R). E.g., use </p> <div class="example"> <pre class="example-preformatted">svn checkout https://svn.r-project.org/R/trunk/ <var class="var">path</var> </pre></div> <p>to check out ‘<samp class="samp">r-devel</samp>’ into directory <var class="var">path</var> (which will be created if necessary). The alpha, beta and RC versions of an upcoming <var class="var">x.y.0</var> release are available from ‘<samp class="samp">https://svn.r-project.org/R/branches/R-<var class="var">x</var>-<var class="var">y</var>-branch/</samp>’ in the four-week period prior to the release. </p> <p>Note that ‘<samp class="samp">https:</samp>’ is required<a class="footnote" id="DOCF2" href="#FOOT2"><sup>2</sup></a>, and that the <abbr class="abbr">SSL</abbr> certificate for the Subversion server of the R project should be recognized as from a trusted source. </p> <p>Note that retrieving the sources by e.g. <code class="command">wget -r</code> or <code class="command">svn export</code> from that URL will not work (and will give a error early in the <code class="command">make</code> process): the Subversion information is needed to build R. </p> <p>The Subversion repository does not contain the current sources for the recommended packages, which can be obtained by <code class="command">rsync</code> or downloaded from <abbr class="acronym">CRAN</abbr>. To use <code class="code">rsync</code> to install the appropriate sources for the recommended packages, run <code class="code">./tools/rsync-recommended</code> from the top-level directory of the R sources. </p> <p>If downloading manually from <abbr class="acronym">CRAN</abbr>, do ensure that you have the correct versions of the recommended packages: if the number in the file <samp class="file">VERSION</samp> is ‘<samp class="samp"><var class="var">x</var>.<var class="var">y</var>.<var class="var">z</var></samp>’ you need to download the contents of ‘<samp class="samp">https://CRAN.R-project.org/src/contrib/<var class="var">dir</var></samp>’, where <var class="var">dir</var> is ‘<samp class="samp"><var class="var">x</var>.<var class="var">y</var>.<var class="var">z</var>/Recommended</samp>’ for r-devel or <samp class="file"><var class="var">x</var>.<var class="var">y</var>-patched/Recommended</samp> for r-patched, respectively, to directory <samp class="file">src/library/Recommended</samp> in the sources you have unpacked. After downloading manually you need to execute <code class="command">tools/link-recommended</code> from the top level of the sources to make the requisite links in <samp class="file">src/library/Recommended</samp>. A suitable incantation from the top level of the R sources using <code class="command">wget</code> might be (for the correct value of <samp class="file"><var class="var">dir</var></samp>) </p> <div class="example"> <pre class="example-preformatted">wget -r -l1 --no-parent -A\*.gz -nd -P src/library/Recommended \ https://CRAN.R-project.org/src/contrib/<var class="var">dir</var> ./tools/link-recommended </pre></div> <hr> </div> </div> </div> <div class="chapter-level-extent" id="Installing-R-under-Unix_002dalikes"> <div class="nav-panel"> <p> Next: <a href="#Installing-R-under-Windows" accesskey="n" rel="next">Installing R under Windows</a>, Previous: <a href="#Obtaining-R" accesskey="p" rel="prev">Obtaining R</a>, Up: <a href="#Top" accesskey="u" rel="up">R Installation and Administration</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h2 class="chapter" id="Installing-R-under-Unix_002dalikes-1"><span>2 Installing R under Unix-alikes<a class="copiable-link" href="#Installing-R-under-Unix_002dalikes-1"> ¶</a></span></h2> <a class="index-entry-id" id="index-Installing-under-Unix_002dalikes"></a> <p>R will configure and build under most common Unix and Unix-alike platforms including ‘<samp class="samp"><var class="var">cpu</var>-*-linux-gnu</samp>’ for the ‘<samp class="samp">alpha</samp>’, ‘<samp class="samp">arm64</samp>’ (also known as ‘<samp class="samp">aarch64</samp>’, ‘<samp class="samp">ix86</samp>’, ‘<samp class="samp">mips</samp>’, ‘<samp class="samp">mipsel</samp>’#, ‘<samp class="samp">ppc64</samp>’, ‘<samp class="samp">riscv64</samp>’, ‘<samp class="samp">s390x</samp>’, ‘<samp class="samp">sparc64</samp>’, and ‘<samp class="samp">x86_64</samp>’ <abbr class="acronym">CPU</abbr>s, ‘<samp class="samp">aarch64-apple-darwin</samp>’<a class="footnote" id="DOCF3" href="#FOOT3"><sup>3</sup></a> and ‘<samp class="samp">x86_64-apple-darwin</samp>’ as well as perhaps (it is tested less frequently on these platforms) ‘<samp class="samp">x86_64-*-freebsd</samp>’, ‘<samp class="samp">x86_64-*-openbsd</samp>’ and ‘<samp class="samp">powerpc-ibm-aix6*</samp>’ </p> <p>Only 64-bit platforms are tested regularly, and <code class="command">configure</code> will warn if it encounters a 32-bit one. </p> <a class="index-entry-id" id="index-Linux"></a> <a class="index-entry-id" id="index-macOS"></a> <p>In addition, binary distributions are available for some common Linux distributions (see the <abbr class="acronym">FAQ</abbr> for current details) and for macOS. These are installed in platform-specific ways, so for the rest of this chapter we consider only building from the sources. </p> <p>Cross-building is not possible: installing R builds a minimal version of R and then runs many R scripts to complete the build. </p> <ul class="mini-toc"> <li><a href="#Simple-compilation" accesskey="1">Simple compilation</a></li> <li><a href="#Help-options" accesskey="2">Help options</a></li> <li><a href="#Making-the-manuals" accesskey="3">Making the manuals</a></li> <li><a href="#Installation" accesskey="4">Installation</a></li> <li><a href="#Uninstallation" accesskey="5">Uninstallation</a></li> <li><a href="#Sub_002darchitectures" accesskey="6">Sub-architectures</a></li> <li><a href="#Other-Options" accesskey="7">Other Options</a></li> <li><a href="#Testing-a-Unix_002dalike-Installation" accesskey="8">Testing an Installation</a></li> </ul> <hr> <div class="section-level-extent" id="Simple-compilation"> <div class="nav-panel"> <p> Next: <a href="#Help-options" accesskey="n" rel="next">Help options</a>, Previous: <a href="#Installing-R-under-Unix_002dalikes" accesskey="p" rel="prev">Installing R under Unix-alikes</a>, Up: <a href="#Installing-R-under-Unix_002dalikes" accesskey="u" rel="up">Installing R under Unix-alikes</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Simple-compilation-1"><span>2.1 Simple compilation<a class="copiable-link" href="#Simple-compilation-1"> ¶</a></span></h3> <p>First review the essential and useful tools and libraries in <a class="ref" href="#Essential-and-useful-other-programs-under-a-Unix_002dalike">Essential and useful other programs under a Unix-alike</a>, and install those you <a class="index-entry-id" id="index-TMPDIR"></a> want or need. Ensure that either the environment variable <code class="env">TMPDIR</code> is either unset (and <samp class="file">/tmp</samp> exists and can be written in and scripts can be executed from) or points to the absolute path to a valid temporary directory (one from which execution of scripts is allowed) which does not contain spaces. </p> <a class="index-entry-id" id="index-R_005fHOME"></a> <p>Choose a directory to install the R tree (R is not just a binary, but has additional data sets, help files, font metrics etc). Let us call this place <var class="var">R_HOME</var>. Untar the source code. This should create directories <samp class="file">src</samp>, <samp class="file">doc</samp>, and several more under a top-level directory: change to that top-level directory (At this point North American readers should consult <a class="ref" href="#Setting-paper-size">Setting paper size</a>.) Issue the following commands: </p> <a class="index-entry-id" id="index-configure"></a> <div class="example"> <pre class="example-preformatted">./configure make </pre></div> <p>(See <a class="ref" href="#Using-make">Using make</a> if your make is not called ‘<samp class="samp">make</samp>’.) Users of Debian-based 64-bit systems<a class="footnote" id="DOCF4" href="#FOOT4"><sup>4</sup></a> may need </p> <div class="example"> <pre class="example-preformatted">./configure LIBnn=lib make </pre></div> <p>Then check the built system works correctly by </p> <div class="example"> <pre class="example-preformatted">make check </pre></div> <p>Failures are not necessarily problems as they might be caused by missing functionality, but you should look carefully at any reported discrepancies. (Some non-fatal errors are expected in locales that do not support Latin-1, in particular in true <code class="code">C</code> locales and non-UTF-8 non-Western-European locales.) A failure in <samp class="file">tests/ok-errors.R</samp> may indicate inadequate resource limits (see <a class="pxref" href="#Running-R">Running R</a>). </p> <p>More comprehensive testing can be done by </p> <div class="example"> <pre class="example-preformatted">make check-devel </pre></div> <p>or </p> <div class="example"> <pre class="example-preformatted">make check-all </pre></div> <p>see <a class="ref" href="#Testing-a-Unix_002dalike-Installation">Testing an Installation</a> for the possibilities of doing this in parallel. Note that these checks are only run completely if the recommended packages are installed. If you have a local CRAN mirror, these checks can be speeded up by either setting environment variable <code class="env">R_CRAN_WEB</code> to its URL, or having a file <samp class="file">.R/repositories</samp> specifying it (see <code class="code">?setRepositories</code>). </p> <p><code class="command">make check-devel</code> checks the included packages’ <samp class="file">tests</samp> directories. For <strong class="strong">grDevices</strong> more complete checks will be run if the environment variable <code class="env">R_GRDEVICES_COMPARE_PS_PDF</code> is set: those checks are skipped on platforms using <code class="code">musl</code> such as Alpine Linux, and it knows about differences from transliterations in macOS 14 and later. </p> <p>Parallel make is supported for building R but not for the ‘<samp class="samp">check</samp>’ targets (as the output is likely to be unreadably interleaved, although where supported<a class="footnote" id="DOCF5" href="#FOOT5"><sup>5</sup></a> GNU make’s <samp class="option">-O</samp> may help). </p> <p>If the <code class="command">configure</code> and <code class="command">make</code> commands execute successfully, a shell-script front-end called <samp class="file">R</samp> will be created and copied to <samp class="file"><var class="var">R_HOME</var>/bin</samp>. You can link or copy this script to a place where users can invoke it, for example to <samp class="file">/usr/local/bin/R</samp>. You could also copy the man page <samp class="file">R.1</samp> to a place where your <code class="command">man</code> reader finds it, such as <samp class="file">/usr/local/man/man1</samp>. If you want to install the complete R tree to, e.g., <samp class="file">/usr/local/lib/R</samp>, see <a class="ref" href="#Installation">Installation</a>. Note: you do not <em class="emph">need</em> to install R: you can run it from where it was built. </p> <p>You do not necessarily have to build R in the top-level source directory (say, <samp class="file"><var class="var">TOP_SRCDIR</var></samp>). To build in <samp class="file"><var class="var">BUILDDIR</var></samp>, run </p> <a class="index-entry-id" id="index-configure-1"></a> <div class="example"> <pre class="example-preformatted">cd <var class="var">BUILDDIR</var> <var class="var">TOP_SRCDIR</var>/configure make </pre></div> <p>and so on, as described further below. This has the advantage of always keeping your source tree clean and is particularly recommended when you work with a version of R from Subversion. (You may need <abbr class="acronym">GNU</abbr> <code class="command">make</code> to allow this, and you will need no spaces in the path to the build directory. It is unlikely to work if the source directory has previously been used for a build.) </p> <p>There are many settings which can be customized when building R and most are described in the file <samp class="file">config.site</samp> in the top-level source directory. This can be edited, but for an installation using <samp class="file"><var class="var">BUILDDIR</var></samp> it is better to put the changed settings in a newly-created file <samp class="file">config.site</samp> in the build directory. </p> <p>Now <code class="code">rehash</code> if necessary, type <kbd class="kbd">R</kbd>, and read the R manuals and the R <abbr class="acronym">FAQ</abbr> (files <samp class="file">FAQ</samp> or <samp class="file">doc/manual/R-FAQ.html</samp>, or <a class="uref" href="https://CRAN.R-project.org/doc/FAQ/R-FAQ.html">https://CRAN.R-project.org/doc/FAQ/R-FAQ.html</a> which always has the version for the latest release of R). </p> <p>Note: if you already have R installed, check that where you installed R replaces or comes earlier in your path than the previous installation. Some systems are set up to have <samp class="file">/usr/bin</samp> (the standard place for a system installation) ahead of <samp class="file">/usr/local/bin</samp> (the default place for installation of R) in their default path, and some do not have <samp class="file">/usr/local/bin</samp> on the default path. </p> <hr> </div> <div class="section-level-extent" id="Help-options"> <div class="nav-panel"> <p> Next: <a href="#Making-the-manuals" accesskey="n" rel="next">Making the manuals</a>, Previous: <a href="#Simple-compilation" accesskey="p" rel="prev">Simple compilation</a>, Up: <a href="#Installing-R-under-Unix_002dalikes" accesskey="u" rel="up">Installing R under Unix-alikes</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Help-options-1"><span>2.2 Help options<a class="copiable-link" href="#Help-options-1"> ¶</a></span></h3> <p>R by default provides help pages as plain text displayed in a pager, with the options (see the help for <code class="code">help</code>) of displaying help as HTML or PDF. </p> <p>By default <abbr class="acronym">HTML</abbr> help pages are created when needed rather than being built at install time. </p> <p>If you need to disable the server and want <abbr class="acronym">HTML</abbr> help, there is the option to build <abbr class="acronym">HTML</abbr> pages when packages are installed (including those installed with R). This is enabled by the <code class="command">configure</code> option <samp class="option">--enable-prebuilt-html</samp>. Whether <code class="command">R CMD INSTALL</code> (and hence <code class="code">install.packages</code>) pre-builds <abbr class="acronym">HTML</abbr> pages is determined by looking at the R installation and is reported by <code class="command">R CMD INSTALL --help</code>: it can be overridden by specifying one of the <code class="command">INSTALL</code> options <samp class="option">--html</samp> or <samp class="option">--no-html</samp>. </p> <p>The server is disabled by setting the environment variable <a class="index-entry-id" id="index-R_005fDISABLE_005fHTTPD"></a> <code class="env">R_DISABLE_HTTPD</code> to a non-empty value, either before R is started or within the R session before <abbr class="acronym">HTML</abbr> help (including <code class="code">help.start</code>) is used. It is also possible that system security measures will prevent the server from being started, for example if the loopback interface has been disabled. See <code class="code">?tools::startDynamicHelp</code> for more details. </p> <hr> </div> <div class="section-level-extent" id="Making-the-manuals"> <div class="nav-panel"> <p> Next: <a href="#Installation" accesskey="n" rel="next">Installation</a>, Previous: <a href="#Help-options" accesskey="p" rel="prev">Help options</a>, Up: <a href="#Installing-R-under-Unix_002dalikes" accesskey="u" rel="up">Installing R under Unix-alikes</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Making-the-manuals-1"><span>2.3 Making the manuals<a class="copiable-link" href="#Making-the-manuals-1"> ¶</a></span></h3> <a class="index-entry-id" id="index-Manuals"></a> <p>There is a set of manuals that can be built from the sources, </p> <dl class="table"> <dt>‘<samp class="samp">fullrefman</samp>’</dt> <dd><p>Printed versions of all the help pages for base and recommended packages (around 3750 pages). </p></dd> <dt>‘<samp class="samp">refman</samp>’</dt> <dd><p>Printed versions of the help pages for selected base packages (around 2200 pages) </p></dd> <dt>‘<samp class="samp">R-FAQ</samp>’</dt> <dd><p>R <abbr class="acronym">FAQ</abbr> </p></dd> <dt>‘<samp class="samp">R-intro</samp>’</dt> <dd><p>“An Introduction to R”. </p></dd> <dt>‘<samp class="samp">R-data</samp>’</dt> <dd><p>“R Data Import/Export”. </p></dd> <dt>‘<samp class="samp">R-admin</samp>’</dt> <dd><p>“R Installation and Administration”, this manual. </p></dd> <dt>‘<samp class="samp">R-exts</samp>’</dt> <dd><p>“Writing R Extensions”. </p></dd> <dt>‘<samp class="samp">R-lang</samp>’</dt> <dd><p>“The R Language Definition”. </p></dd> </dl> <p>To make these (with ‘<samp class="samp">fullrefman</samp>’ rather than ‘<samp class="samp">refman</samp>’), use </p> <div class="example"> <pre class="example-preformatted">make pdf <span class="r">to create PDF versions</span> make info <span class="r">to create info files (not ‘<samp class="samp">refman</samp>’ nor ‘<samp class="samp">fullrefman</samp>’).</span> </pre></div> <p>You will not be able to build any of these unless you have <code class="command">texi2any</code> version 5.1 or later installed, and for PDF you must have <code class="command">texi2dvi</code> and <samp class="file">texinfo.tex</samp> installed (which are part of the <abbr class="acronym">GNU</abbr> <strong class="strong">texinfo</strong> distribution but are, especially <samp class="file">texinfo.tex</samp>, often made part of the TeX package in re-distributions). The path to <code class="command">texi2any</code> can be set by macro ‘<samp class="samp">TEXI2ANY</samp>’ in <samp class="file">config.site</samp>. NB: <code class="command">texi2any</code> requires <code class="command">perl</code>. </p> <p>The PDF versions can be viewed using any recent PDF viewer: they have hyperlinks that can be followed. The info files are suitable for reading online with Emacs or the standalone <abbr class="acronym">GNU</abbr> <code class="command">info</code> program. The PDF versions will be created using the paper size selected at configuration (default ISO a4): this can be overridden by setting <code class="env">R_PAPERSIZE</code> <a class="index-entry-id" id="index-R_005fPAPERSIZE"></a> on the <code class="command">make</code> command line, or setting <code class="env">R_PAPERSIZE</code> in the environment and using <code class="command">make -e</code>. (If re-making the manuals for a different paper size, you should first delete the file <samp class="file">doc/manual/version.texi</samp>. The usual value for North America would be ‘<samp class="samp">letter</samp>’.) </p> <p>There are some issues with making the PDF reference manual, <samp class="file">fullrefman.pdf</samp> or <samp class="file">refman.pdf</samp>. The help files contain both non-ASCII characters (e.g. in <samp class="file">text.Rd</samp>) and upright quotes, neither of which are contained in the standard LaTeX Computer Modern fonts. We have provided the following alternatives: </p> <dl class="table"> <dt><code class="code">times</code></dt> <dd><p>(The default.) Using standard PostScript fonts, Times Roman, Helvetica and Courier. This works well both for on-screen viewing and for printing. One disadvantage is that the Usage and Examples sections may come out rather wide: this can be overcome by using <em class="emph">in addition</em> either of the options <code class="code">inconsolata</code> (on a Unix-alike only if found by <code class="command">configure</code>) or <code class="code">beramono</code>, which replace the Courier monospaced font by Inconsolata or Bera Sans Mono respectively. (You will need the LaTeX package <strong class="strong">inconsolata</strong><a class="footnote" id="DOCF6" href="#FOOT6"><sup>6</sup></a> or <strong class="strong">bera</strong> installed.) </p> <p>Note that in most LaTeX installations this will not actually use the standard fonts for PDF, but rather embed the URW clones NimbusRom, NimbusSans and (for Courier, if used) NimbusMon. </p> <p>This needs LaTeX packages <strong class="strong">times</strong>, <strong class="strong">helvetic</strong> and (if used) <strong class="strong">courier</strong> installed. </p> </dd> <dt><code class="code">lm</code></dt> <dd><p>Using the <em class="emph">Latin Modern</em> fonts. These are not often installed as part of a TeX distribution, but can obtained from <a class="uref" href="https://www.ctan.org/tex-archive/fonts/ps-type1/lm/">https://www.ctan.org/tex-archive/fonts/ps-type1/lm/</a> and mirrors. This uses fonts rather similar to Computer Modern, but is not so good on-screen as <code class="code">times</code>. </p> </dd> </dl> <p>The default can be overridden by setting the environment variable <a class="index-entry-id" id="index-R_005fRD4PDF"></a> <code class="env">R_RD4PDF</code>. (On Unix-alikes, this will be picked up at install time and stored in <samp class="file">etc/Renviron</samp>, but can still be overridden when the manuals are built, using <code class="command">make -e</code>.) The usual<a class="footnote" id="DOCF7" href="#FOOT7"><sup>7</sup></a> default value for <code class="env">R_RD4PDF</code> is ‘<samp class="samp">times,inconsolata,hyper</samp>’: omit ‘<samp class="samp">inconsolata</samp>’ if you do not have LaTeX package <strong class="strong">inconsolata</strong> installed. ‘<samp class="samp">hyper</samp>’ is always enabled (with a fallback if LaTeX package <strong class="strong">hyperref</strong> is not installed). </p> <p>Further options, e.g for <strong class="strong">hyperref</strong>, can be included in a file <samp class="file">Rd.cfg</samp> somewhere on your LaTeX search path. For example, if you prefer to hyperlink the text and not the page number in the table of contents use </p><div class="example"> <pre class="example-preformatted">\ifthenelse{\boolean{Rd@use@hyper}}{\hypersetup{linktoc=section}}{} </pre></div> <p>or </p><div class="example"> <pre class="example-preformatted">\ifthenelse{\boolean{Rd@use@hyper}}{\hypersetup{linktoc=all}}{} </pre></div> <p>to hyperlink both text and page number. </p> <p>Any generated PDF manuals can be compacted by </p> <div class="example"> <pre class="example-preformatted">make compact-pdf </pre></div> <p>provided <code class="command">qpdf</code> and <code class="command">gs</code> are available (see <code class="code">?tools::compactPDF</code> for how to specify them if not on the path). </p> <p>E-book versions of most of the manuals in one or both of <samp class="file">.epub</samp> and <samp class="file">.mobi</samp> formats can be made by running in <samp class="file">doc/manual</samp> one of </p><div class="example"> <pre class="example-preformatted">make ebooks make epub make mobi </pre></div> <p>This requires <code class="command">ebook-convert</code> from <a class="uref" href="https://calibre-ebook.com/download"><code class="command">Calibre</code></a>, or from most Linux distributions. If necessary the path to <code class="command">ebook-convert</code> can be set as make macro <code class="env">EBOOK</code> by editing <samp class="file">doc/manual/Makefile</samp> (which contains a commented value suitable for macOS) or using <code class="command">make -e</code>. </p> <hr> </div> <div class="section-level-extent" id="Installation"> <div class="nav-panel"> <p> Next: <a href="#Uninstallation" accesskey="n" rel="next">Uninstallation</a>, Previous: <a href="#Making-the-manuals" accesskey="p" rel="prev">Making the manuals</a>, Up: <a href="#Installing-R-under-Unix_002dalikes" accesskey="u" rel="up">Installing R under Unix-alikes</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Installation-1"><span>2.4 Installation<a class="copiable-link" href="#Installation-1"> ¶</a></span></h3> <a class="index-entry-id" id="index-Installation"></a> <p>To ensure that the installed tree is usable by the right group of users, set <code class="code">umask</code> appropriately (perhaps to ‘<samp class="samp">022</samp>’) before unpacking the sources and throughout the build process. </p> <p>After </p> <a class="index-entry-id" id="index-configure-2"></a> <div class="example"> <pre class="example-preformatted">./configure make make check </pre></div> <p>(or, when building outside the source, <code class="code"><var class="var">TOP_SRCDIR</var>/configure</code>, etc) have been completed successfully, you can install the complete R tree to your system by typing </p> <div class="example"> <pre class="example-preformatted">make install </pre></div> <p>A parallel make can be used (but run <code class="command">make</code> before <code class="command">make install</code>). Those using GNU <code class="command">make</code> 4.0 or later may want to use <code class="command">make -j <var class="var">n</var> -O</code> to avoid interleaving of output. </p> <p>This will install to the following directories: </p> <dl class="table"> <dt><samp class="file"><var class="var">prefix</var>/bin</samp> or <samp class="file"><var class="var">bindir</var></samp></dt> <dd><p>the front-end shell script and other scripts and executables </p></dd> <dt><samp class="file"><var class="var">prefix</var>/man/man1</samp> or <samp class="file"><var class="var">mandir</var>/man1</samp></dt> <dd><p>the man page </p></dd> <dt><samp class="file"><var class="var">prefix</var>/<var class="var">LIBnn</var>/R</samp> or <samp class="file"><var class="var">libdir</var>/R</samp></dt> <dd><p>all the rest (libraries, on-line help system, …). Here <var class="var">LIBnn</var> is usually ‘<samp class="samp">lib</samp>’, but may be ‘<samp class="samp">lib64</samp>’ on some 64-bit Linux systems. This is known as the R home directory. </p></dd> </dl> <p>where <var class="var">prefix</var> is determined during configuration (typically <samp class="file">/usr/local</samp>) and can be set by running <code class="command">configure</code> with the option <samp class="option">--prefix</samp>, as in </p> <a class="index-entry-id" id="index-configure-3"></a> <div class="example"> <pre class="example-preformatted">./configure --prefix=/where/you/want/R/to/go </pre></div> <p>where the value should be an absolute path. This causes <code class="command">make install</code> to install the R script to <samp class="file">/where/you/want/R/to/go/bin</samp>, and so on. The prefix of the installation directories can be seen in the status message that is displayed at the end of <code class="command">configure</code>. The installation may need to be done by the owner of <samp class="file"><var class="var">prefix</var></samp>, often a root account. </p> <p>There is the option of using <code class="command">make install-strip</code> (see <a class="pxref" href="#Debugging-Symbols">Debugging Symbols</a>). </p> <p>You can install into another directory tree by using </p> <div class="example"> <pre class="example-preformatted">make prefix=/path/to/here install </pre></div> <p>at least with <abbr class="acronym">GNU</abbr> <code class="command">make</code> (but not some other Unix makes). </p> <p>More precise control is available at configure time via options: see <code class="command">configure --help</code> for details. (However, most of the ‘Fine tuning of the installation directories’ options are not used by R.) </p> <p>Configure options <samp class="option">--bindir</samp> and <samp class="option">--mandir</samp> are supported and govern where a copy of the <code class="command">R</code> script and the <code class="command">man</code> page are installed. </p> <p>The configure option <samp class="option">--libdir</samp> controls where the main R files are installed: the default is ‘<samp class="samp"><var class="var">eprefix</var>/<var class="var">LIBnn</var></samp>’, where <var class="var">eprefix</var> is the prefix used for installing architecture-dependent files, defaults to <var class="var">prefix</var>, and can be set via the configure option <samp class="option">--exec-prefix</samp>. </p> <p>Each of <code class="code">bindir</code>, <code class="code">mandir</code> and <code class="code">libdir</code> can also be specified on the <code class="command">make install</code> command line (at least for <abbr class="acronym">GNU</abbr> <code class="command">make</code>). </p> <p>The <code class="command">configure</code> or <code class="command">make</code> variables <code class="code">rdocdir</code> and <code class="code">rsharedir</code> can be used to install the system-independent <samp class="file">doc</samp> and <samp class="file">share</samp> directories to somewhere other than <code class="code">libdir</code>. The C header files can be installed to the value of <code class="code">rincludedir</code>: note that as the headers are not installed into a subdirectory you probably want something like <code class="code">rincludedir=/usr/local/include/R-4.4.1</code>. </p> <p>If you want the R home to be something other than <samp class="file"><var class="var">libdir</var>/R</samp>, use <samp class="option">rhome</samp>: for example </p> <div class="example"> <pre class="example-preformatted">make install rhome=/usr/local/lib64/R-4.4.1 </pre></div> <p>will use a version-specific R home on a non-Debian Linux 64-bit system. </p> <p>If you have made R as a shared/static library you can install it in your system’s library directory by </p> <div class="example"> <pre class="example-preformatted">make prefix=/path/to/here install-libR </pre></div> <p>where <code class="code">prefix</code> is optional, and <code class="code">libdir</code> will give more precise control.<a class="footnote" id="DOCF8" href="#FOOT8"><sup>8</sup></a> However, you should not install to a directory mentioned in <code class="env">LDPATHS</code> (e.g. <samp class="file">/usr/local/lib64</samp>) if you intend to work with multiple versions of R, since that directory may be given precedence over the <samp class="file">lib</samp> directory of other R installations. </p> <div class="example"> <pre class="example-preformatted">make install-strip </pre></div> <p>will install stripped executables, and on platforms where this is supported, stripped libraries in directories <samp class="file">lib</samp> and <samp class="file">modules</samp> and in the standard packages. </p> <p>Note that installing R into a directory whose path contains spaces is not supported, and some aspects (such as installing source packages) will not work. </p> <a class="index-entry-id" id="index-Manuals_002c-installing"></a> <p>To install info and PDF versions of the manuals, use one or both of </p> <div class="example"> <pre class="example-preformatted">make install-info make install-pdf </pre></div> <p>Once again, it is optional to specify <code class="code">prefix</code>, <code class="code">libdir</code> or <code class="code">rhome</code> (the PDF manuals are installed under the R home directory). </p> <p>More precise control is possible. For info, the setting used is that of <code class="code">infodir</code> (default <samp class="file"><var class="var">prefix</var>/info</samp>, set by configure option <samp class="option">--infodir</samp>). The PDF files are installed into the R <samp class="file">doc</samp> tree, set by the <code class="command">make</code> variable <code class="code">rdocdir</code>. </p> <p>A staged installation is possible, that it is installing R into a temporary directory in order to move the installed tree to its final destination. In this case <code class="code">prefix</code> (and so on) should reflect the <a class="index-entry-id" id="index-DESTDIR"></a> final destination, and <code class="env">DESTDIR</code> should be used: see <a class="uref" href="https://www.gnu.org/prep/standards/html_node/DESTDIR.html">https://www.gnu.org/prep/standards/html_node/DESTDIR.html</a>. </p> <p>You can optionally install the run-time tests that are part of <code class="command">make check-all</code> by </p> <div class="example"> <pre class="example-preformatted">make install-tests </pre></div> <p>which populates a <samp class="file">tests</samp> directory in the installation. </p> <hr> </div> <div class="section-level-extent" id="Uninstallation"> <div class="nav-panel"> <p> Next: <a href="#Sub_002darchitectures" accesskey="n" rel="next">Sub-architectures</a>, Previous: <a href="#Installation" accesskey="p" rel="prev">Installation</a>, Up: <a href="#Installing-R-under-Unix_002dalikes" accesskey="u" rel="up">Installing R under Unix-alikes</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Uninstallation-1"><span>2.5 Uninstallation<a class="copiable-link" href="#Uninstallation-1"> ¶</a></span></h3> <p>You can uninstall R by </p> <div class="example"> <pre class="example-preformatted">make uninstall </pre></div> <p>optionally specifying <code class="code">prefix</code> etc in the same way as specified for installation. </p> <p>This will also uninstall any installed manuals. There are specific targets to uninstall info and PDF manuals in file <samp class="file">doc/manual/Makefile</samp>. </p> <p>Target <code class="code">uninstall-tests</code> will uninstall any installed tests, as well as removing the directory <samp class="file">tests</samp> containing the test results. </p> <p>An installed shared/static <code class="code">libR</code> can be uninstalled by </p> <div class="example"> <pre class="example-preformatted">make prefix=/path/to/here uninstall-libR </pre></div> <hr> </div> <div class="section-level-extent" id="Sub_002darchitectures"> <div class="nav-panel"> <p> Next: <a href="#Other-Options" accesskey="n" rel="next">Other Options</a>, Previous: <a href="#Uninstallation" accesskey="p" rel="prev">Uninstallation</a>, Up: <a href="#Installing-R-under-Unix_002dalikes" accesskey="u" rel="up">Installing R under Unix-alikes</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Sub_002darchitectures-1"><span>2.6 Sub-architectures<a class="copiable-link" href="#Sub_002darchitectures-1"> ¶</a></span></h3> <p>Now 32-bit builds are unsupported, this section is only of historical interest, although in future the mechanisms could be used for different CPU types on the same OS (e.g. ‘<samp class="samp">x86_64</samp>’ and ‘<samp class="samp">aarch64</samp>’). </p> <p>Some platforms can support closely related builds of R which can share all but the executables and dynamic objects. Examples include builds under Linux for different <abbr class="acronym">CPU</abbr>s or 32- and 64-bit builds. </p> <p>R supports the idea of architecture-specific builds, specified by adding ‘<samp class="samp">r_arch=<var class="var">name</var></samp>’ to the <code class="command">configure</code> line. Here <var class="var">name</var> can be anything non-empty, and is used to name subdirectories of <samp class="file">lib</samp>, <samp class="file">etc</samp>, <samp class="file">include</samp> and the package <samp class="file">libs</samp> subdirectories. Example names from other software are the use of <samp class="file">sparcv9</samp> on Sparc Solaris and <samp class="file">32</samp> by <code class="command">gcc</code> on ‘<samp class="samp">x86_64</samp>’ Linux. </p> <p>If you have two or more such builds you can install them over each other (and for 32/64-bit builds on one architecture, one build can be done without ‘<samp class="samp">r_arch</samp>’). The space savings can be considerable: on ‘<samp class="samp">x86_64</samp>’ Linux a basic install (without debugging symbols) took 74Mb, and adding a 32-bit build added 6Mb. If you have installed multiple builds you can select which build to run by </p> <div class="example"> <pre class="example-preformatted">R --arch=<var class="var">name</var> </pre></div> <p>and just running ‘<samp class="samp">R</samp>’ will run the last build that was installed. </p> <p><code class="code">R CMD INSTALL</code> will detect if more than one build is installed and try to install packages with the appropriate library objects for each. This will not be done if the package has an executable <code class="code">configure</code> script or a <samp class="file">src/Makefile</samp> file. In such cases you can install for extra builds by </p> <div class="example"> <pre class="example-preformatted">R --arch=<var class="var">name</var> CMD INSTALL --libs-only <var class="var">pkg1</var> <var class="var">pkg2</var> ... </pre></div> <p>If you want to mix sub-architectures compiled on different platforms (for example ‘<samp class="samp">x86_64</samp>’ Linux and ‘<samp class="samp">i686</samp>’ Linux), it is wise to use explicit names for each, and you may also need to set <samp class="option">libdir</samp> to ensure that they install into the same place. </p> <p>When sub-architectures are used the version of <code class="command">Rscript</code> in e.g. <samp class="file">/usr/bin</samp> will be the last installed, but architecture-specific versions will be available in e.g. <samp class="file">/usr/lib64/R/bin/exec${<var class="var">R_ARCH</var>}</samp>. Normally all installed architectures will run on the platform so the architecture of <code class="command">Rscript</code> itself does not matter. The executable <code class="command">Rscript</code> will run the <code class="command">R</code> script, and at that time the <a class="index-entry-id" id="index-R_005fARCH"></a> setting of the <code class="env">R_ARCH</code> environment variable determines the architecture which is run. </p> <p>When running post-install tests with sub-architectures, use </p> <div class="example"> <pre class="example-preformatted">R --arch=<var class="var">name</var> CMD make check[-devel|all] </pre></div> <p>to select a sub-architecture to check. </p> <p>Sub-architectures were also used on Windows, but by selecting executables within the appropriate <samp class="file">bin</samp> directory such as <samp class="file"><var class="var">R_HOME</var>/bin/x64</samp>. As from R 4.2.0 only the ‘<samp class="samp">x64</samp>’ subdirectory is used. </p> <hr> </div> <div class="section-level-extent" id="Other-Options"> <div class="nav-panel"> <p> Next: <a href="#Testing-a-Unix_002dalike-Installation" accesskey="n" rel="next">Testing an Installation</a>, Previous: <a href="#Sub_002darchitectures" accesskey="p" rel="prev">Sub-architectures</a>, Up: <a href="#Installing-R-under-Unix_002dalikes" accesskey="u" rel="up">Installing R under Unix-alikes</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Other-Options-1"><span>2.7 Other Options<a class="copiable-link" href="#Other-Options-1"> ¶</a></span></h3> <p>There are many other installation options, most of which are listed by <code class="command">configure --help</code>. Almost all of those not listed elsewhere in this manual are either standard <code class="command">autoconf</code> options not relevant to R or intended for specialist uses by the R developers. </p> <p>One that may be useful when working on R itself is the option <samp class="option">--disable-byte-compiled-packages</samp>, which ensures that the base and recommended packages are not byte-compiled. (Alternatively the (make or environment) variable <code class="env">R_NO_BASE_COMPILE</code> can be set to a non-empty value for the duration of the build.) </p> <p>Option <samp class="option">--with-internal-tzcode</samp> makes use of R’s own code and copy of the <abbr class="abbr">IANA</abbr> database for managing timezones. This will be preferred where there are issues with the system implementation, usually involving times after 2037 or before 1916. An alternative time-zone directory<a class="footnote" id="DOCF9" href="#FOOT9"><sup>9</sup></a> can be used, pointed to by environment variable <code class="env">TZDIR</code>: this should contain files such as <samp class="file">Europe/London</samp>. On all tested OSes the system timezone was deduced correctly, but if necessary it can be set as the value of environment variable <code class="env">TZ</code>. </p> <p>Options <samp class="option">--with-internal-iswxxxxx</samp>, <samp class="option">--with-internal-towlower</samp> and <samp class="option">--with-internal-wcwidth</samp> control the replacement of the system wide-character classification (such as <code class="code">iswprint</code>), case-changing (<code class="code">wctrans</code>) and width (<code class="code">wcwidth</code> and <code class="code">wcswidth</code>) functions by ones contained in the R sources. Replacement of the classification functions has been done for many years on macOS and <abbr class="abbr">AIX</abbr> (and Windows): option <samp class="option">--with-internal-iswxxxxx</samp> allows this to be suppressed on those platforms or used on others. Replacing the case-changing functions is the default on macOS and Windows. Replacement of the width functions has also been done for many years and remains the default. These options will only matter to those working with non-ASCII character data, especially in languages written in a non-Western script<a class="footnote" id="DOCF10" href="#FOOT10"><sup>10</sup></a> (which includes ‘symbols’ such as emoji). Note that one of those <code class="code">iswxxxxx</code> is <code class="code">iswprint</code> which is used to decide whether to output a character as a glyph or as a ‘<samp class="samp">\U{xxxxxx}</samp>’ escape—for example, try ‘<samp class="samp">"\U1f600"</samp>’, an emoji. The width functions are of most importance in East Asian locale: their values differ between such locales. (Replacing the system functions provides a degree of platform-independence (including to OS updates) but replaces it with a dependence on the R version.) </p> <ul class="mini-toc"> <li><a href="#Debugging-Symbols" accesskey="1">Debugging Symbols</a></li> <li><a href="#OpenMP-Support" accesskey="2"><abbr class="abbr">OpenMP</abbr> Support</a></li> <li><a href="#C_002b_002b-Support" accesskey="3">C++ Support</a></li> <li><a href="#C-standards" accesskey="4">C standards</a></li> <li><a href="#Link_002dTime-Optimization" accesskey="5">Link-Time Optimization</a></li> </ul> <hr> <div class="subsection-level-extent" id="Debugging-Symbols"> <div class="nav-panel"> <p> Next: <a href="#OpenMP-Support" accesskey="n" rel="next"><abbr class="abbr">OpenMP</abbr> Support</a>, Previous: <a href="#Other-Options" accesskey="p" rel="prev">Other Options</a>, Up: <a href="#Other-Options" accesskey="u" rel="up">Other Options</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="Debugging-Symbols-1"><span>2.7.1 Debugging Symbols<a class="copiable-link" href="#Debugging-Symbols-1"> ¶</a></span></h4> <p>By default, <code class="command">configure</code> adds a flag (usually <samp class="option">-g</samp>) to the compilation flags for C, Fortran and C++ sources. This will slow down compilation and increase object sizes of both R and packages, so it may be a good idea to change those flags (set ‘<samp class="samp">CFLAGS</samp>’ etc in <samp class="file">config.site</samp> before configuring, or edit files <samp class="file">Makeconf</samp> and <samp class="file">etc/Makeconf</samp> between running <code class="command">configure</code> and <code class="command">make</code>). </p> <p>Having debugging symbols available is useful both when running R under a debugger (e.g., <code class="command">R -d gdb</code>) and when using sanitizers and <code class="command">valgrind</code>, all things intended for experts. </p> <p>Debugging symbols (and some others) can be ‘stripped’ on installation by using </p><div class="example"> <pre class="example-preformatted">make install-strip </pre></div> <p>How well this is supported depends on the platform: it works best on those using GNU <code class="code">binutils</code>. On ‘<samp class="samp">x86_64</samp>’ Linux a typical reduction in overall size was from 92MB to 66MB. On macOS debugging symbols are not by default included in <samp class="file">.dylib</samp> and <samp class="file">.so</samp> files, so there is negligible difference. </p> <hr> </div> <div class="subsection-level-extent" id="OpenMP-Support"> <div class="nav-panel"> <p> Next: <a href="#C_002b_002b-Support" accesskey="n" rel="next">C++ Support</a>, Previous: <a href="#Debugging-Symbols" accesskey="p" rel="prev">Debugging Symbols</a>, Up: <a href="#Other-Options" accesskey="u" rel="up">Other Options</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="OpenMP-Support-1"><span>2.7.2 <abbr class="abbr">OpenMP</abbr> Support<a class="copiable-link" href="#OpenMP-Support-1"> ¶</a></span></h4> <p>By default <code class="command">configure</code> searches for suitable flags<a class="footnote" id="DOCF11" href="#FOOT11"><sup>11</sup></a> for <abbr class="abbr">OpenMP</abbr> support for the C, C++ (default standard) and Fortran compilers. </p> <p>Only the C result is currently used for R itself, and only if <code class="code">MAIN_LD</code>/<code class="code">DYLIB_LD</code> were not specified. This can be overridden by specifying </p><div class="example"> <pre class="example-preformatted">R_OPENMP_CFLAGS </pre></div> <p>Use for packages has similar restrictions (involving <code class="code">SHLIB_LD</code> and similar: note that as Fortran code is by default linked by the C (or C++) compiler, both need to support <abbr class="abbr">OpenMP</abbr>) and can be overridden by specifying some of </p><div class="example"> <pre class="example-preformatted">SHLIB_OPENMP_CFLAGS SHLIB_OPENMP_CXXFLAGS SHLIB_OPENMP_FFLAGS </pre></div> <p>Setting these to an empty value will disable <abbr class="abbr">OpenMP</abbr> for that compiler (and configuring with <samp class="option">--disable-openmp</samp> will disable all detection<a class="footnote" id="DOCF12" href="#FOOT12"><sup>12</sup></a> of <abbr class="abbr">OpenMP</abbr>). The <code class="command">configure</code> detection test is to compile and link a standalone <abbr class="abbr">OpenMP</abbr> program, which is not the same as compiling a shared object and loading it into the C program of R’s executable. Note that overridden values are not tested. </p> <hr> </div> <div class="subsection-level-extent" id="C_002b_002b-Support"> <div class="nav-panel"> <p> Next: <a href="#C-standards" accesskey="n" rel="next">C standards</a>, Previous: <a href="#OpenMP-Support" accesskey="p" rel="prev"><abbr class="abbr">OpenMP</abbr> Support</a>, Up: <a href="#Other-Options" accesskey="u" rel="up">Other Options</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="C_002b_002b-Support-1"><span>2.7.3 C++ Support<a class="copiable-link" href="#C_002b_002b-Support-1"> ¶</a></span></h4> <p>C++ is not used by R itself, but support is provided for installing packages with C++ code via <code class="command">make</code> macros defined in file <samp class="file">etc/Makeconf</samp> (and with explanations in file <samp class="file">config.site</samp>): </p><div class="example"> <pre class="example-preformatted">CXX CXXFLAGS CXXPICFLAGS CXXSTD CXX11 CXX11STD CXX11FLAGS CXX11PICFLAGS CXX14 CXX14STD CXX14FLAGS CXX14PICFLAGS CXX17 CXX17STD CXX17FLAGS CXX17PICFLAGS CXX20 CXX20STD CXX20FLAGS CXX20PICFLAGS CXX23 CXX23STD CXX23FLAGS CXX23PICFLAGS </pre></div> <p>The macros <code class="code">CXX</code> etc are those used by default for C++ code. <code class="command">configure</code> will attempt to set the rest suitably, choosing for <code class="code">CXXSTD</code> and <code class="code">CXX11STD</code> a suitable flag such as <samp class="option">-std=gnu++17</samp> for C++17 support (which is required if C++ is to be supported by default). Inferred values can be overridden in file <samp class="file">config.site</samp> or on the <code class="command">configure</code> command line: user-supplied values will be tested by compiling some C++11/14/17/20/23 code. </p> <p>It may be that there is no suitable flag for C++14/17/20/23 support with the default compiler, in which case a different compiler could be selected for <code class="code">CXX14</code>/<code class="code">CXX17</code>/<code class="code">CXX20</code>/<code class="code">CXX23</code> with its corresponding flags. </p> <p>If no suitable compiler/flag is found for the default C++ compiler, one can be set in file <samp class="file">config.site</samp> <em class="emph">via</em> macros <code class="code">CXX</code> and <code class="code">CXXSTD</code>. A user-specified compiler does not need to pass the C++17 tests, so do this at your own risk as some packages may not compile. </p> <p>The <samp class="option">-std</samp> flag is supported by the GCC, <code class="command">clang++</code> and Intel compilers. Currently accepted values are (plus some synonyms) </p><div class="example"> <pre class="example-preformatted">g++: c++11 gnu+11 c++14 gnu++14 c++17 gnu++17 c++2a gnu++2a (from 8) c++20 gnu++20 (from 10) c++23 gnu++23 c++2b gnu++2b (from 11) Intel: c++11 gnu+11 c++14 gnu++14 c++17 gnu++17 c++20 gnu++20 (from 2021.1) c++2b gnu++2b (from 2022.2) </pre></div> <p>(Those for LLVM <code class="command">clang++</code> are documented at <a class="uref" href="https://clang.llvm.org/cxx_status.html">https://clang.llvm.org/cxx_status.html</a>, and follow <code class="code">g++</code>: <code class="code">-std=c++20</code> is supported from Clang 10, <code class="code">-std=c++2b</code> from Clang 13 and <code class="code">-std=c++23</code> from Clang 17. Apple Clang supports <code class="code">-std=c++2b</code> from 13.1.6: version 15.0.0 does not support <code class="code">-std=c++23</code>.) </p> <p>‘Standards’ for <code class="command">g++</code> starting with ‘<samp class="samp">gnu</samp>’ enable ‘GNU extensions’: what those are is hard to track down. </p> <p>For the use of C++ in R packages see the ‘Writing R Extensions’ manual. Prior to R 3.6.0 the default C++ standard was that of the compiler used: currently it is C++17. </p> <p><a class="uref" href="https://en.cppreference.com/w/cpp/compiler_support">https://en.cppreference.com/w/cpp/compiler_support</a> indicates which versions of common compilers support (parts of) which C++ standards. GCC introduced C++17 support gradually, but version 7 should suffice. </p> <hr> </div> <div class="subsection-level-extent" id="C-standards"> <div class="nav-panel"> <p> Next: <a href="#Link_002dTime-Optimization" accesskey="n" rel="next">Link-Time Optimization</a>, Previous: <a href="#C_002b_002b-Support" accesskey="p" rel="prev">C++ Support</a>, Up: <a href="#Other-Options" accesskey="u" rel="up">Other Options</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="C-standards-1"><span>2.7.4 C standards<a class="copiable-link" href="#C-standards-1"> ¶</a></span></h4> <p>Compiling R requires C99 or later: C11 and C17 are minor updates, but the substantial update planned for ‘C23’ (now expected <em class="emph">ca</em> April 2024) will also be supported. </p> <p>As from R 4.3.0 there is support for packages to indicate their preferred C version. Macros <code class="code">CC17</code>, <code class="code">C17FLAGS</code>, <code class="code">CC23</code> and <code class="code">C23FLAGS</code> can be set in <samp class="file">config.site</samp> (there are examples there). Those for C17 should support C17 or earlier and not allow C23 additions so for example <code class="code">bool</code>, <code class="code">true</code> and <code class="code">false</code> can be used as identifiers. Those for C23 should support new types such as <code class="code">bool</code>. </p> <p>Some compilers warn enthusiastically about prototypes. For most, omitting <samp class="option">-Wstrict-prototypes</samp> in <code class="code">C17FLAGS</code> suffices. However, versions 15 and later of LLVM <code class="command">clang</code> and 14.0.3 and later of Apple clang warn by default in all modes if <samp class="option">-Wall</samp> or <samp class="option">-pedantic</samp> is used, and may need <samp class="option">-Wno-strict-prototypes</samp>. </p> <hr> </div> <div class="subsection-level-extent" id="Link_002dTime-Optimization"> <div class="nav-panel"> <p> Previous: <a href="#C-standards" accesskey="p" rel="prev">C standards</a>, Up: <a href="#Other-Options" accesskey="u" rel="up">Other Options</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="Link_002dTime-Optimization-1"><span>2.7.5 Link-Time Optimization<a class="copiable-link" href="#Link_002dTime-Optimization-1"> ¶</a></span></h4> <p>There is support for using link-time optimization (<abbr class="abbr">LTO</abbr>) if the toolchain supports it: configure with flag <samp class="option">--enable-lto</samp>. When <abbr class="abbr">LTO</abbr> is enabled it is used for compiled code in add-on packages unless the flag <samp class="option">--enable-lto=R</samp> is used<a class="footnote" id="DOCF13" href="#FOOT13"><sup>13</sup></a>. </p> <p>The main benefit seen to date from <abbr class="abbr">LTO</abbr> has been detecting long-standing bugs in the ways packages pass arguments to compiled code and between compilation units. Benchmarking in 2020 with <code class="command">gcc</code>/<code class="command">gfortran</code> 10 showed gains of a few percent in increased performance and reduction in installed size for builds without debug symbols, but large size reductions for some packages<a class="footnote" id="DOCF14" href="#FOOT14"><sup>14</sup></a> with debug symbols. (Performance and size gains are said to be most often seen in complex C++ builds.) </p> <p>Whether toolchains support <abbr class="abbr">LTO</abbr> is often unclear: all of the C compiler, the Fortran compiler<a class="footnote" id="DOCF15" href="#FOOT15"><sup>15</sup></a> and linker have to support it, and support it by the same mechanism (so mixing compiler families may not work and a non-default linker may be needed). It has been supported by the GCC and LLVM projects for some years with diverging implementations. </p> <p><abbr class="abbr">LTO</abbr> support was added in 2011 for GCC 4.5 on Linux but was little used before 2019: compiler support has steadily improved over those years and <samp class="option">--enable-lto=R</samp> is nowadays used for some routine <abbr class="acronym">CRAN</abbr> checking. </p> <p>Unfortunately <samp class="option">--enable-lto</samp> may be accepted but silently do nothing useful if some of the toolchain does not support <abbr class="abbr">LTO</abbr>: this is less common than it once was. </p> <p>Various macros can be set in file <samp class="file">config.site</samp> to customize how <abbr class="abbr">LTO</abbr> is used. If the Fortran compiler is not of the same family as the C/C++ compilers, set macro ‘<samp class="samp">LTO_FC</samp>’ (probably to empty). Macro ‘<samp class="samp">LTO_LD</samp>’ can be used to select an alternative linker should that be needed. </p> <ul class="mini-toc"> <li><a href="#LTO-with-GCC" accesskey="1"><abbr class="abbr">LTO</abbr> with GCC</a></li> <li><a href="#LTO-with-LLVM" accesskey="2"><abbr class="abbr">LTO</abbr> with LLVM</a></li> <li><a href="#LTO-for-package-checking" accesskey="3"><abbr class="abbr">LTO</abbr> for package checking</a></li> </ul> <hr> <div class="subsubsection-level-extent" id="LTO-with-GCC"> <div class="nav-panel"> <p> Next: <a href="#LTO-with-LLVM" accesskey="n" rel="next"><abbr class="abbr">LTO</abbr> with LLVM</a>, Previous: <a href="#Link_002dTime-Optimization" accesskey="p" rel="prev">Link-Time Optimization</a>, Up: <a href="#Link_002dTime-Optimization" accesskey="u" rel="up">Link-Time Optimization</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsubsection" id="LTO-with-GCC-1"><span>2.7.5.1 <abbr class="abbr">LTO</abbr> with GCC<a class="copiable-link" href="#LTO-with-GCC-1"> ¶</a></span></h4> <p>This has been tested on Linux with <code class="command">gcc</code>/<code class="command">gfortran</code> 8 and later: that needed setting (e.g. in <samp class="file">config.site</samp>) </p><div class="example"> <pre class="example-preformatted">AR=gcc-ar RANLIB=gcc-ranlib </pre></div> <p>For non-system compilers or if those wrappers have not been installed one may need something like </p><div class="example"> <pre class="example-preformatted">AR="ar --plugin=/path/to/liblto_plugin.so" RANLIB="ranlib --plugin=/path/to/liblto_plugin.so" </pre></div> <p>and <code class="code">NM</code> may be needed to be set analogously. (If using an <abbr class="abbr">LTO</abbr>-enabled build to check packages, set environment variable <code class="env">UserNM</code><a class="footnote" id="DOCF16" href="#FOOT16"><sup>16</sup></a> to ‘<samp class="samp">gcc-nm</samp>’.) </p> <p>With GCC 5 and later it is possible to parallelize parts of the <abbr class="abbr">LTO</abbr> linking process: set the make macro ‘<samp class="samp">LTO</samp>’ to something like ‘<samp class="samp">LTO=-flto=8</samp>’ (to use 8 threads), for example in file <samp class="file">config.site</samp>. </p> <p>Under some circumstances and for a few packages, the PIC flags have needed overriding on Linux with GCC 9: e.g use in <samp class="file">config.site</samp>: </p><div class="example"> <pre class="example-preformatted">CPICFLAGS=-fPIC CXXPICFLAGS=-fPIC CXX11PICFLAGS=-fPIC CXX14PICFLAGS=-fPIC CXX17PICFLAGS=-fPIC CXX20PICFLAGS=-fPIC FPICFLAGS=-fPIC </pre></div> <p>We suggest only using these if the problem is encountered (it had not been seen on <abbr class="acronym">CRAN</abbr> with GCC 10–14 at the time of writing). </p> <p>Note that R may need to be re-compiled after even a minor update to the compiler (e.g. from 13.1 to 13.2). </p> <hr> </div> <div class="subsubsection-level-extent" id="LTO-with-LLVM"> <div class="nav-panel"> <p> Next: <a href="#LTO-for-package-checking" accesskey="n" rel="next"><abbr class="abbr">LTO</abbr> for package checking</a>, Previous: <a href="#LTO-with-GCC" accesskey="p" rel="prev"><abbr class="abbr">LTO</abbr> with GCC</a>, Up: <a href="#Link_002dTime-Optimization" accesskey="u" rel="up">Link-Time Optimization</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsubsection" id="LTO-with-LLVM-1"><span>2.7.5.2 <abbr class="abbr">LTO</abbr> with LLVM<a class="copiable-link" href="#LTO-with-LLVM-1"> ¶</a></span></h4> <p>LLVM supports another type of <abbr class="abbr">LTO</abbr> called ‘Thin <abbr class="abbr">LTO</abbr>’ as well as a similar implementation to GCC, sometimes called ‘Full <abbr class="abbr">LTO</abbr>’. (See <a class="uref" href="https://clang.llvm.org/docs/ThinLTO.html">https://clang.llvm.org/docs/ThinLTO.html</a>.) Currently the LLVM compilers relevant to R are <code class="command">clang</code> and <code class="command">flang</code> for which this can be selected by setting macro ‘<samp class="samp">LTO=-flto=thin</samp>’. LLVM has </p><div class="example"> <pre class="example-preformatted">AR=llvm-ar RANLIB=llvm-ranlib </pre></div> <p>(but macOS does not, and these are not needed there). Where the linker supports a parallel backend for Thin <abbr class="abbr">LTO</abbr> this can be specified <em class="emph">via</em> the macro ‘<samp class="samp">LTO_LD</samp>’: see the URL above for per-linker settings and further linking optimizations.) </p> <p>For example, on macOS one might use </p><div class="example"> <pre class="example-preformatted">LTO=-flto=thin LTO_FC= LTO_LD=-Wl,-mllvm,-threads=4 </pre></div> <p>to use Thin <abbr class="abbr">LTO</abbr> with 4 threads for C/C++ code, but skip <abbr class="abbr">LTO</abbr> for Fortran code compiled with <code class="command">gfortran</code>. </p> <p>It is said to be particularly beneficial to use <samp class="option">-O3</samp> for <code class="command">clang</code> in conjunction with <abbr class="abbr">LTO</abbr>. </p> <p>It seems that <code class="command">flang</code> may support <abbr class="abbr">LTO</abbr>, but with no documentation as yet. </p> <p>The 2020s versions of Intel’s C/C++ compilers are based on LLVM and as such support LLVM-style <abbr class="abbr">LTO</abbr>, both ‘full’ and ‘thin’. This might use something like </p><div class="example"> <pre class="example-preformatted">LTO=-flto=thin -flto-jobs=8 </pre></div> <hr> </div> <div class="subsubsection-level-extent" id="LTO-for-package-checking"> <div class="nav-panel"> <p> Previous: <a href="#LTO-with-LLVM" accesskey="p" rel="prev"><abbr class="abbr">LTO</abbr> with LLVM</a>, Up: <a href="#Link_002dTime-Optimization" accesskey="u" rel="up">Link-Time Optimization</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsubsection" id="LTO-for-package-checking-1"><span>2.7.5.3 <abbr class="abbr">LTO</abbr> for package checking<a class="copiable-link" href="#LTO-for-package-checking-1"> ¶</a></span></h4> <p><abbr class="abbr">LTO</abbr> effectively compiles all the source code in a package as a single compilation unit and so allows the compiler (with sufficient diagnostic flags such as <samp class="option">-Wall</samp>) to check consistency between what are normally separate compilation units. </p> <p>With <code class="command">gcc</code>/<code class="command">gfortran</code> 9.x and later<a class="footnote" id="DOCF17" href="#FOOT17"><sup>17</sup></a> <abbr class="abbr">LTO</abbr> will flag inconsistencies in calls to Fortran subroutines/functions, both between Fortran source files and between Fortran and C/C++. <code class="command">gfortran</code> 8.4, 9.2 and later can help understanding these by extracting C prototypes from Fortran source files with option <samp class="option">-fc-prototypes-external</samp>, e.g. that (at the time of writing) Fortran <code class="code">LOGICAL</code> corresponds to <code class="code">int_least32_t *</code> in C. </p> <hr> </div> </div> </div> <div class="section-level-extent" id="Testing-a-Unix_002dalike-Installation"> <div class="nav-panel"> <p> Previous: <a href="#Other-Options" accesskey="p" rel="prev">Other Options</a>, Up: <a href="#Installing-R-under-Unix_002dalikes" accesskey="u" rel="up">Installing R under Unix-alikes</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Testing-an-Installation"><span>2.8 Testing an Installation<a class="copiable-link" href="#Testing-an-Installation"> ¶</a></span></h3> <p>Full post-installation testing is possible only if the test files have been installed with </p> <div class="example"> <pre class="example-preformatted">make install-tests </pre></div> <p>which populates a <samp class="file">tests</samp> directory in the installation. </p> <p>If this has been done, two testing routes are available. The first is to move to the home directory of the R installation (as given by <code class="command">R RHOME</code> or from R as <code class="code">R.home()</code>) and run </p> <div class="example"> <pre class="example-preformatted">cd tests ## followed by one of ../bin/R CMD make check ../bin/R CMD make check-devel ../bin/R CMD make check-all </pre></div> <p>and other useful targets are <code class="code">test-BasePackages</code> and <code class="code">test-Recommended</code> to run tests of the standard and recommended packages (if installed) respectively. </p> <p>This re-runs all the tests relevant to the installed R (including for example the code in the package vignettes), but not for example the ones checking the example code in the manuals nor making the standalone Rmath library. This can occasionally be useful when the operating environment has been changed, for example by OS updates or by substituting the <abbr class="acronym">BLAS</abbr> (see <a class="pxref" href="#Shared-BLAS">Shared BLAS</a>). </p> <p>Parallel checking of packages may be possible: set the environment variable <code class="env">TEST_MC_CORES</code> to the maximum number of processes to be run in parallel. This affects both checking the package examples (part of <code class="command">make check</code>) and package sources (part of <code class="command">make check-devel</code> and <code class="command">make check-recommended</code>). It does require a <code class="command">make</code> command which supports the <code class="command">make -j <var class="var">n</var></code> option: most do. </p> <p>Alternatively, the installed R can be run, preferably with <samp class="option">--vanilla</samp>. Then <a class="index-entry-id" id="index-LC_005fCOLLATE"></a> </p> <div class="example"> <pre class="example-preformatted">pdf("tests.pdf") ## optional, but prevents flashing graphics windows Sys.setenv(LC_COLLATE = "C", LC_TIME = "C", LANGUAGE = "en") tools::testInstalledBasic("both") tools::testInstalledPackages(scope = "base") tools::testInstalledPackages(scope = "recommended") </pre></div> <p>runs the basic tests and then all the tests on the standard and recommended packages. These tests can be run from anywhere: the basic tests write their results in the <samp class="file">tests</samp> folder of the R home directory and run fewer tests than the first approach: in particular they do not test things which need Internet access—that can be tested by </p><div class="example"> <pre class="example-preformatted">tools::testInstalledBasic("internet") </pre></div> <p>It is possible to test the installed packages (but not their package-specific tests) by <code class="code">testInstalledPackages</code> even if <code class="command">make install-tests</code> was not run. The outputs are written under the current directory unless a different one is specified by <code class="code">outDir</code>. </p> <p>Note that the results may depend on the language set for times and messages: for maximal similarity to reference results you may want to try setting (before starting the R session) </p> <div class="example"> <pre class="example-preformatted">LANGUAGE=en </pre></div> <p>and use a UTF-8 or Latin-1 locale. </p> <hr> </div> </div> <div class="chapter-level-extent" id="Installing-R-under-Windows"> <div class="nav-panel"> <p> Next: <a href="#Installing-R-under-macOS" accesskey="n" rel="next">Installing R under macOS</a>, Previous: <a href="#Installing-R-under-Unix_002dalikes" accesskey="p" rel="prev">Installing R under Unix-alikes</a>, Up: <a href="#Top" accesskey="u" rel="up">R Installation and Administration</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h2 class="chapter" id="Installing-R-under-Windows-1"><span>3 Installing R under Windows<a class="copiable-link" href="#Installing-R-under-Windows-1"> ¶</a></span></h2> <a class="index-entry-id" id="index-Installing-under-Windows"></a> <p>[The rest of this paragraph is only relevant after release.] The <samp class="file">bin/windows</samp> directory of a <abbr class="acronym">CRAN</abbr> site contains binaries for a base distribution and a large number of add-on packages from <abbr class="acronym">CRAN</abbr> to run on 64-bit ‘<samp class="samp">x86_64</samp>’ Windows. </p> <p>R is most tested on current versions of Windows 10 and Windows Server 2022 with UTF-8 as the charset encoding. It works also on Windows 11. It runs on older versions of Windows, but normally with other charset encoding and may require manual installation of the Universal C Runtime (<abbr class="abbr">UCRT</abbr>). </p> <p>Your file system must allow long file names (as is likely except perhaps for some network-mounted systems). If it does not also support conversion to short name equivalents (a.k.a. DOS 8.3 names), then R <em class="emph">must</em> be installed in a path that does not contain spaces. </p> <p>Installation is <em class="emph">via</em> the installer <samp class="file">R-4.4.1-win.exe</samp>. Just double-click on the icon and follow the instructions. You can uninstall R from the Control Panel. </p> <p>You will be asked to choose a language for installation: that choice applies to both installation and un-installation but not to running R itself. </p> <p>See the <a class="uref" href="https://CRAN.R-project.org/bin/windows/base/rw-FAQ.html">R Windows <abbr class="acronym">FAQ</abbr></a> for more details on the binary installer and for information on use on older Windows systems. </p> <ul class="mini-toc"> <li><a href="#Building-from-source" accesskey="1">Building from source</a></li> <li><a href="#Checking-the-build" accesskey="2">Checking the build</a></li> <li><a href="#Testing-a-Windows-Installation" accesskey="3">Testing an Installation</a></li> </ul> <hr> <div class="section-level-extent" id="Building-from-source"> <div class="nav-panel"> <p> Next: <a href="#Checking-the-build" accesskey="n" rel="next">Checking the build</a>, Previous: <a href="#Installing-R-under-Windows" accesskey="p" rel="prev">Installing R under Windows</a>, Up: <a href="#Installing-R-under-Windows" accesskey="u" rel="up">Installing R under Windows</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Building-from-source-1"><span>3.1 Building from source<a class="copiable-link" href="#Building-from-source-1"> ¶</a></span></h3> <p>It is possible to use other 64-bit toolchains (including ‘MSYS2’) with <abbr class="abbr">UCRT</abbr> support to build R, but this manual only documents that used for recent binary distributions of R. When using other toolchains, makefiles of R and packages may need to be adapted. </p> <ul class="mini-toc"> <li><a href="#The-Windows-toolset" accesskey="1">The Windows toolset</a></li> <li><a href="#LaTeX-on-Windows" accesskey="2">LaTeX</a></li> </ul> <hr> <div class="subsection-level-extent" id="The-Windows-toolset"> <div class="nav-panel"> <p> Next: <a href="#LaTeX-on-Windows" accesskey="n" rel="next">LaTeX</a>, Previous: <a href="#Building-from-source" accesskey="p" rel="prev">Building from source</a>, Up: <a href="#Building-from-source" accesskey="u" rel="up">Building from source</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="The-Windows-toolset-1"><span>3.1.1 The Windows toolset<a class="copiable-link" href="#The-Windows-toolset-1"> ¶</a></span></h4> <p>The binary distribution of R is currently built with tools from <a class="uref" href="https://CRAN.R-project.org/bin/windows/Rtools/rtools44/rtools.html">Rtools44 for Windows</a>. See <a class="uref" href="https://CRAN.R-project.org/bin/windows/base/howto-R-devel.html">Building R and packages</a> for more details on how to use it. </p> <p>The toolset includes compilers (currently GCC version 13.2.0 with selected additional patches) and runtime libraries from <a class="uref" href="http://mingw-w64.org/">the ‘MinGW-w64’ project</a> and a number of pre-compiled static libraries and headers used by R and R packages, compiled by <a class="uref" href="https://mxe.cc/">’MXE’</a> (M cross environment, with updates maintained by Tomas Kalibera). The toolset also includes build tools from the <a class="uref" href="https://www.msys2.org/">the ’MSYS2’ project</a>. Additional build tools packaged by ’MSYS2’ may be installed via a package manager (‘<samp class="samp">pacman</samp>’). </p> <p>There is also an experimental variant of Rtools44 with support for 64-bit ARM CPUs (aarch64) via LLVM 17 toolchain using <code class="command">clang</code>/<code class="command">flang-new</code> compilers, <code class="command">lld</code> linker, and libc++. </p> <p>The toolsets used for 64-bit Windows from 2008 to 2022 were based on MinGW-w64. The assistance of Yu Gong at a crucial step in porting R to MinGW-w64 is gratefully acknowledged, as well as help from Kai Tietz, the lead developer of the MinGW-w64 project and from Martin Storsjo. </p> <hr> </div> <div class="subsection-level-extent" id="LaTeX-on-Windows"> <div class="nav-panel"> <p> Previous: <a href="#The-Windows-toolset" accesskey="p" rel="prev">The Windows toolset</a>, Up: <a href="#Building-from-source" accesskey="u" rel="up">Building from source</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="LaTeX"><span>3.1.2 LaTeX<a class="copiable-link" href="#LaTeX"> ¶</a></span></h4> <p>Both building R and checking packages need a distribution of LaTeX installed, with the directory containing <code class="command">pdflatex</code> on the path. </p> <p>The ‘<samp class="samp">MiKTeX</samp>’ (<a class="uref" href="https://miktex.org/">https://miktex.org/</a>) distribution of LaTeX is that used on <abbr class="acronym">CRAN</abbr>. This can be set up to install extra packages ‘on the fly’ (without asking), which is the simplest way to use it. The ‘basic’ version of ‘<samp class="samp">MiKTeX</samp>’ will need to add some packages.<a class="footnote" id="DOCF18" href="#FOOT18"><sup>18</sup></a> In any case ensure that the <strong class="strong">inconsolata</strong> package is installed—you can check with the ‘<samp class="samp">MiKTeX</samp>’ Package Manager. </p> <p>It is also possible to use the TeX Live distribution from <a class="uref" href="https://www.tug.org/texlive/">https://www.tug.org/texlive/</a>. (The <abbr class="acronym">CRAN</abbr> package <a class="url" href="https://CRAN.R-project.org/package=tinytex"><strong class="strong">tinytex</strong></a> can install and manage a subset of TeX Live.) </p> <hr> </div> </div> <div class="section-level-extent" id="Checking-the-build"> <div class="nav-panel"> <p> Next: <a href="#Testing-a-Windows-Installation" accesskey="n" rel="next">Testing an Installation</a>, Previous: <a href="#Building-from-source" accesskey="p" rel="prev">Building from source</a>, Up: <a href="#Installing-R-under-Windows" accesskey="u" rel="up">Installing R under Windows</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Checking-the-build-1"><span>3.2 Checking the build<a class="copiable-link" href="#Checking-the-build-1"> ¶</a></span></h3> <p>You can test a build by running </p> <div class="example"> <pre class="example-preformatted">make check </pre></div> <p>The recommended packages can be checked by </p> <div class="example"> <pre class="example-preformatted">make check-recommended </pre></div> <p>Other levels of checking are </p> <div class="example"> <pre class="example-preformatted">make check-devel </pre></div> <p>for a more thorough check of the R functionality, and </p> <div class="example"> <pre class="example-preformatted">make check-all </pre></div> <p>for both <code class="code">check-devel</code> and <code class="code">check-recommended</code>. </p> <p>If a test fails, there will almost always be a <samp class="file">.Rout.fail</samp> file in the directory being checked (often <samp class="file">tests/Examples</samp> or <samp class="file">tests</samp>): examine the file to help pinpoint the problem. </p> <p>Parallel checking of package sources (part of <code class="command">make check-devel</code> and <code class="command">make check-recommended</code>) is possible: see the environment variable <code class="env">TEST_MC_CORES</code> to the maximum number of processes to be run in parallel. </p> <hr> </div> <div class="section-level-extent" id="Testing-a-Windows-Installation"> <div class="nav-panel"> <p> Previous: <a href="#Checking-the-build" accesskey="p" rel="prev">Checking the build</a>, Up: <a href="#Installing-R-under-Windows" accesskey="u" rel="up">Installing R under Windows</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Testing-an-Installation-1"><span>3.3 Testing an Installation<a class="copiable-link" href="#Testing-an-Installation-1"> ¶</a></span></h3> <p>The Windows installer contains a set of test files used when building R. </p> <p>The toolset is not needed to run these tests, but more comprehensive analysis of errors will be given if <code class="command">diff</code> is in the path. </p> <p>Launch either <code class="code">Rgui</code> or <code class="code">Rterm</code> (preferred), preferably with <samp class="option">--vanilla</samp>. Then run </p> <div class="example"> <pre class="example-preformatted">Sys.setenv(LC_COLLATE = "C", LC_TIME="C", LANGUAGE = "en") tools::testInstalledBasic("both") tools::testInstalledPackages(scope = "base") tools::testInstalledPackages(scope = "recommended") </pre></div> <p>runs the basic tests and then all the tests on the standard and recommended packages. These tests can be run from anywhere: <code class="code">testInstalledBasic</code> writes results in the <samp class="file">tests</samp> folder of the R home directory (as given by <code class="code">R.home()</code>) and <code class="code">testInstalledPackages</code> under the current directory unless a different one is specified by <code class="code">outDir</code>. </p> <p>For the <samp class="file">tests</samp> folder to be writeable, one normally needs to install R to a directory other than the default <samp class="file">C:\Program Files</samp>. The installer also allows to install R without Administrator privileges, see the <a class="uref" href="https://CRAN.R-project.org/bin/windows/base/rw-FAQ.html">R Windows <abbr class="acronym">FAQ</abbr></a> for more details. </p> <p>The results of <code class="code">example(md5sums)</code> when testing <strong class="strong">tools</strong> may differ from the reference output as some files are installed with Windows’ CRLF line endings. Also, expect differences in <samp class="file">reg-plot-latin1.pdf</samp>. </p> <p>One can also run tests from the toolset shell (e.g. <code class="command">bash</code>) similarly to a Unix-like installation. Move to the home directory of the R installation (as given by <code class="command">R RHOME</code> or from R as <code class="code">R.home()</code>) and run </p> <div class="example"> <pre class="example-preformatted">cd tests ## followed by one of ../bin/R CMD make check ../bin/R CMD make check-devel ../bin/R CMD make check-all </pre></div> <p>Remember that LaTeX needs to be on the path. </p> <hr> </div> </div> <div class="chapter-level-extent" id="Installing-R-under-macOS"> <div class="nav-panel"> <p> Next: <a href="#Running-R" accesskey="n" rel="next">Running R</a>, Previous: <a href="#Installing-R-under-Windows" accesskey="p" rel="prev">Installing R under Windows</a>, Up: <a href="#Top" accesskey="u" rel="up">R Installation and Administration</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h2 class="chapter" id="Installing-R-under-macOS-1"><span>4 Installing R under macOS<a class="copiable-link" href="#Installing-R-under-macOS-1"> ¶</a></span></h2> <a class="index-entry-id" id="index-macOS-1"></a> <p>[The rest of this paragraph is only relevant after release.] The front page of a <abbr class="acronym">CRAN</abbr> site has a link ‘Download R for (Mac) OS X’ which takes you to a new page. Two files are offered for download, <samp class="file">R-4.4.1-arm64.pkg</samp> and <samp class="file">R-4.4.1-x86_64.pkg</samp>. Both are for macOS 11 or later (Big Sur, Monterey, Ventura, Sonoma, …). </p> <p>The first is for ‘Apple Silicon’ (<em class="emph">aka</em> ‘M1’, ‘M2’, …) Macs, the second for older Macs with an ‘<samp class="samp">x86_64</samp>’ (Intel) CPU. </p> <p>It is important that if you use a binary installer package that your OS is fully updated: look at ‘Software Update’ in ’System Preferences’ to be sure. </p> <p>To install, just double-click on the icon of the file you downloaded. At the ‘Installation Type’ stage, note the option to ‘Customize’. This currently shows four components: everyone will need the ‘R Framework’ component: the remaining components are optional. (The ‘Tcl/Tk’ component is needed to use package <strong class="strong">tcltk</strong>. The ‘Texinfo’ component is only needed by those installing source packages or R from its sources.) </p> <p>Note for Ventura users: installation from the <samp class="file">Downloads</samp> folder may not be allowed or may require additional authorization, so we suggest you download somewhere else such as your desktop or home folder. </p> <p>These are Apple Installer packages. If you encounter any problem during the installation, please check the Installer log by clicking on the “Window” menu and item “Installer Log”. The full output (select “Show All Log”) is useful for tracking down problems. Note that the installer is clever enough to try to upgrade the last-installed version of the application where you installed it (which may not be where you want this time …). </p> <p>Various parts of the build require XQuartz to be installed: see <a class="uref" href="https://www.xquartz.org/releases/">https://www.xquartz.org/releases/</a>.<a class="footnote" id="DOCF19" href="#FOOT19"><sup>19</sup></a> These include the <strong class="strong">tcltk</strong> package and the <code class="code">X11</code> graphics device: attempting to use these without XQuartz will remind you. This is also needed for some <a class="index-entry-id" id="index-Cairo"></a> builds of the cairographics-based devices (which are not often used on macOS) such as <code class="code">png(type = "cairo")</code> and <code class="code">svg()</code> and some third-party packages (e.g. <a class="url" href="https://CRAN.R-project.org/package=rgl"><strong class="strong">rgl</strong></a>). </p> <p>If you update your macOS version, you should re-install R (and perhaps XQuartz): the installer may tailor the installation to the current version of the OS. </p> <p>Installers for R-patched and R-devel are usually available from <a class="uref" href="https://mac.R-project.org">https://mac.R-project.org</a>. (Some of these packages may be unsigned/not notarized: to install those Control/right/two-finger click, select ‘<samp class="samp">Open With</samp>’ and ‘<samp class="samp">Installer</samp>’.) </p> <p>For building R from source, see <a class="ref" href="#macOS">macOS</a>. </p> <ul class="mini-toc"> <li><a href="#Running-R-under-macOS" accesskey="1">Running R under macOS</a></li> <li><a href="#Uninstalling-under-macOS" accesskey="2">Uninstalling under macOS</a></li> <li><a href="#Multiple-versions" accesskey="3">Multiple versions</a></li> </ul> <hr> <div class="section-level-extent" id="Running-R-under-macOS"> <div class="nav-panel"> <p> Next: <a href="#Uninstalling-under-macOS" accesskey="n" rel="next">Uninstalling under macOS</a>, Previous: <a href="#Installing-R-under-macOS" accesskey="p" rel="prev">Installing R under macOS</a>, Up: <a href="#Installing-R-under-macOS" accesskey="u" rel="up">Installing R under macOS</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Running-R-under-macOS-1"><span>4.1 Running R under macOS<a class="copiable-link" href="#Running-R-under-macOS-1"> ¶</a></span></h3> <p>There are two ways to run R on macOS from a <abbr class="acronym">CRAN</abbr> binary distribution. </p> <p>There is a GUI console normally installed with the R icon in <samp class="file">/Applications</samp> which you can run by double-clicking (e.g. from Launchpad or Finder). (If you cannot find it there it was possibly installed elsewhere so try searching for it in Spotlight.) This is usually referred to as <small class="sc">R.APP</small> to distinguish it from command-line R: its user manual is currently part of the macOS FAQ at <a class="uref" href="https://cran.r-project.org/bin/macosx/RMacOSX-FAQ.html">https://cran.r-project.org/bin/macosx/RMacOSX-FAQ.html</a> and can be viewed from <small class="sc">R.APP</small>’s ‘Help’ menu. </p> <p>You can run command-line R and <code class="command">Rscript</code> from a Terminal<a class="footnote" id="DOCF20" href="#FOOT20"><sup>20</sup></a> so these can be typed as commands as on any other Unix-alike: see the next chapter of this manual. There are some small differences which may surprise users of R on other platforms, notably the default location of the personal library directory (under <samp class="file">~/Library/R</samp>, e.g. <samp class="file">~/Library/R/arm64/4.4/library</samp>), and that warnings, messages and other output to <samp class="file">stderr</samp> are highlighted in bold. </p> <p>Those using the <code class="command">zsh</code> shell (the default for new user accounts) might find the command <code class="command">R</code> being masked by the <code class="command">zsh</code> builtin <code class="command">r</code> (which recalls commands). One can use a full path to R in an alias, or add <code class="code">disable r</code> to <samp class="file">~/.zshrc</samp>. </p> <p>It has been reported that running <small class="sc">R.APP</small> may fail if no preferences are stored, so if it fails when launched for the very first time, try it again (the first attempt will store some preferences). </p> <p>Users of <small class="sc">R.APP</small> need to be aware of the ‘App Nap’ feature (<a class="uref" href="https://developer.apple.com/library/archive/releasenotes/MacOSX/WhatsNewInOSX/Articles/MacOSX10_9.html">https://developer.apple.com/library/archive/releasenotes/MacOSX/WhatsNewInOSX/Articles/MacOSX10_9.html</a>) which can cause R tasks to appear to run very slowly when not producing output in the console. Here are ways to avoid it: </p> <ul class="itemize mark-bullet"> <li>Ensure that the console is completely visible (or at least the activity indicator at the top right corner is visible). </li><li>In a Terminal, run <div class="example"> <pre class="example-preformatted">defaults write org.R-project.R NSAppSleepDisabled -bool YES </pre></div> <p>(see <a class="uref" href="https://developer.apple.com/library/archive/releasenotes/MacOSX/WhatsNewInOSX/Articles/MacOSX10_9.html">https://developer.apple.com/library/archive/releasenotes/MacOSX/WhatsNewInOSX/Articles/MacOSX10_9.html</a>). </p></li></ul> <p>Using the <code class="code">X11</code> graphics device or the X11-based versions of <code class="code">View()</code> and <code class="code">edit()</code> for data frames and matrices (the latter are the default for command-line R but not <small class="sc">R.APP</small>) requires <a class="uref" href="https://www.xquartz.org/">XQuartz</a> to be installed. </p> <p>Under some rather nebulous circumstances messages have been seen from <code class="code">fontconfig</code> about missing/unreadable configuration files when using cairo-based devices, especially <code class="code">X11(type = "cairo")</code>. With XQuartz installed there are two <code class="code">fontconfig</code> areas from different versions and it can help to set </p><div class="example"> <pre class="example-preformatted">setenv FONTCONFIG_PATH /opt/X11/lib/X11/fontconfig </pre></div> <p>Another symptom has been that italic/oblique fonts are replaced by upright ones. </p> <hr> </div> <div class="section-level-extent" id="Uninstalling-under-macOS"> <div class="nav-panel"> <p> Next: <a href="#Multiple-versions" accesskey="n" rel="next">Multiple versions</a>, Previous: <a href="#Running-R-under-macOS" accesskey="p" rel="prev">Running R under macOS</a>, Up: <a href="#Installing-R-under-macOS" accesskey="u" rel="up">Installing R under macOS</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Uninstalling-under-macOS-1"><span>4.2 Uninstalling under macOS<a class="copiable-link" href="#Uninstalling-under-macOS-1"> ¶</a></span></h3> <p>R for macOS consists of two parts: the GUI (<small class="sc">R.APP</small>) and the R framework. Un-installation is as simple as removing those folders (e.g. by dragging them onto the Bin<a class="footnote" id="DOCF21" href="#FOOT21"><sup>21</sup></a>). The typical installation will install the GUI into the <samp class="file">/Applications/R.app</samp> folder and the R framework into the <samp class="file">/Library/Frameworks/R.framework</samp> folder. The links to <samp class="file">R</samp> and <samp class="file">Rscript</samp> in <samp class="file">/usr/local/bin</samp> should also be removed. </p> <p>If you want to get rid of R more completely using a Terminal, simply run: </p> <div class="example"> <pre class="example-preformatted">sudo rm -Rf /Library/Frameworks/R.framework /Applications/R.app \ /usr/local/bin/R /usr/local/bin/Rscript </pre></div> <p>The installation consists of up to four Apple packages:<a class="footnote" id="DOCF22" href="#FOOT22"><sup>22</sup></a> for the ‘Apple Silicon’ build, <code class="code">org.R-project.arm64.R.fw.pkg</code>, <code class="code">org.R-project.arm64.R.GUI.pkg</code>, <code class="code">org.r-project.arm64.tcltk</code> and <code class="code">org.r-project.arm64.texinfo</code>. You can use <code class="code">sudo pkgutil --forget</code> if you want the Apple Installer to forget about the package without deleting its files (useful for the R framework when installing multiple R versions in parallel), or after you have deleted the files. <strong class="strong">NB:</strong> the package names are case-sensitive and the R domain is named inconsistently. </p> <p>Uninstalling the Tcl/Tk and Texinfo components (which are installed under <samp class="file">/opt/R/arm64</samp> on a ‘<samp class="samp">arm64</samp>’ build and <samp class="file">/opt/R/x86_64</samp> for an ‘<samp class="samp">x86_64</samp>’ one) is not as simple. You can list the files they installed in a Terminal by e.g. </p> <div class="example"> <pre class="example-preformatted">pkgutil --files org.r-project.arm64.tcltk pkgutil --files org.r-project.arm64.texinfo </pre></div> <p>(For the ‘Intel build, replace <code class="code">arm64</code> by <code class="code">x86_64</code>.) These are paths relative to <samp class="file">/</samp>, the root of the file system. </p> <p>If you are not compiling R nor installing packages from source you could remove all of <samp class="file">/opt/R/arm64</samp> or <samp class="file">/opt/R/x86_64</samp>. </p> <hr> </div> <div class="section-level-extent" id="Multiple-versions"> <div class="nav-panel"> <p> Previous: <a href="#Uninstalling-under-macOS" accesskey="p" rel="prev">Uninstalling under macOS</a>, Up: <a href="#Installing-R-under-macOS" accesskey="u" rel="up">Installing R under macOS</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Multiple-versions-1"><span>4.3 Multiple versions<a class="copiable-link" href="#Multiple-versions-1"> ¶</a></span></h3> <p>The installer will remove any previous version<a class="footnote" id="DOCF23" href="#FOOT23"><sup>23</sup></a> of the R framework which it finds installed. This can be avoided by using <code class="command">pkgutil --forget</code> (see the previous section). However, note that different versions are installed under <samp class="file">/Library/Frameworks/R.framework/Versions</samp> as <samp class="file">4.4-arm64</samp> (or <samp class="file">4.4-x86_64</samp>), <samp class="file">4.3</samp> and so on, so it is not possible to have different ‘<samp class="samp">4.x.y</samp>’ versions installed for the same ‘<samp class="samp">x</samp>’ and CPU type. </p> <p><small class="sc">R.APP</small> will always run the ‘current’ version of R, that is the last installed version. </p> <hr> </div> </div> <div class="chapter-level-extent" id="Running-R"> <div class="nav-panel"> <p> Next: <a href="#Add_002don-packages" accesskey="n" rel="next">Add-on packages</a>, Previous: <a href="#Installing-R-under-macOS" accesskey="p" rel="prev">Installing R under macOS</a>, Up: <a href="#Top" accesskey="u" rel="up">R Installation and Administration</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h2 class="chapter" id="Running-R-1"><span>5 Running R<a class="copiable-link" href="#Running-R-1"> ¶</a></span></h2> <p>How to start R and what command-line options are available is discussed in <a data-manual="R-intro" href="https://cran.r-project.org/doc/manuals/R-intro.html#Invoking-R">Invoking R</a> in <cite class="cite">An Introduction to R</cite>. </p> <p>You should ensure that the shell has set adequate resource limits: R expects a stack size of at least 8MB and to be able to open at least 256 file descriptors. (Any modern OS should have default limits at least as large as these, but apparently NetBSD may not. Use the shell command <code class="command">ulimit</code> (<code class="command">sh</code>/<code class="command">bash</code>) or <code class="command">limit</code> (<code class="command">csh</code>/<code class="command">tcsh</code>) to check.) For some compilers<a class="footnote" id="DOCF24" href="#FOOT24"><sup>24</sup></a> and packages a larger stack size has been needed: 20-25MB has sufficed to date. </p> <p>R makes use of a number of environment variables, the default values of many of which are set in file <samp class="file"><var class="var">R_HOME</var>/etc/Renviron</samp> (there are none set by default on Windows and hence no such file). These are set at <code class="command">configure</code> time, and you would not normally want to <a class="index-entry-id" id="index-R_005fPAPERSIZE-1"></a> change them – a possible exception is <code class="env">R_PAPERSIZE</code> (see <a class="pxref" href="#Setting-paper-size">Setting paper size</a>). The paper size will be deduced from the ‘<samp class="samp">LC_PAPER</samp>’ locale category if it exists and <code class="env">R_PAPERSIZE</code> is unset, and this will normally produce the right choice from ‘<samp class="samp">a4</samp>’ and ‘<samp class="samp">letter</samp>’ on modern Unix-alikes (but can always be overridden by setting <code class="env">R_PAPERSIZE</code>). </p> <p>Various environment variables can be set to determine where R creates its per-session temporary directory. The environment variables <a class="index-entry-id" id="index-TMPDIR-1"></a> <a class="index-entry-id" id="index-TMP"></a> <a class="index-entry-id" id="index-TEMP"></a> <code class="env">TMPDIR</code>, <code class="env">TMP</code> and <code class="env">TEMP</code> are searched in turn and the first one which is set and points to a writable area is used. If none do, the final default is <samp class="file">/tmp</samp> on Unix-alikes and the value of <a class="index-entry-id" id="index-R_005fUSER"></a> <code class="env">R_USER</code> on Windows. The path should be an absolute path not containing spaces<a class="footnote" id="DOCF25" href="#FOOT25"><sup>25</sup></a> (and it is best to avoid non-alphanumeric characters such as <code class="code">+</code> or quotes). </p> <p>Some Unix-alike systems are set up to remove files and directories periodically from <samp class="file">/tmp</samp>, for example by a <code class="command">cron</code> job <a class="index-entry-id" id="index-TMPDIR-2"></a> running <code class="command">tmpwatch</code>. Set <code class="env">TMPDIR</code> to another directory before starting long-running jobs on such a system. </p> <p>Note that <code class="env">TMPDIR</code> will be used to execute <code class="command">configure</code> scripts when installing packages, so if <samp class="file">/tmp</samp> has been mounted as ‘<samp class="samp">noexec</samp>’, <code class="env">TMPDIR</code> needs to be set to a directory from which execution is allowed. </p> <hr> </div> <div class="chapter-level-extent" id="Add_002don-packages"> <div class="nav-panel"> <p> Next: <a href="#Internationalization" accesskey="n" rel="next">Internationalization and Localization</a>, Previous: <a href="#Running-R" accesskey="p" rel="prev">Running R</a>, Up: <a href="#Top" accesskey="u" rel="up">R Installation and Administration</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h2 class="chapter" id="Add_002don-packages-1"><span>6 Add-on packages<a class="copiable-link" href="#Add_002don-packages-1"> ¶</a></span></h2> <a class="index-entry-id" id="index-Packages"></a> <a class="index-entry-id" id="index-Libraries"></a> <p>It is helpful to use the correct terminology. A <em class="emph">package</em> is loaded from a <em class="emph">library</em> by the function <code class="code">library()</code>. Thus a library is a directory containing installed packages; the main library is <samp class="file"><var class="var">R_HOME</var>/library</samp>, but others can be used, for example by <a class="index-entry-id" id="index-R_005fLIBS"></a> setting the environment variable <code class="env">R_LIBS</code> or using the R function <code class="code">.libPaths()</code>. To avoid any confusion you will often see a library directory referred to as a ‘library tree’. </p> <ul class="mini-toc"> <li><a href="#Default-packages" accesskey="1">Default packages</a></li> <li><a href="#Managing-libraries" accesskey="2">Managing libraries</a></li> <li><a href="#Installing-packages" accesskey="3">Installing packages</a></li> <li><a href="#Updating-packages" accesskey="4">Updating packages</a></li> <li><a href="#Removing-packages" accesskey="5">Removing packages</a></li> <li><a href="#Setting-up-a-package-repository" accesskey="6">Setting up a package repository</a></li> <li><a href="#Checking-installed-source-packages" accesskey="7">Checking installed source packages</a></li> </ul> <hr> <div class="section-level-extent" id="Default-packages"> <div class="nav-panel"> <p> Next: <a href="#Managing-libraries" accesskey="n" rel="next">Managing libraries</a>, Previous: <a href="#Add_002don-packages" accesskey="p" rel="prev">Add-on packages</a>, Up: <a href="#Add_002don-packages" accesskey="u" rel="up">Add-on packages</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Default-packages-1"><span>6.1 Default packages<a class="copiable-link" href="#Default-packages-1"> ¶</a></span></h3> <a class="index-entry-id" id="index-Packages_002c-default"></a> <p>The set of packages loaded on startup is by default </p> <div class="example"> <pre class="example-preformatted">> getOption("defaultPackages") [1] "datasets" "utils" "grDevices" "graphics" "stats" "methods" </pre></div> <p>(plus, of course, <strong class="strong">base</strong>) and this can be changed by setting the option in startup code (e.g. in <samp class="file">~/.Rprofile</samp>). It is initially <a class="index-entry-id" id="index-R_005fDEFAULT_005fPACKAGES"></a> set to the value of the environment variable <code class="env">R_DEFAULT_PACKAGES</code> if set (as a comma-separated list). Setting <code class="env">R_DEFAULT_PACKAGES=NULL</code> ensures that only package <strong class="strong">base</strong> is loaded. </p> <p>Changing the set of default packages is normally used to reduce the set for speed when scripting: in particular not using <strong class="strong">methods</strong> will reduce the start-up time by a factor of up to two. But it can also be used to customize R, e.g. for class use. <code class="command">Rscript</code> also checks the environment variable <code class="env">R_SCRIPT_DEFAULT_PACKAGES</code>; <a class="index-entry-id" id="index-R_005fSCRIPT_005fDEFAULT_005fPACKAGES"></a> if set, this takes precedence over <code class="env">R_DEFAULT_PACKAGES</code>. </p> <hr> </div> <div class="section-level-extent" id="Managing-libraries"> <div class="nav-panel"> <p> Next: <a href="#Installing-packages" accesskey="n" rel="next">Installing packages</a>, Previous: <a href="#Default-packages" accesskey="p" rel="prev">Default packages</a>, Up: <a href="#Add_002don-packages" accesskey="u" rel="up">Add-on packages</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Managing-libraries-1"><span>6.2 Managing libraries<a class="copiable-link" href="#Managing-libraries-1"> ¶</a></span></h3> <a class="index-entry-id" id="index-Libraries_002c-managing"></a> <p>R packages are installed into <em class="emph">libraries</em>, which are directories in the file system containing a subdirectory for each package installed there. </p> <p>R comes with a single library, <samp class="file"><var class="var">R_HOME</var>/library</samp> which is the value of the R object ‘<samp class="samp">.Library</samp>’ containing the standard and recommended<a class="footnote" id="DOCF26" href="#FOOT26"><sup>26</sup></a> packages. Both sites and users can create others and make use of them (or not) in an R session. At the lowest level ‘<samp class="samp">.libPaths()</samp>’ can be used to add paths to the collection of libraries or to report the current collection. </p> <a class="index-entry-id" id="index-Libraries_002c-site"></a> <a class="index-entry-id" id="index-Site-libraries"></a> <p>R will automatically make use of a site-specific library <samp class="file"><var class="var">R_HOME</var>/site-library</samp> if this exists (it does not in a vanilla R installation). This location can be overridden by setting<a class="footnote" id="DOCF27" href="#FOOT27"><sup>27</sup></a> ‘<samp class="samp">.Library.site</samp>’ in <samp class="file"><var class="var">R_HOME</var>/etc/Rprofile.site</samp>, or (not recommended) by setting the <a class="index-entry-id" id="index-R_005fLIBS_005fSITE"></a> environment variable <code class="env">R_LIBS_SITE</code>. </p> <a class="index-entry-id" id="index-Libraries_002c-user"></a> <a class="index-entry-id" id="index-User-libraries"></a> <a class="index-entry-id" id="index-R_005fLIBS_005fUSER"></a> <p>Users can have one or more libraries, normally specified by the environment variable <code class="env">R_LIBS_USER</code>. This has a default value (to see it, use ‘<samp class="samp">Sys.getenv("R_LIBS_USER")</samp>’ within an R session), but that is only used if the corresponding directory actually exists (which by default it will not). </p> <p>Both <code class="env">R_LIBS_USER</code> and <code class="env">R_LIBS_SITE</code> can specify multiple library paths, separated by colons (semicolons on Windows). </p> <hr> </div> <div class="section-level-extent" id="Installing-packages"> <div class="nav-panel"> <p> Next: <a href="#Updating-packages" accesskey="n" rel="next">Updating packages</a>, Previous: <a href="#Managing-libraries" accesskey="p" rel="prev">Managing libraries</a>, Up: <a href="#Add_002don-packages" accesskey="u" rel="up">Add-on packages</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Installing-packages-1"><span>6.3 Installing packages<a class="copiable-link" href="#Installing-packages-1"> ¶</a></span></h3> <a class="index-entry-id" id="index-Packages_002c-installing"></a> <p>Packages may be distributed in source form or compiled binary form. Installing source packages which contain C/C++/Fortran code requires that compilers and related tools be installed. Binary packages are platform-specific and generally need no special tools to install, but see the documentation for your platform for details. </p> <p>Note that you may need to specify implicitly or explicitly the library to which the package is to be installed. This is only an issue if you have more than one library, of course. </p> <a class="index-entry-id" id="index-TMPDIR-3"></a> <p>Ensure that the environment variable <code class="env">TMPDIR</code> is either unset (and <samp class="file">/tmp</samp> exists and can be written in and executed from) or is the absolute path to a valid temporary directory, not containing spaces. </p> <p>For most users it suffices to call ‘<samp class="samp">install.packages(<var class="var">pkgname</var>)</samp>’ or its GUI equivalent if the intention is to install a <abbr class="acronym">CRAN</abbr> package and internet access is available.<a class="footnote" id="DOCF28" href="#FOOT28"><sup>28</sup></a> On most systems ‘<samp class="samp">install.packages()</samp>’ will allow packages to be selected from a list box (typically with thousands of items). </p> <p>To install packages from source on a Unix-alike use in a terminal </p> <div class="example"> <pre class="example-preformatted">R CMD INSTALL -l /path/to/library <var class="var">pkg1</var> <var class="var">pkg2</var> ... </pre></div> <p>The part ‘<samp class="samp">-l /path/to/library</samp>’ can be omitted, in which case the first library of a normal R session is used (that shown by <code class="code">.libPaths()[1]</code>). </p> <p>There are a number of options available: use <code class="code">R CMD INSTALL --help</code> to see the current list. </p> <a class="index-entry-id" id="index-install_002epackages"></a> <p>Alternatively, packages can be downloaded and installed from within R. First choose your nearest <abbr class="acronym">CRAN</abbr> mirror using <code class="command">chooseCRANmirror()</code>. Then download and install packages <strong class="strong">pkg1</strong> and <strong class="strong">pkg2</strong> by </p> <div class="example"> <pre class="example-preformatted">> install.packages(c("pkg1", "pkg2")) </pre></div> <p>The essential dependencies of the specified packages will also be fetched. Unless the library is specified (argument <code class="code">lib</code>) the first library in the library search path is used: if this is not writable, R will ask the user (in an interactive session) if the default personal library should be created, and if allowed to will install the packages there. </p> <p>If you want to fetch a package and all those it depends on (in any way) that are not already installed, use e.g. </p> <div class="example"> <pre class="example-preformatted">> install.packages("Rcmdr", dependencies = TRUE) </pre></div> <p><code class="code">install.packages</code> can install a source package from a local <samp class="file">.tar.gz</samp> file (or a URL to such a file) by setting argument <code class="code">repos</code> to <code class="code">NULL</code>: this will be selected automatically if the name given is a single <samp class="file">.tar.gz</samp> file. </p> <p><code class="code">install.packages</code> can look in several repositories, specified as a character vector by the argument <code class="code">repos</code>: these can include a <abbr class="acronym">CRAN</abbr> mirror, Bioconductor, R-forge, rforge.net, local archives, local files, …). Function <code class="code">setRepositories()</code> can select amongst those repositories that the R installation is aware of. </p> <p>Something which sometimes puzzles users is that <code class="code">install.packages()</code> may report that a package which they believe should be available is not found. Some possible reasons: </p><ul class="itemize mark-bullet"> <li>The package, such as <strong class="strong">grid</strong> or <strong class="strong">tcltk</strong>, is part of R itself and not otherwise available. </li><li>The package is not in the available repositories, so check which have been selected by <div class="example"> <pre class="example-preformatted">getOption("repos") </pre></div> </li><li>The package is available, but not for the current version of R or for the type of OS (Unix/Windows). To retrieve the information on available versions of package <code class="code"><var class="var">pkg</var></code>, use <div class="example"> <pre class="example-preformatted">av <- available.packages(filters=list()) av[av[, "Package"] == <var class="var">pkg</var>, ] </pre></div> <p>in your R session, and look at the ‘<samp class="samp">Depends</samp>’ and ‘<samp class="samp">OS_type</samp>’ fields (there may be more than one matching entry). If the package depends on a version of R later than the one in use, it is possible that an earlier version is available which will work with your version of R: for <abbr class="acronym">CRAN</abbr> look for ‘Old sources’ on the package’s <abbr class="acronym">CRAN</abbr> landing page and manually retrieve an appropriate version (of comparable age to your version of R). </p></li></ul> <p>Naive users sometimes forget that as well as installing a package, they have to use <code class="code">library</code> to make its functionality available. </p> <ul class="mini-toc"> <li><a href="#Windows-packages" accesskey="1">Windows</a></li> <li><a href="#macOS-packages" accesskey="2">macOS</a></li> <li><a href="#Customizing-package-compilation" accesskey="3">Customizing package compilation</a></li> <li><a href="#Multiple-sub_002darchitectures" accesskey="4">Multiple sub-architectures</a></li> <li><a href="#Byte_002dcompilation" accesskey="5">Byte-compilation</a></li> <li><a href="#External-software" accesskey="6">External software</a></li> </ul> <hr> <div class="subsection-level-extent" id="Windows-packages"> <div class="nav-panel"> <p> Next: <a href="#macOS-packages" accesskey="n" rel="next">macOS</a>, Previous: <a href="#Installing-packages" accesskey="p" rel="prev">Installing packages</a>, Up: <a href="#Installing-packages" accesskey="u" rel="up">Installing packages</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="Windows"><span>6.3.1 Windows<a class="copiable-link" href="#Windows"> ¶</a></span></h4> <p>What <code class="code">install.packages</code> does by default is different on Unix-alikes (except macOS) and Windows. On Unix-alikes it consults the list of available <em class="emph">source</em> packages on <abbr class="acronym">CRAN</abbr> (or other repositories), downloads the latest version of the package sources, and installs them (via <code class="code">R CMD INSTALL</code>). On ‘<samp class="samp">x86_64</samp>’ Windows it looks (by default) first at the list of <em class="emph">binary</em> versions of packages available for your version of R and downloads the latest versions (if any). If no binary version is available or the source version is newer, it will install the source versions of packages without compiled C/C++/Fortran code, and offer to do so for those with, if <code class="command">make</code> is available (and this can be tuned by option <code class="code">"install.packages.compile.from.source"</code>). </p> <p>[At present binary packages are not distributed for ‘<samp class="samp">aarch64</samp>’ Windows, so most of this subsection only applies to ‘<samp class="samp">x86_64</samp>’.] </p> <p>On Windows <code class="code">install.packages</code> can also install a binary package from a local <samp class="file">zip</samp> file (or the URL of such a file) by setting argument <code class="code">repos</code> to <code class="code">NULL</code>. <code class="code">Rgui.exe</code> has a menu <code class="code">Packages</code> with a GUI interface to <code class="code">install.packages</code>, <code class="code">update.packages</code> and <code class="code">library</code>. </p> <p>Windows binary packages for R were distributed as a single binary containing either or both architectures (32- and 64-bit). Prior to R 4.2.0, they might contain only the 32-bit architecture. </p> <p><code class="command">R CMD INSTALL</code> works in Windows to install source packages. No additional tools are needed if the package does not contain compiled code, and <code class="code">install.packages(type="source")</code> will work for such packages. Those with compiled code need the tools (see <a class="ref" href="#The-Windows-toolset">The Windows toolset</a>). The tools are found automatically by R when installed by the toolset installer. See <a class="uref" href="https://cran.r-project.org/bin/windows/base/howto-R-devel.html">Building R and packages</a> for more details. </p> <p>Occasional permission problems after unpacking source packages have been seen on some systems: these have been circumvented by setting the environment variable <code class="env">R_INSTALL_TAR</code> to ‘<samp class="samp">tar.exe</samp>’. <a class="index-entry-id" id="index-R_005fINSTALL_005fTAR"></a> </p> <p>If you have only a source package that is known to work with current R and just want a binary Windows build of it, you could make use of the building service offered at <a class="uref" href="https://win-builder.r-project.org/">https://win-builder.r-project.org/</a>. </p> <p>For almost all packages <code class="command">R CMD INSTALL</code> will attempt to install both 32- and 64-bit builds of a package if run from a 32/64-bit install of R (only 64-bit builds and installs are supported since R 4.2.0). It will report success if the installation of the architecture of the running <code class="command">R</code> succeeded, whether or not the other architecture was successfully installed. The exceptions are packages with a non-empty <samp class="file">configure.win</samp> script or which make use of <samp class="file">src/Makefile.win</samp>. If <samp class="file">configure.win</samp> does something appropriate to both architectures use<a class="footnote" id="DOCF29" href="#FOOT29"><sup>29</sup></a> option <samp class="option">--force-biarch</samp>: otherwise <code class="command">R CMD INSTALL --merge-multiarch</code> can be applied to a source tarball to merge separate 32- and 64-bit installs. (This can only be applied to a tarball, and will only succeed if both installs succeed.) </p> <p>If you have a package without compiled code and no Windows-specific help, you can zip up an installation on another OS and install from that zip file on Windows. However, such a package can be installed from the sources on Windows without any additional tools. </p> <hr> </div> <div class="subsection-level-extent" id="macOS-packages"> <div class="nav-panel"> <p> Next: <a href="#Customizing-package-compilation" accesskey="n" rel="next">Customizing package compilation</a>, Previous: <a href="#Windows-packages" accesskey="p" rel="prev">Windows</a>, Up: <a href="#Installing-packages" accesskey="u" rel="up">Installing packages</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="macOS-1"><span>6.3.2 macOS<a class="copiable-link" href="#macOS-1"> ¶</a></span></h4> <p>On macOS <code class="code">install.packages</code> works as it does on other Unix-alike systems, but there is an additional type <code class="code">mac.binary</code> (available for the <abbr class="acronym">CRAN</abbr> distribution but not when compiling R from source) which can be passed to <code class="code">install.packages</code> in order to download and install binary packages from a suitable repository. These binary package files for macOS have the extension ‘<samp class="samp">.tgz</samp>’. The <small class="sc">R.APP</small> GUI provides menus for installation of either binary or source packages, from <abbr class="acronym">CRAN</abbr>, other repositories or local files. </p> <p>On R builds using binary packages, the default is type <code class="code">both</code>: this looks first at the list of binary packages available for your version of R and installs the latest versions (if any). If no binary version is available or the source version is newer, it will install the source versions of packages without compiled C/C++/Fortran code and offer to do so for those with, if <code class="command">make</code> is available. </p> <p>Note that most binary packages which include compiled code are tied to a particular series (e.g. R 4.4.x or 4.3.x) of R. </p> <p>Installing source packages which do not contain compiled code should work with no additional tools. For others you will need the ‘Command Line Tools’ for <code class="command">Xcode</code> and compilers which match those used to build R, plus a Fortran compiler for packages which contain Fortran code: see <a class="ref" href="#macOS">macOS</a>. Packages with C/C++ source code which link to Fortran libraries (which include the <abbr class="acronym">BLAS</abbr> and <abbr class="acronym">LAPACK</abbr> libraries) will need either the Fortran compiler or, for <abbr class="acronym">CRAN</abbr> binary distributions of R, to specify </p><div class="example"> <pre class="example-preformatted">FLIBS = -L/Library/Frameworks/R.framework/Resources/lib -lgfortran -lquadmath </pre></div> <p>in a <samp class="file">Makevars</samp> file (see the next section) to point to the Fortran libraries in the binary distribution. </p> <p>Package <a class="url" href="https://CRAN.R-project.org/package=rJava"><strong class="strong">rJava</strong></a> and those which depend on it need a Java runtime installed and several packages need X11 installed, including those using Tk. See <a class="ref" href="#macOS">macOS</a> and <a class="ref" href="#Java-_0028macOS_0029">Java</a>. Package <a class="url" href="https://CRAN.R-project.org/package=rjags"><strong class="strong">rjags</strong></a> needs a build of JAGS installed under <samp class="file">/usr/local</samp>, such as those at <a class="uref" href="https://sourceforge.net/projects/mcmc-jags/files/JAGS/4.x/Mac%20OS%20X/">https://sourceforge.net/projects/mcmc-jags/files/JAGS/4.x/Mac%20OS%20X/</a>. </p> <p>Tcl/Tk extension <code class="code">BWidget</code> used to be distributed with R but no longer is; <code class="code">Tktable</code> has been distributed with recent versions of R. </p> <p>The default compilers specified are shown in file <samp class="file">/Library/Frameworks/R.framework/Resources/etc/Makeconf</samp>. At the time of writing those settings assumed that the C, Fortran and C++ compilers were on the path (see <a class="ref" href="#macOS">macOS</a>). The settings can be changed, either by editing that file or in a file such as <samp class="file">~/.R/Makevars</samp> (see the next section). Entries which may need to be changed include ‘<samp class="samp">CC</samp>’, ‘<samp class="samp">CXX</samp>’, ‘<samp class="samp">FC</samp>’, ‘<samp class="samp">FLIBS</samp>’ and the corresponding flags, and perhaps ‘<samp class="samp">CXXCPP</samp>’, ‘<samp class="samp">DYLIB_LD</samp>’, ‘<samp class="samp">MAIN_LD</samp>’, ‘<samp class="samp">SHLIB_CXXLD</samp>’ and ‘<samp class="samp">SHLIB_LD</samp>’, as well as their ‘<samp class="samp">CXX11</samp>’, ‘<samp class="samp">CXX14</samp>’, ‘<samp class="samp">CXX17</samp>’ and ‘<samp class="samp">CXX20</samp>’ variants. </p> <p>So for example you could select a specific LLVM <code class="command">clang</code> for both C and C++ with extensive checking by having in <samp class="file">~/.R/Makevars</samp> </p><div class="example"> <pre class="example-preformatted">SDK=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk CC = /usr/local/clang/bin/clang -isysroot $(SDK) CXX = /usr/local/clang/bin/clang++ -isysroot $(SDK) CXX11 = $CXX CXX14 = $CXX CXX17 = $CXX CXX20 = $CXX CXX23 = $CXX CFLAGS = -g -O2 -Wall -pedantic -Wconversion -Wno-sign-conversion CXXFLAGS = -g -O2 -Wall -pedantic -Wconversion -Wno-sign-conversion CXX11FLAGS = $CXXFLAGS CXX14FLAGS = $CXXFLAGS CXX17FLAGS = $CXXFLAGS CXX20FLAGS = $CXXFLAGS CXX23FLAGS = $CXXFLAGS </pre></div> <p>(the current SDK can be found by running <code class="command">xcrun -show-sdk-path</code>) and for the current macOS distribution of <code class="command">gfortran</code> at <a class="uref" href="https://mac.r-project.org/tools/">https://mac.r-project.org/tools/</a> </p><div class="example"> <pre class="example-preformatted">FC = /opt/gfortran/bin/gfortran (arm64) FLIBS = -L/opt/gfortran/lib/gcc/aarch64-apple-darwin20.0/12.2.0 -L/opt/gfortran/lib -lgfortran -lemutls_w -lquadmath (Intel) FLIBS = -L/opt/gfortran/lib/gcc/x86_64-apple-darwin20.0/12.2.0 -L/opt/gfortran/lib -lgfortran -lquadmath </pre></div> <p>(line broken here for the manual only). </p> <p>If that <code class="command">clang</code> build supports <abbr class="abbr">OpenMP</abbr>, you can add </p><div class="example"> <pre class="example-preformatted">SHLIB_OPENMP_CFLAGS = -fopenmp SHLIB_OPENMP_CXXFLAGS = -fopenmp </pre></div> <p>to compile <abbr class="abbr">OpenMP</abbr>-using packages. It will also be necessary to arrange for the <code class="code">libomp.dylib</code> library to be found at both install time and run time, for example by copying/linking it somewhere that is searched such as <samp class="file">/usr/local/lib</samp>. </p> <p>Apple includes many Open Source libraries in macOS but increasingly without the corresponding headers (not even in Xcode nor the Command Line Tools): they are often rather old versions. If installing packages from source using them it is usually easiest to install a statically-linked up-to-date copy of the Open Source package from its sources or from <a class="uref" href="https://mac.r-project.org/bin/">https://mac.r-project.org/bin/</a>. But sometimes it is desirable/necessary to use Apple’s dynamically linked library, in which case appropriate headers could be extracted from the sources<a class="footnote" id="DOCF30" href="#FOOT30"><sup>30</sup></a> available <em class="emph">via</em> <a class="uref" href="https://opensource.apple.com/releases">https://opensource.apple.com/releases</a> – this has been used for <code class="code">iodbc</code>. </p> <p>Some care may be needed with selecting compilers when installing external software for use with packages. The ‘system’ compilers as used when building R are <code class="command">clang</code> and <code class="command">clang++</code>, but the Apple toolchain also provides compilers called <code class="command">gcc</code> and <code class="command">g++</code> which despite their names are based on LLVM and <code class="code">libc++</code> like the system ones and which behave in almost the same way as the system ones. Most Open Source software has a <code class="command">configure</code> script developed using GNU <code class="command">autoconf</code> and hence will select <code class="command">gcc</code> and <code class="command">g++</code> as the default compilers: this usually works fine. For consistency one can use </p> <div class="example"> <pre class="example-preformatted">./configure CC=clang CFLAGS=-O2 CXX=clang++ CXXFLAGS=-O2 </pre></div> <p>(avoiding <code class="command">autoconf</code>’s default <samp class="option">-g</samp>). As from R 4.3.0, <code class="command">R CMD INSTALL</code> and <code class="code">install.packages()</code> try to invoke <code class="command">configure</code> with the same compilers and flags used to build R. </p> <hr> </div> <div class="subsection-level-extent" id="Customizing-package-compilation"> <div class="nav-panel"> <p> Next: <a href="#Multiple-sub_002darchitectures" accesskey="n" rel="next">Multiple sub-architectures</a>, Previous: <a href="#macOS-packages" accesskey="p" rel="prev">macOS</a>, Up: <a href="#Installing-packages" accesskey="u" rel="up">Installing packages</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="Customizing-package-compilation-1"><span>6.3.3 Customizing package compilation<a class="copiable-link" href="#Customizing-package-compilation-1"> ¶</a></span></h4> <p>The R system and package-specific compilation flags can be overridden or added to by setting the appropriate Make variables in the personal file <samp class="file"><var class="var">HOME</var>/.R/Makevars-<var class="var">R_PLATFORM</var></samp> (but <samp class="file"><var class="var">HOME</var>/.R/Makevars.win</samp> or <samp class="file"><var class="var">HOME</var>/.R/Makevars.win64</samp> on Windows), or if that does not exist, <samp class="file"><var class="var">HOME</var>/.R/Makevars</samp>, where ‘<samp class="samp">R_PLATFORM</samp>’ is the platform for which R was built, as available in the <code class="code">platform</code> component of the R variable <code class="code">R.version</code>. The full path to an alternative personal file<a class="footnote" id="DOCF31" href="#FOOT31"><sup>31</sup></a> can be specified <em class="emph">via</em> the environment variable <code class="env">R_MAKEVARS_USER</code>. </p> <p>Package developers are encouraged to use this mechanism to enable a reasonable amount of diagnostic messaging (“warnings”) when compiling, such as e.g. <samp class="option">-Wall -pedantic</samp> for tools from GCC, the GNU Compiler Collection, and for LLVM (<code class="command">clang</code> and <code class="command">flang-new</code>). </p> <p>Note that this mechanism can also be used when it is necessary to change the optimization level whilst installing a particular package. For example </p> <div class="example"> <pre class="example-preformatted">## <span class="r">for C code</span> CFLAGS = -g -O -mtune=native ## <span class="r">for C++ code</span> CXXFLAGS = -g -O -mtune=native ## <span class="r">for C++11 code</span> CXX11FLAGS = -g -O -mtune=native ## <span class="r">for fixed-form Fortran code</span> FFLAGS = -g -O -mtune=native ## <span class="r">for C17 code</span> C17FLAGS = -g -O -mtune=native -Wno-strict-prototypes </pre></div> <p>Note that if you have specified a non-default C++ or C standard, you need to set the flag(s) appropriate to that standard. </p> <p>Another use is to override the settings in a binary installation of R. For example, for the current distribution of <code class="command">gfortran</code> at <a class="uref" href="https://mac.r-project.org/tools/">https://mac.r-project.org/tools/</a> </p> <div class="example"> <pre class="example-preformatted">FC = /opt/gfortran/bin/gfortran (arm64) FLIBS = -L/opt/gfortran/lib/gcc/aarch64-apple-darwin20.0/12.2.0 -L/opt/gfortran/lib -lgfortran -lemutls_w -lquadmath (Intel) FLIBS = -L/opt/gfortran/lib/gcc/x86_64-apple-darwin20.0/12.2.0 -L/opt/gfortran/lib -lgfortran -lquadmath </pre></div> <p>(line broken here for the manual only). </p> <p>There is also provision for a site-wide <samp class="file">Makevars.site</samp> file under <samp class="file"><var class="var">R_HOME</var>/etc</samp> (in a sub-architecture-specific directory if appropriate). This is read immediately after <samp class="file">Makeconf</samp>, and the path to an alternative file can be specified by environment variable <code class="env">R_MAKEVARS_SITE</code>. </p> <p>Note that these mechanisms do not work with packages which fail to pass settings down to sub-makes, perhaps reading <samp class="file">etc/Makeconf</samp> in makefiles in subdirectories. Fortunately such packages are unusual. </p> <hr> </div> <div class="subsection-level-extent" id="Multiple-sub_002darchitectures"> <div class="nav-panel"> <p> Next: <a href="#Byte_002dcompilation" accesskey="n" rel="next">Byte-compilation</a>, Previous: <a href="#Customizing-package-compilation" accesskey="p" rel="prev">Customizing package compilation</a>, Up: <a href="#Installing-packages" accesskey="u" rel="up">Installing packages</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="Multiple-sub_002darchitectures-1"><span>6.3.4 Multiple sub-architectures<a class="copiable-link" href="#Multiple-sub_002darchitectures-1"> ¶</a></span></h4> <p>When installing packages from their sources, there are some extra considerations on installations which use sub-architectures. These were commonly used on Windows prior to R 4.2.0 but can in principle be used on other platforms. </p> <p>When a source package is installed by a build of R which supports multiple sub-architectures, the normal installation process installs the packages for all sub-architectures. The exceptions are </p> <dl class="table"> <dt><em class="emph">Unix-alikes</em></dt> <dd> <p>where there is an <samp class="file">configure</samp> script, or a file <samp class="file">src/Makefile</samp>. </p> </dd> <dt><em class="emph">Windows</em></dt> <dd> <p>where there is a non-empty <samp class="file">configure.win</samp> script, or a file <samp class="file">src/Makefile.win</samp> (with some exceptions where the package is known to have an architecture-independent <samp class="file">configure.win</samp>, or if <samp class="option">--force-biarch</samp> or field ‘<samp class="samp">Biarch</samp>’ in the <samp class="file">DESCRIPTION</samp> file is used to assert so). </p> </dd> </dl> <p>In those cases only the current architecture is installed. Further sub-architectures can be installed by </p> <div class="example"> <pre class="example-preformatted">R CMD INSTALL --libs-only <var class="var">pkg</var> </pre></div> <p>using the path to <code class="command">R</code> or <code class="command">R --arch</code> to select the additional sub-architecture. There is also <code class="command">R CMD INSTALL --merge-multiarch</code> to build and merge the two architectures, starting with a source tarball. </p> <hr> </div> <div class="subsection-level-extent" id="Byte_002dcompilation"> <div class="nav-panel"> <p> Next: <a href="#External-software" accesskey="n" rel="next">External software</a>, Previous: <a href="#Multiple-sub_002darchitectures" accesskey="p" rel="prev">Multiple sub-architectures</a>, Up: <a href="#Installing-packages" accesskey="u" rel="up">Installing packages</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="Byte_002dcompilation-1"><span>6.3.5 Byte-compilation<a class="copiable-link" href="#Byte_002dcompilation-1"> ¶</a></span></h4> <p>Packages are by default byte-compiled on installation. Byte-compilation can be controlled on a per-package basis by the ‘<samp class="samp">ByteCompile</samp>’ field in the <samp class="file">DESCRIPTION</samp> file. </p> <hr> </div> <div class="subsection-level-extent" id="External-software"> <div class="nav-panel"> <p> Previous: <a href="#Byte_002dcompilation" accesskey="p" rel="prev">Byte-compilation</a>, Up: <a href="#Installing-packages" accesskey="u" rel="up">Installing packages</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="External-software-1"><span>6.3.6 External software<a class="copiable-link" href="#External-software-1"> ¶</a></span></h4> <p>Some R packages contain compiled code which links to external software libraries. Unless the external library is statically linked (which is done as much as possible for binary packages on Windows and macOS), the libraries have to be found when the package is loaded and not just when it is installed. How this should be done depends on the OS (and in some cases the version). </p> <p>For Unix-alikes except macOS the primary mechanism is the <code class="code">ld.so</code> cache controlled by <code class="command">ldconfig</code>: external dynamic libraries recorded in that cache will be found. Standard library locations will be covered by the cache, and well-designed software will add its locations (as for example <strong class="strong">openmpi</strong> does on Fedora). The secondary mechanism is to consult the environment variable <code class="env">LD_LIBRARY_PATH</code>. The R script controls that variable, and sets it to the concatenation of <code class="env">R_LD_LIBRARY_PATH</code>, <code class="env">R_JAVA_LD_LIBRARY_PATH</code> and the environment value of <code class="env">LD_LIBRARY_PATH</code>. The first two have defaults which are normally set when R is installed (but can be overridden in the environment) so <code class="env">LD_LIBRARY_PATH</code> is the best choice for a user to set. </p> <p>On macOS the primary mechanism is to embed the absolute path to dependent dynamic libraries into an object when it is compiled. Few R packages arrange to do so, but it can be edited<a class="footnote" id="DOCF32" href="#FOOT32"><sup>32</sup></a> <em class="emph">via</em> <code class="command">install_name_tool</code> — that only deals with direct dependencies and those would also need to be compiled to include the absolute paths of their dependencies. If the choice of absolute path is to be deferred to load time, how they are resolved is described in <code class="command">man dyld</code>: the role of <code class="env">LD_LIBRARY_PATH</code> is replaced on macOS by <code class="env">DYLD_LIBRARY_PATH</code> and <code class="env">DYLD_FALLBACK_LIBRARY_PATH</code>. Running <code class="command">R CMD otool -L</code> on the package shared object will show where (if anywhere) its dependencies are resolved. <code class="env">DYLD_FALLBACK_LIBRARY_PATH</code> is preferred (and it is that which is manipulated by the R script), but as from 10.11 (‘El Capitan’) the default behaviour had been changed for security reasons to discard these environment variables when invoking a shell script (and <samp class="file">R</samp> is a shell script). That makes the only portable option to set <code class="env">R_LD_LIBRARY_PATH</code> in the environment, something like </p> <div class="example"> <pre class="example-preformatted">export R_LD_LIBRARY_PATH="`R RHOME`/lib:/opt/local/lib" </pre></div> <p>The precise rules for where Windows looks for DLLs are complex and depend on the version of Windows. But for present purposes the main solution is to put the directories containing the DLLs the package links to (and any those DLLs link to) on the <code class="env">PATH</code>. </p> <p>The danger with any of the methods which involve setting environment variables is of inadvertently masking a system library. This is less for <code class="env">DYLD_FALLBACK_LIBRARY_PATH</code> and for <em class="emph">appending</em> to <code class="env">PATH</code> on Windows (as it should already contain the system library paths). </p> <hr> </div> </div> <div class="section-level-extent" id="Updating-packages"> <div class="nav-panel"> <p> Next: <a href="#Removing-packages" accesskey="n" rel="next">Removing packages</a>, Previous: <a href="#Installing-packages" accesskey="p" rel="prev">Installing packages</a>, Up: <a href="#Add_002don-packages" accesskey="u" rel="up">Add-on packages</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Updating-packages-1"><span>6.4 Updating packages<a class="copiable-link" href="#Updating-packages-1"> ¶</a></span></h3> <a class="index-entry-id" id="index-update_002epackages"></a> <a class="index-entry-id" id="index-Packages_002c-updating"></a> <p>The command <code class="code">update.packages()</code> is the simplest way to ensure that all the packages on your system are up to date. It downloads the list of available packages and their current versions, compares it with those installed and offers to fetch and install any that have later versions on the repositories. </p> <p>An alternative interface to keeping packages up-to-date is provided by the command <code class="code">packageStatus()</code>, which returns an object with information on all installed packages and packages available at multiple repositories. The <code class="code">print</code> and <code class="code">summary</code> methods give an overview of installed and available packages, the <code class="code">upgrade</code> method offers to fetch and install the latest versions of outdated packages. </p> <p>One sometimes-useful additional piece of information that <code class="code">packageStatus()</code> returns is the status of a package, as <code class="code">"ok"</code>, <code class="code">"upgrade"</code> or <code class="code">"unavailable"</code> (in the currently selected repositories). For example </p> <div class="example"> <pre class="example-preformatted">> inst <- packageStatus()$inst > inst[inst$Status != "ok", c("Package", "Version", "Status")] Package Version Status Biobase Biobase 2.8.0 unavailable RCurl RCurl 1.4-2 upgrade Rgraphviz Rgraphviz 1.26.0 unavailable rgdal rgdal 0.6-27 upgrade </pre></div> <hr> </div> <div class="section-level-extent" id="Removing-packages"> <div class="nav-panel"> <p> Next: <a href="#Setting-up-a-package-repository" accesskey="n" rel="next">Setting up a package repository</a>, Previous: <a href="#Updating-packages" accesskey="p" rel="prev">Updating packages</a>, Up: <a href="#Add_002don-packages" accesskey="u" rel="up">Add-on packages</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Removing-packages-1"><span>6.5 Removing packages<a class="copiable-link" href="#Removing-packages-1"> ¶</a></span></h3> <a class="index-entry-id" id="index-remove_002epackages"></a> <a class="index-entry-id" id="index-Packages_002c-removing"></a> <p>Packages can be removed in a number of ways. From a command prompt they can be removed by </p> <div class="example"> <pre class="example-preformatted">R CMD REMOVE -l /path/to/library <var class="var">pkg1</var> <var class="var">pkg2</var> ... </pre></div> <p>From a running R process they can be removed by </p> <div class="example"> <pre class="example-preformatted">> remove.packages(c("pkg1", "pkg2"), lib = file.path("path", "to", "library")) </pre></div> <p>Finally, one can just remove the package directory from the library. </p> <hr> </div> <div class="section-level-extent" id="Setting-up-a-package-repository"> <div class="nav-panel"> <p> Next: <a href="#Checking-installed-source-packages" accesskey="n" rel="next">Checking installed source packages</a>, Previous: <a href="#Removing-packages" accesskey="p" rel="prev">Removing packages</a>, Up: <a href="#Add_002don-packages" accesskey="u" rel="up">Add-on packages</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Setting-up-a-package-repository-1"><span>6.6 Setting up a package repository<a class="copiable-link" href="#Setting-up-a-package-repository-1"> ¶</a></span></h3> <a class="index-entry-id" id="index-Repositories"></a> <p>Utilities such as <code class="code">install.packages</code> can be pointed at any <abbr class="acronym">CRAN</abbr>-style repository, and R users may want to set up their own. The ‘base’ of a repository is a URL such as <a class="uref" href="https://www.stats.ox.ac.uk/pub/RWin/">https://www.stats.ox.ac.uk/pub/RWin/</a>: this must be an URL scheme that <code class="code">download.packages</code> supports (which also includes ‘<samp class="samp">https://</samp>’, ‘<samp class="samp">ftp://</samp>’ and ‘<samp class="samp">file://</samp>’). Under that base URL there should be directory trees for one or more of the following types of package distributions: </p> <ul class="itemize mark-bullet"> <li><code class="code">"source"</code>: located at <samp class="file">src/contrib</samp> and containing <samp class="file">.tar.gz</samp> files. Other forms of compression can be used, e.g. <samp class="file">.tar.bz2</samp> or <samp class="file">.tar.xz</samp> files. Complete repositories contain the sources corresponding to any binary packages, and in any case it is wise to have a <samp class="file">src/contrib</samp> area with a possibly empty <samp class="file">PACKAGES</samp> file. </li><li><code class="code">"win.binary"</code>: located at <samp class="file">bin/windows/contrib/<var class="var">x.y</var></samp> for R versions <var class="var">x.y.z</var> and containing <samp class="file">.zip</samp> files for Windows. </li><li><code class="code">"mac.binary"</code>: located at <samp class="file">bin/macosx/big-sur-arm64/contrib/<var class="var">4.y</var></samp> or <samp class="file">bin/macosx/big-sur-x86_64/contrib/<var class="var">4.y</var></samp> for the <abbr class="acronym">CRAN</abbr> builds for macOS for R versions <var class="var">4.y.z</var>, containing <samp class="file">.tgz</samp> files. (<samp class="file">bin/macosx/contrib/<var class="var">4.y</var></samp> for <code class="code"><var class="var">y</var></code> = 0, 1 or 2.) </li></ul> <p>Each terminal directory must also contain a <samp class="file">PACKAGES</samp> file. This can be a concatenation of the <samp class="file">DESCRIPTION</samp> files of the packages separated by blank lines, but only a few of the fields are needed. The simplest way to set up such a file is to use function <code class="code">write_PACKAGES</code> in the <strong class="strong">tools</strong> package, and its help explains which fields are needed. Optionally there can also be <samp class="file">PACKAGES.rds</samp> and <samp class="file">PACKAGES.gz</samp> files, downloaded in preference to <samp class="file">PACKAGES</samp>. (If you have a mis-configured server that does not report correctly non-existent files you may need these files.) </p> <p>To add your repository to the list offered by <code class="code">setRepositories()</code>, see the help file for that function. </p> <p>Incomplete repositories are better specified <em class="emph">via</em> a <code class="code">contriburl</code> argument than <em class="emph">via</em> being set as a repository. </p> <p>A repository can contain subdirectories, when the descriptions in the <samp class="file">PACKAGES</samp> file of packages in subdirectories must include a line of the form </p> <div class="example"> <pre class="example-preformatted">Path: <var class="var">path/to/subdirectory</var> </pre></div> <p>—once again <code class="code">write_PACKAGES</code> is the simplest way to set this up. </p> <hr> </div> <div class="section-level-extent" id="Checking-installed-source-packages"> <div class="nav-panel"> <p> Previous: <a href="#Setting-up-a-package-repository" accesskey="p" rel="prev">Setting up a package repository</a>, Up: <a href="#Add_002don-packages" accesskey="u" rel="up">Add-on packages</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Checking-installed-source-packages-1"><span>6.7 Checking installed source packages<a class="copiable-link" href="#Checking-installed-source-packages-1"> ¶</a></span></h3> <p>It can be convenient to run <code class="command">R CMD check</code> on an installed package, particularly on a platform which uses sub-architectures. The outline of how to do this is, with the source package in directory <samp class="file"><var class="var">pkg</var></samp> (or a tarball filename): </p> <div class="example"> <pre class="example-preformatted">R CMD INSTALL -l <var class="var">libdir</var> <var class="var">pkg</var> > <var class="var">pkg</var>.log 2>&1 R CMD check -l <var class="var">libdir</var> --install=check:<var class="var">pkg</var>.log <var class="var">pkg</var> </pre></div> <p>Where sub-architectures are in use the <code class="command">R CMD check</code> line can be repeated with additional architectures by </p> <div class="example"> <pre class="example-preformatted">R --arch <var class="var">arch</var> CMD check -l <var class="var">libdir</var> --extra-arch --install=check:<var class="var">pkg</var>.log <var class="var">pkg</var> </pre></div> <p>where <samp class="option">--extra-arch</samp> selects only those checks which depend on the installed code and not those which analyse the sources. (If multiple sub-architectures fail only because they need different settings, e.g. environment variables, <samp class="option">--no-multiarch</samp> may need to be added to the <code class="code">INSTALL</code> lines.) On Unix-alikes the architecture to run is selected by <samp class="option">--arch</samp>: this can also be used on Windows with <samp class="file"><var class="var">R_HOME</var>/bin/R.exe</samp>, but it is more usual to select the path to the <code class="command">Rcmd.exe</code> of the desired architecture. </p> <p>So on Windows to install, check and package for distribution a source package from a tarball which has been tested on another platform one might use </p> <div class="example"> <pre class="example-preformatted">.../bin/x64/Rcmd INSTALL -l <var class="var">libdir</var> <var class="var">tarball</var> --build > <var class="var">pkg</var>.log 2>&1 </pre></div> <hr> </div> </div> <div class="chapter-level-extent" id="Internationalization"> <div class="nav-panel"> <p> Next: <a href="#Choosing-between-32_002d-and-64_002dbit-builds" accesskey="n" rel="next">Choosing between 32- and 64-bit builds</a>, Previous: <a href="#Add_002don-packages" accesskey="p" rel="prev">Add-on packages</a>, Up: <a href="#Top" accesskey="u" rel="up">R Installation and Administration</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h2 class="chapter" id="Internationalization-and-Localization"><span>7 Internationalization and Localization<a class="copiable-link" href="#Internationalization-and-Localization"> ¶</a></span></h2> <a class="index-entry-id" id="index-Internationalization"></a> <a class="index-entry-id" id="index-Localization"></a> <p><em class="emph">Internationalization</em> refers to the process of enabling support for many human languages, and <em class="emph">localization</em> to adapting to a specific country and language. </p> <p>Current builds of R support all the character sets that the underlying OS can handle. These are interpreted according to the <a class="index-entry-id" id="index-Locale"></a> current <code class="code">locale</code>, a sufficiently complicated topic to merit a separate section. Note though that R has no built-in support for right-to-left languages and bidirectional output, relying on the OS services. For example, how character vectors in UTF-8 containing both English digits and Hebrew characters are printed is OS-dependent (and perhaps locale-dependent). </p> <p>The other aspect of the internationalization is support for the translation of messages. This is enabled in almost all builds of R. </p> <ul class="mini-toc"> <li><a href="#Locales" accesskey="1">Locales</a></li> <li><a href="#Localization-of-messages" accesskey="2">Localization of messages</a></li> </ul> <hr> <div class="section-level-extent" id="Locales"> <div class="nav-panel"> <p> Next: <a href="#Localization-of-messages" accesskey="n" rel="next">Localization of messages</a>, Previous: <a href="#Internationalization" accesskey="p" rel="prev">Internationalization and Localization</a>, Up: <a href="#Internationalization" accesskey="u" rel="up">Internationalization and Localization</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Locales-1"><span>7.1 Locales<a class="copiable-link" href="#Locales-1"> ¶</a></span></h3> <a class="index-entry-id" id="index-Locale-1"></a> <p>A <em class="emph">locale</em> is a description of the local environment of the user, including the preferred language, the encoding of characters, the currency used and its conventions, and so on. Aspects of the locale are accessed by the R functions <code class="code">Sys.getlocale</code> and <code class="code">Sys.localeconv</code>. </p> <p>The system of naming locales is OS-specific. There is quite wide agreement on schemes, but not on the details of their implementation. A locale needs to specify </p><ul class="itemize mark-bullet"> <li>A human language. These are generally specified by a lower-case two-character abbreviation following ISO 639 (see e.g. <a class="uref" href="https://en.wikipedia.org/wiki/ISO_639-1">https://en.wikipedia.org/wiki/ISO_639-1</a>). </li><li>A ‘territory’, used mainly to specify the currency. These are generally specified by an upper-case two-character abbreviation following ISO 3166 (see e.g. <a class="uref" href="https://en.wikipedia.org/wiki/ISO_3166">https://en.wikipedia.org/wiki/ISO_3166</a>). </li><li>A charset encoding, which determines both how a byte stream should be divided into characters, and which characters the subsequences of bytes represent. Sometimes the combination of language and territory is used to specify the encoding, for example to distinguish between traditional and simplified Chinese. </li><li>Optionally, a modifier, for example to indicate that Austria is to be considered pre- or post-Euro. The modifier is also used to indicate the script (<code class="code">@latin</code>, <code class="code">@cyrillic</code> for Serbian, <code class="code">@iqtelif</code>) or language dialect (e.g. <code class="code">@saaho</code>, a dialect of Afar, and <code class="code">@bokmal</code> and <code class="code">@nynorsk</code>, dialects of Norwegian regarded by some OSes as separate languages, <code class="code">no</code> and <code class="code">nn</code>). </li></ul> <p>R is principally concerned with the first (for translations) and third. Note that the charset may be deducible from the language, as some OSes offer only one charset per language. </p> <ul class="mini-toc"> <li><a href="#Locales-under-Unix_002dalikes" accesskey="1">Locales under Unix-alikes</a></li> <li><a href="#Locales-under-Windows" accesskey="2">Locales under Windows</a></li> <li><a href="#Locales-under-macOS" accesskey="3">Locales under macOS</a></li> </ul> <hr> <div class="subsection-level-extent" id="Locales-under-Unix_002dalikes"> <div class="nav-panel"> <p> Next: <a href="#Locales-under-Windows" accesskey="n" rel="next">Locales under Windows</a>, Previous: <a href="#Locales" accesskey="p" rel="prev">Locales</a>, Up: <a href="#Locales" accesskey="u" rel="up">Locales</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="Locales-under-Unix_002dalikes-1"><span>7.1.1 Locales under Unix-alikes<a class="copiable-link" href="#Locales-under-Unix_002dalikes-1"> ¶</a></span></h4> <p>Modern Linux uses the <abbr class="abbr">XPG</abbr><a class="footnote" id="DOCF33" href="#FOOT33"><sup>33</sup></a> locale specifications which have the form ‘<samp class="samp">en_GB</samp>’, ‘<samp class="samp">en_GB.UTF-8</samp>’, ‘<samp class="samp">aa_ER.UTF-8@saaho</samp>’, ‘<samp class="samp">de_AT.iso885915@euro</samp>’, the components being in the order listed above. (See <code class="command">man locale</code> and <code class="command">locale -a</code> for more details.) Similar schemes are used by most Unix-alikes: some (including some distributions of Linux) use ‘<samp class="samp">.utf8</samp>’ rather than ‘<samp class="samp">.UTF-8</samp>’. </p> <p>Note that whereas UTF-8 locales are nowadays almost universally used, locales such as ‘<samp class="samp">en_GB</samp>’ use 8-bit encodings for backwards compatibility. </p> <hr> </div> <div class="subsection-level-extent" id="Locales-under-Windows"> <div class="nav-panel"> <p> Next: <a href="#Locales-under-macOS" accesskey="n" rel="next">Locales under macOS</a>, Previous: <a href="#Locales-under-Unix_002dalikes" accesskey="p" rel="prev">Locales under Unix-alikes</a>, Up: <a href="#Locales" accesskey="u" rel="up">Locales</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="Locales-under-Windows-1"><span>7.1.2 Locales under Windows<a class="copiable-link" href="#Locales-under-Windows-1"> ¶</a></span></h4> <p>Windows also uses locales, but specified in a rather less concise way. Most users will encounter locales only via drop-down menus, but more information and lists can be found by searching for ‘<samp class="samp">Windows language country strings</samp>’). </p> <p>It offers only one encoding per language. </p> <p>Some care is needed with Windows’ locale names. For example, <code class="code">chinese</code> is Traditional Chinese and not Simplified Chinese as used in most of the Chinese-speaking world. </p> <hr> </div> <div class="subsection-level-extent" id="Locales-under-macOS"> <div class="nav-panel"> <p> Previous: <a href="#Locales-under-Windows" accesskey="p" rel="prev">Locales under Windows</a>, Up: <a href="#Locales" accesskey="u" rel="up">Locales</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="Locales-under-macOS-1"><span>7.1.3 Locales under macOS<a class="copiable-link" href="#Locales-under-macOS-1"> ¶</a></span></h4> <p>macOS supports locales in its own particular way, but the R GUI tries to make this easier for users. See <a class="uref" href="https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPInternational/">https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPInternational/</a> for how users can set their locales. End users will generally only see lists of languages/territories. Users of R in a terminal may need to set the locale to something like ‘<samp class="samp">en_GB.UTF-8</samp>’ if it defaults to ‘<samp class="samp">C</samp>’ (as it sometimes does when logging in remotely and for batch jobs: note whether <code class="command">Terminal</code> sets the <code class="env">LANG</code> environment variable is an (advanced) preference, but does so by default). </p> <p>Internally macOS uses a form similar to Linux: the main difference from other Unix-alikes is that where a character set is not specified it is assumed to be <code class="code">UTF-8</code>. </p> <hr> </div> </div> <div class="section-level-extent" id="Localization-of-messages"> <div class="nav-panel"> <p> Previous: <a href="#Locales" accesskey="p" rel="prev">Locales</a>, Up: <a href="#Internationalization" accesskey="u" rel="up">Internationalization and Localization</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Localization-of-messages-1"><span>7.2 Localization of messages<a class="copiable-link" href="#Localization-of-messages-1"> ¶</a></span></h3> <p>The preferred language for messages is by default taken from the locale. This can be overridden first by the setting of the environment variable <a class="index-entry-id" id="index-LANGUAGE"></a> <a class="index-entry-id" id="index-LC_005fALL"></a> <a class="index-entry-id" id="index-LC_005fMESSAGES"></a> <a class="index-entry-id" id="index-LANG"></a> <code class="env">LANGUAGE</code> and then<a class="footnote" id="DOCF34" href="#FOOT34"><sup>34</sup></a> by the environment variables <code class="env">LC_ALL</code>, <code class="env">LC_MESSAGES</code> and <code class="env">LANG</code>. (The last three are normally used to set the locale and so should not be needed, but the first is only used to select the language for messages.) The code tries hard to map locales to languages, but on some systems (notably Windows) the locale names needed for the environment variable <code class="env">LC_ALL</code> do not all correspond to <abbr class="abbr">XPG</abbr> language names and so <code class="env">LANGUAGE</code> may need to be set. (One example is ‘<samp class="samp">LC_ALL=es</samp>’ on Windows which sets the locale to Estonian and the language to Spanish.) </p> <p>It is usually possible to change the language once R is running <em class="emph">via</em> (not Windows) <code class="code">Sys.setlocale("LC_MESSAGES", "new_locale")</code>, or by setting an environment variable such as <code class="env">LANGUAGE</code>, <em class="emph">provided</em><a class="footnote" id="DOCF35" href="#FOOT35"><sup>35</sup></a> the language you are changing to can be output in the current character set. But this is OS-specific, and has been known to stop working on an OS upgrade. Note that translated messages may be cached, so attempting to change the language of an error that has already been output in another language may not work. </p> <p>Messages are divided into <em class="emph">domains</em>, and translations may be available for some or all messages in a domain. R makes use of the following domains. </p> <ul class="itemize mark-bullet"> <li>Domain <code class="code">R</code> for the C-level error and warning messages from the R interpreter. </li><li>Domain <code class="code">R-<var class="var">pkg</var></code> for the R <code class="code">stop</code>, <code class="code">warning</code> and <code class="code">message</code> messages in each package, including <code class="code">R-base</code> for the <strong class="strong">base</strong> package. </li><li>Domain <code class="code"><var class="var">pkg</var></code> for the C-level messages in each package. </li><li>Domain <code class="code">RGui</code> for the menus etc of the R for Windows GUI front-end. </li></ul> <p>Dividing up the messages in this way allows R to be extensible: as packages are loaded, their message translation catalogues can be loaded too. </p> <p>R can be built without support for translations, but it is enabled by default. </p> <p>R-level and C-level domains are subtly different, for example in the way strings are canonicalized before being passed for translation. </p> <p>Translations are looked for by domain according to the currently specified language, as specifically as possible, so for example an Austrian (‘<samp class="samp">de_AT</samp>’) translation catalogue will be used in preference to a generic German one (‘<samp class="samp">de</samp>’) for an Austrian user. However, if a specific translation catalogue exists but does not contain a translation, the less specific catalogues are consulted. For example, R has catalogues for ‘<samp class="samp">en_GB</samp>’ that translate the Americanisms (e.g., ‘<samp class="samp">gray</samp>’) in the standard messages into English.<a class="footnote" id="DOCF36" href="#FOOT36"><sup>36</sup></a> Two other examples: there are catalogues for ‘<samp class="samp">es</samp>’, which is Spanish as written in Spain and these will by default also be used in Spanish-speaking Latin American countries, and also for ‘<samp class="samp">pt_BR</samp>’, which are used for Brazilian locales but not for locales specifying Portugal. </p> <p>Translations in the right language but the wrong charset are made use of <a class="index-entry-id" id="index-LANGUAGE-1"></a> by on-the-fly re-encoding. The <code class="env">LANGUAGE</code> variable (only) can be a colon-separated list, for example ‘<samp class="samp">se:de</samp>’, giving a set of languages in decreasing order of preference. One special value is ‘<samp class="samp">en@quot</samp>’, which can be used in a UTF-8 locale to have American error messages with pairs of single quotes translated to Unicode directional quotes. </p> <p>If no suitable translation catalogue is found or a particular message is not translated in any suitable catalogue, ‘English’<a class="footnote" id="DOCF37" href="#FOOT37"><sup>37</sup></a> is used. </p> <p>See <a class="uref" href="https://developer.r-project.org/Translations30.html">https://developer.r-project.org/Translations30.html</a> for how to prepare and install translation catalogues. </p> <hr> </div> </div> <div class="chapter-level-extent" id="Choosing-between-32_002d-and-64_002dbit-builds"> <div class="nav-panel"> <p> Next: <a href="#The-standalone-Rmath-library" accesskey="n" rel="next">The standalone Rmath library</a>, Previous: <a href="#Internationalization" accesskey="p" rel="prev">Internationalization and Localization</a>, Up: <a href="#Top" accesskey="u" rel="up">R Installation and Administration</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h2 class="chapter" id="Choosing-between-32_002d-and-64_002dbit-builds-1"><span>8 Choosing between 32- and 64-bit builds<a class="copiable-link" href="#Choosing-between-32_002d-and-64_002dbit-builds-1"> ¶</a></span></h2> <p>As from R 4.4.0 32-bit builds are unsupported. </p> <hr> </div> <div class="chapter-level-extent" id="The-standalone-Rmath-library"> <div class="nav-panel"> <p> Next: <a href="#Essential-and-useful-other-programs-under-a-Unix_002dalike" accesskey="n" rel="next">Essential and useful other programs under a Unix-alike</a>, Previous: <a href="#Choosing-between-32_002d-and-64_002dbit-builds" accesskey="p" rel="prev">Choosing between 32- and 64-bit builds</a>, Up: <a href="#Top" accesskey="u" rel="up">R Installation and Administration</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h2 class="chapter" id="The-standalone-Rmath-library-1"><span>9 The standalone Rmath library<a class="copiable-link" href="#The-standalone-Rmath-library-1"> ¶</a></span></h2> <p>The routines supporting the distribution and special<a class="footnote" id="DOCF38" href="#FOOT38"><sup>38</sup></a> functions in R and a few others are declared in C header file <samp class="file">Rmath.h</samp>. These can be compiled into a standalone library for linking to other applications. (Note that they are not a separate library when R is built, and the standalone version differs in several ways.) </p> <p>The makefiles and other sources needed are in directory <samp class="file">src/nmath/standalone</samp>, so the following instructions assume that is the current working directory (in the build directory tree on a Unix-alike if that is separate from the sources). </p> <p><samp class="file">Rmath.h</samp> contains ‘<samp class="samp">R_VERSION_STRING</samp>’, which is a character string containing the current R version, for example <code class="code">"4.4.0"</code>. </p> <p>There is full access to R’s handling of <code class="code">NaN</code>, <code class="code">Inf</code> and <code class="code">-Inf</code> via special versions of the macros and functions </p> <div class="example"> <pre class="example-preformatted"> ISNAN, R_FINITE, R_log, R_pow and R_pow_di </pre></div> <p>and (extern) constants <code class="code">R_PosInf</code>, <code class="code">R_NegInf</code> and <code class="code">NA_REAL</code>. </p> <p>There is no support for R’s notion of missing values, in particular not for <code class="code">NA_INTEGER</code> nor the distinction between <code class="code">NA</code> and <code class="code">NaN</code> for doubles. </p> <p>A little care is needed to use the random-number routines. You will need to supply the uniform random number generator </p> <div class="example"> <pre class="example-preformatted"> double unif_rand(void) </pre></div> <p>or use the one supplied (and with a shared library or DLL you may have to use the one supplied, which is the Marsaglia-multicarry with an entry point </p> <div class="example"> <pre class="example-preformatted"> set_seed(unsigned int, unsigned int) </pre></div> <p>to set its seeds). </p> <p>The facilities to change the normal random number generator are available through the constant <code class="code">N01_kind</code>. This takes values from the enumeration type </p> <div class="example"> <pre class="example-preformatted">typedef enum { BUGGY_KINDERMAN_RAMAGE, AHRENS_DIETER, BOX_MULLER, USER_NORM, INVERSION, KINDERMAN_RAMAGE } N01type; </pre></div> <p>(and ‘<samp class="samp">USER_NORM</samp>’ is not available). </p> <ul class="mini-toc"> <li><a href="#Unix_002dalike-standalone" accesskey="1">Unix-alikes</a></li> <li><a href="#Windows-standalone" accesskey="2">Windows</a></li> </ul> <hr> <div class="section-level-extent" id="Unix_002dalike-standalone"> <div class="nav-panel"> <p> Next: <a href="#Windows-standalone" accesskey="n" rel="next">Windows</a>, Previous: <a href="#The-standalone-Rmath-library" accesskey="p" rel="prev">The standalone Rmath library</a>, Up: <a href="#The-standalone-Rmath-library" accesskey="u" rel="up">The standalone Rmath library</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Unix_002dalikes"><span>9.1 Unix-alikes<a class="copiable-link" href="#Unix_002dalikes"> ¶</a></span></h3> <p>If R has not already been made in the directory tree, <code class="command">configure</code> must be run as described in the main build instructions. </p> <p>Then (in <samp class="file">src/nmath/standalone</samp>) </p> <div class="example"> <pre class="example-preformatted">make </pre></div> <p>will make standalone libraries <samp class="file">libRmath.a</samp> and <samp class="file">libRmath.so</samp> (<samp class="file">libRmath.dylib</samp> on macOS): ‘<samp class="samp">make static</samp>’ and ‘<samp class="samp">make shared</samp>’ will create just one of them. </p> <p>To use the routines in your own C or C++ programs, include </p> <div class="example"> <pre class="example-preformatted">#define MATHLIB_STANDALONE #include <Rmath.h> </pre></div> <p>and link against ‘<samp class="samp">-lRmath</samp>’ (and ‘<samp class="samp">-lm</samp>’ if needed on your OS). The example file <samp class="file">test.c</samp> does nothing useful, but is provided to test the process (via <code class="command">make test</code>). Note that you will probably not be able to run it unless you add the directory containing <a class="index-entry-id" id="index-LD_005fLIBRARY_005fPATH"></a> <samp class="file">libRmath.so</samp> to the <code class="env">LD_LIBRARY_PATH</code> environment variable (<samp class="file">libRmath.dylib</samp>, <code class="env">DYLD_FALLBACK_LIBRARY_PATH</code> on macOS). </p> <p>The targets </p> <div class="example"> <pre class="example-preformatted">make install make uninstall </pre></div> <p>will (un)install the header <samp class="file">Rmath.h</samp> and shared and static <a class="index-entry-id" id="index-DESTDIR-1"></a> libraries (if built). Both <code class="code">prefix=</code> and <code class="env">DESTDIR</code> are supported, together with more precise control as described for the main build. </p> <p>‘<samp class="samp">make install</samp>’ installs a file for <code class="command">pkg-config</code> to use by e.g. </p> <div class="example"> <pre class="example-preformatted">$(CC) `pkg-config --cflags libRmath` -c test.c $(CC) `pkg-config --libs libRmath` test.o -o test </pre></div> <p>On some systems ‘<samp class="samp">make install-strip</samp>’ will install a stripped shared library. </p> <hr> </div> <div class="section-level-extent" id="Windows-standalone"> <div class="nav-panel"> <p> Previous: <a href="#Unix_002dalike-standalone" accesskey="p" rel="prev">Unix-alikes</a>, Up: <a href="#The-standalone-Rmath-library" accesskey="u" rel="up">The standalone Rmath library</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Windows-1"><span>9.2 Windows<a class="copiable-link" href="#Windows-1"> ¶</a></span></h3> <p>You need to set up<a class="footnote" id="DOCF39" href="#FOOT39"><sup>39</sup></a> almost all the tools to make R and then run (in a Unix-like shell) </p> <div class="example"> <pre class="example-preformatted">(cd ../../gnuwin32; make MkRules) (cd ../../include; make -f Makefile.win config.h Rconfig.h Rmath.h) make -f Makefile.win </pre></div> <p>Alternatively, in a <samp class="file">cmd.exe</samp> shell use </p> <div class="example"> <pre class="example-preformatted">cd ../../include make -f Makefile.win config.h Rconfig.h Rmath.h cd ../nmath/standalone make -f Makefile.win </pre></div> <p>This creates a static library <samp class="file">libRmath.a</samp> and a DLL <samp class="file">Rmath.dll</samp>. If you want an import library <samp class="file">libRmath.dll.a</samp> (you don’t need one), use </p> <div class="example"> <pre class="example-preformatted">make -f Makefile.win shared implib </pre></div> <p>To use the routines in your own C or C++ programs using MinGW-w64, include </p> <div class="example"> <pre class="example-preformatted">#define MATHLIB_STANDALONE #include <Rmath.h> </pre></div> <p>and link against ‘<samp class="samp">-lRmath</samp>’. This will use the first found of <samp class="file">libRmath.dll.a</samp>, <samp class="file">libRmath.a</samp> and <samp class="file">Rmath.dll</samp> in that order, so the result depends on which files are present. You should be able to force static or dynamic linking <em class="emph">via</em> </p> <div class="example"> <pre class="example-preformatted">-Wl,-Bstatic -lRmath -Wl,Bdynamic -Wl,-Bdynamic -lRmath </pre></div> <p>or by linking to explicit files (as in the ‘<samp class="samp">test</samp>’ target in <samp class="file">Makefile.win</samp>: this makes two executables, <samp class="file">test.exe</samp> which is dynamically linked, and <samp class="file">test-static.exe</samp>, which is statically linked). </p> <p>It is possible to link to <samp class="file">Rmath.dll</samp> using other compilers, either directly or via an import library: if you make a MinGW-w64 import library as above, you will create a file <samp class="file">Rmath.def</samp> which can be used (possibly after editing) to create an import library for other systems such as Visual C++. </p> <p>If you make use of dynamic linking you should use </p> <div class="example"> <pre class="example-preformatted">#define MATHLIB_STANDALONE #define RMATH_DLL #include <Rmath.h> </pre></div> <p>to ensure that the constants like <code class="code">NA_REAL</code> are linked correctly. (Auto-import will probably work with MinGW-w64, but it is better to be sure. This is likely to also work with VC++, Borland and similar compilers.) </p> <hr> </div> </div> <div class="appendix-level-extent" id="Essential-and-useful-other-programs-under-a-Unix_002dalike"> <div class="nav-panel"> <p> Next: <a href="#Configuration-on-a-Unix_002dalike" accesskey="n" rel="next">Configuration on a Unix-alike</a>, Previous: <a href="#The-standalone-Rmath-library" accesskey="p" rel="prev">The standalone Rmath library</a>, Up: <a href="#Top" accesskey="u" rel="up">R Installation and Administration</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h2 class="appendix" id="Essential-and-useful-other-programs-under-a-Unix_002dalike-1"><span>Appendix A Essential and useful other programs under a Unix-alike<a class="copiable-link" href="#Essential-and-useful-other-programs-under-a-Unix_002dalike-1"> ¶</a></span></h2> <p>This appendix gives details of programs you will need to build R on Unix-like platforms, or which will be used by R if found by <code class="command">configure</code>. </p> <p>Remember that some package management systems (such as <abbr class="abbr">RPM</abbr> and Debian/Ubuntu’s) make a distinction between the user version of a package and the development version. The latter usually has the same name but with the extension ‘<samp class="samp">-devel</samp>’ or ‘<samp class="samp">-dev</samp>’: you need both versions installed. </p> <ul class="mini-toc"> <li><a href="#Essential-programs-and-libraries" accesskey="1">Essential programs and libraries</a></li> <li><a href="#Useful-libraries-and-programs" accesskey="2">Useful libraries and programs</a></li> <li><a href="#Linear-algebra" accesskey="3">Linear algebra</a></li> </ul> <hr> <div class="section-level-extent" id="Essential-programs-and-libraries"> <div class="nav-panel"> <p> Next: <a href="#Useful-libraries-and-programs" accesskey="n" rel="next">Useful libraries and programs</a>, Previous: <a href="#Essential-and-useful-other-programs-under-a-Unix_002dalike" accesskey="p" rel="prev">Essential and useful other programs under a Unix-alike</a>, Up: <a href="#Essential-and-useful-other-programs-under-a-Unix_002dalike" accesskey="u" rel="up">Essential and useful other programs under a Unix-alike</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Essential-programs-and-libraries-1"><span>A.1 Essential programs and libraries<a class="copiable-link" href="#Essential-programs-and-libraries-1"> ¶</a></span></h3> <p>You need a means of compiling C and Fortran 90 (see <a class="ref" href="#Using-Fortran">Using Fortran</a>). Your C compiler should be <abbr class="acronym">ISO</abbr>/<abbr class="acronym">IEC</abbr> 60059<a class="footnote" id="DOCF40" href="#FOOT40"><sup>40</sup></a>, POSIX 1003.1 and C99-compliant.<a class="footnote" id="DOCF41" href="#FOOT41"><sup>41</sup></a> R tries to choose suitable flags<a class="footnote" id="DOCF42" href="#FOOT42"><sup>42</sup></a> for the C compilers it knows about, but you may have to set <code class="code">CC</code> or <code class="code">CFLAGS</code> suitably. (Note that options essential to run the compiler even for linking, such as those to set the architecture, should be specified as part of <code class="code">CC</code> rather than in <code class="code">CFLAGS</code>.) </p> <p>Unless you do not want to view graphs on-screen (or use macOS) you need ‘<samp class="samp">X11</samp>’ installed, including its headers and client libraries. For recent Fedora/RedHat distributions it means (at least) <abbr class="abbr">RPM</abbr>s ‘<samp class="samp">libX11</samp>’, ‘<samp class="samp">libX11-devel</samp>’, ‘<samp class="samp">libXt</samp>’ and ‘<samp class="samp">libXt-devel</samp>’. On Debian/Ubuntu we recommend the meta-package ‘<samp class="samp">xorg-dev</samp>’. If you really do not want these you will need to explicitly configure R without X11, using <samp class="option">--with-x=no</samp>. </p> <p>The command-line editing (and command completion) depends on the <abbr class="acronym">GNU</abbr> <code class="code">readline</code> library (including its headers): version 6.0 or later is needed for all the features to be enabled. Otherwise you will need to configure with <samp class="option">--with-readline=no</samp> (or equivalent). </p> <p>A suitably comprehensive <code class="code">iconv</code> function is essential. The R usage requires <code class="code">iconv</code> to be able to translate between <code class="code">"latin1"</code> and <code class="code">"UTF-8"</code>, to recognize <code class="code">""</code> (as the current encoding) and <code class="code">"ASCII"</code>, and to translate to and from the Unicode wide-character formats <code class="code">"UCS-[24][BL]E"</code> — this is true by default for <code class="code">glibc</code><a class="footnote" id="DOCF43" href="#FOOT43"><sup>43</sup></a> but not of most commercial Unixes. However, you can make use of <abbr class="acronym">GNU</abbr> <code class="code">libiconv</code> (as used on macOS: see <a class="uref" href="https://www.gnu.org/software/libiconv/">https://www.gnu.org/software/libiconv/</a>). </p> <p>The OS needs to have enough support<a class="footnote" id="DOCF44" href="#FOOT44"><sup>44</sup></a> for wide-character types: this is checked at configuration. Some C99 functions<a class="footnote" id="DOCF45" href="#FOOT45"><sup>45</sup></a> are required and checked for at configuration. A small number of POSIX functions<a class="footnote" id="DOCF46" href="#FOOT46"><sup>46</sup></a> are essential, and others<a class="footnote" id="DOCF47" href="#FOOT47"><sup>47</sup></a> will be used if available. </p> <p>Installations of <code class="code">zlib</code> (version 1.2.5 or later), <code class="code">libbz2</code> (version 1.0.6 or later: called <strong class="strong">bzip2-libs</strong>/<strong class="strong">bzip2-devel</strong> or <strong class="strong">libbz2-1.0</strong>/<strong class="strong">libbz2-dev</strong> by some Linux distributions) and <code class="code">liblzma</code><a class="footnote" id="DOCF48" href="#FOOT48"><sup>48</sup></a> version 5.0.3 or later are required. </p> <p>Either PCRE1 (version 8.32 or later, formerly known as just PCRE) or PCRE2 is required: PCRE2 is preferred and using PCRE1 requires <code class="command">configure</code> option <samp class="option">--with-pcre1</samp>. Only the 8-bit library and headers are needed if these are packaged separately. <abbr class="abbr">JIT</abbr> support (optional) is desirable for the best performance. For PCRE2 >= 10.30 (which is desirable as matching has been re-written not to use recursion and the Unicode tables were updated to version 10) </p><div class="example"> <pre class="example-preformatted">./configure --enable-jit </pre></div> <p>suffices. If building PCRE1 for use with R a suitable <code class="command">configure</code> command might be </p><div class="example"> <pre class="example-preformatted">./configure --enable-utf --enable-unicode-properties --enable-jit --disable-cpp </pre></div> <p>The <samp class="option">--enable-jit</samp> flag is supported for most common CPUs but does not work (well or at all) for ‘<samp class="samp">arm64</samp>’ macOS. </p> <p>Some packages require the ‘Unicode properties’ which are optional for PCRE1: support for this and <abbr class="abbr">JIT</abbr> can be checked at run-time by calling <code class="code">pcre_config()</code>. </p> <p>Library <code class="code">libcurl</code> (version 7.28.0 or later) is required. Information on <code class="code">libcurl</code> is found from the <code class="command">curl-config</code> script: if that is missing or needs to be overridden<a class="footnote" id="DOCF49" href="#FOOT49"><sup>49</sup></a> there are macros to do so described in file <samp class="file">config.site</samp>. </p> <p>A <code class="command">tar</code> program is needed to unpack the sources and packages (including the recommended packages). A version<a class="footnote" id="DOCF50" href="#FOOT50"><sup>50</sup></a> that can automagically detect compressed archives is preferred for use with <code class="code">untar()</code>: the configure script looks for <code class="command">gtar</code> and <code class="command">gnutar</code> before <a class="index-entry-id" id="index-TAR"></a> <code class="command">tar</code> – use environment variable <code class="env">TAR</code> to override this. (On NetBSD/OpenBSD systems set this to <code class="command">bsdtar</code> if that is installed.) </p> <p>There need to be suitable versions of the tools <code class="command">grep</code> and <code class="command">sed</code>: the problems are usually with old AT&T and BSD variants. <code class="command">configure</code> will try to find suitable versions (including looking in <samp class="file">/usr/xpg4/bin</samp> which is used on some commercial Unixes). </p> <p>You will not be able to build most of the manuals unless you have <code class="command">texi2any</code> version 5.1 or later installed (which requires <code class="command">perl</code>), and if not most of the <abbr class="acronym">HTML</abbr> manuals will be linked to a version on <abbr class="acronym">CRAN</abbr>. To make PDF versions of the manuals you will also need file <samp class="file">texinfo.tex</samp> installed (which is part of the <abbr class="acronym">GNU</abbr> <strong class="strong">texinfo</strong> distribution but is often made part of the TeX package in re-distributions) as well as <code class="command">texi2dvi</code>.<a class="footnote" id="DOCF51" href="#FOOT51"><sup>51</sup></a> Further, the versions of <code class="command">texi2dvi</code> and <samp class="file">texinfo.tex</samp> need to be compatible: we have seen problems with older TeX distributions. </p> <a class="index-entry-id" id="index-Subversion-1"></a> <p>If you want to build from the R Subversion repository then <code class="command">texi2any</code> is highly recommended as it is used to create files which are in the tarball but not stored in the Subversion repository. </p> <a class="index-entry-id" id="index-Vignettes"></a> <p>The PDF documentation (including <samp class="file">doc/NEWS.pdf</samp>) and building vignettes needs <code class="command">pdftex</code> and <code class="command">pdflatex</code>. We require LaTeX version <code class="code">2005/12/01</code> or later (for UTF-8 support). Building PDF package manuals (including the R reference manual) and vignettes is sensitive to the version of the LaTeX package <strong class="strong">hyperref</strong> and we recommend that the TeX distribution used is kept up-to-date. A number of standard LaTeX packages are required for the PDF manuals (including <strong class="strong">url</strong> and some of the font packages such as <strong class="strong">times</strong> and <strong class="strong">helvetic</strong> and also <strong class="strong">amsfonts</strong>) and others such as <strong class="strong">hyperref</strong> and <strong class="strong">inconsolata</strong> are desirable (and without them you may need to change R’s defaults: see <a class="pxref" href="#Making-the-manuals">Making the manuals</a>). Note that package <strong class="strong">hyperref</strong> (currently) requires packages <strong class="strong">kvoptions</strong>, <strong class="strong">ltxcmds</strong> and <strong class="strong">refcount</strong>, and <strong class="strong">inconsolata</strong> requires <strong class="strong">xkeyval</strong>. Building the base vignettes requires <strong class="strong">fancyvrb</strong>, <strong class="strong">natbib</strong>, <strong class="strong">parskip</strong> (which currently requires <strong class="strong">etoolbox</strong>) and <strong class="strong">listings</strong>. For distributions based on TeX Live the simplest approach may be to install collections <strong class="strong">collection-latex</strong>, <strong class="strong">collection-fontsrecommended</strong>, <strong class="strong">collection-latexrecommended</strong>, <strong class="strong">collection-fontsextra</strong> and <strong class="strong">collection-latexextra</strong> (assuming they are not installed by default): Fedora uses names like <strong class="strong">texlive-collection-fontsextra</strong> and Debian/Ubuntu like <strong class="strong">texlive-fonts-extra</strong>. </p> <p>Programs <code class="command">qpdf</code> and Ghostscript (<code class="command">gs</code>) are desirable as these will be used to compact the installed PDF vignettes and any PDF manuals. </p> <a class="index-entry-id" id="index-PATH"></a> <p>The essential programs should be in your <code class="env">PATH</code> at the time <code class="command">configure</code> is run: this will capture the full paths. </p> <p>For date-times to work correctly it is essential that the tables defining time zones are installed: these are usually in an OS component named something like <code class="code">tzdata</code>. On most OSes they are required but installations of Alpine Linux have been seen without them. There is a <code class="command">configure</code> check that recent date-times to work correctly in different time zones which catches this when installing from source (but not for binary distributions). </p> <p>Those distributing binary versions of R may need to be aware of the licences of the external libraries it is linked to (including ‘useful’ libraries from the next section). The <code class="code">liblzma</code> library is in the public domain and X11, <code class="code">libbzip2</code>, <code class="code">libcurl</code> and <code class="code">zlib</code> have MIT-style licences. PCRE and PCRE2 have a BSD-style licence which requires distribution of the licence (included in R’s <samp class="file">COPYRIGHTS</samp> file) in binary distributions. GNU <code class="code">readline</code> is licensed under GPL (which version(s) of GPL depends on the <code class="code">readline</code> version). </p> <hr> </div> <div class="section-level-extent" id="Useful-libraries-and-programs"> <div class="nav-panel"> <p> Next: <a href="#Linear-algebra" accesskey="n" rel="next">Linear algebra</a>, Previous: <a href="#Essential-programs-and-libraries" accesskey="p" rel="prev">Essential programs and libraries</a>, Up: <a href="#Essential-and-useful-other-programs-under-a-Unix_002dalike" accesskey="u" rel="up">Essential and useful other programs under a Unix-alike</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Useful-libraries-and-programs-1"><span>A.2 Useful libraries and programs<a class="copiable-link" href="#Useful-libraries-and-programs-1"> ¶</a></span></h3> <p>The ability to use translated messages makes use of <code class="code">gettext</code> and most likely needs <abbr class="acronym">GNU</abbr> <code class="code">gettext</code>: you do need this to work with new translations, but otherwise the version of the <code class="code">gettext</code> runtime contained in the R sources will be used if no suitable external <code class="code">gettext</code> is found. </p> <a class="index-entry-id" id="index-Cairo-1"></a> <a class="index-entry-id" id="index-Pango"></a> <p>The ‘modern’ version of the <code class="code">X11()</code>, <code class="code">jpeg()</code>, <code class="code">png()</code> and <code class="code">tiff()</code> graphics devices uses the Cairo and Pango libraries. Cairo version 1.2.0 or later and Pango version 1.10 or later are required (but much later versions are current). R checks for <code class="command">pkg-config</code>, and uses that to check first that the ‘<samp class="samp">pangocairo</samp>’ package is installed (and if not, ‘<samp class="samp">cairo</samp>’) then if suitable code can be compiled. These tests will fail if <code class="command">pkg-config</code> is not installed<a class="footnote" id="DOCF52" href="#FOOT52"><sup>52</sup></a>, and might fail if <code class="code">cairo</code> was built statically unless <code class="command">configure</code> option <samp class="option">--with-static-cairo</samp> is used. Most systems with <code class="code">Gtk+</code> 2.8 or later installed will have suitable libraries: for Fedora users the <code class="code">pango-devel</code> <abbr class="abbr">RPM</abbr> and its dependencies suffice. It is possible (but very unusual on a platform with X11) to build Cairo without its <code class="code">cairo-xlib</code> module in which case <code class="code">X11(type = "cairo")</code> will not be available. Pango is optional but highly desirable as it is likely to give much better text rendering, including kerning. </p> <p>For the best font experience with these devices you need suitable fonts installed: Linux users will want the <code class="code">urw-fonts</code> package. On platforms which have it available, the <code class="code">msttcorefonts</code> package<a class="footnote" id="DOCF53" href="#FOOT53"><sup>53</sup></a> provides TrueType versions of Monotype fonts such as Arial and Times New Roman. Another useful set of fonts is the ‘liberation’ TrueType fonts available at <a class="uref" href="https://pagure.io/liberation-fonts">https://pagure.io/liberation-fonts</a>,<a class="footnote" id="DOCF54" href="#FOOT54"><sup>54</sup></a> which cover the Latin, Greek and Cyrillic alphabets plus a fair range of signs. These share metrics with Arial, Times New Roman and Courier New, and contain fonts rather similar to the first two (<a class="uref" href="https://en.wikipedia.org/wiki/Liberation_fonts">https://en.wikipedia.org/wiki/Liberation_fonts</a>). Then there is the ‘Free UCS Outline Fonts’ project (<a class="uref" href="https://www.gnu.org/software/freefont/">https://www.gnu.org/software/freefont/</a>) which are OpenType/TrueType fonts based on the URW fonts but with extended Unicode coverage. See the R help on <code class="code">X11</code> on selecting such fonts. </p> <p>The bitmapped graphics devices <code class="code">jpeg()</code>, <code class="code">png()</code> and <code class="code">tiff()</code> need the appropriate headers and libraries installed: <code class="code">jpeg</code> (version 6b or later, or <code class="code">libjpeg-turbo</code>) or <code class="code">libpng</code> (version 1.2.7 or later) and <code class="code">zlib</code> or <code class="code">libtiff</code> respectively. <code class="command">pkg-config</code> is used if available and so needs the appropriate <samp class="file">.pc</samp> file (which requires <code class="code">libtiff</code> version 4.x and is not available on all platforms for <code class="code">jpeg</code> before version 9c). They also need support for either <code class="code">X11</code> or <code class="code">cairo</code> (see above). Should support for these devices <strong class="strong">not</strong> be required or broken system libraries need to be avoided there are <code class="command">configure</code> options <samp class="option">--without-libpng</samp>, <samp class="option">--without-jpeglib</samp> and <samp class="option">--without-libtiff</samp>. The TIFF library has many optional features such as <code class="code">jpeg</code>, <code class="code">libz</code>, <code class="code">zstd</code>, <code class="code">lzma</code>, <code class="code">webp</code>, <code class="code">jbig</code> and <code class="code">jpeg12</code>, none of which is required for the <code class="code">tiff()</code> devices but may need to be present to link the library (usually only an issue for static linking). <code class="command">pkg-config</code> can tell you what other libraries are required for linking, for example by <code class="code">pkg-config libtiff-4 --static --libs</code>. </p> <p>Option <samp class="option">--with-system-tre</samp> is also available: it needs a recent version of TRE. (The latest sources are in the <code class="command">git</code> repository at <a class="url" href="https://github.com/laurikari/tre/">https://github.com/laurikari/tre/</a>, but at the time of writing the resulting build did not complete its checks, nor did R built against the version supplied by Fedora.) </p> <p>An implementation of <abbr class="acronym">XDR</abbr> is required, and the R sources contain one which is likely to suffice (although a system version may have higher performance). <abbr class="acronym">XDR</abbr> is part of <abbr class="acronym">RPC</abbr> and historically has been part of <samp class="file">libc</samp> on a Unix-alike. (In principle <code class="command">man xdr_string</code> should tell you which library is needed, but it often does not: on some OSes it is provided by <code class="code">libnsl</code>.) However some builds<a class="footnote" id="DOCF55" href="#FOOT55"><sup>55</sup></a> of <code class="code">glibc</code> omit or hide it with the intention that the <abbr class="acronym">TI-RPC</abbr> library be used, in which case <code class="code">libtirpc</code> (and its development version) should be installed, and its headers<a class="footnote" id="DOCF56" href="#FOOT56"><sup>56</sup></a> need to be on the C include path or under <samp class="file">/usr/include/tirpc</samp>. </p> <p>Library <code class="code">libdeflate</code> (<a class="url" href="https://github.com/ebiggers/libdeflate">https://github.com/ebiggers/libdeflate</a>) is used by <code class="code">memCompress()</code> and <code class="code">memDecompress()</code> if available. </p> <p>Use of the X11 clipboard selection requires the <code class="code">Xmu</code> headers and libraries. These are normally part of an X11 installation (e.g. the Debian meta-package ‘<samp class="samp">xorg-dev</samp>’), but some distributions have split this into smaller parts, so for example recent versions of Fedora require the ‘<samp class="samp">libXmu</samp>’ and ‘<samp class="samp">libXmu-devel</samp>’ <abbr class="abbr">RPM</abbr>s. </p> <p>Some systems (notably macOS and at least some FreeBSD systems) have inadequate support for collation in multibyte locales. It is possible to replace the OS’s collation support by that from ICU (International Components for Unicode, <a class="uref" href="https://icu.unicode.org/">https://icu.unicode.org/</a>), and this provides much more precise control over collation on all systems. ICU is available as sources and as binary distributions for (at least) most Linux distributions, FreeBSD, macOS and <abbr class="abbr">AIX</abbr>, usually as <code class="code">libicu</code> or <code class="code">icu4c</code>. It will be used by default where available: should a very old or broken version of ICU be found this can be suppressed by <samp class="option">--without-ICU</samp>. </p> <p>The <code class="code">bitmap</code> and <code class="code">dev2bitmap</code> devices and function <code class="code">embedFonts()</code> use Ghostscript (<a class="uref" href="https://www.ghostscript.com/">https://www.ghostscript.com/</a>). This should either be in your path when the command is run, or its full path specified by the environment variable <code class="env">R_GSCMD</code> at that time. <a class="index-entry-id" id="index-R_005fGSCMD"></a> </p> <p>At the time of writing a full installation on Fedora Linux used the following packages and their development versions, and this may provide a useful checklist for other systems: </p><div class="example"> <pre class="example-preformatted">bzip2 cairo fontconfig freetype fribidi gcc gcc-gfortran gcc-c++ glib2 glibc harfbuzz lapack libX11 libXext libXt libcurl libdeflate libicu libjpeg libpng libtiff libtirpc libxcrypt ncurses pango pkgconf-pkg-config pcre2 readline tcl tk xz zlib </pre></div> <p>plus, preferably a TeX installation and Java. </p> <ul class="mini-toc"> <li><a href="#Tcl_002fTk" accesskey="1">Tcl/Tk</a></li> <li><a href="#Java-support" accesskey="2">Java support</a></li> <li><a href="#Other-compiled-languages" accesskey="3">Other compiled languages</a></li> </ul> <hr> <div class="subsection-level-extent" id="Tcl_002fTk"> <div class="nav-panel"> <p> Next: <a href="#Java-support" accesskey="n" rel="next">Java support</a>, Previous: <a href="#Useful-libraries-and-programs" accesskey="p" rel="prev">Useful libraries and programs</a>, Up: <a href="#Useful-libraries-and-programs" accesskey="u" rel="up">Useful libraries and programs</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="Tcl_002fTk-1"><span>A.2.1 Tcl/Tk<a class="copiable-link" href="#Tcl_002fTk-1"> ¶</a></span></h4> <p>The <strong class="strong">tcltk</strong> package needs Tcl/Tk ≥ 8.4 installed: the sources are available at <a class="uref" href="https://www.tcl.tk/">https://www.tcl.tk/</a>. To specify the locations of the Tcl/Tk files you may need the configuration options </p> <dl class="table"> <dt><samp class="option">--with-tcltk</samp></dt> <dd><p>use Tcl/Tk, or specify its library directory </p></dd> <dt><samp class="option">--with-tcl-config=<var class="var">TCL_CONFIG</var></samp></dt> <dd><p>specify location of <samp class="file">tclConfig.sh</samp> </p></dd> <dt><samp class="option">--with-tk-config=<var class="var">TK_CONFIG</var></samp></dt> <dd><p>specify location of <samp class="file">tkConfig.sh</samp> </p></dd> </dl> <p>or use the configure variables <code class="code">TCLTK_LIBS</code> and <code class="code">TCLTK_CPPFLAGS</code> to specify the flags needed for linking against the Tcl and Tk libraries and for finding the <samp class="file">tcl.h</samp> and <samp class="file">tk.h</samp> headers, respectively. If you have both 32- and 64-bit versions of Tcl/Tk installed, specifying the paths to the correct config files may be necessary to avoid confusion between them. </p> <p>Versions of Tcl/Tk up to 8.5.19 and 8.6.12 have been tested (including most versions of 8.4.x, but not recently). </p> <p>Note that the <samp class="file">tk.h</samp> header includes<a class="footnote" id="DOCF57" href="#FOOT57"><sup>57</sup></a> X11 headers, so you will need X11 and its development files installed. </p> <hr> </div> <div class="subsection-level-extent" id="Java-support"> <div class="nav-panel"> <p> Next: <a href="#Other-compiled-languages" accesskey="n" rel="next">Other compiled languages</a>, Previous: <a href="#Tcl_002fTk" accesskey="p" rel="prev">Tcl/Tk</a>, Up: <a href="#Useful-libraries-and-programs" accesskey="u" rel="up">Useful libraries and programs</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="Java-support-1"><span>A.2.2 Java support<a class="copiable-link" href="#Java-support-1"> ¶</a></span></h4> <p>The build process looks for Java support on the host system, and if it finds it sets some settings which are useful for Java-using packages (such as <a class="url" href="https://CRAN.R-project.org/package=rJava"><strong class="strong">rJava</strong></a> and <a class="url" href="https://CRAN.R-project.org/package=JavaGD"><strong class="strong">JavaGD</strong></a>: installing these from source requires a full <abbr class="abbr">JDK</abbr>). This check can be suppressed by configure option <samp class="option">--disable-java</samp>. <a class="index-entry-id" id="index-JAVA_005fHOME"></a> Configure variable <code class="env">JAVA_HOME</code> can be set to point to a specific <abbr class="abbr">JRE</abbr>/<abbr class="abbr">JDK</abbr>, on the <code class="command">configure</code> command line or in the environment. </p> <p>Principal amongst these settings are some paths to the Java libraries and JVM, which are stored in environment variable <a class="index-entry-id" id="index-R_005fJAVA_005fLD_005fLIBRARY_005fPATH"></a> <code class="env">R_JAVA_LD_LIBRARY_PATH</code> in file <samp class="file"><var class="var">R_HOME</var>/etc/ldpaths</samp> (or a sub-architecture-specific version). A typical setting for ‘<samp class="samp">x86_64</samp>’ Linux is </p> <div class="example"> <pre class="example-preformatted">JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-6.fc34.x86_64/jre R_JAVA_LD_LIBRARY_PATH=${JAVA_HOME}/lib/amd64/server </pre></div> <p>Unfortunately this depends on the exact version of the <abbr class="abbr">JRE</abbr>/<abbr class="abbr">JDK</abbr> installed, and so may need updating if the Java installation is updated. This can be done by running <code class="code">R CMD javareconf</code> which updates settings in both <samp class="file"><var class="var">R_HOME</var>/etc/Makeconf</samp> and <samp class="file"><var class="var">R_HOME</var>/etc/ldpaths</samp>. See <code class="code">R CMD javareconf --help</code> for details: note that this needs to be done by the account owning the R installation. </p> <p>Another way of overriding those settings is to set the environment variable <a class="index-entry-id" id="index-R_005fJAVA_005fLD_005fLIBRARY_005fPATH-1"></a> <code class="env">R_JAVA_LD_LIBRARY_PATH</code> (before R is started, hence not in <samp class="file">~/.Renviron</samp>), which suffices to run already-installed Java-using packages. For example </p> <div class="example"> <pre class="example-preformatted">R_JAVA_LD_LIBRARY_PATH=/usr/lib/jvm/java-1.8.0/jre/lib/amd64/server </pre></div> <p>It may be possible to avoid this by specifying an invariant link as the path when configuring. For example, on that system any of </p> <div class="example"> <pre class="example-preformatted">JAVA_HOME=/usr/lib/jvm/java JAVA_HOME=/usr/lib/jvm/java-1.8.0 JAVA_HOME=/usr/lib/jvm/java-1.8.0/jre JAVA_HOME=/usr/lib/jvm/jre-1.8.0 </pre></div> <p>worked (since the ‘auto’ setting of <code class="command">/etc/alternatives</code> chose Java 8 aka 1.8.0). </p> <p>‘Non-server’ Oracle distributions of Java as from version 11 are of a full <abbr class="abbr">JDK</abbr>. However, Linux distributions can be confusing: for example Fedora 38 had </p><div class="example"> <pre class="example-preformatted">java-1.8.0-openjdk java-1.8.0-openjdk-devel java-11-openjdk java-11-openjdk-devel java-17-openjdk java-17-openjdk-devel java-latest-openjdk java-latest-openjdk-devel </pre></div> <p>where the <code class="code">-devel</code> <abbr class="abbr">RPM</abbr>s are needed to complete the <abbr class="abbr">JDK</abbr>. Debian/Ubuntu use ‘<samp class="samp">-jre</samp>’ and ‘<samp class="samp">-jdk</samp>’, e.g. </p><div class="example"> <pre class="example-preformatted">sudo apt install default-jdk </pre></div> <hr> </div> <div class="subsection-level-extent" id="Other-compiled-languages"> <div class="nav-panel"> <p> Previous: <a href="#Java-support" accesskey="p" rel="prev">Java support</a>, Up: <a href="#Useful-libraries-and-programs" accesskey="u" rel="up">Useful libraries and programs</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="Other-compiled-languages-1"><span>A.2.3 Other compiled languages<a class="copiable-link" href="#Other-compiled-languages-1"> ¶</a></span></h4> <p>Some add-on packages need a C++ compiler. This is specified by the configure variables <code class="code">CXX</code>, <code class="code">CXXFLAGS</code> and similar. <code class="command">configure</code> will normally find a suitable compiler. It is possible to specify an alternative C++17 compiler by the configure variables <code class="code">CXX17</code>, <code class="code">CXX17STD</code>, <code class="code">CXX17FLAGS</code> and similar (see <a class="pxref" href="#C_002b_002b-Support">C++ Support</a>). Again, <code class="command">configure</code> will normally find a suitable value for <code class="code">CXX17STD</code> if the compiler given by <code class="code">CXX</code> is capable of compiling C++17 code, but it is possible that a completely different compiler will be needed. (Similar macros are provided for C++20.) </p> <p>For source files with extension <samp class="file">.f90</samp> or <samp class="file">.f95</samp> containing free-form Fortran, the compiler defined by the macro <code class="code">FC</code> is used by <code class="command">R CMD INSTALL</code>. Note that it is detected by the name of the command without a test that it can actually compile Fortran 90 code. Set the configure variable <code class="code">FC</code> to override this if necessary: variables <code class="code">FCFLAGS</code> and <code class="code">FCLIBS_XTRA</code> might also need to be set. </p> <p>See file <samp class="file">config.site</samp> in the R source for more details about these variables. </p> <hr> </div> </div> <div class="section-level-extent" id="Linear-algebra"> <div class="nav-panel"> <p> Previous: <a href="#Useful-libraries-and-programs" accesskey="p" rel="prev">Useful libraries and programs</a>, Up: <a href="#Essential-and-useful-other-programs-under-a-Unix_002dalike" accesskey="u" rel="up">Essential and useful other programs under a Unix-alike</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Linear-algebra-1"><span>A.3 Linear algebra<a class="copiable-link" href="#Linear-algebra-1"> ¶</a></span></h3> <a class="index-entry-id" id="index-BLAS-library"></a> <p>The linear algebra routines in R make use of <abbr class="acronym">BLAS</abbr> (Basic Linear Algebra Subprograms, <a class="uref" href="https://netlib.org/blas/faq.html">https://netlib.org/blas/faq.html</a>) routines, and most make use of routines from <abbr class="acronym">LAPACK</abbr> (Linear Algebra PACKage, <a class="uref" href="https://netlib.org/lapack/">https://netlib.org/lapack/</a>). The R sources contain reference (Fortran) implementations of these, but they can be replaced by external libraries, usually those tuned for speed on specific CPUs. These libraries normally contain all of the BLAS routines and some tuned LAPACK routines and perhaps the rest of LAPACK from the reference implementation. Because of the way linking works, using an external BLAS library may necessitate using the version of LAPACK it contains. </p> <p>Note that the alternative implementations will not give identical numeric results. Some differences may be benign (such the signs of <abbr class="abbr">SVD</abbr>s and eigenvectors), but the optimized routines can be less accurate and (particularly for LAPACK) can be from older versions with fewer corrections. However, R relies on <abbr class="acronym">ISO</abbr>/<abbr class="acronym">IEC</abbr> 60559 compliance. This can be broken if for example the code assumes that terms with a zero factor are always zero and do not need to be computed—whereas <code class="code">x*0</code> can be <code class="code">NaN</code>. The internal BLAS has been extensively patched to avoid this whereas MKL’s documentation has warned </p><blockquote class="quotation"> <p>LAPACK routines assume that input matrices do not contain IEEE 754 special values such as INF or NaN values. Using these special values may cause LAPACK to return unexpected results or become unstable. </p></blockquote> <p>Some of the external libraries are multi-threaded. One issue is that R profiling (which uses the <code class="code">SIGPROF</code> signal) may cause problems, and you may want to disable profiling if you use a multi-threaded <abbr class="acronym">BLAS</abbr>. Note that using a multi-threaded <abbr class="acronym">BLAS</abbr> can result in taking more <abbr class="acronym">CPU</abbr> time and even more elapsed time (occasionally dramatically so) than using a similar single-threaded <abbr class="acronym">BLAS</abbr>. On a machine running other tasks, there can be contention for CPU caches that reduces the effectiveness of the optimization of cache use by a <abbr class="acronym">BLAS</abbr> implementation: some people warn that this is especially problematic for hyper-threaded CPUs. </p> <p>BLAS and LAPACK routines may be used inside threaded code, for example in <abbr class="abbr">OpenMP</abbr> sections in packages such as <a class="url" href="https://CRAN.R-project.org/package=mgcv"><strong class="strong">mgcv</strong></a>. The reference implementations are thread-safe but external ones may not be (even single-threaded ones): this can lead to hard-to-track-down incorrect results or segfaults. </p> <p>There is a tendency for re-distributors of R to use ‘enhanced’ linear algebra libraries without explaining their downsides. </p> <ul class="mini-toc"> <li><a href="#BLAS" accesskey="1">BLAS</a></li> <li><a href="#LAPACK" accesskey="2">LAPACK</a></li> <li><a href="#Caveats" accesskey="3">Caveats</a></li> </ul> <hr> <div class="subsection-level-extent" id="BLAS"> <div class="nav-panel"> <p> Next: <a href="#LAPACK" accesskey="n" rel="next">LAPACK</a>, Previous: <a href="#Linear-algebra" accesskey="p" rel="prev">Linear algebra</a>, Up: <a href="#Linear-algebra" accesskey="u" rel="up">Linear algebra</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="BLAS-1"><span>A.3.1 BLAS<a class="copiable-link" href="#BLAS-1"> ¶</a></span></h4> <p>An external BLAS library has to be explicitly requested at configure time. </p> <p>You can specify a particular <abbr class="acronym">BLAS</abbr> library <em class="emph">via</em> a value for the configuration option <samp class="option">--with-blas</samp>. If this is given with no <code class="code">=</code>, its value is taken from the <a class="index-entry-id" id="index-BLAS_005fLIBS"></a> environment variable <code class="env">BLAS_LIBS</code>, set for example in <samp class="file">config.site</samp>. If neither the option nor the environment variable supply a value, a search is made for a suitable<a class="footnote" id="DOCF58" href="#FOOT58"><sup>58</sup></a> <abbr class="acronym">BLAS</abbr>. If the value is not obviously a linker command (starting with a dash or giving the path to a library), it is prefixed by ‘<samp class="samp">-l</samp>’, so </p> <div class="example"> <pre class="example-preformatted">--with-blas="foo" </pre></div> <p>is an instruction to link against ‘<samp class="samp">-lfoo</samp>’ to find an external <abbr class="acronym">BLAS</abbr> (which needs to be found both at link time and run time). </p> <p>The configure code checks that the external <abbr class="acronym">BLAS</abbr> is complete (as of LAPACK 3.9.1: it must include all double precision and double complex routines, as well as <code class="code">LSAME</code>), and appears to be usable. However, an external <abbr class="acronym">BLAS</abbr> has to be usable from a shared object (so must contain position-independent code), and that is not checked. Also, the BLAS can be switched after configure is run, either as a symbolic link or by the mechanisms mentioned below, and this can defeat the completeness check. </p> <p>Some enhanced <abbr class="acronym">BLAS</abbr>es are compiler-system-specific (<code class="code">Accelerate</code> on macOS, <code class="code">sunperf</code> on Solaris<a class="footnote" id="DOCF59" href="#FOOT59"><sup>59</sup></a>, <code class="code">libessl</code> on IBM). The correct incantation for these is often found <em class="emph">via</em> <samp class="option">--with-blas</samp> with no value on the appropriate platforms. </p> <p>Note that under Unix (but not under Windows) if R is compiled against a non-default <abbr class="acronym">BLAS</abbr> and <samp class="option">--enable-BLAS-shlib</samp> is <strong class="strong">not</strong> used (it is the default on all platforms except <abbr class="abbr">AIX</abbr>), then all <abbr class="acronym">BLAS</abbr>-using packages must also be. So if R is re-built to use an enhanced <abbr class="acronym">BLAS</abbr> then packages such as <a class="url" href="https://CRAN.R-project.org/package=quantreg"><strong class="strong">quantreg</strong></a> will need to be re-installed. </p> <p>Debian/Ubuntu systems provide a system-specific way to switch the BLAS in use: Build R with <samp class="option">--with-blas</samp> to select the OS version of the reference BLAS, and then use <code class="command">update-alternatives</code> to switch between the available BLAS libraries. See <a class="uref" href="https://wiki.debian.org/DebianScience/LinearAlgebraLibraries">https://wiki.debian.org/DebianScience/LinearAlgebraLibraries</a>. </p> <p>Fedora 33 and later offer ‘FlexiBLAS’, a similar mechanism for switching the BLAS in use (<a class="uref" href="https://www.mpi-magdeburg.mpg.de/projects/flexiblas">https://www.mpi-magdeburg.mpg.de/projects/flexiblas</a>). However, rather than overriding <code class="code">libblas</code>, this requires configuring R with option <samp class="option">--with-blas=flexiblas</samp>. ‘Backend’ wrappers are available for the reference BLAS, ATLAS and serial, threaded and <abbr class="abbr">OpenMP</abbr> builds of OpenBLAS and BLIS, and perhaps others<a class="footnote" id="DOCF60" href="#FOOT60"><sup>60</sup></a>. This can be controlled from a running R session by package <a class="url" href="https://CRAN.R-project.org/package=flexiblas"><strong class="strong">flexiblas</strong></a>. </p> <p>BLAS implementations which use parallel computations can be non-deterministic: this is known for ATLAS. </p> <ul class="mini-toc"> <li><a href="#ATLAS" accesskey="1">ATLAS</a></li> <li><a href="#OpenBLAS-and-BLIS" accesskey="2">OpenBLAS and BLIS</a></li> <li><a href="#MKL" accesskey="3">Intel MKL</a></li> <li><a href="#Shared-BLAS" accesskey="4">Shared BLAS</a></li> </ul> <hr> <div class="subsubsection-level-extent" id="ATLAS"> <div class="nav-panel"> <p> Next: <a href="#OpenBLAS-and-BLIS" accesskey="n" rel="next">OpenBLAS and BLIS</a>, Previous: <a href="#BLAS" accesskey="p" rel="prev">BLAS</a>, Up: <a href="#BLAS" accesskey="u" rel="up">BLAS</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsubsection" id="ATLAS-1"><span>A.3.1.1 ATLAS<a class="copiable-link" href="#ATLAS-1"> ¶</a></span></h4> <p>ATLAS (<a class="uref" href="https://math-atlas.sourceforge.net/">https://math-atlas.sourceforge.net/</a>) is a “tuned” <abbr class="acronym">BLAS</abbr> that runs on a wide range of Unix-alike platforms. Unfortunately it is built by default as a static library that on some platforms may not be able to be used with shared objects such as are used in R packages. Be careful when using pre-built versions of ATLAS static libraries (they seem to work on ‘<samp class="samp">ix86</samp>’ platforms, but not always on ‘<samp class="samp">x86_64</samp>’ ones). </p> <p>ATLAS contains replacements for a small number of LAPACK routines, but can be built to merge these with the reference LAPACK sources to include a full LAPACK library. </p> <p>Recent versions of ATLAS can be built as a single shared library, either <code class="code">libsatlas</code> or <code class="code">libtatlas</code> (serial or threaded respectively): these may even contain a full LAPACK. Such builds can be used by one of </p><div class="example"> <pre class="example-preformatted">--with-blas=satlas --with-blas=tatlas </pre></div> <p>or, as on ‘<samp class="samp">x86_64</samp>’ Fedora where a path needs to be specified, </p><div class="example"> <pre class="example-preformatted">--with-blas="-L/usr/lib64/atlas -lsatlas" --with-blas="-L/usr/lib64/atlas -ltatlas" </pre></div> <p>Distributed ATLAS libraries cannot be tuned to your machine and so are a compromise: for example Fedora tunes<a class="footnote" id="DOCF61" href="#FOOT61"><sup>61</sup></a> ‘<samp class="samp">x86_64</samp>’ <abbr class="abbr">RPM</abbr>s for CPUs with SSE3 extensions, and separate <abbr class="abbr">RPM</abbr>s may be available for specific CPU families. </p> <p>Note that building R on Linux against distributed shared libraries may need ‘<samp class="samp">-devel</samp>’ or ‘<samp class="samp">-dev</samp>’ packages installed. </p> <p>Linking against multiple static libraries requires one of </p><div class="example"> <pre class="example-preformatted">--with-blas="-lf77blas -latlas" --with-blas="-lptf77blas -lpthread -latlas" --with-blas="-L/path/to/ATLAS/libs -lf77blas -latlas" --with-blas="-L/path/to/ATLAS/libs -lptf77blas -lpthread -latlas" </pre></div> <p>Consult its installation guide<a class="footnote" id="DOCF62" href="#FOOT62"><sup>62</sup></a> for how to build ATLAS as a shared library or as a static library with position-independent code (on platforms where that matters). </p> <p>According to the ATLAS FAQ<a class="footnote" id="DOCF63" href="#FOOT63"><sup>63</sup></a> the maximum number of threads used by multi-threaded ATLAS is set at compile time. Also, the author advises against using multi-threaded ATLAS on hyper-threaded CPUs without restricting affinities at compile-time to one virtual core per physical CPU. (For the Fedora libraries the compile-time flag specifies 4 threads.) </p> <hr> </div> <div class="subsubsection-level-extent" id="OpenBLAS-and-BLIS"> <div class="nav-panel"> <p> Next: <a href="#MKL" accesskey="n" rel="next">Intel MKL</a>, Previous: <a href="#ATLAS" accesskey="p" rel="prev">ATLAS</a>, Up: <a href="#BLAS" accesskey="u" rel="up">BLAS</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsubsection" id="OpenBLAS-and-BLIS-1"><span>A.3.1.2 OpenBLAS and BLIS<a class="copiable-link" href="#OpenBLAS-and-BLIS-1"> ¶</a></span></h4> <p>Dr Kazushige Goto wrote a tuned <abbr class="acronym">BLAS</abbr> for several processors and OSes, which was frozen in 2010. OpenBLAS (<a class="uref" href="https://www.openblas.net/">https://www.openblas.net/</a>) is a descendant project with support for some later CPUs. </p> <p>This can be used by configuring R with something like </p> <div class="example"> <pre class="example-preformatted">--with-blas="openblas" </pre></div> <p>See see <a class="pxref" href="#Shared-BLAS">Shared BLAS</a> for an alternative (and in many ways preferable) way to use them. </p> <p>Some platforms provide multiple builds of OpenBLAS: for example Fedora has <abbr class="abbr">RPM</abbr>s<a class="footnote" id="DOCF64" href="#FOOT64"><sup>64</sup></a> </p><div class="example"> <pre class="example-preformatted">openblas openblas-threads openblas-openmp </pre></div> <p>providing shared libraries </p><div class="example"> <pre class="example-preformatted">libopenblas.so libopenblasp.so libopenblaso.so </pre></div> <p>respectively, each of which can be used as a shared BLAS. For the second and third the number of threads is controlled by <code class="env">OPENBLAS_NUM_THREADS</code> and <code class="env">OMP_NUM_THREADS</code> (as usual for <abbr class="abbr">OpenMP</abbr>) respectively. </p> <p>These and their Debian equivalents contain a complete LAPACK implementation. </p> <p>Note that building R on Linux against distributed libraries may need ‘<samp class="samp">-devel</samp>’ or ‘<samp class="samp">-dev</samp>’ packages installed. </p> <p>For ‘<samp class="samp">ix86</samp>’ and ‘<samp class="samp">x86_64</samp>’ CPUs most distributed libraries contain several alternatives for different CPU microarchitectures with the choice being made at run time. </p> <p>Another descendant project is BLIS (<a class="uref" href="https://github.com/flame/blis">https://github.com/flame/blis</a>). This has (in Fedora) shared libraries </p><div class="example"> <pre class="example-preformatted">libblis.so libblisp.so libbliso.so </pre></div> <p>(<code class="code">p</code> for ‘threads’, <code class="code">o</code> for <abbr class="abbr">OpenMP</abbr> as for OpenBLAS) which can also be used as a shared BLAS. The Fedora builds do not include LAPACK in the BLIS libraries. </p> <hr> </div> <div class="subsubsection-level-extent" id="MKL"> <div class="nav-panel"> <p> Next: <a href="#Shared-BLAS" accesskey="n" rel="next">Shared BLAS</a>, Previous: <a href="#OpenBLAS-and-BLIS" accesskey="p" rel="prev">OpenBLAS and BLIS</a>, Up: <a href="#BLAS" accesskey="u" rel="up">BLAS</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsubsection" id="Intel-MKL"><span>A.3.1.3 Intel MKL<a class="copiable-link" href="#Intel-MKL"> ¶</a></span></h4> <p>For Intel processors (and perhaps others) and some distributions of Linux, there is Intel’s Math Kernel Library<a class="footnote" id="DOCF65" href="#FOOT65"><sup>65</sup></a>. You are encouraged to read the documentation which is installed with the library before attempting to link to MKL. This includes a ‘link line advisor’ which will suggest appropriate incantations: its use is recommended. Or see <a class="uref" href="https://www.intel.com/content/www/us/en/developer/tools/oneapi/onemkl-link-line-advisor.html#gs.vpt6qp">https://www.intel.com/content/www/us/en/developer/tools/oneapi/onemkl-link-line-advisor.html#gs.vpt6qp</a> (which at the time of writing selected the Intel library for linking with GCC). </p> <p>There are also versions of MKL for macOS<a class="footnote" id="DOCF66" href="#FOOT66"><sup>66</sup></a> and Windows, but when these have been tried they did not work with the default compilers used for R on those platforms. </p> <p>The following examples have been used with MKL versions 10.3 to 2023.2.0, for GCC compilers on ‘<samp class="samp">x86_64</samp>’ CPUs. (See also <a class="ref" href="#Intel-compilers">Intel compilers</a>.) </p> <p>To use a sequential version of MKL we used </p> <div class="example"> <pre class="example-preformatted">MKL_LIB_PATH=/path/to/intel_mkl/mkl/lib/intel64 export LD_LIBRARY_PATH=$MKL_LIB_PATH MKL="-L${MKL_LIB_PATH} -lmkl_gf_lp64 -lmkl_core -lmkl_sequential" ./configure --with-blas="$MKL" --with-lapack </pre></div> <p>The option <samp class="option">--with-lapack</samp> is used since MKL contains a tuned copy of LAPACK (often older than the current version) as well as the <abbr class="acronym">BLAS</abbr> (see <a class="pxref" href="#LAPACK">LAPACK</a>), although this can be omitted. </p> <p>Threaded MKL may be used by replacing the line defining the variable <code class="code">MKL</code> by </p> <div class="example"> <pre class="example-preformatted">MKL="-L${MKL_LIB_PATH} -lmkl_gf_lp64 -lmkl_core \ -lmkl_gnu_thread -dl -fopenmp" </pre></div> <p>R can also be linked against a single shared library, <code class="code">libmkl_rt.so</code>, for both BLAS and LAPACK, but the correct <abbr class="abbr">OpenMP</abbr> and MKL interface layer then has to be selected via environment variables. With 64-bit builds and the GCC compilers, we used </p> <div class="example"> <pre class="example-preformatted">export MKL_INTERFACE_LAYER=GNU,LP64 export MKL_THREADING_LAYER=GNU </pre></div> <p>On Debian/Ubuntu, MKL is provided by package <code class="code">intel-mkl-full</code> and one can set <code class="code">libmkl_rt.so</code> as the system-wide implementation of both BLAS and LAPACK during installation of the package, so that also R installed from Debian/Ubuntu package <code class="code">r-base</code> would use it. It is, however, still essential to set <code class="code">MKL_INTERFACE_LAYER</code> and <code class="code">MKL_THREADING_LAYER</code> before running R, otherwise MKL computations will produce incorrect results. R does not have to be rebuilt to use MKL, but <code class="code">configure</code> includes tests which may discover some errors such as a failure to set the correct <abbr class="abbr">OpenMP</abbr> and MKL interface layer. </p> <p>Note that the Debian/Ubuntu distribution can be quite old (for example <code class="code">2020.4</code> in mid-2023 when <code class="code">2023.1</code> was current): this can be important for the LAPACK version included. </p> <p>The default number of threads will be chosen by the <abbr class="abbr">OpenMP</abbr> software, but can be controlled by setting <code class="code">OMP_NUM_THREADS</code> or <code class="code">MKL_NUM_THREADS</code>, and in recent versions seems to default to a sensible value for sole use of the machine. (Parallel MKL has not always passed <code class="command">make check-all</code>, but did with MKL 2019.4 and later.) </p> <p>MKL includes a partial implementation of FFTW3, which causes trouble for applications that require some of the FFTW3 functionality unsupported in MKL. Please see the MKL manuals for description of these limitations and for instructions on how to create a custom version of MKL which excludes the FFTW3 wrappers. </p> <p>There is Intel documentation for building R with MKL at <a class="uref" href="https://www.intel.com/content/www/us/en/developer/articles/technical/using-onemkl-with-r.html">https://www.intel.com/content/www/us/en/developer/articles/technical/using-onemkl-with-r.html</a>: that includes </p><div class="example"> <pre class="example-preformatted">-Wl,--no-as-needed </pre></div> <p>which we have not found necessary. </p> <hr> </div> <div class="subsubsection-level-extent" id="Shared-BLAS"> <div class="nav-panel"> <p> Previous: <a href="#MKL" accesskey="p" rel="prev">Intel MKL</a>, Up: <a href="#BLAS" accesskey="u" rel="up">BLAS</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsubsection" id="Shared-BLAS-1"><span>A.3.1.4 Shared BLAS<a class="copiable-link" href="#Shared-BLAS-1"> ¶</a></span></h4> <p>The <abbr class="acronym">BLAS</abbr> library will be used for many of the add-on packages as well as for R itself. This means that it is better to use a shared/dynamic <abbr class="acronym">BLAS</abbr> library, as most of a static library will be compiled into the R executable and each <abbr class="acronym">BLAS</abbr>-using package. </p> <p>R offers the option of compiling the <abbr class="acronym">BLAS</abbr> into a dynamic library <code class="code">libRblas</code> stored in <samp class="file"><var class="var">R_HOME</var>/lib</samp> and linking both R itself and all the add-on packages against that library. </p> <p>This is the default on all platforms except <abbr class="abbr">AIX</abbr> unless an external <abbr class="acronym">BLAS</abbr> is specified and found: for the latter it can be used by specifying the option <samp class="option">--enable-BLAS-shlib</samp>, and it can always be disabled via <samp class="option">--disable-BLAS-shlib</samp>. </p> <p>This has both advantages and disadvantages. </p> <ul class="itemize mark-bullet"> <li>It saves space by having only a single copy of the <abbr class="acronym">BLAS</abbr> routines, which is helpful if there is an external static <abbr class="acronym">BLAS</abbr> (as used to be standard for ATLAS). </li><li>There may be performance disadvantages in using a shared <abbr class="acronym">BLAS</abbr>. Probably the most likely is when R’s internal <abbr class="acronym">BLAS</abbr> is used and R is <em class="emph">not</em> built as a shared library, when it is possible to build the <abbr class="acronym">BLAS</abbr> into <samp class="file">R.bin</samp> (and <samp class="file">libR.a</samp>) without using position-independent code. However, experiments showed that in many cases using a shared <abbr class="acronym">BLAS</abbr> was as fast, provided high levels of compiler optimization are used. </li><li>It is easy to change the <abbr class="acronym">BLAS</abbr> without needing to re-install R and all the add-on packages, since all references to the <abbr class="acronym">BLAS</abbr> go through <code class="code">libRblas</code>, and that can be replaced. Note though that any dynamic libraries the replacement links to will need to be found by the linker: this may need the library path to be changed in <samp class="file"><var class="var">R_HOME</var>/etc/ldpaths</samp>. </li></ul> <p>Another option to change the <abbr class="acronym">BLAS</abbr> in use is to symlink a single dynamic <abbr class="acronym">BLAS</abbr> library to <samp class="file"><var class="var">R_HOME</var>/lib/libRblas.so</samp>. For example, just </p> <div class="example"> <pre class="example-preformatted">mv <var class="var">R_HOME</var>/lib/libRblas.so <var class="var">R_HOME</var>/lib/libRblas.so.keep ln -s /usr/lib64/libopenblasp.so.0 <var class="var">R_HOME</var>/lib/libRblas.so </pre></div> <p>on ‘<samp class="samp">x86_64</samp>’ Fedora will change the <abbr class="acronym">BLAS</abbr> used to multithreaded OpenBLAS. A similar link works for most versions of the OpenBLAS (provided the appropriate <samp class="file">lib</samp> directory is in the run-time library path or <code class="command">ld.so</code> cache). It can also be used for a single-library ATLAS, so on ‘<samp class="samp">x86_64</samp>’ Fedora either of </p> <div class="example"> <pre class="example-preformatted">ln -s /usr/lib64/atlas/libsatlas.so.3 <var class="var">R_HOME</var>/lib/libRblas.so ln -s /usr/lib64/atlas/libtatlas.so.3 <var class="var">R_HOME</var>/lib/libRblas.so </pre></div> <p>can be used with its distributed ATLAS libraries. (If you have the ‘<samp class="samp">-devel</samp>’ <abbr class="abbr">RPM</abbr>s installed you can omit the <code class="code">.0</code>/<code class="code">.3</code>.) </p> <p>Note that rebuilding or symlinking <samp class="file">libRblas.so</samp> may not suffice if the intention is to use a modified LAPACK contained in an external BLAS: the latter could even cause conflicts. However, on Fedora where the OpenBLAS distribution contains a copy of LAPACK, it is the latter which is used. </p> <hr> </div> </div> <div class="subsection-level-extent" id="LAPACK"> <div class="nav-panel"> <p> Next: <a href="#Caveats" accesskey="n" rel="next">Caveats</a>, Previous: <a href="#BLAS" accesskey="p" rel="prev">BLAS</a>, Up: <a href="#Linear-algebra" accesskey="u" rel="up">Linear algebra</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="LAPACK-1"><span>A.3.2 LAPACK<a class="copiable-link" href="#LAPACK-1"> ¶</a></span></h4> <a class="index-entry-id" id="index-LAPACK-library"></a> <p>If when configuring R a system LAPACK library is found of version 3.9.0 or later (and does not contain BLAS routines) it will be used instead of compiling the LAPACK code in the package sources. This can be prevented by configuring R with <samp class="option">--without-lapack</samp>. Using a static <samp class="file">liblapack.a</samp> is not supported. </p> <p>It is assumed that <code class="code">-llapack</code> is the reference LAPACK library but on Debian/Ubuntu it can be switched, including after R is installed. On such a platform it is better to use <samp class="option">--without-lapack</samp> or <samp class="option">--with-blas --with-lapack</samp> (see below) explicitly. The known examples<a class="footnote" id="DOCF67" href="#FOOT67"><sup>67</sup></a> of a non-reference LAPACK library found at installation all contain BLAS routines so are not used by a default <code class="command">configure</code> run. </p> <p>Provision is made for specifying an external LAPACK library with option <samp class="option">--with-lapack</samp>, principally to cope with <abbr class="acronym">BLAS</abbr> libraries which contain a copy of LAPACK (such as <code class="code">Accelerate</code> on macOS and some builds of ATLAS, FlexiBLAS, MKL and OpenBLAS on ‘<samp class="samp">ix86</samp>’/‘<samp class="samp">x86_64</samp>’ Linux). At least LAPACK version 3.2 is required. This can only be done if <samp class="option">--with-blas</samp> has been used. </p> <p>However, the likely performance gains are thought to be small (and may be negative). The default is not to search for a suitable LAPACK library, and this is definitely <strong class="strong">not</strong> recommended. You can specify a specific LAPACK library or a search for a generic library by the configuration option <samp class="option">--with-lapack</samp> without a value. The default for <samp class="option">--with-lapack</samp> is to check the <abbr class="acronym">BLAS</abbr> library (for function <code class="code">DPSTRF</code>) and then look for an external library ‘<samp class="samp">-llapack</samp>’. Sites searching for the fastest possible linear algebra may want to build a LAPACK library using the ATLAS-optimized subset of LAPACK. Similarly, OpenBLAS can be built to contain an optimized subset of LAPACK or a full LAPACK (the latter seeming to be the default). </p> <p>A value for <samp class="option">--with-lapack</samp> can be set <em class="emph">via</em> the environment variable <a class="index-entry-id" id="index-LAPACK_005fLIBS"></a> <code class="env">LAPACK_LIBS</code>, but this will only be used if <samp class="option">--with-lapack</samp> is specified and the <abbr class="acronym">BLAS</abbr> library does not contain LAPACK. </p> <p>Please bear in mind that using <samp class="option">--with-lapack</samp> is provided <strong class="strong">only</strong> because it is necessary on some platforms and because some users want to experiment with claimed performance improvements. In practice its main uses are without a value, </p> <ul class="itemize mark-bullet"> <li>with an ‘enhanced’ BLAS such as ATLAS, FlexiBLAS, MKL or OpenBLAS which contains a full LAPACK (to avoid possible conflicts), or </li><li>on Debian/Ubuntu systems to select the system <code class="code">liblapack</code> which can be switched by the ‘alternatives’ mechanism. </li></ul> <p>If building LAPACK from its Netlib sources, be aware that <code class="command">make</code> with its supplied <samp class="file">Makefile</samp> will make a <em class="emph">static</em> library and R requires a shared/dynamic one. To get one, use <code class="command">cmake</code> as documented briefly in <samp class="file">README.md</samp>. Something like (to build only the double and double complex subroutines with 32-bit array indices), </p> <div class="example"> <pre class="example-preformatted">mkdir build cd build cmake \ -DCMAKE_INSTALL_PREFIX=/where/you/want/to/install \ -DCMAKE_BUILD_TYPE:STRING=Release \ -DBUILD_DEPRECATED=ON -DBUILD_SHARED_LIBS=ON \ -DBUILD_INDEX64_EXT_API:BOOL=OFF \ -DBUILD_SINGLE:BOOL=OFF -DBUILD_COMPLEX:BOOL=OFF \ -DLAPACKE=OFF -DCBLAS=OFF \ -S .. make -j10 </pre></div> <p>This builds the reference BLAS and the reference LAPACK linked to it. </p> <p>Note that <code class="command">cmake</code> files do not provide an <code class="code">uninstall</code> target, but <samp class="file">build/install_manifest.txt</samp> is a list of the files installed, so you can remove them <em class="emph">via</em> shell commands or from R. </p> <p>If using <samp class="option">--with-lapack</samp> to get a generic LAPACK (or allowing the default to select one), consider also using <samp class="option">--with-blas</samp> (with a path if an enhanced BLAS is installed). </p> <hr> </div> <div class="subsection-level-extent" id="Caveats"> <div class="nav-panel"> <p> Previous: <a href="#LAPACK" accesskey="p" rel="prev">LAPACK</a>, Up: <a href="#Linear-algebra" accesskey="u" rel="up">Linear algebra</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="Caveats-1"><span>A.3.3 Caveats<a class="copiable-link" href="#Caveats-1"> ¶</a></span></h4> <p>As with all libraries, you need to ensure that they and R were compiled with compatible compilers and flags. For example, this has meant that on Sun Sparc using the Oracle compilers the flag <samp class="option">-dalign</samp> is needed if <code class="code">sunperf</code> is to be used. </p> <p>On some systems it has been necessary that an external <abbr class="acronym">BLAS</abbr>/LAPACK was built with the same Fortran compiler used to build R. </p> <p>BLAS and LAPACK libraries built with recent versions of <code class="command">gfortran</code> require calls from C/C++ to handle ‘hidden’ character lengths — R itself does so but many packages used not to and some have segfaulted. This was largely circumvented by using the Fortran flag <samp class="option">-fno-optimize-sibling-calls</samp> (formerly set by <code class="command">configure</code> if it detected <code class="command">gfortran</code> 7 or later): however use of the R headers which include those character-length arguments is no longer optional in packages. </p> <p>LAPACK 3.9.0 (and probably earlier) had a bug in which the <code class="code">DCOMBSSQ</code> subroutine may cause NA to be interpreted as zero. This is fixed in the R 3.6.3 and later sources, but if you use an external LAPACK, you may need to fix it there. (The bug was corrected in 3.9.1 and the routine removed in 3.10.1.) </p> <p>The code (in <code class="code">dlapack.f</code>) should read </p><div class="example"> <pre class="example-preformatted">* .. * .. Executable Statements .. * IF( V1( 1 ).GE.V2( 1 ) ) THEN IF( V1( 1 ).NE.ZERO ) THEN V1( 2 ) = V1( 2 ) + ( V2( 1 ) / V1( 1 ) )**2 * V2( 2 ) ELSE V1( 2 ) = V1( 2 ) + V2( 2 ) END IF ELSE V1( 2 ) = V2( 2 ) + ( V1( 1 ) / V2( 1 ) )**2 * V1( 2 ) V1( 1 ) = V2( 1 ) END IF RETURN </pre></div> <p>(The inner ELSE clause was missing in LAPACK 3.9.0.) </p> <p>If you do use an external LAPACK, be aware of potential problems with other bugs in the LAPACK sources (or in the posted corrections to those sources), seen several times in Linux distributions over the years. We have even seen distributions with missing LAPACK routines from their <code class="code">liblapack</code>. </p> <p>We rely on limited support in LAPACK for matrices with <em class="math">2^{31}</em> or more elements: it is possible that an external LAPACK will not have that support. </p> <hr> </div> </div> </div> <div class="appendix-level-extent" id="Configuration-on-a-Unix_002dalike"> <div class="nav-panel"> <p> Next: <a href="#Platform-notes" accesskey="n" rel="next">Platform notes</a>, Previous: <a href="#Essential-and-useful-other-programs-under-a-Unix_002dalike" accesskey="p" rel="prev">Essential and useful other programs under a Unix-alike</a>, Up: <a href="#Top" accesskey="u" rel="up">R Installation and Administration</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h2 class="appendix" id="Configuration-on-a-Unix_002dalike-1"><span>Appendix B Configuration on a Unix-alike<a class="copiable-link" href="#Configuration-on-a-Unix_002dalike-1"> ¶</a></span></h2> <ul class="mini-toc"> <li><a href="#Configuration-options" accesskey="1">Configuration options</a></li> <li><a href="#Internationalization-support" accesskey="2">Internationalization support</a></li> <li><a href="#Configuration-variables" accesskey="3">Configuration variables</a></li> <li><a href="#Setting-the-shell" accesskey="4">Setting the shell</a></li> <li><a href="#Using-make" accesskey="5">Using make</a></li> <li><a href="#Using-Fortran" accesskey="6">Using Fortran</a></li> <li><a href="#Compile-and-load-flags" accesskey="7">Compile and load flags</a></li> <li><a href="#Maintainer-mode" accesskey="8">Maintainer mode</a></li> </ul> <hr> <div class="section-level-extent" id="Configuration-options"> <div class="nav-panel"> <p> Next: <a href="#Internationalization-support" accesskey="n" rel="next">Internationalization support</a>, Previous: <a href="#Configuration-on-a-Unix_002dalike" accesskey="p" rel="prev">Configuration on a Unix-alike</a>, Up: <a href="#Configuration-on-a-Unix_002dalike" accesskey="u" rel="up">Configuration on a Unix-alike</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Configuration-options-1"><span>B.1 Configuration options<a class="copiable-link" href="#Configuration-options-1"> ¶</a></span></h3> <p><code class="command">configure</code> has many options: running </p> <div class="example"> <pre class="example-preformatted">./configure --help </pre></div> <p>will give a list. Probably the most important ones not covered elsewhere are (defaults in brackets) </p> <dl class="table"> <dt><samp class="option">--with-x</samp></dt> <dd><p>use the X Window System [yes] </p></dd> <dt><samp class="option">--x-includes=<var class="var">DIR</var></samp></dt> <dd><p>X include files are in <var class="var">DIR</var> </p></dd> <dt><samp class="option">--x-libraries=<var class="var">DIR</var></samp></dt> <dd><p>X library files are in <var class="var">DIR</var> </p></dd> <dt><samp class="option">--with-readline</samp></dt> <dd><p>use readline library (if available) [yes] </p></dd> <dt><samp class="option">--enable-R-profiling</samp></dt> <dd><p>attempt to compile support for <code class="code">Rprof()</code> [yes] </p></dd> <dt><samp class="option">--enable-memory-profiling</samp></dt> <dd><p>attempt to compile support for <code class="code">Rprofmem()</code> and <code class="code">tracemem()</code> [no] </p></dd> <dt><samp class="option">--enable-R-shlib</samp></dt> <dd><p>build R as a shared/dynamic library [no] </p></dd> <dt><samp class="option">--enable-BLAS-shlib</samp></dt> <dd><p>build the <abbr class="acronym">BLAS</abbr> as a shared/dynamic library [yes, except on <abbr class="abbr">AIX</abbr>] </p></dd> </dl> <p>You can use <samp class="option">--without-foo</samp> or <samp class="option">--disable-foo</samp> for the negatives. </p> <p>You will want to use <samp class="option">--disable-R-profiling</samp> if you are building a profiled executable of R (e.g. with ‘<samp class="samp">-pg)</samp>’. Support for R profiling requires OS support for POSIX threads (<em class="emph">aka</em> ‘<samp class="samp">pthreads</samp>’), which are available on all mainstream Unix-alike platforms. </p> <p>Flag <samp class="option">--enable-R-shlib</samp> causes the make process to build R as a dynamic (shared) library, typically called <samp class="file">libR.so</samp>, and link the main R executable <samp class="file">R.bin</samp> against that library. This can only be done if all the code (including system libraries) can be compiled into a dynamic library, and there may be a performance<a class="footnote" id="DOCF68" href="#FOOT68"><sup>68</sup></a> penalty. So you probably only want this if you will be using an application which embeds R. Note that C code in packages installed on an R system linked with <samp class="option">--enable-R-shlib</samp> is linked against the dynamic library and so such packages cannot be used from an R system built in the default way. Also, because packages are linked against R they are on some OSes also linked against the dynamic libraries R itself is linked against, and this can lead to symbol conflicts. </p> <p>For maximally effective use of <code class="command">valgrind</code>, R should be compiled with Valgrind instrumentation. The <code class="command">configure</code> option is <samp class="option">--with-valgrind-instrumentation=<var class="var">level</var></samp>, where <var class="var">level</var> is 0, 1 or 2. (Level 0 is the default and does not add anything.) The system headers for <code class="command">valgrind</code> are required: on Linux they may be in a separate package such as <strong class="strong">valgrind-devel</strong>. </p> <p>If you need to re-configure R with different options you may need to run <code class="code">make clean</code> or even <code class="code">make distclean</code> before doing so. </p> <p>The <samp class="file">configure</samp> script has other generic options added by <code class="command">autoconf</code> and which are not supported for R: in particular building for one architecture on a different host is not possible. </p> <hr> </div> <div class="section-level-extent" id="Internationalization-support"> <div class="nav-panel"> <p> Next: <a href="#Configuration-variables" accesskey="n" rel="next">Configuration variables</a>, Previous: <a href="#Configuration-options" accesskey="p" rel="prev">Configuration options</a>, Up: <a href="#Configuration-on-a-Unix_002dalike" accesskey="u" rel="up">Configuration on a Unix-alike</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Internationalization-support-1"><span>B.2 Internationalization support<a class="copiable-link" href="#Internationalization-support-1"> ¶</a></span></h3> <p>Translation of messages is supported via <abbr class="acronym">GNU</abbr> <code class="code">gettext</code> unless disabled by the configure option <samp class="option">--disable-nls</samp>. The <code class="code">configure</code> report will show <code class="code">NLS</code> as one of the ‘Additional capabilities’ if support has been compiled in, and running in an English locale (but not the <code class="code">C</code> locale) will include </p> <div class="example"> <pre class="example-preformatted"> Natural language support but running in an English locale </pre></div> <p>in the greeting on starting R. </p> <hr> </div> <div class="section-level-extent" id="Configuration-variables"> <div class="nav-panel"> <p> Next: <a href="#Setting-the-shell" accesskey="n" rel="next">Setting the shell</a>, Previous: <a href="#Internationalization-support" accesskey="p" rel="prev">Internationalization support</a>, Up: <a href="#Configuration-on-a-Unix_002dalike" accesskey="u" rel="up">Configuration on a Unix-alike</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Configuration-variables-1"><span>B.3 Configuration variables<a class="copiable-link" href="#Configuration-variables-1"> ¶</a></span></h3> <a class="index-entry-id" id="index-configure-4"></a> <p>If you need or want to set certain configure variables to something other than their default, you can do that by either editing the file <samp class="file">config.site</samp> (which documents many of the variables you might want to set: others can be seen in file <samp class="file">etc/Renviron.in</samp>) or on the command line as </p> <div class="example"> <pre class="example-preformatted">./configure <var class="var">VAR</var>=<var class="var">value</var> </pre></div> <p>If you are building in a directory different from the sources, there can be copies of <samp class="file">config.site</samp> in the source and the build directories, and both will be read (in that order). In addition, if there is a file <samp class="file">~/.R/config</samp>, it is read between the <samp class="file">config.site</samp> files in the source and the build directories. </p> <p>There is also a general <code class="command">autoconf</code> mechanism for <samp class="file">config.site</samp> files, which are read before any of those mentioned in the previous paragraph. This looks first at a file specified by the <a class="index-entry-id" id="index-CONFIG_005fSITE"></a> environment variable <code class="env">CONFIG_SITE</code>, and if not is set at files such as <samp class="file">/usr/local/share/config.site</samp> and <samp class="file">/usr/local/etc/config.site</samp> in the area (exemplified by <samp class="file">/usr/local</samp>) where R would be installed. </p> <p>These variables are <em class="emph">precious</em>, implying that they do not have to be exported to the environment, are kept in the cache even if not specified on the command line, checked for consistency between two configure runs (provided that caching is used), and are kept during automatic reconfiguration as if having been passed as command line arguments, even if no cache is used. </p> <p>See the variable output section of <code class="code">configure --help</code> for a list of all these variables. </p> <p>If you find you need to alter configure variables, it is worth noting that some settings may be cached in the file <samp class="file">config.cache</samp>, and it is a good idea to remove that file (if it exists) before re-configuring. Note that caching is turned <em class="emph">off</em> by default: use the command line option <samp class="option">--config-cache</samp> (or <samp class="option">-C</samp>) to enable caching. </p> <ul class="mini-toc"> <li><a href="#Setting-paper-size" accesskey="1">Setting paper size</a></li> <li><a href="#Setting-the-browsers" accesskey="2">Setting the browsers</a></li> <li><a href="#Compilation-flags" accesskey="3">Compilation flags</a></li> <li><a href="#Making-manuals" accesskey="4">Making manuals</a></li> </ul> <hr> <div class="subsection-level-extent" id="Setting-paper-size"> <div class="nav-panel"> <p> Next: <a href="#Setting-the-browsers" accesskey="n" rel="next">Setting the browsers</a>, Previous: <a href="#Configuration-variables" accesskey="p" rel="prev">Configuration variables</a>, Up: <a href="#Configuration-variables" accesskey="u" rel="up">Configuration variables</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="Setting-paper-size-1"><span>B.3.1 Setting paper size<a class="copiable-link" href="#Setting-paper-size-1"> ¶</a></span></h4> <a class="index-entry-id" id="index-R_005fPAPERSIZE-2"></a> <p>One common variable to change is <code class="env">R_PAPERSIZE</code>, which defaults to ‘<samp class="samp">a4</samp>’, not ‘<samp class="samp">letter</samp>’. (Valid values are ‘<samp class="samp">a4</samp>’, ‘<samp class="samp">letter</samp>’, ‘<samp class="samp">legal</samp>’ and ‘<samp class="samp">executive</samp>’.) </p> <p>This is used both when configuring R to set the default, and when running R to override the default. It is also used to set the paper size when making PDF manuals. </p> <p>The configure default will most often be ‘<samp class="samp">a4</samp>’ if <code class="env">R_PAPERSIZE</code> is unset. (If the program <code class="command">paperconf</code> is found, present in many Linux distributions, <a class="index-entry-id" id="index-PAPERSIZE"></a> or the environment variable <code class="env">PAPERSIZE</code> is set, these are used to produce the default.) </p> <hr> </div> <div class="subsection-level-extent" id="Setting-the-browsers"> <div class="nav-panel"> <p> Next: <a href="#Compilation-flags" accesskey="n" rel="next">Compilation flags</a>, Previous: <a href="#Setting-paper-size" accesskey="p" rel="prev">Setting paper size</a>, Up: <a href="#Configuration-variables" accesskey="u" rel="up">Configuration variables</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="Setting-the-browsers-1"><span>B.3.2 Setting the browsers<a class="copiable-link" href="#Setting-the-browsers-1"> ¶</a></span></h4> <a class="index-entry-id" id="index-R_005fBROWSER"></a> <p>Another precious variable is <code class="env">R_BROWSER</code>, the default <abbr class="acronym">HTML</abbr> browser, which should take a value of an executable in the user’s path or specify a full path. </p> <a class="index-entry-id" id="index-R_005fPDFVIEWER"></a> <p>Its counterpart for PDF files is <code class="env">R_PDFVIEWER</code>. </p> <hr> </div> <div class="subsection-level-extent" id="Compilation-flags"> <div class="nav-panel"> <p> Next: <a href="#Making-manuals" accesskey="n" rel="next">Making manuals</a>, Previous: <a href="#Setting-the-browsers" accesskey="p" rel="prev">Setting the browsers</a>, Up: <a href="#Configuration-variables" accesskey="u" rel="up">Configuration variables</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="Compilation-flags-1"><span>B.3.3 Compilation flags<a class="copiable-link" href="#Compilation-flags-1"> ¶</a></span></h4> <p>If you have libraries and header files, e.g., for <abbr class="acronym">GNU</abbr> readline, in non-system directories, use the variables <code class="code">LDFLAGS</code> (for libraries, using ‘<samp class="samp">-L</samp>’ flags to be passed to the linker) and <code class="code">CPPFLAGS</code> (for header files, using ‘<samp class="samp">-I</samp>’ flags to be passed to the C/C++ preprocessors), respectively, to specify these locations. These default to ‘<samp class="samp">-L/usr/local/lib</samp>’ (<code class="code">LDFLAGS</code>, ‘<samp class="samp">-L/usr/local/lib64</samp>’ on most 64-bit Linux OSes) and ‘<samp class="samp">-I/usr/local/include</samp>’ (<code class="code">CPPFLAGS</code>, but note that on most systems <samp class="file">/usr/local/include</samp> is regarded as a system include directory and so instances in that macro will be skipped) to catch the most common cases. If libraries are still not found, then maybe your compiler/linker does not support re-ordering of <samp class="option">-L</samp> and <samp class="option">-l</samp> flags. In this case, use a different compiler (or a front-end shell script which does the re-ordering). </p> <p>These flags can also be used to build a faster-running version of R. On most platforms using <code class="command">gcc</code>, having ‘<samp class="samp">-O3</samp>’ in <code class="code">CFLAGS</code> and <code class="code">FFLAGS</code> produces worthwhile performance gains with <code class="command">gcc</code> and <code class="command">gfortran</code>, but may result in a less reliable build (both segfaults and incorrect numeric computations have been seen). On systems using the <abbr class="acronym">GNU</abbr> linker (especially those using R as a shared library), it is likely that including ‘<samp class="samp">-Wl,-O1</samp>’ in <code class="code">LDFLAGS</code> is worthwhile, and ‘<samp class="samp">'-Bdirect,--hash-style=both,-Wl,-O1'</samp>’ is recommended at <a class="uref" href="https://lwn.net/Articles/192624/">https://lwn.net/Articles/192624/</a>. Tuning compilation to a specific <abbr class="acronym">CPU</abbr> family (e.g. ‘<samp class="samp">-mtune=native</samp>’ for <code class="command">gcc</code>) can give worthwhile performance gains, especially on older architectures such as ‘<samp class="samp">ix86</samp>’. </p> <hr> </div> <div class="subsection-level-extent" id="Making-manuals"> <div class="nav-panel"> <p> Previous: <a href="#Compilation-flags" accesskey="p" rel="prev">Compilation flags</a>, Up: <a href="#Configuration-variables" accesskey="u" rel="up">Configuration variables</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="Making-manuals-1"><span>B.3.4 Making manuals<a class="copiable-link" href="#Making-manuals-1"> ¶</a></span></h4> <a class="index-entry-id" id="index-R_005fRD4PDF-1"></a> <a class="index-entry-id" id="index-R_005fPAPERSIZE-3"></a> <p>The default settings for making the manuals are controlled by <code class="env">R_RD4PDF</code> and <code class="env">R_PAPERSIZE</code>. </p> <hr> </div> </div> <div class="section-level-extent" id="Setting-the-shell"> <div class="nav-panel"> <p> Next: <a href="#Using-make" accesskey="n" rel="next">Using make</a>, Previous: <a href="#Configuration-variables" accesskey="p" rel="prev">Configuration variables</a>, Up: <a href="#Configuration-on-a-Unix_002dalike" accesskey="u" rel="up">Configuration on a Unix-alike</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Setting-the-shell-1"><span>B.4 Setting the shell<a class="copiable-link" href="#Setting-the-shell-1"> ¶</a></span></h3> <p>By default the shell scripts such as <samp class="file">R</samp> will be ‘<samp class="samp">#!/bin/sh</samp>’ scripts (or using the <code class="env">SHELL</code> chosen by <samp class="file">configure</samp>). This is almost always satisfactory, but on a few systems <samp class="file">/bin/sh</samp> is not a Bourne shell or clone, and the shell to be used can be changed by setting the configure variable <code class="env">R_SHELL</code> to a suitable value (a full path to a shell, e.g. <samp class="file">/usr/local/bin/bash</samp>). </p> <hr> </div> <div class="section-level-extent" id="Using-make"> <div class="nav-panel"> <p> Next: <a href="#Using-Fortran" accesskey="n" rel="next">Using Fortran</a>, Previous: <a href="#Setting-the-shell" accesskey="p" rel="prev">Setting the shell</a>, Up: <a href="#Configuration-on-a-Unix_002dalike" accesskey="u" rel="up">Configuration on a Unix-alike</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Using-make-1"><span>B.5 Using make<a class="copiable-link" href="#Using-make-1"> ¶</a></span></h3> <a class="index-entry-id" id="index-make"></a> <p>To build in a separate directory you need a <code class="command">make</code> that supports the <code class="code">VPATH</code> variable, for example <abbr class="acronym">GNU</abbr> <code class="command">make</code> and <code class="command">dmake</code>. </p> <p>If you want to use a <code class="command">make</code> by another name, for example if your <abbr class="acronym">GNU</abbr> <code class="command">make</code> is called ‘<samp class="samp">gmake</samp>’, you need to set the variable <code class="code">MAKE</code> at configure time, for example </p> <a class="index-entry-id" id="index-configure-5"></a> <div class="example"> <pre class="example-preformatted">./configure MAKE=gmake </pre></div> <hr> </div> <div class="section-level-extent" id="Using-Fortran"> <div class="nav-panel"> <p> Next: <a href="#Compile-and-load-flags" accesskey="n" rel="next">Compile and load flags</a>, Previous: <a href="#Using-make" accesskey="p" rel="prev">Using make</a>, Up: <a href="#Configuration-on-a-Unix_002dalike" accesskey="u" rel="up">Configuration on a Unix-alike</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Using-Fortran-1"><span>B.6 Using Fortran<a class="copiable-link" href="#Using-Fortran-1"> ¶</a></span></h3> <a class="index-entry-id" id="index-Fortran"></a> <p>To compile R, you need a Fortran 90 compiler. The current default is to search for <code class="command">gfortran</code>, <code class="command">g95</code>, <code class="command">xlf95</code> <code class="command">f95</code>, <code class="command">fort</code>, <code class="command">ifort</code>, <code class="command">ifc</code>, <code class="command">efc</code>, <code class="command">pgfortran</code>, <code class="command">pgf95</code> <code class="command">lf95</code>, <code class="command">ftn</code>, <code class="command">nagfor</code>, <code class="command">xlf90</code>, <code class="command">f90</code>, <code class="command">pgf90</code>, <code class="command">pghpf</code>, <code class="command">epcf90</code>. (Note that these are searched for by name, without checking the standard of Fortran they support.) The command and flags used should support fixed-form Fortran with extension <samp class="file">.f</samp>: in the unusual case that a specific flag is needed for free-form Fortran with extension <samp class="file">.f90</samp> or <samp class="file">.f95</samp>, this can be specified as part of <code class="code">FCFLAGS</code>. </p> <p>The search mechanism can be changed using the configure variable <code class="code">FC</code> which specifies the command that runs the Fortran compiler. If your Fortran compiler is in a non-standard location, you <a class="index-entry-id" id="index-PATH-1"></a> should set the environment variable <code class="env">PATH</code> accordingly before running <code class="command">configure</code>, or use the configure variable <code class="code">FC</code> to specify its full path. </p> <p>If your Fortran libraries are in slightly peculiar places, you should <a class="index-entry-id" id="index-LD_005fLIBRARY_005fPATH-1"></a> also look at <code class="env">LD_LIBRARY_PATH</code> (or your system’s equivalent) to make sure that all libraries are on this path. </p> <p>Note that only Fortran compilers which convert identifiers to lower case are supported. </p> <p>You must set whatever compilation flags (if any) are needed to ensure that Fortran <code class="code">integer</code> is equivalent to a C <code class="code">int</code> pointer and Fortran <code class="code">double precision</code> is equivalent to a C <code class="code">double</code> pointer. This is checked during the configuration process. </p> <p>Some of the Fortran code makes use of <code class="code">DOUBLE COMPLEX</code> and <code class="code">COMPLEX*16</code> variables. This is checked for at configure time, as well as its equivalence to the <code class="code">Rcomplex</code> C structure defined in <samp class="file">R_ext/Complex.h</samp>. </p> <p><code class="command">gfortran</code> 10 by default gives a compilation error for the previously widespread practice of passing a Fortran array element where an array is expected, or a scalar instead of a length-one array. See <a class="uref" href="https://gcc.gnu.org/gcc-10/porting_to.html">https://gcc.gnu.org/gcc-10/porting_to.html</a>. <code class="command">gfortran</code> 12 errors in more cases of this. </p> <hr> </div> <div class="section-level-extent" id="Compile-and-load-flags"> <div class="nav-panel"> <p> Next: <a href="#Maintainer-mode" accesskey="n" rel="next">Maintainer mode</a>, Previous: <a href="#Using-Fortran" accesskey="p" rel="prev">Using Fortran</a>, Up: <a href="#Configuration-on-a-Unix_002dalike" accesskey="u" rel="up">Configuration on a Unix-alike</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Compile-and-load-flags-1"><span>B.7 Compile and load flags<a class="copiable-link" href="#Compile-and-load-flags-1"> ¶</a></span></h3> <p>A wide range of flags can be set in the file <samp class="file">config.site</samp> or as configure variables on the command line. We have already mentioned </p> <dl class="table"> <dt><code class="code">CPPFLAGS</code></dt> <dd><p>header file search directory (<samp class="option">-I</samp>) and any other miscellaneous options for the C and C++ preprocessors and compilers </p></dd> <dt><code class="code">LDFLAGS</code></dt> <dd><p>path (<samp class="option">-L</samp>), stripping (<samp class="option">-s</samp>) and any other miscellaneous options for the linker </p></dd> </dl> <p>and others include </p> <dl class="table"> <dt><code class="code">CFLAGS</code></dt> <dd><p>debugging and optimization flags, C </p></dd> <dt><code class="code">MAIN_CFLAGS</code></dt> <dd><p>ditto, for compiling the main program (e.g. when profiling) </p></dd> <dt><code class="code">SHLIB_CFLAGS</code></dt> <dd><p>for shared objects (no known examples) </p></dd> <dt><code class="code">FFLAGS</code></dt> <dd><p>debugging and optimization flags, fixed-form Fortran </p></dd> <dt><code class="code">FCFLAGS</code></dt> <dd><p>debugging and optimization flags, free-form Fortran </p></dd> <dt><code class="code">SAFE_FFLAGS</code></dt> <dd><p>ditto for source files which need exact floating point behaviour </p></dd> <dt><code class="code">MAIN_FFLAGS</code></dt> <dd><p>ditto, for compiling the main program (e.g. when profiling) </p></dd> <dt><code class="code">SHLIB_FFLAGS</code></dt> <dd><p>for shared objects (no known examples) </p></dd> <dt><code class="code">MAIN_LDFLAGS</code></dt> <dd><p>additional flags for the main link </p></dd> <dt><code class="code">SHLIB_LDFLAGS</code></dt> <dd><p>additional flags for linking the shared objects </p></dd> <dt><code class="code">LIBnn</code></dt> <dd><p>the primary library directory, <samp class="file">lib</samp> or <samp class="file">lib64</samp> </p></dd> <dt><code class="code">CPICFLAGS</code></dt> <dd><p>special flags for compiling C code to be turned into a shared object </p></dd> <dt><code class="code">FPICFLAGS</code></dt> <dd><p>special flags for compiling Fortran code to be turned into a shared object </p></dd> <dt><code class="code">CXXPICFLAGS</code></dt> <dd><p>special flags for compiling C++ code to be turned into a shared object </p></dd> <dt><code class="code">DEFS</code></dt> <dd><p>defines to be used when compiling C code in R itself </p></dd> </dl> <p>Library paths specified as <samp class="option">-L/lib/path</samp> in <code class="code">LDFLAGS</code> are <a class="index-entry-id" id="index-LD_005fLIBRARY_005fPATH-2"></a> collected together and prepended to <code class="env">LD_LIBRARY_PATH</code> (or your system’s equivalent), so there should be no need for <samp class="option">-R</samp> or <samp class="option">-rpath</samp> flags. </p> <p>Variables such as <code class="env">CPICFLAGS</code> are determined where possible by <code class="command">configure</code>. Some systems allows two types of PIC flags, for example ‘<samp class="samp">-fpic</samp>’ and ‘<samp class="samp">-fPIC</samp>’, and if they differ the first allows only a limited number of symbols in a shared object. Since R as a shared library has about 6200 symbols, if in doubt use the larger version. </p> <p>Other variables often set by <code class="command">configure</code> include ‘<samp class="samp">MAIN_LDFLAGS</samp>’, ‘<samp class="samp">SAFE_FFLAGS</samp>’, ‘<samp class="samp">SHLIB_LDFLAGS</samp>’ and ‘<samp class="samp">SHLIB_CXXLDFLAGS</samp>’: see file <samp class="file">config.site</samp> in the sources for more documentation on these and others. </p> <p>To compile a profiling version of R, one might for example want to use ‘<samp class="samp">MAIN_CFLAGS=-pg</samp>’, ‘<samp class="samp">MAIN_FFLAGS=-pg</samp>’, ‘<samp class="samp">MAIN_LDFLAGS=-pg</samp>’ on platforms where ‘<samp class="samp">-pg</samp>’ cannot be used with position-independent code. </p> <p><strong class="strong">Beware</strong>: it may be necessary to set <code class="code">CFLAGS</code> and <code class="code">FFLAGS</code> in ways compatible with the libraries to be used: one possible issue is the alignment of doubles, another is the way structures are passed. </p> <p>On some platforms <code class="command">configure</code> will select additional flags for <code class="code">CFLAGS</code>, <code class="code">CPPFLAGS</code> and <code class="code">LIBS</code> in <code class="code">R_XTRA_CFLAGS</code> (and so on). These are for options which are always required, for example to force <abbr class="acronym">IEC</abbr> 60559 compliance. </p> <hr> </div> <div class="section-level-extent" id="Maintainer-mode"> <div class="nav-panel"> <p> Previous: <a href="#Compile-and-load-flags" accesskey="p" rel="prev">Compile and load flags</a>, Up: <a href="#Configuration-on-a-Unix_002dalike" accesskey="u" rel="up">Configuration on a Unix-alike</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Maintainer-mode-1"><span>B.8 Maintainer mode<a class="copiable-link" href="#Maintainer-mode-1"> ¶</a></span></h3> <p>There are several files that are part of the R sources but can be re-generated from their own sources by configuring with option <samp class="option">--enable-maintainer-mode</samp> and then running <code class="command">make</code> in the build directory. This requires other tools to be installed, discussed in the rest of this section. </p> <p>File <samp class="file">configure</samp> is created from <samp class="file">configure.ac</samp> and the files under <samp class="file">m4</samp> by <code class="command">autoconf</code> and <code class="command">aclocal</code> (part of the <strong class="strong">automake</strong> package). There is a formal version requirement on <code class="command">autoconf</code> of 2.71 or later, but it is unlikely that anything other than the most recent versions<a class="footnote" id="DOCF69" href="#FOOT69"><sup>69</sup></a> have been thoroughly tested. </p> <p>File <samp class="file">src/include/config.h</samp> is created by <code class="command">autoheader</code> (part of <strong class="strong">autoconf</strong>). </p> <p>Grammar files <samp class="file">*.y</samp> are converted to C sources by an implementation of <code class="command">yacc</code>, usually <code class="command">bison -y</code>: these are found in <samp class="file">src/main</samp> and <samp class="file">src/library/tools/src</samp>. It is known that earlier versions of <code class="command">bison</code> generate code which reads (and in some cases writes) outside array bounds: <code class="command">bison</code> 3.8.2 is currently used. </p> <p>The ultimate sources for package <strong class="strong">compiler</strong> are in its <samp class="file">noweb</samp> directory. To re-create the sources from <samp class="file">src/library/compiler/noweb/compiler.nw</samp>, the command <code class="command">notangle</code> is required. Some Linux distributions include this command in package <strong class="strong">noweb</strong>. It can also be installed from the sources at <a class="url" href="https://www.cs.tufts.edu/~nr/noweb/">https://www.cs.tufts.edu/~nr/noweb/</a><a class="footnote" id="DOCF70" href="#FOOT70"><sup>70</sup></a>. The package sources are only re-created even in maintainer mode if <samp class="file">src/library/compiler/noweb/compiler.nw</samp> has been updated. </p> <hr> </div> </div> <div class="appendix-level-extent" id="Platform-notes"> <div class="nav-panel"> <p> Next: <a href="#Function-and-variable-index" accesskey="n" rel="next">Function and variable index</a>, Previous: <a href="#Configuration-on-a-Unix_002dalike" accesskey="p" rel="prev">Configuration on a Unix-alike</a>, Up: <a href="#Top" accesskey="u" rel="up">R Installation and Administration</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h2 class="appendix" id="Platform-notes-1"><span>Appendix C Platform notes<a class="copiable-link" href="#Platform-notes-1"> ¶</a></span></h2> <p>This section provides some notes on building R on different Unix-alike platforms. These notes are based on tests run on one or two systems in each case with particular sets of compilers and support libraries. Success in building R depends on the proper installation and functioning of support software; your results may differ if you have other versions of compilers and support libraries. </p> <p>Older versions of this manual contain notes on platforms such as HP-UX, <abbr class="abbr">IRIX</abbr>, Alpha/OSF1 (for R < 2.10.0, and support has since been removed for all of these) and <abbr class="abbr">AIX</abbr> (for R < = 3.5.x) for which we have had no recent reports. </p> <p>C macros to select particular platforms can be tricky to track down (there is a fair amount of misinformation on the Web). The Wiki (currently) at <a class="uref" href="https://sourceforge.net/p/predef/wiki/Home/">https://sourceforge.net/p/predef/wiki/Home/</a> can be helpful. The R sources have used (often in included software under <samp class="file">src/extra</samp>) </p><div class="example"> <pre class="example-preformatted">AIX: _AIX Cygwin: __CYGWIN__ FreeBSD: __FreeBSD__ HP-UX: __hpux__, __hpux IRIX: sgi, __sgi Linux: __linux__ macOS: __APPLE__ NetBSD: __NetBSD__ OpenBSD: __OpenBSD__ Windows: _WIN32, _WIN64 Windows on 64-but ARM: _M_ARM64 or _WIN32 plus __aarch64__ </pre></div> <p>Identifying compilers can be very tricky. GCC defines <code class="code">__GNUC__</code>, but so do other compilers claiming conformance with it, notably (LLVM and Apple) <code class="command">clang</code> and Intel compilers. Further, some use the value of <code class="code">__GNUC__</code> for their version, not the version of GCC they claim to be compatible with.<a class="footnote" id="DOCF71" href="#FOOT71"><sup>71</sup></a> <code class="command">clang</code>-based compilers define <code class="code">__clang__</code>. Both LLVM and Apple <code class="command">clang</code> define <code class="code">__clang_major__</code> as a string giving their major version, but for example Apple’s 13.x.y is very different from LLVM’s 13.x.y. And compilers based on LLVM <code class="command">clang</code>, for example from Intel and IBM, will define these. Some of the included software uses <code class="code">__APPLE_CC__</code> to identify an Apple compiler (which used to include Apple builds of GCC), but Apple <code class="command">clang</code> is better identified by the <code class="code">__apple_build_version__</code> macro. </p> <ul class="mini-toc"> <li><a href="#X11-issues" accesskey="1">X11 issues</a></li> <li><a href="#Linux" accesskey="2">Linux</a></li> <li><a href="#macOS" accesskey="3">macOS</a></li> <li><a href="#FreeBSD" accesskey="4">FreeBSD</a></li> <li><a href="#OpenBSD" accesskey="5">OpenBSD</a></li> <li><a href="#Cygwin" accesskey="6">Cygwin</a></li> <li><a href="#New-platforms" accesskey="7">New platforms</a></li> </ul> <hr> <div class="section-level-extent" id="X11-issues"> <div class="nav-panel"> <p> Next: <a href="#Linux" accesskey="n" rel="next">Linux</a>, Previous: <a href="#Platform-notes" accesskey="p" rel="prev">Platform notes</a>, Up: <a href="#Platform-notes" accesskey="u" rel="up">Platform notes</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="X11-issues-1"><span>C.1 X11 issues<a class="copiable-link" href="#X11-issues-1"> ¶</a></span></h3> <p>The ‘<samp class="samp">X11()</samp>’ graphics device is the one started automatically on Unix-alikes (except most macOS builds) when plotting. As its name implies, it displays on a (local or remote) X server, and relies on the services provided by the X server. </p> <a class="index-entry-id" id="index-Cairo-2"></a> <p>The ‘modern’ version of the ‘<samp class="samp">X11()</samp>’ device is based on ‘<samp class="samp">cairo</samp>’ graphics and (in most implementations) uses ‘<samp class="samp">fontconfig</samp>’ to pick and render fonts. This is done on the server, and although there can be selection issues, they are more amenable than the issues with ‘<samp class="samp">X11()</samp>’ discussed in the rest of this section. </p> <p>When X11 was designed, most displays were around 75dpi, whereas today they are of the order of 100dpi or more. If you find that X11() is reporting<a class="footnote" id="DOCF72" href="#FOOT72"><sup>72</sup></a> missing font sizes, especially larger ones, it is likely that you are not using scalable fonts and have not installed the 100dpi versions of the X11 fonts. The names and details differ by system, but will likely have something like Fedora’s </p><div class="example"> <pre class="example-preformatted">xorg-x11-fonts-75dpi xorg-x11-fonts-100dpi xorg-x11-fonts-ISO8859-2-75dpi xorg-x11-fonts-Type1 xorg-x11-fonts-cyrillic </pre></div> <p>and you need to ensure that the ‘<samp class="samp">-100dpi</samp>’ versions are installed and on the X11 font path (check via <code class="command">xset -q</code>). The ‘<samp class="samp">X11()</samp>’ device does try to set a pointsize and not a pixel size: laptop users may find the default setting of 12 too large (although very frequently laptop screens are set to a fictitious dpi to appear like a scaled-down desktop screen). </p> <p>More complicated problems can occur in non-Western-European locales, so if you are using one, the first thing to check is that things work in the <code class="code">C</code> locale. The likely issues are a failure to find any fonts or glyphs being rendered incorrectly (often as a pair of <abbr class="acronym">ASCII</abbr> characters). X11 works by being asked for a font specification and coming up with its idea of a close match. For text (as distinct from the symbols used by plotmath), the specification is the first element of the option <code class="code">"X11fonts"</code> which defaults to </p> <div class="example"> <pre class="example-preformatted">"-adobe-helvetica-%s-%s-*-*-%d-*-*-*-*-*-*-*" </pre></div> <p>If you are using a single-byte encoding, for example ISO 8859-2 in Eastern Europe or KOI8-R in Russian, use <code class="command">xlsfonts</code> to find an appropriate family of fonts in your encoding (the last field in the listing). If you find none, it is likely that you need to install further font packages, such as ‘<samp class="samp">xorg-x11-fonts-ISO8859-2-75dpi</samp>’ and ‘<samp class="samp">xorg-x11-fonts-cyrillic</samp>’ shown in the listing above. </p> <p>Multi-byte encodings (most commonly UTF-8) are even more complicated. There are few fonts in ‘<samp class="samp">iso10646-1</samp>’, the Unicode encoding, and they only contain a subset of the available glyphs (and are often fixed-width designed for use in terminals). In such locales <em class="emph">fontsets</em> are used, made up of fonts encoded in other encodings. If the locale you are using has an entry in the ‘<samp class="samp">XLC_LOCALE</samp>’ directory (typically <samp class="file">/usr/share/X11/locale</samp>), it is likely that all you need to do is to pick a suitable font specification that has fonts in the encodings specified there. If not, you may have to get hold of a suitable locale entry for X11. This may mean that, for example, Japanese text can be displayed when running in ‘<samp class="samp">ja_JP.UTF-8</samp>’ but not when running in ‘<samp class="samp">en_GB.UTF-8</samp>’ on the same machine (although on some systems many UTF-8 X11 locales are aliased to ‘<samp class="samp">en_US.UTF-8</samp>’ which covers several character sets, e.g. ISO 8859-1 (Western European), JISX0208 (Kanji), KSC5601 (Korean), GB2312 (Chinese Han) and JISX0201 (Kana)). </p> <p>On some systems scalable fonts are available covering a wide range of glyphs. One source is TrueType/OpenType fonts, and these can provide high coverage. Another is Type 1 fonts: the URW set of Type 1 fonts provides standard typefaces such as Helvetica with a larger coverage of Unicode glyphs than the standard X11 bitmaps, including Cyrillic. These are generally not part of the default install, and the X server may need to be configured to use them. They might be under the X11 <samp class="file">fonts</samp> directory or elsewhere, for example, </p> <div class="example"> <pre class="example-preformatted">/usr/share/fonts/default/Type1 /usr/share/fonts/ja/TrueType </pre></div> <hr> </div> <div class="section-level-extent" id="Linux"> <div class="nav-panel"> <p> Next: <a href="#macOS" accesskey="n" rel="next">macOS</a>, Previous: <a href="#X11-issues" accesskey="p" rel="prev">X11 issues</a>, Up: <a href="#Platform-notes" accesskey="u" rel="up">Platform notes</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Linux-1"><span>C.2 Linux<a class="copiable-link" href="#Linux-1"> ¶</a></span></h3> <a class="index-entry-id" id="index-Linux-1"></a> <p>Linux is the main development platform for R, so compilation from the sources is normally straightforward with the most common compilers and libraries.<a class="footnote" id="DOCF73" href="#FOOT73"><sup>73</sup></a> </p> <p>This section is about the GCC compilers: <code class="command">gcc</code>/<code class="command">gfortran</code>/<code class="command">g++</code>. </p> <p>Recall that some package management systems (such as <abbr class="acronym">RPM</abbr> and deb) make a distinction between the user version of a package and the developer version. The latter usually has the same name but with the extension ‘<samp class="samp">-devel</samp>’ or ‘<samp class="samp">-dev</samp>’: you need both versions installed. So please check the <code class="code">configure</code> output to see if the expected features are detected: if for example ‘<samp class="samp">readline</samp>’ is missing add the developer package. (On most systems you will also need ‘<samp class="samp">ncurses</samp>’ and its developer package, although these should be dependencies of the ‘<samp class="samp">readline</samp>’ package(s).) You should expect to see in the <code class="command">configure</code> summary </p> <div class="example"> <pre class="example-preformatted"> Interfaces supported: X11, tcltk External libraries: pcre2, readline, curl Additional capabilities: PNG, JPEG, TIFF, NLS, cairo, ICU </pre></div> <p>When R has been installed from a binary distribution there are sometimes problems with missing components such as the Fortran compiler. Searching the ‘<samp class="samp">R-help</samp>’ archives will normally reveal what is needed. </p> <p>It seems that ‘<samp class="samp">ix86</samp>’ Linux accepts non-PIC code in shared libraries, but this is not necessarily so on other platforms, in particular on 64-bit <abbr class="acronym">CPU</abbr>s such as ‘<samp class="samp">x86_64</samp>’. So care can be needed with <abbr class="acronym">BLAS</abbr> libraries and when building R as a shared library to ensure that position-independent code is used in any static libraries (such as the Tcl/Tk libraries, <code class="code">libpng</code>, <code class="code">libjpeg</code> and <code class="code">zlib</code>) which might be linked against. Fortunately these are normally built as shared libraries with the exception of the ATLAS <abbr class="acronym">BLAS</abbr> libraries. </p> <p>The default optimization settings chosen for <code class="code">CFLAGS</code> etc are conservative. It is likely that using <samp class="option">-mtune</samp> will result in significant performance improvements on recent CPUs: one possibility is to add <samp class="option">-mtune=native</samp> for the best possible performance on the machine on which R is being installed. It is also possible to increase the optimization levels to <samp class="option">-O3</samp>: however for many versions of the compilers this has caused problems in at least one <abbr class="acronym">CRAN</abbr> package. </p> <p>Do not use <samp class="option">-O3</samp> with <code class="command">gcc</code> 11.0 or 11.1: it mis-compiles code resulting in plausible but incorrect results. (This was seen in package <a class="url" href="https://CRAN.R-project.org/package=MASS"><strong class="strong">MASS</strong></a> but has been worked around there as from version 3.1-57.) </p> <p>For comments on ‘<samp class="samp">ix86</samp>’ builds (including 32-bit builds on ‘<samp class="samp">x86_64</samp>’) see the version of this manual for R 4.3.x. </p> <p>To build a 64-bit version of R on ‘<samp class="samp">ppc64</samp>’ (also known as ‘<samp class="samp">powerpc64</samp>’) with <code class="command">gcc</code> 4.1.1, Ei-ji Nakama used </p> <div class="example"> <pre class="example-preformatted">CC="gcc -m64" CXX="gxx -m64" FC="gfortran -m64" CFLAGS="-mminimal-toc -fno-optimize-sibling-calls -g -O2" FFLAGS="-mminimal-toc -fno-optimize-sibling-calls -g -O2" </pre></div> <p>the additional flags being needed to resolve problems linking against <samp class="file">libnmath.a</samp> and when linking R as a shared library. </p> <p>The setting of the macro ‘<samp class="samp">SAFE_FFLAGS</samp>’ may need some help. It should not need additional flags on platforms other than ‘<samp class="samp">68000</samp>’ (not likely to be encountered) and ‘<samp class="samp">ix86</samp>’. For the latter, if the Fortran compiler is GNU (<code class="command">gfortran</code> or possibly <code class="command">g77</code>) the flags </p><div class="example"> <pre class="example-preformatted">-msse2 -mfpmath=sse </pre></div> <p>are added: earlier versions of R added <samp class="option">-ffloat-store</samp> and this might still be needed if a ‘<samp class="samp">ix86</samp>’ CPU is encountered without SSE2 support. Note that it is a <em class="emph">replacement</em> for ‘<samp class="samp">FFLAGS</samp>’, so should include all the flags in that macro (except perhaps the optimization level). </p> <p>Additional compilation flags can be specified for added safety/security checks. For example Fedora adds </p> <div class="example"> <pre class="example-preformatted">-Werror=format-security -Wp,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -Fexceptions -fstack-protector-strong -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection </pre></div> <p>to all the C, C++ and Fortran compiler flags (even though <code class="code">_GLIBCXX_ASSERTIONS</code> is only for C++ in current GCC and <code class="code">glibc</code> and none of these are documented for <code class="code">gfortran</code>). Use of <code class="code">_GLIBCXX_ASSERTIONS</code> will link <code class="code">abort</code> and <code class="code">printf</code> into almost all C++ code, and <code class="command">R CMD check --as-cran</code> will warn. </p> <ul class="mini-toc"> <li><a href="#Clang" accesskey="1">Clang</a></li> <li><a href="#flang" accesskey="2">flang</a></li> <li><a href="#Intel-compilers" accesskey="3">Intel compilers</a></li> </ul> <hr> <div class="subsection-level-extent" id="Clang"> <div class="nav-panel"> <p> Next: <a href="#flang" accesskey="n" rel="next">flang</a>, Previous: <a href="#Linux" accesskey="p" rel="prev">Linux</a>, Up: <a href="#Linux" accesskey="u" rel="up">Linux</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="Clang-1"><span>C.2.1 Clang<a class="copiable-link" href="#Clang-1"> ¶</a></span></h4> <p>R has been built with Linux ‘<samp class="samp">ix86</samp>’ and ‘<samp class="samp">x86_64</samp>’ C and C++ compilers (<a class="uref" href="https://clang.llvm.org">https://clang.llvm.org</a>) based on the Clang front-ends, invoked by <code class="code">CC=clang CXX=clang++</code>, together with <code class="command">gfortran</code>. These take very similar options to the corresponding GCC compilers. </p> <p>This has to be used in conjunction with a Fortran compiler: the <code class="command">configure</code> code will remove <samp class="option">-lgcc</samp> from <code class="env">FLIBS</code>, which is needed for some versions of <code class="command">gfortran</code>. </p> <p>The current out-of-the-box default for <code class="command">clang++</code> is to use the C++ runtime from the installed <code class="command">g++</code>. Using the runtime from the <a class="url" href="https://libcxx.llvm.org/"><code class="code">libc++</code></a> project (Fedora <abbr class="acronym">RPM</abbr> <code class="code">libcxx-devel</code>) <em class="emph">via</em> <samp class="option">-stdlib=libc++</samp> has also been tested. </p> <p>Recent versions have (optional when built) <abbr class="abbr">OpenMP</abbr> support.<a class="footnote" id="DOCF74" href="#FOOT74"><sup>74</sup></a> </p> <p>There are problems mixing <code class="command">clang</code> 15.0.0 and later built as default on Linux to produce PIE code and <code class="command">gfortran</code> 11 or later, which does not. One symptom is that <code class="command">configure</code> does not detect <code class="code">FC_LEN_T</code>, which can be overcome by setting </p><div class="example"> <pre class="example-preformatted">FPIEFLAGS=-fPIE </pre></div> <p>in <samp class="file">config.site</samp>. (<code class="command">configure</code> tries that value if it is unset.) </p> <hr> </div> <div class="subsection-level-extent" id="flang"> <div class="nav-panel"> <p> Next: <a href="#Intel-compilers" accesskey="n" rel="next">Intel compilers</a>, Previous: <a href="#Clang" accesskey="p" rel="prev">Clang</a>, Up: <a href="#Linux" accesskey="u" rel="up">Linux</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="flang-1"><span>C.2.2 flang<a class="copiable-link" href="#flang-1"> ¶</a></span></h4> <p>The name <code class="command">flang</code> has been used for two projects: this is about the sub-project of LLVM which builds a Fortran compiler and runtime libraries. The compiler is currently named <code class="command">flang-new</code> but has been announced to be renamed to <code class="command">flang</code> when more nearly complete (and at some earlier point in its development was known as <code class="command">f18</code>). </p> <p>The version in LLVM 16 and later was able to build R on ‘<samp class="samp">x86_64</samp>’ Linux with </p><div class="example"> <pre class="example-preformatted">FC=/path/to/flang-new </pre></div> <p>with the matching <code class="command">clang</code> used as the C compiler, and the build passed <code class="command">make check-all</code>. There is also support for ‘<samp class="samp">aarch64</samp>’ and ‘<samp class="samp">ppc64le</samp>’ Linux, but these have not been tested with R. </p> <hr> </div> <div class="subsection-level-extent" id="Intel-compilers"> <div class="nav-panel"> <p> Previous: <a href="#flang" accesskey="p" rel="prev">flang</a>, Up: <a href="#Linux" accesskey="u" rel="up">Linux</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="Intel-compilers-1"><span>C.2.3 Intel compilers<a class="copiable-link" href="#Intel-compilers-1"> ¶</a></span></h4> <p>In late 2020 Intel revamped their C/C++ compilers (and later their Fortran compiler) to use an LLVM back-end (and for the C/C++ compilers, a modified version of <code class="command">clang</code> as the front-end). Those compilers are only for ‘<samp class="samp">x86_64</samp>’: the earlier (now called ‘Classic’) C/C++ compilers were discontinued in late 2023 (and are covered in the version of this manual for R 4.3.x: the Fortran compiler <code class="command">ifort</code> remains part of the Fortran distribution).. </p> <p>The compilers are now all under Intel’s ‘oneAPI’ brand. The revamped ones are <code class="command">icx</code>, <code class="command">icpx</code> and <code class="command">ifx</code>; they are identified by the C/C++ macro <code class="code">__INTEL_LLVM_COMPILER</code> (and do not define <code class="code">__INTEL_COMPILER</code>: they also define <code class="code">__clang__</code> and <code class="code">__clang_major__</code>). </p> <p>The C++ compiler uses the system’s <code class="code">lidstdc++</code> as its runtime library rather than LLVM’s <code class="code">libc++</code>. </p> <p>Standalone installers (which are free-of-charge) are available from <a class="uref" href="https://www.intel.com/content/www/us/en/developer/articles/tool/oneapi-standalone-components.html">https://www.intel.com/content/www/us/en/developer/articles/tool/oneapi-standalone-components.html</a>: they are also part of the oneAPI Base and HPC (for Fortran) toolkits. </p> <p>We tried the compilers in oneAPI 2024.1.x<a class="footnote" id="DOCF75" href="#FOOT75"><sup>75</sup></a> and 2023.x.y using (the paths do differ by compiler version) </p><div class="example"> <pre class="example-preformatted">IP=/path/to/compilers/bin/ CC=$IP/icx CXX=$IP/icpx FC=$IP/ifx CFLAGS="-O3 -fp-model precise -Wall -Wstrict-prototypes" C17FLAGS="-O3 -fp-model precise -Wall -Wno-strict-prototypes" FFLAGS="-O3 -fp-model precise -warn all,noexternals" FCFLAGS="-free -O3 -fp-model precise -warn all,noexternals" CXXFLAGS="-O3 -fp-model precise -Wall" LDFLAGS="-L/path/to/compilers/compiler/lib -L/usr/local/lib64" </pre></div> <p>but the build segfaulted in the checks (in complex arithmetic in <samp class="file">tests/lapack.R</samp>). </p> <p>Intel document building R with MKL: for the Intel compilers this needed something like </p><div class="example"> <pre class="example-preformatted">MKL_LIB_PATH=/path/to/intel_mkl/mkl/lib/intel64 export LD_LIBRARY_PATH="$MKL_LIB_PATH" MKL="-L${MKL_LIB_PATH} -lmkl_intel_lp64 -lmkl_core -lmkl_sequential" ./configure --with-blas="$MKL" --with-lapack </pre></div> <p>and the build passed its checks with MKL 2023.2.0 (but not 2024.x on the hardware tested). It may also be possible to use a compiler option like <samp class="option">-qmkl=sequential</samp>. </p> <p>One quirk is that the Intel Fortran compilers do not accept <samp class="file">.f95</samp> files, only <samp class="file">.f90</samp>, for free-format Fortran. <code class="command">configure</code> adds <samp class="option">-Tf</samp> which tells the compiler this is indeed a Fortran file (and needs to immediately precede the file name), but <samp class="option">-free</samp> is needed to say it is free-format. Hence setting the <code class="code">FCFLAGS</code> macro. </p> <p>The compilers have many options: as the C/C++ and Fortran compilers have different origins for their front-ends, there is little consistency in their options. (The C/C++ compilers support ‘all’ <code class="command">clang</code> options even if undocumented for <code class="command">icx</code>/<code class="command">icpc</code>, such as <samp class="option">-Wno-strict-prototypes</samp> above, However it is unclear for which version of <code class="command">clang</code>: the Intel manual suggests checking <code class="command">icx -help</code>.) The C/C++ compilers support clang-style <abbr class="abbr">LTO</abbr>: it is not clear if the Fortran one does. </p> <p>For some recent versions (including 2023.2.0) all CPU times in e.g. <code class="code">proc.time()</code> are reported as zero. If you see this, uncomment the ‘<samp class="samp">INTEL_ICX_FIX</samp>’ setting in <samp class="file">config.site</samp> and re-build. </p> <p>The preferred Fortran standard for <code class="command">ifx</code> can be set by one of <samp class="option">-std90</samp>, <samp class="option">-std95</samp>, <samp class="option">-std03</samp>, <samp class="option">-std08</samp> or <samp class="option">-std18</samp> (and variants). However, this is documented to only affect warnings on non-standard features: the default is no such warnings. </p> <p>Warning to package maintainers: the Intel Fortran compiler interprets comments intended for Visual Fortran<a class="footnote" id="DOCF76" href="#FOOT76"><sup>76</sup></a> like </p><div class="example"> <pre class="example-preformatted">!DEC$ ATTRIBUTES DLLEXPORT,C,REFERENCE,ALIAS:'kdenestmlcvb' :: kdenestmlcvb </pre></div> <p>The <code class="code">DLLEXPORT</code> gives a warning but the remainder silently generates incorrectly named entry points. Such comment lines need to be removed from code for use with R (even if using Intel Fortran on Windows). </p> <hr> </div> </div> <div class="section-level-extent" id="macOS"> <div class="nav-panel"> <p> Next: <a href="#FreeBSD" accesskey="n" rel="next">FreeBSD</a>, Previous: <a href="#Linux" accesskey="p" rel="prev">Linux</a>, Up: <a href="#Platform-notes" accesskey="u" rel="up">Platform notes</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="macOS-2"><span>C.3 macOS<a class="copiable-link" href="#macOS-2"> ¶</a></span></h3> <a class="index-entry-id" id="index-macOS-2"></a> <p>The instructions here are for ‘Apple Silicon’ (‘<samp class="samp">arm64</samp>’) or Intel 64-bit (‘<samp class="samp">x86_64</samp>’) builds on macOS 11 (Big Sur), 12 (Monterey), 13 (Ventura), 14 (Sonoma) and likely later. (They may well work on Intel macOS 10.14 or 10.15, but are untested there.) </p> <ul class="mini-toc"> <li><a href="#Prerequisites" accesskey="1">Prerequisites</a></li> <li><a href="#Fortran-compilers" accesskey="2">Fortran compiler</a></li> <li><a href="#Cairo-graphics" accesskey="3">Cairo graphics</a></li> <li><a href="#Other-C_002fC_002b_002b-compilers" accesskey="4">Other C/C++ compilers</a></li> <li><a href="#Other-libraries" accesskey="5">Other libraries</a></li> <li><a href="#Tcl_002fTk-headers-and-libraries" accesskey="6">Tcl/Tk headers and libraries</a></li> <li><a href="#Java-_0028macOS_0029" accesskey="7">Java</a></li> <li><a href="#Frameworks" accesskey="8">Frameworks</a></li> <li><a href="#Building-R_002eapp" accesskey="9">Building R.app</a></li> <li><a href="#Building-binary-packages">Building binary packages</a></li> <li><a href="#Building-for-Intel-on-arm64">Building for Intel on ‘<samp class="samp">arm64</samp>’</a></li> <li><a href="#Installer">Installer</a></li> </ul> <hr> <div class="subsection-level-extent" id="Prerequisites"> <div class="nav-panel"> <p> Next: <a href="#Fortran-compilers" accesskey="n" rel="next">Fortran compiler</a>, Previous: <a href="#macOS" accesskey="p" rel="prev">macOS</a>, Up: <a href="#macOS" accesskey="u" rel="up">macOS</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="Prerequisites-1"><span>C.3.1 Prerequisites<a class="copiable-link" href="#Prerequisites-1"> ¶</a></span></h4> <p>The Apple silicon conmponents install into <samp class="file">/opt/R/arm64</samp>, the Intel ones into <samp class="file">/opt/R/x86_64</samp>. That may not exist<a class="footnote" id="DOCF77" href="#FOOT77"><sup>77</sup></a> so it is simplest to first create the directory and adjust its ownership if desired: for example by </p> <div class="example"> <pre class="example-preformatted">sudo mkdir -p /opt/R/arm64 sudo chown -R $USER /opt/R </pre></div> <p>Also, add <samp class="file">/opt/R/arm64/bin</samp> or <samp class="file">/opt/R/x86_64/bin</samp> to your path. </p> <p>Define an appropriate variable in your Terminal: </p><div class="example"> <pre class="example-preformatted">set LOCAL=/opt/R/arm64 # Apple Silicon set LOCAL=/opt/R/x86_64 # Intel </pre></div> <p>to use the code snippets here. </p> <p>The following are essential to build R: </p> <ul class="itemize mark-bullet"> <li>Apple’s ‘Command Line Tools’: these can be (re-)installed by running <code class="command">xcode-select --install</code> in a terminal. <p>If you have a fresh OS installation, running e.g. <code class="command">make</code> in a terminal will offer the installation of the command-line tools. If you have installed Xcode, this provides the command-line tools. The tools may need to be reinstalled when macOS is upgraded, as upgrading may partially or completely remove them. </p> <p>The Command Line Tools provide C and C++ compilers derived from LLVM’s <code class="command">clang</code> but nowadays known as ‘Apple clang’ with different versioning (so Apple clang 15 is unrelated to LLVM clang 15). </p> </li><li>A Fortran compiler. See <a class="xref" href="#Fortran-compilers">Fortran compiler</a>. </li><li>Binary components <code class="code">pcre2</code><a class="footnote" id="DOCF78" href="#FOOT78"><sup>78</sup></a> and <code class="code">xz</code> (for <code class="code">liblzma</code>) from <a class="uref" href="https://mac.r-project.org/bin/">https://mac.r-project.org/bin/</a>. There is an R script there to help with installing all the needed components. (At the time of writing <code class="code">install.libs("r-base-dev")</code> installed neither <code class="code">readline5</code> nor those needed to support Pango.) <p>Intel users want the <code class="code">darwin20</code> components: the <code class="code">darwin17</code> ones are for macOS 10.13–10.15. </p> <p>Or this can be done manually, by for example </p><div class="example"> <pre class="example-preformatted">curl -OL https://mac.r-project.org/bin/darwin20/arm64/pcre2-10.42-darwin.20-arm64.tar.xz sudo tar -xvzf pcre2-10.42-darwin.20-arm64.tar.gz -C / curl -OL https://mac.r-project.org/bin/darwin20/arm64/xz-5.4.2-darwin.20-arm64.tar.xz sudo tar -xvzf xz-5.4.2-darwin.20-arm64.tar.xz -C / </pre></div> <p>(<code class="command">sudo</code> is not needed if your account owns <samp class="file">/opt/R/arm64</samp> or <samp class="file">/opt/R/x86_64</samp> as appropriate.) </p> <p>Messages like ‘<samp class="samp">opt/R/: Can't restore time</samp>’ should be ignored. </p></li></ul> <p>and desirable </p><ul class="itemize mark-bullet"> <li>Component <code class="code">readline5</code>.<a class="footnote" id="DOCF79" href="#FOOT79"><sup>79</sup></a> If <code class="code">readline</code> is not present, the emulation in Apple’s version of <code class="code">libedit</code> (aka <code class="code">editline</code>) will be used: if you wish to avoid that, configure with <samp class="option">--without-readline</samp>. </li><li>Components <code class="code">jpeg</code>, <code class="code">libpng</code>, <code class="code">pkgconfig</code>, <code class="code">tiff</code> and <code class="code">zlib-system-stub</code> from <a class="uref" href="https://mac.r-project.org/bin//">https://mac.r-project.org/bin//</a> for the full range of bitmapped graphics devices. (Some builds of <code class="code">tiff</code> may require <code class="code">libwebp</code> and/or <code class="code">openjpeg</code>.) </li><li>An X sub-system unless configuring using <samp class="option">--without-x</samp>: see <a class="uref" href="https://www.xquartz.org/">https://www.xquartz.org/</a>. R’s <code class="command">configure</code> script can be told to look for <code class="code">X11</code> in XQuartz’s main location of <samp class="file">/opt/X11</samp>, e.g. by <div class="example"> <pre class="example-preformatted">--x-includes=/opt/X11/include --x-libraries=/opt/X11/lib </pre></div> <p>Be wary of pre-release versions of XQuartz, which may be offered as an update. </p> </li><li>An Objective-C compiler, as provided by <code class="command">clang</code> in the Command Line Tools: this is needed for the <code class="code">quartz()</code> graphics device. <p>Use <samp class="option">--without-aqua</samp> if you want a standard Unix-alike build: apart from disabling <code class="code">quartz()</code> and the ability to use the build with <small class="sc">R.APP</small>, it also changes the default location of the personal library (see <code class="code">?.libPaths</code>). </p> </li><li>A Tcl/Tk installation, See <a class="xref" href="#Tcl_002fTk-headers-and-libraries">Tcl/Tk headers and libraries</a>. </li><li>Support for Cairo-based graphics devices. See <a class="xref" href="#Cairo-graphics">Cairo graphics</a>. </li><li>A TeX installation. See <a class="xref" href="#Other-libraries">Other libraries</a>. </li><li><code class="command">texi2any</code> from a ‘<samp class="samp">texinfo</samp>’ distribution, which requires <code class="command">perl</code> (currently a default part of macOS but it has been announced that it may not be in future). A version of <code class="command">texi2any</code> has been included in the binary distribution of R and there is a <code class="code">texinfo</code> component at <a class="uref" href="https://mac.r-project.org/bin/">https://mac.r-project.org/bin/</a>. </li></ul> <p>To build R itself from the sources with the C/C++ compilers in the Command Line Tools (or Xcode) and <code class="command">gfortran</code> from the installer mentioned below, use a file <samp class="file">config.site</samp> containing </p><div class="example"> <pre class="example-preformatted">CC=clang OBJC=$CC FC="/opt/gfortran/bin/gfortran -mtune=native" CPPFLAGS='-isystem $LOCAL/include' CXX=clang++ </pre></div> <p>and configure by something like </p><div class="example"> <pre class="example-preformatted">./configure -C \ --enable-R-shlib --enable-memory-profiling \ --x-includes=/opt/X11/include --x-libraries=/opt/X11/lib \ --with-tcl-config=$LOCAL/lib/tclConfig.sh \ --with-tk-config=$LOCAL/lib/tkConfig.sh \ PKG_CONFIG_PATH=$LOCAL/lib/pkgconfig:/usr/lib/pkgconfig </pre></div> <p>(See below for other options for Tcl/Tk.) For an ‘<samp class="samp">arm64</samp>’ build further flags are desirable in <samp class="file">config.site</samp>: </p><div class="example"> <pre class="example-preformatted">CFLAGS="-falign-functions=8 -g -O2" </pre></div> <p>is needed to inter-work with <code class="command">gfortran</code> without segfaulting in some packages. Some builds of <code class="command">gfortran</code> have targetted the current version of macOS (unlike <code class="command">clang</code>), causing linker warnings: to avoid these use </p><div class="example"> <pre class="example-preformatted">FFLAGS="-g -O2 -mmacosx-version-min=11.0" FCFLAGS="-g -O2 -mmacosx-version-min=11.0" </pre></div> <p>or perhaps </p><div class="example"> <pre class="example-preformatted">FFLAGS="-g -O2 -mmacos-version-min=11.0" FCFLAGS="-g -O2 -mmacos-version-min=11.0" </pre></div> <p>where <code class="code">11.0</code> can be replaced by <code class="code">12.0</code>, <code class="code">13.0</code> or <code class="code">14.0</code> for macOS 12.x, 13.x and 14.x. </p> <p>To install packages using compiled code one needs the Command Line Tools (or Xcode) and appropriate compilers, e.g. the C/C++ compilers from those tools and/or <code class="command">gfortran</code>. Some packages have further requirements such as component <code class="command">pkgconfig</code> (and to set <code class="env">PKG_CONFIG_PATH=</code> as above). </p> <p>A subversion client can be obtained from <a class="uref" href="https://mac.r-project.org/tools/">https://mac.r-project.org/tools/</a>, for example by (Apple Silicon) </p><div class="example"> <pre class="example-preformatted">curl -OL https://mac.r-project.org/tools/subversion-1.14.1-darwin.20-arm64.tar.gz tar xf subversion-1.14.1-darwin.20-arm64.tar.gz sudo cp subversion-1.14.1-darwin-20-arm64/svn $LOCAL/bin </pre></div> <p>or (Intel) </p><div class="example"> <pre class="example-preformatted">curl -OL https://mac.r-project.org/tools/subversion-1.14.0-darwin15.6.tar.gz tar xf subversion-1.14.0-darwin15.6.tar.gz sudo cp subversion-1.14.0-darwin15.6/svn $LOCAL/bin </pre></div> <p>If building software or installing source packages with <code class="command">cmake</code> (or a non-Apple <code class="command">make</code>) for ‘Apple Silicon’ ensure it contains the ‘<samp class="samp">arm64</samp>’ architecture (use <code class="command">file</code> to be sure). Running Apple compilers from an ‘<samp class="samp">x86_64</samp>’ executable will generate ‘<samp class="samp">x86_64</samp>’ code …. </p> <p>Updating an ‘<samp class="samp">arm64</samp>’ build may fail because of the bug described at <a class="uref" href="https://openradar.appspot.com/FB8914243">https://openradar.appspot.com/FB8914243</a> but <em class="emph">ab initio</em> builds work. This has been far rarer since macOS 13. </p> <p>If you are using the macOS 13 <abbr class="abbr">SDK</abbr><a class="footnote" id="DOCF80" href="#FOOT80"><sup>80</sup></a>, you may need to add something like <code class="code">-mmacos-version-min=12.0</code> to ‘<samp class="samp">CFLAGS</samp>’. </p> <p>Linker warnings like </p><div class="example"> <pre class="example-preformatted">ld: warning: could not create compact unwind for _sort_: register 26 saved somewhere other than in frame ld: warning: ld: warning: could not create compact unwind for _arcoef_: registers 23 and 24 not saved contiguously in frame ld: warning: could not create compact unwind for ___emutls_get_address: registers 23 and 24 not saved contiguously in frame </pre></div> <p>can be ignored. These stem from compiled Fortran code, including its run-time libraries. </p> <p>The default security settings can make it difficult to install Apple packages which have not been ‘notarized’<a class="footnote" id="DOCF81" href="#FOOT81"><sup>81</sup></a> by Apple. And not just packages, as this has been seen for executables contained in tarballs/zipfiles (for example, for <code class="command">pandoc</code>). Usually one can use ‘<samp class="samp">Open With</samp>’ (Control/right/two-finger-click in Finder), then select ‘<samp class="samp">Installer</samp>’ and ‘<samp class="samp">Open</samp>’ if you get a further warning message. </p> <p>If you run into problems with ‘quarantine’ for tarballs downloaded in a browser, consider using <code class="command">curl -OL</code> to download (as illustrated above) or <code class="command">xattr -c</code> to remove extended attributes. </p> <p><code class="command">configure</code> defaults to <samp class="option">--with-internal-tzcode</samp> on macOS. The native implementation used to be unusable on earlier versions (with a 32-bit <code class="code">time_t</code> and/or timezone tables missing information beyond the 32-bit range). As from macOS 12.6, option <samp class="option">--without-internal-tzcode</samp> can be used to override this and R contains sufficient workarounds (for example, the native code fails to recognize dates with a negative <code class="code">tm_year</code>, that is dates before 1900) for R to pass its checks. However, there are discrepancies, notably in Europe in the 1900s and 1940s, even though the Olson database contains the correct information. </p> <hr> </div> <div class="subsection-level-extent" id="Fortran-compilers"> <div class="nav-panel"> <p> Next: <a href="#Cairo-graphics" accesskey="n" rel="next">Cairo graphics</a>, Previous: <a href="#Prerequisites" accesskey="p" rel="prev">Prerequisites</a>, Up: <a href="#macOS" accesskey="u" rel="up">macOS</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="Fortran-compiler"><span>C.3.2 Fortran compiler<a class="copiable-link" href="#Fortran-compiler"> ¶</a></span></h4> <p>There is a ‘universal’ (<code class="code">arm64</code> and Intel) build of <code class="command">gfortran</code> 12.2 at <a class="uref" href="https://mac.r-project.org/tools/gfortran-12.2-universal.pkg">https://mac.r-project.org/tools/gfortran-12.2-universal.pkg</a>. This installs into <samp class="file">/opt/gfortran</samp>. </p> <p>The <samp class="file">/opt/gfortran/SDK</samp> symlink should point to the desired path to the <abbr class="abbr">SDK</abbr> (defaults to the command line tools <abbr class="abbr">SDK</abbr>). This can be updated by running <samp class="file">/opt/gfortran/bin/gfortran-update-sdk</samp> or manually. If the symlink is broken, the driver will issue a warning and use <code class="code">xcrun -show-sdk-path</code> to try to find an <abbr class="abbr">SDK</abbr> and use its path. (The <abbr class="abbr">SDK</abbr> path is used when using <code class="command">gfortran</code> to link, so not when building R but when installing a few packages.) </p> <p>Builds of <code class="command">gfortran</code> 13.2 and 14.1 for <code class="code">arm64</code> macOS 14 are available at <a class="uref" href="https://github.com/fxcoudert/gfortran-for-macOS/releases">https://github.com/fxcoudert/gfortran-for-macOS/releases</a>. These can be built for Intel and older OSes from the sources at <a class="uref" href="https://github.com/iains/gcc-13-branch/">https://github.com/iains/gcc-13-branch/</a> and <code class="code">gcc-14-branch/</code>. To use one of the pre-built compilers with Apple <code class="command">clang</code> needs something like </p><div class="example"> <pre class="example-preformatted">LDFLAGS="-L/opt/R/arm64/lib -rpath /usr/local/gfortran/lib" </pre></div> <p>in <samp class="file">config.site</samp> to ensure the Fortran run-time libraries are found. </p> <hr> </div> <div class="subsection-level-extent" id="Cairo-graphics"> <div class="nav-panel"> <p> Next: <a href="#Other-C_002fC_002b_002b-compilers" accesskey="n" rel="next">Other C/C++ compilers</a>, Previous: <a href="#Fortran-compilers" accesskey="p" rel="prev">Fortran compiler</a>, Up: <a href="#macOS" accesskey="u" rel="up">macOS</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="Cairo-graphics-1"><span>C.3.3 Cairo graphics<a class="copiable-link" href="#Cairo-graphics-1"> ¶</a></span></h4> <a class="index-entry-id" id="index-Cairo-3"></a> <p>Cairo-based graphics devices such as <code class="code">cairo_ps</code>, <code class="code">cairo_pdf</code>, <code class="code">X11(type = "cairo")</code> and the Cairo-based types of devices <code class="code">bmp</code> <code class="code">jpeg</code>, <code class="code">png</code> and <code class="code">tiff</code> are not the default on macOS, and much less used than the Quartz-based devices. However, the only SVG device in the R distribution, <code class="code">svg</code>, is based on Cairo. </p> <p>Support for Cairo is optional and can be added in several ways, all of which need <code class="code">pkg-config</code>. <code class="command">configure</code> will add Cairo support if <code class="code">pkg-config</code> finds package <code class="code">cairo</code> unless <code class="code">--without-cairo</code> is used. </p> <p>A way to statically link Cairo is by downloading and unpacking components <code class="code">cairo</code>, <code class="code">fontconfig</code>, <code class="code">freetype</code>, <code class="code">pixman</code> and <code class="code">zlib-system-stub</code> (and do not have <samp class="file">/opt/X11/lib/pkgconfig</samp> in <code class="env">PKG_CONFIG_PATH</code>). Some static builds of <code class="code">fontconfig</code> need <code class="code">libxml2</code> (from component <code class="code">xml2</code>) and others <code class="code">expat</code>, supplied by macOS but needing a file <samp class="file">$LOCAL/lib/pkgconfig/expat.pc</samp> along the lines of </p><div class="example"> <pre class="example-preformatted">Name: expat Version: 2.2.8 Description: expat XML parser URL: http://www.libexpat.org Libs: -lexpat Cflags: </pre></div> <p>Note that the list of components is liable to change: running <code class="command">pkg-config cairo --exists --print-errors</code> should tell you if any others are required. </p> <a class="index-entry-id" id="index-Pango-1"></a> <p>The best font experience of Cairo graphics will be to use it in combination with Pango which will match that supported on most other Unix-alikes. <code class="command">configure</code> uses <code class="command">pkg-config</code> to determine if all the external software required by both Pango and Cairo is available: running <code class="command">pkg-config pangocairo --exists --print-errors</code> should show if the installation suffices and if not, what is missing. At the time of writing using pre-built components <code class="code">cairo</code>, <code class="code">fontconfig</code>, <code class="code">freetype</code>, <code class="code">ffi</code>, <code class="code">fribidi</code>, <code class="code">gettext</code>, <code class="code">icu</code>, <code class="code">glib</code>, <code class="code">harfbuzz</code>, <code class="code">pango</code>, <code class="code">pcre</code>, <code class="code">pixman</code> and <code class="code">xml2</code> sufficed. </p> <hr> </div> <div class="subsection-level-extent" id="Other-C_002fC_002b_002b-compilers"> <div class="nav-panel"> <p> Next: <a href="#Other-libraries" accesskey="n" rel="next">Other libraries</a>, Previous: <a href="#Cairo-graphics" accesskey="p" rel="prev">Cairo graphics</a>, Up: <a href="#macOS" accesskey="u" rel="up">macOS</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="Other-C_002fC_002b_002b-compilers-1"><span>C.3.4 Other C/C++ compilers<a class="copiable-link" href="#Other-C_002fC_002b_002b-compilers-1"> ¶</a></span></h4> <p>Other pre-compiled distributions of <code class="command">clang</code> may be available from <a class="uref" href="https://github.com/llvm/llvm-project/releases/">https://github.com/llvm/llvm-project/releases/</a> (recently only for <code class="code">arm64</code> and usually unsigned/not notarized which makes them hard to use). In particular, these include support for <abbr class="abbr">OpenMP</abbr> which Apple <code class="command">clang</code> does not. Some of these have included support for the <abbr class="abbr">ASan</abbr> and <abbr class="abbr">UBSan</abbr> sanitizers. </p> <p>Suppose one of these distributions is installed under <samp class="file">$LOCAL/llvm</samp>. Use a file <samp class="file">config.site</samp> containing </p><div class="example"> <pre class="example-preformatted">SDK=`xcrun -show-sdk-path` CC="$LOCAL/llvm/bin/clang -isysroot $SDK" CXX="$LOCAL/llvm/bin/clang++ -isysroot $SDK" OBJC=$CC FC=/opt/gfortran/bin/gfortran LDFLAGS="-L$LOCAL/llvm/lib -L$LOCAL/lib" R_LD_LIBRARY_PATH=$LOCAL/llvm/lib:$LOCAL/lib </pre></div> <p>The care to specify library paths is to ensure that the <abbr class="abbr">OpenMP</abbr> runtime library, here <samp class="file">$LOCAL/llvm/lib/libomp.dylib</samp>, is found when needed. If this works, you should see the line </p><div class="example"> <pre class="example-preformatted">checking whether OpenMP SIMD reduction is supported... yes </pre></div> <p>in the <code class="command">configure</code> output. Also, ‘<samp class="samp">R_LD_LIBRARY_PATH</samp>’ needs to be set to find the latest version of the C++ run-time libraries rather than the system ones. </p> <p>It is normally possible to build R with GCC (built from the sources, from a <code class="command">gfortran</code> distribution, from Homebrew, …). When last tested it was not possible to use <code class="command">gcc</code> to build the <code class="code">quartz()</code> device, so <code class="command">configure --without-aqua</code> may be required. R was built and tested with the GCC 14.1 compilers in the <code class="code">arm64</code> <code class="command">gfortran</code> distribution mentioned above using a <samp class="file">config.site</samp> containing </p><div class="example"> <pre class="example-preformatted">CC=/usr/local/gfortran/bin/gcc CXX=/usr/local/gfortran/bin/g++ FC=/usr/local/gfortran/bin/gfortran CFLAGS="-g -O2 -Wall -pedantic -Wstrict-prototypes" C17FLAGS="-g -O2 -Wall -pedantic -Wno-strict-prototypes" C90FLAGS=$C17FLAGS C99FLAGS=$C17FLAGS CXXFLAGS="-g -O2 -Wall -pedantic" CPPFLAGS='-isystem /opt/R/arm64/include' LDFLAGS=-L/opt/R/arm64/lib </pre></div> <p>It is usually possible to add some <abbr class="abbr">OpenMP</abbr> support to the Apple <code class="command">clang</code> compilers: see <a class="uref" href="https://mac.r-project.org/openmp/">https://mac.r-project.org/openmp/</a>. Note that that approach is somewhat fragile as it needs a <samp class="file">libomp.dylib</samp> library matching the version of the compiler used—and for example at the time of writing none was offered for the current compilers in Xcode CLT 14.3 nor 15. </p> <hr> </div> <div class="subsection-level-extent" id="Other-libraries"> <div class="nav-panel"> <p> Next: <a href="#Tcl_002fTk-headers-and-libraries" accesskey="n" rel="next">Tcl/Tk headers and libraries</a>, Previous: <a href="#Other-C_002fC_002b_002b-compilers" accesskey="p" rel="prev">Other C/C++ compilers</a>, Up: <a href="#macOS" accesskey="u" rel="up">macOS</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="Other-libraries-1"><span>C.3.5 Other libraries<a class="copiable-link" href="#Other-libraries-1"> ¶</a></span></h4> <p>Pre-compiled versions of many of the <a class="ref" href="#Useful-libraries-and-programs">Useful libraries and programs</a> are available from <a class="uref" href="https://mac.r-project.org/bin//">https://mac.r-project.org/bin//</a>. </p> <p>Looking at the top of <samp class="file">/Library/Frameworks/R.framework/Resources/etc/Makeconf</samp> will show the compilers and configuration options used for the <abbr class="acronym">CRAN</abbr> binary package for R: at the time of writing the non-default options </p><div class="example"> <pre class="example-preformatted">--enable-memory-profiling --enable-R-framework --x-libraries=/opt/X11/lib --x-includes=/opt/X11/include </pre></div> <p>were used. (<samp class="option">--enable-R-framework</samp> implies <samp class="option">--enable-R-shlib</samp>.) </p> <p>The main TeX implementation used by the developers is MacTeX<a class="footnote" id="DOCF82" href="#FOOT82"><sup>82</sup></a> (<a class="uref" href="https://www.tug.org/mactex/">https://www.tug.org/mactex/</a>): the full installation is about 8.5GB, but a much smaller version (‘Basic TeX’) is available at <a class="uref" href="https://www.tug.org/mactex/morepackages.html">https://www.tug.org/mactex/morepackages.html</a> to which you will need to add some packages to build R, e.g. for the 2022 version we needed to add<a class="footnote" id="DOCF83" href="#FOOT83"><sup>83</sup></a> <strong class="strong">helvetic</strong>, <strong class="strong">inconsolata</strong> and <strong class="strong">texinfo</strong> which brought this to about 310MB.<a class="footnote" id="DOCF84" href="#FOOT84"><sup>84</sup></a> ‘<samp class="samp">TeX Live Utility</samp>’ (available <em class="emph">via</em> the MacTeX front page) provides a graphical means to manage TeX packages. These contain executables which run natively on both ‘<samp class="samp">arm64</samp>’ and ‘<samp class="samp">x86_64</samp>’. </p> <p>Checking packages thoroughly requires Ghostscript (part of the full MacTeX distribution or separately from <a class="uref" href="https://www.tug.org/mactex/morepackages.html">https://www.tug.org/mactex/morepackages.html</a>) and <code class="command">qpdf</code> (from <a class="uref" href="https://mac.r-project.org/bin//">https://mac.r-project.org/bin//</a>, a version of which is in the <samp class="file">bin</samp> directory of a binary installation of R, usually <samp class="file">/Library/Frameworks/R.framework/Resources/bin/qpdf</samp>). </p> <p><code class="command">R CMD check --as-cran</code> makes use of ‘HTML Tidy’. macOS at the time of writing has a version in <samp class="file">/usr/bin/tidy</samp> dating from 2006 which is far too old. Up-to-date versions can be installed from <a class="uref" href="http://binaries.html-tidy.org/">http://binaries.html-tidy.org/</a>. </p> <p>One macOS quirk is that the default path has <samp class="file">/usr/local/bin</samp> after <samp class="file">/usr/bin</samp>, contrary to common practice on Unix-alikes. This means that if you install tools from the sources they will by default be installed under <samp class="file">/usr/local</samp> and not supersede the system versions. </p> <p>Parallel installation of packages will make use of the utility <code class="command">timeout</code> if available. A ‘universal’ build can be downloaded from <a class="uref" href="https://www.stats.ox.ac.uk/pub/bdr/timeout">https://www.stats.ox.ac.uk/pub/bdr/timeout</a>: make it executable (<code class="code">chmod 755 timeout</code>) and put it somewhere on your path. </p> <ul class="mini-toc"> <li><a href="#Accelerate" accesskey="1">Accelerate</a></li> <li><a href="#OpenBLAS-_0028macOS_0029" accesskey="2">OpenBLAS</a></li> </ul> <hr> <div class="subsubsection-level-extent" id="Accelerate"> <div class="nav-panel"> <p> Next: <a href="#OpenBLAS-_0028macOS_0029" accesskey="n" rel="next">OpenBLAS</a>, Previous: <a href="#Other-libraries" accesskey="p" rel="prev">Other libraries</a>, Up: <a href="#Other-libraries" accesskey="u" rel="up">Other libraries</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsubsection" id="Accelerate-1"><span>C.3.5.1 Accelerate<a class="copiable-link" href="#Accelerate-1"> ¶</a></span></h4> <a class="index-entry-id" id="index-BLAS-library-1"></a> <a class="index-entry-id" id="index-LAPACK-library-1"></a> <p>The <code class="code">Accelerate</code> library<a class="footnote" id="DOCF85" href="#FOOT85"><sup>85</sup></a> can be used <em class="emph">via</em> the configuration option </p> <div class="example"> <pre class="example-preformatted">--with-blas="-framework Accelerate" </pre></div> <p>to provide potentially higher-performance versions of the <abbr class="acronym">BLAS</abbr> and LAPACK routines.<a class="footnote" id="DOCF86" href="#FOOT86"><sup>86</sup></a> This includes a full LAPACK which can be used <em class="emph">via</em> <samp class="option">--with-lapack</samp>: however, the version of LAPACK it contains has often been seriously old (and is not used unless <samp class="option">--with-lapack</samp> is specified). Some <abbr class="acronym">CRAN</abbr> builds of R can be switched<a class="footnote" id="DOCF87" href="#FOOT87"><sup>87</sup></a> to use Accelerate’s BLAS. </p> <p>As from macOS 13.3, the BLAS and LAPACK libraries under the Accelerate framework are ‘now inline with reference version 3.9.1’.<a class="footnote" id="DOCF88" href="#FOOT88"><sup>88</sup></a> However, this has been done by naming new entry points and so only accessible <em class="emph">via</em> their C headers. That version can be used for BLAS calls <em class="emph">via</em> <code class="command">configure</code> option <samp class="option">--with-newAccelerate</samp>: it requires at least macOS 13.3 and <abbr class="abbr">SDK</abbr> 13.3 (from Xcode CLT 14.3). To use it for both BLAS and LAPACK calls, configure with <samp class="option">--with-newAccelerate=lapack</samp>. These options cannot be used with others such as <samp class="option">--with-blas</samp> and <samp class="option">--with-lapack</samp>. </p> <p>Threading in Accelerate is controlled by ‘Grand Central Dispatch’<a class="footnote" id="DOCF89" href="#FOOT89"><sup>89</sup></a> and is said not to need user control. Test <samp class="file">nls.R</samp> in package <strong class="strong">stats</strong> has often failed with the Accelerate BLAS on Intel macOS. All versions of Accelerate show differences from the reference BLAS (and most others) in the use of <code class="code">NA</code> <em class="emph">vs</em> <code class="code">NaN</code> and a substantial number of R packages fail their checks. </p> <hr> </div> <div class="subsubsection-level-extent" id="OpenBLAS-_0028macOS_0029"> <div class="nav-panel"> <p> Previous: <a href="#Accelerate" accesskey="p" rel="prev">Accelerate</a>, Up: <a href="#Other-libraries" accesskey="u" rel="up">Other libraries</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsubsection" id="OpenBLAS"><span>C.3.5.2 OpenBLAS<a class="copiable-link" href="#OpenBLAS"> ¶</a></span></h4> <p>R has been built on ‘<samp class="samp">arm64</samp>’ using OpenBLAS 0.3.24 (sources from <a class="uref" href="https://github.com/OpenMathLib/OpenBLAS/releases">https://github.com/OpenMathLib/OpenBLAS/releases</a>) by symlinking <samp class="file">/opt/OpenBLAS/lib/libopenblas.dylib</samp> to <samp class="file">lib/libRblas.dylib</samp> (see <a class="ref" href="#Shared-BLAS">Shared BLAS</a>). </p> <p>On macOS, a default build of OpenBLAS uses <code class="code">pthreads</code> (as macOS does not have <abbr class="abbr">OpenMP</abbr>) with the number of threads controlled by environment variable <code class="env">OPENBLAS_NUM_THREADS</code>. On an M1 Pro this defaulted to 10 threads (there are 8 ‘performance’ cores and 2 ‘efficiency cores‘) and we saw a 9x speedup over the reference BLAS on a large SVD (which was slightly faster than Accelerate). </p> <hr> </div> </div> <div class="subsection-level-extent" id="Tcl_002fTk-headers-and-libraries"> <div class="nav-panel"> <p> Next: <a href="#Java-_0028macOS_0029" accesskey="n" rel="next">Java</a>, Previous: <a href="#Other-libraries" accesskey="p" rel="prev">Other libraries</a>, Up: <a href="#macOS" accesskey="u" rel="up">macOS</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="Tcl_002fTk-headers-and-libraries-1"><span>C.3.6 Tcl/Tk headers and libraries<a class="copiable-link" href="#Tcl_002fTk-headers-and-libraries-1"> ¶</a></span></h4> <p>If you plan to use the <code class="code">tcltk</code> package for R, you will need to install a distribution of Tcl/Tk. There are two alternatives. If you use <small class="sc">R.APP</small> you will want to use X11-based Tcl/Tk (as used on other Unix-alikes), which is installed under <samp class="file">$LOCAL/lib</samp> as part of the <abbr class="acronym">CRAN</abbr> binary for R.<a class="footnote" id="DOCF90" href="#FOOT90"><sup>90</sup></a> This may need <code class="command">configure</code> options </p><div class="example"> <pre class="example-preformatted">--with-tcltk=$LOCAL/lib </pre></div> <p>or </p><div class="example"> <pre class="example-preformatted">--with-tcl-config=$LOCAL/lib/tclConfig.sh --with-tk-config=$LOCAL/lib/tkConfig.sh </pre></div> <p>Note that this requires a matching XQuartz installation. </p> <p>There is also a native (‘Aqua’) version of Tcl/Tk which produces widgets in the native macOS style: this will not work with <small class="sc">R.APP</small> because of conflicts over the macOS menu, but for those only using command-line R this provides a much more intuitive interface to Tk for experienced Mac users. Earlier versions of macOS came with an Aqua Tcl/Tk distribution but these were often not at all recent versions of Tcl/Tk. It is better to install Tcl/Tk 8.6.x from the sources<a class="footnote" id="DOCF91" href="#FOOT91"><sup>91</sup></a> or a binary distribution from <a class="uref" href="https://www.activestate.com/products/tcl/">https://www.activestate.com/products/tcl/</a>. For the latter, configure R with </p><div class="example"> <pre class="example-preformatted">--with-tcl-config=/Library/Frameworks/Tcl.framework/tclConfig.sh --with-tk-config=/Library/Frameworks/Tk.framework/tkConfig.sh </pre></div> <p>If you need to find out which distribution of Tk is in use at run time, use </p><div class="example"> <pre class="example-preformatted">library(tcltk) tclvalue(.Tcl("tk windowingsystem")) # "x11" or "aqua" </pre></div> <p>Note that some Tcl/Tk extensions only support the X11 interface: this includes <code class="code">Tktable</code> and the <abbr class="acronym">CRAN</abbr> package <a class="url" href="https://CRAN.R-project.org/package=tkrplot"><strong class="strong">tkrplot</strong></a>. </p> <hr> </div> <div class="subsection-level-extent" id="Java-_0028macOS_0029"> <div class="nav-panel"> <p> Next: <a href="#Frameworks" accesskey="n" rel="next">Frameworks</a>, Previous: <a href="#Tcl_002fTk-headers-and-libraries" accesskey="p" rel="prev">Tcl/Tk headers and libraries</a>, Up: <a href="#macOS" accesskey="u" rel="up">macOS</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="Java"><span>C.3.7 Java<a class="copiable-link" href="#Java"> ¶</a></span></h4> <p>macOS does not comes with an installed Java runtime (<abbr class="abbr">JRE</abbr>) and a macOS upgrade may remove one if already installed: it is intended to be installed at first use. Check if a <abbr class="abbr">JRE</abbr> is installed by running <code class="command">java -version</code> in a <code class="command">Terminal</code> window: if Java is not installed on an Intel Mac this may prompt you to install it. We recommend you install a version with long-term support, e.g. 17 or 21<a class="footnote" id="DOCF92" href="#FOOT92"><sup>92</sup></a> but not 18–20, 22–24 with a 6-month lifetime. </p> <p>The currently simplest way to install Java is from <a class="uref" href="https://adoptium.net">Adoptium</a><a class="footnote" id="DOCF93" href="#FOOT93"><sup>93</sup></a>: this installs into an Apple-standard location and so works with <code class="command">/usr/bin/java</code>. Other builds are available from <a class="uref" href="https://www.azul.com/downloads/zulu-community/?os=macos&architecture=arm-64-bit&package=jdk">https://www.azul.com/downloads/zulu-community/?os=macos&architecture=arm-64-bit&package=jdk</a> and from OpenJDK at <a class="uref" href="https://jdk.java.net/">https://jdk.java.net/</a>, for which <code class="env">JAVA_HOME</code> may need to be set both when configuring R and at runtime. Note that Java distribution sites may use unusual designations for macOS CPUs such as <code class="code">AArch64</code>, <code class="code">x64</code> or <code class="code">x86 64-bit</code>. </p> <p>Binary distributions of R are built against a specific version (e.g. 11.0.18 or 17.0.1) of Java so </p><div class="example"> <pre class="example-preformatted">sudo R CMD javareconf </pre></div> <p>will likely be needed to be run before using Java-using packages. </p> <p>To see what compatible versions of Java are currently installed, run the appropriate one of </p><div class="example"> <pre class="example-preformatted">/usr/libexec/java_home -V -a arm64 /usr/libexec/java_home -V -a x86_64 </pre></div> <p>If needed, set the environment variable <code class="env">JAVA_HOME</code> to choose between these, both when R is built from the sources and when <code class="command">R CMD javareconf</code> is run. </p> <p>Configuring and building R both looks for a <abbr class="abbr">JRE</abbr> and for support for compiling <abbr class="abbr">JNI</abbr> programs (used to install packages <a class="url" href="https://CRAN.R-project.org/package=rJava"><strong class="strong">rJava</strong></a> and <a class="url" href="https://CRAN.R-project.org/package=JavaGD"><strong class="strong">JavaGD</strong></a>); the latter requires a <abbr class="abbr">JDK</abbr> (Java <abbr class="abbr">SDK</abbr>). Most distributions of Java 11 or later are of a full <abbr class="abbr">JDK</abbr>. </p> <p>The build process tries to fathom out what <abbr class="abbr">JRE</abbr>/<abbr class="abbr">JDK</abbr> to use, but it may need some help, e.g. by setting environment variable <code class="env">JAVA_HOME</code>. To select a build from <a class="uref" href="https://adoptium.net">Adoptium</a> set e.g. </p><div class="example"> <pre class="example-preformatted">JAVA_HOME=/Library/Java/JavaVirtualMachines/temurin-21.jdk/Contents/Home </pre></div> <p>in <samp class="file">config.site</samp>. For Java 21 from <a class="uref" href="https://jdk.java.net/">https://jdk.java.net/</a> (which might no longer be available), use </p><div class="example"> <pre class="example-preformatted">JAVA_HOME=/path/to/jdk-21.jdk/Contents/Home </pre></div> <p>Note that it is necessary to set the environment variable <code class="env">NOAWT</code> to <code class="code">1</code> to install many of the Java-using packages. </p> <hr> </div> <div class="subsection-level-extent" id="Frameworks"> <div class="nav-panel"> <p> Next: <a href="#Building-R_002eapp" accesskey="n" rel="next">Building R.app</a>, Previous: <a href="#Java-_0028macOS_0029" accesskey="p" rel="prev">Java</a>, Up: <a href="#macOS" accesskey="u" rel="up">macOS</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="Frameworks-1"><span>C.3.8 Frameworks<a class="copiable-link" href="#Frameworks-1"> ¶</a></span></h4> <p>The <abbr class="acronym">CRAN</abbr> build of R is installed as a framework, which is selected by the option </p> <div class="example"> <pre class="example-preformatted">./configure --enable-R-framework </pre></div> <p>(This is intended to be used with an Apple toolchain: others may not support frameworks correctly but those from LLVM have done so.) </p> <p>It is only needed if you want to build R for use with the <small class="sc">R.APP</small> console, and implies <samp class="option">--enable-R-shlib</samp> to build R as a dynamic library. This option configures R to be built and installed as a framework called <samp class="file">R.framework</samp>. The default installation path for <samp class="file">R.framework</samp> is <samp class="file">/Library/Frameworks</samp> but this can be changed at configure time by specifying the flag <samp class="option">--enable-R-framework[=<var class="var">DIR</var>]</samp> (or <samp class="option">--prefix</samp>) or at install time <em class="emph">via</em> </p> <div class="example"> <pre class="example-preformatted">make prefix=/where/you/want/R.framework/to/go install </pre></div> <p>Note that installation as a framework is non-standard (especially to a non-standard location) and Unix utilities may not support it (e.g. the <code class="command">pkg-config</code> file <samp class="file">libR.pc</samp> will be put somewhere unknown to <code class="command">pkg-config</code>). </p> <hr> </div> <div class="subsection-level-extent" id="Building-R_002eapp"> <div class="nav-panel"> <p> Next: <a href="#Building-binary-packages" accesskey="n" rel="next">Building binary packages</a>, Previous: <a href="#Frameworks" accesskey="p" rel="prev">Frameworks</a>, Up: <a href="#macOS" accesskey="u" rel="up">macOS</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="Building-R_002eapp-1"><span>C.3.9 Building R.app<a class="copiable-link" href="#Building-R_002eapp-1"> ¶</a></span></h4> <p>Building the <small class="sc">R.APP</small> GUI console is a separate project, using Xcode. Before compiling <small class="sc">R.APP</small> make sure the current version of R is installed in <samp class="file">/Library/Frameworks/R.framework</samp> and is working at the command-line (this can be a binary install). </p> <p>The current sources can be checked out by </p><div class="example"> <pre class="example-preformatted">svn co https://svn.r-project.org/R-packages/trunk/Mac-GUI </pre></div> <p>and built by loading the <code class="code">R.xcodeproj</code> project (select the <code class="code">R</code> target and a suitable configuration), or from the command-line by e.g. </p><div class="example"> <pre class="example-preformatted">xcodebuild -target R -configuration Release </pre></div> <p>See also the <samp class="file">INSTALL</samp> file in the checkout or directly at <a class="uref" href="https://svn.r-project.org/R-packages/trunk/Mac-GUI/INSTALL">https://svn.r-project.org/R-packages/trunk/Mac-GUI/INSTALL</a>. </p> <p><small class="sc">R.APP</small> does not need to be installed in any specific way. Building <small class="sc">R.APP</small> results in the <small class="sc">R.APP</small> bundle which appears as one R icon. This application bundle can be run from anywhere and it is customary to place it in the <samp class="file">/Applications</samp> folder. </p> <hr> </div> <div class="subsection-level-extent" id="Building-binary-packages"> <div class="nav-panel"> <p> Next: <a href="#Building-for-Intel-on-arm64" accesskey="n" rel="next">Building for Intel on ‘<samp class="samp">arm64</samp>’</a>, Previous: <a href="#Building-R_002eapp" accesskey="p" rel="prev">Building R.app</a>, Up: <a href="#macOS" accesskey="u" rel="up">macOS</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="Building-binary-packages-1"><span>C.3.10 Building binary packages<a class="copiable-link" href="#Building-binary-packages-1"> ¶</a></span></h4> <p><abbr class="acronym">CRAN</abbr> macOS binary packages are distributed as tarballs with suffix <samp class="file">.tgz</samp> to distinguish them from source tarballs. One can <code class="command">tar</code> an existing installed package, or use <code class="command">R CMD INSTALL --build</code>. </p> <p>However, there are some important details. </p><ul class="itemize mark-bullet"> <li>Current <abbr class="acronym">CRAN</abbr> macOS distributions are targeted at Big Sur so it is wise to ensure that the compilers generate code that will run on Big Sur or later. With the recommended compilers we can use <div class="example"> <pre class="example-preformatted">CC="clang -mmacos-version-min=11.0" CXX="clang++ -mmacos-version-min=11.0" FC="/opt//gfortran/bin/gfortran -mmacosx-version-min=11.0" </pre></div> <p>or set the environment variable </p><div class="example"> <pre class="example-preformatted">export MACOSX_DEPLOYMENT_TARGET=11.0 </pre></div> </li><li>Using the flag <samp class="option">-Werror=partial-availability</samp> can help trigger compilation errors on functionality not in Big Sur. </li><li>Check that any compiled code is not dynamically linked to libraries only on your machine, for example by using <code class="command">otool -L</code> or <code class="command">objdump -macho -dylibs-used</code>. This can include C++ and Fortran run-time libraries under <samp class="file">/opt/R/x86_64/lib</samp> or <samp class="file">/opt/R/arm64/lib</samp>: one can use <code class="command">install_name_tool</code> to point these at system versions or those shipped with R, for example <div class="example"> <pre class="example-preformatted">install_name_tool -change /usr/local/llvm/lib/libc++.1.dylib \ /usr/lib/libc++.1.dylib \ <var class="var">pkg</var>.so install_name_tool -change /opt/gfortran/lib/gcc/aarch64-apple-darwin20.0/12.2.0/libgfortran.5.dylib \ /Library/Frameworks/R.framework/Resources/lib/libgfortran.5.dylib \ <var class="var">pkg</var>.so install_name_tool -change /opt/gfortran/lib/gcc/aarch64-apple-darwin20.0/12.2.0/libquadmath.0.dylib \ /Library/Frameworks/R.framework/Resources/lib/libquadmath.0.dylib \ <var class="var">pkg</var>.so </pre></div> <p>(where the details depend on the compilers and <abbr class="acronym">CRAN</abbr> macOS R release). </p> </li><li>For C++ code there is the possibility that calls will be generated to entry points not in the system <samp class="file">/usr/lib/libc++.1.dylib</samp>. The previous step allows this to be tested against the system library on the build OS, but not against earlier ones. It may be possible to circumvent that by static linking to <samp class="file">libc++.a</samp> and <samp class="file">libc++abi.a</samp> by something like <div class="example"> <pre class="example-preformatted">SHLIB_CXXLD = /usr/local/llvm/bin/clang PKG_LIBS = /usr/local/llvm/lib/libc++.a /usr/local/llvm/lib/libc++abi.a </pre></div> <p>in <samp class="file">src/Makevars</samp>. It would also be possible to static link the Fortran runtime libraries <samp class="file">libgfortran.a</samp> and <samp class="file">libquadmath.a</samp> should the Fortran compiler have later versions (but <code class="command">gfortran</code> 8–14 all have version <code class="code">5</code>). </p></li></ul> <p>The <abbr class="acronym">CRAN</abbr> binary packages are built with the Apple compiler on the oldest supported version of macOS, which avoids the first two and any issues with C++ libraries. </p> <hr> </div> <div class="subsection-level-extent" id="Building-for-Intel-on-arm64"> <div class="nav-panel"> <p> Next: <a href="#Installer" accesskey="n" rel="next">Installer</a>, Previous: <a href="#Building-binary-packages" accesskey="p" rel="prev">Building binary packages</a>, Up: <a href="#macOS" accesskey="u" rel="up">macOS</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="Building-for-Intel-on-arm64-1"><span>C.3.11 Building for Intel on ‘<samp class="samp">arm64</samp>’<a class="copiable-link" href="#Building-for-Intel-on-arm64-1"> ¶</a></span></h4> <p>Should one want to build R for Intel on an ‘<samp class="samp">arm64</samp>’ Big Sur Mac, add the target for the compilers: </p> <div class="example"> <pre class="example-preformatted">CC="clang -arch x86_64 OBJC=$CC CXX="clang++ -arch x86_64" FC="/opt//gfortran/bin/gfortran -arch x86_64 -mtune=native -mmacosx-version-min=11" </pre></div> <p>and install the Fortran compiler and external software described above for Intel builds (and have <samp class="file">/opt/R/x86_64/bin</samp> before <samp class="file">/opt/R/arm64/bin</samp> in your path). </p> <p>To set the correct architecture (which will be auto-detected as <code class="code">aarch64</code>), use something like </p> <div class="example"> <pre class="example-preformatted">/path/to/configure --build=x86_64-apple-darwin20 </pre></div> <hr> </div> <div class="subsection-level-extent" id="Installer"> <div class="nav-panel"> <p> Previous: <a href="#Building-for-Intel-on-arm64" accesskey="p" rel="prev">Building for Intel on ‘<samp class="samp">arm64</samp>’</a>, Up: <a href="#macOS" accesskey="u" rel="up">macOS</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h4 class="subsection" id="Installer-1"><span>C.3.12 Installer<a class="copiable-link" href="#Installer-1"> ¶</a></span></h4> <p>The scripts for the <abbr class="acronym">CRAN</abbr> packaging of R can be found under <a class="uref" href="https://svn.r-project.org/R-dev-web/trunk/QA/Simon/R4/">https://svn.r-project.org/R-dev-web/trunk/QA/Simon/R4/</a>: start with the <samp class="file">README</samp> file in that directory. </p> <hr> </div> </div> <div class="section-level-extent" id="FreeBSD"> <div class="nav-panel"> <p> Next: <a href="#OpenBSD" accesskey="n" rel="next">OpenBSD</a>, Previous: <a href="#macOS" accesskey="p" rel="prev">macOS</a>, Up: <a href="#Platform-notes" accesskey="u" rel="up">Platform notes</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="FreeBSD-1"><span>C.4 FreeBSD<a class="copiable-link" href="#FreeBSD-1"> ¶</a></span></h3> <a class="index-entry-id" id="index-FreeBSD"></a> <p>There have been few recent reports on FreeBSD: there is a ‘port’ at <a class="uref" href="https://svnweb.freebsd.org/ports/head/math/R">https://svnweb.freebsd.org/ports/head/math/R</a>, currently last updated for R 4.0.4. Recent versions of FreeBSD use Clang and the <code class="code">libc++</code> C++ headers and runtime, but the ‘port’ has been configured to use GCC. </p> <p>Use of ICU for collation and the <code class="command">configure</code> option <samp class="option">--with-internal-tzcode</samp> are desirable workarounds. </p> <hr> </div> <div class="section-level-extent" id="OpenBSD"> <div class="nav-panel"> <p> Next: <a href="#Cygwin" accesskey="n" rel="next">Cygwin</a>, Previous: <a href="#FreeBSD" accesskey="p" rel="prev">FreeBSD</a>, Up: <a href="#Platform-notes" accesskey="u" rel="up">Platform notes</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="OpenBSD-1"><span>C.5 OpenBSD<a class="copiable-link" href="#OpenBSD-1"> ¶</a></span></h3> <a class="index-entry-id" id="index-OpenBSD"></a> <p>Ingo Feinerer installed R version 3.2.2 on OpenBSD 5.8 arch ‘<samp class="samp">amd64</samp>’ (their name for ‘<samp class="samp">x86_64</samp>’). Details of the build (and patches applied) are at <a class="uref" href="https://cvsweb.openbsd.org/cgi-bin/cvsweb/ports/math/R/">https://cvsweb.openbsd.org/cgi-bin/cvsweb/ports/math/R/</a>, currently updated for R 4.2.3. </p> <hr> </div> <div class="section-level-extent" id="Cygwin"> <div class="nav-panel"> <p> Next: <a href="#New-platforms" accesskey="n" rel="next">New platforms</a>, Previous: <a href="#OpenBSD" accesskey="p" rel="prev">OpenBSD</a>, Up: <a href="#Platform-notes" accesskey="u" rel="up">Platform notes</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="Cygwin-1"><span>C.6 Cygwin<a class="copiable-link" href="#Cygwin-1"> ¶</a></span></h3> <p>The 32-bit version never worked well enough to pass R’s <code class="command">make check</code>, and residual support from earlier experiments was removed in R 3.3.0. </p> <p>The 64-bit version was never supported. </p> <hr> </div> <div class="section-level-extent" id="New-platforms"> <div class="nav-panel"> <p> Previous: <a href="#Cygwin" accesskey="p" rel="prev">Cygwin</a>, Up: <a href="#Platform-notes" accesskey="u" rel="up">Platform notes</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h3 class="section" id="New-platforms-1"><span>C.7 New platforms<a class="copiable-link" href="#New-platforms-1"> ¶</a></span></h3> <p>There are a number of sources of problems when installing R on a new hardware/OS platform. These include </p> <p><strong class="strong">Floating Point Arithmetic</strong>: R requires arithmetic compliant with <abbr class="acronym">IEC</abbr> 60559, also known as <abbr class="acronym">IEEE</abbr> 754. This mandates the use of plus and minus infinity and <code class="code">NaN</code> (not a number) as well as specific details of rounding. Although almost all current <abbr class="abbr">FPU</abbr>s can support this, selecting such support can be a pain. The problem is that there is no agreement on how to set the signalling behaviour; Sun/Sparc, SGI/IRIX and ‘<samp class="samp">ix86</samp>’ Linux require no special action, FreeBSD requires a call to (the macro) <code class="code">fpsetmask(0)</code> and OSF1 required that computation be done with a <samp class="option">-ieee_with_inexact</samp> flag etc. With Intel compilers on 32-bit and 64-bit Intel machines, one has to explicitly disable flush-to-zero and denormals-are-zero modes. Some ARM processors including A12Z and M1 (Apple Silicon) by default use runfast mode, which includes flush-to-zero and default-nan and hence has to be disabled. With default-nan mode, the NaN payload used for representation of numeric NA values is lost even on simple operations with finite values. On a new platform you must find out the magic recipe and add some code to make it work. This can often be done via the file <samp class="file">config.site</samp> which resides in the top level directory. </p> <p>Beware of using high levels of optimization, at least initially. On many compilers these reduce the degree of compliance to the <abbr class="acronym">IEEE</abbr> model. For example, using <samp class="option">-fast</samp> on the Oracle compilers has caused R’s <code class="code">NaN</code> to be set incorrectly, and <code class="command">gcc</code>’s <samp class="option">-ffast-math</samp> and <code class="command">clang</code>’s <samp class="option">-Ofast</samp> have given incorrect results. </p> <p><strong class="strong">Shared Objects</strong>: There seems to be very little agreement across platforms on what needs to be done to build shared objects. there are many different combinations of flags for the compilers and loaders. <abbr class="acronym">GNU</abbr> libtool cannot be used (yet), as it currently does not fully support Fortran: one would need a shell wrapper for this). The technique we use is to first interrogate the X window system about what it does (using <code class="command">xmkmf</code>), and then override this in situations where we know better (for tools from the <abbr class="acronym">GNU</abbr> Compiler Collection and/or platforms we know about). This typically works, but you may have to manually override the results. Scanning the manual entries for <code class="command">cc</code> and <code class="command">ld</code> usually reveals the correct incantation. Once you know the recipe you can modify the file <samp class="file">config.site</samp> (following the instructions therein) so that the build will use these options. </p> <p>It seems that <code class="command">gcc</code> 3.4.x and later on ‘<samp class="samp">ix86</samp>’ Linux defeat attempts by the LAPACK code to avoid computations entirely in extended-precision registers, so file <samp class="file">src/modules/lapack/dlamc.f</samp> may need to be compiled without optimization or with additional flags. Set the configure variable <code class="env">SAFE_FFLAGS</code> to the flags to be used for this file. </p> <p>If you do manage to get R running on a new platform please let us know about it so we can modify the configuration procedures to include that platform. </p> <p>If you are having trouble getting R to work on your platform please feel free to use the ‘<samp class="samp">R-devel</samp>’ mailing list to ask questions. We have had a fair amount of practice at porting R to new platforms <small class="enddots">...</small> </p> <p>One thing you might want to add for a new platform is the mapping of C/C++/Fortran calls to entry point names used for <code class="command">R CMD check</code>. See <a class="uref" href="https://svn.r-project.org/R-dev-web/trunk/sotools.txt">https://svn.r-project.org/R-dev-web/trunk/sotools.txt</a> for how to do so. </p> <hr> </div> </div> <div class="unnumbered-level-extent" id="Function-and-variable-index"> <div class="nav-panel"> <p> Next: <a href="#Concept-index" accesskey="n" rel="next">Concept index</a>, Previous: <a href="#Platform-notes" accesskey="p" rel="prev">Platform notes</a>, Up: <a href="#Top" accesskey="u" rel="up">R Installation and Administration</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h2 class="unnumbered" id="Function-and-variable-index-1"><span>Function and variable index<a class="copiable-link" href="#Function-and-variable-index-1"> ¶</a></span></h2> <div class="printindex vr-printindex"> <table summary="" class="vr-letters-header-printindex"><tr><th>Jump to: </th><td><a class="summary-letter-printindex" href="#Function-and-variable-index_vr_letter-C"><b>C</b></a> <a class="summary-letter-printindex" href="#Function-and-variable-index_vr_letter-I"><b>I</b></a> <a class="summary-letter-printindex" href="#Function-and-variable-index_vr_letter-M"><b>M</b></a> <a class="summary-letter-printindex" href="#Function-and-variable-index_vr_letter-R"><b>R</b></a> <a class="summary-letter-printindex" href="#Function-and-variable-index_vr_letter-U"><b>U</b></a> </td></tr></table> <table summary="" class="vr-entries-printindex" border="0"> <tr><td></td><th class="entries-header-printindex">Index Entry</th><th class="sections-header-printindex">Section</th></tr> <tr><td colspan="3"><hr></td></tr> <tr><th id="Function-and-variable-index_vr_letter-C">C</th></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-configure"><code>configure</code></a></td><td class="printindex-index-section"><a href="#Simple-compilation">Simple compilation</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-configure-1"><code>configure</code></a></td><td class="printindex-index-section"><a href="#Simple-compilation">Simple compilation</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-configure-2"><code>configure</code></a></td><td class="printindex-index-section"><a href="#Installation">Installation</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-configure-3"><code>configure</code></a></td><td class="printindex-index-section"><a href="#Installation">Installation</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-configure-4"><code>configure</code></a></td><td class="printindex-index-section"><a href="#Configuration-variables">Configuration variables</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-configure-5"><code>configure</code></a></td><td class="printindex-index-section"><a href="#Using-make">Using make</a></td></tr> <tr><td colspan="3"><hr></td></tr> <tr><th id="Function-and-variable-index_vr_letter-I">I</th></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-install_002epackages"><code>install.packages</code></a></td><td class="printindex-index-section"><a href="#Installing-packages">Installing packages</a></td></tr> <tr><td colspan="3"><hr></td></tr> <tr><th id="Function-and-variable-index_vr_letter-M">M</th></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-make"><code>make</code></a></td><td class="printindex-index-section"><a href="#Using-make">Using make</a></td></tr> <tr><td colspan="3"><hr></td></tr> <tr><th id="Function-and-variable-index_vr_letter-R">R</th></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-R_005fHOME"><code>R_HOME</code></a></td><td class="printindex-index-section"><a href="#Simple-compilation">Simple compilation</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-remove_002epackages"><code>remove.packages</code></a></td><td class="printindex-index-section"><a href="#Removing-packages">Removing packages</a></td></tr> <tr><td colspan="3"><hr></td></tr> <tr><th id="Function-and-variable-index_vr_letter-U">U</th></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-update_002epackages"><code>update.packages</code></a></td><td class="printindex-index-section"><a href="#Updating-packages">Updating packages</a></td></tr> <tr><td colspan="3"><hr></td></tr> </table> <table summary="" class="vr-letters-footer-printindex"><tr><th>Jump to: </th><td><a class="summary-letter-printindex" href="#Function-and-variable-index_vr_letter-C"><b>C</b></a> <a class="summary-letter-printindex" href="#Function-and-variable-index_vr_letter-I"><b>I</b></a> <a class="summary-letter-printindex" href="#Function-and-variable-index_vr_letter-M"><b>M</b></a> <a class="summary-letter-printindex" href="#Function-and-variable-index_vr_letter-R"><b>R</b></a> <a class="summary-letter-printindex" href="#Function-and-variable-index_vr_letter-U"><b>U</b></a> </td></tr></table> </div> <hr> </div> <div class="unnumbered-level-extent" id="Concept-index"> <div class="nav-panel"> <p> Next: <a href="#Environment-variable-index" accesskey="n" rel="next">Environment variable index</a>, Previous: <a href="#Function-and-variable-index" accesskey="p" rel="prev">Function and variable index</a>, Up: <a href="#Top" accesskey="u" rel="up">R Installation and Administration</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h2 class="unnumbered" id="Concept-index-1"><span>Concept index<a class="copiable-link" href="#Concept-index-1"> ¶</a></span></h2> <div class="printindex cp-printindex"> <table summary="" class="cp-letters-header-printindex"><tr><th>Jump to: </th><td><a class="summary-letter-printindex" href="#Concept-index_cp_letter-B"><b>B</b></a> <a class="summary-letter-printindex" href="#Concept-index_cp_letter-C"><b>C</b></a> <a class="summary-letter-printindex" href="#Concept-index_cp_letter-F"><b>F</b></a> <a class="summary-letter-printindex" href="#Concept-index_cp_letter-I"><b>I</b></a> <a class="summary-letter-printindex" href="#Concept-index_cp_letter-L"><b>L</b></a> <a class="summary-letter-printindex" href="#Concept-index_cp_letter-M"><b>M</b></a> <a class="summary-letter-printindex" href="#Concept-index_cp_letter-O"><b>O</b></a> <a class="summary-letter-printindex" href="#Concept-index_cp_letter-P"><b>P</b></a> <a class="summary-letter-printindex" href="#Concept-index_cp_letter-R"><b>R</b></a> <a class="summary-letter-printindex" href="#Concept-index_cp_letter-S"><b>S</b></a> <a class="summary-letter-printindex" href="#Concept-index_cp_letter-U"><b>U</b></a> <a class="summary-letter-printindex" href="#Concept-index_cp_letter-V"><b>V</b></a> </td></tr></table> <table summary="" class="cp-entries-printindex" border="0"> <tr><td></td><th class="entries-header-printindex">Index Entry</th><th class="sections-header-printindex">Section</th></tr> <tr><td colspan="3"><hr></td></tr> <tr><th id="Concept-index_cp_letter-B">B</th></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-BLAS-library">BLAS library</a></td><td class="printindex-index-section"><a href="#Linear-algebra">Linear algebra</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-BLAS-library-1">BLAS library</a></td><td class="printindex-index-section"><a href="#Accelerate">Accelerate</a></td></tr> <tr><td colspan="3"><hr></td></tr> <tr><th id="Concept-index_cp_letter-C">C</th></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-Cairo">Cairo</a></td><td class="printindex-index-section"><a href="#Installing-R-under-macOS">Installing R under macOS</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-Cairo-1">Cairo</a></td><td class="printindex-index-section"><a href="#Useful-libraries-and-programs">Useful libraries and programs</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-Cairo-2">Cairo</a></td><td class="printindex-index-section"><a href="#X11-issues">X11 issues</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-Cairo-3">Cairo</a></td><td class="printindex-index-section"><a href="#Cairo-graphics">Cairo graphics</a></td></tr> <tr><td colspan="3"><hr></td></tr> <tr><th id="Concept-index_cp_letter-F">F</th></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-Fortran">Fortran</a></td><td class="printindex-index-section"><a href="#Using-Fortran">Using Fortran</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-FreeBSD">FreeBSD</a></td><td class="printindex-index-section"><a href="#FreeBSD">FreeBSD</a></td></tr> <tr><td colspan="3"><hr></td></tr> <tr><th id="Concept-index_cp_letter-I">I</th></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-Installation">Installation</a></td><td class="printindex-index-section"><a href="#Installation">Installation</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-Installing-under-Unix_002dalikes">Installing under Unix-alikes</a></td><td class="printindex-index-section"><a href="#Installing-R-under-Unix_002dalikes">Installing R under Unix-alikes</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-Installing-under-Windows">Installing under Windows</a></td><td class="printindex-index-section"><a href="#Installing-R-under-Windows">Installing R under Windows</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-Internationalization">Internationalization</a></td><td class="printindex-index-section"><a href="#Internationalization">Internationalization</a></td></tr> <tr><td colspan="3"><hr></td></tr> <tr><th id="Concept-index_cp_letter-L">L</th></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-LAPACK-library">LAPACK library</a></td><td class="printindex-index-section"><a href="#LAPACK">LAPACK</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-LAPACK-library-1">LAPACK library</a></td><td class="printindex-index-section"><a href="#Accelerate">Accelerate</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-Libraries">Libraries</a></td><td class="printindex-index-section"><a href="#Add_002don-packages">Add-on packages</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-Libraries_002c-managing">Libraries, managing</a></td><td class="printindex-index-section"><a href="#Managing-libraries">Managing libraries</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-Libraries_002c-site">Libraries, site</a></td><td class="printindex-index-section"><a href="#Managing-libraries">Managing libraries</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-Libraries_002c-user">Libraries, user</a></td><td class="printindex-index-section"><a href="#Managing-libraries">Managing libraries</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-Linux">Linux</a></td><td class="printindex-index-section"><a href="#Installing-R-under-Unix_002dalikes">Installing R under Unix-alikes</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-Linux-1">Linux</a></td><td class="printindex-index-section"><a href="#Linux">Linux</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-Locale">Locale</a></td><td class="printindex-index-section"><a href="#Internationalization">Internationalization</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-Locale-1">Locale</a></td><td class="printindex-index-section"><a href="#Locales">Locales</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-Localization">Localization</a></td><td class="printindex-index-section"><a href="#Internationalization">Internationalization</a></td></tr> <tr><td colspan="3"><hr></td></tr> <tr><th id="Concept-index_cp_letter-M">M</th></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-macOS">macOS</a></td><td class="printindex-index-section"><a href="#Installing-R-under-Unix_002dalikes">Installing R under Unix-alikes</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-macOS-1">macOS</a></td><td class="printindex-index-section"><a href="#Installing-R-under-macOS">Installing R under macOS</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-macOS-2">macOS</a></td><td class="printindex-index-section"><a href="#macOS">macOS</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-Manuals">Manuals</a></td><td class="printindex-index-section"><a href="#Making-the-manuals">Making the manuals</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-Manuals_002c-installing">Manuals, installing</a></td><td class="printindex-index-section"><a href="#Installation">Installation</a></td></tr> <tr><td colspan="3"><hr></td></tr> <tr><th id="Concept-index_cp_letter-O">O</th></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-Obtaining-R">Obtaining R</a></td><td class="printindex-index-section"><a href="#Obtaining-R">Obtaining R</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-OpenBSD">OpenBSD</a></td><td class="printindex-index-section"><a href="#OpenBSD">OpenBSD</a></td></tr> <tr><td colspan="3"><hr></td></tr> <tr><th id="Concept-index_cp_letter-P">P</th></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-Packages">Packages</a></td><td class="printindex-index-section"><a href="#Add_002don-packages">Add-on packages</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-Packages_002c-default">Packages, default</a></td><td class="printindex-index-section"><a href="#Default-packages">Default packages</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-Packages_002c-installing">Packages, installing</a></td><td class="printindex-index-section"><a href="#Installing-packages">Installing packages</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-Packages_002c-removing">Packages, removing</a></td><td class="printindex-index-section"><a href="#Removing-packages">Removing packages</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-Packages_002c-updating">Packages, updating</a></td><td class="printindex-index-section"><a href="#Updating-packages">Updating packages</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-Pango">Pango</a></td><td class="printindex-index-section"><a href="#Useful-libraries-and-programs">Useful libraries and programs</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-Pango-1">Pango</a></td><td class="printindex-index-section"><a href="#Cairo-graphics">Cairo graphics</a></td></tr> <tr><td colspan="3"><hr></td></tr> <tr><th id="Concept-index_cp_letter-R">R</th></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-Repositories">Repositories</a></td><td class="printindex-index-section"><a href="#Setting-up-a-package-repository">Setting up a package repository</a></td></tr> <tr><td colspan="3"><hr></td></tr> <tr><th id="Concept-index_cp_letter-S">S</th></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-Site-libraries">Site libraries</a></td><td class="printindex-index-section"><a href="#Managing-libraries">Managing libraries</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-Sources-for-R">Sources for R</a></td><td class="printindex-index-section"><a href="#Getting-and-unpacking-the-sources">Getting and unpacking the sources</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-Subversion">Subversion</a></td><td class="printindex-index-section"><a href="#Using-Subversion-and-rsync">Using Subversion and rsync</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-Subversion-1">Subversion</a></td><td class="printindex-index-section"><a href="#Essential-programs-and-libraries">Essential programs and libraries</a></td></tr> <tr><td colspan="3"><hr></td></tr> <tr><th id="Concept-index_cp_letter-U">U</th></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-User-libraries">User libraries</a></td><td class="printindex-index-section"><a href="#Managing-libraries">Managing libraries</a></td></tr> <tr><td colspan="3"><hr></td></tr> <tr><th id="Concept-index_cp_letter-V">V</th></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-Vignettes">Vignettes</a></td><td class="printindex-index-section"><a href="#Essential-programs-and-libraries">Essential programs and libraries</a></td></tr> <tr><td colspan="3"><hr></td></tr> </table> <table summary="" class="cp-letters-footer-printindex"><tr><th>Jump to: </th><td><a class="summary-letter-printindex" href="#Concept-index_cp_letter-B"><b>B</b></a> <a class="summary-letter-printindex" href="#Concept-index_cp_letter-C"><b>C</b></a> <a class="summary-letter-printindex" href="#Concept-index_cp_letter-F"><b>F</b></a> <a class="summary-letter-printindex" href="#Concept-index_cp_letter-I"><b>I</b></a> <a class="summary-letter-printindex" href="#Concept-index_cp_letter-L"><b>L</b></a> <a class="summary-letter-printindex" href="#Concept-index_cp_letter-M"><b>M</b></a> <a class="summary-letter-printindex" href="#Concept-index_cp_letter-O"><b>O</b></a> <a class="summary-letter-printindex" href="#Concept-index_cp_letter-P"><b>P</b></a> <a class="summary-letter-printindex" href="#Concept-index_cp_letter-R"><b>R</b></a> <a class="summary-letter-printindex" href="#Concept-index_cp_letter-S"><b>S</b></a> <a class="summary-letter-printindex" href="#Concept-index_cp_letter-U"><b>U</b></a> <a class="summary-letter-printindex" href="#Concept-index_cp_letter-V"><b>V</b></a> </td></tr></table> </div> <hr> </div> <div class="unnumbered-level-extent" id="Environment-variable-index"> <div class="nav-panel"> <p> Previous: <a href="#Concept-index" accesskey="p" rel="prev">Concept index</a>, Up: <a href="#Top" accesskey="u" rel="up">R Installation and Administration</a> [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Function-and-variable-index" title="Index" rel="index">Index</a>]</p> </div> <h2 class="unnumbered" id="Environment-variable-index-1"><span>Environment variable index<a class="copiable-link" href="#Environment-variable-index-1"> ¶</a></span></h2> <div class="printindex en-printindex"> <table summary="" class="en-letters-header-printindex"><tr><th>Jump to: </th><td><a class="summary-letter-printindex" href="#Environment-variable-index_en_letter-B"><b>B</b></a> <a class="summary-letter-printindex" href="#Environment-variable-index_en_letter-C"><b>C</b></a> <a class="summary-letter-printindex" href="#Environment-variable-index_en_letter-D"><b>D</b></a> <a class="summary-letter-printindex" href="#Environment-variable-index_en_letter-J"><b>J</b></a> <a class="summary-letter-printindex" href="#Environment-variable-index_en_letter-L"><b>L</b></a> <a class="summary-letter-printindex" href="#Environment-variable-index_en_letter-P"><b>P</b></a> <a class="summary-letter-printindex" href="#Environment-variable-index_en_letter-R"><b>R</b></a> <a class="summary-letter-printindex" href="#Environment-variable-index_en_letter-T"><b>T</b></a> </td></tr></table> <table summary="" class="en-entries-printindex" border="0"> <tr><td></td><th class="entries-header-printindex">Index Entry</th><th class="sections-header-printindex">Section</th></tr> <tr><td colspan="3"><hr></td></tr> <tr><th id="Environment-variable-index_en_letter-B">B</th></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-BLAS_005fLIBS"><code>BLAS_LIBS</code></a></td><td class="printindex-index-section"><a href="#BLAS">BLAS</a></td></tr> <tr><td colspan="3"><hr></td></tr> <tr><th id="Environment-variable-index_en_letter-C">C</th></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-CONFIG_005fSITE"><code>CONFIG_SITE</code></a></td><td class="printindex-index-section"><a href="#Configuration-variables">Configuration variables</a></td></tr> <tr><td colspan="3"><hr></td></tr> <tr><th id="Environment-variable-index_en_letter-D">D</th></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-DESTDIR"><code>DESTDIR</code></a></td><td class="printindex-index-section"><a href="#Installation">Installation</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-DESTDIR-1"><code>DESTDIR</code></a></td><td class="printindex-index-section"><a href="#Unix_002dalike-standalone">Unix-alike standalone</a></td></tr> <tr><td colspan="3"><hr></td></tr> <tr><th id="Environment-variable-index_en_letter-J">J</th></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-JAVA_005fHOME"><code>JAVA_HOME</code></a></td><td class="printindex-index-section"><a href="#Java-support">Java support</a></td></tr> <tr><td colspan="3"><hr></td></tr> <tr><th id="Environment-variable-index_en_letter-L">L</th></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-LANG"><code>LANG</code></a></td><td class="printindex-index-section"><a href="#Localization-of-messages">Localization of messages</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-LANGUAGE"><code>LANGUAGE</code></a></td><td class="printindex-index-section"><a href="#Localization-of-messages">Localization of messages</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-LANGUAGE-1"><code>LANGUAGE</code></a></td><td class="printindex-index-section"><a href="#Localization-of-messages">Localization of messages</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-LAPACK_005fLIBS"><code>LAPACK_LIBS</code></a></td><td class="printindex-index-section"><a href="#LAPACK">LAPACK</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-LC_005fALL"><code>LC_ALL</code></a></td><td class="printindex-index-section"><a href="#Localization-of-messages">Localization of messages</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-LC_005fCOLLATE"><code>LC_COLLATE</code></a></td><td class="printindex-index-section"><a href="#Testing-a-Unix_002dalike-Installation">Testing a Unix-alike Installation</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-LC_005fMESSAGES"><code>LC_MESSAGES</code></a></td><td class="printindex-index-section"><a href="#Localization-of-messages">Localization of messages</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-LD_005fLIBRARY_005fPATH"><code>LD_LIBRARY_PATH</code></a></td><td class="printindex-index-section"><a href="#Unix_002dalike-standalone">Unix-alike standalone</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-LD_005fLIBRARY_005fPATH-1"><code>LD_LIBRARY_PATH</code></a></td><td class="printindex-index-section"><a href="#Using-Fortran">Using Fortran</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-LD_005fLIBRARY_005fPATH-2"><code>LD_LIBRARY_PATH</code></a></td><td class="printindex-index-section"><a href="#Compile-and-load-flags">Compile and load flags</a></td></tr> <tr><td colspan="3"><hr></td></tr> <tr><th id="Environment-variable-index_en_letter-P">P</th></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-PAPERSIZE"><code>PAPERSIZE</code></a></td><td class="printindex-index-section"><a href="#Setting-paper-size">Setting paper size</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-PATH"><code>PATH</code></a></td><td class="printindex-index-section"><a href="#Essential-programs-and-libraries">Essential programs and libraries</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-PATH-1"><code>PATH</code></a></td><td class="printindex-index-section"><a href="#Using-Fortran">Using Fortran</a></td></tr> <tr><td colspan="3"><hr></td></tr> <tr><th id="Environment-variable-index_en_letter-R">R</th></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-R_005fARCH"><code>R_ARCH</code></a></td><td class="printindex-index-section"><a href="#Sub_002darchitectures">Sub-architectures</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-R_005fBROWSER"><code>R_BROWSER</code></a></td><td class="printindex-index-section"><a href="#Setting-the-browsers">Setting the browsers</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-R_005fDEFAULT_005fPACKAGES"><code>R_DEFAULT_PACKAGES</code></a></td><td class="printindex-index-section"><a href="#Default-packages">Default packages</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-R_005fDISABLE_005fHTTPD"><code>R_DISABLE_HTTPD</code></a></td><td class="printindex-index-section"><a href="#Help-options">Help options</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-R_005fGSCMD"><code>R_GSCMD</code></a></td><td class="printindex-index-section"><a href="#Useful-libraries-and-programs">Useful libraries and programs</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-R_005fINSTALL_005fTAR"><code>R_INSTALL_TAR</code></a></td><td class="printindex-index-section"><a href="#Windows-packages">Windows packages</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-R_005fJAVA_005fLD_005fLIBRARY_005fPATH"><code>R_JAVA_LD_LIBRARY_PATH</code></a></td><td class="printindex-index-section"><a href="#Java-support">Java support</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-R_005fJAVA_005fLD_005fLIBRARY_005fPATH-1"><code>R_JAVA_LD_LIBRARY_PATH</code></a></td><td class="printindex-index-section"><a href="#Java-support">Java support</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-R_005fLIBS"><code>R_LIBS</code></a></td><td class="printindex-index-section"><a href="#Add_002don-packages">Add-on packages</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-R_005fLIBS_005fSITE"><code>R_LIBS_SITE</code></a></td><td class="printindex-index-section"><a href="#Managing-libraries">Managing libraries</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-R_005fLIBS_005fUSER"><code>R_LIBS_USER</code></a></td><td class="printindex-index-section"><a href="#Managing-libraries">Managing libraries</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-R_005fPAPERSIZE"><code>R_PAPERSIZE</code></a></td><td class="printindex-index-section"><a href="#Making-the-manuals">Making the manuals</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-R_005fPAPERSIZE-1"><code>R_PAPERSIZE</code></a></td><td class="printindex-index-section"><a href="#Running-R">Running R</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-R_005fPAPERSIZE-2"><code>R_PAPERSIZE</code></a></td><td class="printindex-index-section"><a href="#Setting-paper-size">Setting paper size</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-R_005fPAPERSIZE-3"><code>R_PAPERSIZE</code></a></td><td class="printindex-index-section"><a href="#Making-manuals">Making manuals</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-R_005fPDFVIEWER"><code>R_PDFVIEWER</code></a></td><td class="printindex-index-section"><a href="#Setting-the-browsers">Setting the browsers</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-R_005fRD4PDF"><code>R_RD4PDF</code></a></td><td class="printindex-index-section"><a href="#Making-the-manuals">Making the manuals</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-R_005fRD4PDF-1"><code>R_RD4PDF</code></a></td><td class="printindex-index-section"><a href="#Making-manuals">Making manuals</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-R_005fSCRIPT_005fDEFAULT_005fPACKAGES"><code>R_SCRIPT_DEFAULT_PACKAGES</code></a></td><td class="printindex-index-section"><a href="#Default-packages">Default packages</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-R_005fUSER"><code>R_USER</code></a></td><td class="printindex-index-section"><a href="#Running-R">Running R</a></td></tr> <tr><td colspan="3"><hr></td></tr> <tr><th id="Environment-variable-index_en_letter-T">T</th></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-TAR"><code>TAR</code></a></td><td class="printindex-index-section"><a href="#Essential-programs-and-libraries">Essential programs and libraries</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-TAR_005fOPTIONS"><code>TAR_OPTIONS</code></a></td><td class="printindex-index-section"><a href="#Getting-and-unpacking-the-sources">Getting and unpacking the sources</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-TEMP"><code>TEMP</code></a></td><td class="printindex-index-section"><a href="#Running-R">Running R</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-TMP"><code>TMP</code></a></td><td class="printindex-index-section"><a href="#Running-R">Running R</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-TMPDIR"><code>TMPDIR</code></a></td><td class="printindex-index-section"><a href="#Simple-compilation">Simple compilation</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-TMPDIR-1"><code>TMPDIR</code></a></td><td class="printindex-index-section"><a href="#Running-R">Running R</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-TMPDIR-2"><code>TMPDIR</code></a></td><td class="printindex-index-section"><a href="#Running-R">Running R</a></td></tr> <tr><td></td><td class="printindex-index-entry"><a href="#index-TMPDIR-3"><code>TMPDIR</code></a></td><td class="printindex-index-section"><a href="#Installing-packages">Installing packages</a></td></tr> <tr><td colspan="3"><hr></td></tr> </table> <table summary="" class="en-letters-footer-printindex"><tr><th>Jump to: </th><td><a class="summary-letter-printindex" href="#Environment-variable-index_en_letter-B"><b>B</b></a> <a class="summary-letter-printindex" href="#Environment-variable-index_en_letter-C"><b>C</b></a> <a class="summary-letter-printindex" href="#Environment-variable-index_en_letter-D"><b>D</b></a> <a class="summary-letter-printindex" href="#Environment-variable-index_en_letter-J"><b>J</b></a> <a class="summary-letter-printindex" href="#Environment-variable-index_en_letter-L"><b>L</b></a> <a class="summary-letter-printindex" href="#Environment-variable-index_en_letter-P"><b>P</b></a> <a class="summary-letter-printindex" href="#Environment-variable-index_en_letter-R"><b>R</b></a> <a class="summary-letter-printindex" href="#Environment-variable-index_en_letter-T"><b>T</b></a> </td></tr></table> </div> </div> </div> <div class="footnotes-segment"> <hr> <h4 class="footnotes-heading">Footnotes</h4> <h5 class="footnote-body-heading"><a id="FOOT1" href="#DOCF1">(1)</a></h5> <p>e.g. <abbr class="acronym">GNU</abbr> <code class="command">tar</code> version 1.15 or later, or that from the ‘<samp class="samp">libarchive</samp>’ (as used on macOS) or ‘Heirloom Toolchest’ distributions.</p> <h5 class="footnote-body-heading"><a id="FOOT2" href="#DOCF2">(2)</a></h5> <p>for some Subversion clients ‘<samp class="samp">http:</samp>’ may appear to work, but requires continual redirection.</p> <h5 class="footnote-body-heading"><a id="FOOT3" href="#DOCF3">(3)</a></h5> <p>aka ‘Apple Silicon’, known to some as ‘<samp class="samp">arm64-apple-darwin</samp>’.</p> <h5 class="footnote-body-heading"><a id="FOOT4" href="#DOCF4">(4)</a></h5> <p>which use <samp class="file">lib</samp> rather than <samp class="file">lib64</samp> for their primary 64-bit library directories: attempts are made to detect such systems.</p> <h5 class="footnote-body-heading"><a id="FOOT5" href="#DOCF5">(5)</a></h5> <p>not by the version supplied by macOS.</p> <h5 class="footnote-body-heading"><a id="FOOT6" href="#DOCF6">(6)</a></h5> <p>Instructions on how to install the latest version are at <a class="uref" href="https://www.ctan.org/tex-archive/fonts/inconsolata/">https://www.ctan.org/tex-archive/fonts/inconsolata/</a>.</p> <h5 class="footnote-body-heading"><a id="FOOT7" href="#DOCF7">(7)</a></h5> <p>on a Unix-alike, ‘<samp class="samp">inconsolata</samp>’ is omitted if not found by <code class="command">configure</code>.</p> <h5 class="footnote-body-heading"><a id="FOOT8" href="#DOCF8">(8)</a></h5> <p>This will be needed if more than one sub-architecture is to be installed.</p> <h5 class="footnote-body-heading"><a id="FOOT9" href="#DOCF9">(9)</a></h5> <p>How to prepare such a directory is described in file <samp class="file">src/extra/tzone/Notes</samp> in the R sources.</p> <h5 class="footnote-body-heading"><a id="FOOT10" href="#DOCF10">(10)</a></h5> <p>But on Windows problems have been seen with case-changing functions on accented Latin-1 characters.</p> <h5 class="footnote-body-heading"><a id="FOOT11" href="#DOCF11">(11)</a></h5> <p>for example, <samp class="option">-fopenmp</samp>, <samp class="option">-fiopenmp</samp>, <samp class="option">-xopenmp</samp> or <samp class="option">-qopenmp</samp>. This includes for <code class="command">clang</code> and the Intel and Oracle compilers.</p> <h5 class="footnote-body-heading"><a id="FOOT12" href="#DOCF12">(12)</a></h5> <p>This does not necessarily disable <em class="emph">use</em> of <abbr class="abbr">OpenMP</abbr> – the <code class="command">configure</code> code allows for platforms where <abbr class="abbr">OpenMP</abbr> is used without a flag. For the <code class="command">flang</code> compiler in late 2017, the Fortran runtime always used <abbr class="abbr">OpenMP</abbr>.</p> <h5 class="footnote-body-heading"><a id="FOOT13" href="#DOCF13">(13)</a></h5> <p>Then recommended packages installed as part of the R installation do use <abbr class="abbr">LTO</abbr>, but not packages installed later.</p> <h5 class="footnote-body-heading"><a id="FOOT14" href="#DOCF14">(14)</a></h5> <p>A complete <abbr class="acronym">CRAN</abbr> installation reduced from 50 to 35GB.</p> <h5 class="footnote-body-heading"><a id="FOOT15" href="#DOCF15">(15)</a></h5> <p>although there is the possibility to exclude Fortran but that misses some of the benefits.</p> <h5 class="footnote-body-heading"><a id="FOOT16" href="#DOCF16">(16)</a></h5> <p>not <code class="env">NM</code> as we found <code class="command">make</code> overriding that.</p> <h5 class="footnote-body-heading"><a id="FOOT17" href="#DOCF17">(17)</a></h5> <p>probably also 8.4 and later.</p> <h5 class="footnote-body-heading"><a id="FOOT18" href="#DOCF18">(18)</a></h5> <p>There are reports of segfaults when ‘<samp class="samp">MiKTeX</samp>’ installs additional packages when making <samp class="file">NEWS.pdf</samp>: re-running <code class="command">make</code> seems to solve this.</p> <h5 class="footnote-body-heading"><a id="FOOT19" href="#DOCF19">(19)</a></h5> <p>At the time of writing, version 2.8.5 or later.</p> <h5 class="footnote-body-heading"><a id="FOOT20" href="#DOCF20">(20)</a></h5> <p>The installer puts links to <code class="command">R</code> and <code class="command">Rscript</code> in <samp class="file">/usr/local/bin</samp>. If these are missing or that is not on your path, you can run directly the copies in <samp class="file">/Library/Frameworks/R.framework/Resources/bin</samp> or link those yourself to somewhere on your path.</p> <h5 class="footnote-body-heading"><a id="FOOT21" href="#DOCF21">(21)</a></h5> <p>Formerly known as the Trash.</p> <h5 class="footnote-body-heading"><a id="FOOT22" href="#DOCF22">(22)</a></h5> <p>At the time of writing: use <code class="command">pkgutil --pkgs | grep -i org.r-project</code> to check.</p> <h5 class="footnote-body-heading"><a id="FOOT23" href="#DOCF23">(23)</a></h5> <p>More precisely, of the Apple package of the same name: this means that ARM and Intel versions can be installed together.</p> <h5 class="footnote-body-heading"><a id="FOOT24" href="#DOCF24">(24)</a></h5> <p>Including GCC 9 on Linux.</p> <h5 class="footnote-body-heading"><a id="FOOT25" href="#DOCF25">(25)</a></h5> <p>On Windows a path containing spaces will be replaced by the ‘short path’ version if that does not contain spaces.</p> <h5 class="footnote-body-heading"><a id="FOOT26" href="#DOCF26">(26)</a></h5> <p>unless they were excluded in the build.</p> <h5 class="footnote-body-heading"><a id="FOOT27" href="#DOCF27">(27)</a></h5> <p>its binding is locked once the startup files have been read, so users cannot easily change it. See <code class="code">?.libPaths</code> for how to make use of the new value.</p> <h5 class="footnote-body-heading"><a id="FOOT28" href="#DOCF28">(28)</a></h5> <p>If a proxy needs to be set, see <code class="command">?download.file</code>.</p> <h5 class="footnote-body-heading"><a id="FOOT29" href="#DOCF29">(29)</a></h5> <p>for a small number of <abbr class="acronym">CRAN</abbr> packages where this is known to be safe and is needed by the autobuilder this is the default. Look at the source of <samp class="file">tools:::.install_packages</samp> for the list. It can also be specified in the package’s <samp class="file">DESCRIPTION</samp> file.</p> <h5 class="footnote-body-heading"><a id="FOOT30" href="#DOCF30">(30)</a></h5> <p>Note that capitalization and versioning may differ from the Open Source project.</p> <h5 class="footnote-body-heading"><a id="FOOT31" href="#DOCF31">(31)</a></h5> <p>using a path containing spaces is likely to cause problems</p> <h5 class="footnote-body-heading"><a id="FOOT32" href="#DOCF32">(32)</a></h5> <p>They need to have been created using <samp class="option">-headerpad_max_install_names</samp>, which is the default for an R package.</p> <h5 class="footnote-body-heading"><a id="FOOT33" href="#DOCF33">(33)</a></h5> <p>‘X/Open Portability Guide’, which has had several versions.</p> <h5 class="footnote-body-heading"><a id="FOOT34" href="#DOCF34">(34)</a></h5> <p>On some systems setting <code class="env">LC_ALL</code> or <code class="env">LC_MESSAGES</code> to ‘<samp class="samp">C</samp>’ disables <code class="env">LANGUAGE</code>.</p> <h5 class="footnote-body-heading"><a id="FOOT35" href="#DOCF35">(35)</a></h5> <p>If you try changing from French to Russian except in a UTF-8 locale, you may find messages change to English.</p> <h5 class="footnote-body-heading"><a id="FOOT36" href="#DOCF36">(36)</a></h5> <p>the language written in England: some people living in the USA appropriate this name for their language.</p> <h5 class="footnote-body-heading"><a id="FOOT37" href="#DOCF37">(37)</a></h5> <p>with Americanisms.</p> <h5 class="footnote-body-heading"><a id="FOOT38" href="#DOCF38">(38)</a></h5> <p>e.g. Bessel, beta and gamma functions</p> <h5 class="footnote-body-heading"><a id="FOOT39" href="#DOCF39">(39)</a></h5> <p>including copying <samp class="file">MkRules.dist</samp> to <samp class="file">MkRule.local</samp> and selecting the architecture.</p> <h5 class="footnote-body-heading"><a id="FOOT40" href="#DOCF40">(40)</a></h5> <p>also known as <abbr class="acronym">IEEE</abbr> 754</p> <h5 class="footnote-body-heading"><a id="FOOT41" href="#DOCF41">(41)</a></h5> <p>Note that C11 compilers need not be C99-compliant: R requires support for <code class="code">double complex</code> and variable-length arrays which are optional in C11 but are mandatory in C99. C17 (also known as C18 as it was published in 2018) is a ‘bugfix release’ of C11, clarifying the standard. However, all known recent compilers in C11 or C17 mode are C99-compliant, and most default to C17.</p> <h5 class="footnote-body-heading"><a id="FOOT42" href="#DOCF42">(42)</a></h5> <p>Examples are <samp class="option">-std=gnu99</samp>, <samp class="option">-std=c99</samp> and <samp class="option">-c99</samp>.</p> <h5 class="footnote-body-heading"><a id="FOOT43" href="#DOCF43">(43)</a></h5> <p>However, it is possible to break the default behaviour of <code class="code">glibc</code> by re-specifying the <code class="code">gconv</code> modules to be loaded.</p> <h5 class="footnote-body-heading"><a id="FOOT44" href="#DOCF44">(44)</a></h5> <p>specifically, the C99 functionality of headers <samp class="file">wchar.h</samp> and <samp class="file">wctype.h</samp>, types <code class="code">wctans_t</code> and <code class="code">mbstate_t</code> and functions <code class="code">mbrtowc</code>, <code class="code">mbstowcs</code>, <code class="code">wcrtomb</code>, <code class="code">wcscoll</code>, <code class="code">wcstombs</code>, <code class="code">wctrans</code>, <code class="code">wctype</code>, and <code class="code">iswctype</code>.</p> <h5 class="footnote-body-heading"><a id="FOOT45" href="#DOCF45">(45)</a></h5> <p>including <code class="code">expm1</code>, <code class="code">hypot</code>, <code class="code">log1p</code>, <code class="code">nearbyint</code> and <code class="code">va_copy</code>.</p> <h5 class="footnote-body-heading"><a id="FOOT46" href="#DOCF46">(46)</a></h5> <p>including <code class="code">opendir</code>, <code class="code">readdir</code>, <code class="code">closedir</code>, <code class="code">popen</code>, <code class="code">stat</code>, <code class="code">glob</code>, <code class="code">access</code>, <code class="code">getcwd</code> and <code class="code">chdir</code> system calls, <code class="code">select</code> on a Unix-alike, and either <code class="code">putenv</code> or <code class="code">setenv</code>.</p> <h5 class="footnote-body-heading"><a id="FOOT47" href="#DOCF47">(47)</a></h5> <p>such as <code class="code">realpath</code>, <code class="code">symlink</code>.</p> <h5 class="footnote-body-heading"><a id="FOOT48" href="#DOCF48">(48)</a></h5> <p>most often distributed as part of <code class="code">xz</code>: possible names in Linux distributions include <code class="code">xz-devel</code>/<code class="code">xz-libs</code> and <code class="code">liblzma-dev</code>.</p> <h5 class="footnote-body-heading"><a id="FOOT49" href="#DOCF49">(49)</a></h5> <p>for example to specify static linking with a build which has both shared and static libraries.</p> <h5 class="footnote-body-heading"><a id="FOOT50" href="#DOCF50">(50)</a></h5> <p>Such as <abbr class="acronym">GNU</abbr> <code class="command">tar</code> 1.15 or later, <code class="command">bsdtar</code> (from <a class="uref" href="https://github.com/libarchive/libarchive/">https://github.com/libarchive/libarchive/</a>, used as <code class="command">tar</code> by FreeBSD and macOS 10.6 and later) or <code class="command">tar</code> from the Heirloom Toolchest (<a class="uref" href="https://heirloom.sourceforge.net/tools.html">https://heirloom.sourceforge.net/tools.html</a>), although the latter does not support <code class="command">xz</code> compression.</p> <h5 class="footnote-body-heading"><a id="FOOT51" href="#DOCF51">(51)</a></h5> <p><code class="command">texi2dvi</code> is normally a shell script. Some of the issues which have been observed with broken versions of <code class="command">texi2dvi</code> can be circumvented by setting the environment variable <code class="env">R_TEXI2DVICMD</code> to the value <code class="code">emulation</code>.</p> <h5 class="footnote-body-heading"><a id="FOOT52" href="#DOCF52">(52)</a></h5> <p>If necessary the path to <code class="command">pkg-config</code> can be specified by setting <code class="env">PKG_CONFIG</code> in <samp class="file">config.site</samp>, on the <code class="command">configure</code> command line or in the environment. There is a compatible re-implementation of <code class="command">pkg-config</code> called <code class="command">pkgconf</code> which can be used in the unlikely event that is installed but not linked to <code class="command">pkg-config</code>.</p> <h5 class="footnote-body-heading"><a id="FOOT53" href="#DOCF53">(53)</a></h5> <p>also known as <code class="code">ttf-mscorefonts-installer</code> in the Debian/Ubuntu world: see also <a class="uref" href="https://en.wikipedia.org/wiki/Core_fonts_for_the_Web">https://en.wikipedia.org/wiki/Core_fonts_for_the_Web</a>.</p> <h5 class="footnote-body-heading"><a id="FOOT54" href="#DOCF54">(54)</a></h5> <p><code class="code">ttf-liberation</code> in Debian/Ubuntu.</p> <h5 class="footnote-body-heading"><a id="FOOT55" href="#DOCF55">(55)</a></h5> <p>Including that used by Fedora 28 and later</p> <h5 class="footnote-body-heading"><a id="FOOT56" href="#DOCF56">(56)</a></h5> <p>R uses <samp class="file">rpc/xdr.h</samp> but that includes <samp class="file">netconfig.h</samp> from the top <samp class="file">tirpc</samp> directory.</p> <h5 class="footnote-body-heading"><a id="FOOT57" href="#DOCF57">(57)</a></h5> <p>This is true even for the ‘Aqua’ version of Tk on macOS, but distributions of that include a copy of the X11 files needed.</p> <h5 class="footnote-body-heading"><a id="FOOT58" href="#DOCF58">(58)</a></h5> <p>The search order is currently OpenBLAS, BLIS, ATLAS, platform-specific choices (see below) and finally a generic <samp class="file">libblas</samp>.</p> <h5 class="footnote-body-heading"><a id="FOOT59" href="#DOCF59">(59)</a></h5> <p>Using the Oracle Developer Studio <code class="command">cc</code> and <code class="command">f95</code> compilers</p> <h5 class="footnote-body-heading"><a id="FOOT60" href="#DOCF60">(60)</a></h5> <p>for example, Intel MKL not packaged by Fedora.</p> <h5 class="footnote-body-heading"><a id="FOOT61" href="#DOCF61">(61)</a></h5> <p>The only way to see exactly which CPUs the distributed libraries have been tuned for is to read the <samp class="file">atlas.spec</samp> file.</p> <h5 class="footnote-body-heading"><a id="FOOT62" href="#DOCF62">(62)</a></h5> <p><a class="uref" href="https://math-atlas.sourceforge.net/atlas_install/">https://math-atlas.sourceforge.net/atlas_install/</a></p> <h5 class="footnote-body-heading"><a id="FOOT63" href="#DOCF63">(63)</a></h5> <p><a class="uref" href="https://math-atlas.sourceforge.net/faq.html#tnum">https://math-atlas.sourceforge.net/faq.html#tnum</a></p> <h5 class="footnote-body-heading"><a id="FOOT64" href="#DOCF64">(64)</a></h5> <p>(and more, e.g. for 64-bit ints and static versions).</p> <h5 class="footnote-body-heading"><a id="FOOT65" href="#DOCF65">(65)</a></h5> <p>Nowadays known as ‘Intel oneAPI Math Kernel Library’ or even ‘oneMKL’.</p> <h5 class="footnote-body-heading"><a id="FOOT66" href="#DOCF66">(66)</a></h5> <p>The issue for macOS has been the use of double-complex routines.</p> <h5 class="footnote-body-heading"><a id="FOOT67" href="#DOCF67">(67)</a></h5> <p>ATLAS, OpenBLAS and Accelerate.</p> <h5 class="footnote-body-heading"><a id="FOOT68" href="#DOCF68">(68)</a></h5> <p>We have measured 15–20% on ‘<samp class="samp">i686</samp>’ Linux and around 10% on ‘<samp class="samp">x86_64</samp>’ Linux.</p> <h5 class="footnote-body-heading"><a id="FOOT69" href="#DOCF69">(69)</a></h5> <p>at the time of revision of this para in early 2024, <strong class="strong">autoconf-2.72</strong> and <strong class="strong">automake-1.16.5</strong>. Previously <strong class="strong">autoconf-2.71</strong> was used.</p> <h5 class="footnote-body-heading"><a id="FOOT70" href="#DOCF70">(70)</a></h5> <p>The links there have proved difficult to access, in which case grab the copy made available at <a class="uref" href="https://developer.r-project.org/noweb-2.11b.tgz">https://developer.r-project.org/noweb-2.11b.tgz</a>.</p> <h5 class="footnote-body-heading"><a id="FOOT71" href="#DOCF71">(71)</a></h5> <p>Most <code class="command">clang</code>-based compilers give <code class="code">4</code>, but not those distributed by FreeBSD. Intel’s <code class="command">icx</code> reported <code class="code">12</code> in 2023.</p> <h5 class="footnote-body-heading"><a id="FOOT72" href="#DOCF72">(72)</a></h5> <p>for example, <code class="code">X11 font at size 14 could not be loaded</code>.</p> <h5 class="footnote-body-heading"><a id="FOOT73" href="#DOCF73">(73)</a></h5> <p>For example, <code class="code">glibc</code>: other C libraries such as <code class="code">musl</code> (as used by Alpine Linux) have been used but are not routinely tested.</p> <h5 class="footnote-body-heading"><a id="FOOT74" href="#DOCF74">(74)</a></h5> <p>This also needs the <abbr class="abbr">OpenMP</abbr> runtime which has sometimes been distributed separately.</p> <h5 class="footnote-body-heading"><a id="FOOT75" href="#DOCF75">(75)</a></h5> <p>2024.1.2 for C/C++, 2024.1.0 for Fortran.</p> <h5 class="footnote-body-heading"><a id="FOOT76" href="#DOCF76">(76)</a></h5> <p>as the ‘Classic’ compiler has been known on Windows.</p> <h5 class="footnote-body-heading"><a id="FOOT77" href="#DOCF77">(77)</a></h5> <p>it will if R has been installed from <abbr class="acronym">CRAN</abbr> since R 4.3.0.</p> <h5 class="footnote-body-heading"><a id="FOOT78" href="#DOCF78">(78)</a></h5> <p>If compiling it from source on ‘<samp class="samp">arm64</samp>’, <code class="code">pcre2</code> (at least up to version 10.39) needs to be built without JIT support (the default) as the R build segfaults if that is enabled, so do run <code class="code">make check</code> on your build.</p> <h5 class="footnote-body-heading"><a id="FOOT79" href="#DOCF79">(79)</a></h5> <p>For licence reasons this is version 5.2 of <code class="code">readline</code>: for those who want a more recent version it is straightforward to compile it from its sources.</p> <h5 class="footnote-body-heading"><a id="FOOT80" href="#DOCF80">(80)</a></h5> <p><code class="command">ls -l `xcrun -show-sdk-path`</code> in a terminal will show you which <abbr class="abbr">SDK</abbr> is selected.</p> <h5 class="footnote-body-heading"><a id="FOOT81" href="#DOCF81">(81)</a></h5> <p>See <a class="uref" href="https://developer.apple.com/documentation/xcode/notarizing_macos_software_before_distribution">https://developer.apple.com/documentation/xcode/notarizing_macos_software_before_distribution</a>.</p> <h5 class="footnote-body-heading"><a id="FOOT82" href="#DOCF82">(82)</a></h5> <p>An essentially equivalent TeX installation can be obtained by the Unix TeX Live installation scripts.</p> <h5 class="footnote-body-heading"><a id="FOOT83" href="#DOCF83">(83)</a></h5> <p>E.g. <em class="emph">via</em> <code class="command">tlmgr install helvetic inconsolata texinfo</code> .</p> <h5 class="footnote-body-heading"><a id="FOOT84" href="#DOCF84">(84)</a></h5> <p>Adding all the packages needed to check <abbr class="acronym">CRAN</abbr> increased this to about 600MB.</p> <h5 class="footnote-body-heading"><a id="FOOT85" href="#DOCF85">(85)</a></h5> <p><a class="uref" href="https://developer.apple.com/documentation/accelerate">https://developer.apple.com/documentation/accelerate</a>.</p> <h5 class="footnote-body-heading"><a id="FOOT86" href="#DOCF86">(86)</a></h5> <p>It has been reported that for some non-Apple toolchains <code class="code">CPPFLAGS</code> needed to contain <code class="code">-D__ACCELERATE__</code>: not needed for <code class="command">clang</code> from LLVM.</p> <h5 class="footnote-body-heading"><a id="FOOT87" href="#DOCF87">(87)</a></h5> <p><a class="url" href="https://cran.r-project.org/bin/macosx/RMacOSX-FAQ.html#Which-BLAS-is-used-and-how-can-it-be-changed_003f">https://cran.r-project.org/bin/macosx/RMacOSX-FAQ.html#Which-BLAS-is-used-and-how-can-it-be-changed_003f</a></p> <h5 class="footnote-body-heading"><a id="FOOT88" href="#DOCF88">(88)</a></h5> <p>Released 2021-04-01.</p> <h5 class="footnote-body-heading"><a id="FOOT89" href="#DOCF89">(89)</a></h5> <p>E.g., <a class="url" href="https://en.wikipedia.org/wiki/Grand_Central_Dispatch">https://en.wikipedia.org/wiki/Grand_Central_Dispatch</a> .</p> <h5 class="footnote-body-heading"><a id="FOOT90" href="#DOCF90">(90)</a></h5> <p>Just that component can be selected from the installer for R: at the ‘Installation Type’ screen select ‘Customise’ and then just the ‘Tcl/Tk 8.6.11’ component.</p> <h5 class="footnote-body-heading"><a id="FOOT91" href="#DOCF91">(91)</a></h5> <p>Configure Tk with <samp class="option">--enable-aqua</samp>.</p> <h5 class="footnote-body-heading"><a id="FOOT92" href="#DOCF92">(92)</a></h5> <p>The planned nextLTS release is 25 in September 2025. Java 8 <em class="emph">aka</em> 1.8.0 is still LTS but some packages require 11 or later.</p> <h5 class="footnote-body-heading"><a id="FOOT93" href="#DOCF93">(93)</a></h5> <p>which website works with Safari but not some other browsers.</p> </div> </body> </html>