Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: NixOS/nixpkgs
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 2d2f85876ae4
Choose a base ref
...
head repository: NixOS/nixpkgs
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 0c23fa9aaffa
Choose a head ref
  • 7 commits
  • 18 files changed
  • 1 contributor

Commits on Nov 24, 2018

  1. sage: drop unused patches

    timokau committed Nov 24, 2018

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    ca6475b View commit details
  2. sage: drop known-padics-failure patch

    The failure was not observed for a while and is probably fixed now.
    timokau committed Nov 24, 2018
    Copy the full SHA
    9b4a518 View commit details
  3. sage: refactor

    timokau committed Nov 24, 2018
    Copy the full SHA
    3832dde View commit details
  4. sage: remove openblas hack

    The pc files have since been included into the openblas package.
    timokau committed Nov 24, 2018
    Copy the full SHA
    21f9123 View commit details
  5. sage: add some flexibility to the test runner

    Make it possible to run individual tests. This is very useful while
    git-bisecting.
    timokau committed Nov 24, 2018
    Copy the full SHA
    e28a8ed View commit details
  6. sage: don't fix node version

    timokau committed Nov 24, 2018
    Copy the full SHA
    a0723f1 View commit details
  7. Merge pull request #50998 from timokau/sage-refactor

    Sage refactor
    timokau authored Nov 24, 2018
    Copy the full SHA
    0c23fa9 View commit details
41 changes: 1 addition & 40 deletions pkgs/applications/science/math/sage/README.md
Original file line number Diff line number Diff line change
@@ -2,46 +2,7 @@

Sage is a pretty complex package that depends on many other complex packages and patches some of those. As a result, the sage nix package is also quite complex.

Don't feel discouraged to fix, simplify or improve things though. Here's a quick overview over the functions of the individual files:

- `sage-src.nix`
Downloads the source code and applies patches. This makes sure that all the other files work with the same sage source. If you want to apply a patch to sage or update sage to a new version, this is the place to do it.

- `env-locations.nix`
Creates a bash file that sets a bunch of environment variables telling sage where to find various packages and files. The definitions of those environment variables can be found in the sage source in the `src/env.py` file. This bash file needs to be sourced before sage is started (done in `sage-env.nix` and `sagedoc.nix`).

- `sage-env.nix`
Sets all environment variables sage needs to run. This includes the package locations defined in `env-locations.nix` as well as the location of sage itself and its various subdirectories.

- `sagelib.nix`
Defines the main sage package (without setting the necessary environments or running any tests).

- `sage-with-env.nix`
Wraps sage in the necessary environment.

- `sage.nix`
Runs sages doctests.

- `sage-wrapper.nix`
Optionally tells sage where do find the docs.

- `sagedoc.nix`
Builds and tests the sage html documentation. Can be used for offline documentation viewing as well as the sage `browse_sage_doc` and `search_doc` functions.

- `sagenb.nix`
The (semi deprecated) sage notebook.

- `default.nix`
Introduces necessary overrides, defines new packages and ties everything together (returning the `sage` package).

- `flask-oldsessions.nix`, `flask-openid.nix`, `python-openid.nix`
These are python packages that were rejected from the main nixpkgs tree because they appear unmaintained. They are needed for the (semi-deprecated) sage notebook. Since that notebook is still needed to run the sage doctests, these packages are included but not exposed to the rest of nixpkgs.

- `pybrial.nix`
pybrial is a dependency of sage. However, pybrial itself also has sage as a dependency. Because of that circular dependency, pybrial is hidden from the rest of nixpkgs (just as the flask packages and python-openid.

- `openblas-pc.nix`
This creates a `.pc` file to be read by `pkg-config` that allows openblas to take on different roles, like `cblas` or `lapack`.
Don't feel discouraged to fix, simplify or improve things though. The individual files have comments explaining their purpose. The most importent ones are `default.nix` linking everything together, `sage-src.nix` adding patches and `sagelib.nix` building the actual sage package.

## The sage build is broken

128 changes: 73 additions & 55 deletions pkgs/applications/science/math/sage/default.nix
Original file line number Diff line number Diff line change
@@ -1,68 +1,85 @@
{ 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;

# 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 {};

pybrial = self.callPackage ./pybrial.nix {};

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;
};
# Package with a cyclic dependency with sage
pybrial = self.callPackage ./pybrial.nix {};

env-locations = self.callPackage ./env-locations.nix {
inherit pari_data ecl;
inherit singular;
three = nodePackages.three;
mathjax = nodePackages.mathjax;
# `sagelib`, i.e. all of sage except some wrappers and runtime dependencies
sagelib = self.callPackage ./sagelib.nix {
inherit flint ecl arb;
inherit sage-src pynac singular;
linbox = pkgs.linbox.override { withSage = true; };
};
};
};

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
};
# 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.three;
mathjax = nodePackages.mathjax;
};

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;
};
# 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 ecl singular palp flint pynac pythonEnv;
pkg-config = pkgs.pkgconfig; # not to confuse with pythonPackages.pkgconfig
};

sage = self.callPackage ./sage.nix { };
# The documentation for sage, building it takes a lot of ram.
sagedoc = callPackage ./sagedoc.nix {
inherit sage-with-env;
inherit python;
};

sage-wrapper = self.callPackage ./sage-wrapper.nix {
inherit sage-src withDoc;
};
};
# 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 pynac singular;
pkg-config = pkgs.pkgconfig; # not to confuse with pythonPackages.pkgconfig
three = nodePackages.three;
};

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"; };
# 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;
};

sage-src = callPackage ./sage-src.nix {};

@@ -91,9 +108,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 +119,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;
}
2 changes: 2 additions & 0 deletions pkgs/applications/science/math/sage/env-locations.nix
Original file line number Diff line number Diff line change
@@ -16,6 +16,8 @@
, cysignals
}:

# A bash script setting various environment variables to tell sage where
# the files its looking fore are located. Also see `sage-env`.
writeTextFile rec {
name = "sage-env-locations";
destination = "/${name}";
17 changes: 0 additions & 17 deletions pkgs/applications/science/math/sage/openblas-pc.nix

This file was deleted.

16 changes: 0 additions & 16 deletions pkgs/applications/science/math/sage/patches/eclib-20180710.patch

This file was deleted.

This file was deleted.

Loading