summaryrefslogtreecommitdiff
path: root/sogrep.in
diff options
context:
space:
mode:
authorJelle van der Waa <jelle@vdwaa.nl>2019-03-16 18:29:56 +0100
committerJelle van der Waa <jelle@vdwaa.nl>2019-03-16 18:29:56 +0100
commit90bb423304c96072cc3f7ea86ad9672414ed9183 (patch)
treebb864a9478ac22e70d82ca31992d70bc634a38b3 /sogrep.in
parent23f248ccfbdefcb26d3d0bfa9a93e21642ba3d28 (diff)
downloaddevtools32-90bb423304c96072cc3f7ea86ad9672414ed9183.tar.xz
sogrep: rename to sogrep.in so make clean works
make clean removes all .in converted files to a file without .in which in the make clean step is removed. So running make clean will remove sogrep since it's specified as BINPROGS. In the future this steps should be removed for sogrep since it is a standalone script. Signed-off-by: Jelle van der Waa <jelle@vdwaa.nl>
Diffstat (limited to 'sogrep.in')
-rw-r--r--sogrep.in98
1 files changed, 98 insertions, 0 deletions
diff --git a/sogrep.in b/sogrep.in
new file mode 100644
index 0000000..3be2672
--- /dev/null
+++ b/sogrep.in
@@ -0,0 +1,98 @@
+#!/bin/bash
+# License: Unspecified
+
+: ${SOLINKS_MIRROR:="https://mirror.pkgbuild.com"}
+: ${SOCACHE_DIR:="${XDG_CACHE_HOME:-${HOME}/.cache}/sogrep"}
+repos=('staging' 'testing' 'core' 'extra'
+ 'community-staging' 'community-testing' 'community'
+ 'multilib-staging' 'multilib-testing' 'multilib'
+ 'gnome-unstable' 'kde-unstable')
+arches=('x86_64')
+
+source /usr/share/makepkg/util/util.sh
+
+recache() {
+ local repo arch
+
+ for repo in "${repos[@]}"; do
+ for arch in "${arches[@]}"; do
+ rm -rf "${SOCACHE_DIR}/${arch}/${repo}"
+ mkdir -p "${SOCACHE_DIR}/${arch}/${repo}"
+ curl "${SOLINKS_MIRROR}/${repo}/os/${arch}/${repo}.links.tar.gz" | bsdtar -xf - -C "${SOCACHE_DIR}/${arch}/${repo}"
+ done
+ done
+}
+
+search() {
+ local repo=$1 arch lib=$2
+
+ if [[ $repo != all ]]; then
+ if ! in_array "$repo" "${repos[@]}"; then
+ echo "${BASH_SOURCE[0]##*/}: unrecognized repo '$repo'"
+ echo "Try '${BASH_SOURCE[0]##*/} --help' for more information."
+ exit 1
+ fi
+ local repos=("${repo}")
+ fi
+
+ if [[ ! -d ${SOCACHE_DIR} ]]; then
+ recache
+ fi
+
+ for arch in "${arches[@]}"; do
+ for repo in "${repos[@]}"; do
+ db=${SOCACHE_DIR}/${arch}/${repo}/
+ if [[ -d ${db} ]]; then
+ while read -rd '' pkg; do
+ pkg=${pkg#${db}}
+ printf '%s/%s\n' "${repo}" "${pkg%-*-*/links}"
+ done < <(grep -rlZ "${lib}" "${db}")
+ fi
+ done
+ done | sort -u
+}
+
+usage() {
+ cat <<- _EOF_
+ Usage: ${BASH_SOURCE[0]##*/} [OPTIONS] REPO LIBNAME
+
+ Check the soname links database for pacman repositories containing
+ packages linked to a given shared library. If the repository specified
+ is "all", then all repositories will be searched, otherwise only the
+ named repository will be searched.
+
+ If the links database does not exist, it will be downloaded first.
+
+ OPTIONS
+ -r, --refresh Refresh the links databases
+ -h, --help Show this help text
+_EOF_
+}
+
+if (( $# == 0 )); then
+ echo "error: No arguments passed."
+ echo "Try '${BASH_SOURCE[0]##*/} --help' for more information."
+ exit 1
+fi
+
+while (( $# )); do
+ case $1 in
+ -r|--refresh)
+ recache
+ ;;
+ -h|--help)
+ usage
+ exit 0
+ ;;
+ *)
+ if (( $# < 2 )); then
+ echo "error: Not enough arguments passed."
+ echo "Try '${BASH_SOURCE[0]##*/} --help' for more information."
+ exit 1
+ fi
+ search "$@"
+ exit $?
+ ;;
+ esac
+ shift
+done