summaryrefslogtreecommitdiff
path: root/fullpkg
diff options
context:
space:
mode:
authorNicolás Reynolds <fauno@kiwwwi.com.ar>2011-03-21 20:17:36 -0300
committerNicolás Reynolds <fauno@kiwwwi.com.ar>2011-03-21 20:17:36 -0300
commit9c4f19b5e3f590002c19758cded5cb6ed691a8fd (patch)
treef9c18f9fc7cbab137e0598a14abee9d2ffb76b70 /fullpkg
parent28bf2e7374b2c9fa4fb66920a31152d20dc95285 (diff)
MIPS port helpful scripts
Diffstat (limited to 'fullpkg')
-rwxr-xr-xfullpkg185
1 files changed, 185 insertions, 0 deletions
diff --git a/fullpkg b/fullpkg
new file mode 100755
index 0000000..036e820
--- /dev/null
+++ b/fullpkg
@@ -0,0 +1,185 @@
+#!/bin/bash
+# TODO
+# * Do version checking
+# * Detect circular builds
+# * Detect pkgnames by provides, replaces, etc. instead of dir tree
+
+
+tmp_dir=$(mktemp -d)
+queue_file=$(mktemp)
+[[ ! -w $queue_file ]] && exit 1
+
+source /etc/makepkg.conf
+source /etc/abs.conf
+source /etc/libretools.conf
+
+[[ -r ~/.config/libretools/libretools.conf ]] && \
+ source ~/.config/libretools/libretools.conf
+
+# Queue Management
+# * Always get the queue list from the server
+# * Add/Remove from queue
+# * Check if a package is listed
+
+# TODO
+# * Check for concurrence
+
+# Get the queue list from the server
+get_queue() {
+ rsync -e ssh -aq $PARABOLAHOST:mips64el/queue $queue_file >/dev/null 2>&1 || {
+ echo ":: Failed to retrieve queue list"
+ return 1
+ }
+}
+
+# Put the queue list on the server
+put_queue() {
+ rsync -e ssh -aq $queue_file $PARABOLAHOST:mips64el/queue >/dev/null 2>&1 || {
+ echo ":: Failed to put queue list"
+ return 1
+ }
+}
+
+# Add packages to the queue
+update_queue() {
+ get_queue || return $?
+
+ basename $PWD | sed "s/$/:$PACKAGER/" >> $queue_file || return 2
+
+ put_queue || return $?
+}
+
+# Remove a package from the queue
+remove_queue() {
+ get_queue || return $?
+
+ grep -vw "^$(basename $PWD)" $queue_file > $queue_file.2
+ cat $queue_file.2 > $queue_file
+
+ put_queue || return $?
+}
+
+# Checks if a package is listed
+check_queue() {
+ get_queue || return $?
+
+ packager=$(grep -w "$(basename $PWD)" ${queue_file} | cut -d ':' -f2)
+
+ [[ ! -z $packager ]] && [[ "$packager" != "$PACKAGER" ]] && {
+ echo ":: $(basename $PWD) is being packaged by $packager. Please wait."
+ return 1
+ }
+
+ return 0
+}
+
+
+# TODO keep track of spawned fullpkgs
+quit() {
+ remove_queue
+
+ exit 1
+}
+
+source PKGBUILD
+echo ":: Building ${pkgbase} ${pkgname[@]}"
+
+trap "quit" SIGTERM SIGKILL
+
+check_queue || exit 1
+
+failed=()
+missing=()
+
+# Gets the dependency list from the package_* functions
+#pkgdeps=($(cat PKGBUILD | \
+# tr -d "\n" | \
+# sed -n "s/depends=(\([^)]\+\))/\n::\1\n/pg" | \
+# grep --color=never "^::" | \
+# tr -d [:\'\"] | \
+# tr " " "\n" | \
+# sort -u))
+
+# Clean version checking
+deps=$(echo "${depends[@]} ${makedepends[@]} ${pkgdeps[@]}" | \
+ sed "s/[=<>]\+[^ ]\+//g" | \
+ tr ' ' "\n" | \
+ sort -u)
+
+echo $_deps
+
+sudo pacman -Sy
+
+for _dep in ${deps[@]}; do
+ is_built $_dep && continue
+
+ for _repo in ${REPOS[@]}; do
+ # TODO find split packages
+ [[ -e "$ABSROOT/${_repo}/$_dep/PKGBUILD" ]] && {
+ cp -r "$ABSROOT/$_repo/$_dep" $tmp_dir/ || {
+ echo "Can't copy $_dep to the work dir."
+ exit 1
+ }
+
+ # Enter the work dir and run this command in it
+ pushd $tmp_dir/$_dep >/dev/null
+ $0
+
+ [[ $? -eq 1 ]] && {
+ failed=(${failed[@]} $_dep)
+ }
+
+ popd >/dev/null
+
+ break
+# } || {
+# The package can't be found
+# This can happen if:
+# * The package is built inside a split package
+# * The package is provided by some other package (ie by *-libre packages)
+# echo "==> Missing package $_dep"
+# missing=(${missing[@]} $_dep)
+ }
+ done
+done
+
+# TODO probably not elegant enough
+#[[ ${#failed[@]} -gt 0 ]] || [[ ${#missing[@]} -gt 0 ]] && {
+ [[ ${#failed[@]} -gt 0 ]] && {
+ echo ":: This packages failed to build: ${failed[@]}"
+ }
+
+# [[ ${#missing[@]} -gt 0 ]] && {
+# echo ":: This packages are missing: ${missing[@]}"
+# }
+
+# exit 1
+#}
+
+# Let everybody know we're building this
+update_queue || {
+ echo ":: Couldn't update the queue, let your partners know about this."
+}
+
+cp -r ../$(basename $PWD) $tmp_dir/
+pushd $tmp_dir/$(basename $PWD) >/dev/null
+
+sudo pacman -Sy
+makepkg --noconfirm -sLcr ; r=$?
+case $r in
+ 0)
+ echo "==> The build was succesful."
+ mipsrelease *.pkg.tar.*
+ ;;
+ 1)
+ echo "==> The build failed."
+ ;;
+ 2)
+ echo "==> The build failed."
+ ;;
+esac
+
+# Remove from queue
+remove_queue
+
+exit $r