Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/build/build.sh5
-rw-r--r--src/lib/util/srcinfo.sh69
2 files changed, 72 insertions, 2 deletions
diff --git a/src/lib/build/build.sh b/src/lib/build/build.sh
index e0982e4..8b4240c 100644
--- a/src/lib/build/build.sh
+++ b/src/lib/build/build.sh
@@ -14,6 +14,8 @@ source "${_DEVTOOLS_LIBRARY_DIR}"/lib/db/update.sh
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/release.sh
# shellcheck source=src/lib/util/git.sh
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/util/git.sh
+# shellcheck source=src/lib/util/srcinfo.sh
+source "${_DEVTOOLS_LIBRARY_DIR}"/lib/util/srcinfo.sh
# shellcheck source=src/lib/util/pacman.sh
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/util/pacman.sh
# shellcheck source=src/lib/valid-repos.sh
@@ -26,8 +28,7 @@ source "${_DEVTOOLS_LIBRARY_DIR}"/lib/valid-inspect.sh
source /usr/share/makepkg/util/config.sh
source /usr/share/makepkg/util/message.sh
-set -e
-set -o pipefail
+set -eo pipefail
pkgctl_build_usage() {
diff --git a/src/lib/util/srcinfo.sh b/src/lib/util/srcinfo.sh
new file mode 100644
index 0000000..b646dc3
--- /dev/null
+++ b/src/lib/util/srcinfo.sh
@@ -0,0 +1,69 @@
+#!/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
+}