summaryrefslogtreecommitdiff
path: root/eclass/compat-drivers-3.7.eclass
diff options
context:
space:
mode:
authorBlackNoxis <steven.darklight@gmail.com>2014-02-15 23:24:26 +0200
committerBlackNoxis <steven.darklight@gmail.com>2014-02-15 23:24:26 +0200
commit7224c1253228e5c29c78cb3f0f26ce34770f2356 (patch)
tree1684924656132935256e034f35f92abee6623265 /eclass/compat-drivers-3.7.eclass
Added ebuilds for kogaion desktop
Diffstat (limited to 'eclass/compat-drivers-3.7.eclass')
-rw-r--r--eclass/compat-drivers-3.7.eclass543
1 files changed, 543 insertions, 0 deletions
diff --git a/eclass/compat-drivers-3.7.eclass b/eclass/compat-drivers-3.7.eclass
new file mode 100644
index 00000000..58bcee62
--- /dev/null
+++ b/eclass/compat-drivers-3.7.eclass
@@ -0,0 +1,543 @@
+# 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
+IUSE+=" +build-all-modules"
+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} build-all-modules" || 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_ath_driver_common
+# @DESCRIPTION:
+# This internal function registers common filters for the ath Makefile
+function select_ath_driver_common {
+ # eval "CPD_ATH_MAKEFILE+=\" CONFIG_ATH_ ath-objs regd.o hw.o\"" || die
+ select_ath_driver CONFIG_ATH_ ath-objs regd.o hw.o key.o || 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
+ select_ath_driver_common || die
+ ;;
+ ath9k)
+ disable staging usbnet ethernet bt update-initramfs var_03 || die
+ select_drivers CONFIG_ATH_COMMON || die
+ select_ath_driver CONFIG_ATH9K_HW || die
+ select_ath_driver_common || 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
+ select_ath_driver_common || 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
+ select_ath_driver_common || 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
+ select_ath_driver_common || die
+ ;;
+ ath6kl)
+ disable staging usbnet ethernet bt update-initramfs var_03 || die
+ select_drivers CONFIG_ATH_COMMON || die
+ select_ath_driver CONFIG_ATH6KL || die
+ select_ath_driver_common || 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: ${1}"
+ 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() {
+ # early exit, skip filtering of configuration and build all modules
+ if use build-all-modules; then
+ ewarn "You have chosen to build all modules!"
+ ewarn "The Pentoo team strives to build only the desired modules and the"
+ ewarn "use flag 'build-all-modules' should only be used when"
+ ewarn "the desired modules is not available through another flag."
+ ewarn "Please open an issue at the Pentoo site and let us know which"
+ ewarn "module was missing!"
+ return 0
+ fi
+
+ # 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