Ask Your Question
1

Unable to build sage with Python 2

asked 2018-07-12 18:34:50 +0200

number123 gravatar image

updated 2018-07-12 19:37:52 +0200

I set export SAGE_CHECK="yes" to run tests on the spkgs before running make -j5. This gives me another build breaking error, despite using python 2 to build sage

Sage version: 8.3rc0 OS fedora 28 linux_86_x64

Last section from ppl-1.2.p1.log or see pastebin:

In file included from ../../src/Pointset_Powerset_defs.hh:1454,
                 from ../../src/algorithms.hh:28,
                 from ../../src/ppl_include_files.hh:18,
                 from ../../src/ppl_header.hh:38,
                 from ../../tests/ppl_test.hh:27,
                 from equals1.cc:25:
../../src/Pointset_Powerset_templates.hh: In instantiation of 'Parma_Polyhedra_Library::Pointset_Powerset<PSET>::Pointset_Powerset(const Parma_Polyhedra_Library::Pointset_Powerset<QH>&, Parma_Polyhedra_Library::Complexity_Class) [with QH = Parma_Polyhedra_Library::Box<Parma_Polyhedra_Library::Interval<__gmp_expr<__mpq_struct [1], __mpq_struct [1]>, Parma_Polyhedra_Library::Interval_Info_Bitset<unsigned int, Parma_Polyhedra_Library::Test::Rational_Real_Open_Interval_Info_Policy> > >; PSET = Parma_Polyhedra_Library::NNC_Polyhedron]':
../../src/Pointset_Powerset_inlines.hh:262:43:   required from 'bool Parma_Polyhedra_Library::Pointset_Powerset<PSET>::geometrically_equals(const 

Parma_Polyhedra_Library::Pointset_Powerset<PSET>&) const [with PSET = 
Parma_Polyhedra_Library::Box<Parma_Polyhedra_Library::Interval<__gmp_expr<__mpq_struct [1], __mpq_struct [1]>, Parma_Polyhedra_Library::Interval_Info_Bitset<unsigned int, Parma_Polyhedra_Library::Test::Rational_Real_Open_Interval_Info_Policy> > >]'
    equals1.cc:44:50:   required from here

