OpenBLAS binary packages
Ryan Schmidt
ryandesign at macports.org
Wed May 15 16:58:28 UTC 2019
On May 15, 2019, at 04:01, Artur Szostak wrote:
> This raises the question: how is the MacPorts team mitigating the cost of compiling OpenBLAS over and over again when trying to prepare production binary packages for other ports where OpenBLAS happens to be in the dependency tree?
We keep all* ports installed but deactivated on our buildbot machines. When a new build request comes in, it reactivates the dependencies, which is much quicker than having to rebuild the dependencies from source and also faster than having to download their binaries from a server.
*Since we are running out of space on some of our build machines, we will modify this so that not all ports remain installed there. For example we might uninstall ports that are not dependencies of any other port. See https://trac.macports.org/ticket/57464
On May 15, 2019, at 05:23, Artur Szostak wrote:
> I fear there is also a procedural and policy enforcement issue here. Clearly different people have implemented things in different ways, giving a non-standard and non-uniform look and feel to MacPorts ports. It makes for a poor user experience and the MacPorts community look bad.
As far as I know we don't have a set procedure or policy for this situation of how to handle software that needs to be built differently on different CPUs for performance reasons. The creation of such a policy could certainly be discussed.
> After our 4 years of experience preparing RPM and MacPorts package repositories of our software we have seen that MacPorts packages take an order of magnitude more time to build and cause significantly more problems than RPMs. Mainly because there is a non-trivial probability that some port in the dependency tree will start breaking, and there is no way to pin or encode version ranges for the Portfile dependencies to prevent this.
I'm sorry to hear that your experience with MacPorts hasn't been as good as with other package managers. I don't have experience with package management systems other than MacPorts; I would guess that applies to many of our contributors. So we don't know how others are handling these issues. If you or anyone has suggestions for specific things we should be doing differently, please let us know.
You are correct that MacPorts does not contain a feature that would allow dependencies to be pinned to a version range, and I can't think of a way that such a feature could work. Only one version of a port can be active at a time, so if you support the idea of one port requiring a specific older version of a dependency, you cause problem for all the other ports that wanted the current version of that dependency.
What we do allow is for separate ports to be created for separate versions of the same software, in situations where it is thought that that will be useful; perhaps this is what other package managers are doing as well. For example, we have separate ports for libsdl version 1 and 2, so that ports for software that has been upgraded to support libsdl 2 can use that and ports for older software that requires libsdl 1 can use that. If there's a specific port you're thinking of where we need to similarly offer multiple versions, please let us know.
With regard to a port upgrade causing another port to fail to build, as with any other bug, I don't know what we can do other than to fix the issues as we discover them, and if you've discovered something that fails to build, please let us know by filing a ticket in the issue tracker as usual or by submitting a PR to fix it. We are not mind readers and we often cannot anticipate when a port upgrade would cause problems for another port. Sometimes it is clear from the beginning: it was clear that libsdl 2 was going to be backward-incompatible with libsdl 1, so we made a separate port. Sometimes it is not clear: libpng 1.6 made private certain structure fields that had previously been public, causing some software to fail to build. We could have at that point decided to create a separate libpng 1.4 port for old software; instead, we decided to fix the old ports that were broken by the upgrade, either by upgrading those ports to new libpng-1.6-compatible versions or by patching the software ourselves.
I have a feeling that package management systems on other platforms have more users, because on other platforms the package management system is how libraries and programs used by the OS itself are distributed and updated, so 100% of users of those other platforms will use the package manager, so any problems will be discovered, reported, and fixed quickly. MacPorts, on the other hand, is only used by the fraction of macOS users who have decided to install it, so there is an increased likelihood that you will be the first user to encounter a particular problem vs. other systems with more users. The sooner you report a problem to us, the sooner someone can work on fixing it. Or if you can contribute a fix yourself, that's even better.
More information about the macports-users
mailing list