View | Details | Raw Unified | Return to bug 208916 | Differences between
and this patch

Collapse All | Expand All

(-)Mk/Scripts/check-vulnerable.sh (+35 lines)
Added Link Here
1
#!/bin/sh
2
# $FreeBSD$
3
#
4
# MAINTAINER: portmgr@FreeBSD.org
5
6
set -e
7
8
. "${dp_SCRIPTSDIR}/functions.sh"
9
10
validate_env dp_ECHO_MSG dp_PKG_BIN dp_PORTNAME
11
12
set -u
13
14
# If the package is pkg, disable these checks, it fails while
15
# upgrading when pkg is not there.
16
# FIXME: check is this is still true
17
if [ "${dp_PORTNAME}" = "pkg" ]; then
18
	exit 0
19
fi
20
21
if [ -x "${dp_PKG_BIN}" ]; then
22
	vlist=$(${dp_PKG_BIN} audit "${dp_PKGNAME}" || :)
23
	if [ "${vlist}" = "0 problem(s) in the installed packages found." ]; then
24
		vlist=""
25
	fi
26
fi
27
28
if [ -n "$vlist" ]; then
29
	${dp_ECHO_MSG} "===>  ${dp_PKGNAME} has known vulnerabilities:"
30
	${dp_ECHO_MSG} "$vlist"
31
	${dp_ECHO_MSG} "=> Please update your ports tree and try again."
32
	${dp_ECHO_MSG} "=> Note: Vulnerable ports are marked as such even if there is no update available."
33
	${dp_ECHO_MSG} "=> If you wish to ignore this vulnerability rebuild with 'make DISABLE_VULNERABILITIES=yes'"
34
	exit 1
35
fi
(-)Mk/Scripts/checksum.sh (+89 lines)
Added Link Here
1
#!/bin/sh
2
# $FreeBSD$
3
#
4
# MAINTAINER: portmgr@FreeBSD.org
5
6
set -e
7
8
. "${dp_SCRIPTSDIR}/functions.sh"
9
10
validate_env dp_CHECKSUM_ALGORITHMS dp_CURDIR dp_DISTDIR dp_DISTINFO_FILE \
11
	dp_DIST_SUBDIR dp_ECHO_MSG dp_FETCH_REGET dp_MAKE dp_MAKEFLAGS \
12
	dp_DISABLE_SIZE dp_NO_CHECKSUM
13
14
set -u
15
16
check_checksum_algorithms
17
18
if [ -f "${dp_DISTINFO_FILE}" ]; then
19
	cd "${dp_DISTDIR}"
20
	OK=
21
	refetchlist=
22
	for file in "${@}"; do
23
		ignored="true"
24
		for alg in ${dp_CHECKSUM_ALGORITHMS}; do
25
			ignore="false"
26
			eval "alg_executable=\$dp_${alg}"
27
28
			if [ "$alg_executable" != "NO" ]; then
29
				MKSUM=$(eval $alg_executable \< "${file}")
30
				CKSUM=$(distinfo_data "${alg}" "${file}")
31
			else
32
				ignore="true"
33
			fi
34
35
			if [ $ignore = "false" -a -z "$CKSUM" ]; then
36
				${dp_ECHO_MSG} "=> No $alg checksum recorded for $file."
37
				ignore="true"
38
			fi
39
40
			if [ $ignore = "false" ]; then
41
				match="false"
42
				for chksum in $CKSUM; do
43
					if [ "$chksum" = "$MKSUM" ]; then
44
						match="true"
45
						break
46
					fi
47
				done
48
				if [ $match = "true" ]; then
49
					${dp_ECHO_MSG} "=> $alg Checksum OK for $file."
50
					ignored="false"
51
				else
52
					${dp_ECHO_MSG} "=> $alg Checksum mismatch for $file."
53
					refetchlist="$refetchlist $file "
54
					OK="${OK:-retry}"
55
					[ "${OK}" = "retry" -a "${dp_FETCH_REGET}" -gt 0 ] && rm -f "${file}"
56
					ignored="false"
57
				fi
58
			fi
59
		done
60
61
		if [ $ignored = "true" ]; then
62
			${dp_ECHO_MSG} "=> No suitable checksum found for $file."
63
			OK=false
64
		fi
65
	done
66
67
	if [ "${OK:=true}" = "retry" ] && [ "${dp_FETCH_REGET}" -gt 0 ]; then
68
		${dp_ECHO_MSG} "===>  Refetch for ${dp_FETCH_REGET} more times files: $refetchlist"
69
		if ${dp_MAKE} -C "${dp_CURDIR}" ${dp_MAKEFLAGS} FORCE_FETCH_LIST="$refetchlist" FETCH_REGET="$((dp_FETCH_REGET - 1))" fetch; then
70
			if ${dp_MAKE} -C "${dp_CURDIR}" ${dp_MAKEFLAGS} FETCH_REGET="$((dp_FETCH_REGET - 1))" checksum ; then
71
			OK="true"
72
			fi
73
		fi
74
	fi
75
76
	if [ "$OK" != "true" -a "${dp_FETCH_REGET}" -eq 0 ]; then
77
		${dp_ECHO_MSG} "===>  Giving up on fetching files: $refetchlist"
78
		${dp_ECHO_MSG} "Make sure the Makefile and distinfo file (${dp_DISTINFO_FILE})"
79
		${dp_ECHO_MSG} "are up to date.  If you are absolutely sure you want to override this"
80
		${dp_ECHO_MSG} "check, type \"make NO_CHECKSUM=yes [other args]\"."
81
		exit 1
82
	fi
83
	if [ "$OK" != "true" ]; then
84
		exit 1
85
	fi
86
elif [ -n "${@}" ]; then
87
	${dp_ECHO_MSG} "=> No checksum file (${DISTINFO_FILE})."
88
	exit 1
89
fi
(-)Mk/Scripts/do-fetch.sh (+171 lines)
Added Link Here
1
#!/bin/sh
2
# $FreeBSD$
3
#
4
# MAINTAINER: portmgr@FreeBSD.org
5
6
set -e
7
8
. "${dp_SCRIPTSDIR}/functions.sh"
9
10
validate_env dp_DEVELOPER dp_DISABLE_SIZE dp_DISTDIR dp_DISTINFO_FILE \
11
	dp_DIST_SUBDIR dp_ECHO_MSG dp_FETCH_AFTER_ARGS dp_FETCH_BEFORE_ARGS \
12
	dp_FETCH_CMD dp_FETCH_ENV dp_FORCE_FETCH_ALL dp_FORCE_FETCH_LIST \
13
	dp_MASTER_SITE_BACKUP dp_MASTER_SITE_OVERRIDE dp_MASTER_SORT_AWK \
14
	dp_NO_CHECKSUM dp_RANDOMIZE_SITES dp_SITE_FLAVOR dp_SCRIPTSDIR \
15
	dp_SORTED_MASTER_SITES_DEFAULT_CMD dp_SORTED_PATCH_SITES_DEFAULT_CMD \
16
	dp_TARGET
17
18
set -u
19
20
mkdir -p "${dp_DISTDIR}"
21
cd "${dp_DISTDIR}"
22
23
for _file in "${@}"; do
24
	file=${_file%%:*}
25
26
	# If this files has groups
27
	if [ "$_file" = "$file" ]; then
28
		select=''
29
	else
30
		select=$(echo "${_file##*:}" | sed -e 's/,/ /g')
31
	fi
