2021-01-11 07:54:33 +00:00
|
|
|
{ lib, stdenv, fetchurl, bzip2, gfortran, libX11, libXmu, libXt, libjpeg, libpng
|
2020-04-25 14:39:43 +01:00
|
|
|
, libtiff, ncurses, pango, pcre2, perl, readline, tcl, texLive, tk, xz, zlib
|
2021-01-19 06:50:56 +00:00
|
|
|
, less, texinfo, graphviz, icu, pkg-config, bison, imake, which, jdk, blas, lapack
|
2021-08-13 01:19:31 +01:00
|
|
|
, curl, Cocoa, Foundation, libobjc, libcxx, tzdata
|
2014-05-04 20:12:34 +01:00
|
|
|
, withRecommendedPackages ? true
|
2016-01-17 10:06:03 +00:00
|
|
|
, enableStrictBarrier ? false
|
2021-08-30 17:24:42 +01:00
|
|
|
, enableMemoryProfiling ? false
|
2019-10-27 01:10:29 +00:00
|
|
|
# R as of writing does not support outputting both .so and .a files; it outputs:
|
|
|
|
# --enable-R-static-lib conflicts with --enable-R-shlib and will be ignored
|
|
|
|
, static ? false
|
2013-05-23 10:35:54 +01:00
|
|
|
}:
|
|
|
|
|
2020-04-20 21:50:55 +01:00
|
|
|
assert (!blas.isILP64) && (!lapack.isILP64);
|
2020-03-31 15:47:18 +01:00
|
|
|
|
2013-05-23 10:35:54 +01:00
|
|
|
stdenv.mkDerivation rec {
|
2021-03-04 02:46:54 +00:00
|
|
|
pname = "R";
|
2022-03-10 11:31:13 +00:00
|
|
|
version = "4.1.3";
|
2013-05-23 10:35:54 +01:00
|
|
|
|
|
|
|
src = fetchurl {
|
2021-03-04 02:46:54 +00:00
|
|
|
url = "https://cran.r-project.org/src/base/R-${lib.versions.major version}/${pname}-${version}.tar.gz";
|
2022-03-10 11:31:13 +00:00
|
|
|
sha256 = "sha256-Ff9bMzxhCUBgsqUunB2OxVzELdAp45yiKr2qkJUm/tY=";
|
2013-05-23 10:35:54 +01:00
|
|
|
};
|
|
|
|
|
2018-11-28 20:22:10 +00:00
|
|
|
dontUseImakeConfigure = true;
|
|
|
|
|
2017-02-26 21:26:12 +00:00
|
|
|
buildInputs = [
|
|
|
|
bzip2 gfortran libX11 libXmu libXt libXt libjpeg libpng libtiff ncurses
|
2020-04-25 14:39:43 +01:00
|
|
|
pango pcre2 perl readline texLive xz zlib less texinfo graphviz icu
|
2021-01-19 06:50:56 +00:00
|
|
|
pkg-config bison imake which blas lapack curl tcl tk jdk
|
2021-01-15 13:21:58 +00:00
|
|
|
] ++ lib.optionals stdenv.isDarwin [ Cocoa Foundation libobjc libcxx ];
|
2013-07-04 10:35:57 +01:00
|
|
|
|
2019-04-26 13:34:14 +01:00
|
|
|
patches = [
|
|
|
|
./no-usr-local-search-paths.patch
|
|
|
|
];
|
2013-07-04 10:35:57 +01:00
|
|
|
|
2021-11-17 10:01:28 +00:00
|
|
|
# Test of the examples for package 'tcltk' fails in Darwin sandbox. See:
|
|
|
|
# https://github.com/NixOS/nixpkgs/issues/146131
|
2021-11-20 20:10:28 +00:00
|
|
|
postPatch = lib.optionalString stdenv.isDarwin ''
|
2021-02-15 02:08:02 +00:00
|
|
|
substituteInPlace configure \
|
|
|
|
--replace "-install_name libRblas.dylib" "-install_name $out/lib/R/lib/libRblas.dylib" \
|
|
|
|
--replace "-install_name libRlapack.dylib" "-install_name $out/lib/R/lib/libRlapack.dylib" \
|
|
|
|
--replace "-install_name libR.dylib" "-install_name $out/lib/R/lib/libR.dylib"
|
2021-11-17 10:01:28 +00:00
|
|
|
substituteInPlace tests/Examples/Makefile.in \
|
|
|
|
--replace "test-Examples: test-Examples-Base" "test-Examples:" # do not test the examples
|
2018-01-23 23:22:40 +00:00
|
|
|
'';
|
|
|
|
|
2019-10-27 01:10:29 +00:00
|
|
|
dontDisableStatic = static;
|
|
|
|
|
2013-07-04 10:35:57 +01:00
|
|
|
preConfigure = ''
|
|
|
|
configureFlagsArray=(
|
|
|
|
--disable-lto
|
2021-01-15 13:21:58 +00:00
|
|
|
--with${lib.optionalString (!withRecommendedPackages) "out"}-recommended-packages
|
2020-03-31 15:47:18 +01:00
|
|
|
--with-blas="-L${blas}/lib -lblas"
|
|
|
|
--with-lapack="-L${lapack}/lib -llapack"
|
2013-07-04 10:35:57 +01:00
|
|
|
--with-readline
|
|
|
|
--with-tcltk --with-tcl-config="${tcl}/lib/tclConfig.sh" --with-tk-config="${tk}/lib/tkConfig.sh"
|
|
|
|
--with-cairo
|
|
|
|
--with-libpng
|
|
|
|
--with-jpeglib
|
|
|
|
--with-libtiff
|
|
|
|
--with-ICU
|
2021-01-15 13:21:58 +00:00
|
|
|
${lib.optionalString enableStrictBarrier "--enable-strict-barrier"}
|
2021-08-30 17:24:42 +01:00
|
|
|
${lib.optionalString enableMemoryProfiling "--enable-memory-profiling"}
|
2019-10-27 01:10:29 +00:00
|
|
|
${if static then "--enable-R-static-lib" else "--enable-R-shlib"}
|
2013-08-05 23:44:10 +01:00
|
|
|
AR=$(type -p ar)
|
|
|
|
AWK=$(type -p gawk)
|
2018-01-23 23:22:40 +00:00
|
|
|
CC=$(type -p cc)
|
|
|
|
CXX=$(type -p c++)
|
2013-08-05 23:44:10 +01:00
|
|
|
FC="${gfortran}/bin/gfortran" F77="${gfortran}/bin/gfortran"
|
2020-02-19 22:57:41 +00:00
|
|
|
JAVA_HOME="${jdk}"
|
2013-08-05 23:44:10 +01:00
|
|
|
RANLIB=$(type -p ranlib)
|
|
|
|
R_SHELL="${stdenv.shell}"
|
2021-01-15 13:21:58 +00:00
|
|
|
'' + lib.optionalString stdenv.isDarwin ''
|
2015-06-29 01:42:31 +01:00
|
|
|
--disable-R-framework
|
2021-04-29 17:34:34 +01:00
|
|
|
--without-x
|
2015-06-29 01:42:31 +01:00
|
|
|
OBJC="clang"
|
llvmPackages: Multuple outputs for everythting
Also begin to start work on cross compilation, though that will have to
be finished later.
The patches are based on the first version of
https://reviews.llvm.org/D99484. It's very annoying to do the
back-porting but the review has uncovered nothing super major so I'm
fine sticking with what I've got.
Beyond making the outputs work, I also strove to re-sync the packages,
as they have been drifting pointlessly apart for some time.
----
Other misc notes, highly incomplete
- lvm-config-native and llvm-config are put in `dev` because they are
tools just for build time.
- Clang no longer has an lld dep. That was introduced in
db29857eb391ed002046090851a44c452b80bdbd, but if clang needs help
finding lld when it is used we should just pass it flags / put in the
resource dir. Providing it at build time increases critical path
length for no good reason.
----
A note on `nativeCC`:
`stdenv` takes tools from the previous stage, so:
1. `pkgsBuildBuild`: `(?1, x, x)`
2. `pkgsBuildBuild.stdenv.cc`: `(?0, ?1, x)`
while:
1. `pkgsBuildBuild`: `(?1, x, x)`
2. `pkgsBuildBuild.targetPackages`: `(x, x, ?2)`
3. `pkgsBuildBuild.targetPackages.stdenv.cc`: `(?1, x, x)`
2020-10-15 09:23:57 +01:00
|
|
|
CPPFLAGS="-isystem ${lib.getDev libcxx}/include/c++/v1"
|
|
|
|
LDFLAGS="-L${lib.getLib libcxx}/lib"
|
2015-06-29 01:42:31 +01:00
|
|
|
'' + ''
|
2013-07-04 10:35:57 +01:00
|
|
|
)
|
2017-03-04 19:26:20 +00:00
|
|
|
echo >>etc/Renviron.in "TCLLIBPATH=${tk}/lib"
|
|
|
|
echo >>etc/Renviron.in "TZDIR=${tzdata}/share/zoneinfo"
|
2015-06-29 01:42:31 +01:00
|
|
|
'';
|
|
|
|
|
2013-07-04 10:35:57 +01:00
|
|
|
installTargets = [ "install" "install-info" "install-pdf" ];
|
|
|
|
|
2019-04-05 02:08:53 +01:00
|
|
|
# The store path to "which" is baked into src/library/base/R/unix/system.unix.R,
|
|
|
|
# but Nix cannot detect it as a run-time dependency because the installed file
|
|
|
|
# is compiled and compressed, which hides the store path.
|
2019-04-07 16:37:55 +01:00
|
|
|
postFixup = "echo ${which} > $out/nix-support/undetected-runtime-dependencies";
|
2019-04-05 02:08:53 +01:00
|
|
|
|
2018-07-02 10:21:39 +01:00
|
|
|
doCheck = true;
|
2017-04-21 15:42:05 +01:00
|
|
|
preCheck = "export TZ=CET; bin/Rscript -e 'sessionInfo()'";
|
2013-05-23 10:35:54 +01:00
|
|
|
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
|
2022-02-10 17:00:44 +00:00
|
|
|
# disable stackprotector on aarch64-darwin for now
|
|
|
|
# https://github.com/NixOS/nixpkgs/issues/158730
|
|
|
|
# see https://github.com/NixOS/nixpkgs/issues/127608 for a similar issue
|
|
|
|
hardeningDisable = lib.optionals (stdenv.isAarch64 && stdenv.isDarwin) [ "stackprotector" ];
|
|
|
|
|
2013-09-20 00:26:07 +01:00
|
|
|
setupHook = ./setup-hook.sh;
|
|
|
|
|
2021-01-11 07:54:33 +00:00
|
|
|
meta = with lib; {
|
2020-03-03 11:34:22 +00:00
|
|
|
homepage = "http://www.r-project.org/";
|
2013-10-05 15:22:46 +01:00
|
|
|
description = "Free software environment for statistical computing and graphics";
|
2017-02-26 21:26:12 +00:00
|
|
|
license = licenses.gpl2Plus;
|
2013-05-23 10:35:54 +01:00
|
|
|
|
2013-07-04 10:35:57 +01:00
|
|
|
longDescription = ''
|
|
|
|
GNU R is a language and environment for statistical computing and
|
|
|
|
graphics that provides a wide variety of statistical (linear and
|
|
|
|
nonlinear modelling, classical statistical tests, time-series
|
|
|
|
analysis, classification, clustering, ...) and graphical
|
|
|
|
techniques, and is highly extensible. One of R's strengths is the
|
|
|
|
ease with which well-designed publication-quality plots can be
|
|
|
|
produced, including mathematical symbols and formulae where
|
|
|
|
needed. R is an integrated suite of software facilities for data
|
|
|
|
manipulation, calculation and graphical display. It includes an
|
|
|
|
effective data handling and storage facility, a suite of operators
|
|
|
|
for calculations on arrays, in particular matrices, a large,
|
|
|
|
coherent, integrated collection of intermediate tools for data
|
|
|
|
analysis, graphical facilities for data analysis and display
|
|
|
|
either on-screen or on hardcopy, and a well-developed, simple and
|
|
|
|
effective programming language which includes conditionals, loops,
|
|
|
|
user-defined recursive functions and input and output facilities.
|
|
|
|
'';
|
|
|
|
|
2017-02-26 21:26:12 +00:00
|
|
|
platforms = platforms.all;
|
2014-12-03 13:47:37 +00:00
|
|
|
|
2021-10-16 22:47:36 +01:00
|
|
|
maintainers = with maintainers; [ jbedo ] ++ teams.sage.members;
|
2013-05-23 10:35:54 +01:00
|
|
|
};
|
|
|
|
}
|