summaryrefslogtreecommitdiff
blob: f058950e8fcff8789f2f3a8d51aa7fcfd96e6fbe (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
163
164
165
166
167
168
169
# Copyright 1999-2018 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=6

inherit java-pkg-2 java-ant-2 gnome2-utils

DESCRIPTION="An open-source AVR electronics prototyping platform"
HOMEPAGE="https://arduino.cc/ https://github.com/arduino/"

ARDUINO_LIBRARIES=(
	"Firmata 2.5.6"
	"Bridge 1.6.3"
	"Robot_Control 1.0.4"
	"Robot_Motor 1.0.3"
	"RobotIRremote 2.0.0"
	"SpacebrewYun 1.0.1"
	"Temboo 1.2.1"
	"Esplora 1.0.4"
	"Mouse 1.0.1"
	"Keyboard 1.0.1"
	"SD 1.1.1"
	"Servo 1.1.2"
	"LiquidCrystal 1.0.7"
	"Adafruit_CircuitPlayground 1.6.8 https://github.com/Adafruit/Adafruit_CircuitPlayground/archive/1.6.8.zip"
	"WiFi101-Updater-ArduinoIDE-Plugin 0.9.1 https://github.com/arduino-libraries/WiFi101-FirmwareUpdater-Plugin/releases/download/v0.9.1/WiFi101-Updater-ArduinoIDE-Plugin-0.9.1.zip build/shared/"
)

for lib in "${ARDUINO_LIBRARIES[@]}"; do
	lib=( $lib )
	default_url="https://github.com/arduino-libraries/${lib[0]}/archive/${lib[1]}.zip"
	url=${lib[2]:-$default_url}
	ARDUINO_LIBRARIES_URI+=" ${url} -> ${P}-${lib[0]}-${lib[1]}.zip"
done

ARDUINO_DOCS=(
	"reference-1.6.6-3"
	"Galileo_help_files-1.6.2"
	"Edison_help_files-1.6.2"
)

for docname in "${ARDUINO_DOCS[@]}"; do
	ARDUINO_DOCS_URI+=" https://downloads.arduino.cc/${docname}.zip -> ${P}-${docname}.zip"
done

SRC_URI="https://github.com/arduino/Arduino/archive/${PV}.tar.gz -> ${P}.tar.gz
	${ARDUINO_LIBRARIES_URI}
	doc? (
		${ARDUINO_DOCS_URI}
	)"

LICENSE="GPL-2 LGPL-2.1 CC-BY-SA-3.0"
SLOT="0"
KEYWORDS="amd64 x86"

# bincheck RESTRICT is needed because firmware that ships with arduino contains code that makes
# scanelf bark. It's also why we need a separate package for arduino-listserialportsc because if
# we install it in the context of this package, we will get QA notices telling us we're doing a
# bad thing.
RESTRICT="strip"
QA_PREBUILT="usr/share/arduino/hardware/arduino/avr/firmwares/*
	usr/share/arduino/libraries/WiFi/extras/*"
IUSE="doc"

CDEPEND="dev-embedded/arduino-builder"

RDEPEND="${CDEPEND}
	>=dev-util/astyle-3.1[java]
	dev-embedded/arduino-listserialportsc
	>=virtual/jre-1.8"

DEPEND="${CDEPEND}
	app-arch/unzip
	>=virtual/jdk-1.8"

EANT_BUILD_TARGET="build"
# don't run the default "javadoc" target, we don't have one.
EANT_DOC_TARGET=""
EANT_BUILD_XML="build/build.xml"
EANT_EXTRA_ARGS="-Dno_arduino_builder=1 -Dlocal_sources=1"

S="${WORKDIR}/Arduino-${PV}"
SHARE="/usr/share/${PN}"

src_unpack() {
	# We don't want to unpack libraries, just move zip files into the work dir
	unpack `echo ${A} | cut -d ' ' -f1`
	local lib
	for lib in "${ARDUINO_LIBRARIES[@]}"; do
		lib=( $lib )
		local destfolder=${lib[3]:-build/}
		cp "${DISTDIR}/${P}-${lib[0]}-${lib[1]}.zip" "${S}/${destfolder}/${lib[0]}-${lib[1]}.zip" || die
	done
	if use doc; then
		local docname
		for docname in "${ARDUINO_DOCS[@]}"; do
			cp "${DISTDIR}/${P}-${docname}.zip" "${S}/build/shared/${docname}.zip" || die
		done
	fi
}

src_prepare() {
	# We need to disable astyle/listserialportsc and toolchain (avr-gcc, avrdude) bundling.
	eapply "${FILESDIR}/${PN}-1.8.5-build.xml.patch"

	# We need to replace relative paths for toolchain executable by paths to system ones.
	eapply "${FILESDIR}/${PN}-1.8.5-avr-platform.txt.patch"

	# We need to load system astyle/listserialportsc instead of bundled ones.
	eapply "${FILESDIR}/${PN}-1.8.5-lib-loading.patch"
	default
}

src_compile() {
	if ! use doc; then
		EANT_EXTRA_ARGS+=" -Dno_docs=1"
	fi
	java-pkg-2_src_compile
}

src_install() {
	cd "${S}"/build/linux/work || die

	java-pkg_dojar lib/*.jar
	java-pkg_dolauncher ${PN} \
		--pwd "${SHARE}" \
		--main "processing.app.Base" \
		--java_args "-DAPP_DIR=${SHARE} -Djava.library.path=${EPREFIX}/usr/$(get_libdir)"

	# Install libraries
	insinto "${SHARE}"

	doins -r examples hardware lib libraries tools

	# In upstream's build process, we copy these fiels below from the bundled arduino-builder.
	# Here we do the same thing, but from the system arduino-builder.
	dosym "${EPREFIX}/usr/share/arduino-builder/platform.txt" "${SHARE}/hardware/platform.txt"
	dosym "${EPREFIX}/usr/share/arduino-builder/platform.keys.rewrite.txt" "${SHARE}/hardware/platform.keys.rewrite.txt"
	dosym "${EPREFIX}/usr/bin/arduino-builder" "${SHARE}/arduino-builder"

	# hardware/tools/avr needs to exist or arduino-builder will
	# complain about missing required -tools arg
	dodir "${SHARE}/hardware/tools/avr"

	if use doc; then
		HTML_DOCS=( reference )
		einstalldocs

		# arduino expects its doc in its "main" directory. symlink it.
		dosym "${EPREFIX}/usr/share/doc/${PF}/html/reference" "${SHARE}/reference"
	fi

	# Install menu and icons
	domenu "${FILESDIR}/${PN}.desktop"
	cd lib/icons || die
	local icondir
	for icondir in *; do
		# icondir name is something like "24x24" we want the "24" part
		local iconsize=`cut -dx -f1 <<< "${icondir}"`
		newicon -s $iconsize \
			"${icondir}/apps/arduino.png" \
			"${PN}.png"
	done
}

pkg_postinst() {
	gnome2_icon_cache_update
	[[ ! -x /usr/bin/avr-g++ ]] && ewarn "Missing avr-g++; you need to crossdev -s4 avr"
}