diff options
Diffstat (limited to 'scripts/libmakepkg/util/util.sh.in')
-rw-r--r-- | scripts/libmakepkg/util/util.sh.in | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/scripts/libmakepkg/util/util.sh.in b/scripts/libmakepkg/util/util.sh.in new file mode 100644 index 00000000..f9f1c200 --- /dev/null +++ b/scripts/libmakepkg/util/util.sh.in @@ -0,0 +1,85 @@ +#!/bin/bash +# +# util.sh - general utility functions +# +# Copyright (c) 2006-2016 Pacman Development Team <pacman-dev@archlinux.org> +# Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +[[ -n "$LIBMAKEPKG_UTIL_UTIL_SH" ]] && return +LIBMAKEPKG_UTIL_UTIL_SH=1 + + +## +# usage : in_array( $needle, $haystack ) +# return : 0 - found +# 1 - not found +## +in_array() { + local needle=$1; shift + local item + for item in "$@"; do + [[ $item = "$needle" ]] && return 0 # Found + done + return 1 # Not Found +} + +# tests if a variable is an array +is_array() { + local v=$1 + local ret=1 + + # this function requires extglob - save current options to restore later + local shellopts=$(shopt -p) + shopt -s extglob + + if [[ $(declare -p "$v") == declare\ -*([[:alnum:]])a*([[:alnum:]])\ * ]]; then + ret=0 + fi + + eval "$shellopts" + return $ret +} + +# Canonicalize a directory path if it exists +canonicalize_path() { + local path="$1"; + + if [[ -d $path ]]; then + ( + cd_safe "$path" + pwd -P + ) + else + printf "%s\n" "$path" + fi +} + +dir_is_empty() { + ( + shopt -s dotglob nullglob + files=("$1"/*) + (( ${#files} == 0 )) + ) +} + +cd_safe() { + if ! cd "$1"; then + error "$(gettext "Failed to change to directory %s")" "$1" + plain "$(gettext "Aborting...")" + exit 1 + fi +} |