summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/common.sh82
1 files changed, 76 insertions, 6 deletions
diff --git a/lib/common.sh b/lib/common.sh
index a3c2ec2..a0796bb 100644
--- a/lib/common.sh
+++ b/lib/common.sh
@@ -1,6 +1,9 @@
#!/hint/bash
# This may be included with or without `set -euE`
+# This file is included by libremessages.
+# You should probably use libremessages instead of this.
+
# License: Unspecified
[[ -z ${_INCLUDE_COMMON_SH:-} ]] || return 0
@@ -9,8 +12,18 @@ _INCLUDE_COMMON_SH=true
# shellcheck disable=1091
. /usr/share/makepkg/util.sh
-# Avoid any encoding problems
-export LANG=C
+[[ -n ${TEXTDOMAIN:-} ]] || export TEXTDOMAIN='libretools'
+[[ -n ${TEXTDOMAINDIR:-} ]] || export TEXTDOMAINDIR='/usr/share/locale'
+
+if type gettext &>/dev/null; then
+ _() { gettext "$@"; }
+else
+ _() { echo "$@"; }
+fi
+
+_l() {
+ TEXTDOMAIN='librelib' TEXTDOMAINDIR='/usr/share/locale' "$@"
+}
shopt -s extglob
@@ -23,14 +36,14 @@ else
fi
stat_busy() {
- local mesg=$1; shift
+ local mesg; mesg="$(_ "$1")"; shift
# shellcheck disable=2059
printf "${GREEN}==>${ALL_OFF}${BOLD} ${mesg}...${ALL_OFF}" "$@" >&2
}
stat_done() {
# shellcheck disable=2059
- printf "${BOLD}done${ALL_OFF}\n" >&2
+ printf "${BOLD}$(_l _ "done")${ALL_OFF}\n" >&2
}
_setup_workdir=false
@@ -49,7 +62,7 @@ cleanup() {
}
abort() {
- error 'Aborting...'
+ _l error 'Aborting...'
cleanup 255
}
@@ -177,7 +190,64 @@ find_cached_package() {
return 0
;;
*)
- error 'Multiple packages found:'
+ _l error 'Multiple packages found:'
+ printf '\t%s\n' "${results[@]}" >&2
+ return 1
+ esac
+}
+
+##
+# usage: find_cached_srcpackage( $pkgname, $pkgver, $arch )
+#
+# $pkgver can be supplied with or without a pkgrel appended.
+# If not supplied, any pkgrel will be matched.
+##
+find_cached_srcpackage() {
+ local searchdirs=("$PWD" "$SRCPKGDEST") results=()
+ local targetname=$1 targetver=$2 targetarch=$3
+ local dir pkg pkgbasename name ver rel arch r results
+
+ for dir in "${searchdirs[@]}"; do
+ [[ -d $dir ]] || continue
+
+ for pkg in "$dir"/*.src.tar?(.?z); do
+ [[ -f $pkg ]] || continue
+
+ # avoid adding duplicates of the same inode
+ for r in "${results[@]}"; do
+ [[ $r -ef $pkg ]] && continue 2
+ done
+
+ # split apart package filename into parts
+ pkgbasename=${pkg##*/}
+ pkgbasename=${pkgbasename%.src.tar?(.?z)}
+
+ arch=${pkgbasename##*-}
+ pkgbasename=${pkgbasename%-"$arch"}
+
+ rel=${pkgbasename##*-}
+ pkgbasename=${pkgbasename%-"$rel"}
+
+ ver=${pkgbasename##*-}
+ name=${pkgbasename%-"$ver"}
+
+ if [[ $targetname = "$name" && $targetarch = "$arch" ]] &&
+ pkgver_equal "$targetver" "$ver-$rel"; then
+ results+=("$pkg")
+ fi
+ done
+ done
+
+ case ${#results[*]} in
+ 0)
+ return 1
+ ;;
+ 1)
+ printf '%s\n' "${results[0]}"
+ return 0
+ ;;
+ *)
+ _l error 'Multiple packages found:'
printf '\t%s\n' "${results[@]}" >&2
return 1
esac