summaryrefslogtreecommitdiff
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
parent23f248ccfbdefcb26d3d0bfa9a93e21642ba3d28 (diff)
downloaddevtools-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>
-rwxr-xr-x[-rw-r--r--]sogrep0
-rw-r--r--sogrep.in98
2 files changed, 98 insertions, 0 deletions
diff --git a/sogrep b/sogrep
index 3be2672..3be2672 100644..100755
--- a/sogrep
+++ b/sogrep
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