config/function & config/path: Don't source entire package just to determine PKG_DIR

This commit is contained in:
MilhouseVH 2018-02-19 07:08:48 +00:00
parent dff66b4d6e
commit 68450cd45f
2 changed files with 33 additions and 37 deletions

View File

@ -250,7 +250,38 @@ get_pkg_version() {
}
get_pkg_directory() {
get_pkg_variable "$1" PKG_DIR
local _PKG_ROOT_NAME=${1%:*} _ALL_DIRS _FOUND=0 _ANCHOR="@?+?@" _PKG_DIR _DIR
# Check for any available local package in preference to a global package
for _DIR in $(echo -e "${_CACHE_PACKAGE_LOCAL}" | grep -F "/${_PKG_ROOT_NAME}${_ANCHOR}"); do
_DIR="${_DIR%${_ANCHOR}}"
# found first, set $_PKG_DIR
_PKG_DIR="$_DIR"
# keep track of dirs with package.mk for detecting multiple folders
_ALL_DIRS+="${_DIR}\n"
_FOUND=$((_FOUND+1))
done
# If there's no local package available, use the global package
if [ $_FOUND -eq 0 ]; then
for _DIR in $(echo -e "${_CACHE_PACKAGE_GLOBAL}" | grep -F "/${_PKG_ROOT_NAME}${_ANCHOR}"); do
_DIR="${_DIR%${_ANCHOR}}"
# found first, set $_PKG_DIR
_PKG_DIR="$_DIR"
# keep track of dirs with package.mk for detecting multiple folders
_ALL_DIRS+="${_DIR}\n"
_FOUND=$((_FOUND+1))
done
fi
# _FOUND multiple packages? fail
if [ $_FOUND -gt 1 ]; then
echo "Error - multiple package folders for package ${_PKG_ROOT_NAME}:" >&2
echo -e "$_ALL_DIRS" >&2
exit 1
fi
echo "$_PKG_DIR"
}
# get variable ($2) for package ($1)

View File

@ -65,42 +65,7 @@ init_package_cache
# set package metadata
reset_pkg_vars "$1"
if [ -n "$1" ]; then
_PKG_ROOT_NAME=${1%:*}
_ALL_DIRS=""
_FOUND=0
_ANCHOR="@?+?@"
PKG_DIR=""
# Check for any available local package in preference to a global package
for DIR in $(echo -e "${_CACHE_PACKAGE_LOCAL}" | grep -F "/${_PKG_ROOT_NAME}${_ANCHOR}"); do
DIR="${DIR%${_ANCHOR}}"
# found first, set $PKG_DIR
PKG_DIR="$DIR"
# keep track of dirs with package.mk for detecting multiple folders
_ALL_DIRS+="${DIR}\n"
_FOUND=$((_FOUND+1))
done
# If there's no local package available, use the global package
if [ $_FOUND -eq 0 ]; then
for DIR in $(echo -e "${_CACHE_PACKAGE_GLOBAL}" | grep -F "/${_PKG_ROOT_NAME}${_ANCHOR}"); do
DIR="${DIR%${_ANCHOR}}"
# found first, set $PKG_DIR
PKG_DIR="$DIR"
# keep track of dirs with package.mk for detecting multiple folders
_ALL_DIRS+="${DIR}\n"
_FOUND=$((_FOUND+1))
done
fi
# _FOUND multiple packages? fail
if [ $_FOUND -gt 1 ]; then
echo "Error - multiple package folders:"
echo -e "$_ALL_DIRS"
exit 1
fi
fi
[ -n "$1" ] && PKG_DIR="$(get_pkg_directory $1)"
if [ -n "$PKG_DIR" -a -r $PKG_DIR/package.mk ]; then
unset -f configure_package