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