sage: refactor
This commit is contained in:
@@ -1,65 +1,87 @@
|
||||
{ nixpkgs
|
||||
{ pkgs
|
||||
, withDoc ? false
|
||||
}:
|
||||
|
||||
# Here sage and its dependencies are put together. Some dependencies may be pinned
|
||||
# as a last resort. Patching sage for compatibility with newer dependency versions
|
||||
# is always preferred, see `sage-src.nix` for that.
|
||||
|
||||
let
|
||||
inherit (nixpkgs) fetchpatch fetchurl symlinkJoin callPackage nodePackages;
|
||||
inherit (pkgs) fetchurl symlinkJoin callPackage nodePackages_8_x;
|
||||
|
||||
# https://trac.sagemath.org/ticket/15980 for tracking of python3 support
|
||||
python = nixpkgs.python2.override {
|
||||
python = pkgs.python2.override {
|
||||
packageOverrides = self: super: {
|
||||
# python packages that appear unmaintained and were not accepted into the nixpkgs
|
||||
# tree because of that. These packages are only dependencies of the more-or-less
|
||||
# deprecated sagenb. However sagenb is still a default dependency and the doctests
|
||||
# depend on it.
|
||||
# See https://github.com/NixOS/nixpkgs/pull/38787 for a discussion.
|
||||
# The dependency on the sage notebook (and therefore these packages) will be
|
||||
# removed in the future:
|
||||
# https://trac.sagemath.org/ticket/25837
|
||||
flask-oldsessions = self.callPackage ./flask-oldsessions.nix {};
|
||||
flask-openid = self.callPackage ./flask-openid.nix {};
|
||||
python-openid = self.callPackage ./python-openid.nix {};
|
||||
sagenb = self.callPackage ./sagenb.nix {
|
||||
mathjax = nodePackages_8_x.mathjax;
|
||||
};
|
||||
|
||||
# Package with a cyclic dependency with sage
|
||||
pybrial = self.callPackage ./pybrial.nix {};
|
||||
|
||||
# `sagelib`, i.e. all of sage except some wrappers and runtime dependencies
|
||||
sagelib = self.callPackage ./sagelib.nix {
|
||||
inherit flint ecl arb;
|
||||
inherit sage-src openblas-blas-pc openblas-cblas-pc openblas-lapack-pc pynac singular;
|
||||
linbox = nixpkgs.linbox.override { withSage = true; };
|
||||
};
|
||||
|
||||
sagenb = self.callPackage ./sagenb.nix {
|
||||
mathjax = nodePackages.mathjax;
|
||||
};
|
||||
|
||||
sagedoc = self.callPackage ./sagedoc.nix {
|
||||
inherit sage-src;
|
||||
};
|
||||
|
||||
env-locations = self.callPackage ./env-locations.nix {
|
||||
inherit pari_data ecl;
|
||||
inherit singular;
|
||||
three = nodePackages.three;
|
||||
mathjax = nodePackages.mathjax;
|
||||
};
|
||||
|
||||
sage-env = self.callPackage ./sage-env.nix {
|
||||
inherit sage-src python rWrapper openblas-cblas-pc ecl singular palp flint pynac pythonEnv;
|
||||
pkg-config = nixpkgs.pkgconfig; # not to confuse with pythonPackages.pkgconfig
|
||||
};
|
||||
|
||||
sage-with-env = self.callPackage ./sage-with-env.nix {
|
||||
inherit pythonEnv;
|
||||
inherit sage-src openblas-blas-pc openblas-cblas-pc openblas-lapack-pc pynac singular;
|
||||
pkg-config = nixpkgs.pkgconfig; # not to confuse with pythonPackages.pkgconfig
|
||||
three = nodePackages.three;
|
||||
};
|
||||
|
||||
sage = self.callPackage ./sage.nix { };
|
||||
|
||||
sage-wrapper = self.callPackage ./sage-wrapper.nix {
|
||||
inherit sage-src withDoc;
|
||||
linbox = pkgs.linbox.override { withSage = true; };
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# A bash script setting various environment variables to tell sage where
|
||||
# the files its looking fore are located. Also see `sage-env`.
|
||||
env-locations = callPackage ./env-locations.nix {
|
||||
inherit pari_data ecl;
|
||||
inherit singular;
|
||||
cysignals = python.pkgs.cysignals;
|
||||
three = nodePackages_8_x.three;
|
||||
mathjax = nodePackages_8_x.mathjax;
|
||||
};
|
||||
|
||||
# The shell file that gets sourced on every sage start. Will also source
|
||||
# the env-locations file.
|
||||
sage-env = callPackage ./sage-env.nix {
|
||||
sagelib = python.pkgs.sagelib;
|
||||
inherit env-locations;
|
||||
inherit python rWrapper openblas-cblas-pc ecl singular palp flint pynac pythonEnv;
|
||||
pkg-config = pkgs.pkgconfig; # not to confuse with pythonPackages.pkgconfig
|
||||
};
|
||||
|
||||
# The documentation for sage, building it takes a lot of ram.
|
||||
sagedoc = callPackage ./sagedoc.nix {
|
||||
inherit sage-with-env;
|
||||
inherit python;
|
||||
};
|
||||
|
||||
# sagelib with added wrappers and a dependency on sage-tests to make sure thet tests were run.
|
||||
sage-with-env = callPackage ./sage-with-env.nix {
|
||||
inherit pythonEnv;
|
||||
inherit sage-env;
|
||||
inherit openblas-blas-pc openblas-cblas-pc openblas-lapack-pc pynac singular;
|
||||
pkg-config = pkgs.pkgconfig; # not to confuse with pythonPackages.pkgconfig
|
||||
three = nodePackages_8_x.three;
|
||||
};
|
||||
|
||||
# Doesn't actually build anything, just runs sages testsuite. This is a
|
||||
# separate derivation to make it possible to re-run the tests without
|
||||
# rebuilding sagelib (which takes ~30 minutes).
|
||||
# Running the tests should take something in the order of 1h.
|
||||
sage-tests = callPackage ./sage-tests.nix {
|
||||
inherit sage-with-env;
|
||||
};
|
||||
|
||||
# FIXME
|
||||
openblas-blas-pc = callPackage ./openblas-pc.nix { name = "blas"; };
|
||||
openblas-cblas-pc = callPackage ./openblas-pc.nix { name = "cblas"; };
|
||||
openblas-lapack-pc = callPackage ./openblas-pc.nix { name = "lapack"; };
|
||||
@@ -91,9 +113,9 @@ let
|
||||
} // { extraLibs = pythonRuntimeDeps; }; # make the libs accessible
|
||||
|
||||
# needs to be rWrapper, standard "R" doesn't include default packages
|
||||
rWrapper = nixpkgs.rWrapper.override {
|
||||
rWrapper = pkgs.rWrapper.override {
|
||||
# https://trac.sagemath.org/ticket/25674
|
||||
R = nixpkgs.R.overrideAttrs (attrs: rec {
|
||||
R = pkgs.R.overrideAttrs (attrs: rec {
|
||||
name = "R-3.4.4";
|
||||
src = fetchurl {
|
||||
url = "http://cran.r-project.org/src/base/R-3/${name}.tar.gz";
|
||||
@@ -102,44 +124,45 @@ let
|
||||
});
|
||||
};
|
||||
|
||||
arb = nixpkgs.arb.override { inherit flint; };
|
||||
arb = pkgs.arb.override { inherit flint; };
|
||||
|
||||
singular = nixpkgs.singular.override { inherit flint; };
|
||||
singular = pkgs.singular.override { inherit flint; };
|
||||
|
||||
# *not* to confuse with the python package "pynac"
|
||||
pynac = nixpkgs.pynac.override { inherit singular flint; };
|
||||
pynac = pkgs.pynac.override { inherit singular flint; };
|
||||
|
||||
# With openblas (64 bit), the tests fail the same way as when sage is build with
|
||||
# openblas instead of openblasCompat. Apparently other packages somehow use flints
|
||||
# blas when it is available. Alternative would be to override flint to use
|
||||
# openblasCompat.
|
||||
flint = nixpkgs.flint.override { withBlas = false; };
|
||||
flint = pkgs.flint.override { withBlas = false; };
|
||||
|
||||
# Multiple palp dimensions need to be available and sage expects them all to be
|
||||
# in the same folder.
|
||||
palp = symlinkJoin {
|
||||
name = "palp-${nixpkgs.palp.version}";
|
||||
name = "palp-${pkgs.palp.version}";
|
||||
paths = [
|
||||
(nixpkgs.palp.override { dimensions = 4; doSymlink = false; })
|
||||
(nixpkgs.palp.override { dimensions = 5; doSymlink = false; })
|
||||
(nixpkgs.palp.override { dimensions = 6; doSymlink = true; })
|
||||
(nixpkgs.palp.override { dimensions = 11; doSymlink = false; })
|
||||
(pkgs.palp.override { dimensions = 4; doSymlink = false; })
|
||||
(pkgs.palp.override { dimensions = 5; doSymlink = false; })
|
||||
(pkgs.palp.override { dimensions = 6; doSymlink = true; })
|
||||
(pkgs.palp.override { dimensions = 11; doSymlink = false; })
|
||||
];
|
||||
};
|
||||
|
||||
# Sage expects those in the same directory.
|
||||
pari_data = symlinkJoin {
|
||||
name = "pari_data";
|
||||
paths = with nixpkgs; [
|
||||
paths = with pkgs; [
|
||||
pari-galdata
|
||||
pari-seadata-small
|
||||
];
|
||||
};
|
||||
|
||||
# https://trac.sagemath.org/ticket/22191
|
||||
ecl = nixpkgs.ecl_16_1_2;
|
||||
ecl = pkgs.ecl_16_1_2;
|
||||
in
|
||||
python.pkgs.sage-wrapper // {
|
||||
doc = python.pkgs.sagedoc;
|
||||
lib = python.pkgs.sagelib;
|
||||
}
|
||||
# A wrapper around sage that makes sure sage finds its docs (if they were build).
|
||||
callPackage ./sage.nix {
|
||||
inherit sage-tests sage-with-env sagedoc;
|
||||
inherit withDoc;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user