make run-depends-list-recursive?

Mel Flynn mel.flynn+fbsd.questions at mailing.thruhere.net
Tue Apr 14 19:02:15 UTC 2009


On Monday 13 April 2009 03:56:15 Tim Judd wrote:
> On Sun, Apr 12, 2009 at 5:10 PM, Chris Whitehouse <cwhiteh at onetel.com>wrote:
> > Hi
> >
> > Is there a make target which will give a list of _all_ dependencies
> > recursively not just next level up? Or a port? I tried
> > ports-mgmt/pkg_tree but it only seems to work with installed ports.
> >
> > I don't care if I get duplicates as long as every dependency is listed at
> > least once.
> >
> > Thanks
> >
> > Chris
>
> make all-depends-list

Two things:
1) It surpresses config target and if a port has OPTIONS set, then you may get 
surprised once you've configured the port and ticked/unticked an option
2) It includes EXTRACT_DEPENDS, PATCH_DEPENDS and BUILD_DEPENDS, which 
typically don't end up in run dependencies. Looking at the subject this may 
not be what you need.

make -C /usr/ports/category/portname -V LIB_DEPENDS -V RUN_DEPENDS

will list the dependencies that will be registered in /var/db/pkg. Recurse 
through the list, take the second field split by : and run the above for each 
origin. Something like the script below, which calls the config target if not 
configured, remembers already visited dependencies and then prints the runtime 
dependency list.
-- 
Mel

#!/bin/sh

VISITED=
if test $# -eq 0; then
	startdir=`pwd`
else
	startdir=$1
fi

config_port() {
    local ldeps rdeps curdir

    curdir=$1
    make -C ${curdir} config-conditional

    ldeps=`make -C ${curdir} -V LIB_DEPENDS`
    rdeps=`make -C ${curdir} -V RUN_DEPENDS`

    for dep in ${ldeps} ${rdeps}; do
        dir=${dep#*:}
        # For 3-part deps where 3rd field is target, ex:
        # dovecot:${PORTSDIR}/mail/dovecot:build
        dir=${dir%%:*}
        case ${VISITED} in
            *" ${dir} "*|*" ${dir}")
            ;;
            *)
            VISITED="${VISITED} ${dir}"
            config_port ${dir}
        esac
    done
}

config_port $startdir

for dir in ${VISITED}; do
	echo $dir
done


More information about the freebsd-questions mailing list