portmaster is not always recursive

Doug Barton dougb at FreeBSD.org
Sun Aug 30 20:18:10 UTC 2009


On Sun, 30 Aug 2009, Miroslav Lachman wrote:

> Doug Barton wrote:
>> Ok, I found the problem, but the bad news is that I don't know what the 
>> solution is going to be. I've cc'ed ale since what I'm seeing is weird 
>> behavior by the php5-mcrypt slave port.
>> 
>> What portmaster does by default when looking for dependencies is to run 
>> 'make build-depends-list run-depends-list | sort -u' to get the list of 
>> things to check. I used to just do all-depends-list by default but users 
>> complained that it was creating problems by recursing so far down the tree.
>
> Does it mean that portmaster checks only first level dependencies unless -t 
> is given? (Maybe it is good behavior, I am just asking it to be sure that I 
> understand it well)

That's not exactly right, but it's about 90% right so close enough. :) The 
discrepancy relates to how individual ports report their dependencies, but 
for almost all purposes that is correct, yes.

> real world example:
> If I do `portmaster amavisd-new-2.6.4_1,1` and there will be available update 
> for archivers/p5-Compress-Raw-Bzip2 but not for dependencies between, it will 
> not be updated, because it is too deep?

Assuming that the latter is not listed as a dependency by amavisd-new, 
then no, it will not be updated that way.

> I don't know the exact definition of "slave port", but can it be that there 
> are 2 types of slave ports?
> Where one type is for example proftpd-mysql, which conflicts with master port 
> proftpd (only one of them can be installed)
> The second type is php5-mcrypt, which is only extension for master port and 
> cannot be installed alone?

I suspect that you are correct here, but I do not claim comprehensive 
knowledge of slave ports. :)  I will add that there is at least one more 
type, e.g., editors/pico-alpine and mail/alpine where the former is a 
slave of the latter because it uses the same distfiles, same basic 
OPTIONS, etc; although they install totally different programs.

>> Miroslav, for your specific problem you can add the -t option to portmaster 
>> to force it to do all-depends-list, which will cause portmaster to "see" 
>> the apache dependency. Other than that I'm not sure how to proceed. I 
>> suppose that I could force all-depends-list if MASTERDIR is set in a 
>> Makefile, but I'm kind of hesitant to do that unless it becomes obvious 
>> that the problem is more widespread.
>> 
>> 
>> hope this helps,
>
> Yes, it really helps. Now I know my favorite ports mgmt tool better then 
> before and as more I think about {build|run}-depends-list versus 
> all-depends-list it seems that current behavior is better. And if someone 
> wants all-depends-list, there is -t options. So all is fine.

FWIW, there is always the -a option to update everything that needs it.

> Maybe this difference can be explained in portmasters manual. (stating that 
> normally {build|run}-depends-list is used and only first level of 
> dependencies are checked/updated and if someone wants really recursive check, 
> the -t option must be used)

I get two complaints about the manual. The first is that it does not cover 
enough of the details, the second is that it's too long. I don't know how 
to make both groups happy. :)  I will think about adding something to the 
man page about this though.

I should also point out that -t does not mean "really recursive check." 
Portmaster is always recursive, the difference is not necessarily how deep 
it goes, it can also be how "wide" it goes as well.

> So the last thought is some new option for portmaster to force reinstall of 
> all intermediate dependencies between A and E, even if there are no updates 
> for them.

The -f option already does this.

> Thank you again for you explanation of the problem. It is really educational 
> to me.

Glad to help.

Doug

-- 

     This .signature sanitized for your protection



More information about the freebsd-ports mailing list