aboutsummaryrefslogtreecommitdiff
path: root/Tools
diff options
context:
space:
mode:
authorAlexander Leidinger <netchild@FreeBSD.org>2007-08-12 12:49:23 +0000
committerAlexander Leidinger <netchild@FreeBSD.org>2007-08-12 12:49:23 +0000
commit43b63893be8b4e9299ce9bf95aaef959a4f586e2 (patch)
treea85a8bbbb36a1814cbf33896bfeb89e79f84ef48 /Tools
parentc9c9fee310ed590d02b47d632b36a94cf23ad045 (diff)
downloadports-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/README3
-rwxr-xr-xTools/scripts/neededlibs.sh63
-rwxr-xr-xTools/scripts/resolveportsfromlibs.sh104
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