Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-ports-kde
Path: blob/main/Mk/Scripts/do-depends.sh
16460 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_RAWDEPENDS dp_DEPTYPE dp_DEPENDS_TARGET dp_DEPENDS_PRECLEAN \
11
dp_DEPENDS_CLEAN dp_DEPENDS_ARGS dp_USE_PACKAGE_DEPENDS \
12
dp_USE_PACKAGE_DEPENDS_ONLY dp_PKG_ADD dp_PKG_INFO dp_WRKDIR \
13
dp_PKGNAME dp_STRICT_DEPENDS dp_LOCALBASE dp_LIB_DIRS dp_SH \
14
dp_SCRIPTSDIR PORTSDIR dp_MAKE dp_MAKEFLAGS dp_OVERLAYS
15
16
[ -n "${DEBUG_MK_SCRIPTS}" -o -n "${DEBUG_MK_SCRIPTS_DO_DEPENDS}" ] && set -x
17
18
set -u
19
20
install_depends()
21
{
22
origin=$1
23
target=$2
24
subpkg=$3
25
depends_args=$4
26
if [ -z "${dp_USE_PACKAGE_DEPENDS}" -a -z "${dp_USE_PACKAGE_DEPENDS_ONLY}" ]; then
27
INSTALLS_DEPENDS=1 MAKEFLAGS="${dp_MAKEFLAGS}" ${dp_MAKE} -C ${origin} ${target} ${depends_args}
28
return 0
29
fi
30
31
if [ -z "${subpkg}" ]; then
32
port_var_fetch "${origin}" "${depends_args}" \
33
PKGFILE pkgfile \
34
PKGBASE pkgbase
35
else
36
port_var_fetch "${origin}" "${depends_args}" \
37
PKGFILE.${subpkg} pkgfile \
38
PKGBASE.${subpkg} pkgbase
39
fi
40
41
if [ -r "${pkgfile}" -a "${target}" = "${dp_DEPENDS_TARGET}" ]; then
42
echo "===> Installing existing package ${pkgfile}"
43
if [ "${pkgbase}" = "pkg" ]; then
44
[ -d ${dp_WRKDIR} ] || mkdir -p ${dp_WRKDIR}
45
tar xf ${pkgfile} -C ${dp_WRKDIR} -s ",/.*/,,g" "*/pkg-static"
46
${dp_WRKDIR}/pkg-static add ${pkgfile}
47
rm -f ${dp_WRKDIR}/pkg-static
48
else
49
${dp_PKG_ADD} -A ${pkgfile}
50
fi
51
elif [ -n "${dp_USE_PACKAGE_DEPENDS_ONLY}" -a "${target}" = "${dp_DEPENDS_TARGET}" ]; then
52
echo "===> ${dp_PKGNAME} depends on package: ${pkgfile} - not found" >&2
53
echo "===> USE_PACKAGE_DEPENDS_ONLY set - not building missing dependency from source" >&2
54
exit 1
55
else
56
INSTALLS_DEPENDS=1 MAKEFLAGS="${dp_MAKEFLAGS}" ${dp_MAKE} -C ${origin} ${target} ${depends_args}
57
fi
58
}
59
60
find_package()
61
{
62
if ${dp_PKG_INFO} "$1" >/dev/null 2>&1; then
63
echo "===> ${dp_PKGNAME} depends on package: $1 - found"
64
return 0
65
fi
66
echo "===> ${dp_PKGNAME} depends on package: $1 - not found"
67
return 1
68
}
69
70
find_file()
71
{
72
if [ -e "$1" ]; then
73
echo "===> ${dp_PKGNAME} depends on file: $1 - found"
74
return 0
75
fi
76
echo "===> ${dp_PKGNAME} depends on file: $1 - not found"
77
return 1
78
}
79
80
find_file_path()
81
{
82
if which -s $1 ; then
83
echo "===> ${dp_PKGNAME} depends on executable: $1 - found"
84
return 0
85
fi
86
echo "===> ${dp_PKGNAME} depends on executable: $1 - not found"
87
return 1
88
}
89
90
find_lib()
91
{
92
echo -n "===> ${dp_PKGNAME} depends on shared library: $1"
93
libfile=$(env -i PATH="${PATH}" LIB_DIRS="${dp_LIB_DIRS}" LOCALBASE="${dp_LOCALBASE}" ${dp_SH} ${dp_SCRIPTSDIR}/find-lib.sh $1)
94
if [ -z "${libfile}" ]; then
95
echo " - not found"
96
return 1
97
fi
98
echo " - found (${libfile})"
99
}
100
101
anynotfound=0
102
err=0
103
for _line in ${dp_RAWDEPENDS} ; do
104
# ensure we never leak flavors
105
unset FLAVOR
106
myifs=${IFS}
107
IFS=:
108
set -- ${_line}
109
IFS=${myifs}
110
if [ $# -lt 2 -o $# -gt 3 ]; then
111
echo "Error: bad dependency syntax in ${dp_DEPTYPE}" >&2
112
echo "expecting: pattern:origin[@flavour][:target]" >&2
113
echo "got: ${_line}" >&2
114
err=1
115
continue
116
fi
117
pattern=$1
118
origin=$2
119
last=${3:-}
120
121
if [ -z "${pattern}" ]; then
122
echo "Error: there is an empty port dependency in ${dp_DEPTYPE}" >&2
123
err=1
124
continue
125
fi
126
127
if [ -z "${origin}" ]; then
128
echo "Error: a dependency has an empty origin in ${dp_DEPTYPE}" >&2
129
err=1
130
continue
131
fi
132
133
subpkg=
134
case "${origin}" in
135
*@*/*) ;; # Ignore @ in the path which would not be a flavor
136
*@*)
137
export FLAVOR="${origin##*@}"
138
origin=${origin%@*}
139
;;
140
*~*/*) ;; # Ignore ~ in the path which would not be a subpackage
141
*~*)
142
subpkg="${origin##*~}"
143
origin=${origin%~*}
144
;;
145
esac
146
147
case "${origin}" in
148
/*) ;;
149
*)
150
for overlay in ${dp_OVERLAYS} ${PORTSDIR}; do
151
orig="${overlay}/${origin}"
152
if [ -f "${orig}/Makefile" ]; then
153
break
154
fi
155
done
156
origin="${orig}"
157
;;
158
esac
159
160
depends_args="${dp_DEPENDS_ARGS}"
161
target=${dp_DEPENDS_TARGET}
162
if [ -n "${last}" ]; then
163
# In case we depend on the fetch stage, actually run checksum,
164
# this prevent a MITM attack.
165
if [ "${last}" = "fetch" ]; then
166
target=checksum
167
else
168
target=${last}
169
fi
170
if [ -n "${dp_DEPENDS_PRECLEAN}" ]; then
171
target="clean ${target}"
172
depends_args="${depends_args:+${depends_args} }NOCLEANDEPENDS=yes"
173
fi
174
if [ -n "${dp_DEPENDS_CLEAN}" ]; then
175
target="${target} clean"
176
depends_args="${depends_args:+${depends_args} }NOCLEANDEPENDS=yes"
177
fi
178
fi
179
180
case ${dp_DEPTYPE} in
181
LIB_DEPENDS)
182
case ${pattern} in
183
lib*.so*) fct=find_lib ;;
184
*)
185
echo "Error: pattern ${pattern} in LIB_DEPENDS is not valid"
186
err=1
187
continue
188
;;
189
esac ;;
190
*)
191
case ${pattern} in
192
*\>*|*\<*|*=*) fct=find_package ;;
193
/nonexistent) fct=false ;;
194
/*) fct=find_file ;;
195
*) fct=find_file_path ;;
196
esac ;;
197
esac
198
if ${fct} "${pattern}" ; then
199
continue
200
fi
201
[ ${pattern} = "/nonexistent" ] || anynotfound=1
202
203
if [ ! -f "${origin}/Makefile" ]; then
204
echo "Error a dependency refers to a non existing origin: ${origin} in ${dp_DEPTYPE}" >&2
205
err=1
206
continue
207
fi
208
209
# Now actually install the dependencies
210
install_depends "${origin}" "${target}" "${subpkg}" "${depends_args}"
211
# Recheck if the installed dependency validates the pattern except for /nonexistent
212
[ "${fct}" = "false" ] || ${fct} "${pattern}"
213
echo "===> Returning to build of ${dp_PKGNAME}"
214
done
215
216
if [ $err -eq 1 ]; then
217
echo "Errors with dependencies."
218
exit 1
219
fi
220
221
if [ -n "${dp_STRICT_DEPENDS}" -a ${anynotfound} -eq 1 ]; then \
222
echo "===> STRICT_DEPENDS set - Not installing missing dependencies."
223
echo " This means a dependency is wrong since it was not satisfied in the ${dp_DEPTYPE} phase."
224
exit 1
225
fi
226
227