--- linux-mod.eclass.orig 2008-11-01 19:07:24.000000000 +0300 +++ linux-mod.eclass 2008-11-01 21:19:08.000000000 +0300 @@ -610,51 +610,129 @@ linux-mod_src_compile() { debug-print-function ${FUNCNAME} $* - local modulename libdir srcdir objdir i n myABI="${ABI}" - set_arch_to_kernel - ABI="${KERNEL_ABI}" - - BUILD_TARGETS=${BUILD_TARGETS:-clean module} - strip_modulenames; - cd "${S}" - for i in ${MODULE_NAMES} - do - unset libdir srcdir objdir - for n in $(find_module_params ${i}) + if has modules-rebuild ${FEATURES}; + then + find /lib/modules/ -iname build | xargs -n 1 dirname | while read k; do - eval ${n/:*}=${n/*:/} - done - libdir=${libdir:-misc} - srcdir=${srcdir:-${S}} - objdir=${objdir:-${srcdir}} - - if [ ! -f "${srcdir}/.built" ]; - then - cd ${srcdir} - einfo "Preparing ${modulename} module" - if [[ -n ${ECONF_PARAMS} ]] - then - econf ${ECONF_PARAMS} || \ - die "Unable to run econf ${ECONF_PARAMS}" + if [ ! -e "$k/build/Makefile" ]; then + ewarn "Skipping ${k:13} because of missing it\`s sourcedir(Makefile)" + continue fi + local modulename libdir srcdir objdir i n myABI="${ABI}" + set_arch_to_kernel + ABI="${KERNEL_ABI}" + + BUILD_TARGETS=${BUILD_TARGETS:-module} + strip_modulenames; + for i in ${MODULE_NAMES} + do + cd "${S}" + unset libdir srcdir objdir + for n in $(find_module_params ${i}) + do + eval ${n/:*}=${n/*:/} + done + libdir=${libdir:-misc} + srcdir=${srcdir:-${S}} + objdir=${objdir:-${srcdir}} + + cd ${srcdir} + einfo "Preparing ${modulename} module for ${k:13}" + if [[ -n ${ECONF_PARAMS} ]]; + then + if ! econf ${ECONF_PARAMS}; + then + eerror "Unable to run econf ${ECONF_PARAMS}" + break + fi + fi # This looks messy, but it is needed to handle multiple variables # being passed in the BUILD_* stuff where the variables also have # spaces that must be preserved. If don't do this, then the stuff # inside the variables gets used as targets for Make, which then # fails. - eval "emake HOSTCC=\"$(tc-getBUILD_CC)\" \ + einfo `pwd` + if ! eval "emake HOSTCC=\"$(tc-getBUILD_CC)\" \ + CROSS_COMPILE=${CHOST}- \ + LDFLAGS=\"$(get_abi_LDFLAGS)\" \ + ${BUILD_FIXES} \ + ${BUILD_PARAMS} \ + ${BUILD_TARGETS} SYSOUT=\"${k}/build\" + SYSSRC=\"${k}/build\""; + then + eerror "Unable to emake HOSTCC="$(tc-getBUILD_CC)" + CROSS_COMPILE=${CHOST}- LDFLAGS="$(get_abi_LDFLAGS)" + ${BUILD_FIXES} ${BUILD_PARAMS} ${BUILD_TARGETS}" + break + fi + einfo "Installing ${modulename} module for ${k:13}" + cd ${objdir} + insinto ${k}/${libdir} + if doins ${modulename}.${KV_OBJ} + then + touch ${T}/.built_one + else + eerror "doins ${modulename}.${KV_OBJ} failed" + break + fi + done + done + #Check if we built at least one module: + if [ ! -f ${T}/.built_one ]; + then + die "Fail to build any kernel module! :-(" + fi + mv ${D}/lib/modules ${T}/kernel-modules + else + local modulename libdir srcdir objdir i n myABI="${ABI}" + set_arch_to_kernel + ABI="${KERNEL_ABI}" + + BUILD_TARGETS=${BUILD_TARGETS:-clean module} + strip_modulenames; + cd "${S}" + for i in ${MODULE_NAMES} + do + unset libdir srcdir objdir + for n in $(find_module_params ${i}) + do + eval ${n/:*}=${n/*:/} + done + libdir=${libdir:-misc} + srcdir=${srcdir:-${S}} + objdir=${objdir:-${srcdir}} + + if [ ! -f "${srcdir}/.built" ]; + then + cd ${srcdir} + einfo "Preparing ${modulename} module" + if [[ -n ${ECONF_PARAMS} ]] + then + econf ${ECONF_PARAMS} || \ + die "Unable to run econf ${ECONF_PARAMS}" + fi + + # This looks messy, but it is needed to handle multiple variables + # being passed in the BUILD_* stuff where the variables also have + # spaces that must be preserved. If don't do this, then the stuff + # inside the variables gets used as targets for Make, which then + # fails. + eval "emake HOSTCC=\"$(tc-getBUILD_CC)\" \ CROSS_COMPILE=${CHOST}- \ LDFLAGS=\"$(get_abi_LDFLAGS)\" \ ${BUILD_FIXES} \ ${BUILD_PARAMS} \ ${BUILD_TARGETS} " \ - || die "Unable to emake HOSTCC="$(tc-getBUILD_CC)" CROSS_COMPILE=${CHOST}- LDFLAGS="$(get_abi_LDFLAGS)" ${BUILD_FIXES} ${BUILD_PARAMS} ${BUILD_TARGETS}" - cd ${OLDPWD} - touch ${srcdir}/.built - fi - done - + || die "Unable to emake HOSTCC="$(tc-getBUILD_CC)" +CROSS_COMPILE=${CHOST}- LDFLAGS="$(get_abi_LDFLAGS)" ${BUILD_FIXES} +${BUILD_PARAMS} ${BUILD_TARGETS}" + cd ${OLDPWD} + touch ${srcdir}/.built + fi + done + fi + cd ${OLDPWD} set_arch_to_portage ABI="${myABI}" } @@ -676,25 +754,31 @@ local modulename libdir srcdir objdir i n strip_modulenames; - for i in ${MODULE_NAMES} - do - unset libdir srcdir objdir - for n in $(find_module_params ${i}) + if has modules-rebuild ${FEATURES}; + then + mkdir -p ${D}/lib + cp -a ${T}/kernel-modules ${D}/lib/modules || die "Kernel module installation failed" + else + for i in ${MODULE_NAMES} do - eval ${n/:*}=${n/*:/} - done - libdir=${libdir:-misc} - srcdir=${srcdir:-${S}} - objdir=${objdir:-${srcdir}} - - einfo "Installing ${modulename} module" - cd ${objdir} || die "${objdir} does not exist" - insinto /lib/modules/${KV_FULL}/${libdir} - doins ${modulename}.${KV_OBJ} || die "doins ${modulename}.${KV_OBJ} failed" - cd ${OLDPWD} + unset libdir srcdir objdir + for n in $(find_module_params ${i}) + do + eval ${n/:*}=${n/*:/} + done + libdir=${libdir:-misc} + srcdir=${srcdir:-${S}} + objdir=${objdir:-${srcdir}} + + einfo "Installing ${modulename} module" + cd ${objdir} || die "${objdir} does not exist" + insinto /lib/modules/${KV_FULL}/${libdir} + doins ${modulename}.${KV_OBJ} || die "doins ${modulename}.${KV_OBJ} failed" + cd ${OLDPWD} - generate_modulesd ${objdir}/${modulename} - done + generate_modulesd ${objdir}/${modulename} + done + fi } # @FUNCTION: linux-mod_pkg_preinst