summaryrefslogtreecommitdiff
path: root/net-wireless/compat-wireless/compat-wireless-2.6.34-r2.ebuild
blob: e2bb72e49d03f97425fa509280614b5db3950801 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# Copyright 1999-2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

EAPI="2"
inherit linux-mod linux-info versionator

##Stable
MY_P=${P/_rc/-rc}
MY_PV=v$(get_version_component_range 1-3)
DESCRIPTION="Stable kernel pre-release wifi subsystem backport"
HOMEPAGE="http://wireless.kernel.org/en/users/Download/stable"
SRC_URI="http://www.orbit-lab.org/kernel/${PN}-2.6-stable/${MY_PV}/${MY_P}.tar.bz2"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="amd64 x86"
IUSE="injection tinyversionoverride"

DEPEND=""
RDEPEND="=sys-kernel/linux-firmware-99999999"

S=${WORKDIR}/${MY_P}
RESTRICT="strip"

CONFIG_CHECK="!DYNAMIC_FTRACE"

pkg_setup() {
	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."
	if kernel_is -eq $(get_version_component_range 1) $(get_version_component_range 2) $(get_version_component_range 3); then
		if use tinyversionoverride; then
			ewarn "You have the tinyversionoverride use flag set which means you know for a fact that your"
			ewarn "kernel is older than the compat-wireless you are installing."
			ewarn "Most likely you have no clue what you are doing and should hit control-C now"
			ewarn "before you downgrade your system. Ten seconds to think about it."
			epause 10
		else
			ewarn "Your kernel version is most likely newer than the compat-wireless release you are"
			ewarn "trying to install. If you are certain that your kernel is older then you can set"
			ewarn "the tinyversionoverride use flag to override this safety check."
			epause 5
			die "Your kernel version is too close to the compat-wireless version to risk installation."
		fi
	fi
	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_ !"
}

src_prepare() {
	#whynot patch is against the makefile to fix general brokeness
	epatch "${FILESDIR}"/whynot-2.6.32.patch
	#0001 is a patch to fix monitor mode promisc for ath5k, a bug present for a very long time.
	#this patch should be merged soon and no longer needed.
	epatch "${FILESDIR}"/0001-ath5k-retain-promiscuous-setting.patch

	if use injection; then
		epatch "${FILESDIR}"/400[24]_*.patch
		epatch "${FILESDIR}"/mac80211.compat08082009.wl_frag+ack_v1.patch
		epatch "${FILESDIR}"/4013-runtime-enable-disable-of-mac80211-packet-injection.patch
		epatch "${FILESDIR}"/compat-chaos.patch
		epatch "${FILESDIR}"/rtl8187-mac80211-injection-speed-2.6.30-rc3.patch
		epatch "${FILESDIR}"/super_secret_patch.diff
	fi
}

src_compile() {
	addpredict "${KERNEL_DIR}"
	set_arch_to_kernel
	emake KVER="${KV_FULL}" || die "emake failed"
}

src_install() {
	for file in $(find -name \*.ko); do
		insinto "/lib/modules/${KV_FULL}/updates/$(dirname ${file})"
		doins "${file}" || die "failed to install module ${file}"
	done
	dosbin scripts/athenable scripts/b43load scripts/iwl-enable \
		scripts/madwifi-unload scripts/athload scripts/iwl-load \
		scripts/b43enable scripts/load.sh \
		scripts/unload.sh || die "script installation failed"

	dodir /usr/lib/compat-wireless
	exeinto /usr/lib/compat-wireless
	doexe scripts/modlib.sh || die

	dodoc README || die
	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
	einfo 'You may have problem if you do not run "depmod -ae" after this installation'
	einfo 'To switch to the new drivers without reboot run unload.sh then load.sh'
}

pkg_postrm() {
	remove_moduledb
}