32
33
	filebasename=${file##*/}
34
	if [ -n "${dp_FORCE_FETCH_ALL}" ]; then
35
		force_fetch=true
36
	else
37
		force_fetch=false
38
		for afile in ${dp_FORCE_FETCH_LIST}; do
39
			afile=${afile##*/}
40
			if [ "x$afile" = "x$filebasename" ]; then
41
				force_fetch=true
42
			fi
43
		done
44
	fi
45
	if [ ! -f "$file" -a ! -f "$filebasename" -o "$force_fetch" = "true" ]; then
46
		full_file="${dp_DIST_SUBDIR:+${dp_DIST_SUBDIR}/}${file}"
47
		if [ -L "$file" -o -L "$filebasename" ]; then
48
			${dp_ECHO_MSG} "=> ${dp_DISTDIR}/$file is a broken symlink."
49
			${dp_ECHO_MSG} "=> Perhaps a filesystem (most likely a CD) isn't mounted?"
50
			${dp_ECHO_MSG} "=> Please correct this problem and try again."
51
			exit 1
52
		fi
53
		if [ -f "${dp_DISTINFO_FILE}" -a -z "${dp_NO_CHECKSUM}" ]; then
54
			_sha256sum=$(distinfo_data SHA256 "${full_file}")
55
			if [ -z "$_sha256sum" ]; then
56
				${dp_ECHO_MSG} "=> ${dp_DIST_SUBDIR:+$dp_DIST_SUBDIR/}$file is not in ${dp_DISTINFO_FILE}."
57
				${dp_ECHO_MSG} "=> Either ${dp_DISTINFO_FILE} is out of date, or"
58
				${dp_ECHO_MSG} "=> ${dp_DIST_SUBDIR:+$dp_DIST_SUBDIR/}$file is spelled incorrectly."
59
				exit 1
60
			fi
61
		fi
62
		case ${dp_TARGET} in
63
		do-fetch|makesum)
64
			${dp_ECHO_MSG} "=> $file doesn't seem to exist in ${dp_DISTDIR}."
65
			;;
66
		esac
67
		if [ ! -w "${dp_DISTDIR}" ]; then
68
			${dp_ECHO_MSG} "=> ${dp_DISTDIR} is not writable by you; cannot fetch."
69
			exit 1
70
		fi
71
		if [ -n "$select" ] ; then
72
			__MASTER_SITES_TMP=
73
			for group in $select; do
74
				# Disable nounset for this, it may come up empty.
75
				set +u
76
				eval ___MASTER_SITES_TMP="\${_${dp_SITE_FLAVOR}_SITES_${group}}"
77
				set -u
78
				if [ -n "${___MASTER_SITES_TMP}" ] ; then
79
					__MASTER_SITES_TMP="${__MASTER_SITES_TMP} ${___MASTER_SITES_TMP}"
80
				else
81
					case ${dp_TARGET} in
82
					do-fetch|makesum)
83
						if [ -n "${dp_DEVELOPER}" ]; then
84
							${dp_ECHO_MSG} "===> /!\\ Error /!\\"
85
						else
86
							${dp_ECHO_MSG} "===> /!\\ Warning /!\\"
87
						fi
88
						${dp_ECHO_MSG} "     The :${group} group used for $file is missing"
89
						${dp_ECHO_MSG} "     from ${dp_SITE_FLAVOR}_SITES. Check for typos, or errors."
90
						if [ -n "${dp_DEVELOPER}" ]; then
91
							exit 1
92
						fi
93
						;;
94
					esac
95
96
				fi
97
			done
98
			___MASTER_SITES_TMP=
99
			SORTED_MASTER_SITES_CMD_TMP="echo ${dp_MASTER_SITE_OVERRIDE} $(echo -n "${__MASTER_SITES_TMP}" | awk "${dp_MASTER_SORT_AWK}") ${dp_MASTER_SITE_BACKUP}"
100
		else
101
			if [ ${dp_SITE_FLAVOR} = "MASTER" ]; then
102
				SORTED_MASTER_SITES_CMD_TMP="${dp_SORTED_MASTER_SITES_DEFAULT_CMD}"
103
			else
104
				SORTED_MASTER_SITES_CMD_TMP="${dp_SORTED_PATCH_SITES_DEFAULT_CMD}"
105
			fi
106
		fi
107
		case ${dp_TARGET} in
108
			fetch-list)
109
				echo -n "mkdir -p ${dp_DISTDIR} && "
110
				echo -n "cd ${dp_DISTDIR} && { "
111
				;;
112
		esac
113
		sites_remaining=0
114
		sites="$(eval "${SORTED_MASTER_SITES_CMD_TMP} ${dp_RANDOMIZE_SITES}")"
115
		for site in ${sites}; do
116
			sites_remaining=$((sites_remaining + 1))
117
		done
118
		for site in ${sites}; do
119
			sites_remaining=$((sites_remaining - 1))
120
			CKSIZE=$(distinfo_data SIZE "${full_file}")
121
			# The site may contain special shell characters, they
122
			# need to be escaped.
123
			site=$(echo "${site}" | sed -e 's/[&;()#]/\\&/g')
124
			# There is a lot of escaping, but the " needs to survive echo/eval.
125
			case ${file} in
