sys-kernel/compat-drivers: new configuration in compat-drivers-3.7.eclass wrt issue #40

This commit is contained in:
Wuodan0 2013-01-04 14:08:08 +00:00
parent b641f7d2ee
commit ab9c1b84b9
5 changed files with 721 additions and 3 deletions

View file

@ -0,0 +1,518 @@
# Copyright 1999-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $
# @ECLASS: compat-drivers-3.7.eclass
# @MAINTAINER:
# wuodan@pentoo.ch
# @BLURB: Implements functionality of driver-select script for several modules
# @DESCRIPTION:
# Implements functionality of driver-select script for several modules
# compose IUSE and REQUIRED_USE from the categories
REQUIRED_USE+=" || ("
for useexp in ${CPD_USE_EXPAND}; do
USE_TEMP="\$CPD_USE_EXPAND_$useexp"
for iuse in `eval echo "\$USE_TEMP"`; do
if [ "${iuse:0:1}" = '+' ]; then
IUSE+=" ${iuse:0:1}compat_drivers_${useexp}_${iuse:1}" || die
REQUIRED_USE+=" compat_drivers_${useexp}_${iuse:1}" || die
else
IUSE+=" compat_drivers_${useexp}_${iuse}" || die
REQUIRED_USE+=" compat_drivers_${useexp}_${iuse}" || die
fi
done
done
REQUIRED_USE+=" )"
# ==============================================================================
# INTERNAL VARIABLES
# ==============================================================================
# @VARIABLE: CPD_USE_EXPAND
# @DESCRIPTION:
# This variable needs to be set in the ebuild and contains the categories for
# USE_EXPAND
# @VARIABLE: CPD_USE_EXPAND_category
# @DESCRIPTION:
# These variables need to be set in the ebuild, one per category in
# CPD_USE_EXPAND. They contain the modules of the categories.
# @ECLASS-VARIABLE: CPD_MODULE
# @DESCRIPTION:
# This internal variable contains a temporary value, the currently processed
# module.
# @ECLASS-VARIABLE: CPD_DISABLE_${CPD_MODULE}
# @DESCRIPTION:
# These internal variables contains values, the 'disable-actions' of the
# currently processed module. One variable exists for each active module.
# @ECLASS-VARIABLE: CPD_MAKEFILES
# @DESCRIPTION:
# This internal variable contains a list of all 'Makefile's
CPD_MAKEFILES="
MAKEFILE
COMPAT_CONFIG_CW
DRIVERS_MAKEFILE
ATH_MAKEFILE
ATH9K_MAKEFILE
BRCM80211_MAKEFILE
RT2X00_MAKEFILE
TI_MAKEFILE
NET_WIRELESS_MAKEFILE
EEPROM_MAKEFILE
DRIVERS_NET_ATHEROS
DRIVERS_NET_BROADCOM
DRIVERS_NET_USB_MAKEFILE
SSB_MAKEFILE
BCMA_MAKEFILE"
# @ECLASS-VARIABLE: CPD_MAKEFILES_ARRAY
# @DESCRIPTION:
# This internal variable contains an array with paths to all files
CPD_MAKEFILES_ARRAY=(
MAKEFILE=Makefile
COMPAT_CONFIG_CW=config.mk
DRIVERS_MAKEFILE=drivers/net/wireless/Makefile
ATH_MAKEFILE=drivers/net/wireless/ath/Makefile
ATH9K_MAKEFILE=drivers/net/wireless/ath/ath9k/Makefile
BRCM80211_MAKEFILE=drivers/net/wireless/brcm80211/Makefile
RT2X00_MAKEFILE=drivers/net/wireless/rt2x00/Makefile
TI_MAKEFILE=drivers/net/wireless/ti/Makefile
NET_WIRELESS_MAKEFILE=net/wireless/Makefile
EEPROM_MAKEFILE=drivers/misc/eeprom/Makefile
DRIVERS_NET_ATHEROS=drivers/net/ethernet/atheros/Makefile
DRIVERS_NET_BROADCOM=drivers/net/ethernet/broadcom/Makefile
DRIVERS_NET_USB_MAKEFILE=drivers/net/usb/Makefile
SSB_MAKEFILE=drivers/ssb/Makefile
BCMA_MAKEFILE=drivers/bcma/Makefile
)
# ==============================================================================
# INTERNAL FUNCTIONS
# ==============================================================================
# @FUNCTION: get_makefile
# @DESCRIPTION:
# This internal function returns the path to a file from CPD_MAKEFILES_ARRAY
function get_makefile {
for file in "${CPD_MAKEFILES_ARRAY[@]}"; do
if [ "${file%%=*}" = "${1}" ]; then
echo "${file#*=}"
return 0
fi
done
die "Not found"
}
# @FUNCTION: select_drivers_from_makefile
# @DESCRIPTION:
# This internal function filters a Makefile
# It deletes all non matching lines!
function select_drivers_from_makefile
{
local makefile=$(get_makefile "$1")
shift
local configs=""
for i in $@; do
[ "${configs}" != '' ] && configs+='|'
configs+="${i}"
done
einfo "Filtering file ${makefile} for: ${configs}"
sed -r "/${configs}/!d" ${makefile} > ${makefile}.tmp || die
mv ${makefile}.tmp ${makefile} || die
}
# @FUNCTION: disable
# @DESCRIPTION:
# This internal function registers a 'disable' action for a module.
# It writes to a variable CPD_DISABLE_${CPD_MODULE}
function disable {
eval "CPD_DISABLE_${CPD_MODULE}+=\" ${*}\"" || die
}
# @FUNCTION: disable_makefile
# @DESCRIPTION:
# This internal function clears a Makefile completely. Use with care!
function disable_makefile {
einfo "Clearing entire file: ${1}"
echo > $1 || die
}
# @FUNCTION: disable_staging
# @DESCRIPTION:
# This internal function disables "staging"
function disable_staging
{
# perl -i -ne 'print if ! /CONFIG_COMPAT_STAGING/ ' "${MAKEFILE}"
sed -i '/CONFIG_COMPAT_STAGING/d' "$(get_makefile MAKEFILE)" || die
}
# @FUNCTION: disable_update-initramfs
# @DESCRIPTION:
# This internal function disables "update-initramfs"
function disable_update-initramfs
{
# perl -i -ne 'print if ! /update-initramfs/' "${MAKEFILE}"
sed -i '/update-initramfs/d' "$(get_makefile MAKEFILE)" || die
}
# @FUNCTION: disable_lib80211
# @DESCRIPTION:
# This internal function disables "update-initramfs"
function disable_lib80211
{
# perl -i -ne 'print if ! /LIB80211/ ' $NET_WIRELESS_MAKEFILE
sed -i '/LIB80211/d' "$(get_makefile NET_WIRELESS_MAKEFILE)" || die
}
# @FUNCTION: disable_b44
# @DESCRIPTION:
# This internal function disables "b44"
function disable_b44 {
# perl -i -ne 'print if ! /CONFIG_B44/ ' $DRIVERS_NET_BROADCOM
sed -i '/CONFIG_B44/d' "$(get_makefile DRIVERS_NET_BROADCOM)" || die
}
# @FUNCTION: disable_ssb
# @DESCRIPTION:
# This internal function disables "ssb"
function disable_ssb
{
disable_makefile "$(get_makefile ${SSB_MAKEFILE})"
# perl -i -ne 'print if ! /drivers\/ssb\//' "${MAKEFILE}"
sed -i '/drivers\/ssb\//d' "$(get_makefile MAKEFILE)" || die
}
# @FUNCTION: disable_bcma
# @DESCRIPTION:
# This internal function disables "bcma"
function disable_bcma
{
disable_makefile "$(get_makefile ${BCMA_MAKEFILE})"
# perl -i -ne 'print if ! /drivers\/bcma\//' "${MAKEFILE}"
sed -i '/drivers\/bcma\//d' "$(get_makefile MAKEFILE)" || die
}
# @FUNCTION: disable_rfkill
# @DESCRIPTION:
# This internal function disables "rfkill"
function disable_rfkill
{
# perl -i -ne 'print if ! /CONFIG_COMPAT_RFKILL/' "${MAKEFILE}"
sed -i '/CONFIG_COMPAT_RFKILL/d' "$(get_makefile MAKEFILE)" || die
}
# @FUNCTION: disable_eprom
# @DESCRIPTION:
# This internal function disables "eprom"
function disable_eeprom
{
disable_makefile "$(get_makefile ${EEPROM_MAKEFILE})" || die
# perl -i -ne 'print if ! /drivers\/misc\/eeprom\//' "${MAKEFILE}"
sed -i '/drivers\/misc\/eeprom\//d' "$(get_makefile MAKEFILE)" || die
}
# @FUNCTION: disable_usbnet
# @DESCRIPTION:
# This internal function disables "usbnet"
function disable_usbnet
{
disable_makefile ${DRIVERS_NET_USB_MAKEFILE} || die
# perl -i -ne 'print if ! /drivers\/net\/usb\//' "${MAKEFILE}"
sed -i '/drivers\/net\/usb\//d' "$(get_makefile MAKEFILE)" || die
}
# @FUNCTION: disable_usbnet
# @DESCRIPTION:
# This internal function disables "usbnet"
# this function is twice in driver-select script!?!
function disable_usbnet {
# perl -i -ne 'print if ! /CONFIG_COMPAT_NET_USB_MODULES/' "${MAKEFILE}"
sed -i '/CONFIG_COMPAT_NET_USB_MODULES/d' "$(get_makefile MAKEFILE)" || die
}
# @FUNCTION: disable_ethernet
# @DESCRIPTION:
# This internal function disables "ethernet"
function disable_ethernet {
# perl -i -ne 'print if ! /CONFIG_COMPAT_NETWORK_MODULES/' "${MAKEFILE}"
sed -i '/CONFIG_COMPAT_NETWORK_MODULES/d' "$(get_makefile MAKEFILE)" || die
}
# @FUNCTION: disable_var_03
# @DESCRIPTION:
# This internal function disables "var_03"
function disable_var_03 {
# perl -i -ne 'print if ! /CONFIG_COMPAT_VAR_MODULES/' "${MAKEFILE}"
sed -i '/CONFIG_COMPAT_VAR_MODULES/d' "$(get_makefile MAKEFILE)" || die
}
# @FUNCTION: disable_bt
# @DESCRIPTION:
# This internal function disables "bt"
function disable_bt {
# perl -i -ne 'print if ! /CONFIG_COMPAT_BLUETOOTH/' "${MAKEFILE}"
sed -i '/CONFIG_COMPAT_BLUETOOTH/d' "$(get_makefile MAKEFILE)" || die
}
# @FUNCTION: disable_80211
# @DESCRIPTION:
# This internal function disables "80211"
function disable_80211 {
# perl -i -ne 'print if ! /CONFIG_COMPAT_WIRELESS/' "${MAKEFILE}"
sed -i '/CONFIG_COMPAT_WIRELESS/d' "$(get_makefile MAKEFILE)" || die
}
# @FUNCTION: disable_ath9k_rate_control
# @DESCRIPTION:
# This internal function disables "ath9k_rate_control"
# new function, not in driver-select
function disable_ath9k_rate_control {
# perl -i -ne 'print if ! /CONFIG_COMPAT_ATH9K_RATE_CONTROL/ ' $COMPAT_CONFIG_CW
sed -i '/CONFIG_COMPAT_ATH9K_RATE_CONTROL/d' "$(get_makefile COMPAT_CONFIG_CW)" || die
}
# @FUNCTION: select_drivers
# @DESCRIPTION:
# This internal function registers filters for the drivers Makefile
function select_drivers {
eval "CPD_DRIVERS_MAKEFILE+=\" ${*}\"" || die
}
# @FUNCTION: select_ath_driver
# @DESCRIPTION:
# This internal function registers filters for the ath Makefile
function select_ath_driver {
eval "CPD_ATH_MAKEFILE+=\" ${*}\"" || die
}
# @FUNCTION: select_brcm80211_driver
# @DESCRIPTION:
# This internal function registers filters for the brcm80211 Makefile
function select_brcm80211_driver {
eval "CPD_BRCM80211_MAKEFILE+=\" ${*}\"" || die
}
# @FUNCTION: select_ti_driver
# @DESCRIPTION:
# This internal function registers filters for the ti Makefile
function select_ti_drivers {
select_drivers CONFIG_WL_TI
eval "CPD_TI_MAKEFILE+=\" ${*}\"" || die
}
# @FUNCTION: set_flag
# @DESCRIPTION:
# This internal function contains the configuration for each flag/module
function set_flag {
# clear/set global vars
CPD_MODULE=$1
case $1 in
ath5k)
disable staging usbnet ethernet bt update-initramfs var_03 || die
select_drivers CONFIG_ATH_COMMON || die
select_ath_driver CONFIG_ATH5K || die
# disable lib80211 ssb bcma usbnet eeprom update-initramfs
;;
ath9k)
disable staging usbnet ethernet bt update-initramfs var_03 || die
select_drivers CONFIG_ATH_COMMON || die
select_ath_driver CONFIG_ATH9K_HW || die
;;
ath9k_ap)
disable staging usbnet ethernet bt update-initramfs var_03 || die
select_drivers CONFIG_ATH_COMMON || die
select_ath_driver CONFIG_ATH9K_HW || die
disable ath9k_rate_control || die
;;
carl9170)
disable staging usbnet ethernet bt update-initramfs var_03 || die
select_drivers CONFIG_ATH_COMMON || die
select_ath_driver CONFIG_CARL9170 || die
;;
ath9k_htc)
disable staging usbnet ethernet bt update-initramfs var_03 || die
select_drivers CONFIG_ATH_COMMON || die
select_ath_driver CONFIG_ATH9K_HW || die
;;
ath6kl)
disable staging usbnet ethernet bt update-initramfs var_03 || die
select_drivers CONFIG_ATH_COMMON || die
select_ath_driver CONFIG_ATH6KL || die
;;
brcmsmac)
disable staging usbnet ethernet bt update-initramfs var_03 || die
select_drivers CONFIG_BRCMSMAC || die
select_brcm80211_driver CONFIG_BRCMSMAC CONFIG_BRCMUTIL || die
;;
brcmfmac)
disable staging usbnet ethernet bt update-initramfs var_03 || die
select_drivers CONFIG_BRCMFMAC || die
select_brcm80211_driver CONFIG_BRCMSMAC CONFIG_BRCMUTIL || die
;;
zd1211rw)
select_drivers CONFIG_COMPAT_ZD1211RW || die
disable staging lib80211 ssb bcma usbnet eeprom update-initramfs || die
;;
b43)
disable staging usbnet ethernet bt update-initramfs || die
disable eeprom lib80211 || die
select_drivers CONFIG_B43 || die
;;
rt2x00)
select_drivers CONFIG_RT2X00 || die
disable staging usbnet ethernet bt update-initramfs || die
disable lib80211 ssb bcma usbnet update-initramfs || die
;;
wl1251)
select_ti_drivers CONFIG_WL1251 || die
disable staging lib80211 ssb bcma usbnet eeprom update-initramfs || die
;;
wl12xx)
select_ti_drivers CONFIG_WL12XX || die
disable staging lib80211 ssb bcma usbnet eeprom update-initramfs || die
;;
wl18xx)
select_ti_drivers CONFIG_WL18XX || die
disable staging lib80211 ssb bcma usbnet eeprom update-initramfs || die
;;
# Ethernet and Bluetooth drivers
atl1)
disable staging usbnet var_03 bt rfkill 80211 b44 || die
echo -e "obj-\$(CONFIG_ATL1) += atlx/" > "$(get_makefile DRIVERS_NET_ATHEROS)" || die
;;
atl2)
disable staging usbnet var_03 bt rfkill 80211 b44 || die
echo -e "obj-\$(CONFIG_ATL2) += atlx/" > "$(get_makefile DRIVERS_NET_ATHEROS)" || die
;;
atl1e)
disable staging usbnet var_03 bt rfkill 80211 b44 || die
echo -e "obj-\$(CONFIG_ATL1E) += atl1e/" > "$(get_makefile DRIVERS_NET_ATHEROS)" || die
;;
atl1c)
disable staging usbnet var_03 bt rfkill 80211 b44 || die
echo -e "obj-\$(CONFIG_ATL1C) += atl1c/" > "$(get_makefile DRIVERS_NET_ATHEROS)" || die
;;
atlxx)
select_drivers CONFIG_ATL1 CONFIG_ATL2 CONFIG_ATL1E CONFIG_ALX || die
disable staging usbnet var_03 bt rfkill 80211 b44 update-initramfs || die
;;
bt)
select_drivers CONFIG_BT || die
disable ssb bcma usbnet eeprom update-initramfs ethernet staging 80211 || die
;;
i915)
# rfkill may be needed if you enable b44 as you may have b43
disable ethernet staging usbnet var_03 bt rfkill 80211 || die
;;
drm)
# rfkill may be needed if you enable b44 as you may have b43
disable ethernet staging usbnet var_03 bt rfkill 80211 || die
;;
# Manually added options by pentoo
usbnet)
# disable everything else
disable staging update-initramfs lib80211 b44 ssb bcma rfkill eeprom ethernet var_03 bt 80211 ath9k_rate_control || die
;;
staging)
# disable everything else
disable usbnet update-initramfs lib80211 b44 ssb bcma rfkill eeprom ethernet var_03 bt 80211 ath9k_rate_control || die
;;
b44)
disable staging usbnet ethernet bt update-initramfs || die
disable eeprom lib80211 || die
select_drivers CONFIG_B44 || die
;;
*)
die "Unsupported driver"
exit
;;
esac
}
# @FUNCTION: echo_flag_settings
# @DESCRIPTION:
# This internal function outputs the "disable" actions for a flag
function echo_flag_settings {
# example:
# CPD_DISABLE_${iflag}="action1 action2"
# CPD_DRIVERS_MAKEFILE="flag1 flag1"
# CPD_ATH_MAKEFILE="flag3"
# ...
local iflag=$1
eval "local disable_list=\"\${CPD_DISABLE_${iflag}}\"" || die
einfo "Disable list for ${iflag}: ${disable_list}"
}
# ==============================================================================
# EXPORTED FUNCTIONS
# ==============================================================================
# @FUNCTION: compat-drivers-3.7_src_configure
# @DESCRIPTION:
# This function reads the configuration (disable-actions and filters) for each
# single active flag, then constructs and applies the common configuration set.
compat-drivers-3.7_src_configure() {
# loop over all modules
local use_temp=''
local use_enabled_list=''
for useexp in ${CPD_USE_EXPAND}; do
use_temp="\$CPD_USE_EXPAND_$useexp" || die
for iuse in `eval echo "\$use_temp"`; do
if [ "${iuse:0:1}" = '+' ]; then
local iuse2=${iuse:1} || die
else
local iuse2=${iuse} || die
fi
local iflag="compat_drivers_${useexp}_${iuse2}" || die
# check if it's enabled
if use "${iflag}"; then
use_enabled_list+=" ${iuse2}" || die
# fill the disable/enable lists
# example:
# CPD_DISABLE_${iflag}="action1 action2"
# CPD_DRIVERS_MAKEFILE="flag1 flag1"
# CPD_ATH_MAKEFILE="flag3"
# ...
set_flag "${iuse2}" || die
echo_flag_settings "${iuse2}" || die
fi
done
done
einfo "List of enabled modules: ${use_enabled_list}"
# compose common disable list for all flags
# 1st module/flag
local iuse1="$(echo $use_enabled_list | cut -d ' ' -f 1)" || die
eval "local disable_list=\$CPD_DISABLE_${iuse1}" || die
for iuse in ${use_enabled_list}; do
if [ "${iuse}" != "${iuse1}" ]; then
local disable_list_new='' || die
eval "local disable_list_other=\$CPD_DISABLE_${iuse}" || die
for dis in ${disable_list}; do
has "${dis}" ${disable_list_other} && \
disable_list_new+=" ${dis}"
done
disable_list="${disable_list_new}" || die
fi
done
# execute all filters for the Makefiles
for file in ${CPD_MAKEFILES}; do
eval "local filter_list=\$CPD_${file}" || die
if [ -n "${filter_list}" ]; then
# einfo "Filtering $(get_makefile ${file}) for: ${filter_list}"
select_drivers_from_makefile "${file}" "${filter_list}" || die
fi
done
# execute common disable list
einfo "Common disable list: ${disable_list}"
for dis in ${disable_list}; do
einfo "Running disable function: disable_${dis}"
eval "disable_${dis}" || die
done
}
# EXPORT_FUNCTIONS src_configure || die

