diff options
author | Alexander Leidinger <netchild@FreeBSD.org> | 2007-08-12 12:49:23 +0000 |
---|---|---|
committer | Alexander Leidinger <netchild@FreeBSD.org> | 2007-08-12 12:49:23 +0000 |
commit | 43b63893be8b4e9299ce9bf95aaef959a4f586e2 (patch) | |
tree | a85a8bbbb36a1814cbf33896bfeb89e79f84ef48 /Tools | |
parent | c9c9fee310ed590d02b47d632b36a94cf23ad045 (diff) | |
download | ports-43b63893be8b4e9299ce9bf95aaef959a4f586e2.tar.gz ports-43b63893be8b4e9299ce9bf95aaef959a4f586e2.zip |
Add 2 scripts which help in port maintenance to list all direct library
dependencies of a port:
neededlibs.sh
Extract direct library dependencies (filenames) from binaries.
resolveportsfromlibs.sh
Prints the name(s) of ports(s) given a library filename,
suitable for direct use (copy&paste) in LIB_DEPENDS.
Example usage is included in the scripts. The following combined usage may
be helpful for further porting/testing automation:
resolveportsfromlibs.sh -b /usr/local $(neededlibs.sh /test/bin/*)
Requested by: kris, lofi (sort of)
Notes
Notes:
svn path=/head/; revision=197520
Diffstat (limited to 'Tools')
-rw-r--r-- | Tools/scripts/README | 3 | ||||
-rwxr-xr-x | Tools/scripts/neededlibs.sh | 63 | ||||
-rwxr-xr-x | Tools/scripts/resolveportsfromlibs.sh | 104 |
3 files changed, 170 insertions, 0 deletions
diff --git a/Tools/scripts/README b/Tools/scripts/README index 9dd53f2de754..dc3e72bbd312 100644 --- a/Tools/scripts/README +++ b/Tools/scripts/README @@ -25,6 +25,7 @@ getpr - downloads a problem report from GNATS and attempts to extract this probably needs to be checked for potential security problems. gnomedepends - Analyse pkg/PLIST and give an advice as to which GNOME ports should be listes in {RUN,LIB}_DEPENDS for this port +neededlibs.sh - Extract direct library dependencies from binaries. plist - automate (mostly, at least) pkg-plist generation prpatch - just does `patch $1 < pr-patch' (pr-patch is created by getpr) prdone - checks in the port, attempting to fill out the commit message using @@ -33,6 +34,8 @@ prdone - checks in the port, attempting to fill out the commit message using portsearch - A utility for searching the ports tree. It allows more detailed search criteria than ``make search key=<string>'' and accepts all perl(1) regular expressions. +resolveportsfromlibs.sh - Prints the name(s) of ports(s) given a library + filename, suitable for direct use in LIB_DEPENDS. splitpatch.pl - A small script to convert multi-file patches to several appropriately named single-file patches. tindex - script used to build INDEXes for supported FreeBSD branches, which diff --git a/Tools/scripts/neededlibs.sh b/Tools/scripts/neededlibs.sh new file mode 100755 index 000000000000..3382996b41c6 --- /dev/null +++ b/Tools/scripts/neededlibs.sh @@ -0,0 +1,63 @@ +#!/bin/sh + +# +# Copyright (C) 2007 Alexander Leidinger <netchild@FreeBSD.org>. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# + +# $FreeBSD$ + + +# +# The purpose of this script is to find as much dependencies of a binary +# as possible. A dependecy is for example a library which is directly +# referenced in the binary. +# + +# XXX: it doesn't handle calls to dlopen() or the corresponding libltdl +# function. I don't know if this is needed to detect references to stuff +# which can be added as LIB_DEPENDS. + +if [ -z "$1" ]; then + echo "Usage: $0 binary_file ..." + exit 2 +fi + +for i in "$@"; do + kind=$(file -bi "$i") + + case "${kind}" in + application/x-executable*) + # ok, fall through + ;; + *) + # not ok, go to next one + shift + continue + ;; + esac + + objdump -x "$i" | awk '/NEEDED/ {print $2}' + shift +done | sort -u diff --git a/Tools/scripts/resolveportsfromlibs.sh b/Tools/scripts/resolveportsfromlibs.sh new file mode 100755 index 000000000000..45ecdf12267e --- /dev/null +++ b/Tools/scripts/resolveportsfromlibs.sh @@ -0,0 +1,104 @@ +#!/bin/sh + +# +# Copyright (C) 2007 Alexander Leidinger <netchild@FreeBSD.org>. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# + +# $FreeBSD$ + +# +# The purpose of this script is to find the installed port which contains +# the specified libraries. +# + +print_usage() { + echo "Usage: $0 [-b base ...] lib_name ..." + echo "Example: $0 -b /usr/local -b /space/porttest libX11.so" +} + +which pkg_which >/dev/null 2>&1 +if [ $? -ne 0 ]; then + echo "pkg_which not found in path (${PATH}), aborting" | fmt + exit 1 +fi + +args=$(getopt b:h $@) +if [ $? -ne 0 ]; then + print_usage + exit 2 +fi + +set -- ${args} +for arg; do + case "${arg}" in + -b) + bases="${bases} $2" + shift; shift + ;; + -h) + print_usage + exit 0 + ;; + --) + shift + break + ;; + esac +done + +if [ -z "$1" ]; then + print_usage + exit 2 +fi + +if [ -z "${bases}" ]; then + bases=/usr/local +fi + +for i in $@; do + if [ -e /lib/$i -o -e /usr/lib/$i ]; then + # base system lib, skipping + shift + continue + fi + + + lib="$(echo $i | sed -e 's:^lib:: ; s:\.so.*::')" + + 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://') + break + else + continue + fi + done + + echo ${lib}:${origin} + shift +done | sort -u |