devtools/src/lib/util/srcinfo.sh

70 lines
1.5 KiB
Bash

#!/hint/bash
#
# SPDX-License-Identifier: GPL-3.0-or-later
[[ -z ${DEVTOOLS_INCLUDE_UTIL_SRCINFO_SH:-} ]] || return 0
DEVTOOLS_INCLUDE_UTIL_SRCINFO_SH=1
_DEVTOOLS_LIBRARY_DIR=${_DEVTOOLS_LIBRARY_DIR:-@pkgdatadir@}
# shellcheck source=src/lib/common.sh
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/common.sh
source /usr/share/makepkg/util/util.sh
source /usr/share/makepkg/srcinfo.sh
set -eo pipefail
print_srcinfo() {
local pkgpath=${1:-.}
local outdir pkg pid
local pids=()
# source the PKGBUILD
# shellcheck source=contrib/makepkg/PKGBUILD.proto
. "${pkgpath}"/PKGBUILD
# run without parallelization for single packages
if (( ${#pkgname[@]} == 1 )); then
write_srcinfo_content
return 0
fi
[[ -z ${WORKDIR:-} ]] && setup_workdir
outdir=$(mktemp --directory --tmpdir="${WORKDIR}" pkgctl-srcinfo.XXXXXXXXXX)
# fork workload for each split pkgname
for pkg in "${pkgname[@]}"; do
(
# deactivate errexit to avoid makepkg abort on grep_function
set +e
srcinfo_write_package "$pkg" > "${outdir}/${pkg}"
)&
pids+=($!)
done
# join workload
for pid in "${pids[@]}"; do
if ! wait "${pid}"; then
return 1
fi
done
# collect output
srcinfo_write_global
for pkg in "${pkgname[@]}"; do
srcinfo_separate_section
cat "${outdir}/${pkg}"
done
}
write_srcinfo_file() {
local pkgpath=${1:-.}
stat_busy 'Generating .SRCINFO'
if ! print_srcinfo "${pkgpath}" > "${pkgpath}"/.SRCINFO; then
error 'Failed to write .SRCINFO file'
return 1
fi
stat_done
}