/[gentoo-x86]/eclass/linux-info.eclass
Gentoo

Contents of /eclass/linux-info.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.51 - (hide annotations) (download)
Mon Oct 1 13:16:44 2007 UTC (6 years, 10 months ago) by vapier
Branch: MAIN
Changes since 1.50: +9 -5 lines
people have had plenty of time to transition to linux-info for set_arch_to_kernel/set_arch_to_portage ... time is up

1 vapier 1.37 # Copyright 1999-2006 Gentoo Foundation
2 johnm 1.1 # Distributed under the terms of the GNU General Public License v2
3 vapier 1.51 # $Header: /var/cvsroot/gentoo-x86/eclass/linux-info.eclass,v 1.50 2006/12/07 18:52:55 dsd Exp $
4 johnm 1.1 #
5 johnm 1.10 # Description: This eclass is used as a central eclass for accessing kernel
6     # related information for sources already installed.
7     # It is vital for linux-mod to function correctly, and is split
8     # out so that any ebuild behaviour "templates" are abstracted out
9     # using additional eclasses.
10 johnm 1.1 #
11 johnm 1.10 # Maintainer: John Mylchreest <johnm@gentoo.org>
12     # Copyright 2004 Gentoo Linux
13     #
14     # Please direct your bugs to the current eclass maintainer :)
15    
16     # A Couple of env vars are available to effect usage of this eclass
17     # These are as follows:
18 swegener 1.29 #
19 johnm 1.21 # Env Var Option Description
20 johnm 1.10 # KERNEL_DIR <string> The directory containing kernel the target kernel
21 johnm 1.21 # sources.
22 johnm 1.10 # CONFIG_CHECK <string> a list of .config options to check for before
23 johnm 1.21 # proceeding with the install. ie: CONFIG_CHECK="MTRR"
24 swegener 1.29 # You can also check that an option doesn't exist by
25 johnm 1.21 # prepending it with an exclamation mark (!).
26     # ie: CONFIG_CHECK="!MTRR"
27 vapier 1.37 # To simply warn about a missing option, prepend a '~'.
28 johnm 1.21 # ERROR_CFG <string> The error message to display when the above check
29     # fails. <CFG> should reference the appropriate option
30 johnm 1.25 # as above. ie: ERROR_MTRR="MTRR exists in the .config
31 johnm 1.21 # but shouldn't!!"
32 johnm 1.10 # KBUILD_OUTPUT <string> This is passed on commandline, or can be set from
33 johnm 1.21 # the kernel makefile. This contains the directory
34     # which is to be used as the kernel object directory.
35 johnm 1.10
36     # There are also a couple of variables which are set by this, and shouldn't be
37     # set by hand. These are as follows:
38 swegener 1.29 #
39 johnm 1.10 # Env Var Option Description
40     # KV_FULL <string> The full kernel version. ie: 2.6.9-gentoo-johnm-r1
41     # KV_MAJOR <integer> The kernel major version. ie: 2
42     # KV_MINOR <integer> The kernel minor version. ie: 6
43     # KV_PATCH <integer> The kernel patch version. ie: 9
44     # KV_EXTRA <string> The kernel EXTRAVERSION. ie: -gentoo
45     # KV_LOCAL <string> The kernel LOCALVERSION concatenation. ie: -johnm
46     # KV_DIR <string> The kernel source directory, will be null if
47 johnm 1.21 # KERNEL_DIR is invalid.
48     # KV_OUT_DIR <string> The kernel object directory. will be KV_DIR unless
49     # koutput is used. This should be used for referencing
50     # .config.
51 johnm 1.10
52 johnm 1.21 # And to ensure all the weirdness with crosscompile
53 johnm 1.23 inherit toolchain-funcs versionator
54 johnm 1.1
55 johnm 1.8 EXPORT_FUNCTIONS pkg_setup
56 johnm 1.1
57 exg 1.40 DEPEND="kernel_linux? ( virtual/linux-sources )"
58 brix 1.39 RDEPEND=""
59    
60 johnm 1.1 # Overwritable environment Var's
61     # ---------------------------------------
62 johnm 1.21 KERNEL_DIR="${KERNEL_DIR:-${ROOT}usr/src/linux}"
63 johnm 1.1
64 johnm 1.7
65 johnm 1.16 # Bug fixes
66     # fix to bug #75034
67     case ${ARCH} in
68 swegener 1.29 ppc) BUILD_FIXES="${BUILD_FIXES} TOUT=${T}/.tmp_gas_check";;
69     ppc64) BUILD_FIXES="${BUILD_FIXES} TOUT=${T}/.tmp_gas_check";;
70 johnm 1.16 esac
71    
72 vapier 1.51 # @FUNCTION: set_arch_to_kernel
73     # @DESCRIPTION:
74     # Set the env ARCH to match what the kernel expects.
75     set_arch_to_kernel() { export ARCH=$(tc-arch-kernel); }
76     # @FUNCTION: set_arch_to_portage
77     # @DESCRIPTION:
78     # Set the env ARCH to match what portage expects.
79     set_arch_to_portage() { export ARCH=$(tc-arch); }
80 johnm 1.11
81     # qeinfo "Message"
82     # -------------------
83 johnm 1.21 # qeinfo is a quiet einfo call when EBUILD_PHASE
84 johnm 1.11 # should not have visible output.
85 johnm 1.21 qout() {
86     local outputmsg type
87     type=${1}
88     shift
89     outputmsg="${@}"
90 wolf31o2 1.26 case "${EBUILD_PHASE}" in
91     depend) unset outputmsg;;
92     clean) unset outputmsg;;
93     preinst) unset outputmsg;;
94     esac
95     [ -n "${outputmsg}" ] && ${type} "${outputmsg}"
96 johnm 1.11 }
97    
98 johnm 1.21 qeinfo() { qout einfo "${@}" ; }
99     qeerror() { qout eerror "${@}" ; }
100 johnm 1.11
101 johnm 1.1 # File Functions
102     # ---------------------------------------
103    
104     # getfilevar accepts 2 vars as follows:
105     # getfilevar <VARIABLE> <CONFIGFILE>
106    
107     getfilevar() {
108 johnm 1.21 local ERROR workingdir basefname basedname myARCH="${ARCH}"
109 johnm 1.1 ERROR=0
110 johnm 1.16
111 johnm 1.1 [ -z "${1}" ] && ERROR=1
112     [ ! -f "${2}" ] && ERROR=1
113    
114     if [ "${ERROR}" = 1 ]
115     then
116 johnm 1.6 echo -e "\n"
117 johnm 1.1 eerror "getfilevar requires 2 variables, with the second a valid file."
118     eerror " getfilevar <VARIABLE> <CONFIGFILE>"
119     else
120 johnm 1.34 workingdir="${PWD}"
121     basefname="$(basename ${2})"
122     basedname="$(dirname ${2})"
123 johnm 1.6 unset ARCH
124 johnm 1.21
125 johnm 1.34 cd "${basedname}"
126 johnm 1.42 echo -e "e:\\n\\t@echo \$(${1})\\ninclude ${basefname}" | \
127 dsd 1.50 make M="${S}" ${BUILD_FIXES} -s -f - 2>/dev/null
128 johnm 1.34 cd "${workingdir}"
129 johnm 1.21
130     ARCH=${myARCH}
131 johnm 1.1 fi
132     }
133    
134 johnm 1.7 linux_chkconfig_present() {
135 johnm 1.1 local RESULT
136 johnm 1.7 RESULT="$(getfilevar CONFIG_${1} ${KV_OUT_DIR}/.config)"
137 johnm 1.1 [ "${RESULT}" = "m" -o "${RESULT}" = "y" ] && return 0 || return 1
138     }
139    
140 johnm 1.7 linux_chkconfig_module() {
141 johnm 1.1 local RESULT
142 johnm 1.7 RESULT="$(getfilevar CONFIG_${1} ${KV_OUT_DIR}/.config)"
143 johnm 1.1 [ "${RESULT}" = "m" ] && return 0 || return 1
144     }
145    
146 johnm 1.7 linux_chkconfig_builtin() {
147 johnm 1.1 local RESULT
148 johnm 1.7 RESULT="$(getfilevar CONFIG_${1} ${KV_OUT_DIR}/.config)"
149 johnm 1.1 [ "${RESULT}" = "y" ] && return 0 || return 1
150     }
151    
152 johnm 1.7 linux_chkconfig_string() {
153     getfilevar "CONFIG_${1}" "${KV_OUT_DIR}/.config"
154     }
155    
156 johnm 1.1 # Versioning Functions
157     # ---------------------------------------
158    
159     # kernel_is returns true when the version is the same as the passed version
160     #
161     # For Example where KV = 2.6.9
162     # kernel_is 2 4 returns false
163     # kernel_is 2 returns true
164     # kernel_is 2 6 returns true
165     # kernel_is 2 6 8 returns false
166     # kernel_is 2 6 9 returns true
167 johnm 1.3 #
168 johnm 1.1 # got the jist yet?
169    
170     kernel_is() {
171     # if we haven't determined the version yet, we need too.
172     get_version;
173 johnm 1.23 local operator test value x=0 y=0 z=0
174    
175     case ${1} in
176     lt) operator="-lt"; shift;;
177     gt) operator="-gt"; shift;;
178     le) operator="-le"; shift;;
179     ge) operator="-ge"; shift;;
180     eq) operator="-eq"; shift;;
181     *) operator="-eq";;
182     esac
183    
184     for x in ${@}; do
185     for((y=0; y<$((3 - ${#x})); y++)); do value="${value}0"; done
186     value="${value}${x}"
187     z=$((${z} + 1))
188    
189     case ${z} in
190     1) for((y=0; y<$((3 - ${#KV_MAJOR})); y++)); do test="${test}0"; done;
191     test="${test}${KV_MAJOR}";;
192     2) for((y=0; y<$((3 - ${#KV_MINOR})); y++)); do test="${test}0"; done;
193     test="${test}${KV_MINOR}";;
194     3) for((y=0; y<$((3 - ${#KV_PATCH})); y++)); do test="${test}0"; done;
195     test="${test}${KV_PATCH}";;
196     *) die "Error in kernel-2_kernel_is(): Too many parameters.";;
197     esac
198     done
199 johnm 1.12
200 swegener 1.29 [ ${test} ${operator} ${value} ] && return 0 || return 1
201 johnm 1.1 }
202    
203 johnm 1.30 get_localversion() {
204     local lv_list i x
205    
206     # ignore files with ~ in it.
207     for i in $(ls ${1}/localversion* 2>/dev/null); do
208     [[ -n ${i//*~*} ]] && lv_list="${lv_list} ${i}"
209     done
210    
211     for i in ${lv_list}; do
212     x="${x}$(<${i})"
213     done
214     x=${x/ /}
215     echo ${x}
216     }
217    
218 johnm 1.1 get_version() {
219 johnm 1.4 local kbuild_output
220 swegener 1.29
221 johnm 1.1 # no need to execute this twice assuming KV_FULL is populated.
222     # we can force by unsetting KV_FULL
223 johnm 1.19 [ -n "${KV_FULL}" ] && return 0
224 johnm 1.1
225     # if we dont know KV_FULL, then we need too.
226     # make sure KV_DIR isnt set since we need to work it out via KERNEL_DIR
227     unset KV_DIR
228    
229     # KV_DIR will contain the full path to the sources directory we should use
230 johnm 1.11 qeinfo "Determining the location of the kernel source code"
231 johnm 1.1 [ -h "${KERNEL_DIR}" ] && KV_DIR="$(readlink -f ${KERNEL_DIR})"
232     [ -d "${KERNEL_DIR}" ] && KV_DIR="${KERNEL_DIR}"
233 swegener 1.29
234 johnm 1.1 if [ -z "${KV_DIR}" ]
235     then
236 johnm 1.11 qeerror "Unable to find kernel sources at ${KERNEL_DIR}"
237     qeinfo "This package requires Linux sources."
238 johnm 1.7 if [ "${KERNEL_DIR}" == "/usr/src/linux" ] ; then
239 johnm 1.11 qeinfo "Please make sure that ${KERNEL_DIR} points at your running kernel, "
240     qeinfo "(or the kernel you wish to build against)."
241     qeinfo "Alternatively, set the KERNEL_DIR environment variable to the kernel sources location"
242 johnm 1.7 else
243 johnm 1.11 qeinfo "Please ensure that the KERNEL_DIR environment variable points at full Linux sources of the kernel you wish to compile against."
244 johnm 1.7 fi
245 johnm 1.19 return 1
246 johnm 1.7 fi
247    
248 johnm 1.11 qeinfo "Found kernel source directory:"
249     qeinfo " ${KV_DIR}"
250 johnm 1.7
251     if [ ! -s "${KV_DIR}/Makefile" ]
252     then
253 johnm 1.11 qeerror "Could not find a Makefile in the kernel source directory."
254     qeerror "Please ensure that ${KERNEL_DIR} points to a complete set of Linux sources"
255 johnm 1.19 return 1
256 johnm 1.7 fi
257 swegener 1.29
258 johnm 1.4 # OK so now we know our sources directory, but they might be using
259     # KBUILD_OUTPUT, and we need this for .config and localversions-*
260     # so we better find it eh?
261     # do we pass KBUILD_OUTPUT on the CLI?
262     OUTPUT_DIR="${OUTPUT_DIR:-${KBUILD_OUTPUT}}"
263 swegener 1.29
264 johnm 1.6 # And if we didn't pass it, we can take a nosey in the Makefile
265 johnm 1.4 kbuild_output="$(getfilevar KBUILD_OUTPUT ${KV_DIR}/Makefile)"
266     OUTPUT_DIR="${OUTPUT_DIR:-${kbuild_output}}"
267 swegener 1.29
268 johnm 1.1 # And contrary to existing functions I feel we shouldn't trust the
269     # directory name to find version information as this seems insane.
270     # so we parse ${KV_DIR}/Makefile
271     KV_MAJOR="$(getfilevar VERSION ${KV_DIR}/Makefile)"
272     KV_MINOR="$(getfilevar PATCHLEVEL ${KV_DIR}/Makefile)"
273     KV_PATCH="$(getfilevar SUBLEVEL ${KV_DIR}/Makefile)"
274     KV_EXTRA="$(getfilevar EXTRAVERSION ${KV_DIR}/Makefile)"
275 swegener 1.29
276 johnm 1.7 if [ -z "${KV_MAJOR}" -o -z "${KV_MINOR}" -o -z "${KV_PATCH}" ]
277     then
278 johnm 1.11 qeerror "Could not detect kernel version."
279 johnm 1.19 qeerror "Please ensure that ${KERNEL_DIR} points to a complete set of Linux sources."
280     return 1
281 johnm 1.7 fi
282 swegener 1.29
283 johnm 1.1 # and in newer versions we can also pull LOCALVERSION if it is set.
284 johnm 1.4 # but before we do this, we need to find if we use a different object directory.
285     # This *WILL* break if the user is using localversions, but we assume it was
286     # caught before this if they are.
287 genstef 1.49 [ "${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${KV_EXTRA}" == "$(uname -r)" ] && \
288     OUTPUT_DIR="${OUTPUT_DIR:-/lib/modules/${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${KV_EXTRA}/build}"
289 johnm 1.4
290     [ -h "${OUTPUT_DIR}" ] && KV_OUT_DIR="$(readlink -f ${OUTPUT_DIR})"
291     [ -d "${OUTPUT_DIR}" ] && KV_OUT_DIR="${OUTPUT_DIR}"
292     if [ -n "${KV_OUT_DIR}" ];
293     then
294 johnm 1.11 qeinfo "Found kernel object directory:"
295     qeinfo " ${KV_OUT_DIR}"
296 swegener 1.29
297 johnm 1.30 KV_LOCAL="$(get_localversion ${KV_OUT_DIR})"
298 johnm 1.4 fi
299 johnm 1.41 # and if we STILL have not got it, then we better just set it to KV_DIR
300 johnm 1.4 KV_OUT_DIR="${KV_OUT_DIR:-${KV_DIR}}"
301 johnm 1.21
302 johnm 1.41 if [ ! -s "${KV_OUT_DIR}/.config" ]
303     then
304     qeerror "Could not find a usable .config in the kernel source directory."
305     qeerror "Please ensure that ${KERNEL_DIR} points to a configured set of Linux sources."
306     qeerror "If you are using KBUILD_OUTPUT, please set the environment var so that"
307     qeerror "it points to the necessary object directory so that it might find .config."
308     return 1
309     fi
310    
311 johnm 1.33 KV_LOCAL="${KV_LOCAL}$(get_localversion ${KV_DIR})"
312 johnm 1.7 KV_LOCAL="${KV_LOCAL}$(linux_chkconfig_string LOCALVERSION)"
313     KV_LOCAL="${KV_LOCAL//\"/}"
314 johnm 1.21
315 marineam 1.46 # For things like git that can append extra stuff:
316     [ -e ${KV_DIR}/scripts/setlocalversion ] &&
317 marineam 1.47 linux_chkconfig_builtin LOCALVERSION_AUTO &&
318 marineam 1.46 KV_LOCAL="${KV_LOCAL}$(sh ${KV_DIR}/scripts/setlocalversion ${KV_DIR})"
319    
320 johnm 1.1 # And we should set KV_FULL to the full expanded version
321     KV_FULL="${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${KV_EXTRA}${KV_LOCAL}"
322 johnm 1.21
323 johnm 1.11 qeinfo "Found sources for kernel version:"
324     qeinfo " ${KV_FULL}"
325 johnm 1.21
326 johnm 1.19 return 0
327 johnm 1.1 }
328    
329 johnm 1.23 get_running_version() {
330     KV_FULL=$(uname -r)
331 johnm 1.1
332 johnm 1.23 if [[ -f ${ROOT}/lib/modules/${KV_FULL}/source/Makefile ]]; then
333     KERNEL_DIR=$(readlink -f ${ROOT}/lib/modules/${KV_FULL}/source)
334     unset KV_FULL
335     get_version
336     return $?
337     elif [[ -f ${ROOT}/lib/modules/${KV_FULL}/build/Makefile ]]; then
338     KERNEL_DIR=$(readlink -f ${ROOT}/lib/modules/${KV_FULL}/build)
339     unset KV_FULL
340     get_version
341     return $?
342     else
343     KV_MAJOR=$(get_version_component_range 1 ${KV_FULL})
344     KV_MINOR=$(get_version_component_range 2 ${KV_FULL})
345     KV_PATCH=$(get_version_component_range 3- ${KV_FULL})
346     KV_PATCH=${KV_PATCH//-*}
347     [[ -n ${KV_FULL#*-} ]] && [[ -n ${KV_FULL//${KV_FULL#*-}} ]] \
348     && KV_EXTRA="-${KV_FULL#*-}"
349     fi
350     return 0
351     }
352 johnm 1.1
353    
354     # ebuild check functions
355     # ---------------------------------------
356    
357     check_kernel_built() {
358     # if we haven't determined the version yet, we need too.
359     get_version;
360 swegener 1.29
361 johnm 1.16 if [ ! -f "${KV_OUT_DIR}/include/linux/version.h" ]
362 johnm 1.1 then
363 johnm 1.16 eerror "These sources have not yet been prepared."
364     eerror "We cannot build against an unprepared tree."
365 johnm 1.1 eerror "To resolve this, please type the following:"
366     eerror
367     eerror "# cd ${KV_DIR}"
368     eerror "# make oldconfig"
369 johnm 1.16 eerror "# make modules_prepare"
370 johnm 1.1 eerror
371     eerror "Then please try merging this module again."
372     die "Kernel sources need compiling first"
373     fi
374     }
375    
376     check_modules_supported() {
377     # if we haven't determined the version yet, we need too.
378     get_version;
379 swegener 1.29
380 johnm 1.7 if ! linux_chkconfig_builtin "MODULES"
381 johnm 1.1 then
382     eerror "These sources do not support loading external modules."
383     eerror "to be able to use this module please enable \"Loadable modules support\""
384     eerror "in your kernel, recompile and then try merging this module again."
385 johnm 1.7 die "No support for external modules in ${KV_FULL} config"
386 johnm 1.3 fi
387     }
388    
389     check_extra_config() {
390 mrness 1.45 local config negate die error reworkmodulenames
391     local soft_errors_count=0 hard_errors_count=0
392 johnm 1.3
393     # if we haven't determined the version yet, we need too.
394     get_version;
395    
396 mrness 1.45 einfo "Checking for suitable kernel configuration options..."
397 johnm 1.3 for config in ${CONFIG_CHECK}
398     do
399 johnm 1.31 # if we specify any fatal, ensure we honor them
400     die=1
401     error=0
402     negate=0
403     reworkmodulenames=0
404    
405 mrness 1.45 if [[ -z ${config/\~*} ]]; then
406     die=0
407 johnm 1.31 config=${config:1}
408 mrness 1.45 elif [[ -z ${config/\@*} ]]; then
409     die=0
410 johnm 1.31 reworkmodulenames=1
411     config=${config:1}
412     fi
413 mrness 1.45 if [[ -z ${config//\!*} ]]; then
414     negate=1
415 johnm 1.44 config=${config:1}
416     fi
417 johnm 1.17
418 johnm 1.31 if [[ ${negate} == 1 ]]; then
419     linux_chkconfig_present ${config} && error=2
420     elif [[ ${reworkmodulenames} == 1 ]]; then
421 mrness 1.45 local temp_config="${config//*:}" i n
422 johnm 1.17 config="${config//:*}"
423 johnm 1.31 if linux_chkconfig_present ${config}; then
424     for i in ${MODULE_NAMES}; do
425 johnm 1.17 n="${i//${temp_config}}"
426 dsd 1.38 [[ -z ${n//\(*} ]] && \
427 johnm 1.31 MODULE_IGNORE="${MODULE_IGNORE} ${temp_config}"
428 johnm 1.17 done
429 johnm 1.31 error=2
430 johnm 1.17 fi
431 johnm 1.3 else
432 johnm 1.31 linux_chkconfig_present ${config} || error=1
433     fi
434    
435 mrness 1.45 if [[ ${error} > 0 ]]; then
436     local report_func="eerror" local_error
437     local_error="ERROR_${config}"
438     local_error="${!local_error}"
439    
440     if [[ -z "${local_error}" ]]; then
441     # using old, deprecated format.
442     local_error="${config}_ERROR"
443     local_error="${!local_error}"
444     fi
445     if [[ ${die} == 0 && -z "${local_error}" ]]; then
446     #soft errors can be warnings
447     local_error="WARNING_${config}"
448 johnm 1.7 local_error="${!local_error}"
449 mrness 1.45 if [[ -n "${local_error}" ]] ; then
450     report_func="ewarn"
451 johnm 1.44 fi
452 mrness 1.45 fi
453 johnm 1.44
454 mrness 1.45 if [[ -z "${local_error}" ]]; then
455     [[ ${error} == 1 ]] \
456     && local_error="is not set when it should be." \
457     || local_error="should not be set. But it is."
458     local_error="CONFIG_${config}:\t ${local_error}"
459     fi
460     if [[ ${die} == 0 ]]; then
461     ${report_func} " ${local_error}"
462     soft_errors_count=$[soft_errors_count + 1]
463     else
464     ${report_func} " ${local_error}"
465     hard_errors_count=$[hard_errors_count + 1]
466 johnm 1.3 fi
467     fi
468     done
469    
470 mrness 1.45 if [[ ${hard_errors_count} > 0 ]]; then
471 johnm 1.3 eerror "Please check to make sure these options are set correctly."
472 johnm 1.31 eerror "Failure to do so may cause unexpected problems."
473 mrness 1.45 eerror "Once you have satisfied these options, please try merging"
474     eerror "this package again."
475     die "Incorrect kernel configuration options"
476     elif [[ ${soft_errors_count} > 0 ]]; then
477     ewarn "Please check to make sure these options are set correctly."
478     ewarn "Failure to do so may cause unexpected problems."
479     else
480     eend 0
481 johnm 1.1 fi
482     }
483    
484     check_zlibinflate() {
485     # if we haven't determined the version yet, we need too.
486     get_version;
487 swegener 1.29
488 johnm 1.1 # although I restructured this code - I really really really dont support it!
489    
490     # bug #27882 - zlib routines are only linked into the kernel
491     # if something compiled into the kernel calls them
492     #
493     # plus, for the cloop module, it appears that there's no way
494     # to get cloop.o to include a static zlib if CONFIG_MODVERSIONS
495     # is on
496 swegener 1.29
497     local INFLATE
498     local DEFLATE
499 johnm 1.1
500     einfo "Determining the usability of ZLIB_INFLATE support in your kernel"
501 swegener 1.29
502 johnm 1.1 ebegin "checking ZLIB_INFLATE"
503     getfilevar_isbuiltin CONFIG_ZLIB_INFLATE ${KV_DIR}/.config
504     eend $?
505     [ "$?" != 0 ] && die
506 swegener 1.29
507 johnm 1.1 ebegin "checking ZLIB_DEFLATE"
508     getfilevar_isbuiltin CONFIG_ZLIB_DEFLATE ${KV_DIR}/.config
509     eend $?
510     [ "$?" != 0 ] && die
511 swegener 1.29
512 johnm 1.1 local LINENO_START
513     local LINENO_END
514     local SYMBOLS
515     local x
516 swegener 1.29
517 johnm 1.1 LINENO_END="$(grep -n 'CONFIG_ZLIB_INFLATE y' ${KV_DIR}/lib/Config.in | cut -d : -f 1)"
518     LINENO_START="$(head -n $LINENO_END ${KV_DIR}/lib/Config.in | grep -n 'if \[' | tail -n 1 | cut -d : -f 1)"
519     (( LINENO_AMOUNT = $LINENO_END - $LINENO_START ))
520     (( LINENO_END = $LINENO_END - 1 ))
521 johnm 1.4 SYMBOLS="$(head -n $LINENO_END ${KV_DIR}/lib/Config.in | tail -n $LINENO_AMOUNT | sed -e 's/^.*\(CONFIG_[^\" ]*\).*/\1/g;')"
522 johnm 1.1
523     # okay, now we have a list of symbols
524     # we need to check each one in turn, to see whether it is set or not
525     for x in $SYMBOLS ; do
526     if [ "${!x}" = "y" ]; then
527     # we have a winner!
528     einfo "${x} ensures zlib is linked into your kernel - excellent"
529     return 0
530     fi
531     done
532 swegener 1.29
533 johnm 1.1 eerror
534     eerror "This kernel module requires ZLIB library support."
535     eerror "You have enabled zlib support in your kernel, but haven't enabled"
536     eerror "enabled any option that will ensure that zlib is linked into your"
537     eerror "kernel."
538     eerror
539     eerror "Please ensure that you enable at least one of these options:"
540     eerror
541    
542     for x in $SYMBOLS ; do
543     eerror " * $x"
544     done
545    
546     eerror
547     eerror "Please remember to recompile and install your kernel, and reboot"
548     eerror "into your new kernel before attempting to load this kernel module."
549    
550     die "Kernel doesn't include zlib support"
551     }
552 johnm 1.8
553     ################################
554     # Default pkg_setup
555     # Also used when inheriting linux-mod to force a get_version call
556    
557     linux-info_pkg_setup() {
558 johnm 1.19 get_version || die "Unable to calculate Linux Kernel version"
559 phreak 1.48
560     if kernel_is 2 4; then
561     if [ "$( gcc-major-version )" -eq "4" ] ; then
562     echo
563     ewarn "Be warned !! >=sys-devel/gcc-4.0.0 isn't supported with"
564     ewarn "linux-2.4 (or modules building against a linux-2.4 kernel)!"
565     echo
566     ewarn "Either switch to another gcc-version (via gcc-config) or use a"
567     ewarn "newer kernel that supports gcc-4."
568     echo
569     ewarn "Also be aware that bugreports about gcc-4 not working"
570     ewarn "with linux-2.4 based ebuilds will be closed as INVALID!"
571     echo
572     epause 10
573     fi
574     fi
575    
576 johnm 1.10 [ -n "${CONFIG_CHECK}" ] && check_extra_config;
577 johnm 1.8 }

  ViewVC Help
Powered by ViewVC 1.1.20