forked from mirrors/nixpkgs
sage: 6.8 -> 8.0
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.
This commit is contained in:
parent
0cabd5fa67
commit
fe68ba81d2
|
@ -627,6 +627,7 @@
|
|||
ThomasMader = "Thomas Mader <thomas.mader@gmail.com>";
|
||||
thoughtpolice = "Austin Seipp <aseipp@pobox.com>";
|
||||
timbertson = "Tim Cuthbertson <tim@gfxmonk.net>";
|
||||
timokau = "Timo Kaufmann <timokau@zoho.com>";
|
||||
titanous = "Jonathan Rudenberg <jonathan@titanous.com>";
|
||||
tnias = "Philipp Bartsch <phil@grmr.de>";
|
||||
tohl = "Tomas Hlavaty <tom@logand.com>";
|
||||
|
|
|
@ -1,42 +1,183 @@
|
|||
{ stdenv, fetchurl, m4, perl, gfortran, texlive, ffmpeg, tk, gnused_422
|
||||
, imagemagick, liblapack, python, openssl, libpng
|
||||
# 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 {
|
||||
name = "sage-6.8";
|
||||
version = "8.0";
|
||||
name = "sage-${version}";
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://old.files.sagemath.org/src-old/${name}.tar.gz";
|
||||
sha256 = "102mrzzi215g1xn5zgcv501x9sghwg758jagx2jixvg1rj2jijj9";
|
||||
|
||||
# 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";
|
||||
};
|
||||
|
||||
buildInputs = [ m4 perl gfortran texlive.combined.scheme-basic ffmpeg gnused_422 tk imagemagick liblapack
|
||||
python openssl libpng which ];
|
||||
postPatch = ''
|
||||
substituteAllInPlace src/bin/sage-env
|
||||
'';
|
||||
|
||||
patches = [ ./spkg-singular.patch ./spkg-python.patch ./spkg-git.patch ];
|
||||
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" ];
|
||||
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
|
||||
mkdir -p $out/sageHome
|
||||
export HOME=$out/sageHome
|
||||
export CPPFLAGS="-P"
|
||||
|
||||
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`
|
||||
'';
|
||||
|
||||
preBuild = "patchShebangs build";
|
||||
# for reference: http://doc.sagemath.org/html/en/installation/source.html
|
||||
preBuild = ''
|
||||
# TODO do this conditionally
|
||||
export SAGE_SPKG_INSTALL_DOCS='no'
|
||||
patchShebangs build
|
||||
'';
|
||||
|
||||
installPhase = ''DESTDIR=$out make install'';
|
||||
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;
|
||||
broken = true;
|
||||
platforms = stdenv.lib.platforms.all;
|
||||
maintainers = with stdenv.lib.maintainers; [ timokau ];
|
||||
};
|
||||
}
|
||||
|
|
22
pkgs/applications/science/math/sage/env.patch
Normal file
22
pkgs/applications/science/math/sage/env.patch
Normal file
|
@ -0,0 +1,22 @@
|
|||
diff --git a/src/bin/sage-env b/src/bin/sage-env
|
||||
index ead308f861..ed8db9f9b7 100644
|
||||
--- a/src/bin/sage-env
|
||||
+++ b/src/bin/sage-env
|
||||
@@ -111,6 +111,8 @@ resolvelinks() {
|
||||
}
|
||||
|
||||
|
||||
+SAGE_ROOT="@out@/sage-root"
|
||||
+
|
||||
# New value for SAGE_ROOT: either SAGE_ROOT (if given)
|
||||
# or a guessed value based on pwd.
|
||||
if [ -n "$SAGE_ROOT" ]; then
|
||||
@@ -185,6 +187,8 @@ fi
|
||||
export SAGE_ENV_SOURCED=$SAGE_ENV_VERSION
|
||||
|
||||
export SAGE_ROOT="$NEW_SAGE_ROOT"
|
||||
+export SAGE_LOCAL='@out@/'
|
||||
+export PYTHONPATH="@out@/lib/python2.7/site-packages:$PYTHONPATH"
|
||||
|
||||
|
||||
# sage-env must know where the Sage's script files are.
|
11
pkgs/applications/science/math/sage/fetch-mirrors.sh
Executable file
11
pkgs/applications/science/math/sage/fetch-mirrors.sh
Executable file
|
@ -0,0 +1,11 @@
|
|||
#! /usr/bin/env nix-shell
|
||||
#! nix-shell -i bash -p curl go-pup
|
||||
|
||||
# Fetches a list of all available source mirrors from the sage homepage.
|
||||
# Note that the list is sorted by country, but fetchurl doesn't offer an option
|
||||
# to customize mirror preference.
|
||||
|
||||
curl -s http://www.sagemath.org/download-source.html \
|
||||
| pup 'table#mirror' \
|
||||
| pup 'a attr{href}' \
|
||||
| sed -e 's/index\.html/sage-${version}.tar.gz/'
|
11
pkgs/applications/science/math/sage/spkg-giac.patch
Normal file
11
pkgs/applications/science/math/sage/spkg-giac.patch
Normal file
|
@ -0,0 +1,11 @@
|
|||
--- old/build/pkgs/giac/spkg-install 2017-07-21 14:10:00.000000000 -0500
|
||||
+++ new/build/pkgs/giac/spkg-install 2017-10-15 15:55:55.321237645 -0500
|
||||
@@ -4,6 +4,8 @@
|
||||
## Giac
|
||||
###########################################
|
||||
|
||||
+find . -type f -exec sed -e 's@/bin/cp@cp@g' -i '{}' ';' && echo "Patching input parser" && find . -iname 'input_parser.cc'
|
||||
+sed -e 's@yylex (&yylval)@yylex (\&yyval, scanner)@gp' -i 'src/src/input_parser.cc'
|
||||
|
||||
if [ "$SAGE_LOCAL" = "" ]; then
|
||||
echo "SAGE_LOCAL undefined ... exiting";
|
|
@ -1,10 +1,12 @@
|
|||
--- old/build/pkgs/git/spkg-install 2015-07-26 15:34:43.000000000 +0200
|
||||
+++ new/build/pkgs/git/spkg-install 2015-09-17 08:28:03.586657451 +0200
|
||||
@@ -45,6 +45,8 @@
|
||||
fi
|
||||
done
|
||||
diff --git a/build/pkgs/git/spkg-install b/build/pkgs/git/spkg-install
|
||||
index 8469cb58c2..d0dc9a1db9 100755
|
||||
--- a/build/pkgs/git/spkg-install
|
||||
+++ b/build/pkgs/git/spkg-install
|
||||
@@ -35,6 +35,8 @@ fi
|
||||
|
||||
+find . -exec sed -e 's@/usr/bin/perl@perl@g' -i '{}' ';'
|
||||
cd src
|
||||
|
||||
+find . -type f -exec sed -e 's@/usr/bin/perl@perl@g' -i '{}' ';'
|
||||
+
|
||||
# We don't want to think about Fink or Macports
|
||||
export NO_FINK=1
|
||||
|
|
|
@ -1,11 +0,0 @@
|
|||
--- old/build/pkgs/python2/spkg-install 2015-07-26 15:34:43.000000000 +0200
|
||||
+++ new/build/pkgs/python2/spkg-install 2015-09-16 20:48:51.904555797 +0200
|
||||
@@ -32,7 +32,7 @@
|
||||
done
|
||||
|
||||
# We are setting LDFLAGS so that we pick up Sage's readline
|
||||
-LDFLAGS="-L$SAGE_LOCAL/lib $LDFLAGS"
|
||||
+LDFLAGS="-L$SAGE_LOCAL/lib -lcrypt $LDFLAGS"
|
||||
export LDFLAGS
|
||||
|
||||
if [ "$SAGE_DEBUG" = "yes" ]; then
|
12
pkgs/applications/science/math/sage/spkg-python2.patch
Normal file
12
pkgs/applications/science/math/sage/spkg-python2.patch
Normal file
|
@ -0,0 +1,12 @@
|
|||
--- old/build/pkgs/python2/spkg-install 2017-07-21 14:10:00.000000000 -0500
|
||||
+++ new/build/pkgs/python2/spkg-install 2017-10-15 11:26:54.823134067 -0500
|
||||
@@ -22,6 +22,9 @@
|
||||
|
||||
cd src
|
||||
|
||||
+LDFLAGS="-lcrypt $LDFLAGS"
|
||||
+export LDFLAGS
|
||||
+
|
||||
if [ "$SAGE_DEBUG" = "yes" ]; then
|
||||
echo "Building Python with pydebug"
|
||||
PYTHON_CONFIGURE="$PYTHON_CONFIGURE --with-pydebug"
|
12
pkgs/applications/science/math/sage/spkg-python3.patch
Normal file
12
pkgs/applications/science/math/sage/spkg-python3.patch
Normal file
|
@ -0,0 +1,12 @@
|
|||
--- old/build/pkgs/python3/spkg-install 2017-07-21 14:10:00.000000000 -0500
|
||||
+++ new/build/pkgs/python3/spkg-install 2017-10-15 13:11:17.769261404 -0500
|
||||
@@ -22,6 +22,9 @@
|
||||
|
||||
cd src
|
||||
|
||||
+LDFLAGS="-lcrypt $LDFLAGS"
|
||||
+export LDFLAGS
|
||||
+
|
||||
if [ "$SAGE_DEBUG" = "yes" ]; then
|
||||
echo "Building Python with pydebug"
|
||||
PYTHON_CONFIGURE="$PYTHON_CONFIGURE --with-pydebug"
|
|
@ -1,28 +1,12 @@
|
|||
--- old/build/pkgs/singular/spkg-install 2015-07-26 15:34:43.000000000 +0200
|
||||
+++ new/build/pkgs/singular/spkg-install 2015-09-15 20:42:51.716505855 +0200
|
||||
@@ -115,6 +115,11 @@
|
||||
done
|
||||
}
|
||||
--- old/build/pkgs/singular/spkg-install 2017-10-15 10:35:41.826540964 -0500
|
||||
+++ new/build/pkgs/singular/spkg-install 2017-10-15 10:36:40.613743443 -0500
|
||||
@@ -4,6 +4,9 @@
|
||||
## Singular
|
||||
###########################################
|
||||
|
||||
+nix_nuke_bin_rm()
|
||||
+{
|
||||
+ find . -exec sed -e 's@/bin/rm@rm@g' -i '{}' ';'
|
||||
+}
|
||||
+find . -type f -exec sed -e 's@/bin/rm@rm@g' -i '{}' ';'
|
||||
+#echo '#!/usr/bin/env bash\nIgnoring missing $1' > src/build-aux/missing
|
||||
+
|
||||
remove_old_version()
|
||||
{
|
||||
rm -f "$SAGE_LOCAL"/bin/Singular*
|
||||
@@ -306,11 +311,11 @@
|
||||
|
||||
|
||||
# Actually run all the functions defined above
|
||||
-for i in choose_patches apply_patches remove_old_version config \
|
||||
+for i in choose_patches apply_patches nix_nuke_bin_rm remove_old_version config \
|
||||
build_singular build_libsingular build_factory build_libfac \
|
||||
create_singular_script install_docs ; do
|
||||
echo "### Singular spkg-install: $i ###"
|
||||
- cd "$SRC" && $i
|
||||
+ cd "$SRC" && pwd && $i
|
||||
if [ $? -ne 0 ]; then
|
||||
echo >&2 "Error building Singular (error in $i)."
|
||||
exit 1
|
||||
if [ -z "$SAGE_LOCAL" ]; then
|
||||
echo >&2 "Error: SAGE_LOCAL undefined -- exiting..."
|
||||
echo >&2 "Maybe run 'sage -sh'?"
|
||||
|
|
Loading…
Reference in a new issue