99 lines
2.6 KiB
Plaintext
99 lines
2.6 KiB
Plaintext
|
#!/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
|