Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-ports-kde
Path: blob/main/Mk/Scripts/do-fetch.sh
16462 views
1
#!/bin/sh
2
#
3
# MAINTAINER: [email protected]
4
5
set -e
6
set -o pipefail
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_TARGET
15
16
[ -n "${DEBUG_MK_SCRIPTS}" -o -n "${DEBUG_MK_SCRIPTS_DO_FETCH}" ] && set -x
17
18
set -u
19
20
case ${dp_TARGET} in
21
do-fetch|makesum)
22
if [ ! -d "${dp_DISTDIR}" ]; then
23
mkdir -p "${dp_DISTDIR}"
24
fi
25
cd "${dp_DISTDIR}"
26
;;
27
esac
28
29
for _file in "${@}"; do
30
file=${_file%%:*}
31
32
# If this files has groups
33
if [ "$_file" = "$file" ]; then
34
select=DEFAULT
35
else
36
select=$(echo "${_file##*:}" | sed -e 's/,/ /g')
37
fi
38
39
filebasename=${file##*/}
40
if [ -n "${dp_FORCE_FETCH_ALL}" ]; then
41
force_fetch=true
42
else
43
force_fetch=false
44
for afile in ${dp_FORCE_FETCH_LIST}; do
45
afile=${afile##*/}
46
if [ "x$afile" = "x$filebasename" ]; then
47
force_fetch=true
48
fi
49
done
50
fi
51
if [ -f "${file}" -a "$force_fetch" != "true" ]; then
52
continue
53
fi
54
full_file="${dp_DIST_SUBDIR:+${dp_DIST_SUBDIR}/}${file}"
55
if [ -L "$file" ]; then
56
${dp_ECHO_MSG} "=> ${dp_DISTDIR}/$file is a broken symlink."
57
${dp_ECHO_MSG} "=> Perhaps a filesystem (most likely a CD) isn't mounted?"
58
${dp_ECHO_MSG} "=> Please correct this problem and try again."
59
exit 1
60
fi
61
if [ -f "${dp_DISTINFO_FILE}" -a -z "${dp_NO_CHECKSUM}" ]; then
62
_sha256sum=$(distinfo_data SHA256 "${full_file}")
63
if [ -z "$_sha256sum" ]; then
64
${dp_ECHO_MSG} "=> ${dp_DIST_SUBDIR:+$dp_DIST_SUBDIR/}$file is not in ${dp_DISTINFO_FILE}."
65
${dp_ECHO_MSG} "=> Either ${dp_DISTINFO_FILE} is out of date, or"
66
${dp_ECHO_MSG} "=> ${dp_DIST_SUBDIR:+$dp_DIST_SUBDIR/}$file is spelled incorrectly."
67
exit 1
68
fi
69
fi
70
case ${dp_TARGET} in
71
do-fetch|makesum)
72
${dp_ECHO_MSG} "=> $file doesn't seem to exist in ${dp_DISTDIR}."
73
if [ ! -w "${dp_DISTDIR}" ]; then
74
${dp_ECHO_MSG} "=> ${dp_DISTDIR} is not writable by you; cannot fetch."
75
exit 1
76
fi
77
;;
78
esac
79
__MASTER_SITES_TMP=
80
for group in $select; do
81
# Disable nounset for this, it may come up empty, but
82
# we don't want to fail with a strange error here.
83
set +u
84
eval ___MASTER_SITES_TMP="\${_${dp_SITE_FLAVOR}_SITES_${group}}"
85
set -u
86
if [ -n "${___MASTER_SITES_TMP}" ] ; then
87
__MASTER_SITES_TMP="${__MASTER_SITES_TMP} ${___MASTER_SITES_TMP}"
88
else
89
case ${dp_TARGET} in
90
do-fetch|makesum)
91
if [ -n "${dp_DEVELOPER}" ]; then
92
${dp_ECHO_MSG} "===> /!\\ Error /!\\"
93
else
94
${dp_ECHO_MSG} "===> /!\\ Warning /!\\"
95
fi
96
${dp_ECHO_MSG} " The :${group} group used for $file is missing"
97
${dp_ECHO_MSG} " from ${dp_SITE_FLAVOR}_SITES. Check for typos, or errors."
98
if [ -n "${dp_DEVELOPER}" ]; then
99
exit 1
100
fi
101
;;
102
esac
103
104
fi
105
done
106
___MASTER_SITES_TMP=
107
SORTED_MASTER_SITES_CMD_TMP="echo ${dp_MASTER_SITE_OVERRIDE} $(echo -n "${__MASTER_SITES_TMP}" | awk "${dp_MASTER_SORT_AWK}") ${dp_MASTER_SITE_BACKUP}"
108
case ${dp_TARGET} in
109
fetch-list)
110
echo -n "mkdir -p ${dp_DISTDIR} && "
111
echo -n "cd ${dp_DISTDIR} && { "
112
;;
113
esac
114
sites_remaining=0
115
if [ -n "${dp_RANDOMIZE_SITES}" ]; then
116
sites="$(${SORTED_MASTER_SITES_CMD_TMP} | ${dp_RANDOMIZE_SITES})"
117
else
118
sites="$(${SORTED_MASTER_SITES_CMD_TMP})"
119
fi
120
for site in ${sites}; do
121
sites_remaining=$((sites_remaining + 1))
122
done
123
for site in ${sites}; do
124
sites_remaining=$((sites_remaining - 1))
125
CKSIZE=$(distinfo_data SIZE "${full_file}")
126
early_args=""
127
case ${file} in
128
*/*)
129
case ${dp_TARGET} in
130
fetch-list)
131
echo "mkdir -p \"${file%/*}\" && "
132
early_args="-o ${file}"
133
;;
134
fetch-url-list-int)
135
;;
136
*)
137
mkdir -p "${file%/*}"
138
early_args="-o ${file}"
139
;;
140
esac
141
;;
142
esac
143
args="${early_args:+${early_args} }${site}${file}"
144
_fetch_cmd="${dp_FETCH_CMD} ${dp_FETCH_BEFORE_ARGS}"
145
if [ -z "${dp_DISABLE_SIZE}" -a -n "${CKSIZE}" ]; then
146
_fetch_cmd="${_fetch_cmd} -S ${CKSIZE}"
147
fi
148
_fetch_cmd="${_fetch_cmd} ${args} ${dp_FETCH_AFTER_ARGS}"
149
case ${dp_TARGET} in
150
do-fetch|makesum)
151
${dp_ECHO_MSG} "=> Attempting to fetch ${site}${file}"
152
if env -S "${dp_FETCH_ENV}" ${_fetch_cmd}; then
153
actual_size=$(stat -f %z "${file}")
154
if [ -n "${dp_DISABLE_SIZE}" ] || [ -z "${CKSIZE}" ] || [ "${actual_size}" -eq "${CKSIZE}" ]; then
155
continue 2
156
else
157
${dp_ECHO_MSG} "=> Fetched file size mismatch (expected ${CKSIZE}, actual ${actual_size})"
158
if [ ${sites_remaining} -gt 0 ]; then
159
${dp_ECHO_MSG} "=> Trying next site"
160
rm -f "${file}"
161
fi
162
fi
163
fi
164
;;
165
fetch-list)
166
echo -n "env $(escape "${_fetch_cmd}") || "
167
;;
168
fetch-url-list-int)
169
echo ${args}
170
;;
171
esac
172
done
173
case ${dp_TARGET} in
174
do-fetch|makesum)
175
${dp_ECHO_MSG} "=> Couldn't fetch it - please try to retrieve this"
176
${dp_ECHO_MSG} "=> port manually into ${dp_DISTDIR} and try again."
177
exit 1
178
;;
179
fetch-list)
180
echo "echo \"${file}\" not fetched; }"
181
;;
182
esac
183
done
184
185
186