summaryrefslogtreecommitdiff
path: root/Tools/scripts/resolveportsfromlibs.sh
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/scripts/resolveportsfromlibs.sh
parent- Lib updated FOX16. (diff)
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)
Diffstat (limited to '')
-rwxr-xr-xTools/scripts/resolveportsfromlibs.sh104
1 files changed, 104 insertions, 0 deletions
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