Opened 19 months ago

Last modified 5 months ago

#29711 new enhancement

sagelib setup.py: Dependencies on header files of packages — at Version 3

Reported by: mkoeppe Owned by:
Priority: major Milestone: sage-9.5
Component: build Keywords:
Cc: dimpase, charpent, mjo, gh-kliem Merged in:
Authors: Reviewers:
Report Upstream: N/A Work issues:
Branch: Commit:
Dependencies: Stopgaps:

Status badges

Description (last modified by mkoeppe)

Rebuilds should be triggered when headers of relevant packages change.

In setup.py (after #29702, sage_setup.command.sage_build_cython) we have:

# Do not put all, but only the most common libraries and their headers
# (that are likely to change on an upgrade) here:
# [At least at the moment. Make sure the headers aren't copied with "-p",
# or explicitly touch them in the respective spkg's spkg-install.]
lib_headers = { "gmp":     [ os.path.join(SAGE_INC, 'gmp.h') ],   # cf. #8664, #9896
                "gmpxx":   [ os.path.join(SAGE_INC, 'gmpxx.h') ],
                "ntl":     [ os.path.join(SAGE_INC, 'NTL', 'config.h') ]
              }

Except for this (which is much too limited and also needs updating in light of the spkg-configure mechanism), we do not have dependency tracking for sagelib. Neither of distutils, setuptools, cython seem to have a mechanism for generating dependencies like gcc -M. This would be certainly be nice to have; in particular if it included dependencies on "system" headers and libraries, so that sagelib could automatically rebuild when system headers/libraries change (as in, most recently, ​https://groups.google.com/d/msg/sage-release/A53tGGsJNLg/uA01oUugAQAJ).

(from #29411)

Change History (3)

comment:1 Changed 19 months ago by mkoeppe

  • Description modified (diff)

comment:2 Changed 19 months ago by mjo

What you really want to do here is rebuild sagelib whenever the public API of a dependency changes in a backwards-incompatible way. We devised "subslots" in Gentoo for the purpose of telling the package manager when it needs to rebuild. The documentation looks complicated but the basic idea is that we're copy/pasting the major component of the soname into the ebuild. When it changes, the package manager knows to rebuild the things that depend on it.

Rebuilding whenever any header of any dependency changes is an OK way to fake it, but it's going to trigger unnecessary sagelib rebuilds frequently.

comment:3 Changed 18 months ago by mkoeppe

  • Description modified (diff)
Note: See TracTickets for help on using tickets.