View file

@ -7,5 +7,6 @@ AUX ipw2200-inject.3.4.6.patch 4173 SHA256 0b649bd7b6d2bf22667edc96949b5ab92cc7f
AUX leds-disable-strict-3.6.6.patch 799 SHA256 e1b5947608d9c53263efd76aed404eb7e4107d81669faeb484f5d680e4cfb570 SHA512 6373efc6697b4589c15c3cd2cfd8f3faa06fe90eeeb4fa9acaf187ecc682fac394444949dd26c2dde71c0f45aedb1198374764b580b824ddc6bc1e937273b5f1 WHIRLPOOL 40bdef714aa0ff4069bb50abf434dff88610d97f570b80f36622d29a43301bf013a90e90cb7f3f8044c2bf53a09154b1033a6f53b1edf186513452fdb681d55f
AUX leds-disable-strict-3.7_rc1_p6.patch 799 SHA256 e1b5947608d9c53263efd76aed404eb7e4107d81669faeb484f5d680e4cfb570 SHA512 6373efc6697b4589c15c3cd2cfd8f3faa06fe90eeeb4fa9acaf187ecc682fac394444949dd26c2dde71c0f45aedb1198374764b580b824ddc6bc1e937273b5f1 WHIRLPOOL 40bdef714aa0ff4069bb50abf434dff88610d97f570b80f36622d29a43301bf013a90e90cb7f3f8044c2bf53a09154b1033a6f53b1edf186513452fdb681d55f
DIST compat-drivers-3.7-rc1-6.tar.gz 7877572 SHA256 688406f3d9a84246dc0d57b93b5335c9b0f276cc216e3dc7032ad6152bfff873 SHA512 1a6a747a325b19f03cfb28036232ee9186010a0cb78e753d2358d8932d81322516878df97c13e56cec6472515d30c5b99816f44c6331fc58a261cae4ab33ad43 WHIRLPOOL c33025583834726f1f2988d8eaab8c716b117d74b427b035000ae5d5b35310be486ac76fcdb0589effae6036b5a3058ae0859384e4e6c9466b659f9848036ac1
EBUILD compat-drivers-3.7_rc1_p6.ebuild 7445 SHA256 a2f3395e385dd913bbd95c28998c978896e15da72cc1a9d6642f3d483aef3246 SHA512 53944a5912d3389f8052ad118696f947f88fbaa0baccbb6a2d0aa332ac24eff548dafbfc7d3a9c5aa9e34b26749f4c10246d5c7456390131a09755514f8e2248 WHIRLPOOL 5c192cf011a867dcae274e349b46b332f197dd04ff9f371339e76fa65bec5fca612ac59495c9de9334d837c8a28591b48c6e3b09c5f1c817081cafff5f6d0dad
MISC metadata.xml 228 SHA256 8715828d1bff71d5d96b991ba600bae9376c1c80c96f0f102260fc335ca22487 SHA512 006b031017fe79d0da68ed1c2684d2b87f75976111d8abdb18d126ffe142df8ded67805f14fe4adfe17e93287080126b7f4af64dac0ebaa1d9fe4c97e5f9573a WHIRLPOOL e711ede3bf7bcf0dc9d3ecd2706e4120270d4942718ee901f8d42c1c86055c8b153bdb24d6682a56d14f5b14d4ff220c115f14714b3f039bdc3deeece3d1fd02
EBUILD compat-drivers-3.7_rc1_p6-r1.ebuild 6976 SHA256 82a760ef9a1448e865dd2936ab3a9824da2c2f6195bce0dec091a9c569a36f18 SHA512 dc907bea77600697458d478418fc719b046ec4e3d09443891ab7235ba40e256b5ac57f7a9355ac67ab25eca4c01e4502a4cda0667a961165549cc4c6758b4249 WHIRLPOOL 7d2361bbd4f6417f934fe7763a5d33a49da18d3a17be53d85fe422c6ce0888b889a136407edae05d10e855ac61d711800bf763a7ebe15e92f2871299b1bc51ed
EBUILD compat-drivers-3.7_rc1_p6.ebuild 7446 SHA256 1b80374769f13fb010ab0d288b5b03ff8a1eb3edde602f09cb8e242debda222d SHA512 0020e15c77d0b3692d3ffb38cd4268b245acb8f9995612f978c41df30b98eecb7d2dc989b7ea82fb5f589eb9abfb7c4b694217fafdad1db818c9b6b521edd9d1 WHIRLPOOL 967238ad9352b14ae10c6c47d71e4fd6aa44a2ec205f161b9c74f8a1112306b2ecad6c0bff2b11c5eec54c526629639e64073204c742555731ab2e94eb047130
MISC metadata.xml 2830 SHA256 0e88cb0f4e5115715ce48358df04406bcec8407eca10cf96a6c89360e17990e8 SHA512 ff3965ab2427eee1c89c6a8ca7d5c10362641826b927f8b0550ba2d5952287a41a666202edb1b1d9558c571efc731e3d462a85be41399ae7f3d2f151ae39844c WHIRLPOOL 613d37bd613bec7f73e8ed46fc90ad8a22e0a87e2cd393c4bd912346fbf9ed2063a2b1cd1a2d94d8aac4a9fa013dcf89859dd4d9998e171149ee630184079dec

