70 lines
1.5 KiB
Bash
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
|
|
}
|