diff options
author | Alexander Leidinger <netchild@FreeBSD.org> | 2007-09-04 19:32:36 +0000 |
---|---|---|
committer | Alexander Leidinger <netchild@FreeBSD.org> | 2007-09-04 19:32:36 +0000 |
commit | 0d7a3e7e9f64e12427eb513f7e29f382c79ddf5c (patch) | |
tree | d8ceee31bdb7109bb4e7fcef27139e6f49769b03 /Tools | |
parent | 0ec0a281434735e1f7d99282a5bb19a95ee19a1a (diff) | |
download | ports-0d7a3e7e9f64e12427eb513f7e29f382c79ddf5c.tar.gz ports-0d7a3e7e9f64e12427eb513f7e29f382c79ddf5c.zip |
Notes
Diffstat (limited to 'Tools')
-rwxr-xr-x | Tools/scripts/explicit_lib_depends.sh | 39 | ||||
-rwxr-xr-x | Tools/scripts/neededlibs.sh | 2 | ||||
-rwxr-xr-x | Tools/scripts/resolveportsfromlibs.sh | 93 |
3 files changed, 120 insertions, 14 deletions
diff --git a/Tools/scripts/explicit_lib_depends.sh b/Tools/scripts/explicit_lib_depends.sh index afd8e289ccd7..e9de4cb9fa21 100755 --- a/Tools/scripts/explicit_lib_depends.sh +++ b/Tools/scripts/explicit_lib_depends.sh @@ -83,6 +83,15 @@ if [ -z "${PKG_DBDIR} -o ! -d "${PKG_DBDIR}" ]; then PKG_DBDIR=/var/db/pkg fi +libtool=$(which libtool 2>/dev/null) +if [ -x ${libtool} ]; then + libtool_deplibs=$(grep link_all_deplibs ${libtool} | head -1 | \ + cut -d = -f 2) + if [ "X${libtool_deplibs}" != Xno ]; then + echo WARNING: your libtool records dependencies recursively, you can not trust the following output. | fmt + fi +fi + for i in $@; do if [ -d "${i}" ]; then current_port="${i}" @@ -118,6 +127,34 @@ for i in $@; do ' < ${current_port}/+CONTENTS | \ xargs ${PORTSDIR}/Tools/scripts/neededlibs.sh | \ xargs ${PORTSDIR}/Tools/scripts/resolveportsfromlibs.sh ${bases} | \ - egrep -v "${myorigin}\$" + egrep -v "(\(${myorigin}\)|${myorigin})\$" done | sort -u + +exit 0 + +# NOT YET: untested, just an outline of what needs to be done +awk ' /USE_GNOME+=/ { + if (have_gnome != 1) { + use_gnome = sprintf("%s", $2); + } else { + use_gnome = sprintf("%s %s", use_gnome, $2); + have_gnome = 1; + } + } + /USE_XORG+=/ { + if (have_gnome != 1) { + use_gnome = sprintf("%s", $2); + } else { + use_gnome = sprintf("%s %s", use_gnome, $2); + have_gnome = 1; + } + } + END { + if (have_gnome == 1) { + printf("USE_GNOME= %s\n", have_gnome); + } + if (have_xorg == 1) { + printf("USE_XORG= %s\n", have_xorg); + } + }' diff --git a/Tools/scripts/neededlibs.sh b/Tools/scripts/neededlibs.sh index 3382996b41c6..58d0bb124c00 100755 --- a/Tools/scripts/neededlibs.sh +++ b/Tools/scripts/neededlibs.sh @@ -48,7 +48,7 @@ for i in "$@"; do kind=$(file -bi "$i") case "${kind}" in - application/x-executable*) + application/x-executable*|application/x-sharedlib*) # ok, fall through ;; *) diff --git a/Tools/scripts/resolveportsfromlibs.sh b/Tools/scripts/resolveportsfromlibs.sh index ca2ba2fe5451..ed207aebfae6 100755 --- a/Tools/scripts/resolveportsfromlibs.sh +++ b/Tools/scripts/resolveportsfromlibs.sh @@ -88,6 +88,13 @@ fi for i in $@; do result="" + case $i in + libcrypto.so|libssl.so) + echo "USE_OPENSSL= yes" + continue + ;; + esac + if [ -e /lib/$i -o -e /usr/lib/$i ]; then # base system lib, skipping shift @@ -95,45 +102,107 @@ for i in $@; do fi - lib="$(echo $i | sed -e 's:^lib:: ; s:\.so.*::')" + lib=${i##*/} + lib="$(echo ${lib} | sed -e 's:^lib:: ; s:\.so.*::')" + # I didn't managed to make awk accept a pattern with a '/' inside, + # so don't complain about using grep+awk instead of awk only. + lib_pathname=$(ldconfig -r | grep $i | awk '{print $3}') origin=unknown for base in ${bases}; do port=$(pkg_which "${base}/lib/$i") if [ -f /var/db/pkg/$port/+CONTENTS ]; then - origin=$(grep "@comment ORIGIN:" /var/db/pkg/$port/+CONTENTS | sed -e 's/@comment ORIGIN://') + origin=$(grep "@comment ORIGIN:" \ + /var/db/pkg/$port/+CONTENTS \ + | sed -e 's/@comment ORIGIN://') break else continue fi done - XORG="$(egrep ${origin}\$ ${PORTSDIR}/Mk/bsd.xorg.mk 2>/dev/null \ - | grep _LIB | sed -e 's:_LIB.*::')" + if [ ${origin} = unknown ]; then + if [ -f ${lib_pathname} ]; then + port=$(pkg_which "${lib_pathname}") + if [ -f /var/db/pkg/$port/+CONTENTS ]; then + origin=$(grep "@comment ORIGIN:" \ + /var/db/pkg/$port/+CONTENTS \ + | sed -e 's/@comment ORIGIN://') + else + result="${lib} ($i) not found, unknown origin" + fi + fi + fi + + if [ ${origin} != unknown ]; then + category=${origin%/*} + portname=${origin##*/} + + XORG="$(egrep ${origin}\$ ${PORTSDIR}/Mk/bsd.xorg.mk \ + 2>/dev/null | grep _LIB | sed -e 's:_LIB.*::')" + + GNOME="$(egrep ${origin}\$ ${PORTSDIR}/Mk/bsd.gnome.mk \ + 2>/dev/null | grep _LIB | sed -e 's:_LIB.*::')" - GNOME="$(egrep ${origin}\$ ${PORTSDIR}/Mk/bsd.gnome.mk 2>/dev/null \ - | grep _LIB | sed -e 's:_LIB.*::')" + EFL="$([ "X$(make ${PORTSDIR}/Mk/bsd.efl.mk -V \ + _${portname}_CATEGORY )" = "X${category}" ] && \ + echo ${portname})" + + GL="$(egrep ${origin}\$ ${PORTSDIR}/Mk/bsd.port.mk \ + 2>/dev/null | grep _LIB_DEPENDS \ + | sed -e 's:_GL_:: ; s:_LIB_DEPENDS.*::')" + + fi if [ -n "${XORG}" ]; then - result="USE_XORG+=${XORG}" + result="USE_XORG+= ${XORG} (${origin})" + if [ $(echo ${XORG} | wc -w) -ne 1 ]; then + result="${result} # result ambiguous, check yourself: ${lib}" + fi fi if [ -n "${GNOME}" ]; then - result="USE_GNOME+=${GNOME}" + result="USE_GNOME+= ${GNOME} (${origin})" + if [ $(echo ${GNOME} | wc -w) -ne 1 ]; then + result="${result} # result ambiguous, check yourself: ${lib}" + fi + fi + + if [ -n "${EFL}" ]; then + result="USE_EFL+= ${EFL} (${origin})" + fi + + if [ -n "${GL}" ]; then + result="USE_GL+= ${GL} (${origin})" fi # USE_xxx exceptions, sorting key is the USE_xxx name # START and STOP are needed for a perfect match case "START${origin}STOP" in + STARTdevel/famSTOP|STARTdevel/gaminSTOP) + result="USE_FAM= yes (${origin})" + ;; STARTprint/freetypeSTOP) - result="USE_FREETYPE=yes" + result="USE_FREETYPE= yes (${origin})" ;; STARTdevel/gettextSTOP) - result="USE_GETTEXT=yes" + result="USE_GETTEXT= yes (${origin})" ;; STARTconverters/libiconvSTOP) - result="USE_ICONV=yes" + result="USE_ICONV= yes (${origin})" + ;; + STARTnet/openldap*sasl*clientSTOP) + result="USE_OPENLDAP= yes WANT_OPENLDAP_SASL= yes" + ;; + STARTnet/openldap*clientSTOP) + result="USE_OPENLDAP= yes (${origin})" + ;; + STARTdevel/sdl12STOP) + result="USE_SDL= sdl (${origin})" + ;; + /sdl_) + result="USE_SDL= $(echo $origin | sed -e 's:.*/sdl_::g') (${origin})" ;; esac @@ -141,6 +210,6 @@ for i in $@; do result="${lib}:\${PORTSDIR}/${origin}" fi - echo ${result} + echo "${result}" shift done | sort -u |