fe68ba81d2
This "un-breaks" sage while also updating it to 8.0. It compiles sage with its dependencies as one big pile, which is not the best approach but definately better than nothing for now. To be able to shrink the huge output pile a little, it also splits docs from the rest of the output.
183 lines
6.9 KiB
Nix
183 lines
6.9 KiB
Nix
# TODO
|
|
# - consider writing a script to convert spkgs to nix packages, similar to vim
|
|
# or cabal2nix. This would allow a more efficient and "cleaner" build, greater
|
|
# flexibility and the possibility to select which dependencies to add and which
|
|
# to remove. It would also allow to use system packages for some dependencies
|
|
# and recompile others (optimized for the system) without recompiling everything.
|
|
# - add optdeps:
|
|
# - imagemagick
|
|
# - texlive full for documentation
|
|
# - ...
|
|
# - further seperate build outputs. Also maybe run `make doc`.
|
|
# Configure flags like --bindir and --libdir oculd also be used for that, see
|
|
# ./configure --help`.
|
|
|
|
# Other resources:
|
|
# - https://wiki.debian.org/DebianScience/Sage
|
|
# - https://github.com/cschwan/sage-on-gentoo
|
|
# - https://git.archlinux.org/svntogit/community.git/tree/trunk?h=packages/sagemath
|
|
|
|
{ stdenv
|
|
, fetchurl
|
|
, perl
|
|
, gfortran
|
|
, python
|
|
, autoreconfHook
|
|
, gettext
|
|
, which
|
|
, texlive
|
|
, hevea
|
|
}:
|
|
|
|
stdenv.mkDerivation rec {
|
|
version = "8.0";
|
|
name = "sage-${version}";
|
|
|
|
src = fetchurl {
|
|
# Note that the source is *not* fetched from github, since that doesn't
|
|
# the upstream folder with all the source tarballs of the spkgs.
|
|
# If those are not present they are fetched at build time, which breaks
|
|
# when building in a sandbox (and probably only works if you install the
|
|
# latest sage version).
|
|
urls = [
|
|
"http://mirrors.mit.edu/sage/src/sage-${version}.tar.gz"
|
|
"ftp://ftp.fu-berlin.de/unix/misc/sage/src/sage-${version}.tar.gz"
|
|
"http://sagemath.polytechnic.edu.na/src/sage-${version}.tar.gz"
|
|
"ftp://ftp.sun.ac.za/pub/mirrors/www.sagemath.org/src/sage-${version}.tar.gz"
|
|
"http://sagemath.mirror.ac.za/src/sage-${version}.tar.gz"
|
|
"http://ftp.leg.uct.ac.za/pub/packages/sage/src/sage-${version}.tar.gz"
|
|
"http://mirror.ufs.ac.za/sagemath/src/sage-${version}.tar.gz"
|
|
"http://mirrors-usa.go-parts.com/sage/sagemath/src/sage-${version}.tar.gz"
|
|
"http://www.cecm.sfu.ca/sage/src/sage-${version}.tar.gz"
|
|
"http://files.sagemath.org/src/sage-${version}.tar.gz"
|
|
"http://mirrors.xmission.com/sage/src/sage-${version}.tar.gz"
|
|
"http://sagemath.c3sl.ufpr.br/src/sage-${version}.tar.gz"
|
|
"http://linorg.usp.br/sage/src/sage-${version}.tar.gz"
|
|
"http://mirror.hust.edu.cn/sagemath/src/sage-${version}.tar.gz"
|
|
"http://ftp.iitm.ac.in/sage/src/sage-${version}.tar.gz"
|
|
"http://ftp.kaist.ac.kr/sage/src/sage-${version}.tar.gz"
|
|
"http://ftp.riken.jp/sagemath/src/sage-${version}.tar.gz"
|
|
"http://mirrors.tuna.tsinghua.edu.cn/sagemath/src/sage-${version}.tar.gz"
|
|
"http://mirrors.ustc.edu.cn/sagemath/src/sage-${version}.tar.gz"
|
|
"http://ftp.tsukuba.wide.ad.jp/software/sage/src/sage-${version}.tar.gz"
|
|
"http://ftp.yz.yamagata-u.ac.jp/pub/math/sage/src/sage-${version}.tar.gz"
|
|
"http://mirror.yandex.ru/mirrors/sage.math.washington.edu/src/sage-${version}.tar.gz"
|
|
"http://mirror.aarnet.edu.au/pub/sage/src/sage-${version}.tar.gz"
|
|
"http://sage.mirror.garr.it/mirrors/sage/src/sage-${version}.tar.gz"
|
|
"http://www.mirrorservice.org/sites/www.sagemath.org/src/sage-${version}.tar.gz"
|
|
"http://mirror.switch.ch/mirror/sagemath/src/sage-${version}.tar.gz"
|
|
"https://mirrors.up.pt/pub/sage/src/sage-${version}.tar.gz"
|
|
"http://www-ftp.lip6.fr/pub/math/sagemath/src/sage-${version}.tar.gz"
|
|
"http://ftp.ntua.gr/pub/sagemath/src/sage-${version}.tar.gz"
|
|
];
|
|
sha256 = "1a9rhb8jby6fdqa2s7n2fl9jwqqlsl7qz7dbpbwvg6jwlrvni7fg";
|
|
};
|
|
|
|
postPatch = ''
|
|
substituteAllInPlace src/bin/sage-env
|
|
'';
|
|
|
|
installPhase = ''
|
|
# Sage installs during first `make`, `make install` is no-op and just takes time.
|
|
'';
|
|
|
|
outputs = [ "out" "doc" ];
|
|
|
|
buildInputs = [
|
|
perl # needed for the build
|
|
python # needed for the build
|
|
gfortran # needed to build giac
|
|
autoreconfHook # needed to configure sage with prefix
|
|
gettext # needed to build the singular spkg
|
|
hevea # needed to build the docs of the giac spkg
|
|
which # needed in configure of mpir
|
|
# needed to build the docs of the giac spkg
|
|
(texlive.combine { inherit (texlive)
|
|
scheme-basic
|
|
collection-pstricks # needed by giac
|
|
times # font needed by giac
|
|
stmaryrd # needed by giac
|
|
babel-greek # optional for giac, otherwise throws a bunch of latex command not founds
|
|
;
|
|
})
|
|
];
|
|
|
|
patches = [
|
|
# fix usages of /bin/rm
|
|
./spkg-singular.patch
|
|
# help python find the crypt library
|
|
./spkg-python2.patch
|
|
./spkg-python3.patch
|
|
# fix usages of /usr/bin/perl
|
|
./spkg-git.patch
|
|
# fix usages of /bin/cp and add necessary argument to function call
|
|
./spkg-giac.patch
|
|
# environment
|
|
./env.patch
|
|
];
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
hardeningDisable = [
|
|
"format" # needed to build palp, for lines like `printf(ctime(&_NFL->TIME))`
|
|
# TODO could be patched with `sed s|printf(ctime(\(.*\)))|%s... or fixed upstream
|
|
];
|
|
|
|
preConfigure = ''
|
|
export SAGE_NUM_THREADS=$NIX_BUILD_CORES
|
|
export SAGE_ATLAS_ARCH=fast
|
|
|
|
export HOME=$out/sage-home
|
|
mkdir -p $out/sage-home
|
|
|
|
mkdir -p "$out"
|
|
|
|
# we need to keep the source around
|
|
dir="$PWD"
|
|
cd ..
|
|
mv "$dir" "$out/sage-root"
|
|
|
|
cd "$out/sage-root" # build in target dir, since `make` is also `make install`
|
|
'';
|
|
|
|
# for reference: http://doc.sagemath.org/html/en/installation/source.html
|
|
preBuild = ''
|
|
# TODO do this conditionally
|
|
export SAGE_SPKG_INSTALL_DOCS='no'
|
|
patchShebangs build
|
|
'';
|
|
|
|
postBuild = ''
|
|
rm -r "$out/sage-root/upstream" # don't keep the sources of all the spkgs
|
|
rm -r "$out/sage-root/src/build"
|
|
rm -rf "$out/sage-root/src/.git"
|
|
rm -r "$out/sage-root/logs"
|
|
# Fix dependency cycle between out and doc
|
|
rm -f "$out/sage-root/config.status"
|
|
rm -f "$out/sage-root/build/make/Makefile-auto"
|
|
rm -f "$out/sage-home/.sage/gap/libgap-workspace-"*
|
|
'';
|
|
|
|
# TODO there are some doctest failures, which seem harmless.
|
|
# We should figure out a way to fix the failures or ignore only those tests.
|
|
doCheck = false;
|
|
|
|
checkTarget = "ptestalllong"; # all long tests in parallell
|
|
preCheck = ''
|
|
export SAGE_TIMEOUT=0 # no timeout
|
|
export SAGE_TIMEOUT_LONG=0 # no timeout
|
|
'';
|
|
|
|
meta = {
|
|
homepage = http://www.sagemath.org;
|
|
description = "A free open source mathematics software system";
|
|
# taken from the homepage
|
|
longDescription = ''
|
|
SageMath is a free open-source mathematics software system licensed under the GPL. It builds on top of many existing open-source packages: NumPy, SciPy, matplotlib, Sympy, Maxima, GAP, FLINT, R and many more. Access their combined power through a common, Python-based language or directly via interfaces or wrappers.
|
|
Mission: Creating a viable free open source alternative to Magma, Maple, Mathematica and Matlab.
|
|
'';
|
|
license = stdenv.lib.licenses.gpl2Plus;
|
|
platforms = stdenv.lib.platforms.all;
|
|
maintainers = with stdenv.lib.maintainers; [ timokau ];
|
|
};
|
|
}
|