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

Diff of /eclass/linux-info.eclass

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.6 Revision 1.7
1# Copyright 1999-2004 Gentoo Foundation 1# Copyright 1999-2004 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/linux-info.eclass,v 1.6 2004/12/01 23:26:43 johnm Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/linux-info.eclass,v 1.7 2004/12/05 12:46:58 johnm Exp $
4# 4#
5# This eclass provides functions for querying the installed kernel 5# This eclass provides functions for querying the installed kernel
6# source version, selected kernel options etc. 6# source version, selected kernel options etc.
7# 7#
8 8
11 11
12# Overwritable environment Var's 12# Overwritable environment Var's
13# --------------------------------------- 13# ---------------------------------------
14KERNEL_DIR="${KERNEL_DIR:-/usr/src/linux}" 14KERNEL_DIR="${KERNEL_DIR:-/usr/src/linux}"
15 15
16
17# Pulled from eutils as it might be more useful only being here since
18# very few ebuilds which dont use this eclass will ever ever use these functions
19set_arch_to_kernel() {
20 export PORTAGE_ARCH="${ARCH}"
21 case ${ARCH} in
22 x86) export ARCH="i386";;
23 amd64) export ARCH="x86_64";;
24 hppa) export ARCH="parisc";;
25 mips) export ARCH="mips";;
26 *) export ARCH="${ARCH}";;
27 esac
28}
29
30# set's ARCH back to what portage expects
31set_arch_to_portage() {
32 export ARCH="${PORTAGE_ARCH}"
33}
34
16# File Functions 35# File Functions
17# --------------------------------------- 36# ---------------------------------------
18 37
19# getfilevar accepts 2 vars as follows: 38# getfilevar accepts 2 vars as follows:
20# getfilevar <VARIABLE> <CONFIGFILE> 39# getfilevar <VARIABLE> <CONFIGFILE>
21 40
22getfilevar() { 41getfilevar() {
23local ERROR workingdir basefname basedname arch 42local ERROR workingdir basefname basedname xarch
24 ERROR=0 43 ERROR=0
25 44
26 [ -z "${1}" ] && ERROR=1 45 [ -z "${1}" ] && ERROR=1
27 [ ! -f "${2}" ] && ERROR=1 46 [ ! -f "${2}" ] && ERROR=1
28 47
34 eerror " getfilevar <VARIABLE> <CONFIGFILE>" 53 eerror " getfilevar <VARIABLE> <CONFIGFILE>"
35 else 54 else
36 workingdir=${PWD} 55 workingdir=${PWD}
37 basefname=$(basename ${2}) 56 basefname=$(basename ${2})
38 basedname=$(dirname ${2}) 57 basedname=$(dirname ${2})
39 arch=${ARCH} 58 xarch=${ARCH}
40 unset ARCH 59 unset ARCH
41 60
42 cd ${basedname} 61 cd ${basedname}
43 echo -e "include ${basefname}\ne:\n\t@echo \$(${1})" | make -f - e 62 echo -e "include ${basefname}\ne:\n\t@echo \$(${1})" | \
63 make -f - e 2>/dev/null
44 cd ${workingdir} 64 cd ${workingdir}
45 65
46 ARCH=${arch} 66 ARCH=${xarch}
47 fi 67 fi
48} 68}
49 69
50getfilevar_isset() { 70linux_chkconfig_present() {
51local RESULT 71local RESULT
52 RESULT="$(getfilevar ${1} ${2})" 72 RESULT="$(getfilevar CONFIG_${1} ${KV_OUT_DIR}/.config)"
53 [ "${RESULT}" = "m" -o "${RESULT}" = "y" ] && return 0 || return 1 73 [ "${RESULT}" = "m" -o "${RESULT}" = "y" ] && return 0 || return 1
54} 74}
55 75
56getfilevar_ismodule() { 76linux_chkconfig_module() {
57local RESULT 77local RESULT
58 RESULT="$(getfilevar ${1} ${2})" 78 RESULT="$(getfilevar CONFIG_${1} ${KV_OUT_DIR}/.config)"
59 [ "${RESULT}" = "m" ] && return 0 || return 1 79 [ "${RESULT}" = "m" ] && return 0 || return 1
60} 80}
61 81
62getfilevar_isbuiltin() { 82linux_chkconfig_builtin() {
63local RESULT 83local RESULT
64 RESULT="$(getfilevar ${1} ${2})" 84 RESULT="$(getfilevar CONFIG_${1} ${KV_OUT_DIR}/.config)"
65 [ "${RESULT}" = "y" ] && return 0 || return 1 85 [ "${RESULT}" = "y" ] && return 0 || return 1
86}
87
88linux_chkconfig_string() {
89 getfilevar "CONFIG_${1}" "${KV_OUT_DIR}/.config"
66} 90}
67 91
68# Versioning Functions 92# Versioning Functions
69# --------------------------------------- 93# ---------------------------------------
70 94
122 [ -d "${KERNEL_DIR}" ] && KV_DIR="${KERNEL_DIR}" 146 [ -d "${KERNEL_DIR}" ] && KV_DIR="${KERNEL_DIR}"
123 147
124 if [ -z "${KV_DIR}" ] 148 if [ -z "${KV_DIR}" ]
125 then 149 then
126 eerror "Unable to find kernel sources at ${KERNEL_DIR}" 150 eerror "Unable to find kernel sources at ${KERNEL_DIR}"
127 die 151 einfo "This package requires Linux sources."
152 if [ "${KERNEL_DIR}" == "/usr/src/linux" ] ; then
153 einfo "Please make sure that ${KERNEL_DIR} points at your running kernel, "
154 einfo "(or the kernel you wish to build against)."
155 einfo "Alternatively, set the KERNEL_DIR environment variable to the kernel sources location"
156 else
157 einfo "Please ensure that the KERNEL_DIR environment variable points at full Linux sources of the kernel you wish to compile against."
158 fi
159 die "Cannot locate Linux sources at ${KERNEL_DIR}"
160 fi
161
162 einfo "Found kernel source directory:"
163 einfo " ${KV_DIR}"
164
165 if [ ! -s "${KV_DIR}/Makefile" ]
166 then
167 eerror "Could not find a Makefile in the kernel source directory."
168 eerror "Please ensure that ${KERNEL_DIR} points to a complete set of Linux sources"
169 die "Makefile not found in ${KV_DIR}"
170 fi
171
172 if [ ! -s "${KV_DIR}/.config" ]
173 then
174 eerror "Could not find a usable .config in the kernel source directory."
175 eerror "Please ensure that ${KERNEL_DIR} points to a configured set of Linux sources"
176 die ".config not found in ${KV_DIR}"
128 fi 177 fi
129 178
130 # OK so now we know our sources directory, but they might be using 179 # OK so now we know our sources directory, but they might be using
131 # KBUILD_OUTPUT, and we need this for .config and localversions-* 180 # KBUILD_OUTPUT, and we need this for .config and localversions-*
132 # so we better find it eh? 181 # so we better find it eh?
143 KV_MAJOR="$(getfilevar VERSION ${KV_DIR}/Makefile)" 192 KV_MAJOR="$(getfilevar VERSION ${KV_DIR}/Makefile)"
144 KV_MINOR="$(getfilevar PATCHLEVEL ${KV_DIR}/Makefile)" 193 KV_MINOR="$(getfilevar PATCHLEVEL ${KV_DIR}/Makefile)"
145 KV_PATCH="$(getfilevar SUBLEVEL ${KV_DIR}/Makefile)" 194 KV_PATCH="$(getfilevar SUBLEVEL ${KV_DIR}/Makefile)"
146 KV_EXTRA="$(getfilevar EXTRAVERSION ${KV_DIR}/Makefile)" 195 KV_EXTRA="$(getfilevar EXTRAVERSION ${KV_DIR}/Makefile)"
147 196
197 if [ -z "${KV_MAJOR}" -o -z "${KV_MINOR}" -o -z "${KV_PATCH}" ]
198 then
199 eerror "Could not detect kernel version."
200 eerror "Please ensure that ${KERNEL_DIR} points to a complete set of Linux sources"
201 die "Could not parse version info from ${KV_DIR}/Makefile"
202 fi
203
148 # and in newer versions we can also pull LOCALVERSION if it is set. 204 # and in newer versions we can also pull LOCALVERSION if it is set.
149 # but before we do this, we need to find if we use a different object directory. 205 # but before we do this, we need to find if we use a different object directory.
150 # This *WILL* break if the user is using localversions, but we assume it was 206 # This *WILL* break if the user is using localversions, but we assume it was
151 # caught before this if they are. 207 # caught before this if they are.
152 [ "${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}.${KV_EXTRA}" == "$(uname -r)" ] && \ 208 [ "${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}.${KV_EXTRA}" == "$(uname -r)" ] && \
153 OUTPUT_DIR="/lib/modules/${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}.${KV_EXTRA}/build" 209 OUTPUT_DIR="${OUTPUT_DIR:-/lib/modules/${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}.${KV_EXTRA}/build}"
154 210
155 [ -h "${OUTPUT_DIR}" ] && KV_OUT_DIR="$(readlink -f ${OUTPUT_DIR})" 211 [ -h "${OUTPUT_DIR}" ] && KV_OUT_DIR="$(readlink -f ${OUTPUT_DIR})"
156 [ -d "${OUTPUT_DIR}" ] && KV_OUT_DIR="${OUTPUT_DIR}" 212 [ -d "${OUTPUT_DIR}" ] && KV_OUT_DIR="${OUTPUT_DIR}"
157 if [ -n "${KV_OUT_DIR}" ]; 213 if [ -n "${KV_OUT_DIR}" ];
158 then 214 then
163 fi 219 fi
164 # and if we STILL haven't got it, then we better just set it to KV_DIR 220 # and if we STILL haven't got it, then we better just set it to KV_DIR
165 KV_OUT_DIR="${KV_OUT_DIR:-${KV_DIR}}" 221 KV_OUT_DIR="${KV_OUT_DIR:-${KV_DIR}}"
166 222
167 KV_LOCAL="${KV_LOCAL}$(cat ${KV_DIR}/localversion* 2>/dev/null)" 223 KV_LOCAL="${KV_LOCAL}$(cat ${KV_DIR}/localversion* 2>/dev/null)"
168 KV_LOCAL="${KV_LOCAL}$(getfilevar CONFIG_LOCALVERSION ${KV_OUT_DIR}/.config | sed 's:"::g')" 224 KV_LOCAL="${KV_LOCAL}$(linux_chkconfig_string LOCALVERSION)"
225 KV_LOCAL="${KV_LOCAL//\"/}"
169 226
170 # And we should set KV_FULL to the full expanded version 227 # And we should set KV_FULL to the full expanded version
171 KV_FULL="${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${KV_EXTRA}${KV_LOCAL}" 228 KV_FULL="${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${KV_EXTRA}${KV_LOCAL}"
172 229
173 if [ -z "${KV_FULL}" ]
174 then
175 eerror "We are unable to find a usable kernel source tree in ${KV_DIR}"
176 eerror "Please check a kernel source exists in this directory."
177 die
178 else
179 einfo "Found kernel source directory:"
180 einfo " ${KV_DIR}"
181 einfo "with sources for kernel version:" 230 einfo "Found sources for kernel version:"
182 einfo " ${KV_FULL}" 231 einfo " ${KV_FULL}"
183 fi
184} 232}
185 233
186 234
187 235
188 236
210 258
211check_modules_supported() { 259check_modules_supported() {
212 # if we haven't determined the version yet, we need too. 260 # if we haven't determined the version yet, we need too.
213 get_version; 261 get_version;
214 262
215 getfilevar_isset CONFIG_MODULES ${KV_OUT_DIR}/.config 263 if ! linux_chkconfig_builtin "MODULES"
216 if [ "$?" != 0 ]
217 then 264 then
218 eerror "These sources do not support loading external modules." 265 eerror "These sources do not support loading external modules."
219 eerror "to be able to use this module please enable \"Loadable modules support\"" 266 eerror "to be able to use this module please enable \"Loadable modules support\""
220 eerror "in your kernel, recompile and then try merging this module again." 267 eerror "in your kernel, recompile and then try merging this module again."
221 die No support for external modules in ${KV_FULL} config 268 die "No support for external modules in ${KV_FULL} config"
222 fi 269 fi
223} 270}
224 271
225check_extra_config() { 272check_extra_config() {
226local config negate error 273local config negate error local_error
227 274
228 # if we haven't determined the version yet, we need too. 275 # if we haven't determined the version yet, we need too.
229 get_version; 276 get_version;
230 277
231 einfo "Checking for suitable kernel configuration options" 278 einfo "Checking for suitable kernel configuration options"
233 do 280 do
234 negate="${config:0:1}" 281 negate="${config:0:1}"
235 if [ "${negate}" == "!" ]; 282 if [ "${negate}" == "!" ];
236 then 283 then
237 config="${config:1}" 284 config="${config:1}"
238 if getfilevar_isset ${config} ${KV_OUT_DIR}/.config ; 285 if linux_chkconfig_present ${config}
239 then 286 then
287 local_error="${config}_ERROR"
288 local_error="${!local_error}"
289 [ -n "${local_error}" ] && eerror " ${local_error}" || \
240 eerror " ${config}:\tshould not be set in the kernel configuration, but it is." 290 eerror " CONFIG_${config}:\tshould not be set in the kernel configuration, but it is."
241 error=1 291 error=1
242 fi 292 fi
243 else 293 else
244 if ! getfilevar_isset ${config} ${KV_OUT_DIR}/.config ; 294 if ! linux_chkconfig_present ${config}
245 then 295 then
296 local_error="${config}_ERROR"
297 local_error="${!local_error}"
298 [ -n "${local_error}" ] && eerror " ${local_error}" || \
246 eerror " ${config}:\tshould be set in the kernel configuration, but isn't" 299 eerror " CONFIG_${config}:\tshould be set in the kernel configuration, but isn't"
247 error=1 300 error=1
248 fi 301 fi
249 fi 302 fi
250 done 303 done
251 304
252 if [ -n "${error}" ] ; 305 if [ -n "${error}" ] ;
253 then 306 then
254 eerror "Please check to make sure these options are set correctly." 307 eerror "Please check to make sure these options are set correctly."
255 eerror "Once you have satisfied these options, please try merging" 308 eerror "Once you have satisfied these options, please try merging"
256 eerror "this package again." 309 eerror "this package again."
257 die Incorrect kernel configuration options 310 die "Incorrect kernel configuration options"
258 fi 311 fi
259} 312}
260 313
261check_zlibinflate() { 314check_zlibinflate() {
262 # if we haven't determined the version yet, we need too. 315 # if we haven't determined the version yet, we need too.

Legend:
Removed from v.1.6  
changed lines
  Added in v.1.7

  ViewVC Help
Powered by ViewVC 1.1.20