summaryrefslogtreecommitdiff
blob: 6672d4a576881489d65b4a36e8495bc7070fc600 (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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# Copyright 1999-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/net-wireless/ubertooth/ubertooth-2012.10.1-r1.ebuild,v 1.1 2013/04/27 23:07:53 zerochaos Exp $

EAPI="5"

PYTHON_DEPEND="python? 2"
SUPPORT_PYTHON_ABIS="1"
RESTRICT_PYTHON_ABIS="3.*"

inherit multilib distutils

HOMEPAGE="http://ubertooth.sourceforge.net/"

LICENSE="GPL-2"
SLOT="0/1"
IUSE="+dfu clock_debug +specan +python ubertooth0-firmware +ubertooth1-firmware"
REQUIRED_USE="dfu? ( python )
		specan? ( python )
		ubertooth0-firmware? ( dfu )
		ubertooth1-firmware? ( dfu )
		python? ( || ( dfu specan ) )"
DEPEND="clock_debug? ( net-wireless/bluez )"
RDEPEND="${DEPEND}
	specan? ( virtual/libusb:1
		 >=dev-qt/qtgui-4.7.2:4
		>=dev-python/pyside-1.0.2
		>=dev-python/numpy-1.3
		>=dev-python/pyusb-1.0.0_alpha1 )
	dfu? ( virtual/libusb:1
		>=dev-python/pyusb-1.0.0_alpha1 )"

if [[ ${PV} == "9999" ]] ; then
	EGIT_REPO_URI="git://ubertooth.git.sourceforge.net/gitroot/ubertooth/ubertooth"
	SRC_URI=""
	inherit git-2
	KEYWORDS=""
	DEPEND="=net-libs/libbtbb-9999"
	RDEPEND="${RDEPEND}
		=net-libs/libbtbb-9999:="
	DEPEND="ubertooth0-firmware? ( sys-devel/crossdev )
		ubertooth1-firmware? ( sys-devel/crossdev )"
else
	MY_P=${P/\./-}
	MY_P=${MY_P/./-R}
	S=${WORKDIR}/${MY_P}
	SRC_URI="mirror://sourceforge/${PN}/${MY_P}.tar.xz"
	#re-add arm keyword after making a lib-only target
	KEYWORDS="~amd64 ~arm ~x86"
	DEPEND=">=net-libs/libbtbb-${PV}:="
	RDEPEND="${RDEPEND}
		>=net-libs/libbtbb-${PV}"
fi
DESCRIPTION="An open source wireless development platform suitable for Bluetooth experimentation"

have_clock_debug() {
	use clock_debug && echo "true" || echo "false"
}

pkg_setup() {
if [[ ${PV} == "9999" ]] ; then
	#ebegin "arm-none-eabi-gcc"
	#if type -p arm-none-eabi-gcc > /dev/null ; then
	#	eend 0
	#else
	#	eend 1
	#	eerror "Failed to locate 'arm-none-eabi-gcc' in \$PATH. You can install the needed toolchain using:"
	#	eerror "  $ crossdev --genv 'USE=\"-openmp -fortran\"' -s4 -t arm-none-eabi"
	#	die "arm-none-eabi toolchain not found"
	#fi
	ewarn "bypassing live pkg_setup because firmware building doesn't work"
fi
	if use python; then
	#I would prefer like this but we can't multiconditional PYTHON_DEPEND in EAPI4
	#if use dfu || use specan; then
		python_pkg_setup;
		DISTUTILS_SETUP_FILES=()
		if use dfu; then
			DISTUTILS_SETUP_FILES+=("${S}/host/usb_dfu|setup.py")
			PYTHON_MODNAME="dfu"
		fi
		if use specan; then
			DISTUTILS_SETUP_FILES+=("${S}/host/specan_ui|setup.py")
			PYTHON_MODNAME+=" specan"
		fi
	fi
}

src_prepare() {
	use python && distutils_src_prepare
}

src_compile() {
	cd "${S}/host/bluetooth_rxtx" || die
	emake \
	clock_debug="$(have_clock_debug)"

	use python && distutils_src_compile
	if [[ ${PV} == "9999" ]] ; then
		#cd "${S}"/firmware/bluetooth_rxtx || die
		#if use ubertooth0-firmware; then
		#	SVN_REV_NUM="-D'SVN_REV_NUM'=${ESVN_WC_REVISION}" BOARD=UBERTOOTH_ZERO emake -j1
		#	mv bluetooth_rxtx.bin bluetooth_rxtx_U0.bin || die
		#	emake clean
		#fi
		#if use ubertooth1-firmware; then
		#	SVN_REV_NUM="-D'SVN_REV_NUM'=${ESVN_WC_REVISION}" emake -j1
		#	mv bluetooth_rxtx.bin bluetooth_rxtx_U1.bin || die
		#fi
		ewarn "bypassing firmware build because the resulting firmware fails"
	fi
}

src_install() {
	cd host || die
	dobin bluetooth_rxtx/ubertooth-dump bluetooth_rxtx/ubertooth-lap \
		bluetooth_rxtx/ubertooth-btle bluetooth_rxtx/ubertooth-uap \
		bluetooth_rxtx/ubertooth-hop bluetooth_rxtx/ubertooth-util
	use clock_debug && dobin bluetooth_rxtx/ubertooth-follow

	use python && distutils_src_install
	use specan && dobin specan_ui/ubertooth-specan-ui
	use dfu && dobin usb_dfu/ubertooth-dfu

	dolib.so bluetooth_rxtx/libubertooth.so.0.1
	dosym libubertooth.so.0.1 /usr/$(get_libdir)/libubertooth.so.0
	dosym libubertooth.so.0.1 /usr/$(get_libdir)/libubertooth.so

	insinto /lib/firmware
	cd "${S}"
	if [[ ${PV} == "9999" ]] ; then
		#use ubertooth0-firmware && doins firmware/bluetooth_rxtx/bluetooth_rxtx_U0.bin
	        #use ubertooth1-firmware && doins firmware/bluetooth_rxtx/bluetooth_rxtx_U1.bin
		ewarn "bypassing firmware install because the built firmware doesn't work"
	else
		use ubertooth0-firmware && newins ubertooth-zero-firmware-bin/bluetooth_rxtx.bin bluetooth_rxtx_U0.bin
	        use ubertooth1-firmware && newins ubertooth-one-firmware-bin/bluetooth_rxtx.bin bluetooth_rxtx_U1.bin
	fi

	insinto /lib/udev/rules.d/
	doins "${S}"/host/bluetooth_rxtx/40-ubertooth.rules

	elog "Everyone can read from the ubertooth, but to talk to it"
	elog "your user needs to be in the usb group."
}

pkg_postinst() {
	use python && distutils_pkg_postinst

	#if use ubertooth0-firmware || use ubertooth1-firmware; then
	#	ewarn "currently the firmware builds using cross dev but is completely"
	#	ewarn "NON-FUNCTIONAL.  This is supported for development only."
	#	ewarn "If you do not know what you are doing to NOT install this version"
	#	ewarn "of the firmware. If you ignore this warning and break your device"
	#	ewarn "you can find repair instructions at ${HOMEPAGE}"
	#	ewarn "You have been warned."
	#fi
}

pkg_postrm() {
	use python && distutils_pkg_postrm
}