pkgsrc-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[pkgsrc/trunk]: pkgsrc/mk Teach the pkgsrc/mk/checksum/checksum script how to...
details: https://anonhg.NetBSD.org/pkgsrc/rev/48c721d79662
branches: trunk
changeset: 532241:48c721d79662
user: jlam <jlam%pkgsrc.org@localhost>
date: Tue Aug 14 21:25:09 2007 +0000
description:
Teach the pkgsrc/mk/checksum/checksum script how to verify patches by
first stripping them of NetBSD RCS ID tags. Use the checksum script
in the patch module to verify patch checksums instead of hand-coding
a miniature version of the checksum script in the do-pkgsrc-patches
target.
diffstat:
mk/checksum/checksum | 87 +++++++++++++++++++++++++++++++--------------------
mk/patch/patch.mk | 33 ++++++++++--------
2 files changed, 70 insertions(+), 50 deletions(-)
diffs (221 lines):
diff -r 4630359afbad -r 48c721d79662 mk/checksum/checksum
--- a/mk/checksum/checksum Tue Aug 14 19:59:43 2007 +0000
+++ b/mk/checksum/checksum Tue Aug 14 21:25:09 2007 +0000
@@ -1,8 +1,8 @@
#!/bin/sh
#
-# $NetBSD: checksum,v 1.10 2006/12/15 13:15:06 martti Exp $
+# $NetBSD: checksum,v 1.11 2007/08/14 21:25:09 jlam Exp $
#
-# Copyright (c) 2006 The NetBSD Foundation, Inc.
+# Copyright (c) 2006, 2007 The NetBSD Foundation, Inc.
# All rights reserved.
#
# This code is derived from software contributed to The NetBSD Foundation
@@ -47,7 +47,20 @@
#
# DESCRIPTION
# checksum will verify the checksums in the distinfo file for each
-# of the files specified.
+# of the files specified. If the file is a patch (named patch-*),
+# then strip out any lines containing NetBSD RCS ID tags before
+# computing the checksum for comparison the one in the distinfo
+# file.
+#
+# The checksum utility exits with one of the following values:
+#
+# 0 All of the file checksums verify.
+#
+# 1 At least one of the file checksums did not match.
+#
+# 2 At least one of the files is missing any checksum.
+#
+# >2 An error occurred.
#
# OPTIONS
# -a algorithm Only verify checksums for the specified algorithm.
@@ -61,6 +74,7 @@
: ${DIGEST:=digest}
: ${CAT:=cat}
: ${ECHO:=echo}
+: ${SED:=sed}
: ${TEST:=test}
self="${0##*/}"
@@ -79,20 +93,21 @@
--) shift; break ;;
-*) ${ECHO} 1>&2 "$self: unknown option -- ${1#-}"
usage
- exit 1
+ exit 128
;;
*) break ;;
esac
done
# Process required arguments
-${TEST} $# -gt 0 || { usage; exit 1; }
+${TEST} $# -gt 0 || { usage; exit 128; }
distinfo="$1"; shift
files="$@"
+files_left="$@"
if ${TEST} ! -f "$distinfo"; then
${ECHO} 1>&2 "$self: distinfo file missing: $distinfo"
- exit 1
+ exit 128
fi
digestcmd=
@@ -116,7 +131,7 @@
if ${TEST} -z "$digestcmd"; then
${ECHO} 1>&2 "$self: \`\`${DIGEST}'' is missing"
- exit 1
+ exit 128
fi
{ exitcode=0
@@ -132,26 +147,24 @@
${TEST} "$d_alg" = "$algorithm" || continue
fi
- eval "tmp=\"\$_alg_${d_alg}\""
- ${TEST} -n "$tmp" || eval "_alg_${d_alg}=\"$files\""
-
for file in $files; do
sfile="${file%$suffix}"
+ case $file in
+ patch-*|*/patch-*) sfile="${sfile##*/}" ;;
+ esac
${TEST} "$d_file" = "($sfile)" || continue
- eval "tmp=\"\$_alg_${d_alg}\""
- case "$tmp" in
- "$file"|"$file "*) tmp_pre= ;;
- *" $file") tmp_pre="${tmp%% $file}" ;;
- *) tmp_pre="${tmp%% $file *} " ;;
+ case "$files_left" in
+ "$file"|"$file "*) pre= ;;
+ *" $file") pre="${files_left%% $file}" ;;
+ *) pre="${files_left%% $file *} " ;;
esac
- case "$tmp" in
- "$file"|*" $file") tmp_post= ;;
- "$file "*) tmp_post="${tmp##$file }" ;;
- *) tmp_post="${tmp##* $file }" ;;
+ case "$files_left" in
+ "$file"|*" $file") post= ;;
+ "$file "*) post="${files_left##$file }" ;;
+ *) post="${files_left##* $file }" ;;
esac
- tmp="${tmp_pre}${tmp_post}"
- eval "_alg_${d_alg}=\"$tmp\""
+ files_left="${pre}${post}"
if ${TEST} "$d_checksum" = "IGNORE"; then
${ECHO} 1>&2 "$self: Ignoring checksum for $sfile"
@@ -159,29 +172,33 @@
fi
if ${TEST} ! -f $file; then
${ECHO} 1>&2 "$self: $file does not exist"
- exit 1
+ exit 128
fi
- checksum=`${DIGEST} $d_alg < $file`
+ case $file in
+ patch-*|*/patch-*)
+ checksum=`${SED} -e '/[$]NetBSD.*/d' $file | ${DIGEST} $d_alg`
+ ;;
+ *)
+ checksum=`${DIGEST} $d_alg < $file`
+ ;;
+ esac
if ${TEST} "$d_checksum" = "$checksum"; then
${ECHO} "=> Checksum $d_alg OK for $sfile"
else
${ECHO} 1>&2 "$self: Checksum $d_alg mismatch for $sfile"
- exitcode=1
+ exit 1
fi
break
done
-
- eval "tmp=\"\$_alg_${d_alg}\""
- ${TEST} -n "$tmp" || eval "_alg_${d_alg}=DONE"
done
- if ${TEST} -n "$algorithm"; then
- eval "tmp=\"\$_alg_${algorithm}\""
- ${TEST} -n "$tmp" || tmp="$files"
- if ${TEST} "$tmp" != DONE; then
- for file in $tmp; do
+ if ${TEST} -n "$files_left"; then
+ for file in $files_left; do
+ if ${TEST} -n "$algorithm"; then
${ECHO} 1>&2 "$self: No $algorithm checksum recorded for $file"
- exitcode=1
- done
- fi
+ else
+ ${ECHO} 1>&2 "$self: No checksum recorded for $file"
+ fi
+ exitcode=2
+ done
fi
exit $exitcode; } < $distinfo
diff -r 4630359afbad -r 48c721d79662 mk/patch/patch.mk
--- a/mk/patch/patch.mk Tue Aug 14 19:59:43 2007 +0000
+++ b/mk/patch/patch.mk Tue Aug 14 21:25:09 2007 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: patch.mk,v 1.12 2007/08/14 13:21:57 rillig Exp $
+# $NetBSD: patch.mk,v 1.13 2007/08/14 21:25:10 jlam Exp $
#
# The following variables may be set in a package Makefile and control
# how pkgsrc patches are applied.
@@ -261,6 +261,11 @@
_PKGSRC_PATCHES+= ${LOCALPATCHES}/${PKGPATH}/*
.endif
+_CHECKSUM_CMD= ${SETENV} DIGEST=${TOOLS_DIGEST:Q} CAT=${TOOLS_CAT:Q} \
+ ECHO=${TOOLS_ECHO:Q} SED=${TOOLS_SED:Q} \
+ TEST=${TOOLS_TEST:Q} \
+ ${SH} ${PKGSRCDIR}/mk/checksum/checksum
+
pkgsrc-patch-message:
@${STEP_MSG} "Applying pkgsrc patches for ${PKGNAME}"
@@ -287,22 +292,20 @@
patch_warning "Ignoring patch file $$i: distinfo not found"; \
continue; \
fi; \
- filename=`${BASENAME} $$i`; \
- algsum=`${AWK} '(NF == 4) && ($$2 == "('$$filename')") && ($$3 == "=") {print $$1 " " $$4}' ${DISTINFO_FILE} || ${TRUE}`; \
- if ${TEST} -z "$$algsum"; then \
- patch_warning "Ignoring patch file $$i: no checksum found"; \
- continue; \
+ ${ECHO_PATCH_MSG} "Verifying $$i"; \
+ if ${_CHECKSUM_CMD} ${DISTINFO_FILE} $$i >/dev/null 2>&1; then \
+ cksum_result=0; \
+ else \
+ cksum_result=$$?; \
fi; \
- set -- $$algsum; \
- alg="$$1"; \
- recorded="$$2"; \
- calcsum=`${SED} -e '/\$$NetBSD.*/d' $$i | ${TOOLS_DIGEST} $$alg`; \
- ${ECHO_PATCH_MSG} "Verifying $$filename (using digest algorithm $$alg)"; \
- if ${TEST} "$$calcsum" != "$$recorded"; then \
- patch_warning "Ignoring patch file $$i: invalid checksum"; \
+ case "$$cksum_result" in \
+ 0) ;; \
+ 2) patch_warning "Ignoring patch file $$i: no checksum found"; \
+ continue ;; \
+ 1) patch_warning "Ignoring patch file $$i: invalid checksum"; \
fail="$$fail $$i"; \
- continue; \
- fi; \
+ continue ;; \
+ esac; \
;; \
esac; \
${ECHO_PATCH_MSG} "Applying pkgsrc patch $$i"; \
Home |
Main Index |
Thread Index |
Old Index