[MacPorts] #67830: perl5 @5.34 +perl5_36: cannot install perl modules
MacPorts
noreply at macports.org
Fri Jul 28 04:49:38 UTC 2023
#67830: perl5 @5.34 +perl5_36: cannot install perl modules
------------------------------+--------------------
Reporter: NorthboundTrain | Owner: (none)
Type: defect | Status: new
Priority: Normal | Milestone:
Component: ports | Version:
Resolution: | Keywords:
Port: perl5 |
------------------------------+--------------------
Comment (by ryandesign):
`cpan2port` is how you would create ports for new perl modules. That's not
what's needed here. The ports for the perl modules already exist, they
just don't list 5.36 as an available version.
For any change to MacPorts, it's our hope that a contributor would test
the change on their own system first before contributing it. So to add
perl 5.36 support to a port like p5-file-copy-recursive, you would edit
[browser:macports-ports/perl/p5-file-copy-recursive/Portfile the
Portfile], add 5.36 to the end of the `perl5.branches` line, verify it
builds, passes any available tests, and generally works, and send a pull
request with that change. However, p5-file-copy-recursive depends on five
other p5 modules; they would each need perl 5.36 added to them first. They
may each have other dependencies, and so on. The perl ecosystem has a
tendency to be composed of a zillion small interdependent modules. To
identify all of the Portfiles that p5-file-copy-recursive depends on, you
could use a command like this:
{{{
port -q file rdepof:p5.34-file-copy-recursive | grep /p5-
}}}
I get a list of 24 files. You could add 5.36 to the `perl5.branches` line
in all of them, verify they all build and work, and submit the batch of
changes as a pull request. The maintainers of the ports will be notified.
I found five distinct maintainers across that collection of 24 ports. The
maintainers would then approve or reject the change, or the change can be
merged after 72 hours if maintainers do not respond.
In the past, because we have nearly 2,000 perl module ports, and
individually testing small batches is tedious and nobody volunteered to do
that work, the entire batch of 2,000 perl module ports was updated to add
a new perl version simultaneously without testing any of it first. If
that's how we want to handle it again this time around we can but it
causes a number of problems.
First, somebody has to write a script to add 5.36 to each perl module's
`perl5.branches` (or find someone's previous script that did that) and
commit it. The resulting modifications have to be inspected carefully
before committing. We have in years past inadvertently committed syntax
errors or other mistakes at this point because the script did not
anticipate some slightly nonstandard Portfile construction. You should be
able to look through the git commit history or Trac ticket history to find
previous perl version updates.
Normally, any commit will automatically schedule builds of any ports that
need to be built on the buildbot, for each builder. We currently have 17
builders which would be about 34,000 builds scheduled. The buildbot
software is not designed to accommodate anywhere near that many pending
builds and this grinds the buildmaster to a complete standstill of 100%
CPU usage and unresponsiveness. It then falls to the buildbot
administrator (me) to manually cancel all of these builds (just cancelling
the builds can take hours) and load the list of desired builds into a
separate script that schedules them in small batches over the course of
the next several weeks, which is probably about how long it would take to
attempt to build them all. It is therefore appreciated if such a mass
update commit can be coordinated with me so that I can shut off the
buildbot commit notifications beforehand.
And then there's the problem that since the builds were never tested, some
of them may fail. New perl versions are usually highly compatible with
older ones so this is not usually a problem, however there have been
notable exceptions like perl 5.26 which removed `.` from `@INC` which
broke quite a few modules which had to be identified and fixed manually.
Since this might also be the first time the module has been built for any
perl version since the last time a perl version was added to it, a build
might fail for reasons unrelated to the perl version such as an
incompatibility with a new version of macOS or Xcode.
And when a port is fixed, that does not automatically schedule new build
attempts for any ports that depended on that formerly-broken port. Someone
either has to remember to do that manually, or else we don't do builds
(and thus don't provide archives) for some ports that we should be able to
build.
Personally I favor the bit-at-a-time approach since it avoids those
problems. It's what we use for python module ports and it seems to work
there.
--
Ticket URL: <https://trac.macports.org/ticket/67830#comment:5>
MacPorts <https://www.macports.org/>
Ports system for macOS
More information about the macports-tickets
mailing list