summaryrefslogtreecommitdiff
path: root/sys-kernel/compat-drivers/files/compat-drivers-3.8-driver-select
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 /sys-kernel/compat-drivers/files/compat-drivers-3.8-driver-select
Added ebuilds for kogaion desktop
Diffstat (limited to 'sys-kernel/compat-drivers/files/compat-drivers-3.8-driver-select')
-rwxr-xr-xsys-kernel/compat-drivers/files/compat-drivers-3.8-driver-select845
1 files changed, 845 insertions, 0 deletions
diff --git a/sys-kernel/compat-drivers/files/compat-drivers-3.8-driver-select b/sys-kernel/compat-drivers/files/compat-drivers-3.8-driver-select
new file mode 100755
index 00000000..bafaf352
--- /dev/null
+++ b/sys-kernel/compat-drivers/files/compat-drivers-3.8-driver-select
@@ -0,0 +1,845 @@
+#!/usr/bin/env bash
+# Copyright 2009 Luis R. Rodriguez <mcgrof@gmail.com>
+#
+# This script allows you to select your compat-drivers driver and
+# reduce compilation time.
+
+# Heavily modified by Stefan Kuhn <wuodan@pentoo.ch>
+# Configures compat-drivers for multiple drivers at once
+# Suited for package managers
+
+# 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"
+
+# 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
+)
+
+# This internal variable holds modules to be added to the atheros Makefile
+CPD_ADD_ATHEROS=""
+
+# This internal variable controls the execution phase (and write protection)
+# phases: 0=start, 1=configure, 2=write, 3=restore
+# no file should be touched below phase 2
+CPD_PHASE=0
+
+# CPD_MODULE
+# This internal variable contains a temporary value, the currently processed
+# argument
+
+# CPD_DISABLE_${CPD_MODULE}
+# These internal variables contains the 'disable-actions' of the # currently
+# processed argument
+
+# This internal variable stores selected drivers (and groups)
+CPD_SELECTED_DRIVERS=''
+
+function die {
+ echo "$1" 1>&2
+ exit 1
+}
+
+function check_phase {
+ [ ${CPD_PHASE} -lt ${1} ] && \
+ die "Current phase ${CPD_PHASE} lower then ${1}. Check failed"
+}
+
+# This internal function returns the path to a file from CPD_MAKEFILES_ARRAY
+function get_makefile {
+ local file
+ for file in "${CPD_MAKEFILES_ARRAY[@]}"; do
+ if [ "${file%%=*}" = "${1}" ]; then
+ echo "${file#*=}"
+ return 0
+ fi
+ done
+ die "File ${1} not found"
+}
+
+
+# used to backup files from foo to foo.${BACKUP_EXT}
+BACKUP_EXT="bk"
+
+# Pretty colors
+GREEN="\033[01;32m"
+YELLOW="\033[01;33m"
+NORMAL="\033[00m"
+BLUE="\033[34m"
+RED="\033[31m"
+PURPLE="\033[35m"
+CYAN="\033[36m"
+UNDERLINE="\033[02m"
+
+# this internal function disables colors
+function unset_colors {
+ GREEN=
+ YELLOW=
+ NORMAL=
+ BLUE=
+ RED=
+ PURPLE=
+ CYAN=
+ UNDERLINE=
+}
+
+SUPPORTED_80211_DRIVERS="ath5k ath9k ath9k_ap ath9k_htc carl9170 ath6kl wil6210 b43 zd1211rw rt2x00 wl1251 wl12xx brcmsmac brcmfmac"
+
+# b43 needs some more work for driver-select, the SSB stuff, plus
+# what if you update b44 but not b43? It will bust.
+SUPPORTED_ETH_DRIVERS="atl1 atl2 atl1e atl1c alx"
+
+SUPPORTED_DRM_DRIVERS="i915"
+
+SUPPORTED_DRIVERS="${SUPPORTED_80211_DRIVERS} ${SUPPORTED_ETH_DRIVERS} ${SUPPORTED_DRM_DRIVERS}"
+
+function usage {
+ echo -e "${GREEN}Usage${NORMAL}: ${BOLD}$0${NORMAL} [${PURPLE}-q${NORMAL}] [ ${PURPLE}<driver-name>${NORMAL} | ${CYAN}<driver-group-name>${NORMAL} | ${GREEN}restore${NORMAL} ]"
+
+ # These should match the switch below.
+ echo -e "Supported 802.11 drivers:"
+ local i
+ for i in $SUPPORTED_80211_DRIVERS; do
+ echo -e "\t${PURPLE}${i}${NORMAL}"
+ done
+
+ echo
+ echo -e "Supported Ethernet drivers:"
+ for i in $SUPPORTED_ETH_DRIVERS; do
+ echo -e "\t${PURPLE}${i}${NORMAL}"
+ done
+
+ echo -e "Supported DRM drivers:"
+ for i in $SUPPORTED_DRM_DRIVERS; do
+ echo -e "\t${PURPLE}${i}${NORMAL}"
+ done
+
+ # These should match the switch below.
+ echo -e "\nSupported group drivers:"
+ echo -e "\t${CYAN}atheros${NORMAL} < ${PURPLE} ath5k ath9k carl9170 zd1211rw ath6kl wil6210${NORMAL}>"
+ echo -e "\t${CYAN}ath${NORMAL} < ${PURPLE} ath5k ath9k carl9170 ath6kl wil6210${NORMAL}>"
+ echo -e "\t${CYAN}brcm80211${NORMAL} < ${PURPLE} brcmsmac brcmfmac ${NORMAL}>"
+ echo -e "\t${CYAN}intel${NORMAL} < ${PURPLE} iwlwifi, iwlegacy ${NORMAL}>"
+ echo -e "\t${CYAN}rtl818x${NORMAL} < ${PURPLE} rtl8180 rtl8187 ${NORMAL}>"
+ echo -e "\t${CYAN}rtlwifi${NORMAL} < ${PURPLE} rtl8192ce ${NORMAL}>"
+ echo -e "\t${CYAN}ti${NORMAL} < ${PURPLE} wl1251 wl12xx (SPI and SDIO)${NORMAL}>"
+
+ echo -e "\nSupported group drivers: Bluetooth & Ethernet:"
+ echo -e "\t${CYAN}atlxx${NORMAL} < ${PURPLE} atl1 atl2 atl1e alx${NORMAL}>"
+ echo -e "\t${CYAN}bt${NORMAL} < ${PURPLE} Linux bluetooth drivers ${NORMAL}>"
+
+ echo -e "\nSupported group drivers: DRM:"
+ echo -e "\t${CYAN}drm${NORMAL} < ${PURPLE} i915${NORMAL}>"
+
+ echo
+ echo -e "Restoring compat-drivers:"
+ echo -e "\t${GREEN}restore${NORMAL}: you can use this option to restore compat-drivers to the original state"
+
+ echo
+ echo -e "Options:"
+ echo -e "\t${PURPLE}-q${NORMAL}:\tDisables colored output"
+}
+
+function backup_file {
+ check_phase 2
+ if [ -f $1.${BACKUP_EXT} ]; then
+ echo -e "Backup exists: ${CYAN}${1}.${BACKUP_EXT}${NORMAL}"
+ return
+ fi
+ echo -e "Backing up makefile: ${CYAN}${1}.${BACKUP_EXT}${NORMAL}"
+ cp "${1}" "${1}.${BACKUP_EXT}" || die
+}
+
+# This internal function registers a 'disable' action for a module.
+# It writes to a variable CPD_DISABLE_${CPD_MODULE}
+function disable {
+ check_phase 1
+ eval "CPD_DISABLE_${CPD_MODULE}+=\" ${*}\"" || die
+}
+
+# This internal function clears a Makefile completely.
+function disable_makefile
+{
+ check_phase 2
+ backup_file $1
+ echo > $1
+}
+
+function select_drivers_from_makefile
+{
+ check_phase 2
+ local MAKEFILE=$(get_makefile "$1")
+ shift
+ backup_file $MAKEFILE
+ local CONFIGS=""
+ local i
+ for i in $@; do
+ if [[ "$CONFIGS" = "" ]]; then
+ CONFIGS="$i"
+ else
+ CONFIGS="${CONFIGS}|$i"
+ fi
+ done
+ egrep "$CONFIGS" $MAKEFILE > ${MAKEFILE}.tmp
+ mv ${MAKEFILE}.tmp ${MAKEFILE}
+}
+
+# This internal function registers filters for the drivers Makefile
+function select_drivers {
+ check_phase 1
+ eval "CPD_DRIVERS_MAKEFILE+=\" ${*}\"" || die
+}
+
+# This internal function disables "lib80211"
+function disable_lib80211
+{
+ check_phase 2
+ backup_file "$(get_makefile NET_WIRELESS_MAKEFILE)"
+ # perl -i -ne 'print if ! /LIB80211/ ' $NET_WIRELESS_MAKEFILE
+ sed -i '/LIB80211/d' "$(get_makefile NET_WIRELESS_MAKEFILE)" || die
+}
+
+# This internal function disables "b44"
+function disable_b44 {
+ check_phase 2
+ backup_file "$(get_makefile DRIVERS_NET_BROADCOM)"
+ # perl -i -ne 'print if ! /CONFIG_B44/ ' $DRIVERS_NET_BROADCOM
+ sed -i '/CONFIG_B44/d' "$(get_makefile DRIVERS_NET_BROADCOM)" || die
+}
+
+# This internal function disables "ssb"
+function disable_ssb
+{
+ check_phase 2
+ disable_makefile "$(get_makefile ${SSB_MAKEFILE})"
+ # perl -i -ne 'print if ! /drivers\/ssb\//' Makefile
+ sed -i '/drivers\/ssb\//d' "$(get_makefile MAKEFILE)" || die
+}
+
+# This internal function disables "bcma"
+function disable_bcma
+{
+ check_phase 2
+ disable_makefile "$(get_makefile ${BCMA_MAKEFILE})"
+ # perl -i -ne 'print if ! /drivers\/bcma\//' Makefile
+ sed -i '/drivers\/bcma\//d' "$(get_makefile MAKEFILE)" || die
+}
+
+# This internal function disables "rfkill"
+function disable_rfkill
+{
+ check_phase 2
+ backup_file "$(get_makefile MAKEFILE)"
+ # perl -i -ne 'print if ! /CONFIG_COMPAT_RFKILL/' Makefile
+ sed -i '/CONFIG_COMPAT_RFKILL/d' "$(get_makefile MAKEFILE)" || die
+}
+
+# This internal function disables "eprom"
+function disable_eeprom
+{
+ check_phase 2
+ 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
+}
+
+# This internal function disables "usbnet"
+# TODO: this function is twice in driver-select script!?! Why?
+function disable_usbnet
+{
+ check_phase 2
+ 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
+}
+
+# This internal function disables "usbnet"
+# TODO: this function is twice in driver-select script!?! Why?
+function disable_usbnet {
+ check_phase 2
+ # perl -i -ne 'print if ! /CONFIG_COMPAT_NET_USB_MODULES/' Makefile
+ sed -i '/CONFIG_COMPAT_NET_USB_MODULES/d' "$(get_makefile MAKEFILE)" || die
+}
+
+# This internal function disables "ethernet"
+function disable_ethernet {
+ check_phase 2
+ # perl -i -ne 'print if ! /CONFIG_COMPAT_NETWORK_MODULES/' Makefile
+ sed -i '/CONFIG_COMPAT_NETWORK_MODULES/d' "$(get_makefile MAKEFILE)" || die
+}
+
+# This internal function disables "var_03"
+function disable_var_03 {
+ check_phase 2
+ # perl -i -ne 'print if ! /CONFIG_COMPAT_VAR_MODULES/' Makefile
+ sed -i '/CONFIG_COMPAT_VAR_MODULES/d' "$(get_makefile MAKEFILE)" || die
+}
+
+# This internal function disables "bt"
+function disable_bt {
+ check_phase 2
+ # perl -i -ne 'print if ! /CONFIG_COMPAT_BLUETOOTH/' Makefile
+ sed -i '/CONFIG_COMPAT_BLUETOOTH/d' "$(get_makefile MAKEFILE)" || die
+}
+
+# This internal function disables "80211"
+function disable_80211 {
+ check_phase 2
+ # perl -i -ne 'print if ! /CONFIG_COMPAT_WIRELESS/' Makefile
+ sed -i '/CONFIG_COMPAT_WIRELESS/d' "$(get_makefile MAKEFILE)" || die
+}
+
+# This internal function disables "drm"
+function disable_drm {
+ check_phase 2
+ # perl -i -ne 'print if ! /CONFIG_COMPAT_VIDEO_MODULES/' Makefile
+ sed -i '/CONFIG_COMPAT_VIDEO_MODULES/d' "$(get_makefile MAKEFILE)" || die
+}
+
+function disable_bt_usb_ethernet {
+ check_phase 1
+ # backup_file Makefile
+ disable usbnet
+ disable ethernet
+ disable bt
+ disable update-initramfs
+ disable drm
+}
+
+function disable_bt_usb_ethernet_var {
+ check_phase 1
+ # backup_file Makefile
+ disable bt_usb_ethernet
+ disable var_03
+}
+
+function enable_only_ethernet {
+ check_phase 1
+ # backup_file Makefile
+ # backup_file $DRIVERS_NET_BROADCOM
+ # backup_file $DRIVERS_NET_ATHEROS
+ disable staging
+ disable usbnet
+ disable var_03
+ disable bt
+ disable drm
+ # rfkill may be needed if you enable b44 as you may have b43
+ disable rfkill
+ disable 80211
+}
+
+function disable_var {
+ check_phase 1
+ disable ssb
+ disable bcma
+ disable usbnet
+ disable eeprom
+ disable update-initramfs
+}
+
+function disable_var_01 {
+ check_phase 1
+ disable lib80211
+ disable var
+}
+
+function disable_var_02 {
+ check_phase 1
+ #var_01 with eeprom not disabled
+ disable lib80211
+ disable ssb
+ disable bcma
+ disable usbnet
+ disable update-initramfs
+}
+
+# This internal function disables "staging"
+function disable_staging {
+ check_phase 2
+ backup_file "$(get_makefile MAKEFILE)"
+ # perl -i -ne 'print if ! /CONFIG_COMPAT_STAGING/ ' Makefile
+ sed -i '/CONFIG_COMPAT_STAGING/d' "$(get_makefile MAKEFILE)" || die
+}
+
+# This internal function disables "update-initramfs"
+function disable_update-initramfs
+{
+ check_phase 2
+ backup_file "$(get_makefile MAKEFILE)"
+ # perl -i -ne 'print if ! /update-initramfs/' Makefile
+ sed -i '/update-initramfs/d' "$(get_makefile MAKEFILE)" || die
+}
+
+function enable_only_drm {
+ check_phase 1
+ # backup_file Makefile
+ disable ethernet
+ disable staging
+ disable usbnet
+ disable var_03
+ disable bt
+ # rfkill may be needed if you enable b44 as you may have b43
+ disable rfkill
+ disable 80211
+}
+
+# This internal function registers filters for the ath Makefile
+function select_ath_driver
+{
+ check_phase 1
+ # backup_file $ATH_MAKEFILE
+ # perl -i -ne 'print if /'$1'/ || /CONFIG_ATH_/ || /ath-objs/ || /regd.o/ || /hw.o/ || /key.o/' $ATH_MAKEFILE
+ eval "CPD_ATH_MAKEFILE+=\" ${*} CONFIG_ATH_ ath-objs regd.o hw.o key.o\"" || die
+ disable var_01
+}
+
+# This internal function registers no-common filters for the ath Makefile
+function select_ath_no_common
+{
+ check_phase 1
+ # backup_file $ATH_MAKEFILE
+ # perl -i -ne 'print if /'$1'/' $ATH_MAKEFILE
+ eval "CPD_ATH_MAKEFILE+=\" ${*}\"" || die
+ disable var_01
+}
+
+function select_ath9k_driver
+{
+ check_phase 1
+ select_ath_driver CONFIG_ATH9K_HW
+ # In the future here we'll add stuff to disable ath9k_htc
+}
+
+function select_ath9k_driver_ap
+{
+ check_phase 1
+ select_ath9k_driver
+ # backup_file $COMPAT_CONFIG_CW
+ # perl -i -ne 'print if ! /CONFIG_COMPAT_ATH9K_RATE_CONTROL/ ' $COMPAT_CONFIG_CW
+ # this does not work with multipe drivers, since it's the only filter to that file
+ # It is only applied when only the ath9k_ap driver is selected and nothing else
+ # eval "CPD_COMPAT_CONFIG_CW+=\" CONFIG_COMPAT_ATH9K_RATE_CONTROL\"" || die
+}
+
+# This internal function registers filters for the ti Makefile
+function select_ti_drivers
+{
+ check_phase 1
+ select_drivers CONFIG_WL_TI
+ # select_drivers_from_makefile $TI_MAKEFILE $@
+ eval "CPD_TI_MAKEFILE+=\" ${*}\"" || die
+}
+
+# This internal function registers filters for the brcm80211 Makefile
+function select_brcm80211_driver
+{
+ check_phase 1
+ # backup_file $BRCM80211_MAKEFILE
+ # perl -i -ne 'print if /'$1'/ || /CONFIG_BRCMUTIL/ ' $BRCM80211_MAKEFILE
+ eval "CPD_BRCM80211_MAKEFILE+=\" ${*} CONFIG_BRCMUTIL\"" || die
+}
+
+function restore_file {
+ check_phase 3
+ local ORIG="${1%%.${BACKUP_EXT}}" || die
+ cp $1 $ORIG || die
+ rm -f $1 || die
+ echo -e "Restored makefile: ${CYAN}${ORIG}${NORMAL} (and removed backup)"
+}
+
+function restore_compat {
+ check_phase 3
+ local FILES=$(find ./ -type f -name *\."${BACKUP_EXT}") || die
+ local i
+ for i in $FILES; do
+ restore_file $i
+ done
+}
+
+if [ ! -f .compat_version ]; then
+ die "Must run $0 from the compat-drivers top level directory"
+fi
+
+# set phase to configure
+CPD_PHASE=1
+
+# loop over all arguments
+# This sets the configuration for each flag/module
+for arg in "$@"; do
+ # clear/set global vars
+ CPD_MODULE="$arg"
+ CPD_SELECTED_DRIVERS+=" $arg"
+ case "$arg" in
+ restore)
+ CPD_PHASE=3
+ restore_compat
+ exit 0
+ ;;
+ usage)
+ usage
+ exit 0
+ ;;
+ -q)
+ unset_colors || die
+ CPD_SELECTED_DRIVERS="${CPD_SELECTED_DRIVERS% -q}"
+ ;;
+ # Group drivers
+ atheros)
+ select_drivers CONFIG_ATH_CARDS \
+ CONFIG_COMPAT_ZD1211RW
+ disable staging
+ disable_bt_usb_ethernet_var
+ disable var_01
+ ;;
+ ath)
+ disable_bt_usb_ethernet_var
+ select_drivers CONFIG_ATH_CARDS
+ disable var_01
+ ;;
+ intel)
+ select_drivers CONFIG_IWLWIFI \
+ CONFIG_IWLEGACY \
+ CONFIG_IPW
+ disable staging
+ disable var
+ disable bt
+ disable ethernet
+ disable usbnet
+ ;;
+ iwlwifi)
+ select_drivers CONFIG_IWLWIFI
+ disable staging
+ disable var_01
+ disable bt
+ disable ethernet
+ disable usbnet
+ ;;
+ iwlegacy)
+ select_drivers CONFIG_IWLEGACY
+ disable staging
+ disable var_01
+ disable bt
+ disable ethernet
+ disable usbnet
+ ;;
+ rtl818x)
+ select_drivers CONFIG_RTL8180 CONFIG_RTL8187
+ disable staging
+ disable bt_usb_ethernet
+ disable ssb
+ disable bcma
+ disable lib80211
+ ;;
+ rtlwifi)
+ select_drivers CONFIG_RTL8192CE CONFIG_RTLWIFI
+ disable staging
+ disable_bt_usb_ethernet_var
+ disable lib80211
+ ;;
+ ti)
+ select_drivers CONFIG_WL_TI
+ disable_bt_usb_ethernet_var
+ disable staging
+ disable var_01
+ ;;
+ brcm80211)
+ disable staging
+ disable_bt_usb_ethernet_var
+ select_drivers CONFIG_BRCMUTIL \
+ CONFIG_BRCMFMAC \
+ CONFIG_BRCMSMAC
+ ;;
+ # Singular modules
+ ath5k)
+ disable staging
+ disable_bt_usb_ethernet_var
+ select_drivers CONFIG_ATH_CARDS
+ select_ath_driver CONFIG_ATH5K
+ #patch -p1 < enable-older-kernels/enable-2.6.23.patch
+ ;;
+ ath9k)
+ disable staging
+ disable_bt_usb_ethernet_var
+ select_drivers CONFIG_ATH_CARDS
+ select_ath9k_driver
+ ;;
+ ath9k_ap)
+ disable staging
+ disable_bt_usb_ethernet_var
+ select_drivers CONFIG_ATH_CARDS
+ select_ath9k_driver_ap
+ ;;
+ carl9170)
+ disable staging
+ disable_bt_usb_ethernet_var
+ select_drivers CONFIG_ATH_CARDS
+ select_ath_driver CONFIG_CARL9170
+ ;;
+ ath9k_htc)
+ disable staging
+ disable_bt_usb_ethernet_var
+ select_drivers CONFIG_ATH_CARDS
+ select_ath9k_driver
+ ;;
+ ath6kl)
+ disable staging
+ disable_bt_usb_ethernet_var
+ select_drivers CONFIG_ATH_CARDS
+ select_ath_driver CONFIG_ATH6KL
+ ;;
+ wil6210)
+ disable staging
+ disable_bt_usb_ethernet_var
+ select_drivers CONFIG_ATH_CARDS
+ select_ath_no_common CONFIG_WIL6210
+ ;;
+ brcmsmac)
+ disable staging
+ disable_bt_usb_ethernet_var
+ select_drivers CONFIG_BRCMSMAC
+ select_brcm80211_driver CONFIG_BRCMSMAC CONFIG_BRCMUTIL
+ ;;
+ brcmfmac)
+ disable staging
+ disable_bt_usb_ethernet_var
+ select_drivers CONFIG_BRCMFMAC
+ select_brcm80211_driver CONFIG_BRCMFMAC CONFIG_BRCMUTIL
+ ;;
+ zd1211rw)
+ select_drivers CONFIG_COMPAT_ZD1211RW
+ disable staging
+ disable var_01
+ ;;
+ b43)
+ disable staging
+ disable bt_usb_ethernet
+ disable eeprom
+ disable lib80211
+ select_drivers CONFIG_B43
+ ;;
+ rt2x00)
+ select_drivers CONFIG_RT2X00
+ disable staging
+ disable_bt_usb_ethernet
+ disable var_02
+ ;;
+ wl1251)
+ select_ti_drivers CONFIG_WL1251
+ disable staging
+ disable var_01
+ ;;
+ wl12xx)
+ select_ti_drivers CONFIG_WL12XX
+ disable staging
+ disable var_01
+ ;;
+ wl18xx)
+ select_ti_drivers CONFIG_WL18XX
+ disable staging
+ disable var_01
+ ;;
+ # Ethernet and Bluetooth drivers
+ atl1)
+ enable_only_ethernet
+ disable b44
+ # echo -e "obj-\$(CONFIG_ATL1) += atlx/" > "$(get_makefile DRIVERS_NET_ATHEROS)" || die
+ CPD_ADD_ATHEROS+="obj-\$(CONFIG_ATL1) += atlx/\n"
+ ;;
+ atl2)
+ enable_only_ethernet
+ disable b44
+ # echo -e "obj-\$(CONFIG_ATL2) += atlx/" > "$(get_makefile DRIVERS_NET_ATHEROS)" || die
+ CPD_ADD_ATHEROS+="obj-\$(CONFIG_ATL2) += atlx/\n"
+ ;;
+ atl1e)
+ enable_only_ethernet
+ disable b44
+ # echo -e "obj-\$(CONFIG_ATL1E) += atl1e/" > "$(get_makefile DRIVERS_NET_ATHEROS)" || die
+ CPD_ADD_ATHEROS+="obj-\$(CONFIG_ATL1E) += atl1e/\n"
+ ;;
+ atl1c)
+ enable_only_ethernet
+ disable b44
+ # echo -e "obj-\$(CONFIG_ATL1C) += atl1c/" > "$(get_makefile DRIVERS_NET_ATHEROS)" || die
+ CPD_ADD_ATHEROS+="obj-\$(CONFIG_ATL1C) += atl1c/\n"
+ ;;
+ alx)
+ enable_only_ethernet
+ disable b44
+ # echo -e "obj-\$(CONFIG_ALX) += alx/" > "$(get_makefile DRIVERS_NET_ATHEROS)" || die
+ CPD_ADD_ATHEROS+="obj-\$(CONFIG_ALX) += alx/\n"
+ ;;
+ atlxx)
+ select_drivers CONFIG_ATL1 CONFIG_ATL2 CONFIG_ATL1E CONFIG_ALX
+ enable_only_ethernet
+ disable b44
+ disable update-initramfs
+ ;;
+ bt)
+ select_drivers CONFIG_BT
+ disable var
+ disable ethernet
+ disable staging
+ disable 80211
+ ;;
+ i915)
+ enable_only_drm
+ ;;
+ drm)
+ enable_only_drm
+ ;;
+ *)
+ ./$0 usage
+ die "Unsupported driver: ${arg}"
+ exit 1
+ ;;
+ esac
+done
+
+# special for ath9k_ap
+# this filter is only applied when no other driver is selected
+if [ "${CPD_SELECTED_DRIVERS}" == " ath9k_ap" ]; then
+ eval "CPD_COMPAT_CONFIG_CW+=\" CONFIG_COMPAT_ATH9K_RATE_CONTROL\"" \
+ || die "Failed to apply special filter for ath9k_ap"
+fi
+
+if [[ ! -f built-in.o ]]; then
+ if [[ "$1" != "restore" ]]; then
+ echo -e "${PURPLE}Processing new driver-select request...${NORMAL}"
+ fi
+fi
+
+# This internal function checks if the first argument is contained in the rest
+# of the arguments
+function has {
+ local x=$1
+ shift
+ local y
+ for y in "$@"; do
+ [ "${y}" = "${x}" ] && return 0
+ done
+ return 1
+}
+
+# this internal function checks if both groups and single modules were selected
+# this is not supported
+function check_groups {
+ local mods=
+ local grps=
+ for CPD_MODULE in ${CPD_SELECTED_DRIVERS}; do
+ if has "${CPD_MODULE}" ${SUPPORTED_DRIVERS}; then
+ mods+=" ${CPD_MODULE}"
+ else
+ grps+=" ${CPD_MODULE}"
+ fi
+ done
+ [ ! "${mods}" == '' ] && [ ! "${grps}" == '' ] && \
+ die "Mixing group and single drivers is not supported by this script! Groups: <${grps}> Drivers: <${mods}>"
+}
+check_groups
+
+# set phase to write
+CPD_PHASE=2
+
+# Always backup the top level Makefile, unless restoring
+if [[ "$1" != "restore" ]]; then
+ backup_file Makefile
+fi
+
+# If a user selects a new driver make sure we clean up for them
+# first and also restore the backup makefiles then. Otherwise
+# we'll be trying to leave drivers on Makefiles which are not
+# already there from a previous run.
+if [ -f built-in.o ]; then
+ echo -e "${PURPLE}Old build found, going to clean this up first...${NORMAL}"
+ make clean
+ echo -e "${PURPLE}Restoring Makefiles...${NORMAL}"
+ ./$0 restore
+fi
+
+# This function reads the configuration (disable-actions and filters) for each
+# single active flag, then constructs and applies the common configuration set.
+function src_configure {
+ local use_enabled_list="${CPD_SELECTED_DRIVERS}"
+ # 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
+ local iuse
+ local dis
+ for iuse in ${use_enabled_list}; do
+ if [ "${iuse}" != "${iuse1}" ]; then
+ local disable_list_new=''
+ 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}"
+ fi
+ done
+ # sort and remove duplicates
+ disable_list=$(printf '%s\n' ${disable_list} | sort -u | tr '\n' ' ') || die
+
+ # prepend to atheros Makefile
+ if [ "${CPD_ADD_ATHEROS}" != '' ]; then
+ # ensure that backup file exists
+ backup_file "$(get_makefile DRIVERS_NET_ATHEROS)"
+ # prepend using backup
+ echo -e "${CPD_ADD_ATHEROS}"|cat - \
+ "$(get_makefile DRIVERS_NET_ATHEROS).${BACKUP_EXT}" > \
+ "$(get_makefile DRIVERS_NET_ATHEROS)" \
+ || die "Failed to prepend to atheros Makefile"
+ echo -e "Prepended to atheros Makefile ...${NORMAL}"
+ fi
+ # execute all filters for the Makefiles
+ local file
+ for file in ${CPD_MAKEFILES}; do
+ eval "local filter_list=\$CPD_${file}" || die
+ if [ -n "${filter_list}" ]; then
+ # sort and remove duplicates
+ filter_list=$(printf '%s\n' ${filter_list} | sort -u | tr '\n' ' ')\
+ || die
+ echo -e "Filtering ${CYAN}$(get_makefile ${file})${NORMAL} for: ${CYAN}${filter_list}${NORMAL}"
+ select_drivers_from_makefile "${file}" "${filter_list}" || die
+ fi
+ done
+ # execute common disable list
+ echo -e "Common disable list: ${CYAN}${disable_list}${NORMAL}"
+ for dis in ${disable_list}; do
+ echo -e "Running disable function: ${CYAN}disable_${dis}${NORMAL}"
+ eval "disable_${dis}" || die
+ done
+}
+
+# call src_configure ...
+src_configure || die "Failed on src_configure ..."