View file

@ -0,0 +1,177 @@
# Copyright 1999-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $
EAPI="5"
# USE_EXPAND categories
CPD_USE_EXPAND="wifi ethernet various"
# These are officially supported
CPD_USE_EXPAND_wifi="ath5k ath9k ath9k_ap +ath9k_htc ath6kl b43 brcmsmac brcmfmac carl9170 rt2x00 wl1251 wl12xx zd1211rw"
# This might work (not officially supported)
CPD_USE_EXPAND_wifi+=" wl18xx"
# This might work (added by pentoo)
CPD_USE_EXPAND_wifi+=" b44"
# These are officially supported
CPD_USE_EXPAND_ethernet="atl1 atl1c atl1e atl2"
# This might work (not officially supported)
CPD_USE_EXPAND_ethernet+=" atlxx"
# These are officially supported
CPD_USE_EXPAND_various="i915"
# This might work (not officially supported)
CPD_USE_EXPAND_various+=" bt drm"
# This might work (added by pentoo)
CPD_USE_EXPAND_various+=" staging usbnet"
inherit linux-mod linux-info versionator eutils compat-drivers-3.7
# upstream versioning, ex.: 3.7-rc1-6
UPSTREAM_PVR="${PV//_/-}" && UPSTREAM_PVR="${UPSTREAM_PVR/-p/-}"
# ex.: 3.7-rc1
UPSTREAM_PV=${UPSTREAM_PVR%-*}
DESCRIPTION="Stable kernel pre-release wifi subsystem backport"
HOMEPAGE="http://backports.wiki.kernel.org"
# SRC_URI="http://www.kernel.org/pub/linux/kernel/projects/backports/stable/v${UPSTREAM_PV}/${PN}-${UPSTREAM_PVR}.tar.gz"
SRC_URI="mirror://kernel/linux/kernel/projects/backports/stable/v${UPSTREAM_PV}/${PN}-${UPSTREAM_PVR}.tar.gz"
LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~amd64 ~arm ~x86"
IUSE="atheros_obey_crda debugfs debug-driver full-debug injection livecd loadmodules noleds pax_kernel"
DEPEND="!net-wireless/compat-wireless-builder
!net-wireless/compat-wireless"
RDEPEND="${DEPEND}
>=sys-kernel/linux-firmware-20110219
virtual/udev"
S="${WORKDIR}/${PN}-${UPSTREAM_PVR}"
RESTRICT="strip"
CONFIG_CHECK="!DYNAMIC_FTRACE"
pkg_setup() {
CONFIG_CHECK="~NET_SCHED"
CONFIG_CHECK="~IPW2200_PROMISCUOUS"
linux-mod_pkg_setup
kernel_is -lt 2 6 27 && die "kernel 2.6.27 or higher is required for compat wireless to be installed"
kernel_is -gt $(get_version_component_range 1) $(get_version_component_range 2) $(get_version_component_range 3) && die "The version of compat-wireless you are trying to install contains older modules than your kernel. Failing before downgrading your system."
#these things are not optional
linux_chkconfig_module MAC80211 || die "CONFIG_MAC80211 must be built as a _module_ !"
linux_chkconfig_module CFG80211 || die "CONFIG_CFG80211 must be built as a _module_ !"
linux_chkconfig_module LIBIPW || ewarn "CONFIG_LIBIPW really should be set or there will be no WEXT compat"
if use compat_drivers_wifi_b43; then
linux_chkconfig_module SSB || die "You need to enable CONFIG_SSB or USE=-b43"
fi
if use compat_drivers_wifi_b44; then
linux_chkconfig_module SSB || die "You need to enable CONFIG_SSB or USE=-b44"
fi
}
src_prepare() {
use pax_kernel && epatch "${FILESDIR}"/${P}-grsec.patch
use pax_kernel && epatch "${FILESDIR}"/${P}-grsec-warnings.patch
#mcgrof said prep for inclusion in compat-wireless.git but this causes issues
#find "${S}" -name Makefile | xargs sed -i -e 's/export CONFIG_/export CONFIG_COMPAT_/' -e 's/COMPAT_COMPAT_/COMPAT_/' -e 's/CONFIG_COMPAT_CHECK/CONFIG_CHECK/'
#sed -i -e 's/export CONFIG_/export CONFIG_COMPAT_/' -e 's/COMPAT_COMPAT_/COMPAT_/' "${S}"/config.mk
# CONFIG_CFG80211_REG_DEBUG=y
sed -i '/CFG80211_REG_DEBUG/s/^# *//' "${S}"/config.mk
#this patch ignores the regulatory settings of an atheros card and uses what CRDA thinks is right
if use atheros_obey_crda; then
ewarn "You have enabled atheros_obey_crda which doesn't do what you think."
ewarn "This use flag will cause the eeprom of the card to be ignored and force"
ewarn "world roaming on the device until crda provides a valid regdomain."
ewarn "Short version, this is not a way to break the law, this will automatically"
ewarn "make your card less functional unless you set a proper regdomain with iw/crda."
epatch "${FILESDIR}"/ath_regd_optional.patch
fi
if use injection; then
epatch "${FILESDIR}"/4002_mac80211-2.6.29-fix-tx-ctl-no-ack-retry-count.patch
epatch "${FILESDIR}"/4004_zd1211rw-2.6.28.patch
# epatch "${FILESDIR}"/mac80211.compat08082009.wl_frag+ack_v1.patch
# epatch "${FILESDIR}"/4013-runtime-enable-disable-of-mac80211-packet-injection.patch
epatch "${FILESDIR}"/ipw2200-inject.3.4.6.patch
fi
if use noleds; then
sed -ir 's/^\(export CONFIG_.*_LEDS=\)y$/\1n/' config.mk
epatch "${FILESDIR}/leds-disable-strict-${PV}.patch"
fi
use debug-driver && sed -i '/DEBUG=y/s/^# *//' "${S}"/config.mk
use debugfs && sed -i '/DEBUGFS/s/^# *//' "${S}"/config.mk
if use full-debug; then
if use debug-driver ; then
sed -i '/CONFIG=/s/^# *//' "${S}"/config.mk
else
ewarn "Enabling full-debug includes debug-driver."
sed -i '/DEBUG=/s/^# *//' "${S}"/config.mk
fi
fi
#avoid annoying ACCESS DENIED sandbox errors
sed -i "s/\${MAKE} -C \${KLIB_BUILD} kernelversion/echo ${KV_FULL}/g" compat/scripts/gen-compat-config.sh || die "sed failed"
sed -i "s/shell \$(MAKE) -C \$(KLIB_BUILD) kernelversion/echo ${KV_FULL}/g" config.mk || die "sed failed"
sed -i "s/make -C \$KLIB_BUILD kernelversion/echo ${KV_FULL}/g" scripts/gen-compat-autoconf.sh || die "sed failed"
}
src_compile() {
addpredict "${KERNEL_DIR}"
set_arch_to_kernel
emake KLIB_BUILD="${DESTDIR}"/lib/modules/"${KV_FULL}"/build || die "emake failed"
}
src_install() {
for file in $(find -name \*.ko); do
insinto "/lib/modules/${KV_FULL}/updates/$(dirname ${file})"
doins "${file}"
done
dosbin scripts/athenable scripts/b43load scripts/iwl-enable \
scripts/madwifi-unload scripts/athload scripts/iwl-load \
scripts/b43enable scripts/unload.sh
dodir /usr/lib/compat-wireless
exeinto /usr/lib/compat-wireless
doexe scripts/modlib.sh
dodoc README.md
dodir /$(get_libdir)/udev/rules.d/
insinto /$(get_libdir)/udev/rules.d/
doins udev/50-compat_firmware.rules
exeinto /$(get_libdir)/udev/
doexe udev/compat_firmware.sh
}
pkg_postinst() {
update_depmod
update_moduledb
if use !livecd; then
if use loadmodules; then
einfo "Attempting to unload modules..."
/usr/sbin/unload.sh 2>&1 | grep -E FATAL && ewarn "Unable to remove running modules, system may be unhappy, reboot HIGHLY recommended!"
einfo "Triggering automatic reload of needed modules..."
/sbin/udevadm trigger
einfo "We have attempted to load your new modules for you, this may fail horribly, or may just cause a network hiccup."
einfo "If you experience any issues reboot is the simplest course of action."
fi
fi
if use !loadmodules; then
einfo "You didn't USE=loadmodules but you can still attempt to switch to the new drivers without reboot."
einfo "Run 'unload.sh' then 'udevadm trigger' to cause udev to load the needed drivers."
einfo "If unload.sh fails for some reason you should be able to simply reboot to fix everything and load the new modules."
fi
}
pkg_postrm() {
remove_moduledb
}

