diff --git a/net-wireless/hostapd/hostapd-2.0.ebuild b/net-wireless/hostapd/hostapd-2.0.ebuild index 8366a21..4a6917f 100644 --- a/net-wireless/hostapd/hostapd-2.0.ebuild +++ b/net-wireless/hostapd/hostapd-2.0.ebuild @@ -4,7 +4,7 @@ EAPI="4" -inherit toolchain-funcs eutils +inherit toolchain-funcs eutils savedconfig flag-o-matic DESCRIPTION="IEEE 802.11 wireless LAN Host AP daemon" HOMEPAGE="http://hostap.epitest.fi" @@ -35,94 +35,98 @@ src_prepare() { "${S}/hostapd.conf" || die } +hostapd_config_option() { + local key="$1" ; shift + local val="$@" + + if ! grep -qE "^(#| )*CONFIG_${key}[ =]" "${CONFIG}" ; then + eqawarn "CONFIG_${key} is missing in defconfig" + echo >> "${CONFIG}" + echo "# .config imported from ${S}/defconfig is missing CONFIG_${key}" >> "${CONFIG}" + echo "# CONFIG_${key} is not set" >> "${CONFIG}" + fi + + if [[ ${val} == "n" ]] ; then + sed -i -re "s:^(#| )*CONFIG_${key}[ =].*:# CONFIG_${key} is not set:" "${CONFIG}" + else + sed -i -re "s:^(#| )*CONFIG_${key}[ =].*:CONFIG_${key}=${val}:" "${CONFIG}" + fi + + einfo $(grep -E "^(#| )*CONFIG_${key}[ =]" "${CONFIG}") +} + src_configure() { - local CONFIG="${S}/.config" + tc-export CC - # toolchain setup - echo "CC = $(tc-getCC)" > ${CONFIG} + #append-libs -L/usr/lib + # Add include path for madwifi-driver headers + use madwifi && append-cflags -I/usr/include/madwifi + + CONFIG="${S}/.config" + restore_config "${CONFIG}" + + [[ -f "${CONFIG}" ]] && return 0 + + einfo "Generating configuration based on defconfig" + cp "${S}/defconfig" "${CONFIG}" # EAP authentication methods - echo "CONFIG_EAP=y" >> ${CONFIG} - echo "CONFIG_EAP_MD5=y" >> ${CONFIG} + hostapd_config_option EAP y + hostapd_config_option EAP_MD5 y - if use ssl; then - # SSL authentication methods - echo "CONFIG_EAP_TLS=y" >> ${CONFIG} - echo "CONFIG_EAP_TTLS=y" >> ${CONFIG} - echo "CONFIG_EAP_MSCHAPV2=y" >> ${CONFIG} - echo "CONFIG_EAP_PEAP=y" >> ${CONFIG} - fi + # SSL authentication methods + hostapd_config_option EAP_TLS $(usex ssl y n) + hostapd_config_option EAP_TTLS $(usex ssl y n) + hostapd_config_option EAP_MSCHAPV2 $(usex ssl y n) + hostapd_config_option EAP_PEAP $(usex ssl y n) - if use wps; then - # Enable Wi-Fi Protected Setup - echo "CONFIG_WPS=y" >> ${CONFIG} - echo "CONFIG_WPS2=y" >> ${CONFIG} - echo "CONFIG_WPS_UPNP=y" >> ${CONFIG} - einfo "Enabling Wi-Fi Protected Setup support" - fi + # Enable Wi-Fi Protected Setup + hostapd_config_option WPS $(usex wps y n) + hostapd_config_option WPS2 $(usex wps y n) + hostapd_config_option WPS_UPNP $(usex wps y n) - echo "CONFIG_EAP_GTC=y" >> ${CONFIG} - echo "CONFIG_EAP_SIM=y" >> ${CONFIG} - echo "CONFIG_EAP_AKA=y" >> ${CONFIG} - echo "CONFIG_EAP_PAX=y" >> ${CONFIG} - echo "CONFIG_EAP_PSK=y" >> ${CONFIG} - echo "CONFIG_EAP_SAKE=y" >> ${CONFIG} - echo "CONFIG_EAP_GPSK=y" >> ${CONFIG} - echo "CONFIG_EAP_GPSK_SHA256=y" >> ${CONFIG} - - einfo "Enabling drivers: " + hostapd_config_option EAP_GTC y + hostapd_config_option EAP_SIM y + hostapd_config_option EAP_AKA y + hostapd_config_option EAP_PAX y + hostapd_config_option EAP_PSK y + hostapd_config_option EAP_SAKE y + hostapd_config_option EAP_GPSK y + hostapd_config_option EAP_GPSK_SHA256 y # drivers - echo "CONFIG_DRIVER_HOSTAP=y" >> ${CONFIG} - einfo " HostAP driver enabled" - echo "CONFIG_DRIVER_WIRED=y" >> ${CONFIG} - einfo " Wired driver enabled" - echo "CONFIG_DRIVER_PRISM54=y" >> ${CONFIG} - einfo " Prism54 driver enabled" - echo "CONFIG_DRIVER_NONE=y" >> ${CONFIG} - einfo " None driver enabled" - - if use madwifi; then - # Add include path for madwifi-driver headers - einfo " Madwifi driver enabled" - echo "CFLAGS += -I/usr/include/madwifi" >> ${CONFIG} - echo "CONFIG_DRIVER_MADWIFI=y" >> ${CONFIG} - else - einfo " Madwifi driver disabled" - fi - - einfo " nl80211 driver enabled" - echo "CONFIG_DRIVER_NL80211=y" >> ${CONFIG} - echo "LIBS += -L/usr/lib" >> ${CONFIG} + # TODO: Add support for BSD drivers + hostapd_config_option DRIVER_HOSTAP y + hostapd_config_option DRIVER_WIRED y + hostapd_config_option DRIVER_NONE y + hostapd_config_option DRIVER_MADWIFI $(usex madwifi y n) + hostapd_config_option DRIVER_NL80211 y # misc - echo "CONFIG_PKCS12=y" >> ${CONFIG} - echo "CONFIG_RADIUS_SERVER=y" >> ${CONFIG} - echo "CONFIG_IAPP=y" >> ${CONFIG} - echo "CONFIG_IEEE80211R=y" >> ${CONFIG} - echo "CONFIG_IEEE80211W=y" >> ${CONFIG} - echo "CONFIG_IEEE80211N=y" >> ${CONFIG} - echo "CONFIG_PEERKEY=y" >> ${CONFIG} - echo "CONFIG_RSN_PREAUTH=y" >> ${CONFIG} - echo "CONFIG_INTERWORKING=y" >> ${CONFIG} + hostapd_config_option PKCS12 y + hostapd_config_option RADIUS_SERVER y + hostapd_config_option IAPP y + hostapd_config_option IEEE80211R y + hostapd_config_option IEEE80211W y + hostapd_config_option IEEE80211N y + hostapd_config_option PEERKEY y + hostapd_config_option RSN_PREAUTH y + hostapd_config_option INTERWORKING y - if use ipv6; then - # IPv6 support - echo "CONFIG_IPV6=y" >> ${CONFIG} - fi + # IPv6 support + hostapd_config_option IPV6 $(usex ipv6 y n) # If we are using libnl 2.0 and above, enable support for it # Removed for now, since the 3.2 version is broken, and we don't # support it. if has_version ">=dev-libs/libnl-3.2"; then - echo "CONFIG_LIBNL32=y" >> .config + hostapd_config_option LIBNL32 y + else + hostapd_config_option LIBNL32 n fi - echo "CONFIG_VLAN_NETLINK=y" >> ${CONFIG} -# echo "CFLAGS+=-I${ROOT}usr/include/libnl3" >> ${CONFIG} - echo "CONFIG_FULL_DYNAMIC_VLAN=y" >> ${CONFIG} - - # TODO: Add support for BSD drivers + hostapd_config_option VLAN_NETLINK y + hostapd_config_option FULL_DYNAMIC_VLAN y default_src_configure } @@ -137,6 +141,8 @@ src_compile() { } src_install() { + save_config "${CONFIG}" + insinto /etc/${PN} doins ${PN}.{conf,accept,deny,eap_user,radius_clients,sim_db,wpa_psk}