126
				*/*)
127
					mkdir -p "${file%/*}"
128
					args="-o \\\"${file}\\\" \\\"${site}${file}\\\""
129
					;;
130
				*)
131
					args="\\\"${site}${file}\\\""
132
					;;
133
			esac
134
			_fetch_cmd=$(eval "echo ${dp_FETCH_ENV} ${dp_FETCH_CMD} ${dp_FETCH_BEFORE_ARGS} ${args} ${dp_FETCH_AFTER_ARGS}")
135
			case ${dp_TARGET} in
136
			do-fetch|makesum)
137
				${dp_ECHO_MSG} "=> Attempting to fetch ${site}${file}"
138
				if eval "env ${_fetch_cmd}"; then
139
					actual_size=$(eval stat -f %z "${file}")
140
					if [ -n "${dp_DISABLE_SIZE}" ] || [ -z "${CKSIZE}" ] || [ "${actual_size}" -eq "${CKSIZE}" ]; then
141
						continue 2
142
					else
143
						${dp_ECHO_MSG} "=> Fetched file size mismatch (expected ${CKSIZE}, actual ${actual_size})"
144
						if [ ${sites_remaining} -gt 0 ]; then
145
							${dp_ECHO_MSG} "=> Trying next site"
146
							rm -f "${file}"
147
						fi
148
					fi
149
				fi
150
				;;
151
			fetch-list)
152
				echo -n "env ${_fetch_cmd} || "
153
				;;
154
			fetch-url-list-int)
155
				eval "echo $(eval "echo ${args}")"
156
				;;
157
			esac
158
		done
159
		case ${dp_TARGET} in
160
		do-fetch|makesum)
161
			${dp_ECHO_MSG} "=> Couldn't fetch it - please try to retrieve this"
162
			${dp_ECHO_MSG} "=> port manually into ${dp_DISTDIR} and try again."
163
			exit 1
164
			;;
165
		fetch-list)
166
			echo "echo ${file} not fetched; }" ; \
167
			;;
168
		esac
169
	fi
170
done
171
(-)Mk/Scripts/functions.sh (+28 lines)
Lines 216-218 export_ports_env() { Link Here
216
		fi
216
		fi
217
	done
217
	done
218
}
218
}
219
220
distinfo_data() {
221
	local alg file
222
223
	alg=$1
224
	file=$2
225
226
	if [ \( -n "${dp_DISABLE_SIZE}" -a -n "${dp_NO_CHECKSUM}" \) -o ! -f "${dp_DISTINFO_FILE}" ]; then
227
		exit
228
	fi
229
	awk -v alg="$alg" -v file="${file}" \
230
		'$1 == alg && $2 == "(" file ")" {print $4}' "${dp_DISTINFO_FILE}"
231
}
232
233
check_checksum_algorithms() {
234
	for alg in ${dp_CHECKSUM_ALGORITHMS}; do
235
		eval "alg_executable=\$dp_$alg"
236
		if [ -z "$alg_executable" ]; then
237
			${dp_ECHO_MSG} "Checksum algorithm $alg: Couldn't find the executable."
238
			${dp_ECHO_MSG} "Set $alg=/path/to/$alg in /etc/make.conf and try again."
239
			exit 1
240
		elif [ ! -x "$alg_executable" ]; then
241
			${dp_ECHO_MSG} "Checksum algorithm $alg: $alg_executable is not executable."
242
			${dp_ECHO_MSG} "Fix modes, or change $alg=$alg_executable in /etc/make.conf and try again."
243
			exit 1
244
		fi
245
	done
246
}
(-)Mk/Scripts/makesum.sh (+51 lines)
Added Link Here
1
#!/bin/sh
2
# $FreeBSD$
3
#
4
# MAINTAINER: portmgr@FreeBSD.org
5
6
set -e
7
8
. "${dp_SCRIPTSDIR}/functions.sh"
9
10
validate_env dp_CHECKSUM_ALGORITHMS dp_CKSUMFILES dp_DISTDIR dp_DISTINFO_FILE \
11
	dp_ECHO_MSG
12
13
set -u
14
15
DISTINFO_OLD=$(mktemp -t makesum-old)
16
DISTINFO_NEW=$(mktemp -t makesum-new)
17
18
trap 'rm -f ${DISTINFO_OLD} ${DISTINFO_NEW}' EXIT INT TERM
19
20
check_checksum_algorithms
21
22
cd "${dp_DISTDIR}"
23
24
# Running `make makesum` a twice should not change the timestamp generated from
25
# the first run.
26
# So, we extract the content of the distinfo file minus the TIMESTAMP, if it
27
# contains a TIMESTAMP.
28
if [ -f "${dp_DISTINFO_FILE}" ] && grep -q "^TIMESTAMP " ${dp_DISTINFO_FILE}; then
29
	grep -v "^TIMESTAMP " ${dp_DISTINFO_FILE} > ${DISTINFO_OLD}
30
fi
31
32
for file in ${dp_CKSUMFILES}; do
33
	for alg in ${dp_CHECKSUM_ALGORITHMS}; do
34
		eval "alg_executable=\$dp_$alg"
35
36
		if [ "$alg_executable" != "NO" ]; then
37
			$alg_executable "$file" >> "${DISTINFO_NEW}"
38
		fi
39
	done
40
	echo "SIZE ($file) = $(stat -f %z "$file")" >> "${DISTINFO_NEW}"
41
done
42
43
# Now, we generate the distinfo file in two cases:
44
# - If the saved file is empty, it means there was no TIMESTAMP in it, so we
45
#   need to add one.
46
# - If the old and new distinfo content minus the TIMESTAMP differ, it means
47
#   something was updated or changed, it is time to generate a new timestamp.
48
if [ ! -s ${DISTINFO_OLD} ] || ! cmp -s ${DISTINFO_OLD} ${DISTINFO_NEW}; then
49
	echo "TIMESTAMP = $(date '+%s')" > ${dp_DISTINFO_FILE}
50
	cat ${DISTINFO_NEW} >> ${dp_DISTINFO_FILE}
51
fi
(-)Mk/bsd.port.mk (-471 / +150 lines)
Lines 3050-3244 check-deprecated: Link Here
3050
AUDITFILE?=		${PKG_DBDIR}/vuln.xml
3050
AUDITFILE?=		${PKG_DBDIR}/vuln.xml
3051
3051
3052
check-vulnerable:
3052
check-vulnerable:
3053
.if !defined(DISABLE_VULNERABILITIES) && !defined(PACKAGE_BUILDING)
3053
.if !defined(DISABLE_VULNERABILITIES) && !defined(PACKAGE_BUILDING) \
3054
	@if [ -f "${AUDITFILE}" ]; then \
3054
		&& exists(${AUDITFILE})
3055
		if [ -x "${PKG_BIN}" ]; then \
3055
	@${SETENV} \
3056
			vlist=`${PKG_BIN} audit "${PKGNAME}" || :`; \
3056
			dp_ECHO_MSG="${ECHO_MSG}" \
3057
			if [ "$${vlist}" = "0 problem(s) in the installed packages found." ]; then \
3057
			dp_PKG_BIN="${PKG_BIN}" \
3058
				vlist=""; \
3058
			dp_PORTNAME="${PORTNAME}" \
3059
			fi; \
3059
			dp_SCRIPTSDIR="${SCRIPTSDIR}" \
3060
		elif [ "${PORTNAME}" = "pkg" ]; then \
3060
			${SH} ${SCRIPTSDIR}/check-vulnerable.sh
3061
			vlist=""; \
3061
.endif
3062
		fi; \
3062
3063
		if [ -n "$$vlist" ]; then \
3063
# Quote simply quote all variables, except FETCH_ENV, some ports are creative
3064
			${ECHO_MSG} "===>  ${PKGNAME} has known vulnerabilities:"; \
3064
# with it, and it needs to be quoted twice to pass through the echo/eval in
3065
			${ECHO_MSG} "$$vlist"; \
3065
# do-fetch.
3066
			${ECHO_MSG} "=> Please update your ports tree and try again."; \
3066
_DO_FETCH_ENV= \
3067
			${ECHO_MSG} "=> Note: Vulnerable ports are marked as such even if there is no update available."; \
3067
			dp_DISABLE_SIZE='${DISABLE_SIZE}' \
3068
			${ECHO_MSG} "=> If you wish to ignore this vulnerability rebuild with 'make DISABLE_VULNERABILITIES=yes'"; \
3068
			dp_DISTDIR='${_DISTDIR}' \
3069
			exit 1; \
3069
			dp_DISTINFO_FILE='${DISTINFO_FILE}' \
3070
		fi; \
3070
			dp_DIST_SUBDIR='${DIST_SUBDIR}' \
3071
	fi
3071
			dp_ECHO_MSG='${ECHO_MSG}' \
3072
			dp_FETCH_AFTER_ARGS='${FETCH_AFTER_ARGS}' \
3073
			dp_FETCH_BEFORE_ARGS='${FETCH_BEFORE_ARGS}' \
3074
			dp_FETCH_CMD='${FETCH_CMD}' \
3075
			dp_FETCH_ENV=${FETCH_ENV:Q:Q} \
3076
			dp_FORCE_FETCH_ALL='${FORCE_FETCH_ALL}' \
3077
			dp_FORCE_FETCH_LIST='${FORCE_FETCH_LIST}' \
3078
			dp_MASTER_SITE_BACKUP='${_MASTER_SITE_BACKUP}' \
3079
			dp_MASTER_SITE_OVERRIDE='${_MASTER_SITE_OVERRIDE}' \
3080
			dp_MASTER_SORT_AWK='${MASTER_SORT_AWK}' \
3081
			dp_NO_CHECKSUM='${NO_CHECKSUM}' \
3082
			dp_RANDOMIZE_SITES='${_RANDOMIZE_SITES}' \
3083
			dp_SCRIPTSDIR='${SCRIPTSDIR}' \
3084
			dp_SORTED_MASTER_SITES_DEFAULT_CMD='${SORTED_MASTER_SITES_DEFAULT_CMD}' \
3085
			dp_SORTED_PATCH_SITES_DEFAULT_CMD='${SORTED_PATCH_SITES_DEFAULT_CMD}' \
3086
			dp_TARGET='${.TARGET}'
3087
.if defined(DEVELOPER)
3088
_DO_FETCH_ENV+= dp_DEVELOPER=yes
3089
.else
3090
_DO_FETCH_ENV+= dp_DEVELOPER=
3072
.endif
3091
.endif
3073
3092
3074
# set alg to any of SIZE, SHA256 (or any other checksum algorithm):
3075
DISTINFO_DATA?=	if [ \( -n "${DISABLE_SIZE}" -a -n "${NO_CHECKSUM}" \) -o ! -f "${DISTINFO_FILE}" ]; then exit; fi; \
3076
	DIR=${DIST_SUBDIR}; ${AWK} -v alg=$$alg -v file=$${DIR:+$$DIR/}$${file}	\
3077
		'$$1 == alg && $$2 == "(" file ")" {print $$4}' ${DISTINFO_FILE}
3078
3079
# Fetch
3093
# Fetch
3080
3094
3081
.if !target(do-fetch)
3095
.if !target(do-fetch)
3082
do-fetch:
3096
do-fetch:
3083
	@${MKDIR} ${_DISTDIR}
3097
.if !empty(DISTFILES)
3084
	@cd ${_DISTDIR};\
3098
	@${SETENV} \
3085
	${_MASTER_SITES_ENV} ; \
3099
			${_DO_FETCH_ENV} ${_MASTER_SITES_ENV} \
3086
	for _file in ${DISTFILES}; do \
3100
			dp_SITE_FLAVOR=MASTER \
3087
		file=$${_file%%:*}; \
3101
			${SH} ${SCRIPTSDIR}/do-fetch.sh ${DISTFILES:C/.*/'&'/}
