1 | | Currently spkg uninstallation is handled in an ad-hoc manner. Many packages contain some rough uninstallation steps in their `spkg-install` scripts (to be run, for example, when upgrading/reinstalling a package). But these are often imprecise and not thorough (though maybe still worth keeping where they already exist, as I will explain below). Here are a few proposals for improving package uninstallation (which is useful even for required packages, such as in the case of upgrading them): |
| 1 | Currently spkg uninstallation is handled in an ad-hoc manner. Many packages contain some rough uninstallation steps in their `spkg-install` scripts (to be run, for example, when upgrading/reinstalling a package). But these are often imprecise and not thorough (though maybe still worth keeping where they already exist, as I will explain below). |
| 2 | |
| 3 | |
| 4 | === implementation === |
| 5 | |
| 6 | * #22509 - most packages are now installed with staged installation (i.e. DESTDIR installation), which enables creating a manifest of all files installed by that package (minus files created by the package's `spkg-postinst` script). This is mostly working now for almost all packages (see #24024). |
| 7 | |
| 8 | * #????? - add an spkg-uninstall script: this would read the file manifest for a package (if it exists) and remove those files from `$SAGE_LOCAL`--thus uninstalling the package thoroughly and precisely. |
| 9 | * #????? - support legacy uninstallers: many existing spkgs have steps in their `spkg-install` for "uninstalling" that package--mostly just removing a few key files associated with the package (executables and libraries), but was rarely complete. However, some of these legacy uninstall steps are still necessary for properly building the package if the package has not already been uninstalled. This is an issue for the new system insofar as we want upgrades from older versions of Sage to work, so the legacy uninstallers are still needed at least for one upgrade, if uninstalling a package that doesn't have a proper file manifest. Since these steps are no longer needed in the `spkg-install` (in fact ideally `spkg-install` should not modify `$SAGE_LOCAL` at all, we move those steps into a separate `spkg-legacy-uninstall` script which is run only when uninstalling a package that is missing its file manifest. |
| 10 | * #????? - once this infrastructure is in place there are several packages with 'legacy uninstallers' that would need to be updated. |
| 11 | * #????? - also add support for an `spkg-postrm` script that would be the complement to a `spkg-postinst` script, and may clean up files generated by a package that are not part of the package's file manifest |
| 12 | |
| 13 | |
| 14 | === old design discussion === |
| 15 | Here are a few proposals for improving package uninstallation (which is useful even for required packages, such as in the case of upgrading them): |