You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
GAP 4.10 comes with a completely rewritten build system that will simplify
our packaging. In particular, libGAP no longer needs to be a separate package.
What the branch does:
Remove the libgap spkg
Update the gap spkg to the new build system and build and install libgap
Replace gap.shi.patch by a plain gap startup script for Sage
Rationale: GAP used to provide a startup shell script. The GAP devs
are in the process of getting rid of it and provide a very minimal
one. They recommend to just write our own rather than patching it.
Update a few doctests w.r.t. changes of output of some GAP functions
Reworks how gap is installed in $SAGE_LOCAL: Rather than installing the entire source tree we just install the gap and libgap binaries to standard locations, and add a $SAGE_LOCAL/share/gap containing the GAP_ROOT_DIR which is stripped down to the minimum needed for GAP to work (standard libs and packages, docs, as well as the source code for introspection of kernel functions, but all build artifacts are carefully omitted).
Some of how this is done is still broken w.r.t. building compiled packages; need to work on it a bit more.
Possibly controversial: The new libgap currently 'does not come' with symbol rewriting (foobar -> libGAP_foobar). This avoids messing around with GAP's sources; in particular opening the door for using a stock GAP from the OS distribution. However there always is a risk of name conflicts. And indeed, GAP's enums T_INT, T_FLOAT, ... conflict with Python's constants defined in structmember.h. This is hopefully not actually a problem in practice due to the way how Cython orders includes.
Removes configure.patch: it was patching configure for better GMP
detection under Cygwin (New Gap spkg (>=4.5) does not build with shared only GMP/MPIR #13954). This should not be needed anymore
with the new build system and use of --with-gmp. If it is, upstream
asked for it to be reported and they will fix it.
Removes additional patches for now--we would like to focus on being
able to work with a system GAP as much as possible.
Currently broken - crashes deep inside GAP error handling system after few simple commands.
Basic tests on libgap:
sage: libgap.eval("GAPInfo.Version")
sage: libgap.DihedralGroup(10).CharacterTable()
CharacterTable( <pc group of size 10 with 2 generators> )
sage: libgap.Group(libgap.eval("[(1,2,3),(1,2)]")).Size()
6
Running most relevant tests:
sage -tp 8 sage/groups sage/libs/gap
Current status: lots of errors
Still have some miscellaneous segfaults and other weird crashes
Still have work to do on improving error handling; replacing the built-in ErrorInner function might help here.
SIGINT handling by Python is broken by GAP_Intialize; need to work around this.
Testing packages with dynamic loading (e.g. IO):
Install IO:
cd $SAGE_LOCAL/share/gap/pkg
wget https://www.gap-system.org/pub/gap/gap4/tar.gz/packages/io-4.5.4.tar.gz
tar xvf io-4.5.4.tar.gz
cd io-4.5.4
./configure --with-gaproot=../..
make
Test it locally:
cd $SAGE_ROOT
gap
gap> LoadPackage("IO");
true
This does not yet work:
#W dlopen() error: /home/embray/src/sagemath/sage/local/share/gap/pkg/io-4.5.4/bin/x86_64-pc-linux-gnu-default64/io.so: undefine\
d symbol: ChangedBags
Error, module '/home/embray/src/sagemath/sage/local/share/gap/pkg/io-4.5.4/bin/x86_64-pc-linux-gnu-default64/io.so' not found
Error, was not in any namespace
Syntax warning: Unbound global variable in /home/embray/src/sagemath/sage/local/share/gap/lib/init.g:803
ColorPrompt( UserPreference( "UseColorPrompt" ) );
^
Error, SetGasmanMessageStatus: function is not yet defined
true
This should be fixed once GAP's gap binary is built on top of libgap.
See: markuspf/gap#1 I believe this is fixed, but there are still some problems with the way this ticket is "installing" GAP for $SAGE_LOCAL.
Note:
Max Horn reviewed the list of GAP symbols we use in Sage; some have already changed in 4.9. See this pad for notes.
Upstream PRs
A few pull requests we made to improve use of GAP as a library:
GAP 4.10 comes with a completely rewritten build system that will simplify
our packaging. In particular, libGAP no longer needs to be a separate package.
What the branch does:
Remove the libgap spkg
Update the gap spkg to the new build system and build and install libgap
Replace
gap.shi.patchby a plain gap startup script for SageRationale: GAP used to provide a startup shell script. The GAP devs
are in the process of getting rid of it and provide a very minimal
one. They recommend to just write our own rather than patching it.
Update a few doctests w.r.t. changes of output of some GAP functions
Reworks how gap is installed in
$SAGE_LOCAL: Rather than installing the entire source tree we just install thegapandlibgapbinaries to standard locations, and add a$SAGE_LOCAL/share/gapcontaining theGAP_ROOT_DIRwhich is stripped down to the minimum needed for GAP to work (standard libs and packages, docs, as well as the source code for introspection of kernel functions, but all build artifacts are carefully omitted).foobar->libGAP_foobar). This avoids messing around with GAP's sources; in particular opening the door for using a stock GAP from the OS distribution. However there always is a risk of name conflicts. And indeed, GAP's enumsT_INT,T_FLOAT, ... conflict with Python's constants defined instructmember.h. This is hopefully not actually a problem in practice due to the way how Cython orders includes.Something similar was started by Volker at Unprefixed libgap #19915.
Removes configure.patch: it was patching configure for better GMP
detection under Cygwin (New Gap spkg (>=4.5) does not build with shared only GMP/MPIR #13954). This should not be needed anymore
with the new build system and use of --with-gmp. If it is, upstream
asked for it to be reported and they will fix it.
Removes additional patches for now--we would like to focus on being
able to work with a system GAP as much as possible.
Revert GAP: use newer version of config.guess #19726 (not needed anymore)
Status
Currently broken - crashes deep inside GAP error handling system after few simple commands.
Basic tests on libgap:
Running most relevant tests:
Current status: lots of errors
Still have some miscellaneous segfaults and other weird crashes
Still have work to do on improving error handling; replacing the built-in
ErrorInnerfunction might help here.SIGINT handling by Python is broken by
GAP_Intialize; need to work around this.Testing packages with dynamic loading (e.g. IO):
Install IO:
Test it locally:
This does not yet work:
This should be fixed once GAP's gap binary is built on top of libgap.
See: markuspf/gap#1 I believe this is fixed, but there are still some problems with the way this ticket is "installing" GAP for
$SAGE_LOCAL.Note:
Upstream PRs
A few pull requests we made to improve use of GAP as a library:
Other open issues that don't have PRs yet:
Some other PRs useful to this effort:
The update of gap_packages and database_gap is on #26856
Tarball: https://www.gap-system.org/pub/gap/gap-4.10/tar.gz/gap-4.10.0.tar.gz
Depends on #26874
CC: @alex-konovalov @dimpase @embray @kiwifb @antonio-rojas @sebasguts @jpflori @sagetrac-markuspf @nthiery @slel @vbraun @williamstein @timokau
Component: interfaces
Keywords: days85, libgap
Stopgaps: error handling in libgap, documentation display
Author: Nicolas M. Thiéry, Dima Pasechnik, Erik Bray, Jeroen Demeyer
Branch:
b446ebbReviewer: Erik Bray, Dima Pasechnik, Jeroen Demeyer
Issue created by migration from https://trac.sagemath.org/ticket/22626