../../src/Pointset_Powerset_templates.hh:66:29: internal compiler error: in type_dependent_expression_p, at cp/pt.c:25100
          y_end = y.end(); i != y_end; ++i) {
                           ~~^~~~~~~~
    Please submit a full bug report,
    with preprocessed source if appropriate.
    See <http://bugzilla.redhat.com/bugzilla> for instructions.
    Preprocessed source stored into /tmp/ccb8H3zx.out file, please attach this to your bugreport.
    make[7]: *** [Makefile:1245: equals1.o] Error 1
    ************************************************************************
    Error testing package ppl-1.2.p1
    ********

edit retag flag offensive close merge delete

Comments

Which OS ? which sage version ? which environment variables ? pointer to the whole log ?

tmonteil gravatar imagetmonteil ( 2018-07-12 18:47:44 +0200 )edit

Linux federa 28. The only environment variables I set are SAGE_CHECK and MAKE. I will have put the log file on pastebin.

number123 gravatar imagenumber123 ( 2018-07-12 19:10:27 +0200 )edit

To skip testing for ppl, set SAGE_CHECK_PACKAGES='!python2,!python3,!ppl'. (The Python 2 and Python 3 packages are known to fail their tests.) It is worth knowing which packages build (should be all of them), which pass their test suites (looks like ppl fails on your system, and it would also be good to know the version of gcc on your machine), and whether Sage's doctests pass (run make ptestlong to run them all).

John Palmieri gravatar imageJohn Palmieri ( 2018-07-12 19:35:01 +0200 )edit

@John Palmierigcc (GCC) 8.1.1 20180502 (Red Hat 8.1.1-1). I read on the github page that python test suite is already disabled, quote:

"Python's test suite has been disabled by default, because it causes failures on most systems. To renable the Python testsuite, set the environment variable SAGE_CHECK_PACKAGES to "python"

  • What do I have to do before running make again?
  • And should i run make ptestlong before running make -j5 or after it?
  • PPL is for numerical optimisation, is it not a bad idea to skip tests for it?
  • What's the difference between make ptest and make ptestlong? Doesn't the latter test external dependencies like maple etc
number123 gravatar imagenumber123 ( 2018-07-12 19:41:22 +0200 )edit

You should be able to run make again and it should pick up where it left off. make ptestlong first builds Sage (if necessary) and then runs its tests, so you can do that (actually make -j5 ptestlong) instead of make -j5.

Using SAGE_CHECK=yes at all is optional; the hope is that Sage's use of each component package is tested in Sage's own test suite. In the case of ppl, it looks like some compiler incompatibility: gcc 8 is pretty new. So such a test failure is not necessarily a catastrophe.

You run the basic tests with make ptest; some other tests take a longer time to run, and they are only run with make ptestlong. Neither one tests optional external packages like maple unless you explicitly ask them too.

John Palmieri gravatar imageJohn Palmieri ( 2018-07-12 20:06:13 +0200 )edit

To add to my first bullet point, shouldn't you run make distclean before running make again or make -j5 ptestlong especially when a build fails?

number123 gravatar imagenumber123 ( 2018-07-12 20:13:59 +0200 )edit

If the build fails because of the value of SAGE_CHECK, for example, there is no need to do make distclean: that will only delete parts which successfully built. (If a component fails to build, it should not get installed, and it should therefore not pollute the build.) So you should just be able to run make again, after modifying SAGE_CHECK or other relevant variables.

John Palmieri gravatar imageJohn Palmieri ( 2018-07-12 20:35:09 +0200 )edit

Well, make -j5 ptestlong didn't work, it caused an error unless I ran make distclean first and now make -j5 ptestlong is saying I don't have a maths library.

Edit: Your method would have worked (The clue why it didn't work is below.)

checking whether make -j5 ptestlong sets $(MAKE)... no
checking whether make -j5 ptestlong supports nested variables... no

I was setting the environment variable export MAKE="make -j5 ptestlong" thinking that by running make it would execute this command. I was wrong because the message above shows that it doesn't set make. This works only when the ptestlong command is excluded which raises the suspicion that MAKE takes only one command. The way to do it is to run the command make -j5 ptestlong directly in the command line.

number123 gravatar imagenumber123 ( 2018-07-13 11:35:33 +0200 )edit

The standard thing to do is export MAKE="make -j5" and then run make ptestlong.

John Palmieri gravatar imageJohn Palmieri ( 2018-07-13 16:34:24 +0200 )edit

Yes that's how I should have done it. make -j5 ptestlong has been running for nearly 5 hours now. Its been stuck on the part below for almost an hour now:

[dochtml] [thematic_] dumping object inventory... done
[dochtml] [thematic_] build succeeded.
[dochtml] [thematic_] The HTML pages are in ../inst/share/doc/sage/html/en/thematic_tutorials.
[dochtml] Build finished. The built documents can be found in /home/user/sagemath/inst/share/doc/sage/html/en/thematic_tutorials
[dochtml] Elapsed time: 1729.2 seconds.
[dochtml] Done building the documentation!

There is no prompt but the cursor is still blinking. My system still sounds like its on full throttle and ps -ef | grep -i make shows that this process is still running. Is this normal or is something wrong?

number123 gravatar imagenumber123 ( 2018-07-13 16:54:13 +0200 )edit

Something is wrong.

John Palmieri gravatar imageJohn Palmieri ( 2018-07-13 17:55:11 +0200 )edit

@John Palmieri I managed to get it working. I had to run make ptest and all tests passed successfully, something must have been wrong with make ptest long. Now I can start using sage for math. I want to add sage to my PATH so I can run it from anywhere. Initially I wanted to add $HOME/sage/inst/bin to my PATH but this directory contains executables and symbolic links for a lot of programs such as python 2 and python 3. Would doing this cause conflicts with my system installed python? If so then is adding the SAGE_ROOT directory i.e. $HOME/sage/src/sage a better option?

number123 gravatar imagenumber123 ( 2018-07-13 23:46:00 +0200 )edit

Note that it should be make ptestlong, not make ptest long. Anyway, adding SAGE_ROOT to your path is the better option than adding the bin directory to your path. Or you can create a symbolic link pointing to the script SAGE_ROOT/sage. (That's what I do: /usr/local/bin/sage is a symlink pointing to SAGE_ROOT/sage.)

John Palmieri gravatar imageJohn Palmieri ( 2018-07-14 16:29:52 +0200 )edit

Yes I decided not to go my usual way of adding bin to PATH. The symbolic link is actually very convenient and I will use it a lot more from now on. And thanks for enlightening me on sage and the installation process.

number123 gravatar imagenumber123 ( 2018-07-14 22:00:13 +0200 )edit

1 Answer

Sort by ยป oldest newest most voted
1

answered 2018-07-12 20:03:34 +0200

slelievre gravatar image

updated 2018-07-12 20:07:11 +0200

The most usual way to build Sage is to unpack the tarball, optionally set MAKE='make -jN' with N of your choice (usually 2, 4, 8 depending on the number of cpu cores available), and run make.

Running make test, make ptest, make testlong or make ptestlong is an extra step to check whether all examples and tests in Sage's documentation give the expected output. Not every one goes to that trouble.

Setting SAGE_CHECK is an even further step whose effect is, for each package shipped by Sage, to run the tests provided by that package (independent of Sage). I would guess that even less people set SAGE_CHECK than run make ptestlong.

Thanks for caring, and please report any bugs you encounter.

edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 2018-07-12 18:34:50 +0200

Seen: 418 times

Last updated: Jul 12 '18