diff options
Diffstat (limited to 'sys-kernel/compat-drivers/files/compat-drivers-3.8-driver-select')
-rwxr-xr-x | sys-kernel/compat-drivers/files/compat-drivers-3.8-driver-select | 845 |
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 ..." |