3088
		if [ $$_file = $$file ]; then	\
3102
.endif
3089
			select='';	\
3103
.if defined(PATCHFILES) && !empty(PATCHFILES)
3090
		else	\
3104
	@${SETENV} \
3091
			select=`${ECHO_CMD} $${_file##*:} | ${SED} -e 's/,/ /g'` ;	\
3105
			${_DO_FETCH_ENV} ${_PATCH_SITES_ENV} \
3092
		fi;	\
3106
			dp_SITE_FLAVOR=PATCH \
3093
		force_fetch=false; \
3107
			${SH} ${SCRIPTSDIR}/do-fetch.sh ${PATCHFILES:C/.*/'&'/}
3094
		filebasename=$${file##*/}; \
3108
.endif
3095
		for afile in ${FORCE_FETCH}; do \
3109
.endif
3096
			afile=$${afile##*/}; \
3110
#
3097
			if [ "x$$afile" = "x$$filebasename" ]; then \
3111
# Prints out a list of files to fetch (useful to do a batch fetch)
3098
				force_fetch=true; \
3112
3099
			fi; \
3113
.if !target(fetch-list)
3100
		done; \
3114
fetch-list:
3101
		if [ ! -f $$file -a ! -f $$filebasename -o "$$force_fetch" = "true" ]; then \
3115
.if !empty(DISTFILES)
3102
			if [ -L $$file -o -L $$filebasename ]; then \
3116
	@${SETENV} \
3103
				${ECHO_MSG} "=> ${_DISTDIR}/$$file is a broken symlink."; \
3117
			${_DO_FETCH_ENV} ${_MASTER_SITES_ENV} \
3104
				${ECHO_MSG} "=> Perhaps a filesystem (most likely a CD) isn't mounted?"; \
3118
			dp_SITE_FLAVOR=MASTER \
3105
				${ECHO_MSG} "=> Please correct this problem and try again."; \
3119
			${SH} ${SCRIPTSDIR}/do-fetch.sh ${DISTFILES:C/.*/'&'/}
3106
				exit 1; \
3120
.endif
3107
			fi; \
3121
.if defined(PATCHFILES) && !empty(PATCHFILES)
3108
			if [ -f ${DISTINFO_FILE} -a "x${NO_CHECKSUM}" = "x" ]; then \
3122
	@${SETENV} \
3109
				_sha256sum=`alg=SHA256; ${DISTINFO_DATA}`; \
3123
			${_DO_FETCH_ENV} ${_PATCH_SITES_ENV} \
3110
				if [ -z "$$_sha256sum" ]; then \
3124
			dp_SITE_FLAVOR=PATCH \
3111
					${ECHO_MSG} "=> $${DIR:+$$DIR/}$$file is not in ${DISTINFO_FILE}."; \
3125
			${SH} ${SCRIPTSDIR}/do-fetch.sh ${PATCHFILES:C/.*/'&'/}
3112
					${ECHO_MSG} "=> Either ${DISTINFO_FILE} is out of date, or"; \
3113
					${ECHO_MSG} "=> $${DIR:+$$DIR/}$$file is spelled incorrectly."; \
3114
					exit 1; \
3115
				fi; \
3116
			fi; \
3117
			${ECHO_MSG} "=> $$file doesn't seem to exist in ${_DISTDIR}."; \
3118
			if [ ! -w ${_DISTDIR} ]; then \
3119
			   ${ECHO_MSG} "=> ${_DISTDIR} is not writable by you; cannot fetch."; \
3120
			   exit 1; \
3121
			fi; \
3122
			if [ ! -z "$$select" ] ; then \
3123
				__MASTER_SITES_TMP= ; \
3124
				for group in $$select; do \
3125
					if [ ! -z \$${_MASTER_SITES_$${group}} ] ; then \
3126
						eval ___MASTER_SITES_TMP="\$${_MASTER_SITES_$${group}}" ; \
3127
						__MASTER_SITES_TMP="$${__MASTER_SITES_TMP} $${___MASTER_SITES_TMP}" ; \
3128
					fi; \
3129
				done; \
3130
				___MASTER_SITES_TMP= ; \
3131
				SORTED_MASTER_SITES_CMD_TMP="${ECHO_CMD} ${_MASTER_SITE_OVERRIDE} `${ECHO_CMD} $${__MASTER_SITES_TMP} | ${AWK} '${MASTER_SORT_AWK:S|\\|\\\\|g}'` ${_MASTER_SITE_BACKUP}" ; \
3132
			else \
3133
				SORTED_MASTER_SITES_CMD_TMP="${SORTED_MASTER_SITES_DEFAULT_CMD}" ; \
3134
			fi; \
3135
			sites_remaining=0; \
3136
			sites="`eval $$SORTED_MASTER_SITES_CMD_TMP ${_RANDOMIZE_SITES}`"; \
3137
			for site in $${sites}; do \
3138
				sites_remaining=$$(($${sites_remaining} + 1)); \
3139
			done; \
3140
			for site in $${sites}; do \
3141
				sites_remaining=$$(($${sites_remaining} - 1)); \
3142
			    ${ECHO_MSG} "=> Attempting to fetch $${site}$${file}"; \
3143
				CKSIZE=`alg=SIZE; ${DISTINFO_DATA}`; \
3144
				case $${file} in \
3145
				*/*)	${MKDIR} $${file%/*}; \
3146
						args="-o $${file} $${site}$${file}";; \
3147
				*)		args=$${site}$${file};; \
3148
				esac; \
3149
				if ${SETENV} ${FETCH_ENV} ${FETCH_CMD} ${FETCH_BEFORE_ARGS} $${args} ${FETCH_AFTER_ARGS}; then \
3150
					actual_size=`stat -f %z "$${file}"`; \
3151
					if [ -n "${DISABLE_SIZE}" ] || [ -z "$${CKSIZE}" ] || [ $${actual_size} -eq $${CKSIZE} ]; then \
3152
						continue 2; \
3153
					else \
3154
						${ECHO_MSG} "=> Fetched file size mismatch (expected $${CKSIZE}, actual $${actual_size})"; \
3155
						if [ $${sites_remaining} -gt 0 ]; then \
3156
							${ECHO_MSG} "=> Trying next site"; \
3157
							${RM} -f $${file}; \
3158
						fi; \
3159
					fi; \
3160
				fi; \
3161
			done; \
3162
			${ECHO_MSG} "=> Couldn't fetch it - please try to retrieve this";\
3163
			${ECHO_MSG} "=> port manually into ${_DISTDIR} and try again."; \
3164
			exit 1; \
3165
	    fi; \
3166
	 done
3167
.if defined(PATCHFILES)
3168
	@cd ${_DISTDIR};\
3169
	${_PATCH_SITES_ENV} ; \
3170
	for _file in ${PATCHFILES}; do \
3171
		file=`${ECHO_CMD} $$_file | ${SED} -E -e 's/:[^-:][^:]*$$//'` ; \
3172
		if [ $$_file = $$file ]; then	\
3173
			select='';	\
3174
		else	\
3175
			select=`${ECHO_CMD} $${_file##*:} | ${SED} -e 's/,/ /g'` ;	\
3176
		fi;	\
3177
		file=`${ECHO_CMD} $$file | ${SED} -E -e 's/:-[^:]+$$//'` ; \
3178
		force_fetch=false; \
3179
		filebasename=$${file##*/}; \
3180
		for afile in ${FORCE_FETCH}; do \
3181
			afile=$${afile##*/}; \
3182
			if [ "x$$afile" = "x$$filebasename" ]; then \
3183
				force_fetch=true; \
3184
			fi; \
3185
		done; \
3186
		if [ ! -f $$file -a ! -f $$filebasename -o "$$force_fetch" = "true" ]; then \
3187
			if [ -L $$file -o -L $${file##*/} ]; then \
3188
				${ECHO_MSG} "=> ${_DISTDIR}/$$file is a broken symlink."; \
3189
				${ECHO_MSG} "=> Perhaps a filesystem (most likely a CD) isn't mounted?"; \
3190
				${ECHO_MSG} "=> Please correct this problem and try again."; \
3191
				exit 1; \
3192
			fi; \
3193
			${ECHO_MSG} "=> $$file doesn't seem to exist in ${_DISTDIR}."; \
3194
			if [ ! -z "$$select" ] ; then \
3195
				__PATCH_SITES_TMP= ; \
3196
				for group in $$select; do \
3197
					if [ ! -z \$${_PATCH_SITES_$${group}} ] ; then \
3198
						eval ___PATCH_SITES_TMP="\$${_PATCH_SITES_$${group}}" ; \
3199
						__PATCH_SITES_TMP="$${__PATCH_SITES_TMP} $${___PATCH_SITES_TMP}" ; \
3200
					fi; \
3201
				done; \
3202
				___PATCH_SITES_TMP= ; \
3203
				SORTED_PATCH_SITES_CMD_TMP="${ECHO_CMD} ${_MASTER_SITE_OVERRIDE} `${ECHO_CMD} $${__PATCH_SITES_TMP} | ${AWK} '${MASTER_SORT_AWK:S|\\|\\\\|g}'` ${_MASTER_SITE_BACKUP}" ; \
3204
			else \
3205
				SORTED_PATCH_SITES_CMD_TMP="${SORTED_PATCH_SITES_DEFAULT_CMD}" ; \
3206
			fi; \
3207
			sites_remaining=0; \
3208
			sites="`eval $$SORTED_PATCH_SITES_CMD_TMP`"; \
3209
			for site in $${sites}; do \
3210
				sites_remaining=$$(($${sites_remaining} + 1)); \
3211
			done; \
3212
			for site in $${sites}; do \
3213
				sites_remaining=$$(($${sites_remaining} - 1)); \
3214
			    ${ECHO_MSG} "=> Attempting to fetch $${site}$${file}"; \
3215
				CKSIZE=`alg=SIZE; ${DISTINFO_DATA}`; \
3216
				case $${file} in \
3217
				*/*)	${MKDIR} $${file%/*}; \
3218
						args="-o $${file} $${site}$${file}";; \
3219
				*)		args=$${site}$${file};; \
3220
				esac; \
3221
				if ${SETENV} ${FETCH_ENV} ${FETCH_CMD} ${FETCH_BEFORE_ARGS} $${args} ${FETCH_AFTER_ARGS}; then \
3222
					actual_size=`stat -f %z "$${file}"`; \
3223
					if [ -n "${DISABLE_SIZE}" ] || [ -z "$${CKSIZE}" ] || [ $${actual_size} -eq $${CKSIZE} ]; then \
3224
						continue 2; \
3225
					else \
3226
						${ECHO_MSG} "=> Fetched file size mismatch (expected $${CKSIZE}, actual $${actual_size})"; \
3227
						if [ $${sites_remaining} -gt 1 ]; then \
3228
							${ECHO_MSG} "=> Trying next site"; \
3229
							${RM} -f $${file}; \
3230
						fi; \
3231
					fi; \
3232
				fi; \
3233
			done; \
3234
			${ECHO_MSG} "=> Couldn't fetch it - please try to retrieve this";\
3235
			${ECHO_MSG} "=> port manually into ${_DISTDIR} and try again."; \
3236
			exit 1; \
3237
		fi; \
3238
	 done
3239
.endif
3126
.endif
3240
.endif
3127
.endif
3241
3128
3129
# Used by fetch-urlall-list and fetch-url-list
3130
3131
.if !target(fetch-url-list-int)
3132
fetch-url-list-int:
3133
.if !empty(DISTFILES)
3134
	@${SETENV} \
3135
			${_DO_FETCH_ENV} ${_MASTER_SITES_ENV} \
3136
			dp_SITE_FLAVOR=MASTER \
3137
			${SH} ${SCRIPTSDIR}/do-fetch.sh ${DISTFILES:C/.*/'&'/}
3138
.endif
3139
.if defined(PATCHFILES) && !empty(PATCHFILES)
3140
	@${SETENV} \
3141
			${_DO_FETCH_ENV} ${_PATCH_SITES_ENV} \
3142
			dp_SITE_FLAVOR=PATCH \
3143
			${SH} ${SCRIPTSDIR}/do-fetch.sh ${PATCHFILES:C/.*/'&'/}
3144
.endif
3145
.endif
3146
3147
# Prints out all the URL for all the DISTFILES and PATCHFILES.
3148
3149
.if !target(fetch-urlall-list)
3150
fetch-urlall-list:
3151
	@cd ${.CURDIR} && ${SETENV} FORCE_FETCH_ALL=yes ${MAKE} fetch-url-list-int
3152
.endif
3153
3154
# Prints the URL for all the DISTFILES and PATCHFILES that are not here
3155
3156
.if !target(fetch-url-list)
3157
fetch-url-list: fetch-url-list-int
3158
.endif
3159
3160
3242
# Extract
3161
# Extract
3243
3162
3244
clean-wrkdir:
3163
clean-wrkdir:
Lines 3956-4131 delete-distfiles-list: Link Here
3956
.endif
3875
.endif
3957
.endif
3876
.endif
3958
3877
3959
# Prints out a list of files to fetch (useful to do a batch fetch)
3960
3961
.if !target(fetch-list)
3962
fetch-list:
3963
	@${MKDIR} ${_DISTDIR}
3964
	@(cd ${_DISTDIR}; \
3965
	 ${_MASTER_SITES_ENV} ; \
3966
	 for _file in ${DISTFILES}; do \
3967
		file=`${ECHO_CMD} $$_file | ${SED} -E -e 's/:[^:]+$$//'` ; \
3968
		if [ $$_file = $$file ]; then	\
3969
			select='';	\
3970
		else	\
3971
			select=`${ECHO_CMD} $${_file##*:} | ${SED} -e 's/,/ /g'` ;	\
3972
		fi;	\
3973
		if [ ! -f $$file -a ! -f $${file##*/} ]; then \
3974
			if [ ! -z "$$select" ] ; then \
3975
				__MASTER_SITES_TMP= ; \
3976
				for group in $$select; do \
3977
					if [ ! -z \$${_MASTER_SITES_$${group}} ] ; then \
3978
						eval ___MASTER_SITES_TMP=\$${_MASTER_SITES_$${group}} ; \
3979
						__MASTER_SITES_TMP="$${__MASTER_SITES_TMP} $${___MASTER_SITES_TMP}" ; \
3980
					fi; \
3981
				done; \
3982
				___MASTER_SITES_TMP= ; \
3983
				SORTED_MASTER_SITES_CMD_TMP="${ECHO_CMD} ${_MASTER_SITE_OVERRIDE} `${ECHO_CMD} $${__MASTER_SITES_TMP} | ${AWK} '${MASTER_SORT_AWK:S|\\|\\\\|g}'` ${_MASTER_SITE_BACKUP}" ; \
3984
			else \
3985
				SORTED_MASTER_SITES_CMD_TMP="${SORTED_MASTER_SITES_DEFAULT_CMD}" ; \
3986
			fi; \
3987
			${ECHO_CMD} -n ${MKDIR} ${_DISTDIR} '&& ' ; \
3988
			${ECHO_CMD} -n cd ${_DISTDIR} '&& { ' ; \
3989
			for site in `eval $$SORTED_MASTER_SITES_CMD_TMP ${_RANDOMIZE_SITES}`; do \
3990
				if [ ! -z "`${ECHO_CMD} ${NOFETCHFILES} | ${GREP} -w $${file}`" ]; then \
3991
					if [ -z "`${ECHO_CMD} ${MASTER_SITE_OVERRIDE} | ${GREP} -w $${site}`" ]; then \
3992
						continue; \
3993
					fi; \
3994
				fi; \
3995
				CKSIZE=`alg=SIZE; ${DISTINFO_DATA}`; \
3996
				case $${file} in \
3997
				*/*)	args="-o $${file} $${site}$${file}";; \
3998
				*)		args=$${site}$${file};; \
3999
				esac; \
4000
				${ECHO_CMD} -n ${SETENV} ${FETCH_ENV} ${FETCH_CMD} ${FETCH_BEFORE_ARGS} $${args} "${FETCH_AFTER_ARGS}" '|| ' ; \
4001
			done; \
4002
			${ECHO_CMD} "${ECHO_CMD} $${file} not fetched; }" ; \
4003
		fi; \
4004
	done)
4005
.if defined(PATCHFILES)
4006
	@(cd ${_DISTDIR}; \
4007
	 ${_PATCH_SITES_ENV} ; \
4008
	 for _file in ${PATCHFILES}; do \
4009
		file=`${ECHO_CMD} $$_file | ${SED} -E -e 's/:[^-:][^:]*$$//'` ; \
4010
		if [ $$_file = $$file ]; then	\
4011
			select='';	\
4012
		else	\
4013
			select=`${ECHO_CMD} $${_file##*:} | ${SED} -e 's/,/ /g'` ;	\
4014
		fi;	\
4015
		file=`${ECHO_CMD} $$file | ${SED} -E -e 's/:-[^:]+$$//'` ; \
4016
		if [ ! -f $$file -a ! -f $${file##*/} ]; then \
4017
			if [ ! -z "$$select" ] ; then \
4018
				__PATCH_SITES_TMP= ; \
4019
				for group in $$select; do \
4020
					if [ ! -z \$${_PATCH_SITES_$${group}} ] ; then \
4021
						eval ___PATCH_SITES_TMP=\$${_PATCH_SITES_$${group}} ; \
4022
						__PATCH_SITES_TMP="$${__PATCH_SITES_TMP} $${___PATCH_SITES_TMP}" ; \
4023
				fi; \
4024
				done; \
4025
				___PATCH_SITES_TMP= ; \
4026
				SORTED_PATCH_SITES_CMD_TMP="${ECHO_CMD} ${_MASTER_SITE_OVERRIDE} `${ECHO_CMD} $${__PATCH_SITES_TMP} | ${AWK} '${MASTER_SORT_AWK:S|\\|\\\\|g}'` ${_MASTER_SITE_BACKUP}" ; \
4027
			else \
4028
				SORTED_PATCH_SITES_CMD_TMP="${SORTED_PATCH_SITES_DEFAULT_CMD}" ; \
4029
			fi; \
4030
			${ECHO_CMD} -n ${MKDIR} ${_DISTDIR} '&& ' ; \
4031
			${ECHO_CMD} -n cd ${_DISTDIR} '&& { ' ; \
4032
			for site in `eval $$SORTED_PATCH_SITES_CMD_TMP ${_RANDOMIZE_SITES}`; do \
4033
				CKSIZE=`alg=SIZE; ${DISTINFO_DATA}`; \
4034
				case $${file} in \
4035
				*/*)	args="-o $${file} $${site}$${file}";; \
4036
				*)		args=$${site}$${file};; \
4037
				esac; \
4038
				${ECHO_CMD} -n ${SETENV} ${FETCH_ENV} ${FETCH_CMD} ${FETCH_BEFORE_ARGS} $${args} "${FETCH_AFTER_ARGS}" '|| ' ; \
4039
			done; \
4040
			${ECHO_CMD} "${ECHO_CMD} $${file} not fetched; }" ; \
4041
		fi; \
4042
	 done)
4043
.endif
4044
.endif
4045
4046
.if !target(fetch-url-list-int)
4047
fetch-url-list-int:
4048
	@${MKDIR} ${_DISTDIR}
4049
	@(cd ${_DISTDIR}; \
4050
	${_MASTER_SITES_ENV}; \
4051
	for _file in ${DISTFILES}; do \
4052
		file=`${ECHO_CMD} $$_file | ${SED} -E -e 's/:[^:]+$$//'` ; \
4053
			fileptn=`${ECHO_CMD} $$file | ${SED} 's|/|\\\\/|g;s/\./\\\\./g;s/\+/\\\\+/g;s/\?/\\\\?/g'` ; \
4054
		if [ $$_file = $$file ]; then	\
4055
			select='';	\
4056
		else	\
4057
			select=`${ECHO_CMD} $${_file##*:} | ${SED} -e 's/,/ /g'` ;	\
4058
		fi;	\
4059
		if [ ! -z "${LISTALL}" -o ! -f $$file -a ! -f $${file##*/} ]; then \
4060
			if [ ! -z "$$select" ] ; then \
4061
				__MASTER_SITES_TMP= ; \
4062
				for group in $$select; do \
4063
					if [ ! -z \$${_MASTER_SITES_$${group}} ] ; then \
4064
						eval ___MASTER_SITES_TMP=\$${_MASTER_SITES_$${group}} ; \
4065
						__MASTER_SITES_TMP="$${__MASTER_SITES_TMP} $${___MASTER_SITES_TMP}" ; \
4066
					fi \
4067
				done; \
4068
				___MASTER_SITES_TMP= ; \
4069
				SORTED_MASTER_SITES_CMD_TMP="${ECHO_CMD} ${_MASTER_SITE_OVERRIDE} `${ECHO_CMD} $${__MASTER_SITES_TMP} | ${AWK} '${MASTER_SORT_AWK:S|\\|\\\\|g}'` ${_MASTER_SITE_BACKUP}" ; \
4070
			else \
4071
				SORTED_MASTER_SITES_CMD_TMP="${SORTED_MASTER_SITES_DEFAULT_CMD}" ; \
4072
			fi ; \
4073
			for site in `eval $$SORTED_MASTER_SITES_CMD_TMP ${_RANDOMIZE_SITES}`; do \
4074
				case $${file} in \
4075
				*/*)	args="-o $${file} $${site}$${file}";; \
4076
				*)		args=$${site}$${file};; \
4077
				esac; \
4078
				${ECHO_CMD} $${args} ; \
4079
			done; \
4080
		fi \
4081
	done)
4082
.if defined(PATCHFILES)
4083
	@(cd ${_DISTDIR}; \
4084
	${_PATCH_SITES_ENV} ; \
4085
	for _file in ${PATCHFILES}; do \
4086
		file=`${ECHO_CMD} $$_file | ${SED} -E -e 's/:[^-:][^:]*$$//'` ; \
4087
		if [ $$_file = $$file ]; then	\
4088
			select='';	\
4089
		else	\
4090
			select=`${ECHO_CMD} $${_file##*:} | ${SED} -e 's/,/ /g'` ;	\
4091
		fi;	\
4092
		file=`${ECHO_CMD} $$file | ${SED} -E -e 's/:-[^:]+$$//'` ; \
4093
		fileptn=`${ECHO_CMD} $$file | ${SED} 's|/|\\\\/|g;s/\./\\\\./g;s/\+/\\\\+/g;s/\?/\\\\?/g'` ; \
4094
		if [ ! -z "${LISTALL}" -o ! -f $$file -a ! -f $${file##*/} ]; then \
