diff -Naur pacman-3.3.2.orig/scripts/makepkg.sh.in pacman-3.3.2/scripts/makepkg.sh.in --- pacman-3.3.2.orig/scripts/makepkg.sh.in 2009-10-14 03:52:36.830628581 +0800 +++ pacman-3.3.2/scripts/makepkg.sh.in 2009-10-14 04:00:02.830582198 +0800 @@ -58,6 +58,7 @@ FORCE=0 INFAKEROOT=0 GENINTEG=0 +GETINTEG=0 SKIPINTEG=0 INSTALL=0 NOBUILD=0 @@ -501,6 +502,20 @@ popd &>/dev/null } +get_checksums() { + unset INTEGRITY_CHECK + + local integ + for integ in md5 sha1 sha256 sha384 sha512; do + grep "${integ}sums=(" "$startdir/$BUILDSCRIPT" &> /dev/null && \ + INTEGRITY_CHECK=(${INTEGRITY_CHECK[@]} $integ) + done + + [ ${#INTEGRITY_CHECK[@]} -eq 0 ] && source "$MAKEPKG_CONF" + + return 0 +} + generate_checksums() { msg "$(gettext "Generating checksums for source files...")" plain "" @@ -556,6 +571,35 @@ done } +update_checksums() { + local file="$startdir/$BUILDSCRIPT" + local integ=${INTEGRITY_CHECK[0]} + if grep "&& ${integ}sums=(" "$file" | grep '$CARCH' &> /dev/null; then + error "$(gettext "Multi-arch checksum update not supported. Exiting...")" + exit 1 + else + for integ in ${INTEGRITY_CHECK[@]}; do + sed -i "/${integ}sums=(/,/)$/d" "$file" + done + + if grep "# vim: set" "$file" &> /dev/null; then + sed -i '/# vim: set/d' "$file" + sed -i -e :a -e '/^\n*$/{$d;N;ba' -e '}' "$file" + local vimset=1 + fi + + generate_checksums >> "$file" + + if [ -n "$vimset" ]; then + echo >> "$file" + echo "# vim: set ts=2 sw=2 et:" >> "$file" + fi + fi + + msg "$(gettext "Updated checksums in %s")" "$BUILDSCRIPT" + return 0 +} + check_checksums() { [ ${#source[@]} -eq 0 ] && return 0 @@ -1420,6 +1464,7 @@ echo "$(gettext " -f, --force Overwrite existing package")" echo "$(gettext " -g, --geninteg Generate integrity checks for source files")" echo "$(gettext " --skipinteg Do not fail when integrity checks are missing")" + printf "$(gettext " -G, --getinteg Update integrity checks in %s")\n" "$BUILDSCRIPT" echo "$(gettext " -h, --help This help")" echo "$(gettext " -i, --install Install package after successful build")" echo "$(gettext " -L, --log Log package build process")" @@ -1465,9 +1510,9 @@ ARGLIST=$@ # Parse Command Line Options. -OPT_SHORT="AcCdefFghiLmop:rRsV" +OPT_SHORT="AcCdefFgGhiLmop:rRsV" OPT_LONG="allsource,asroot,ignorearch,clean,cleancache,nodeps" -OPT_LONG="$OPT_LONG,noextract,force,forcever:,geninteg,help,holdver" +OPT_LONG="$OPT_LONG,noextract,force,forcever:,geninteg,getinteg,help,holdver" OPT_LONG="$OPT_LONG,install,log,nocolor,nobuild,rmdeps,repackage,skipinteg" OPT_LONG="$OPT_LONG,source,syncdeps,version,config:" # Pacman Options @@ -1500,6 +1545,7 @@ --forcever) shift; FORCE_VER=$1;; -F) INFAKEROOT=1 ;; -g|--geninteg) GENINTEG=1 ;; + -G| --getinteg) GETINTEG=1 ;; --holdver) HOLDVER=1 ;; -i|--install) INSTALL=1 ;; -L|--log) LOGGING=1 ;; @@ -1664,10 +1710,21 @@ mkdir -p "$srcdir" cd "$srcdir" download_sources + get_checksums generate_checksums exit 0 # $E_OK fi +if [ "$GETINTEG" -eq 1 ]; then + mkdir -p "$srcdir" + cd "$srcdir" + download_sources + get_checksums + update_checksums + #cd "$startdir" # don't exit; continue build + exit 0 # $E_OK +fi + if [ "$(type -t package)" = "function" ]; then PKGFUNC=1 fi