% File src/library/base/man/Version.Rd
% Part of the R package, https://www.R-project.org
% Copyright 1995-2017 R Core Team
% Distributed under GPL 2 or later

\name{R.Version}
\title{Version Information}
\alias{R.Version}
\alias{R.version}
\alias{version}
\alias{R.version.string}
\usage{
R.Version()
R.version
R.version.string
version
}
\description{
  \code{R.Version()} provides detailed information about the version of
  \R running.

  \code{R.version} is a variable (a \code{\link{list}}) holding this
  information (and \code{version} is a copy of it for S compatibility).
}
\value{
 \code{R.Version} returns a list with character-string components
 \item{platform}{the platform for which \R was built.  A triplet of the
   form CPU-VENDOR-OS, as determined by the configure script.  E.g,
   \code{"i686-unknown-linux-gnu"} or \code{"i386-pc-mingw32"}.
 }
  \item{arch}{the architecture (CPU) \R was built on/for.}
  \item{os}{the underlying operating system.}
  \item{system}{CPU and OS, separated by a comma.}
  \item{status}{the status of the version (e.g., \code{"alpha"})}
  \item{major}{the major version number}
  \item{minor}{the minor version number, including the patchlevel}
  \item{year}{the year the version was released}
  \item{month}{the month the version was released}
  \item{day}{the day the version was released}
  \item{svn rev}{the Subversion revision number, which should be either
    \code{"unknown"} or a single number. (A range of numbers or a number
    with \samp{M} or \samp{S} appended indicates inconsistencies in the
    sources used to build this version of \R.)
  }
  \item{language}{always \code{"R"}.}
  \item{version.string}{a
    \code{\link{character}} string concatenating some of the info above,
    useful for plotting, etc.}

  \code{R.version} and \code{version} are lists of class
  \code{"simple.list"} which has a \code{print} method.
}
\note{
  Do \emph{not} use \code{R.version$os} to test the platform the
  code is running on: use \code{.Platform$OS.type} instead.  Slightly
  different versions of the OS may report different values of
  \code{R.version$os}, as may different versions of \R.

  \code{R.version.string} is a copy of \code{R.version$version.string}
  for simplicity and backwards compatibility.
}
\details{
  This gives details of the OS under which \R was built, not the one
  under which it is currently running (for which see
  \code{\link{Sys.info}}).

  Note that OS names might not be what you expect: for example macOS
  Mavericks 10.9.4 identifies itself as \samp{darwin13.3.0}, Linux
  usually as \samp{linux-gnu} and Solaris 10 as \samp{solaris2.10}.
}
\seealso{
  \code{\link{sessionInfo}} which provides additional information;
  \code{\link{getRversion}} typically used inside R code,
  \code{\link{.Platform}}, \code{\link{Sys.info}}.
}
\examples{
require(graphics)

R.version$os # to check how lucky you are ...
plot(0) # any plot
mtext(R.version.string, side = 1, line = 4, adj = 1) # a useful bottom-right note

## a good way to detect macOS:
if(grepl("^darwin", R.version$os)) message("running on macOS")

## Short R version string, ("space free", useful in file/directory names;
##                          also fine for unreleased versions of R):
shortRversion <- function() {
   rvs <- R.version.string
   if(grepl("devel", (st <- R.version$status)))
       rvs <- sub(paste0(" ",st," "), "-devel_", rvs, fixed=TRUE)
   gsub("[()]", "", gsub(" ", "_", sub(" version ", "-", rvs)))
}
\donttest{shortRversion()}
\dontshow{stopifnot(identical(grep(" ", shortRversion()), integer(0)))}
}
\keyword{environment}
\keyword{sysdata}
\keyword{programming}
