Browse Source

Merge branch 'master' of git+ssh://openadk.org/git/openadk

Waldemar Brodkorb 10 years ago
parent
commit
48adb589d0
3 changed files with 128 additions and 70 deletions
  1. 7 9
      mk/buildhlp.mk
  2. 75 61
      scripts/update-patches
  3. 46 0
      scripts/update-patches2

+ 7 - 9
mk/buildhlp.mk

@@ -1,6 +1,9 @@
 # This file is part of the OpenADK project. OpenADK is copyrighted
 # material, please see the LICENCE file in the top-level directory.
 
+shellescape='$(subst ','\'',$(1))'
+shellexport=$(1)=$(call shellescape,${$(1)})
+
 ifneq ($(strip ${PKG_SITES}),)
 ifeq ($(strip ${DISTFILES}),)
 DISTFILES:=		${PKG_NAME}-${PKG_VERSION}.tar.xz
@@ -105,14 +108,9 @@ endif
 			mv $$i.bak $$i; \
 		fi;\
 	done
-	@toedit=$$(WRKDIST='${WRKDIST}' CURDIR=$$(pwd) \
-	    PATCH_LIST='patch-* *.patch' WRKDIR1='${WRKDIR}' \
-	    ${BASH} ${TOPDIR}/scripts/update-patches); \
-	    if [[ -n $$toedit && $$toedit != FAIL ]]; then \
-		echo -n 'edit patches: '; read i; \
-		cd patches && $${VISUAL:-$${EDITOR:-vi}} $$toedit; \
-	    fi; \
-	    rm -rf ${WRKDIR}.orig; \
-	    [[ $$toedit != FAIL ]]
+	@WRKDIST=$(call shellescape,${WRKDIST}) \
+	    WRKDIR1=$(call shellescape,${WRKDIR}) \
+	    PATH=$(call shellescape,${HOST_PATH}) \
+	    mksh ${TOPDIR}/scripts/update-patches2
 
 .PHONY: update-patches host-update-patches

+ 75 - 61
scripts/update-patches

@@ -1,4 +1,7 @@
-#!/usr/bin/env bash
+#!/usr/bin/env mksh
+#-
+# Copyright (c) 2014
+#	Thorsten Glaser <tg@mirbsd.org>
 # Copyright (c) 2006
 #	Thorsten Glaser <tg@freewrt.org>
 #
@@ -24,15 +27,12 @@
 # damage or existence of a defect, except proven that it results out
 # of said person's immediate fault when using the work as intended.
 
