Re: How to handle minimum versions of dependencies which are recommended but not required?
[email protected] (Diab Jerius) Tue, 10 Aug 2021 09:55:38 -0400
| Newsgroups | perl.module-authors |
|---|---|
| Message-ID | <[email protected]> |
On 8/8/21 5:47 PM, David Cantrell wrote: > On 08/08/2021 20:34, Diab Jerius wrote: > >> Here's the problem, illustrated by this CPAN testers failure: >> >> http://www.cpantesters.org/cpan/report/2f961e48-6bf6-1014-90df-a468c69b7236 >> >> The smoker has versions of Cpanel::JSON::XS and YAML::XS which are >> older than my required versions. Since the ::XS versions are >> prioritized over the ::PP versions, the code uses those and thus >> fails the tests. I presume that because the ::XS versions are >> recommendations rather than requirements, they weren't updated to the >> versions that the code requires. >> >> Is there some way of triggering an update to the required versions >> via the metadata, or should I put a runtime version check into the >> tests and skip if the appropriate versions aren't installed? > > You can check what's already installed in your Makefile.PL or > equivalent, and prompt the user if you can't figure out what to do > automatically. I ASSume that the correct thing to do would be to do as > you currently do if none of your deps are installed, but if any are > installed you'd want to tell EU::MM's WriteMakefile function that you > have a runtime requirement for updated versions. > > Use the prompt() function from ExtUtils::MakeMaker as that will pay > attention to the PERL_MM_USE_DEFAULT env var. You may also want to pay > attention to AUTOMATED_TESTING and NONINTERACTIVE_TESTING. In > particular you will find that CPAN-testers generally set all three of > those. > > Vary as appropriate if you use a different build system. > This is good advice. I'm ambivalent about prompting the user when the functionality is optional. I've also had varied success when using installers such as cpanm with prompts & warnings, as there's a lot less info presented to the user. What I should probably do is split the distribution into core and optional components. Thanks! Diab