4095
			if [ ! -z "$$select" ] ; then \
4096
				__PATCH_SITES_TMP= ; \
4097
				for group in $$select; do \
4098
					if [ ! -z \$${_PATCH_SITES_$${group}} ] ; then \
4099
						eval ___PATCH_SITES_TMP=\$${_PATCH_SITES_$${group}} ; \
4100
						__PATCH_SITES_TMP="$${__PATCH_SITES_TMP} $${___PATCH_SITES_TMP}" ; \
4101
					fi \
4102
				done; \
4103
				___PATCH_SITES_TMP= ; \
4104
				SORTED_PATCH_SITES_CMD_TMP="${ECHO_CMD} ${_MASTER_SITE_OVERRIDE} `${ECHO_CMD} $${__PATCH_SITES_TMP} | ${AWK} '${MASTER_SORT_AWK:S|\\|\\\\|g}'` ${_MASTER_SITE_BACKUP}" ; \
4105
			else \
4106
				SORTED_PATCH_SITES_CMD_TMP="${SORTED_PATCH_SITES_DEFAULT_CMD}" ; \
4107
			fi ; \
4108
			for site in `eval $$SORTED_PATCH_SITES_CMD_TMP ${_RANDOMIZE_SITES}`; do \
4109
				case $${file} in \
