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