From 90bb423304c96072cc3f7ea86ad9672414ed9183 Mon Sep 17 00:00:00 2001 From: Jelle van der Waa Date: Sat, 16 Mar 2019 18:29:56 +0100 Subject: 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 --- sogrep | 0 sogrep.in | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 98 insertions(+) mode change 100644 => 100755 sogrep create mode 100644 sogrep.in diff --git a/sogrep b/sogrep old mode 100644 new mode 100755 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 -- cgit v1.2.3-54-g00ecf