4110
				*/*)	args="-o $${file} $${site}$${file}";; \
4111
				*)		args=$${site}$${file};; \
4112
				esac; \
4113
				${ECHO_CMD} $${args} ; \
4114
			done; \
4115
		fi \
4116
	 done)
4117
.endif
4118
.endif
4119
4120
.if !target(fetch-urlall-list)
4121
fetch-urlall-list:
4122
	@cd ${.CURDIR} && LISTALL=yes ${MAKE} fetch-url-list-int
4123
.endif
4124
4125
.if !target(fetch-url-list)
4126
fetch-url-list: fetch-url-list-int
4127
.endif
4128
4129
# Generates patches.
3878
# Generates patches.
4130
3879
4131
update-patches:
3880
update-patches:
Lines 4141-4272 update-patches: Link Here
4141
3890
4142
# Checksumming utilities
3891
# Checksumming utilities
4143
3892
4144
check-checksum-algorithms:
3893
# List all algorithms here, all the variables name must begin with dp_
4145
	@ \
3894
_CHECKSUM_INIT_ENV= \
4146
	${checksum_init} \
3895
	dp_SHA256=${SHA256}
4147
	\
4148
	for alg in ${CHECKSUM_ALGORITHMS:tu}; do \
4149
		eval alg_executable=\$$$$alg; \
4150
		if [ -z "$$alg_executable" ]; then \
4151
			${ECHO_MSG} "Checksum algorithm $$alg: Couldn't find the executable."; \
4152
			${ECHO_MSG} "Set $$alg=/path/to/$$alg in /etc/make.conf and try again."; \
4153
			exit 1; \
4154
		fi; \
4155
	done; \
4156
4157
checksum_init=\
4158
	SHA256=${SHA256};
4159
3896
4160
.if !target(makesum)
3897
.if !target(makesum)
4161
makesum: check-checksum-algorithms
3898
# Some port change the options with OPTIONS_*_FORCE when make(makesum) to be
4162
	@cd ${.CURDIR} && ${MAKE} fetch NO_CHECKSUM=yes \
3899
# able to add all distfiles in one go.
4163
		DISABLE_SIZE=yes
3900
# For this to work, we need to call the do-fetch script directly here so that
4164
	@if [ -f ${DISTINFO_FILE} ]; then \
3901
# the options consistent when fetching and when makesum'ing.
4165
		if ${GREP} -q "^TIMESTAMP " ${DISTINFO_FILE}; then \
3902
# As we're fetching new distfiles, that are not in the distinfo file, disable
4166
			${GREP} -v "^TIMESTAMP " ${DISTINFO_FILE} > ${DISTINFO_FILE}.sav; \
3903
# checksum and sizes checks.
4167
		fi; \
3904
makesum:
4168
	fi
3905
.if !empty(DISTFILES)
4169
	@( \
3906
	@${SETENV} \
4170
		cd ${DISTDIR}; \
3907
			${_DO_FETCH_ENV} ${_MASTER_SITES_ENV} \
4171
		\
3908
			dp_NO_CHECKSUM=yes dp_DISABLE_SIZE=yes \
4172
		${checksum_init} \
3909
			dp_SITE_FLAVOR=MASTER \
4173
		\
3910
			${SH} ${SCRIPTSDIR}/do-fetch.sh ${DISTFILES:C/.*/'&'/}