View file

@ -21,7 +21,7 @@ KEYWORDS="~amd64 ~arm ~x86"
IUSE="+alx +ath9k_htc atheros_obey_crda bluetooth b43 b44 debugfs debug-driver full-debug injection livecd loadmodules noleds pax_kernel"
DEPEND="!net-wireless/compat-wireless-builder
net-wireless/compat-wireless"
!net-wireless/compat-wireless"
RDEPEND="${DEPEND}
>=sys-kernel/linux-firmware-20110219
virtual/udev"

View file

@ -3,5 +3,27 @@
<pkgmetadata>
<use>
<flag name="injection">Add patches for better wifi injection support</flag>
<flag name="compat_drivers_ethernet_atl1">COMPAT_DRIVERS_ETHERNET setting to build driver for atl1 ethernet cards</flag>
<flag name="compat_drivers_ethernet_atl1c">COMPAT_DRIVERS_ETHERNET setting to build driver for atl1c ethernet cards</flag>
<flag name="compat_drivers_ethernet_atl1e">COMPAT_DRIVERS_ETHERNET setting to build driver for atl1e ethernet cards</flag>
<flag name="compat_drivers_ethernet_atl2">COMPAT_DRIVERS_ETHERNET setting to build driver for atl2 ethernet cards</flag>
<flag name="compat_drivers_ethernet_atlxx">COMPAT_DRIVERS_ETHERNET setting to build driver for atlxx ethernet cards</flag>
<flag name="compat_drivers_various_bt">COMPAT_DRIVERS_VARIOUS setting to build driver for bluetooth devices</flag>
<flag name="compat_drivers_various_drm">COMPAT_DRIVERS_VARIOUS setting to build driver for drm devices</flag>
<flag name="compat_drivers_various_i915">COMPAT_DRIVERS_VARIOUS setting to build driver for i915 devices</flag>
<flag name="compat_drivers_wifi_ath5k">COMPAT_DRIVERS_WIFI setting to build driver for ath5k wireless cards</flag>
<flag name="compat_drivers_wifi_ath6kl">COMPAT_DRIVERS_WIFI setting to build driver for ath6kl wireless cards</flag>
<flag name="compat_drivers_wifi_ath9k">COMPAT_DRIVERS_WIFI setting to build driver for ath9k wireless cards</flag>
<flag name="compat_drivers_wifi_ath9k_ap">COMPAT_DRIVERS_WIFI setting to build driver for ath9k_ap wireless cards</flag>
<flag name="compat_drivers_wifi_ath9k_htc">COMPAT_DRIVERS_WIFI setting to build driver for ath9k_htc wireless cards</flag>
<flag name="compat_drivers_wifi_b43">COMPAT_DRIVERS_WIFI setting to build driver for b43 wireless cards</flag>
<flag name="compat_drivers_wifi_brcmfmac">COMPAT_DRIVERS_WIFI setting to build driver for brcmfmac wireless cards</flag>
<flag name="compat_drivers_wifi_brcmsmac">COMPAT_DRIVERS_WIFI setting to build driver for brcmsmac wireless cards</flag>
<flag name="compat_drivers_wifi_carl9170">COMPAT_DRIVERS_WIFI setting to build driver for carl9170 wireless cards</flag>
<flag name="compat_drivers_wifi_rt2x00">COMPAT_DRIVERS_WIFI setting to build driver for rt2x00 wireless cards</flag>
<flag name="compat_drivers_wifi_wl1251">COMPAT_DRIVERS_WIFI setting to build driver for wl1251 wireless cards</flag>
<flag name="compat_drivers_wifi_wl12xx">COMPAT_DRIVERS_WIFI setting to build driver for wl12xx wireless cards</flag>
<flag name="compat_drivers_wifi_wl18xx">COMPAT_DRIVERS_WIFI setting to build driver for wl18xx wireless cards</flag>
<flag name="compat_drivers_wifi_zd1211rw">COMPAT_DRIVERS_WIFI setting to build driver for zd1211rw wireless cards</flag>
</use>
</pkgmetadata>