Files
alpine-packages/scripts/apk/package-lib.sh
2026-06-08 23:43:29 +02:00

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}" "$@"
}