Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/src/lib/repo
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/repo')
-rw-r--r--src/lib/repo/arch32.sh74
-rw-r--r--src/lib/repo/clone.sh12
2 files changed, 86 insertions, 0 deletions
diff --git a/src/lib/repo/arch32.sh b/src/lib/repo/arch32.sh
new file mode 100644
index 0000000..7bdf628
--- /dev/null
+++ b/src/lib/repo/arch32.sh
@@ -0,0 +1,74 @@
+# does local adaptions needed to build for Archlinux32
+# (this should be held in sync with builder/lib/common-functions mangle_pkgbuild)
+#
+# mangle_pkgbuild $PKGBUILD [$sub_pkgrel]
+#
+# append $sub_pkgrel to the pkgrel
+# remove $pkgrel from {make,check,opt,}depends
+pkgctl_repo_patch_arch32() {
+ local pkgname="$1"
+
+ #~ local PKGBUILD="$1"
+ #~ local sub_pkgrel="$2"
+
+ # add the remote branch with our patches
+ git -C "${pkgname}" remote add -m master archlinux32 git://git.archlinux32.org/packages
+ git -C "${pkgname}" fetch --depth 1 archlinux32
+
+ #~ if [ -n "${sub_pkgrel}" ]; then
+ #~ sub_pkgrel=".${sub_pkgrel}"
+ #~ fi
+
+ # extend architecture with our architecture
+ awk -i inplace '!/^arch=[^#]*any/ {gsub(/^arch=\(/,"arch=(i486 i686 pentium4 ")}; {print}' \
+ "${pkgname}/PKGBUILD"
+
+ #~ if grep -q '^\s*pkgname=["'"'"']\?lib32-' "${pkgname}/${PKGBUILD}"; then
+ #~ sed -i '
+ #~ s/^\(\s*pkgrel=\)['"'"'"]\?\([0-9]\+\)\.[0-9]*['"'"'"]\?\s*\(#.*\)\?$/\1"\2"/
+ #~ ' "${pkgname}/PKGBUILD"
+ #~ fi
+
+ #~ sed -i '
+ #~ s/^\(\s*pkgrel=\)['"'"'"]\?\([0-9]\+\)\(\.[0-9.]*\)\?['"'"'"]\?\s*\(#.*\)\?$/\1"\2'"${sub_pkgrel:-\\3}"'"/
+ #~ ' "${pkgname}/PKGBUILD"
+
+ # remove "lib32-" and "gcc-multilib" from {make,check,opt,}depends
+ # shellcheck disable=SC2016
+ sed -i '
+ /^\s*\(make\|check\|opt\|\)depends\(_[^=[:space:]]\+\)\?=(/ {
+ :a
+ /^\s*\(\S[^=]*\)=(\(\([^()"'"'"']\|"[^"]*"\|['"'"'][^'"'"']*['"'"']\s*\)*\(#[^\n]*\n\)\?\)*)/! {
+ $b
+ N
+ ba
+ }
+ :b
+ s/\(=.*["'"'"'([:space:]]\)lib32-/\1/g
+ s/\(=.*["'"'"'([:space:]]\)gcc-multilib\(["'"'"')[:space:]]\)/\1gcc\2/g
+ s/\(=.*["'"'"'([:space:]][^[:space:]$]\+[<=>]\S\+\)-[^:"'"'"')[:space:]]\+\([:"'"'"')[:space:]]\)/\1\2/g
+ tb
+ }
+ ' "${pkgname}/PKGBUILD"
+
+ # iterate the arch32 diffs in the archlinux32/master branch (we don't know
+ # the destination repo, so we just scan both 'core' and 'extra' as well as
+ # 'build-support')
+ listfile=$(mktemp --tmpdir="${WORKDIR}" pkgctl-arch32.XXXXXXXXXX)
+ >"${listfile}"
+ for repo in core extra build-support; do
+ git -C "${pkgname}" ls-tree -r --name-only archlinux32/master "${repo}/${pkgname}" >>"${listfile}"
+ done
+ for file in $(cat "${listfile}"); do
+ if [[ "${file##*/}" = "PKGBUILD" ]]; then
+ if [ -f "${pkgname}/PKGBUILD" ]; then
+ printf "\n\n# -- Arch32 specific --\n\n" >> "${pkgname}/PKGBUILD"
+ git -C "${pkgname}" show archlinux32/master:"${file}" >> "${pkgname}/PKGBUILD"
+ else
+ git -C "${pkgname}" show archlinux32/master:"${file}" > "${pkgname}/PKGBUILD"
+ fi
+ else
+ git -C "${pkgname}" show archlinux32/master:"${file}" > "${pkgname}/${file##*/}"
+ fi
+ done
+}
diff --git a/src/lib/repo/clone.sh b/src/lib/repo/clone.sh
index ef6a0e2..33a333f 100644
--- a/src/lib/repo/clone.sh
+++ b/src/lib/repo/clone.sh
@@ -16,6 +16,8 @@ source "${_DEVTOOLS_LIBRARY_DIR}"/lib/api/gitlab.sh
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/repo/configure.sh
# shellcheck source=src/lib/util/git.sh
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/util/git.sh
+# shellcheck source=src/lib/repo/arch32.sh
+source "${_DEVTOOLS_LIBRARY_DIR}"/lib/repo/arch32.sh
source /usr/share/makepkg/util/message.sh
@@ -40,6 +42,7 @@ pkgctl_repo_clone_usage() {
--protocol https Clone the repository over https
--switch VERSION Switch the current working tree to a specified version
--universe Clone all existing packages, useful for cache warming
+ --arch32 Make all required modifications to build on Archlinux32
-j, --jobs N Run up to N jobs in parallel (default: $(nproc))
-h, --help Show this help text
@@ -63,6 +66,7 @@ pkgctl_repo_clone() {
local MAINTAINER=
local VERSION=
local CONFIGURE_OPTIONS=()
+ local ARCH32=0
local jobs=
jobs=$(nproc)
@@ -124,6 +128,10 @@ pkgctl_repo_clone() {
jobs=$2
shift 2
;;
+ --arch32)
+ ARCH32=1
+ shift
+ ;;
--)
shift
break
@@ -194,5 +202,9 @@ pkgctl_repo_clone() {
if [[ -n "${VERSION}" ]]; then
pkgctl_repo_switch "${VERSION}" "${pkgbase}"
fi
+
+ if (( ARCH32 )); then
+ pkgctl_repo_patch_arch32 "${pkgbase}"
+ fi
done
}