Hi, we're trying to package Sage 7.4 for Debian and are running into a difficulty. This will affect not just Debian, but all buildsystems / distributions that want to (1) run tests at build-time, before installation and (2) don't allow extra installations or network access *during* the build of a single component. This is the vast majority of buildsystems. Here, a run-time dependency is a test-time dependency is a build-time dependency (in the general case).
Notably, Sage's own buildsystem does not have restrictions (1) and (2) - one can build sagelib, build fpylll, install fpylll, then test sagelib. However, most buildsystems do not do this and/or can't do this, for various reasons. I don't want to get into a detailed discussion about whether these are good or bad reasons, I just want to point out this is reality today. So in effect, the situation with Sage 7.4 is that there will a circular dependency when trying to package it in most distributions, even if this circular dependency does not exist in Sage-the-distribution's own Makefiles. I am not arguing against post-install tests. Post-install tests are a good thing, and Debian is encouraging more of them these days. But we still *also* want pre-install tests. The reason is that these have a much smaller write-run-fix development feedback loop, which are easier to work with - one doesn't have to mentally context switch so much. Post-install tests are good as a "final check", but they are awkward to work with as the primary check, at least for Debian and many other distros / build systems. We can do "pre-install tests" with Sage 7.3, by doing a "dummy install" using Sage's Makefiles, running the tests here, then installing them to the "real location". (This requires some patching, but we have achieved this already and it works.) However with Sage 7.4 this is not possible, due to the fpylll situation. Packages in Debian (and most other buildsystems) are built and tested as distinct units, we can't build A, install A, build B, install B, then test A. One straw-man way to resolve this is to move the tests into a separate Debian package "sagemath-distribution". However, this makes the workflow very awkward for us, especially when it comes to distributing binary packages. Debian has automated build systems that build things on architectures that the developer doesn't have access to. We would have to build sage-library, upload it, wait for the automated systems to build it and distribute it, then if this is succesful on all architectures, only then can we upload sagemath-distribution to run the actual run-time tests. If any of these fail, we have to start the whole loop again. Since 99% of the tests in Sage-the-distribution are actually for code that belongs in Sage-the-libary (and the other 1% is for SageNB), it is much easier to run the tests as part of the Sage-the-library Debian package - one doesn't have to mentally context-switch so much. Yes, metapackages also exist in Debian and other distros, but these packages don't have their own tests; their dependencies test themselves, and the metapackage "does" nothing. Let me further assure you that this is not a problem unique to Debian: if you guys ever convert sagelib into an spkg and have Sage-the-distribution download this as an external dependency (I see that #21507 goes in this direction), you will experience this pain yourselves. My guess is you will then very likely add an exception into Sage-the-distribution to use a local development copy of sagelib, to reduce the write-run-fix loop time. Another problem is that, if in the future someone creates a new project X, that depends on fpylll-without-Sage, and Sage later wants to use project X, you will have to build and install two flavours of fpylll. The previous straw-man resolution is totally useless here - it is a straw-man workaround for distros, but this problem directly affects Sage itself regardless of what distros do. So, a much better alternative of resolving the fpylll issue would be to not have fpylll build-depend on Sage. (1) I can see that it's possible to build fpylll without Sage, it will just have a different API. Could we patch Sage-the-library to use fpylll-without-Sage, then have Sage itself convert the non-Sage integers into Sage integers? (2) In the long run, one can think about splitting out sage.rings.integers (and related things) into a small library "sage-types" or something like that. Then sagelib and fpylll can depend on this, and there would be no circular dependency, even when Debian or other distros try to build it. So, what are the problems with (1)? If there are no problems, could we patch this *before* Sage 7.4 is released? I would be happy to write the patch myself, but guidance on where to start would also be much appreciated. X -- GPG: ed25519/56034877E1F87C35 GPG: rsa4096/1318EFAC5FBBDBCE https://github.com/infinity0/pubkeys.git -- You received this message because you are subscribed to the Google Groups "sage-devel" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at https://groups.google.com/group/sage-devel. For more options, visit https://groups.google.com/d/optout.