4174
		for file in ${_CKSUMFILES}; do \
3911
.endif
4175
			for alg in ${CHECKSUM_ALGORITHMS:tu}; do \
3912
.if defined(PATCHFILES) && !empty(PATCHFILES)
4176
				eval alg_executable=\$$$$alg; \
3913
	@${SETENV} \
4177
				\
3914
			${_DO_FETCH_ENV} ${_PATCH_SITES_ENV} \
4178
				if [ $$alg_executable != "NO" ]; then \
3915
			dp_NO_CHECKSUM=yes dp_DISABLE_SIZE=yes \
4179
					$$alg_executable $$file >> ${DISTINFO_FILE}.new; \
3916
			dp_SITE_FLAVOR=PATCH \
4180
				fi; \
3917
			${SH} ${SCRIPTSDIR}/do-fetch.sh ${PATCHFILES:C/.*/'&'/}
4181
			done; \
3918
.endif
4182
			${ECHO_CMD} "SIZE ($$file) = `${STAT} -f \"%z\" $$file`" >> ${DISTINFO_FILE}.new; \
3919
	@${SETENV} \
4183
		done; \
3920
			${_CHECKSUM_INIT_ENV} \
4184
		if [ ! -f ${DISTINFO_FILE}.sav ] || ! cmp -s ${DISTINFO_FILE}.sav ${DISTINFO_FILE}.new; then \