-[[ -n $BASH_VERSION ]] && shopt -s extglob
-
-do_diff()
-{
+do_diff() {
 	local f1=$2/$1
 	local f2=$3/$1
 
 	if [[ ! -e $f1 ]]; then
-		[[ -d ${f1%/*}/. ]] || mkdir -p ${f1%/*}
+		[[ -d ${f1%/*}/. ]] || mkdir -p "${f1%/*}"
 		if [[ ! -s $f2 ]]; then
 			cat <<EOF
 --- $f1	(non-existant)
@@ -47,15 +47,18 @@ EOF
 	return $?
 }
 
+set -A accounted
+set -A edit
+
 TRANSFORM='sed s/[.+]/\\\\&/g'
 PATCHDIR=$CURDIR/patches
 EXTRADIR=$CURDIR/extra
 
-mkdir -p $PATCHDIR
+mkdir -p "$PATCHDIR"
 
 SUBDIST=${WRKDIST##${WRKDIR1}?(/)}
 if [[ -n $SUBDIST ]]; then
-	mv ${WRKDIR1}.orig/${SUBDIST} ${WRKDIR1}/${SUBDIST}.orig
+	mv "${WRKDIR1}.orig/${SUBDIST}" "${WRKDIR1}/${SUBDIST}.orig"
 	D_BASE=${WRKDIR1}
 	D_SUB=${SUBDIST}
 #	D_SUBP=$D_SUB
@@ -63,45 +66,49 @@ if [[ -n $SUBDIST ]]; then
 	D_CMP=$D_SUBP
 else
 	# WRKSRC == WRKDIR
-	D_BASE=$(dirname ${WRKDIR1})
-	D_SUB=$(basename ${WRKDIR1})
+	D_BASE=$(dirname "${WRKDIR1}")
+	D_SUB=$(basename "${WRKDIR1}")
 	D_SUBP=$D_SUB
 	D_CMP=
 fi
 ORGDIST=${D_BASE}/${D_SUB}.orig
 
 if [[ -e $WRKDIST/.patched-newfiles ]]; then
-	touch $ORGDIST/.patched-newfiles
+	touch "$ORGDIST/.patched-newfiles"
 	patch_newfiles=1
 else
 	patch_newfiles=0
 fi
 
 if [[ -e $WRKDIST/../.autoreconf_done ]]; then
-	touch $ORGDIST/.autoreconf_done
+	touch "$ORGDIST/.autoreconf_done"
 	ignore_autoconf=1
 else
 	ignore_autoconf=0
 fi
 
-DIFF_FLAGS="-adu -I \"^--- $(echo $D_SUBP.orig/ | $TRANSFORM)@@	.*\""
-DIFF_FLAGS="$DIFF_FLAGS -I \"^\+\+\+ $(echo $D_SUBP/ | $TRANSFORM)@@	.*\""
+DIFF_FLAGS="-adu -I \"^--- $(print -r -- "$D_SUBP.orig/" | $TRANSFORM)@@	.*\""
+DIFF_FLAGS="$DIFF_FLAGS -I \"^\+\+\+ $(print -r -- "$D_SUBP/" | $TRANSFORM)@@	.*\""
 
-for file in $(cd ${WRKDIST}; find . -type f | sed 's#^\./##'); do
-	echo "DEBUG: $file" >> /tmp/debug
+(cd "${WRKDIST}"; find . -type f -print0) |&
+while IFS= read -p -d '' -r file; do
+	file=${file#./}
+	#print -r -- "DEBUG: <$file>" >>/tmp/debug
 	[[ ! -e $ORGDIST/$file && $patch_newfiles = 0 ]] && continue
-	[[ $file = configure && $ignore_autoconf = 1 ]] && continue	
-	[[ $file = missing && $ignore_autoconf = 1 ]] && continue	
-	[[ $file = depcomp && $ignore_autoconf = 1 ]] && continue	
-	[[ $file = install-sh && $ignore_autoconf = 1 ]] && continue	
-	[[ $file = aclocal.m4 && $ignore_autoconf = 1 ]] && continue	
-	[[ $file = INSTALL && $ignore_autoconf = 1 ]] && continue	
-	[[ $file = config.h.in && $ignore_autoconf = 1 ]] && continue	
-	[[ $(basename $file) = Makefile.in && $ignore_autoconf = 1 ]] && continue	
+	if (( ignore_autoconf )); then
+		[[ $file = configure ]] && continue
+		[[ $file = missing ]] && continue
+		[[ $file = depcomp ]] && continue
+		[[ $file = install-sh ]] && continue
+		[[ $file = aclocal.m4 ]] && continue
+		[[ $file = INSTALL ]] && continue
+		[[ $file = config.h.in ]] && continue
+		[[ ${file##*/} = Makefile.in ]] && continue
+	fi
 	cmp -s "$ORGDIST/$file" "$WRKDIST/$file" && continue
-	echo "Processing ${file}..." >&2
+	print -ru2 -- "Processing ${file}..."
 	# look in patchdir for an existing patchfile matching this
-	cd $PATCHDIR
+	cd "$PATCHDIR"
 	for i in $PATCH_LIST; do
 		# Ignore non-files, or old backup
 		[[ ! -f $i || $i = *@(.orig|.rej|~) ]] && continue
@@ -109,14 +116,14 @@ for file in $(cd ${WRKDIST}; find . -type f | sed 's#^\./##'); do
 		# Patch found. Is this the one?
 		if grep "^[+-][+-][+-] $D_CMP[^/]*/$file	" "$i" >/dev/null; then
 			# Multiple files in the diff?
-			if [ $(grep -c "^--- $D_CMP" "$i") -gt 1 -o \
-			    $(grep -c "^+++ $D_CMP" "$i") -gt 1 ]; then
-				echo "Cannot process, $i contains patches" >&2
-				echo "to multiple files! Aborting." >&2
-				echo FAIL
+			if [[ $(grep -c "^--- $D_CMP" "$i") -gt 1 || \
+			    $(grep -c "^+++ $D_CMP" "$i") -gt 1 ]]; then
+				print -ru2 -- "Cannot process, $i contains patches"
+				print -ru2 -- "to multiple files! Aborting."
+				print -n 'FAIL\0'
 				[[ -n $SUBDIST ]] && mv \
-				    ${WRKDIR1}/${SUBDIST}.orig \
-				    ${WRKDIR1}.orig/${SUBDIST}
+				    "${WRKDIR1}/${SUBDIST}.orig" \
+				    "${WRKDIR1}.orig/${SUBDIST}"
 				exit 0
 			fi
 			# Multiple diffs with this file?
@@ -131,56 +138,63 @@ for file in $(cd ${WRKDIST}; find . -type f | sed 's#^\./##'); do
 				pflst="$pflst '$j'"
 			done
 			if (( n != 1 )); then
-				echo "Cannot process, file $file" >&2
-				echo "is contained in multiple patches:" >&2
-				echo "$pflst" >&2
-				echo FAIL
+				print -ru2 -- "Cannot process, file $file"
+				print -ru2 -- "is contained in multiple patches:"
+				print -ru2 -- "$pflst"
+				print -n 'FAIL\0'
 				[[ -n $SUBDIST ]] && mv \
-				    ${WRKDIR1}/${SUBDIST}.orig \
-				    ${WRKDIR1}.orig/${SUBDIST}
+				    "${WRKDIR1}/${SUBDIST}.orig" \
+				    "${WRKDIR1}.orig/${SUBDIST}"
 				exit 0
 			fi
 			# No, process this patch
 
-			accounted="$accounted $i"
+			accounted+=("$i")
 			# found it, copy preamble before comparision
-			( sed -e "/^--- /,\$d" <$i; \
-			  cd $D_BASE && do_diff "$file" "$D_SUB.orig" "$D_SUB" \
+			( sed -e "/^--- /,\$d" <"$i"; \
+			  cd "$D_BASE" && do_diff "$file" "$D_SUB.orig" "$D_SUB" \
 			) >"$i.new"
-			# did it change ? mark it as changed
-			tfile="$(echo "$file" | $TRANSFORM)"
-			if eval diff "$(echo "${DIFF_FLAGS}" \
-			    | sed "s#@@#${tfile}#g")" \
-			    "$i" "$i.new" 1>&2; then
+			# did it change? mark it as changed
+			tfile=$(print -r -- "$file" | $TRANSFORM)
+			if eval diff "$(print -r -- "${DIFF_FLAGS}" | sed \
+			    "s#@@#${tfile}#g")" "$i" "$i.new" 1>&2; then
 				rm "$i.new"
 			else
-				echo "Patch $i for $file updated" >&2
+				print -ru2 -- "Patch $i for $file updated"
 				mv "$i" "$i.orig"
 				mv "$i.new" "$i"
-				edit="$edit $i"
+				edit+=("$i")
 			fi
 			continue 2
 		fi
 	done
 
 	# Build a sensible name for the new patch file
-	patchname=patch-$(echo "$file" | sed -e 's#[/. ]#_#g')
-	echo "No patch-* found for $file, creating $patchname" >&2
-	( cd $D_BASE && do_diff "$file" "$D_SUB.orig" "$D_SUB" ) >$patchname
-	edit="$edit $patchname"
-	accounted="$accounted $patchname"
+	patchname=patch-${file//[\/.- ]/_}
+	print -ru2 -- "No patch-* found for $file, creating $patchname"
+	( cd "$D_BASE" && do_diff "$file" "$D_SUB.orig" "$D_SUB" ) >"$patchname"
+	edit+=("$patchname")
+	accounted+=("$patchname")
 done
 
 # Verify all patches accounted for
-cd $PATCHDIR
+cd "$PATCHDIR"
 for i in *; do
 	[[ ! -f $i || $i = *@(.orig|.rej|~) ]] && continue
-	grep '^\\ No newline at end of file' $i >/dev/null \
-	    && echo "*** Patch $i needs manual intervention" >&2
-	[[ $accounted != *@($i)* ]] \
-	    && echo "*** Patch $i not accounted for" >&2
+	grep '^\\ No newline at end of file' "$i" >/dev/null && \
+	    print -ru2 -- "*** Patch $i needs manual intervention"
+	found=0
+	for j in "${accounted[@]}"; do
+		[[ $i = "$j" ]] || continue
+		found=1
+		break
+	done
+	(( found )) || print -ru2 -- "*** Patch $i not accounted for"
 done
 
-echo $edit
-[[ -n $SUBDIST ]] && mv ${WRKDIR1}/${SUBDIST}.orig ${WRKDIR1}.orig/${SUBDIST}
+for i in "${edit[@]}"; do
+	print -nr -- "$i"
+	print -n '\0'
+done
+[[ -n $SUBDIST ]] && mv "${WRKDIR1}/${SUBDIST}.orig" "${WRKDIR1}.orig/${SUBDIST}"
 exit 0

+ 46 - 0
scripts/update-patches2

@@ -0,0 +1,46 @@
+#!/usr/bin/env mksh
+#-
+# Copyright © 2014
+#	Thorsten Glaser <tg@mirbsd.org>
+#
+# Provided that these terms and disclaimer and all copyright notices
+# are retained or reproduced in an accompanying document, permission
+# is granted to deal in this work without restriction, including un‐
+# limited rights to use, publicly perform, distribute, sell, modify,
+# merge, give away, or sublicence.
+#
+# This work is provided “AS IS” and WITHOUT WARRANTY of any kind, to
+# the utmost extent permitted by applicable law, neither express nor
+# implied; without malicious intent or gross negligence. In no event
+# may a licensor, author or contributor be held liable for indirect,
+# direct, other damage, loss, or other issues arising in any way out
+# of dealing in the work, even if advised of the possibility of such
+# damage or existence of a defect, except proven that it results out
+# of said person’s immediate fault when using the work as intended.
+
+PATCH_LIST='patch-* *.patch'
+CURDIR=$PWD
+export CURDIR PATCH_LIST
+
+mksh "${TOPDIR}"/scripts/update-patches |&
+first=1
+set -A toedit
+while IFS= read -p -d '' -r; do
+	if (( first )); then
+		if [[ $REPLY = FAIL ]]; then
+			rm -rf "${WRKDIR1}.orig"
+			exit 1
+		fi
+		first=0
+	fi
+	toedit+=("$REPLY")
+done
+if (( !first )); then
+	print -n 'edit patches: '
+	read
+	cd patches
+	${VISUAL:-${EDITOR:-vi}} "${toedit[@]}"
+	cd ..
+fi
+rm -rf "${WRKDIR1}.orig"
+exit 0