Opened 13 years ago

Closed 13 years ago

#28485 closed defect (fixed)

conflict between perl5 and p5-module-corelist

Reported by: mas@… Owned by: narf_tm@…
Priority: Normal Milestone:
Component: ports Version: 1.9.2
Keywords: Cc: roberto@…, jacobgodserv@…, drkp (Dan Ports), vinc17@…, su-v, ghosthound, MarcusCalhoun-Lopez (Marcus Calhoun-Lopez), pboe@…, pixilla (Bradley Giesbrecht), dreamind@…, jpo@…
Port: perl5 p5-ipc-cmd p5-module-load-conditional p5-module-corelist

Description (last modified by mas@…)

r76301 has added a dependency on p5-ipc-cmd to p5-extutils-cbuilder. p5-ipc-cmd in turn depends on p5-module-corelist. And p5-module-corelist conflicts with perl5, as both p5-module-corelist and perl5 provide $prefix/bin/corelist.

This breaks at least the following modules: p5-module-build, p5-sub-uplevel, p5-test-exception, p5-carp-clan, p5-bit-vector, p5-date-calc, p5-date-holidays-de.

Attachments (1)

p5-module-load-conditional.patch (491 bytes) - added by outis 13 years ago.
replace port dependency on p5-module-corelist with path dependency on corelist

Download all attachments as: .zip

Change History (25)

comment:1 Changed 13 years ago by roberto@…

Cc: roberto@… added

Cc Me!

comment:2 Changed 13 years ago by jacobgodserv@…

Cc: jacobgodserv@… added

Cc Me!

comment:3 Changed 13 years ago by drkp (Dan Ports)

Cc: dports@… added

Cc Me!

comment:4 Changed 13 years ago by vinc17@…

Cc: vinc17@… added

Cc Me!

comment:5 Changed 13 years ago by ghosthound

Possibly resolved in r76485, please test

comment:6 Changed 13 years ago by su-v

Cc: suv-sf@… added

Cc Me!

comment:7 Changed 13 years ago by mas@…

r76485 makes perl5.12 the default. But even after manual removal of all perl5 @5.8* and perl5.8 ports, the perl5 package itself, now @5.12.3_0+perl5_12, still provides $prefix/bin/corelist. (You can check yourself using "port contents perl5|grep corelist" -- does this result in no output on your system? What output do you get for "port provides /opt/local/bin/corelist"?)

In other words, r76485 does not fix this for me, sorry.

comment:8 Changed 13 years ago by mas@…

@narf_tm and @ricci: What's the rationale for p5-module-corelist? Under what circumstances do you get a perl5 installation without Module::Corelist, thus requiring p5-module-corelist?

What I'm trying to get at is this: All p5 modules depend on perl5, so they already get Module::Corelist. Can we not simply get rid of p5-module-corelist altogether? Why do we need a separate package for it?

comment:9 Changed 13 years ago by narf_tm@…

ExtUtils::CBuilder requires IPC::Cmd. IPC::Cmd requires Module::Load::Conditional. Module::Load::Conditional 0.44 requires at least Module::CoreList 2.22. This is newer than the Module::CoreList that is included with Perl 5.8.

comment:10 Changed 13 years ago by mas@…

And is there a way to make this work in MacPorts? As it is, p5-module-corelist and perl5 (no matter what version) conflict.

comment:11 Changed 13 years ago by jmroot (Joshua Root)

Cc: ricci@… added

It's really easy to fix this kind of conflict with the new version of perl5. Just remove the offending binary from perl5/files/binList.

@mas: I believe the idea is that p5-module-corelist can be updated independently of perl and will be a newer version than that bundled with older perl releases.

comment:12 in reply to:  11 Changed 13 years ago by roberto@…

Replying to jmr@…:

It's really easy to fix this kind of conflict with the new version of perl5. Just remove the offending binary from perl5/files/binList.

Can you explain how this is done? I too am now affected by the conflict.

comment:13 Changed 13 years ago by ghosthound

If you want to remove corelist from the perl5 install:

  pushd `port dir perl5`
  sudo vi files/binList
 (or use your favorite editor)
  remove the 'corelist' line
  re-install the perl5 port

*or* you can just do:

  sudo port -f install p5-module-corelist

I'm a bit concerned about stripping things out of the perl5 port - what happens if something expects, say, corelist to be there and doesn't depend on p5-module-corelist? We've got another breakage that has to be dealt with. That may be the right way to go, and just add additional dependencies to other ports, maybe its not though.

comment:14 Changed 13 years ago by jmroot (Joshua Root)

Leaving the conflict isn't a workable option. Dependencies will have to be added where needed.

comment:15 Changed 13 years ago by mas@…

Cc: mcalhoun@… added
Port: perl5 added
Summary: p5-extutils-cbuilder @0.280202 update breaks other perl modulesconflict between perl5 and p5-module-corelist

comment:16 Changed 13 years ago by pboe@…

Cc: pboe@… added

Cc Me!

comment:17 Changed 13 years ago by pixilla (Bradley Giesbrecht)

Cc: pixilla@… added

Cc Me!

comment:18 Changed 13 years ago by dreamind@…

Cc: dreamind@… added

Cc Me!

Changed 13 years ago by outis

replace port dependency on p5-module-corelist with path dependency on corelist

comment:19 Changed 13 years ago by outis

Above attachment is one potential solution: replace the port dependency on p5-module-corelist (port:p5-module-corelist) with a path dependency on the corelist executable (path:bin/corelist:p5-module-corelist). Only if there isn't a corelist executable will an attempt to install p5-module-corelist be made.

comment:20 Changed 13 years ago by narf_tm@…

How does this help? The sole purpose this port exists is to replace the corelist version that is included with perl because some modules need a newer version.

comment:21 Changed 13 years ago by outis

It's a short-term, stopgap measure rather than a long term, optimal solution. With the patch, the dependent ports wil install and update, which they don't do now. Perl 5.12.3 provides Module::Corelist 2.43, which is new enough for Module::Load::Conditional 0.44.

comment:22 Changed 13 years ago by mas@…

Description: modified (diff)
Port: p5-module-load-conditional added; p5-extutils-cbuilder removed

(Just updated the description: with the new perl5 port, corelist is installed by perl5. The problem still persists, no matter whether perl 5.8, 5.10 or 5.12 are installed.)

Do I get this right? At the moment, trying to make things compatible with perl 5.8 breaks them for *all* versions of perl. Not good.

IOW, if perl 5.12 is installed (as is the default now), the dependency for p5-module-load-conditional is satisfied by simply having the perl5 port installed. p5-module-load-conditional really only requires p5-module-corelist (which, however, will still conflict with perl5) if perl 5.8 is selected.

So would a possible short-term intervention be to change the p5-module-load-conditional port to only depend on p5-module-corelist in a variant called perl5_8? Things would still be broken, but at least not for everybody, but only for those still requiring perl 5.8.

In the long term, I agree with ricci: Short of dropping support for perl 5.8, the "right" solution would be to remove corelist from the perl5 port and to add a dependency on p5-module-corelist to all ports needing it. Identifying those might be a daunting task.

comment:23 Changed 13 years ago by jpo@…

Cc: jpo@… added

Cc Me!

comment:24 Changed 13 years ago by jmroot (Joshua Root)

Resolution: fixed
Status: newclosed
Note: See TracTickets for help on using tickets.