summaryrefslogtreecommitdiff
path: root/pkgthing/find
diff options
context:
space:
mode:
Diffstat (limited to 'pkgthing/find')
-rw-r--r--pkgthing/find58
1 files changed, 58 insertions, 0 deletions
diff --git a/pkgthing/find b/pkgthing/find
new file mode 100644
index 0000000..4b33612
--- /dev/null
+++ b/pkgthing/find
@@ -0,0 +1,58 @@
+#!/bin/bash
+
+# option handling
+case "$1" in
+ -v|-q) volume=$1; prog=$2;;
+ *) prog="$1";;
+esac
+
+# core
+error() {
+ echo "$0:$@"
+ exit 1
+}
+
+checkList() {
+ prog=$1
+ src=$2
+ file=$3
+ sed -n "s/^\($prog\) \.* \(.*\)/\1\t\2/p" "$src/$file" | \
+ while read line; do
+ _prg=`echo "$line" | cut -f 1`
+ _pkg=`echo "$line" | cut -f 2`
+ echo "\`$_prg' is in the $src package \`$_pkg'"
+ if [ "$volume" == '-v' ]; then
+ pkgthing search "$_pkg" "$src" | sed 's/^\(.\)/ \1/g'
+ fi
+ done
+}
+
+useVar() {
+ var=$1
+ val=$2
+ case "$var" in
+ \$name) _name="$val";;
+ \$union) :;;
+ \$progs)
+ checkList "$prog" "$_name" "$val"
+ :;;
+ esac
+}
+
+# parse files
+for lst in *.lst; do
+ _name='oops'
+ while read line; do
+ if [ -n "$line" ]; then
+ case "$line" in
+ \#*) :;; # comment, do nothing
+ \$*) # setting a variable
+ var=${line%%=*}
+ val=${line#$var=}
+ useVar "$var" "$val"
+ :;;
+ *) :;; # setting a source
+ esac
+ fi
+ done < "$lst"
+done