3921
			dp_CHECKSUM_ALGORITHMS='${CHECKSUM_ALGORITHMS:tu}' \
4185
			${ECHO_CMD} "TIMESTAMP = `date '+%s'`" > ${DISTINFO_FILE} ; \
3922
			dp_CKSUMFILES='${_CKSUMFILES}' \
4186
				${CAT} ${DISTINFO_FILE}.new >> ${DISTINFO_FILE} ; \
3923
			dp_DISTDIR='${DISTDIR}' \
4187
		fi ; \
3924
			dp_DISTINFO_FILE='${DISTINFO_FILE}' \
4188
		rm -f ${DISTINFO_FILE}.new ${DISTINFO_FILE}.sav ; \
3925
			dp_ECHO_MSG='${ECHO_MSG}' \
4189
	)
3926
			dp_SCRIPTSDIR='${SCRIPTSDIR}' \
3927
			${SH} ${SCRIPTSDIR}/makesum.sh ${DISTFILES:C/.*/'&'/}
4190
.endif
3928
.endif
4191
3929
4192
.if !target(checksum)
3930
.if !target(checksum)
4193
checksum: fetch check-checksum-algorithms
3931
checksum: fetch
4194
	@set -e ; \
3932
.if !empty(_CKSUMFILES)
4195
	${checksum_init} \
3933
	@${SETENV} \
4196
	if [ -f ${DISTINFO_FILE} ]; then \
3934
			${_CHECKSUM_INIT_ENV} \
4197
		cd ${DISTDIR}; OK="";\
3935
			dp_CHECKSUM_ALGORITHMS='${CHECKSUM_ALGORITHMS:tu}' \
4198
		for file in ${_CKSUMFILES}; do \
3936
			dp_CURDIR='${.CURDIR}' \
4199
			ignored="true"; \
3937
			dp_DISTDIR='${DISTDIR}' \
4200
			_file=$${file#${DIST_SUBDIR}/*};	\
3938
			dp_DISTINFO_FILE='${DISTINFO_FILE}' \
4201
			for alg in ${CHECKSUM_ALGORITHMS:tu}; do \
3939
			dp_DIST_SUBDIR='${DIST_SUBDIR}' \
4202
				ignore="false"; \
3940
			dp_ECHO_MSG='${ECHO_MSG}' \
4203
				eval alg_executable=\$$$$alg; \
3941
			dp_FETCH_REGET='${FETCH_REGET}' \
4204
				\
3942
			dp_MAKE='${MAKE}' \
4205
				if [ $$alg_executable != "NO" ]; then \
3943
			dp_MAKEFLAGS='${.MAKEFLAGS}' \
4206
					MKSUM=`$$alg_executable < $$file`; \
3944
			dp_SCRIPTSDIR='${SCRIPTSDIR}' \
4207
					CKSUM=`file=$$_file; ${DISTINFO_DATA}`; \
3945
			dp_DISABLE_SIZE='${DISABLE_SIZE}' \
4208
				else \
3946
			dp_NO_CHECKSUM='${NO_CHECKSUM}' \
4209
					ignore="true"; \
3947
			${SH} ${SCRIPTSDIR}/checksum.sh ${_CKSUMFILES:C/.*/'&'/}
4210
				fi; \
3948
.endif
4211
				\
4212
				if [ $$ignore = "false" -a -z "$$CKSUM" ]; then \
4213
					${ECHO_MSG} "=> No $$alg checksum recorded for $$file."; \
4214
					ignore="true"; \
4215
				fi; \
4216
				\
4217
				if [ $$ignore = "false" ]; then \
4218
					match="false"; \
4219
					for chksum in $$CKSUM; do \
4220
						if [ "$$chksum" = "$$MKSUM" ]; then \
4221
							match="true"; \
4222
							break; \
4223
						fi; \
4224
					done; \
4225
					if [ $$match = "true" ]; then \
4226
						${ECHO_MSG} "=> $$alg Checksum OK for $$file."; \
4227
						ignored="false"; \
4228
					else \
4229
						${ECHO_MSG} "=> $$alg Checksum mismatch for $$file."; \
4230
						refetchlist="$$refetchlist$$file "; \
4231
						OK="$${OK:-retry}"; \
4232
						[ "$${OK}" = "retry" -a ${FETCH_REGET} -gt 0 ] && ${RM} -f $${file}; \
4233
						ignored="false"; \
4234
					fi; \
4235
				fi; \
4236
			done; \
4237
			\
4238
			if [ $$ignored = "true" ]; then \
4239
				${ECHO_MSG} "=> No suitable checksum found for $$file."; \
4240
				OK="${FALSE}"; \
4241
			fi; \
4242
			\
4243
		done; \
4244
		\
4245
		if [ "$${OK:=true}" = "retry" ] && [ ${FETCH_REGET} -gt 0 ]; then \
4246
			${ECHO_MSG} "===>  Refetch for ${FETCH_REGET} more times files: $$refetchlist"; \
4247
			if ( cd ${.CURDIR} && \
4248
			    ${MAKE} ${.MAKEFLAGS} FORCE_FETCH="$$refetchlist" FETCH_REGET="`${EXPR} ${FETCH_REGET} - 1`" fetch); then \
4249
				  if ( cd ${.CURDIR} && \
4250
			        ${MAKE} ${.MAKEFLAGS} FETCH_REGET="`${EXPR} ${FETCH_REGET} - 1`" checksum ); then \
4251
				      OK="true"; \
4252
				  fi; \
4253
			fi; \
4254
		fi; \
4255
		\
4256
		if [ "$$OK" != "true" -a ${FETCH_REGET} -eq 0 ]; then \
4257
			${ECHO_MSG} "===>  Giving up on fetching files: $$refetchlist"; \
4258
			${ECHO_MSG} "Make sure the Makefile and distinfo file (${DISTINFO_FILE})"; \
4259
			${ECHO_MSG} "are up to date.  If you are absolutely sure you want to override this"; \
4260
			${ECHO_MSG} "check, type \"make NO_CHECKSUM=yes [other args]\"."; \
4261
			exit 1; \
4262
		fi; \
4263
		if [ "$$OK" != "true" ]; then \
4264
			exit 1; \
4265
		fi; \
4266
	elif [ -n "${_CKSUMFILES:M*}" ]; then \
4267
		${ECHO_MSG} "=> No checksum file (${DISTINFO_FILE})."; \
4268
		exit 1; \
4269
	fi
4270
.endif
3949
.endif
4271
3950
4272
################################################################
3951
################################################################

Return to bug 208916