Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
1# Sage on nixos 2 3Sage 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. 4 5Don't feel discouraged to fix, simplify or improve things though. The individual files have comments explaining their purpose. The most important ones are `default.nix` linking everything together, `sage-src.nix` adding patches and `sagelib.nix` building the actual sage package. 6 7## The sage build is broken 8 9First you should find out which change to nixpkgs is at fault (if you don't already know). You can use `git-bisect` for that (see the manpage). 10 11If the build broke as a result of a package update, try those solutions in order: 12 13- search the [sage GitHub repo](https://github.com/sagemath/sage) for keywords like "Upgrade <package>". Maybe somebody has already proposed a patch that fixes the issue. You can then add a `fetchpatch` to `sage-src.nix`. 14 15- check if [gentoo](https://github.com/cschwan/sage-on-gentoo/tree/master/sci-mathematics/sage), [debian](https://salsa.debian.org/science-team/sagemath/tree/master/debian) or [arch linux](https://git.archlinux.org/svntogit/community.git/tree/trunk?h=packages/sagemath) already solved the problem. You can then again add a `fetchpatch` to `sage-src.nix`. If applicable you should also propose the patch upstream. 16 17- fix the problem yourself. First clone the sagemath source and then check out the sage version you want to patch: 18 19``` 20[user@localhost ~]$ git clone https://github.com/sagemath/sage.git 21[user@localhost ~]$ cd sage 22[user@localhost sage]$ git checkout 9.8 # substitute the relevant version here 23``` 24 25Then make the needed changes and generate a patch with `git diff`: 26 27``` 28[user@localhost ~]$ <make changes> 29[user@localhost ~]$ git diff -u > /path/to/nixpkgs/pkgs/applications/science/math/sage/patches/name-of-patch.patch 30``` 31 32Now just add the patch to `sage-src.nix` and test your changes. If they fix the problem, submit a PR upstream (refer to sages [Developer's Guide](http://doc.sagemath.org/html/en/developer/index.html) for further details). 33 34- pin the package version in `default.nix` and add a note that explains why that is necessary. 35 36## I want to update sage 37 38You'll need to change the `version` field in `sage-src.nix`. Afterwards just try to build and let nix tell you which patches no longer apply (hopefully because they were adopted upstream). Remove those. 39 40Hopefully the build will succeed now. If it doesn't and the problem is obvious, fix it as described in [The sage build is broken](#the-sage-build-is-broken). 41If the problem is not obvious, you can try to first update sage to an intermediate version (remember that you can also set the `version` field to any git revision of sage) and locate the sage commit that introduced the issue. You can even use `git-bisect` for that (it will only be a bit tricky to keep track of which patches to apply). Hopefully after that the issue will be obvious. 42 43## Well, that didn't help! 44 45If you couldn't fix the problem, create a GitHub issue on the nixpkgs repo and ping the sage maintainers (as listed in the sage package). 46Describe what you did and why it didn't work. Afterwards it would be great if you help the next guy out and improve this documentation!