132 lines
2.7 KiB
Bash
132 lines
2.7 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
apk_repo_root() {
|
|
cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd
|
|
}
|
|
|
|
apk_package_root() {
|
|
local repo_root="$1"
|
|
printf '%s\n' "${ALPINE_PACKAGE_ROOT:-${repo_root}/packaging/alpine/local}"
|
|
}
|
|
|
|
apk_package_dirs() {
|
|
local repo_root="$1"
|
|
local package_root
|
|
local package
|
|
local dir
|
|
|
|
package_root="$(apk_package_root "${repo_root}")"
|
|
|
|
if [[ -n "${APKBUILD_DIR:-}" ]]; then
|
|
printf '%s\n' "${APKBUILD_DIR}"
|
|
return
|
|
fi
|
|
|
|
if [[ -n "${ALPINE_PACKAGE:-}" || -n "${ALPINE_PACKAGES:-}" ]]; then
|
|
for package in ${ALPINE_PACKAGE:-${ALPINE_PACKAGES:-}}; do
|
|
case "${package}" in
|
|
/*|.*/*|*/*)
|
|
dir="${package}"
|
|
;;
|
|
*)
|
|
dir="${package_root}/${package}"
|
|
;;
|
|
esac
|
|
printf '%s\n' "${dir}"
|
|
done
|
|
return
|
|
fi
|
|
|
|
find "${package_root}" -mindepth 2 -maxdepth 2 -name APKBUILD -print \
|
|
| sed 's#/APKBUILD$##' \
|
|
| sort
|
|
}
|
|
|
|
apk_validate_package_dir() {
|
|
local package_dir="$1"
|
|
|
|
if [[ ! -f "${package_dir}/APKBUILD" ]]; then
|
|
printf 'missing APKBUILD: %s\n' "${package_dir}/APKBUILD" >&2
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
apk_package_name() {
|
|
basename "$1"
|
|
}
|
|
|
|
apk_package_arches() {
|
|
local package_dir="$1"
|
|
|
|
awk -F= '
|
|
$1 == "arch" {
|
|
gsub(/["'\'']/, "", $2)
|
|
gsub(/^[ \t]+|[ \t]+$/, "", $2)
|
|
print $2
|
|
exit
|
|
}
|
|
' "${package_dir}/APKBUILD"
|
|
}
|
|
|
|
apk_package_supports_arch() {
|
|
local package_dir="$1"
|
|
local arch="$2"
|
|
local supported_arches
|
|
local supported_arch
|
|
|
|
supported_arches="$(apk_package_arches "${package_dir}")"
|
|
|
|
for supported_arch in ${supported_arches}; do
|
|
case "${supported_arch}" in
|
|
all|noarch|"${arch}")
|
|
return 0
|
|
;;
|
|
esac
|
|
done
|
|
|
|
return 1
|
|
}
|
|
|
|
apk_container_package_dir() {
|
|
local repo_root="$1"
|
|
local package_dir="$2"
|
|
|
|
case "${package_dir}" in
|
|
"${repo_root}"/*)
|
|
printf '/work/%s\n' "${package_dir#"${repo_root}/"}"
|
|
;;
|
|
*)
|
|
printf 'package directory must be inside repository: %s\n' "${package_dir}" >&2
|
|
return 1
|
|
;;
|
|
esac
|
|
}
|
|
|
|
apk_run_package_hook() {
|
|
local repo_root="$1"
|
|
local package_dir="$2"
|
|
local hook_name="$3"
|
|
shift 3
|
|
|
|
local package_name
|
|
local hook_path
|
|
|
|
package_name="$(apk_package_name "${package_dir}")"
|
|
hook_path="${package_dir}/scripts/${hook_name}.sh"
|
|
|
|
if [[ ! -e "${hook_path}" ]]; then
|
|
printf 'Skipping %s: no %s hook\n' "${package_name}" "${hook_name}"
|
|
return
|
|
fi
|
|
if [[ ! -x "${hook_path}" ]]; then
|
|
printf 'package hook is not executable: %s\n' "${hook_path}" >&2
|
|
return 1
|
|
fi
|
|
|
|
printf 'Running %s hook for %s\n' "${hook_name}" "${package_name}"
|
|
REPO_ROOT="${repo_root}" \
|
|
PACKAGE_DIR="${package_dir}" \
|
|
PACKAGE_NAME="${package_name}" \
|
|
"${hook_path}" "$@"
|
|
}
|