Change:
Sage needs texlive-core-2014, which is deprecated. Run with modern nixpkgs (i.e. from git) System: NixOS: (Flounder) Nix version: nix-env (Nix) 1.11.2 Nixpkgs version:

Discussion:
ThomasMader = "Thomas Mader <thomas.mader@gmail.com>"; thoughtpolice = "Austin Seipp <aseipp@pobox.com>"; timbertson = "Tim Cuthbertson <tim@gfxmonk.net>"; <ins> timokau = "Timo Kaufmann <timokau@zoho.com>"; </ins> titanous = "Jonathan Rudenberg <jonathan@titanous.com>"; tnias = "Philipp Bartsch <phil@grmr.de>"; tohl = "Tomas Hlavaty <tom@logand.com>";

<del> { stdenv, fetchurl, m4, perl, gfortran, texlive, ffmpeg, tk, gnused_422 , imagemagick, liblapack, python, openssl, libpng </del> <ins> # 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 </ins> , which <ins> , texlive , hevea </ins> }: stdenv.mkDerivation rec { <del> name = "sage-6.8"; </del> <ins> version = "8.0"; name = "sage-${version}"; </ins> src = fetchurl { <del> url = "http://old.files.sagemath.org/src-old/${name}.tar.gz"; sha256 = "102mrzzi215g1xn5zgcv501x9sghwg758jagx2jixvg1rj2jijj9"; </del> <ins> # 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"; </ins> }; <del> buildInputs = [ m4 perl gfortran texlive.combined.scheme-basic ffmpeg gnused_422 tk imagemagick liblapack python openssl libpng which ]; </del> <ins> postPatch = '' substituteAllInPlace src/bin/sage-env ''; </ins> <del> patches = [ ./spkg-singular.patch ./spkg-python.patch ./spkg-git.patch ]; </del> <ins> 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 ]; </ins> enableParallelBuilding = true; <del> hardeningDisable = [ "format" ]; </del> <ins> 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 ]; </ins> preConfigure = '' export SAGE_NUM_THREADS=$NIX_BUILD_CORES export SAGE_ATLAS_ARCH=fast <del> mkdir -p $out/sageHome export HOME=$out/sageHome export CPPFLAGS="-P" </del> <ins> 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-"* </ins> ''; <del> preBuild = "patchShebangs build"; </del> <ins> # 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; </ins> <del> installPhase = ''DESTDIR=$out make install''; </del> <ins> checkTarget = "ptestalllong"; # all long tests in parallell preCheck = '' export SAGE_TIMEOUT=0 # no timeout export SAGE_TIMEOUT_LONG=0 # no timeout ''; </ins> meta = { homepage = http://www.sagemath.org; description = "A free open source mathematics software system"; <ins> # 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. ''; </ins> license = stdenv.lib.licenses.gpl2Plus; <del> broken = true; </del> <ins> platforms = stdenv.lib.platforms.linux; maintainers = with stdenv.lib.maintainers; [ timokau ]; </ins> }; }

<ins> 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. </ins>

<ins> #! /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/' </ins>

<ins> --- 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"; </ins>

<del> --- 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 </del> <ins> 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 </ins> <del> +find . -exec sed -e 's@/usr/bin/perl@perl@g' -i '{}' ';' </del> <ins> cd src +find . -type f -exec sed -e 's@/usr/bin/perl@perl@g' -i '{}' ';' </ins> + # We don't want to think about Fink or Macports export NO_FINK=1

<del> --- 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 </del>

<ins> --- 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" </ins>

<ins> --- 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" </ins>

<del> --- 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 } </del> <ins> --- 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 ########################################### </ins> <del> +nix_nuke_bin_rm() +{ +    find . -exec sed -e 's@/bin/rm@rm@g' -i '{}' ';' +} </del> <ins> +find . -type f -exec sed -e 's@/bin/rm@rm@g' -i '{}' ';' +#echo '#!/usr/bin/env bashnIgnoring missing $1' > src/build-aux/missing </ins> + <del> 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 </del> <ins> if [ -z "$SAGE_LOCAL" ]; then echo >&2 "Error: SAGE_LOCAL undefined -- exiting..." echo >&2 "Maybe run 'sage -sh'?" </ins>