summaryrefslogtreecommitdiff
path: root/mk/checksum/checksum.mk
blob: d2185605b29423cc8153fad633ef12699ad1b4bd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# $NetBSD: checksum.mk,v 1.3 2007/02/20 09:53:23 rillig Exp $

_DIGEST_ALGORITHMS?=		SHA1 RMD160
_PATCH_DIGEST_ALGORITHMS?=	SHA1

# Some developers want to check the distfiles' checksums every time
# a public make target is called. They may set this variable to "yes".
DO_CHECKSUM_REPEATEDLY?=	no

# These variables are set by pkgsrc/mk/fetch/fetch.mk.
#_CKSUMFILES?=	# empty
#_IGNOREFILES?=	# empty

######################################################################
### checksum (PUBLIC)
######################################################################
### checksum is a public target to checksum the fetched distfiles
### for the package.
###
_CHECKSUM_CMD=								\
	${SETENV} DIGEST=${TOOLS_DIGEST:Q} CAT=${TOOLS_CAT:Q}		\
		ECHO=${TOOLS_ECHO:Q} TEST=${TOOLS_TEST:Q}		\
	${SH} ${PKGSRCDIR}/mk/checksum/checksum				\

_COOKIE.checksum=	${WRKDIR}/.checksum_done

.PHONY: checksum
.if !target(checksum)
checksum: fetch ${_COOKIE.checksum}
${_COOKIE.checksum}:
.  for _alg_ in ${_DIGEST_ALGORITHMS}
	${_PKG_SILENT}${_PKG_DEBUG}					\
	if cd ${DISTDIR} && ${_CHECKSUM_CMD} -a ${_alg_:Q}		\
		${DISTINFO_FILE} ${_CKSUMFILES}; then			\
		if [ ${DO_CHECKSUM_REPEATEDLY} = no ]; then		\
			${MKDIR} ${.TARGET:H};				\
			${ECHO} ${PKGNAME} > ${.TARGET};		\
		fi;							\
	else								\
		${ERROR_MSG} "Make sure the Makefile and checksum file (${DISTINFO_FILE})"; \
		${ERROR_MSG} "are up to date.  If you want to override this check, type"; \
		${ERROR_MSG} "\"${MAKE} NO_CHECKSUM=yes [other args]\"."; \
		exit 1;							\
	fi
.  endfor
.endif

######################################################################
### makesum (PUBLIC)
######################################################################
### makesum is a public target to add checksums of the distfiles for
### the package to ${DISTINFO_FILE}.
###
.PHONY: makesum
makesum: fetch
	${_PKG_SILENT}${_PKG_DEBUG}set -e;				\
	newfile=${DISTINFO_FILE}.$$$$;					\
	if ${TEST} -f ${DISTINFO_FILE}; then				\
		{ ${GREP} '^.NetBSD' ${DISTINFO_FILE} ||		\
		  ${ECHO} "$$""NetBSD""$$"; } > $$newfile;		\
	else								\
		${ECHO} "$$""NetBSD""$$" > $$newfile;			\
	fi;								\
	${ECHO} "" >> $$newfile;					\
	cd ${DISTDIR};							\
	for sumfile in "" ${_CKSUMFILES}; do				\
		${TEST} -n "$$sumfile" || continue;			\
		for a in "" ${_DIGEST_ALGORITHMS}; do			\
			${TEST} -n "$$a" || continue;			\
			${TOOLS_DIGEST} $$a $$sumfile >> $$newfile;	\
		done;							\
		${WC} -c $$sumfile |					\
		${AWK} '{ print "Size (" $$2 ") = " $$1 " bytes" }'	\
			>> $$newfile;					\
	done;								\
	for ignore in "" ${_IGNOREFILES}; do				\
		${TEST} -n "$$ignore" || continue;			\
		for a in "" ${_DIGEST_ALGORITHMS}; do			\
			${TEST} -n "$$a" || continue;			\
			${ECHO} "$$a ($$ignore) = IGNORE" >> $$newfile;	\
		done;							\
	done;								\
	if ${TEST} -f ${DISTINFO_FILE}; then				\
		${AWK} '$$2 ~ /\(patch-[a-z0-9]+\)/ { print $$0 }'	\
			< ${DISTINFO_FILE} >> $$newfile;		\
	fi;								\
	if ${CMP} -s $$newfile ${DISTINFO_FILE}; then			\
		${RM} -f $$newfile;					\
		${ECHO_MSG} "=> distinfo: distfiles part unchanged.";	\
	else								\
		${MV} -f $$newfile ${DISTINFO_FILE};			\
	fi

######################################################################
### makepatchsum (PUBLIC)
######################################################################
### makepatchsum is a public target to add checksums of the patches
### for the package to ${DISTINFO_FILE}.
###
makepatchsum:
	${_PKG_SILENT}${_PKG_DEBUG}set -e;				\
	newfile=${DISTINFO_FILE}.$$$$;					\
	if ${TEST} -f ${DISTINFO_FILE}; then				\
		${AWK} '$$2 !~ /\(patch-[a-z0-9]+\)/ { print $$0 }'	\
			< ${DISTINFO_FILE} >> $$newfile;		\
	else								\
		${ECHO} "$$""NetBSD""$$" > $$newfile;			\
		${ECHO} "" >> $$newfile;				\
	fi;								\
	if ${TEST} -d ${PATCHDIR}; then					\
		( cd ${PATCHDIR};					\
		  for sumfile in "" patch-*; do				\
			case "$$sumfile" in				\
			""|"patch-*") continue ;;			\
			patch-local-*|*.orig|*.rej|*~) continue ;;	\
			esac;						\
			for a in "" ${_PATCH_DIGEST_ALGORITHMS}; do	\
				${TEST} -n "$$a" || continue;		\
				${ECHO} "$$a ($$sumfile) = `${SED} -e '/\$$NetBSD.*/d' $$sumfile | ${TOOLS_DIGEST} $$a`" >> $$newfile; \
			done;						\
		  done );						\
	fi;								\
	if ${CMP} -s $$newfile ${DISTINFO_FILE}; then			\
		${RM} -f $$newfile;					\
		${ECHO_MSG} "=> distinfo: patches part unchanged.";	\
	else								\
		${MV} $$newfile ${DISTINFO_FILE};			\
	fi