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

Contents of /eclass/linux-info.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.48 - (hide annotations) (download)
Thu Sep 7 11:37:41 2006 UTC (8 years, 3 months ago) by phreak
Branch: MAIN
Changes since 1.47: +18 -1 lines
Adding a warning for users using gcc-4 on linux-2.4 based kernel/module versions.

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

  ViewVC Help
Powered by ViewVC 1.1.20