| 1 | # Copyright 1999-2011 Gentoo Foundation |
1 | # Copyright 1999-2012 Gentoo Foundation |
| 2 | # Distributed under the terms of the GNU General Public License v2 |
2 | # Distributed under the terms of the GNU General Public License v2 |
| 3 | # $Header: /var/cvsroot/gentoo-x86/eclass/check-reqs.eclass,v 1.8 2011/08/22 04:46:31 vapier Exp $ |
3 | # $Header: /var/cvsroot/gentoo-x86/eclass/check-reqs.eclass,v 1.12 2012/10/19 02:44:21 patrick Exp $ |
| 4 | |
4 | |
| 5 | # @ECLASS: check-reqs.eclass |
5 | # @ECLASS: check-reqs.eclass |
| 6 | # @MAINTAINER: |
6 | # @MAINTAINER: |
|
|
7 | # QA Team <qa@gentoo.org> |
|
|
8 | # @AUTHOR: |
| 7 | # Bo Ørsted Andresen <zlin@gentoo.org> |
9 | # Bo Ørsted Andresen <zlin@gentoo.org> |
| 8 | # @AUTHOR: |
|
|
| 9 | # Original Author: Ciaran McCreesh <ciaranm@gentoo.org> |
10 | # Original Author: Ciaran McCreesh <ciaranm@gentoo.org> |
| 10 | # @BLURB: Provides a uniform way of handling ebuild which have very high build requirements |
11 | # @BLURB: Provides a uniform way of handling ebuild which have very high build requirements |
| 11 | # @DESCRIPTION: |
12 | # @DESCRIPTION: |
| 12 | # This eclass provides a uniform way of handling ebuilds which have very high |
13 | # This eclass provides a uniform way of handling ebuilds which have very high |
| 13 | # build requirements in terms of memory or disk space. It provides a function |
14 | # build requirements in terms of memory or disk space. It provides a function |
| 14 | # which should usually be called during pkg_setup(). |
15 | # which should usually be called during pkg_setup(). |
| 15 | # |
16 | # |
| 16 | # From a user perspective, the variable CHECKREQS_ACTION can be set to: |
|
|
| 17 | # * "warn" (default), which will display a warning and wait for 15s |
|
|
| 18 | # * "error", which will make the ebuild error out |
|
|
| 19 | # * "ignore", which will not take any action |
|
|
| 20 | # |
|
|
| 21 | # The chosen action only happens when the system's resources are detected |
17 | # The chosen action only happens when the system's resources are detected |
| 22 | # correctly and only if they are below the threshold specified by the package. |
18 | # correctly and only if they are below the threshold specified by the package. |
| 23 | # |
19 | # |
| 24 | # For ebuild authors: only use this eclass if you reaaalllllly have stupidly |
|
|
| 25 | # high build requirements. At an absolute minimum, you shouldn't be using this |
|
|
| 26 | # unless the ebuild needs >256MBytes RAM or >1GByte temporary or install space. |
|
|
| 27 | # The code should look something like: |
|
|
| 28 | # |
|
|
| 29 | # @CODE |
20 | # @CODE |
| 30 | # pkg_setup() { |
|
|
| 31 | # # values in MBytes |
|
|
| 32 | # |
|
|
| 33 | # # need this much memory (does *not* check swap) |
21 | # # need this much memory (does *not* check swap) |
| 34 | # CHECKREQS_MEMORY="256" |
22 | # CHECKREQS_MEMORY="256M" |
| 35 | # |
23 | # |
| 36 | # # need this much temporary build space |
24 | # # need this much temporary build space |
| 37 | # CHECKREQS_DISK_BUILD="2048" |
25 | # CHECKREQS_DISK_BUILD="2G" |
| 38 | # |
26 | # |
| 39 | # # install will need this much space in /usr |
27 | # # install will need this much space in /usr |
| 40 | # CHECKREQS_DISK_USR="1024" |
28 | # CHECKREQS_DISK_USR="1G" |
| 41 | # |
29 | # |
| 42 | # # install will need this much space in /var |
30 | # # install will need this much space in /var |
| 43 | # CHECKREQS_DISK_VAR="1024" |
31 | # CHECKREQS_DISK_VAR="1024M" |
| 44 | # |
32 | # |
| 45 | # # go! |
|
|
| 46 | # check_reqs |
|
|
| 47 | # } |
|
|
| 48 | # @CODE |
33 | # @CODE |
| 49 | # |
34 | # |
| 50 | # Alternatively, the check_reqs_conditional function can be used to carry out |
|
|
| 51 | # alternate actions (e.g. using a much slower but far less memory intensive |
|
|
| 52 | # build option that gives the same end result). |
|
|
| 53 | # |
|
|
| 54 | # You should *not* override the user's CHECKREQS_ACTION setting, nor should you |
|
|
| 55 | # attempt to provide a value if it is unset. Note that the environment variables |
|
|
| 56 | # are used rather than parameters for a few reasons: |
|
|
| 57 | # * easier to do if use blah ; then things |
|
|
| 58 | # * we might add in additional requirements things later |
|
|
| 59 | # If you don't specify a value for, say, CHECKREQS_MEMORY, then the test is not |
35 | # If you don't specify a value for, say, CHECKREQS_MEMORY, then the test is not |
| 60 | # carried out. |
36 | # carried out. |
| 61 | # |
37 | # |
| 62 | # These checks should probably mostly work on non-Linux, and they should |
38 | # These checks should probably mostly work on non-Linux, and they should |
| 63 | # probably degrade gracefully if they don't. Probably. |
39 | # probably degrade gracefully if they don't. Probably. |
| 64 | |
40 | |
| 65 | inherit eutils |
41 | inherit eutils |
| 66 | |
42 | |
| 67 | # @ECLASS-VARIABLE: CHECKREQS_MEMORY |
43 | # @ECLASS-VARIABLE: CHECKREQS_MEMORY |
|
|
44 | # @DEFAULT_UNSET |
| 68 | # @DESCRIPTION: |
45 | # @DESCRIPTION: |
| 69 | # How much RAM is needed in MB? |
46 | # How much RAM is needed? Eg.: CHECKREQS_MEMORY=15M |
| 70 | |
47 | |
| 71 | # @ECLASS-VARIABLE: CHECKREQS_DISK_BUILD |
48 | # @ECLASS-VARIABLE: CHECKREQS_DISK_BUILD |
|
|
49 | # @DEFAULT_UNSET |
| 72 | # @DESCRIPTION: |
50 | # @DESCRIPTION: |
| 73 | # How much diskspace is needed to build the package? In MB |
51 | # How much diskspace is needed to build the package? Eg.: CHECKREQS_DISK_BUILD=2T |
| 74 | |
52 | |
| 75 | # @ECLASS-VARIABLE: CHECKREQS_DISK_USR |
53 | # @ECLASS-VARIABLE: CHECKREQS_DISK_USR |
|
|
54 | # @DEFAULT_UNSET |
| 76 | # @DESCRIPTION: |
55 | # @DESCRIPTION: |
| 77 | # How much space in /usr is needed to install the package? In MB |
56 | # How much space in /usr is needed to install the package? Eg.: CHECKREQS_DISK_USR=15G |
| 78 | |
57 | |
| 79 | # @ECLASS-VARIABLE: CHECKREQS_DISK_VAR |
58 | # @ECLASS-VARIABLE: CHECKREQS_DISK_VAR |
|
|
59 | # @DEFAULT_UNSET |
| 80 | # @DESCRIPTION: |
60 | # @DESCRIPTION: |
| 81 | # How much space is needed in /var? In MB |
61 | # How much space is needed in /var? Eg.: CHECKREQS_DISK_VAR=3000M |
|
|
62 | |
|
|
63 | EXPORT_FUNCTIONS pkg_setup |
|
|
64 | case "${EAPI:-0}" in |
|
|
65 | 0|1|2|3) ;; |
|
|
66 | 4|5) EXPORT_FUNCTIONS pkg_pretend ;; |
|
|
67 | *) die "EAPI=${EAPI} is not supported" ;; |
|
|
68 | esac |
| 82 | |
69 | |
| 83 | # @FUNCTION: check_reqs |
70 | # @FUNCTION: check_reqs |
| 84 | # @DESCRIPTION: |
71 | # @DESCRIPTION: |
| 85 | # Checks the requirements given in the specific variables. If not reached, |
72 | # Obsolete function executing all the checks and priting out results |
| 86 | # either prints a warning or dies. |
|
|
| 87 | check_reqs() { |
73 | check_reqs() { |
| 88 | [[ -n "${1}" ]] && die "Usage: check_reqs" |
74 | debug-print-function ${FUNCNAME} "$@" |
| 89 | |
75 | |
| 90 | export CHECKREQS_NEED_SLEEP="" CHECKREQS_NEED_DIE="" |
|
|
| 91 | if [[ "$CHECKREQS_ACTION" != "ignore" ]] ; then |
|
|
| 92 | [[ -n "$CHECKREQS_MEMORY" ]] && check_build_memory |
|
|
| 93 | [[ -n "$CHECKREQS_DISK_BUILD" ]] && check_build_disk \ |
|
|
| 94 | "${T}" "${CHECKREQS_DISK_BUILD}" |
|
|
| 95 | [[ -n "$CHECKREQS_DISK_USR" ]] && check_build_disk \ |
|
|
| 96 | "${ROOT}/usr" "${CHECKREQS_DISK_USR}" |
|
|
| 97 | [[ -n "$CHECKREQS_DISK_VAR" ]] && check_build_disk \ |
|
|
| 98 | "${ROOT}/var" "${CHECKREQS_DISK_VAR}" |
|
|
| 99 | fi |
|
|
| 100 | |
|
|
| 101 | if [[ -n "${CHECKREQS_NEED_SLEEP}" ]] ; then |
|
|
| 102 | echo |
76 | echo |
| 103 | ewarn "Bad things may happen! You may abort the build by pressing ctrl+c in" |
77 | ewarn "QA: Package calling old ${FUNCNAME} function." |
| 104 | ewarn "the next 15 seconds." |
78 | ewarn "QA: Please file a bug against the package." |
| 105 | ewarn " " |
79 | ewarn "QA: It should call check-reqs_pkg_pretend and check-reqs_pkg_setup" |
| 106 | einfo "To make this kind of warning a fatal error, add a line to /etc/make.conf" |
80 | ewarn "QA: and possibly use EAPI=4 or later." |
| 107 | einfo "setting CHECKREQS_ACTION=\"error\". To skip build requirements checking," |
81 | echo |
| 108 | einfo "set CHECKREQS_ACTION=\"ignore\"." |
|
|
| 109 | epause 15 |
|
|
| 110 | fi |
|
|
| 111 | |
82 | |
|
|
83 | check-reqs_pkg_setup "$@" |
|
|
84 | } |
|
|
85 | |
|
|
86 | # @FUNCTION: check-reqs_pkg_setup |
|
|
87 | # @DESCRIPTION: |
|
|
88 | # Exported function running the resources checks in pkg_setup phase. |
|
|
89 | # It should be run in both phases to ensure condition changes between |
|
|
90 | # pkg_pretend and pkg_setup won't affect the build. |
|
|
91 | check-reqs_pkg_setup() { |
|
|
92 | debug-print-function ${FUNCNAME} "$@" |
|
|
93 | |
|
|
94 | [[ ${MERGE_TYPE} == binary ]] && return |
|
|
95 | |
|
|
96 | check-reqs_prepare |
|
|
97 | check-reqs_run |
|
|
98 | check-reqs_output |
|
|
99 | } |
|
|
100 | |
|
|
101 | # @FUNCTION: check-reqs_pkg_pretend |
|
|
102 | # @DESCRIPTION: |
|
|
103 | # Exported function running the resources checks in pkg_pretend phase. |
|
|
104 | check-reqs_pkg_pretend() { |
|
|
105 | debug-print-function ${FUNCNAME} "$@" |
|
|
106 | |
|
|
107 | check-reqs_pkg_setup "$@" |
|
|
108 | } |
|
|
109 | |
|
|
110 | # @FUNCTION: check-reqs_prepare |
|
|
111 | # @DESCRIPTION: |
|
|
112 | # Internal function that checks the variables that should be defined. |
|
|
113 | check-reqs_prepare() { |
|
|
114 | debug-print-function ${FUNCNAME} "$@" |
|
|
115 | |
|
|
116 | if [[ -z ${CHECKREQS_MEMORY} && |
|
|
117 | -z ${CHECKREQS_DISK_BUILD} && |
|
|
118 | -z ${CHECKREQS_DISK_USR} && |
|
|
119 | -z ${CHECKREQS_DISK_VAR} ]]; then |
|
|
120 | eerror "Set some check-reqs eclass variables if you want to use it." |
|
|
121 | eerror "If you are user and see this message file a bug against the package." |
|
|
122 | die "${FUNCNAME}: check-reqs eclass called but not actualy used!" |
|
|
123 | fi |
|
|
124 | } |
|
|
125 | |
|
|
126 | # @FUNCTION: check-reqs_run |
|
|
127 | # @DESCRIPTION: |
|
|
128 | # Internal function that runs the check based on variable settings. |
|
|
129 | check-reqs_run() { |
|
|
130 | debug-print-function ${FUNCNAME} "$@" |
|
|
131 | |
|
|
132 | # some people are *censored* |
|
|
133 | unset CHECKREQS_FAILED |
|
|
134 | |
|
|
135 | [[ -n ${CHECKREQS_MEMORY} ]] && \ |
|
|
136 | check-reqs_memory \ |
|
|
137 | ${CHECKREQS_MEMORY} |
|
|
138 | |
|
|
139 | [[ -n ${CHECKREQS_DISK_BUILD} ]] && \ |
|
|
140 | check-reqs_disk \ |
|
|
141 | "${T}" \ |
|
|
142 | "${CHECKREQS_DISK_BUILD}" |
|
|
143 | |
|
|
144 | [[ -n ${CHECKREQS_DISK_USR} ]] && \ |
|
|
145 | check-reqs_disk \ |
|
|
146 | "${EROOT}/usr" \ |
|
|
147 | "${CHECKREQS_DISK_USR}" |
|
|
148 | |
|
|
149 | [[ -n ${CHECKREQS_DISK_VAR} ]] && \ |
|
|
150 | check-reqs_disk \ |
|
|
151 | "${EROOT}/var" \ |
|
|
152 | "${CHECKREQS_DISK_VAR}" |
|
|
153 | } |
|
|
154 | |
|
|
155 | # @FUNCTION: check-reqs_get_mebibytes |
|
|
156 | # @DESCRIPTION: |
|
|
157 | # Internal function that returns number in mebibytes. |
|
|
158 | # Converts from 1G=1024 or 1T=1048576 |
|
|
159 | check-reqs_get_mebibytes() { |
|
|
160 | debug-print-function ${FUNCNAME} "$@" |
|
|
161 | |
|
|
162 | [[ -z ${1} ]] && die "Usage: ${FUNCNAME} [size]" |
|
|
163 | |
|
|
164 | local unit=${1:(-1)} |
|
|
165 | local size=${1%[GMT]} |
|
|
166 | |
|
|
167 | case ${unit} in |
|
|
168 | G) echo $((1024 * size)) ;; |
|
|
169 | [M0-9]) echo ${size} ;; |
|
|
170 | T) echo $((1024 * 1024 * size)) ;; |
|
|
171 | *) |
|
|
172 | die "${FUNCNAME}: Unknown unit: ${unit}" |
|
|
173 | ;; |
|
|
174 | esac |
|
|
175 | } |
|
|
176 | |
|
|
177 | # @FUNCTION: check-reqs_get_number |
|
|
178 | # @DESCRIPTION: |
|
|
179 | # Internal function that returns number without the unit. |
|
|
180 | # Converts from 1G=1 or 150T=150. |
|
|
181 | check-reqs_get_number() { |
|
|
182 | debug-print-function ${FUNCNAME} "$@" |
|
|
183 | |
|
|
184 | [[ -z ${1} ]] && die "Usage: ${FUNCNAME} [size]" |
|
|
185 | |
|
|
186 | local unit=${1:(-1)} |
|
|
187 | local size=${1%[GMT]} |
|
|
188 | |
|
|
189 | # Check for unset units and warn about them. |
|
|
190 | # Backcompat. |
|
|
191 | if [[ ${size} == ${1} ]]; then |
|
|
192 | ewarn "QA: Package does not specify unit for the size check" |
|
|
193 | ewarn "QA: Assuming mebibytes." |
|
|
194 | ewarn "QA: File bug against the package. It should specify the unit." |
|
|
195 | fi |
|
|
196 | |
|
|
197 | echo ${size} |
|
|
198 | } |
|
|
199 | |
|
|
200 | # @FUNCTION: check-reqs_get_unit |
|
|
201 | # @DESCRIPTION: |
|
|
202 | # Internal function that returns number without the unit. |
|
|
203 | # Converts from 1G=1 or 150T=150. |
|
|
204 | check-reqs_get_unit() { |
|
|
205 | debug-print-function ${FUNCNAME} "$@" |
|
|
206 | |
|
|
207 | [[ -z ${1} ]] && die "Usage: ${FUNCNAME} [size]" |
|
|
208 | |
|
|
209 | local unit=${1:(-1)} |
|
|
210 | |
|
|
211 | case ${unit} in |
|
|
212 | G) echo "gibibytes" ;; |
|
|
213 | [M0-9]) echo "mebibytes" ;; |
|
|
214 | T) echo "tebibytes" ;; |
|
|
215 | *) |
|
|
216 | die "${FUNCNAME}: Unknown unit: ${unit}" |
|
|
217 | ;; |
|
|
218 | esac |
|
|
219 | } |
|
|
220 | |
|
|
221 | # @FUNCTION: check-reqs_output |
|
|
222 | # @DESCRIPTION: |
|
|
223 | # Internal function that prints the warning and dies if required based on |
|
|
224 | # the test results. |
|
|
225 | check-reqs_output() { |
|
|
226 | debug-print-function ${FUNCNAME} "$@" |
|
|
227 | |
|
|
228 | local msg="ewarn" |
|
|
229 | |
|
|
230 | [[ ${EBUILD_PHASE} == "pretend" && -z ${I_KNOW_WHAT_I_AM_DOING} ]] && msg="eerror" |
| 112 | if [[ -n "${CHECKREQS_NEED_DIE}" ]] ; then |
231 | if [[ -n ${CHECKREQS_FAILED} ]]; then |
| 113 | eerror "Bailing out as specified by CHECKREQS_ACTION" |
232 | ${msg} |
|
|
233 | ${msg} "Space constrains set in the ebuild were not met!" |
|
|
234 | ${msg} "The build will most probably fail, you should enhance the space" |
|
|
235 | ${msg} "as per failed tests." |
|
|
236 | ${msg} |
|
|
237 | |
|
|
238 | [[ ${EBUILD_PHASE} == "pretend" && -z ${I_KNOW_WHAT_I_AM_DOING} ]] && \ |
| 114 | die "Build requirements not met" |
239 | die "Build requirements not met!" |
| 115 | fi |
240 | fi |
| 116 | } |
241 | } |
| 117 | |
242 | |
| 118 | # @FUNCTION: check_reqs_conditional |
243 | # @FUNCTION: check-reqs_memory |
| 119 | # @RETURN: True if requirements check passed, else False |
|
|
| 120 | # @DESCRIPTION: |
244 | # @DESCRIPTION: |
| 121 | # Checks the requirements given in the specific variables |
245 | # Internal function that checks size of RAM. |
| 122 | check_reqs_conditional() { |
246 | check-reqs_memory() { |
| 123 | [[ -n "${1}" ]] && die "Usage: check_reqs" |
247 | debug-print-function ${FUNCNAME} "$@" |
| 124 | |
248 | |
| 125 | export CHECKREQS_NEED_SLEEP="" CHECKREQS_NEED_DIE="" |
249 | [[ -z ${1} ]] && die "Usage: ${FUNCNAME} [size]" |
| 126 | if [[ "$CHECKREQS_ACTION" != "ignore" ]] ; then |
|
|
| 127 | [[ -n "$CHECKREQS_MEMORY" ]] && check_build_memory |
|
|
| 128 | [[ -n "$CHECKREQS_DISK_BUILD" ]] && check_build_disk \ |
|
|
| 129 | "${T}" "${CHECKREQS_DISK_BUILD}" |
|
|
| 130 | [[ -n "$CHECKREQS_DISK_USR" ]] && check_build_disk \ |
|
|
| 131 | "${ROOT}/usr" "${CHECKREQS_DISK_USR}" |
|
|
| 132 | [[ -n "$CHECKREQS_DISK_VAR" ]] && check_build_disk \ |
|
|
| 133 | "${ROOT}/var" "${CHECKREQS_DISK_VAR}" |
|
|
| 134 | fi |
|
|
| 135 | |
250 | |
| 136 | [[ -z "${CHECKREQS_NEED_SLEEP}" && -z "${CHECKREQS_NEED_DIE}" ]] |
251 | local size=${1} |
| 137 | } |
252 | local actual_memory |
| 138 | |
253 | |
| 139 | # internal use only! |
254 | check-reqs_start_phase \ |
| 140 | check_build_memory() { |
255 | ${size} \ |
| 141 | [[ -n "${1}" ]] && die "Usage: check_build_memory" |
256 | "RAM" |
| 142 | check_build_msg_begin "${CHECKREQS_MEMORY}" "MBytes" "RAM" |
257 | |
| 143 | if [[ -r /proc/meminfo ]] ; then |
258 | if [[ -r /proc/meminfo ]] ; then |
| 144 | actual_memory=$(sed -n -e '/MemTotal:/s/^[^:]*: *\([0-9]\+\) kB/\1/p' \ |
259 | actual_memory=$(awk '/MemTotal/ { print $2 }' /proc/meminfo) |
| 145 | /proc/meminfo) |
|
|
| 146 | else |
260 | else |
| 147 | actual_memory=$(sysctl hw.physmem 2>/dev/null ) |
261 | actual_memory=$(sysctl hw.physmem 2>/dev/null ) |
| 148 | [[ "$?" == "0" ]] && |
262 | [[ "$?" == "0" ]] && |
| 149 | actual_memory=$(echo $actual_memory | sed -e 's/^[^:=]*[:=]//' ) |
263 | actual_memory=$(echo $actual_memory | sed -e 's/^[^:=]*[:=]//' ) |
| 150 | fi |
264 | fi |
| 151 | if [[ -n "${actual_memory}" ]] ; then |
265 | if [[ -n ${actual_memory} ]] ; then |
| 152 | if [[ ${actual_memory} -lt $((1024 * ${CHECKREQS_MEMORY})) ]] ; then |
266 | if [[ ${actual_memory} -lt $((1024 * $(check-reqs_get_mebibytes ${size}))) ]] ; then |
| 153 | eend 1 |
267 | eend 1 |
| 154 | check_build_msg_ick "${CHECKREQS_MEMORY}" "MBytes" "RAM" |
268 | check-reqs_unsatisfied \ |
|
|
269 | ${size} \ |
|
|
270 | "RAM" |
| 155 | else |
271 | else |
| 156 | eend 0 |
272 | eend 0 |
| 157 | fi |
273 | fi |
| 158 | else |
274 | else |
| 159 | eend 1 |
275 | eend 1 |
| 160 | ewarn "Couldn't determine amount of memory, skipping ..." |
276 | ewarn "Couldn't determine amount of memory, skipping..." |
| 161 | fi |
277 | fi |
| 162 | } |
278 | } |
| 163 | |
279 | |
| 164 | # internal use only! |
280 | # @FUNCTION: check-reqs_disk |
| 165 | check_build_disk() { |
281 | # @DESCRIPTION: |
| 166 | [[ -z "${2}" ]] && die "Usage: check_build_disk where name needed" |
282 | # Internal function that checks space on the harddrive. |
| 167 | check_build_msg_begin "${2}" "MBytes" \ |
283 | check-reqs_disk() { |
|
|
284 | debug-print-function ${FUNCNAME} "$@" |
|
|
285 | |
|
|
286 | [[ -z ${2} ]] && die "Usage: ${FUNCNAME} [path] [size]" |
|
|
287 | |
|
|
288 | local path=${1} |
|
|
289 | local size=${2} |
|
|
290 | local space_megs |
|
|
291 | |
|
|
292 | check-reqs_start_phase \ |
|
|
293 | ${size} \ |
| 168 | "disk space at ${1}" |
294 | "disk space at \"${path}\"" |
| 169 | actual_space=$(df -Pm ${1} 2>/dev/null | sed -n \ |
295 | |
| 170 | '$s/\(\S\+\s\+\)\{3\}\([0-9]\+\).*/\2/p' 2>/dev/null ) |
296 | space_megs=$(df -Pm "${1}" 2>/dev/null | awk 'FNR == 2 {print $4}') |
|
|
297 | |
| 171 | if [[ "$?" == "0" && -n "${actual_space}" ]] ; then |
298 | if [[ $? == 0 && -n ${space_megs} ]] ; then |
| 172 | if [[ ${actual_space} -lt ${2} ]] ; then |
299 | if [[ ${space_megs} -lt $(check-reqs_get_mebibytes ${size}) ]] ; then |
| 173 | eend 1 |
300 | eend 1 |
| 174 | check_build_msg_ick "${2}" "MBytes" \ |
301 | check-reqs_unsatisfied \ |
|
|
302 | ${size} \ |
| 175 | "disk space at ${1}" |
303 | "disk space at \"${path}\"" |
| 176 | else |
304 | else |
| 177 | eend 0 |
305 | eend 0 |
| 178 | fi |
306 | fi |
| 179 | else |
307 | else |
| 180 | eend 1 |
308 | eend 1 |
| 181 | ewarn "Couldn't figure out disk space, skipping ..." |
309 | ewarn "Couldn't determine disk space, skipping..." |
| 182 | fi |
310 | fi |
| 183 | } |
311 | } |
| 184 | |
312 | |
| 185 | # internal use only! |
313 | # @FUNCTION: check-reqs_start_phase |
| 186 | check_build_msg_begin() { |
314 | # @DESCRIPTION: |
|
|
315 | # Internal function that inform about started check |
|
|
316 | check-reqs_start_phase() { |
|
|
317 | debug-print-function ${FUNCNAME} "$@" |
|
|
318 | |
|
|
319 | [[ -z ${2} ]] && die "Usage: ${FUNCNAME} [size] [location]" |
|
|
320 | |
|
|
321 | local size=${1} |
|
|
322 | local location=${2} |
|
|
323 | local sizeunit="$(check-reqs_get_number ${size}) $(check-reqs_get_unit ${size})" |
|
|
324 | |
| 187 | ebegin "Checking for at least ${1}${2} ${3}" |
325 | ebegin "Checking for at least ${sizeunit} ${location}" |
| 188 | } |
326 | } |
| 189 | |
327 | |
| 190 | # internal use only! |
328 | # @FUNCTION: check-reqs_unsatisfied |
| 191 | check_build_msg_skip() { |
329 | # @DESCRIPTION: |
| 192 | ewarn "Skipping check for at least ${1}${2} ${3}" |
330 | # Internal function that inform about check result. |
| 193 | } |
331 | # It has different output between pretend and setup phase, |
|
|
332 | # where in pretend phase it is fatal. |
|
|
333 | check-reqs_unsatisfied() { |
|
|
334 | debug-print-function ${FUNCNAME} "$@" |
| 194 | |
335 | |
| 195 | # internal use only! |
336 | [[ -z ${2} ]] && die "Usage: ${FUNCNAME} [size] [location]" |
| 196 | check_build_msg_ick() { |
|
|
| 197 | if [[ "${CHECKREQS_ACTION}" == "error" ]] ; then |
|
|
| 198 | eerror "Don't have at least ${1}${2} ${3}" |
|
|
| 199 | echo |
|
|
| 200 | export CHECKREQS_NEED_DIE="yes" |
|
|
| 201 | else |
|
|
| 202 | ewarn "Don't have at least ${1}${2} ${3}" |
|
|
| 203 | echo |
|
|
| 204 | export CHECKREQS_NEED_SLEEP="yes" |
|
|
| 205 | fi |
|
|
| 206 | } |
|
|
| 207 | |
337 | |
|
|
338 | local msg="ewarn" |
|
|
339 | local size=${1} |
|
|
340 | local location=${2} |
|
|
341 | local sizeunit="$(check-reqs_get_number ${size}) $(check-reqs_get_unit ${size})" |
|
|
342 | |
|
|
343 | [[ ${EBUILD_PHASE} == "pretend" && -z ${I_KNOW_WHAT_I_AM_DOING} ]] && msg="eerror" |
|
|
344 | ${msg} "There is NOT at least ${sizeunit} ${location}" |
|
|
345 | |
|
|
346 | # @ECLASS-VARIABLE: CHECKREQS_FAILED |
|
|
347 | # @DESCRIPTION: |
|
|
348 | # @INTERNAL |
|
|
349 | # If set the checks failed and eclass should abort the build. |
|
|
350 | # Internal, do not set yourself. |
|
|
351 | CHECKREQS_FAILED="true" |
|
|
352 | } |
|
|
353 | |