summaryrefslogtreecommitdiff
blob: 05698a0f641565fc0b5be4d696d3fb43de71a551 (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
# Copyright 1999-2012 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/net-wireless/ubertooth/ubertooth-9999.ebuild,v 1.10 2012/08/31 03:55:07 zerochaos Exp $

EAPI="4"

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"
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
		 >=x11-libs/qt-gui-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_PV="${PV/p/r}"
	MY_PV="${MY_PV/0.0_/}"
	SRC_URI="mirror://sourceforge/${PN}/${PN}-${MY_PV}.tar.gz"
	#re-add arm keyword after making a lib-only target
	KEYWORDS="~amd64 ~x86"
	S="${WORKDIR}/${PN}-${MY_PV}/"
	DEPEND=">=net-libs/libbtbb-0.8"
	RDEPEND="${RDEPEND}
		>=net-libs/libbtbb-0.8"
fi
DESCRIPTION="An open source wireless development platform suitable for Bluetooth experimentation"

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

pkg_setup() {
	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
	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_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
	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

	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
	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
}