HEX
Server: Apache/2.4.46 (Win64) OpenSSL/1.1.1j PHP/8.4.25
System: Windows NT DESKTOP-4TAV2RJ 10.0 build 19045 (Windows 10) AMD64
User: fred (0)
PHP: 8.4.25
Disabled: NONE
Upload Files
File: C:/Program Files/R/R-4.4.0/doc/manual/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.0 (2024-04-24).

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> &nbsp; [<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"> &para;</a></span></h1>

<p>This is a guide to installation and administration for R.
</p>
<p>This manual is for R, version 4.4.0 (2024-04-24).
</p>
<p>Copyright &copy; 2001&ndash;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 &lsquo;<samp class="samp">arm64</samp>&rsquo;</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> &nbsp; [<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"> &para;</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 &ldquo;Comprehensive R Archive Network&rdquo; 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> &nbsp; [<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"> &para;</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> &nbsp; [<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"> &para;</a></span></h3>

<p>A patched version of the current release, &lsquo;<samp class="samp">r-patched</samp>&rsquo;, and the
current development version, &lsquo;<samp class="samp">r-devel</samp>&rsquo;, 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, &lsquo;<samp class="samp">r-patched</samp>&rsquo;
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> &nbsp; [<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"> &para;</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 &lsquo;<samp class="samp">r-devel</samp>&rsquo; from
<a class="uref" href="https://svn.r-project.org/R/trunk/">https://svn.r-project.org/R/trunk/</a> and the current
&lsquo;<samp class="samp">r-patched</samp>&rsquo; from
&lsquo;<samp class="samp">https://svn.r-project.org/R/branches/R-<var class="var">x</var>-<var class="var">y</var>-branch/</samp>&rsquo;
(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 &lsquo;<samp class="samp">r-devel</samp>&rsquo; 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
&lsquo;<samp class="samp">https://svn.r-project.org/R/branches/R-<var class="var">x</var>-<var class="var">y</var>-branch/</samp>&rsquo; in
the four-week period prior to the release.
</p>
<p>Note that &lsquo;<samp class="samp">https:</samp>&rsquo; 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 &lsquo;<samp class="samp"><var class="var">x</var>.<var class="var">y</var>.<var class="var">z</var></samp>&rsquo; you need to download
the contents of &lsquo;<samp class="samp">https://CRAN.R-project.org/src/contrib/<var class="var">dir</var></samp>&rsquo;,
where <var class="var">dir</var> is &lsquo;<samp class="samp"><var class="var">x</var>.<var class="var">y</var>.<var class="var">z</var>/Recommended</samp>&rsquo; 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> &nbsp; [<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"> &para;</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 &lsquo;<samp class="samp"><var class="var">cpu</var>-*-linux-gnu</samp>&rsquo; for the
&lsquo;<samp class="samp">alpha</samp>&rsquo;, &lsquo;<samp class="samp">arm64</samp>&rsquo; (also known as &lsquo;<samp class="samp">aarch64</samp>&rsquo;,
&lsquo;<samp class="samp">ix86</samp>&rsquo;, &lsquo;<samp class="samp">mips</samp>&rsquo;, &lsquo;<samp class="samp">mipsel</samp>&rsquo;#, &lsquo;<samp class="samp">ppc64</samp>&rsquo;,
&lsquo;<samp class="samp">riscv64</samp>&rsquo;, &lsquo;<samp class="samp">s390x</samp>&rsquo;, &lsquo;<samp class="samp">sparc64</samp>&rsquo;, and
&lsquo;<samp class="samp">x86_64</samp>&rsquo; <abbr class="acronym">CPU</abbr>s,
&lsquo;<samp class="samp">x86_64-apple-darwin</samp>&rsquo; and
&lsquo;<samp class="samp">aarch64-apple-darwin</samp>&rsquo;<a class="footnote" id="DOCF3" href="#FOOT3"><sup>3</sup></a>  as well as perhaps (it is
tested less frequently on these platforms) &lsquo;<samp class="samp">x86_64-*-freebsd</samp>&rsquo;,
&lsquo;<samp class="samp">x86_64-*-openbsd</samp>&rsquo; and &lsquo;<samp class="samp">powerpc-ibm-aix6*</samp>&rsquo;
</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> &nbsp; [<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"> &para;</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 &lsquo;<samp class="samp">make</samp>&rsquo;.)  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&rsquo; <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
&lsquo;<samp class="samp">check</samp>&rsquo; 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&rsquo;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> &nbsp; [<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"> &para;</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> &nbsp; [<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"> &para;</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>&lsquo;<samp class="samp">fullrefman</samp>&rsquo;</dt>
<dd><p>Printed versions of all the help pages for base and recommended packages
(around 3750 pages).
</p></dd>
<dt>&lsquo;<samp class="samp">refman</samp>&rsquo;</dt>
<dd><p>Printed versions of the help pages for selected base packages (around
2200 pages)
</p></dd>
<dt>&lsquo;<samp class="samp">R-FAQ</samp>&rsquo;</dt>
<dd><p>R <abbr class="acronym">FAQ</abbr>
</p></dd>
<dt>&lsquo;<samp class="samp">R-intro</samp>&rsquo;</dt>
<dd><p>&ldquo;An Introduction to R&rdquo;.
</p></dd>
<dt>&lsquo;<samp class="samp">R-data</samp>&rsquo;</dt>
<dd><p>&ldquo;R Data Import/Export&rdquo;.
</p></dd>
<dt>&lsquo;<samp class="samp">R-admin</samp>&rsquo;</dt>
<dd><p>&ldquo;R Installation and Administration&rdquo;, this manual.
</p></dd>
<dt>&lsquo;<samp class="samp">R-exts</samp>&rsquo;</dt>
<dd><p>&ldquo;Writing R Extensions&rdquo;.
</p></dd>
<dt>&lsquo;<samp class="samp">R-lang</samp>&rsquo;</dt>
<dd><p>&ldquo;The R Language Definition&rdquo;.
</p></dd>
</dl>

<p>To make these (with &lsquo;<samp class="samp">fullrefman</samp>&rsquo; rather than &lsquo;<samp class="samp">refman</samp>&rsquo;), 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 &lsquo;<samp class="samp">refman</samp>&rsquo; nor &lsquo;<samp class="samp">fullrefman</samp>&rsquo;).</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
&lsquo;<samp class="samp">TEXI2ANY</samp>&rsquo; 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 &lsquo;<samp class="samp">letter</samp>&rsquo;.)
</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
&lsquo;<samp class="samp">times,inconsolata,hyper</samp>&rsquo;: omit &lsquo;<samp class="samp">inconsolata</samp>&rsquo; if you do not have
LaTeX package <strong class="strong">inconsolata</strong> installed.
&lsquo;<samp class="samp">hyper</samp>&rsquo; 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> &nbsp; [<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"> &para;</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 &lsquo;<samp class="samp">022</samp>&rsquo;) 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, &hellip;).  Here
<var class="var">LIBnn</var> is usually &lsquo;<samp class="samp">lib</samp>&rsquo;, but may be &lsquo;<samp class="samp">lib64</samp>&rsquo; 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 &lsquo;Fine
tuning of the installation directories&rsquo; 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 &lsquo;<samp class="samp"><var class="var">eprefix</var>/<var class="var">LIBnn</var></samp>&rsquo;,
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.0</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.0
</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&rsquo;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> &nbsp; [<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"> &para;</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> &nbsp; [<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"> &para;</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. &lsquo;<samp class="samp">x86_64</samp>&rsquo; and &lsquo;<samp class="samp">aarch64</samp>&rsquo;).
</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 &lsquo;<samp class="samp">r_arch=<var class="var">name</var></samp>&rsquo; 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
&lsquo;<samp class="samp">x86_64</samp>&rsquo; 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 &lsquo;<samp class="samp">r_arch</samp>&rsquo;).  The space savings can be considerable: on
&lsquo;<samp class="samp">x86_64</samp>&rsquo; 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 &lsquo;<samp class="samp">R</samp>&rsquo; 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 &lsquo;<samp class="samp">x86_64</samp>&rsquo; Linux and &lsquo;<samp class="samp">i686</samp>&rsquo; 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 &lsquo;<samp class="samp">x64</samp>&rsquo;
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> &nbsp; [<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"> &para;</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&rsquo;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>
were introduced in R 4.1.0.  These 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 was new in R 4.1.0 and became the
default on macOS (and on Windows since R 4.2.0).  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
&lsquo;symbols&rsquo; 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 &lsquo;<samp class="samp">\U{xxxxxx}</samp>&rsquo; escape&mdash;for example, try
&lsquo;<samp class="samp">&quot;\U1f600&quot;</samp>&rsquo;, 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> &nbsp; [<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"> &para;</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 &lsquo;<samp class="samp">CFLAGS</samp>&rsquo; 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 &lsquo;stripped&rsquo; 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 &lsquo;<samp class="samp">x86_64</samp>&rsquo; 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> &nbsp; [<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"> &para;</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&rsquo;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> &nbsp; [<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"> &para;</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>&lsquo;Standards&rsquo; for <code class="command">g++</code> starting with &lsquo;<samp class="samp">gnu</samp>&rsquo; enable &lsquo;GNU
extensions&rsquo;: what those are is hard to track down.
</p>
<p>For the use of C++ in R packages see the &lsquo;Writing R
Extensions&rsquo; 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> &nbsp; [<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"> &para;</a></span></h4>

<p>Compiling R requires C99 or later: C11 and C17 are minor updates, but
the substantial update planned for &lsquo;C23&rsquo; (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> &nbsp; [<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"> &para;</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>&nbsp;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&nbsp;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 &lsquo;<samp class="samp">LTO_FC</samp>&rsquo; (probably to empty).  Macro
&lsquo;<samp class="samp">LTO_LD</samp>&rsquo; 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> &nbsp; [<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"> &para;</a></span></h4>

<p>This has been tested on Linux with
<code class="command">gcc</code>/<code class="command">gfortran</code>&nbsp;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=&quot;ar --plugin=/path/to/liblto_plugin.so&quot;
RANLIB=&quot;ranlib --plugin=/path/to/liblto_plugin.so&quot;
</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 &lsquo;<samp class="samp">gcc-nm</samp>&rsquo;.)
</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 &lsquo;<samp class="samp">LTO</samp>&rsquo; to something like
&lsquo;<samp class="samp">LTO=-flto=8</samp>&rsquo; (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 and later: 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 was not
seen on <abbr class="acronym">CRAN</abbr> with GCC 10 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 10.1 to 10.2) but this may not be clear from
confused compiler messages.
</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> &nbsp; [<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"> &para;</a></span></h4>

<p>LLVM supports another type of <abbr class="abbr">LTO</abbr> called &lsquo;Thin <abbr class="abbr">LTO</abbr>&rsquo; as well as a similar
implementation to GCC, sometimes called &lsquo;Full <abbr class="abbr">LTO</abbr>&rsquo;.  (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 &lsquo;<samp class="samp">LTO=-flto=thin</samp>&rsquo;.  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 &lsquo;<samp class="samp">LTO_LD</samp>&rsquo;: 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&rsquo;s C/C++ compilers are based on LLVM and as
such support LLVM-style <abbr class="abbr">LTO</abbr>, both &lsquo;full&rsquo; and &lsquo;thin&rsquo;.  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> &nbsp; [<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"> &para;</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> &nbsp; [<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"> &para;</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(&quot;tests.pdf&quot;) ## optional, but prevents flashing graphics windows
Sys.setenv(LC_COLLATE = &quot;C&quot;, LC_TIME = &quot;C&quot;, LANGUAGE = &quot;en&quot;)
tools::testInstalledBasic(&quot;both&quot;)
tools::testInstalledPackages(scope = &quot;base&quot;)
tools::testInstalledPackages(scope = &quot;recommended&quot;)
</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&mdash;that can be tested
by
</p><div class="example">
<pre class="example-preformatted">tools::testInstalledBasic(&quot;internet&quot;)
</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> &nbsp; [<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"> &para;</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 &lsquo;<samp class="samp">x86_64</samp>&rsquo; 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.0-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> &nbsp; [<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"> &para;</a></span></h3>

<p>It is possible to use other 64-bit toolchains (including &lsquo;MSYS2&rsquo;) with <abbr class="abbr">UCRT</abbr>
support to build R, but this manual only documents that used for binary
distributions of R 4.2.x and later.  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> &nbsp; [<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"> &para;</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 &lsquo;MinGW-w64&rsquo; 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/">&rsquo;MXE&rsquo;</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 &rsquo;MSYS2&rsquo;
project</a>.  Additional build tools packaged by &rsquo;MSYS2&rsquo; may be installed
via a package manager (&lsquo;<samp class="samp">pacman</samp>&rsquo;).
</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> &nbsp; [<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"> &para;</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 &lsquo;<samp class="samp">MiKTeX</samp>&rsquo; (<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 &lsquo;on the fly&rsquo; (without asking), which is the simplest way
to use it.  The &lsquo;basic&rsquo; version of &lsquo;<samp class="samp">MiKTeX</samp>&rsquo; 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&mdash;you can check with the
&lsquo;<samp class="samp">MiKTeX</samp>&rsquo; 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> &nbsp; [<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"> &para;</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> &nbsp; [<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"> &para;</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 = &quot;C&quot;, LC_TIME=&quot;C&quot;, LANGUAGE = &quot;en&quot;)
tools::testInstalledBasic(&quot;both&quot;)
tools::testInstalledPackages(scope = &quot;base&quot;)
tools::testInstalledPackages(scope = &quot;recommended&quot;)
</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&rsquo; 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> &nbsp; [<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"> &para;</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 &lsquo;Download R for (Mac)
OS X&rsquo; which takes you to a new page. Two files are offered for download,
<samp class="file">R-4.4.0-arm64.pkg</samp> and <samp class="file">R-4.4.0.pkg</samp>.
Both are for macOS 11 or later (Big Sur, Monterey, Ventura,
Sonoma, &hellip;).
</p>
<p>The first is for &lsquo;Apple Silicon&rsquo; (<em class="emph">aka</em> &lsquo;M1&rsquo;, &lsquo;M2&rsquo; or &rsquo;M3&rsquo;) Macs, the
second for older Macs with an &lsquo;<samp class="samp">x86_64</samp>&rsquo; (Intel) CPU.
</p>
<p>Package <samp class="file">R-4.4.0.pkg</samp> also be installed on &lsquo;Apple
Silicon&rsquo; CPUs using &lsquo;Rosetta&rsquo; emulation<a class="footnote" id="DOCF19" href="#FOOT19"><sup>19</sup></a>, but the native build is preferred.  It is a
little faster (and for some tasks, considerably so) but may give
different numerical results from the more common &lsquo;<samp class="samp">x86_64</samp>&rsquo;
platforms (on Windows, Linux, &hellip; as well as macOS) as ARM hardware
lacks extended-precision floating-point operations.
</p>
<p>It is important that if you use a binary installer package that your OS
is fully updated: look at &lsquo;Software Update&rsquo; in &rsquo;System Preferences&rsquo;
to be sure.
</p>
<p>To install, just double-click on the icon of the file you downloaded.
At the &lsquo;Installation Type&rsquo; stage, note the option to &lsquo;Customize&rsquo;.  This
currently shows four components: everyone will need the &lsquo;R Framework&rsquo;
component: the remaining components are optional. (The &lsquo;Tcl/Tk&rsquo;
component is needed to use package <strong class="strong">tcltk</strong>. The &lsquo;Texinfo&rsquo; 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
&ldquo;Window&rdquo; menu and item &ldquo;Installer Log&rdquo;. The full output (select
&ldquo;Show All Log&rdquo;) 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 &hellip;).
</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="DOCF20" href="#FOOT20"><sup>20</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 = &quot;cairo&quot;)</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 &lsquo;<samp class="samp">Open With</samp>&rsquo; and &lsquo;<samp class="samp">Installer</samp>&rsquo;.)
</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> &nbsp; [<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"> &para;</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>&rsquo;s &lsquo;Help&rsquo; menu.
</p>

<p>You can run command-line R and <code class="command">Rscript</code> from a
Terminal<a class="footnote" id="DOCF21" href="#FOOT21"><sup>21</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/x86_64/4.2/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
as from Catalina) 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>If you have installed both installer packages on an <code class="code">arm64</code> Mac,
the last installed will be used.
</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 &lsquo;App Nap&rsquo; 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 = &quot;cairo&quot;)</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> &nbsp; [<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"> &para;</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 aka Trash). 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 Intel build, <code class="code">org.R-project.x86_64.R.fw.pkg</code>,
<code class="code">org.R-project.x86_64.R.GUI.pkg</code>, <code class="code">org.r-project.x86_64.tcltk</code>
and <code class="code">org.r-project.x86_64.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/x86_64</samp> on a &lsquo;<samp class="samp">x86_64</samp>&rsquo; build and <samp class="file">/opt/R/arm64</samp>
for an &lsquo;<samp class="samp">arm64</samp>&rsquo; 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.x86_64.tcltk
pkgutil --files org.r-project.x86_64.texinfo
</pre></div>

<p>(For the &lsquo;Apple Silicon&rsquo; build, replace <code class="code">x86_64</code> by <code class="code">arm64</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/x86_64</samp> or <samp class="file">/opt/R/arm64</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> &nbsp; [<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"> &para;</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</samp> (or
<samp class="file">4.4-arm64</samp>), <samp class="file">4.3</samp> and so on, so it is not possible to have
different &lsquo;<samp class="samp">4.x.y</samp>&rsquo; versions installed for the same &lsquo;<samp class="samp">x</samp>&rsquo; and CPU
type.
</p>
<p><small class="sc">R.APP</small> will always run the &lsquo;current&rsquo; version, 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> &nbsp; [<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"> &para;</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 &ndash; 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 &lsquo;<samp class="samp">LC_PAPER</samp>&rsquo;
locale category if it exists and <code class="env">R_PAPERSIZE</code> is unset, and this
will normally produce the right choice from &lsquo;<samp class="samp">a4</samp>&rsquo; and &lsquo;<samp class="samp">letter</samp>&rsquo;
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
&lsquo;<samp class="samp">noexec</samp>&rsquo;, <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> &nbsp; [<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"> &para;</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 &lsquo;library tree&rsquo;.
</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> &nbsp; [<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"> &para;</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">&gt; getOption(&quot;defaultPackages&quot;)
[1] &quot;datasets&quot;  &quot;utils&quot;     &quot;grDevices&quot; &quot;graphics&quot;  &quot;stats&quot;     &quot;methods&quot;
</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> &nbsp; [<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"> &para;</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 &lsquo;<samp class="samp">.Library</samp>&rsquo; 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 &lsquo;<samp class="samp">.libPaths()</samp>&rsquo; 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> &lsquo;<samp class="samp">.Library.site</samp>&rsquo; 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 &lsquo;<samp class="samp">Sys.getenv(&quot;R_LIBS_USER&quot;)</samp>&rsquo; 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> &nbsp; [<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"> &para;</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
&lsquo;<samp class="samp">install.packages(<var class="var">pkgname</var>)</samp>&rsquo; 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 &lsquo;<samp class="samp">install.packages()</samp>&rsquo;
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 &lsquo;<samp class="samp">-l /path/to/library</samp>&rsquo; 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">&gt; install.packages(c(&quot;pkg1&quot;, &quot;pkg2&quot;))
</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">&gt; install.packages(&quot;Rcmdr&quot;, 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, &hellip;).  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(&quot;repos&quot;)
</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 &lt;- available.packages(filters=list())
av[av[, &quot;Package&quot;] == <var class="var">pkg</var>, ]
</pre></div>

<p>in your R session, and look at the &lsquo;<samp class="samp">Depends</samp>&rsquo; and &lsquo;<samp class="samp">OS_type</samp>&rsquo;
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 &lsquo;Old sources&rsquo; on the package&rsquo;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> &nbsp; [<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"> &para;</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 &lsquo;<samp class="samp">x86_64</samp>&rsquo; 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">&quot;install.packages.compile.from.source&quot;</code>).
</p>
<p>[At present binary packages are not distributed for &lsquo;<samp class="samp">aarch64</samp>&rsquo;
Windows, so most of this subsection only applies to &lsquo;<samp class="samp">x86_64</samp>&rsquo;.]
</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=&quot;source&quot;)</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 &lsquo;<samp class="samp">tar.exe</samp>&rsquo;.
<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> &nbsp; [<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"> &para;</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 &lsquo;<samp class="samp">.tgz</samp>&rsquo;.  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 &lsquo;Command
Line Tools&rsquo; 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>.
</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.
% (but not 4.0.0 and not &lsquo;<samp class="samp">arm64</samp>&rsquo; builds of 4.1.0 or 4.1.1).
</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 &lsquo;<samp class="samp">CC</samp>&rsquo;, &lsquo;<samp class="samp">CXX</samp>&rsquo;, &lsquo;<samp class="samp">FC</samp>&rsquo;, &lsquo;<samp class="samp">FLIBS</samp>&rsquo; and
the corresponding flags, and perhaps &lsquo;<samp class="samp">CXXCPP</samp>&rsquo;, &lsquo;<samp class="samp">DYLIB_LD</samp>&rsquo;,
&lsquo;<samp class="samp">MAIN_LD</samp>&rsquo;, &lsquo;<samp class="samp">SHLIB_CXXLD</samp>&rsquo; and &lsquo;<samp class="samp">SHLIB_LD</samp>&rsquo;, as well as their
&lsquo;<samp class="samp">CXX11</samp>&rsquo;, &lsquo;<samp class="samp">CXX14</samp>&rsquo;, &lsquo;<samp class="samp">CXX17</samp>&rsquo; and &lsquo;<samp class="samp">CXX20</samp>&rsquo; 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">CC = /usr/local/clang/bin/clang -isysroot
  /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
CXX = /usr/local/clang/bin/clang++ -isysroot
  /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
CXX11 = $CXX
CXX14 = $CXX
CXX17 = $CXX
CXX20 = $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
</pre></div>
<p>(long lines split for the manual only) 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&rsquo;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">https://opensource.apple.com</a> &ndash; 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 &lsquo;system&rsquo; 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>&rsquo;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>
<p>For &lsquo;<samp class="samp">arm64</samp>&rsquo;, not all configure scripts have been updated to
recognize the platform and so might need the flag
<samp class="option">--build=aarch64-apple-darwin20.1.0</samp>.  Also, be aware that
running the compilers from a &lsquo;<samp class="samp">x86_64</samp>&rsquo; application switches them
to generating code for that CPU: this applies to a Terminal, a shell,
older <code class="command">cmake</code> or (non-system) <code class="command">make</code>, and from
<code class="command">R CMD INSTALL</code> or <code class="code">install.packages()</code>.  One can use
</p>
<div class="example">
<pre class="example-preformatted">./configure CC=&quot;clang -arch arm64&quot; CFLAGS=-O2 CXX=&quot;clang++ -arch arm64&quot; CXXFLAGS=-O2
</pre></div>

<p>to force &lsquo;<samp class="samp">arm64</samp>&rsquo; code.
</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> &nbsp; [<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"> &para;</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 &lsquo;<samp class="samp">R_PLATFORM</samp>&rsquo; 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 (&ldquo;warnings&rdquo;) when compiling,
such as e.g. <samp class="option">-Wall -pedantic</samp> for tools from GCC, the GNU
Compiler Collection, or for <code class="command">clang</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> &nbsp; [<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"> &para;</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 &lsquo;<samp class="samp">Biarch</samp>&rsquo; 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> &nbsp; [<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"> &para;</a></span></h4>

<p>Packages are by default byte-compiled on installation.
Byte-compilation can be controlled on a per-package basis by the
&lsquo;<samp class="samp">ByteCompile</samp>&rsquo; 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> &nbsp; [<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"> &para;</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> &mdash; 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 (&lsquo;El
Capitan&rsquo;) 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=&quot;`R RHOME`/lib:/opt/local/lib&quot;
</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> &nbsp; [<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"> &para;</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">&quot;ok&quot;</code>, <code class="code">&quot;upgrade&quot;</code> or <code class="code">&quot;unavailable&quot;</code> (in the currently
selected repositories).  For example
</p>
<div class="example">
<pre class="example-preformatted">&gt; inst &lt;- packageStatus()$inst
&gt; inst[inst$Status != &quot;ok&quot;, c(&quot;Package&quot;, &quot;Version&quot;, &quot;Status&quot;)]
                  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> &nbsp; [<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"> &para;</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">&gt; remove.packages(c(&quot;pkg1&quot;, &quot;pkg2&quot;),
                  lib = file.path(&quot;path&quot;, &quot;to&quot;, &quot;library&quot;))
</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> &nbsp; [<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"> &para;</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 &lsquo;base&rsquo; 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
&lsquo;<samp class="samp">https://</samp>&rsquo;, &lsquo;<samp class="samp">ftp://</samp>&rsquo; and &lsquo;<samp class="samp">file://</samp>&rsquo;).  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">&quot;source&quot;</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">&quot;win.binary&quot;</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">&quot;mac.binary&quot;</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>&mdash;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> &nbsp; [<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"> &para;</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> &gt; <var class="var">pkg</var>.log 2&gt;&amp;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 &gt; <var class="var">pkg</var>.log 2&gt;&amp;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> &nbsp; [<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"> &para;</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> &nbsp; [<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"> &para;</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 &lsquo;territory&rsquo;, 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> &nbsp; [<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"> &para;</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
&lsquo;<samp class="samp">en_GB</samp>&rsquo;, &lsquo;<samp class="samp">en_GB.UTF-8</samp>&rsquo;, &lsquo;<samp class="samp">aa_ER.UTF-8@saaho</samp>&rsquo;,
&lsquo;<samp class="samp">de_AT.iso885915@euro</samp>&rsquo;, 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 &lsquo;<samp class="samp">.utf8</samp>&rsquo; rather than &lsquo;<samp class="samp">.UTF-8</samp>&rsquo;.
</p>
<p>Note that whereas UTF-8 locales are nowadays almost universally used,
locales such as &lsquo;<samp class="samp">en_GB</samp>&rsquo; 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> &nbsp; [<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"> &para;</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 &lsquo;<samp class="samp">Windows
language country strings</samp>&rsquo;).
</p>
<p>It offers only one encoding per language.
</p>
<p>Some care is needed with Windows&rsquo; 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> &nbsp; [<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"> &para;</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 &lsquo;<samp class="samp">en_GB.UTF-8</samp>&rsquo;
if it defaults to &lsquo;<samp class="samp">C</samp>&rsquo; (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> &nbsp; [<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"> &para;</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
&lsquo;<samp class="samp">LC_ALL=es</samp>&rsquo; 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(&quot;LC_MESSAGES&quot;,
&quot;new_locale&quot;)</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 (&lsquo;<samp class="samp">de_AT</samp>&rsquo;) translation catalogue will be used in preference
to a generic German one (&lsquo;<samp class="samp">de</samp>&rsquo;) 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 &lsquo;<samp class="samp">en_GB</samp>&rsquo; that translate the Americanisms
(e.g., &lsquo;<samp class="samp">gray</samp>&rsquo;) in the standard messages into English.<a class="footnote" id="DOCF36" href="#FOOT36"><sup>36</sup></a>  Two other examples: there are catalogues
for &lsquo;<samp class="samp">es</samp>&rsquo;, which is Spanish as written in Spain and these will by
default also be used in Spanish-speaking Latin American countries, and
also for &lsquo;<samp class="samp">pt_BR</samp>&rsquo;, 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 &lsquo;<samp class="samp">se:de</samp>&rsquo;, giving a set of
languages in decreasing order of preference.  One special value is
&lsquo;<samp class="samp">en@quot</samp>&rsquo;, 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, &lsquo;English&rsquo;<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> &nbsp; [<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"> &para;</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> &nbsp; [<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"> &para;</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 &lsquo;<samp class="samp">R_VERSION_STRING</samp>&rsquo;, which is a character
string containing the current R version, for example <code class="code">&quot;4.4.0&quot;</code>.
</p>
<p>There is full access to R&rsquo;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&rsquo;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 &lsquo;<samp class="samp">USER_NORM</samp>&rsquo; 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> &nbsp; [<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"> &para;</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): &lsquo;<samp class="samp">make static</samp>&rsquo; and &lsquo;<samp class="samp">make
shared</samp>&rsquo; 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 &lt;Rmath.h&gt;
</pre></div>

<p>and link against &lsquo;<samp class="samp">-lRmath</samp>&rsquo; (and &lsquo;<samp class="samp">-lm</samp>&rsquo; 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>&lsquo;<samp class="samp">make install</samp>&rsquo; 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 &lsquo;<samp class="samp">make install-strip</samp>&rsquo; 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> &nbsp; [<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"> &para;</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&rsquo;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 &lt;Rmath.h&gt;
</pre></div>

<p>and link against &lsquo;<samp class="samp">-lRmath</samp>&rsquo;.  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 &lsquo;<samp class="samp">test</samp>&rsquo; 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 &lt;Rmath.h&gt;
</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> &nbsp; [<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"> &para;</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&rsquo;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 &lsquo;<samp class="samp">-devel</samp>&rsquo; or &lsquo;<samp class="samp">-dev</samp>&rsquo;: 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> &nbsp; [<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"> &para;</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>&nbsp;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
&lsquo;<samp class="samp">X11</samp>&rsquo; installed, including its headers and client libraries. For
recent Fedora/RedHat distributions it means (at least) <abbr class="abbr">RPM</abbr>s
&lsquo;<samp class="samp">libX11</samp>&rsquo;, &lsquo;<samp class="samp">libX11-devel</samp>&rsquo;, &lsquo;<samp class="samp">libXt</samp>&rsquo; and &lsquo;<samp class="samp">libXt-devel</samp>&rsquo;.
On Debian/Ubuntu we recommend the meta-package &lsquo;<samp class="samp">xorg-dev</samp>&rsquo;.  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">&quot;latin1&quot;</code> and <code class="code">&quot;UTF-8&quot;</code>, to recognize <code class="code">&quot;&quot;</code> (as the
current encoding) and <code class="code">&quot;ASCII&quot;</code>, and to translate to and from the
Unicode wide-character formats <code class="code">&quot;UCS-[24][BL]E&quot;</code> &mdash; 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 &gt;=
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 &lsquo;<samp class="samp">arm64</samp>&rsquo; macOS.
</p>
<p>Some packages require the &lsquo;Unicode properties&rsquo; 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> &ndash; 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&amp;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&rsquo;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 &lsquo;useful&rsquo;
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&rsquo;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> &nbsp; [<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"> &para;</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 &lsquo;modern&rsquo; 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
&lsquo;<samp class="samp">pangocairo</samp>&rsquo; package is installed (and if not, &lsquo;<samp class="samp">cairo</samp>&rsquo;) 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 =
&quot;cairo&quot;)</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 &lsquo;liberation&rsquo; 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 &lsquo;Free UCS Outline Fonts&rsquo; 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 &lsquo;<samp class="samp">xorg-dev</samp>&rsquo;), but some distributions have split
this into smaller parts, so for example recent versions of Fedora
require the &lsquo;<samp class="samp">libXmu</samp>&rsquo; and &lsquo;<samp class="samp">libXmu-devel</samp>&rsquo; <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&rsquo;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> &nbsp; [<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"> &para;</a></span></h4>

<p>The <strong class="strong">tcltk</strong> package needs Tcl/Tk &ge; 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> &nbsp; [<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"> &para;</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>: these require 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
&lsquo;<samp class="samp">x86_64</samp>&rsquo; 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 &lsquo;auto&rsquo; setting of <code class="command">/etc/alternatives</code> chose
Java 8 aka 1.8.0).
</p>
<p>&lsquo;Non-server&rsquo; 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 34 had
</p><div class="example">
<pre class="example-preformatted">java-1.8.0-openjdk
java-1.8.0-openjdk-devel
java-openjdk
java-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
&lsquo;<samp class="samp">-jre</samp>&rsquo; and &lsquo;<samp class="samp">-jdk</samp>&rsquo;, 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> &nbsp; [<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"> &para;</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> &nbsp; [<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"> &para;</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>&nbsp;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&mdash;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&rsquo;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 &lsquo;enhanced&rsquo; 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> &nbsp; [<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"> &para;</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 &lsquo;<samp class="samp">-l</samp>&rsquo;, so
</p>
<div class="example">
<pre class="example-preformatted">--with-blas=&quot;foo&quot;
</pre></div>

<p>is an instruction to link against &lsquo;<samp class="samp">-lfoo</samp>&rsquo; 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 &lsquo;FlexiBLAS&rsquo;, 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>.  &lsquo;Backend&rsquo; 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> &nbsp; [<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"> &para;</a></span></h4>

<p>ATLAS (<a class="uref" href="https://math-atlas.sourceforge.net/">https://math-atlas.sourceforge.net/</a>) is a &ldquo;tuned&rdquo;
<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 &lsquo;<samp class="samp">ix86</samp>&rsquo; platforms,
but not always on &lsquo;<samp class="samp">x86_64</samp>&rsquo; 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 &lsquo;<samp class="samp">x86_64</samp>&rsquo; Fedora where a path needs to be specified,
</p><div class="example">
<pre class="example-preformatted">--with-blas=&quot;-L/usr/lib64/atlas -lsatlas&quot;
--with-blas=&quot;-L/usr/lib64/atlas -ltatlas&quot;
</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> &lsquo;<samp class="samp">x86_64</samp>&rsquo; <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 &lsquo;<samp class="samp">-devel</samp>&rsquo; or &lsquo;<samp class="samp">-dev</samp>&rsquo; packages installed.
</p>
<p>Linking against multiple static libraries requires one of
</p><div class="example">
<pre class="example-preformatted">--with-blas=&quot;-lf77blas -latlas&quot;
--with-blas=&quot;-lptf77blas -lpthread -latlas&quot;
--with-blas=&quot;-L/path/to/ATLAS/libs -lf77blas -latlas&quot;
--with-blas=&quot;-L/path/to/ATLAS/libs -lptf77blas -lpthread -latlas&quot;
</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> &nbsp; [<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"> &para;</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=&quot;openblas&quot;
</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
&lsquo;<samp class="samp">-devel</samp>&rsquo; or &lsquo;<samp class="samp">-dev</samp>&rsquo; packages installed.
</p>
<p>For &lsquo;<samp class="samp">ix86</samp>&rsquo; and &lsquo;<samp class="samp">x86_64</samp>&rsquo; 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 &lsquo;threads&rsquo;, <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> &nbsp; [<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"> &para;</a></span></h4>
<p>For Intel processors (and perhaps others) and some distributions of
Linux, there is Intel&rsquo;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 &lsquo;link line advisor&rsquo;
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 &lsquo;<samp class="samp">x86_64</samp>&rsquo; 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=&quot;-L${MKL_LIB_PATH} -lmkl_gf_lp64 -lmkl_core -lmkl_sequential&quot;
./configure --with-blas=&quot;$MKL&quot; --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=&quot;-L${MKL_LIB_PATH} -lmkl_gf_lp64 -lmkl_core \
     -lmkl_gnu_thread -dl -fopenmp&quot;
</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> &nbsp; [<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"> &para;</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&rsquo;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 &lsquo;<samp class="samp">x86_64</samp>&rsquo; 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 &lsquo;<samp class="samp">x86_64</samp>&rsquo; 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
&lsquo;<samp class="samp">-devel</samp>&rsquo; <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> &nbsp; [<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"> &para;</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
&lsquo;<samp class="samp">ix86</samp>&rsquo;/&lsquo;<samp class="samp">x86_64</samp>&rsquo; 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 &lsquo;<samp class="samp">-llapack</samp>&rsquo;.  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 &lsquo;enhanced&rsquo; 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 &lsquo;alternatives&rsquo; 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> &nbsp; [<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"> &para;</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 &lsquo;hidden&rsquo; character
lengths &mdash; 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>&nbsp;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> &nbsp; [<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"> &para;</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> &nbsp; [<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"> &para;</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 &lsquo;<samp class="samp">-pg)</samp>&rsquo;.  Support for R
profiling requires OS support for POSIX threads (<em class="emph">aka</em>
&lsquo;<samp class="samp">pthreads</samp>&rsquo;), 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> &nbsp; [<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"> &para;</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
&lsquo;Additional capabilities&rsquo; 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> &nbsp; [<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"> &para;</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> &nbsp; [<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"> &para;</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
&lsquo;<samp class="samp">a4</samp>&rsquo;, not &lsquo;<samp class="samp">letter</samp>&rsquo;.  (Valid values are &lsquo;<samp class="samp">a4</samp>&rsquo;,
&lsquo;<samp class="samp">letter</samp>&rsquo;, &lsquo;<samp class="samp">legal</samp>&rsquo; and &lsquo;<samp class="samp">executive</samp>&rsquo;.)
</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 &lsquo;<samp class="samp">a4</samp>&rsquo; 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> &nbsp; [<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"> &para;</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&rsquo;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> &nbsp; [<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"> &para;</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 &lsquo;<samp class="samp">-L</samp>&rsquo; flags to be passed to the linker) and
<code class="code">CPPFLAGS</code> (for header files, using &lsquo;<samp class="samp">-I</samp>&rsquo; flags to be passed to
the C/C++ preprocessors), respectively, to specify these locations.
These default to &lsquo;<samp class="samp">-L/usr/local/lib</samp>&rsquo; (<code class="code">LDFLAGS</code>,
&lsquo;<samp class="samp">-L/usr/local/lib64</samp>&rsquo; on most 64-bit Linux OSes) and
&lsquo;<samp class="samp">-I/usr/local/include</samp>&rsquo; (<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 &lsquo;<samp class="samp">-O3</samp>&rsquo; 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 &lsquo;<samp class="samp">-Wl,-O1</samp>&rsquo; in <code class="code">LDFLAGS</code> is worthwhile, and
&lsquo;<samp class="samp">'-Bdirect,--hash-style=both,-Wl,-O1'</samp>&rsquo; 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. &lsquo;<samp class="samp">-mtune=native</samp>&rsquo; for
<code class="command">gcc</code>) can give worthwhile performance gains, especially on
older architectures such as &lsquo;<samp class="samp">ix86</samp>&rsquo;.
</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> &nbsp; [<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"> &para;</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> &nbsp; [<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"> &para;</a></span></h3>

<p>By default the shell scripts such as <samp class="file">R</samp> will be &lsquo;<samp class="samp">#!/bin/sh</samp>&rsquo;
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> &nbsp; [<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"> &para;</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 &lsquo;<samp class="samp">gmake</samp>&rsquo;, 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> &nbsp; [<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"> &para;</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&rsquo;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>&nbsp;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>&nbsp;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> &nbsp; [<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"> &para;</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&rsquo;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 &lsquo;<samp class="samp">-fpic</samp>&rsquo; and &lsquo;<samp class="samp">-fPIC</samp>&rsquo;, 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
&lsquo;<samp class="samp">MAIN_LDFLAGS</samp>&rsquo;, &lsquo;<samp class="samp">SAFE_FFLAGS</samp>&rsquo;, &lsquo;<samp class="samp">SHLIB_LDFLAGS</samp>&rsquo; and
&lsquo;<samp class="samp">SHLIB_CXXLDFLAGS</samp>&rsquo;: 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 &lsquo;<samp class="samp">MAIN_CFLAGS=-pg</samp>&rsquo;, &lsquo;<samp class="samp">MAIN_FFLAGS=-pg</samp>&rsquo;,
&lsquo;<samp class="samp">MAIN_LDFLAGS=-pg</samp>&rsquo; on platforms where &lsquo;<samp class="samp">-pg</samp>&rsquo; 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>&nbsp;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> &nbsp; [<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"> &para;</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> &nbsp; [<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"> &para;</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 &lt; 2.10.0, and support has since been removed
for all of these) and <abbr class="abbr">AIX</abbr> (for R &lt; = 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&rsquo;s 13.x.y is very different from LLVM&rsquo;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> &nbsp; [<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"> &para;</a></span></h3>

<p>The &lsquo;<samp class="samp">X11()</samp>&rsquo; 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 &lsquo;modern&rsquo; version of the &lsquo;<samp class="samp">X11()</samp>&rsquo; device is based on &lsquo;<samp class="samp">cairo</samp>&rsquo;
graphics and (in most implementations) uses &lsquo;<samp class="samp">fontconfig</samp>&rsquo; 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
&lsquo;<samp class="samp">X11()</samp>&rsquo; 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&rsquo;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 &lsquo;<samp class="samp">-100dpi</samp>&rsquo; versions are installed
and on the X11 font path (check via <code class="command">xset -q</code>).  The
&lsquo;<samp class="samp">X11()</samp>&rsquo; 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">&quot;X11fonts&quot;</code> which defaults to
</p>
<div class="example">
<pre class="example-preformatted">&quot;-adobe-helvetica-%s-%s-*-*-%d-*-*-*-*-*-*-*&quot;
</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 &lsquo;<samp class="samp">xorg-x11-fonts-ISO8859-2-75dpi</samp>&rsquo; and
&lsquo;<samp class="samp">xorg-x11-fonts-cyrillic</samp>&rsquo; shown in the listing above.
</p>
<p>Multi-byte encodings (most commonly UTF-8) are even more complicated.
There are few fonts in &lsquo;<samp class="samp">iso10646-1</samp>&rsquo;, 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 &lsquo;<samp class="samp">XLC_LOCALE</samp>&rsquo; 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 &lsquo;<samp class="samp">ja_JP.UTF-8</samp>&rsquo; but not when running in
&lsquo;<samp class="samp">en_GB.UTF-8</samp>&rsquo; on the same machine (although on some systems many
UTF-8 X11 locales are aliased to &lsquo;<samp class="samp">en_US.UTF-8</samp>&rsquo; 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> &nbsp; [<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"> &para;</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 &lsquo;<samp class="samp">-devel</samp>&rsquo; or &lsquo;<samp class="samp">-dev</samp>&rsquo;: 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 &lsquo;<samp class="samp">readline</samp>&rsquo; is
missing add the developer package.  (On most systems you will also need
&lsquo;<samp class="samp">ncurses</samp>&rsquo; and its developer package, although these should be
dependencies of the &lsquo;<samp class="samp">readline</samp>&rsquo; 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 &lsquo;<samp class="samp">R-help</samp>&rsquo; archives will normally reveal
what is needed.
</p>
<p>It seems that &lsquo;<samp class="samp">ix86</samp>&rsquo; 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 &lsquo;<samp class="samp">x86_64</samp>&rsquo;.  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 &lsquo;<samp class="samp">ix86</samp>&rsquo; builds (including 32-bit builds on
&lsquo;<samp class="samp">x86_64</samp>&rsquo;) see the version of this manual for R 4.3.x.
</p>
<p>To build a 64-bit version of R on &lsquo;<samp class="samp">ppc64</samp>&rsquo; (also known as
&lsquo;<samp class="samp">powerpc64</samp>&rsquo;) with <code class="command">gcc</code>&nbsp;4.1.1, Ei-ji Nakama used
</p>
<div class="example">
<pre class="example-preformatted">CC=&quot;gcc -m64&quot;
CXX=&quot;gxx -m64&quot;
FC=&quot;gfortran -m64&quot;
CFLAGS=&quot;-mminimal-toc -fno-optimize-sibling-calls -g -O2&quot;
FFLAGS=&quot;-mminimal-toc -fno-optimize-sibling-calls -g -O2&quot;
</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 &lsquo;<samp class="samp">SAFE_FFLAGS</samp>&rsquo; may need some help.  It
should not need additional flags on platforms other than &lsquo;<samp class="samp">68000</samp>&rsquo;
(not likely to be encountered) and &lsquo;<samp class="samp">ix86</samp>&rsquo;.  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 &lsquo;<samp class="samp">ix86</samp>&rsquo; CPU is encountered
without SSE2 support.  Note that it is a <em class="emph">replacement</em> for
&lsquo;<samp class="samp">FFLAGS</samp>&rsquo;, 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> &nbsp; [<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"> &para;</a></span></h4>

<p>R has been built with Linux &lsquo;<samp class="samp">ix86</samp>&rsquo; and &lsquo;<samp class="samp">x86_64</samp>&rsquo; 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> &nbsp; [<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"> &para;</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 was able to build R on &lsquo;<samp class="samp">x86_64</samp>&rsquo; 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
&lsquo;<samp class="samp">aarch64</samp>&rsquo; and &lsquo;<samp class="samp">ppc64le</samp>&rsquo; 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> &nbsp; [<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"> &para;</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 &lsquo;<samp class="samp">x86_64</samp>&rsquo;: the earlier (now called
&lsquo;Classic&rsquo;) 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&rsquo;s &lsquo;oneAPI&rsquo; 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&rsquo;s <code class="code">lidstdc++</code> as its runtime
library rather than LLVM&rsquo;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.0.2 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=&quot;-O3 -fp-model precise -Wall -Wstrict-prototypes&quot;
C17FLAGS=&quot;-O3 -fp-model precise -Wall -Wno-strict-prototypes&quot;
FFLAGS=&quot;-O3 -fp-model precise -warn all,noexternals&quot;
FCFLAGS=&quot;-free -O3 -fp-model precise -warn all,noexternals&quot;
CXXFLAGS=&quot;-O3 -fp-model precise -Wall&quot;
LDFLAGS=&quot;-L/path/to/compilers/compiler/lib -L/usr/local/lib64&quot;
</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=&quot;$MKL_LIB_PATH&quot;
MKL=&quot;-L${MKL_LIB_PATH} -lmkl_intel_lp64 -lmkl_core -lmkl_sequential&quot;
./configure --with-blas=&quot;$MKL&quot; --with-lapack
</pre></div>
<p>and the build passed its checks with MKL 2023.2.0 (but not 2024.0 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 &lsquo;all&rsquo; <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 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
&lsquo;<samp class="samp">INTEL_ICX_FIX</samp>&rsquo; 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="DOCF75" href="#FOOT75"><sup>75</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> &nbsp; [<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"> &para;</a></span></h3>
<a class="index-entry-id" id="index-macOS-2"></a>

<p>The instructions here are for Intel 64-bit (&lsquo;<samp class="samp">x86_64</samp>&rsquo;) or &lsquo;Apple
Silicon&rsquo; (&lsquo;<samp class="samp">arm64</samp>&rsquo;) 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 &lsquo;<samp class="samp">arm64</samp>&rsquo;</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> &nbsp; [<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"> &para;</a></span></h4>

<p>The Intel components install into <samp class="file">/opt/R/x86_64</samp>, the Apple
silicon ones into <samp class="file">/opt/R/arm64</samp>.  This may not exist<a class="footnote" id="DOCF76" href="#FOOT76"><sup>76</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/x86_64/bin</samp> or <samp class="file">/opt/R/arm64/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/x86_64 # Intel
set LOCAL=/opt/R/arm64  # Apple Silicon
</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&rsquo;s &lsquo;Command Line Tools&rsquo;: 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&rsquo;s
<code class="command">clang</code> but nowadays known as &lsquo;Apple clang&rsquo; with different
versioning (so Apple clang 14 is unrelated to LLVM clang 14).
</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="DOCF77" href="#FOOT77"><sup>77</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(&quot;r-base-dev&quot;)</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&ndash;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/x86_64/pcre2-10.42-darwin.20-x86_64.tar.xz
sudo tar -xvzf pcre2-10.42-darwin.20-x86_64.tar.gz -C /
curl -OL https://mac.r-project.org/bin/darwin20/x86_64/xz-5.4.2-darwin.20-x86_64.tar.xz
sudo tar -xvzf xz-5.4.2-darwin.20-x86_64.tar.xz -C /
</pre></div>
<p>(<code class="command">sudo</code> is not needed if your account owns <samp class="file">/opt/R/x86_64</samp> or
<samp class="file">/opt/R/arm64</samp> as appropriate.)
</p>
<p>Messages like &lsquo;<samp class="samp">opt/R/: Can't restore time</samp>&rsquo; 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="DOCF78" href="#FOOT78"><sup>78</sup></a>  If <code class="code">readline</code> is
not present, the emulation in Apple&rsquo;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&rsquo;s <code class="command">configure</code>
script can be told to look for <code class="code">X11</code> in XQuartz&rsquo;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 &lsquo;<samp class="samp">texinfo</samp>&rsquo; 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=&quot;/opt/gfortran/bin/gfortran -mtune=native&quot;
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 &lsquo;<samp class="samp">arm64</samp>&rsquo; build
further flags are desirable in <samp class="file">config.site</samp>:
</p><div class="example">
<pre class="example-preformatted">CFLAGS=&quot;-falign-functions=8 -g -O2&quot;
FFLAGS=&quot;-g -O2 -mmacos-version-min=11.0&quot;
FCFLAGS=&quot;-g -O2 -mmacos-version-min=11.0&quot;
</pre></div>
<p>(the first flag in <code class="code">CFLAGS</code> is needed to inter-work with the
<code class="command">gfortran</code> without segfaulting in some packages, and some builds
of <code class="command">gfortran</code> have targetted the current version of macOS (unlike
<code class="command">clang</code>, causing linker warnings).
</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
</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>(There also an <code class="code">arm64</code> version on that web page.)
</p>
<p>If building software or installing source packages with <code class="command">cmake</code>
(or a non-Apple <code class="command">make</code>) for &lsquo;Apple Silicon&rsquo; ensure it contains
the &lsquo;<samp class="samp">arm64</samp>&rsquo; architecture (use <code class="command">file</code> to be sure).
Running Apple compilers from an &lsquo;<samp class="samp">x86_64</samp>&rsquo; executable will
generate &lsquo;<samp class="samp">x86_64</samp>&rsquo; code &hellip;.
</p>

<p>Updating an &lsquo;<samp class="samp">arm64</samp>&rsquo; 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="DOCF79" href="#FOOT79"><sup>79</sup></a>,
you may need to add something like <code class="code">-mmacos-version-min=12.0</code> to
&lsquo;<samp class="samp">CFLAGS</samp>&rsquo;.
</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 &lsquo;notarized&rsquo;<a class="footnote" id="DOCF80" href="#FOOT80"><sup>80</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 &lsquo;<samp class="samp">Open With</samp>&rsquo; (Control/right/two-finger-click in
Finder), then select &lsquo;<samp class="samp">Installer</samp>&rsquo; and &lsquo;<samp class="samp">Open</samp>&rsquo; if you get a
further warning message.
</p>
<p>If you run into problems with &lsquo;quarantine&rsquo; 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).  For, e.g., 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> &nbsp; [<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"> &para;</a></span></h4>

<p>There is &lsquo;universal&rsquo; (Intel and <code class="code">arm64</code>) 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>A build of <code class="command">gfortran</code> 13.2 for <code class="code">arm64</code> macOS 14 is
available at
<a class="uref" href="https://github.com/fxcoudert/gfortran-for-macOS/releases">https://github.com/fxcoudert/gfortran-for-macOS/releases</a>.
This 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>.
</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> &nbsp; [<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"> &para;</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 = &quot;cairo&quot;)</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> &nbsp; [<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"> &para;</a></span></h4>

<p>Other 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">CC=&quot;$LOCAL/llvm/bin/clang -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk&quot;
CXX=&quot;$LOCAL/llvm/bin/clang++ -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk&quot;
OBJC=$CC
FC=/opt/gfortran/bin/gfortran
LDFLAGS=&quot;-L$LOCAL/llvm/lib -L$LOCAL/lib&quot;
R_LD_LIBRARY_PATH=$LOCAL/llvm/lib:$LOCAL/lib
</pre></div>
<p>Should the location of the <abbr class="abbr">SDK</abbr> change (or where Xcode provides the <abbr class="abbr">SDK</abbr>
rather than the Command Line Tools), it can be found by running
<code class="command">xcrun -show-sdk-path</code>.
</p>
<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, &lsquo;<samp class="samp">R_LD_LIBRARY_PATH</samp>&rsquo; needs
to be set to find the latest version of the C++ run-time libraries
rather than the system ones.
</p>
<p>It is usually possible to build R with GCC (built from the sources,
from a <code class="command">gfortran</code> distribution, from Homebrew, &hellip;).  When
last tested<a class="footnote" id="DOCF81" href="#FOOT81"><sup>81</sup></a> 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.
</p>
<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&mdash;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> &nbsp; [<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"> &para;</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 (&lsquo;Basic TeX&rsquo;) 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>
&lsquo;<samp class="samp">TeX Live Utility</samp>&rsquo; (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 &lsquo;<samp class="samp">x86_64</samp>&rsquo; and
&lsquo;<samp class="samp">arm64</samp>&rsquo;.
</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 &lsquo;HTML Tidy&rsquo;.  macOS has
a version in <samp class="file">/usr/bin/tidy</samp> dating from 2006 which is far too
old and is skipped.  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 dual-architecture 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> &nbsp; [<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"> &para;</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=&quot;-framework Accelerate&quot;
</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&rsquo;s BLAS.
</p>
<p>As from macOS 13.3, the BLAS and LAPACK libraries under the Accelerate
framework are &lsquo;now inline with reference version
3.9.1&rsquo;.<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 &lsquo;Grand Central
Dispatch&rsquo;<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> &nbsp; [<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"> &para;</a></span></h4>

<p>R has been built on &lsquo;<samp class="samp">arm64</samp>&rsquo; 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 &lsquo;performance&rsquo; cores and 2
&lsquo;efficiency cores&lsquo;) 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> &nbsp; [<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"> &para;</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 (&lsquo;Aqua&rsquo;) 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(&quot;tk windowingsystem&quot;))  # &quot;x11&quot; or &quot;aqua&quot;
</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> &nbsp; [<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"> &para;</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<a class="footnote" id="DOCF92" href="#FOOT92"><sup>92</sup></a> this should prompt you to install it.<a class="footnote" id="DOCF93" href="#FOOT93"><sup>93</sup></a>  Builds of OpenJDK may also be available,
e.g. from <a class="uref" href="https://adoptium.net">Adoptium</a>,
<a class="uref" href="https://www.azul.com/downloads/zulu-community/">Azul</a> or
<a class="uref" href="https://jdk.java.net/">https://jdk.java.net/</a>.  We recommend you install a version with
long-term support, e.g. 11, 17 or 21 but not
12&ndash;16, 18&ndash;20, 22 which have/had a 6-month lifetime.  (Note that these
sources may use unusual designations for Intel macOS builds such as
<code class="code">x86 64-bit</code> and <code class="code">x64</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 <code class="command">sudo R CMD javareconf</code>
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 x86_64
/usr/libexec/java_home -V -a arm64
</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 9 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/termurin-17.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>For an &lsquo;<samp class="samp">arm64</samp>&rsquo; build, the earliest Java version which is
officially supported is 17.  The currently simplest way to install Java
is from <a class="uref" href="https://adoptium.net">Adoptium</a> (who call the architecture
&lsquo;<samp class="samp">aarch64</samp>&rsquo;): 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&amp;architecture=arm-64-bit&amp;package=jdk">https://www.azul.com/downloads/zulu-community/?os=macos&amp;architecture=arm-64-bit&amp;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.
</p>
<p>To use Java (specifically, binary package <a class="url" href="https://CRAN.R-project.org/package=rJava"><strong class="strong">rJava</strong></a>) with a
<abbr class="acronym">CRAN</abbr> (&lsquo;<samp class="samp">x86_64</samp>&rsquo;) binary distribution of R on
&lsquo;<samp class="samp">arm64</samp>&rsquo; macOS, install an Intel build of a Java <abbr class="abbr">JRE</abbr> from
one of the sites linked above, then run <code class="command">sudo R CMD javareconf</code>.
</p>

<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> &nbsp; [<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"> &para;</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 do.)
</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> &nbsp; [<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"> &para;</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 &lsquo;<samp class="samp">arm64</samp>&rsquo;</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> &nbsp; [<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"> &para;</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=&quot;clang -mmacosx-version-min=11.0&quot;
CXX=&quot;clang++ -mmacosx-version-min=11.0&quot;
FC=&quot;/opt//gfortran/bin/gfortran -mmacosx-version-min=11.0&quot;
</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&ndash;13 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> &nbsp; [<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 &lsquo;<samp class="samp">arm64</samp>&rsquo;<a class="copiable-link" href="#Building-for-Intel-on-arm64-1"> &para;</a></span></h4>

<p>Should one want to build R for Intel on an &lsquo;<samp class="samp">arm64</samp>&rsquo; Big Sur
Mac, add the target for the C and C++ compilers:
</p>
<div class="example">
<pre class="example-preformatted">CC=&quot;clang -arch x86_64
OBJC=$CC
CXX=&quot;clang++ -arch x86_64&quot;
FC=&quot;/opt//gfortran/bin/gfortran -arch x86_64 -mtune=native -mmacosx-version-min=11&quot;
</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 &lsquo;<samp class="samp">arm64</samp>&rsquo;</a>, Up: <a href="#macOS" accesskey="u" rel="up">macOS</a> &nbsp; [<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"> &para;</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> &nbsp; [<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"> &para;</a></span></h3>
<a class="index-entry-id" id="index-FreeBSD"></a>

<p>There have been few recent reports on FreeBSD: there is a &lsquo;port&rsquo; 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 &lsquo;port&rsquo; 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> &nbsp; [<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"> &para;</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
&lsquo;<samp class="samp">amd64</samp>&rsquo; (their name for &lsquo;<samp class="samp">x86_64</samp>&rsquo;).  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> &nbsp; [<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"> &para;</a></span></h3>

<p>The 32-bit version never worked well enough to pass R&rsquo;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> &nbsp; [<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"> &para;</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>&nbsp;60559, also known as <abbr class="acronym">IEEE</abbr>&nbsp;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 &lsquo;<samp class="samp">ix86</samp>&rsquo; 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&rsquo;s <code class="code">NaN</code> to be set incorrectly, and
<code class="command">gcc</code>&rsquo;s <samp class="option">-ffast-math</samp> and <code class="command">clang</code>&rsquo;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>&nbsp;3.4.x and later on &lsquo;<samp class="samp">ix86</samp>&rsquo; 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 &lsquo;<samp class="samp">R-devel</samp>&rsquo; 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> &nbsp; [<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"> &para;</a></span></h2>

<div class="printindex vr-printindex">
<table summary="" class="vr-letters-header-printindex"><tr><th>Jump to: &nbsp; </th><td><a class="summary-letter-printindex" href="#Function-and-variable-index_vr_letter-C"><b>C</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Function-and-variable-index_vr_letter-I"><b>I</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Function-and-variable-index_vr_letter-M"><b>M</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Function-and-variable-index_vr_letter-R"><b>R</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Function-and-variable-index_vr_letter-U"><b>U</b></a>
 &nbsp; 
</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: &nbsp; </th><td><a class="summary-letter-printindex" href="#Function-and-variable-index_vr_letter-C"><b>C</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Function-and-variable-index_vr_letter-I"><b>I</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Function-and-variable-index_vr_letter-M"><b>M</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Function-and-variable-index_vr_letter-R"><b>R</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Function-and-variable-index_vr_letter-U"><b>U</b></a>
 &nbsp; 
</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> &nbsp; [<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"> &para;</a></span></h2>

<div class="printindex cp-printindex">
<table summary="" class="cp-letters-header-printindex"><tr><th>Jump to: &nbsp; </th><td><a class="summary-letter-printindex" href="#Concept-index_cp_letter-B"><b>B</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Concept-index_cp_letter-C"><b>C</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Concept-index_cp_letter-F"><b>F</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Concept-index_cp_letter-I"><b>I</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Concept-index_cp_letter-L"><b>L</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Concept-index_cp_letter-M"><b>M</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Concept-index_cp_letter-O"><b>O</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Concept-index_cp_letter-P"><b>P</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Concept-index_cp_letter-R"><b>R</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Concept-index_cp_letter-S"><b>S</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Concept-index_cp_letter-U"><b>U</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Concept-index_cp_letter-V"><b>V</b></a>
 &nbsp; 
</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: &nbsp; </th><td><a class="summary-letter-printindex" href="#Concept-index_cp_letter-B"><b>B</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Concept-index_cp_letter-C"><b>C</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Concept-index_cp_letter-F"><b>F</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Concept-index_cp_letter-I"><b>I</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Concept-index_cp_letter-L"><b>L</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Concept-index_cp_letter-M"><b>M</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Concept-index_cp_letter-O"><b>O</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Concept-index_cp_letter-P"><b>P</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Concept-index_cp_letter-R"><b>R</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Concept-index_cp_letter-S"><b>S</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Concept-index_cp_letter-U"><b>U</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Concept-index_cp_letter-V"><b>V</b></a>
 &nbsp; 
</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> &nbsp; [<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"> &para;</a></span></h2>

<div class="printindex en-printindex">
<table summary="" class="en-letters-header-printindex"><tr><th>Jump to: &nbsp; </th><td><a class="summary-letter-printindex" href="#Environment-variable-index_en_letter-B"><b>B</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Environment-variable-index_en_letter-C"><b>C</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Environment-variable-index_en_letter-D"><b>D</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Environment-variable-index_en_letter-J"><b>J</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Environment-variable-index_en_letter-L"><b>L</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Environment-variable-index_en_letter-P"><b>P</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Environment-variable-index_en_letter-R"><b>R</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Environment-variable-index_en_letter-T"><b>T</b></a>
 &nbsp; 
</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: &nbsp; </th><td><a class="summary-letter-printindex" href="#Environment-variable-index_en_letter-B"><b>B</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Environment-variable-index_en_letter-C"><b>C</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Environment-variable-index_en_letter-D"><b>D</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Environment-variable-index_en_letter-J"><b>J</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Environment-variable-index_en_letter-L"><b>L</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Environment-variable-index_en_letter-P"><b>P</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Environment-variable-index_en_letter-R"><b>R</b></a>
 &nbsp; 
<a class="summary-letter-printindex" href="#Environment-variable-index_en_letter-T"><b>T</b></a>
 &nbsp; 
</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 &lsquo;<samp class="samp">libarchive</samp>&rsquo;
(as used on macOS) or &lsquo;Heirloom Toolchest&rsquo; distributions.</p>
<h5 class="footnote-body-heading"><a id="FOOT2" href="#DOCF2">(2)</a></h5>
<p>for some Subversion clients
&lsquo;<samp class="samp">http:</samp>&rsquo; may appear to work, but requires continual redirection.</p>
<h5 class="footnote-body-heading"><a id="FOOT3" href="#DOCF3">(3)</a></h5>
<p>aka &lsquo;Apple Silicon&rsquo;, known to
some as &lsquo;<samp class="samp">arm64-apple-darwin</samp>&rsquo;.</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, &lsquo;<samp class="samp">inconsolata</samp>&rsquo; 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> &ndash; 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 &lsquo;<samp class="samp">MiKTeX</samp>&rsquo;
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>You may be asked to
install Rosetta at first use &ndash;
<a class="url" href="https://support.apple.com/en-us/102527">https://support.apple.com/en-us/102527</a> &ndash; which may need
administrator privileges.</p>
<h5 class="footnote-body-heading"><a id="FOOT20" href="#DOCF20">(20)</a></h5>
<p>At the time of
writing, version 2.8.5 or later.</p>
<h5 class="footnote-body-heading"><a id="FOOT21" href="#DOCF21">(21)</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="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 Intel and ARM
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 &lsquo;short path&rsquo; 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&rsquo;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>&lsquo;X/Open Portability Guide&rsquo;, 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 &lsquo;<samp class="samp">C</samp>&rsquo; 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>&nbsp;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 &lsquo;bugfix release&rsquo; 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 &lsquo;Aqua&rsquo; 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
&lsquo;Intel oneAPI Math Kernel Library&rsquo; or even &lsquo;oneMKL&rsquo;.</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&ndash;20% on &lsquo;<samp class="samp">i686</samp>&rsquo; Linux
and around 10% on &lsquo;<samp class="samp">x86_64</samp>&rsquo; 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&rsquo;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>as the &lsquo;Classic&rsquo; compiler
has been known on Windows.</p>
<h5 class="footnote-body-heading"><a id="FOOT76" href="#DOCF76">(76)</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="FOOT77" href="#DOCF77">(77)</a></h5>
<p>If compiling it from source on
&lsquo;<samp class="samp">arm64</samp>&rsquo;, <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="FOOT78" href="#DOCF78">(78)</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="FOOT79" href="#DOCF79">(79)</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="FOOT80" href="#DOCF80">(80)</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="FOOT81" href="#DOCF81">(81)</a></h5>
<p>with <code class="command">gcc</code> 10.2.</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 &lsquo;Installation Type&rsquo; screen select &lsquo;Customise&rsquo; and then
just the &lsquo;Tcl/Tk 8.6.11&rsquo; 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>In the unlikely event that the version reported does
not start with <code class="code">1.8.0</code>, <code class="code">11</code> or higher you need to update your
Java.</p>
<h5 class="footnote-body-heading"><a id="FOOT93" href="#DOCF93">(93)</a></h5>
<p>Not at the time of
writing for &lsquo;<samp class="samp">arm64</samp>&rsquo;.</p>
</div>



</body>
</html>