tar_em_up.sh 9.33 KB
Newer Older
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
1
2
3
4
5
6
7
8
9
10
#!/bin/bash
# super-simplistic installer for l2ork things by Ivica Ico Bukvic <ico@vt.edu>
# for info on L2Ork visit http://l2ork.music.vt.edu

if [ $# -eq 0 ] # should check for no arguments
then
	echo
	echo "   Usage: ./tar_em_up.sh -option1 -option2 ..."
	echo "   Options:"
	echo "     -a    l2ork addon to the dev package"
Ivica Bukvic's avatar
Ivica Bukvic committed
11
12
	echo "     -b    build a deb (incremental, all platforms)"
	echo "     -B    build a deb (complete recompile)"
13
14
	echo "     -c    core Pd source tarball"
	echo "     -d    whole dev folder tarball"
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
15
16
17
	echo "     -e    everything"
	echo "     -f    full installer (incremental)"
	echo "     -F    full installer (complete recompile)"
18
	echo "     -n    skip package creation (-bB, -fF)"
Ivica Bukvic's avatar
Ivica Bukvic committed
19
20
21
	echo "     -R    build a Raspberry Pi deb (complete recompile)"
	echo "     -r    build a Raspberry Pi deb (incremental)"
	echo "     -w    install custom version of cwiid system-wide"
22
23
	echo "     -z    build a Windows installer (incremental)"
	echo "     -Z    build a Windows installer (complete recompile)"
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
24
	echo
25
26
27
28
29
	echo "   For custom install locations do the following before"
	echo "   running this script:"
	echo
	echo "           export inst_dir=/some/custom/location"
	echo
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
30
31
32
33
34
35
36
37
	exit 1
fi

addon=0
deb=0
core=0
dev=0
full=0
Ivica Bukvic's avatar
Ivica Bukvic committed
38
sys_cwiid=0
Ivica Bukvic's avatar
Ivica Bukvic committed
39
rpi=0
40
pkg=1
41
inno=0
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
42

43
inst_dir=${inst_dir:-/usr/local}
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
44

45
46
47
48
49
50
51
52
# Get the OS we're running under, normalized to names that can be used
# to fetch the nwjs binaries below

os=`uname | tr '[:upper:]' '[:lower:]'`
if [[ $os == *"mingw32"* ]]; then
	os=win
fi

53
54
55
56
57
58
59
60
61
# Fetch the nw.js binary if we haven't already. We want to fetch it even
# for building with no libs, so we do it before all options
echo nwjs-sdk-v0.16.0-`uname | tr '[:upper:]' '[:lower:]'`
if [ ! -d "../pd/nw/nw" ]; then
	if [ `getconf LONG_BIT` -eq 32 ]; then
		arch="ia32"
	else
		arch="x64"
	fi
62

63
64
65
66
67
	# for rpi
	if [ `uname -m` -eq "armv7l" ]; then
		arch="armv7l"
	fi

68
69
70
71
72
73
74
	if [[ $os == "win" ]]; then
		ext="zip"
		# We need the lts version to be able to run on XP. For
                # simplicity we use that same version for 64 bit Windows, too
		nwjs_version="v0.14.7"
	else
		ext="tar.gz"
75
76
77
78
79
80
		# temporary kluge for rpi-- only 0.15.1 is available atm
		if [ `uname -m` -eq "armv7l" ]; then
			nwjs_version="v0.15.1"
		else
			nwjs_version="v0.16.1"
		fi
81
82
	fi

83
84
85
	nwjs="nwjs-sdk"
	nwjs_dirname=${nwjs}-${nwjs_version}-${os}-${arch}
	nwjs_filename=${nwjs_dirname}.${ext}
86
87
	nwjs_url=https://git.purrdata.net/jwilkes/nwjs-binaries/raw/master
	nwjs_url=${nwjs_url}/$nwjs_filename
88
89
90
	echo "Fetching the nwjs binary from"
	echo "$nwjs_url"
	wget $nwjs_url
91
92
93
94
95
	if [[ $os == "win" ]]; then
		unzip $nwjs_filename
	else
		tar -xf $nwjs_filename
	fi
96
	mv $nwjs_dirname ../pd/nw/nw
97
98
99
100
101
	# make sure the nw binary is executable on GNU/Linux and OSX
	if [[ $os != "win" ]]; then
		chmod 755 ../pd/nw/nw/nw
	fi
	chmod 755 ../pd/nw/nw/nw
102
103
104
	rm $nwjs_filename
fi

105
106
107
108
109
110
111
112
113
114
115
116
# For Windows, fetch the ASIO SDK if we don't have it already
if [[ $os == "win" ]]; then
	if [ ! -d "../pd/lib" ]; then
		mkdir ../pd/lib
		wget http://www.steinberg.net/sdk_downloads/asiosdk2.3.zip
		unzip asiosdk2.3.zip
		mv ASIOSDK2.3 ../pd/lib
	fi
fi


while getopts ":abBcdefFnRruwzZ" Option
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
do case $Option in
		a)		addon=1;;

		b)		deb=1
				inst_dir=/usr;;

		B)		deb=2
				inst_dir=/usr;;

		c)		core=1;;

		d)		dev=1;;

		e)		addon=1
				core=1
				dev=1
				full=1;;

		f)		full=1;;

		F)		full=2;;

139
140
		n)		pkg=0;;

141
142
143
144
145
146
147
148
		R)		deb=2
				inst_dir=/usr
				rpi=1;;

		r)		deb=1
				inst_dir=/usr
				rpi=1;;

Ivica Bukvic's avatar
Ivica Bukvic committed
149
		w)		sys_cwiid=1
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
150
151
				;;

152
153
154
155
156
157
		z)		inno=1
				inst_dir=/usr;;

		Z)		inno=2
				inst_dir=/usr;;

Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
158
159
160
161
		*)		echo "Error: unknown option";;
	esac
done

162
163
export TAR_EM_UP_PREFIX=$inst_dir

Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
cd ../

if [ $core -eq 1 ]
then
	echo "core Pd..."
	rm -f ../Pd-l2ork-`date +%Y%m%d`.tar.bz2 2> /dev/null
	cd pd/src/
	make clean
	cd ../../
	tar -jcf ../Pd-l2ork-`date +%Y%m%d`.tar.bz2 pd
fi

if [ $dev -eq 1 ]
then
	echo "Pd dev package..."
Ivica Bukvic's avatar
Ivica Bukvic committed
179
	#cd doc/
180
	#svn checkout https://pure-data.svn.sourceforge.net/svnroot/pure-data/trunk/doc .
Ivica Bukvic's avatar
Ivica Bukvic committed
181
182
	#cp -f ../l2ork_addons/doc/Makefile .
	#cd ..
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
	cd externals/miXed
	make clean
	cd ../
	make distclean
	cd ../pd/src
	make distclean
	cd ../../Gem/src/
	make distclean
	rm -rf ./.libs
	rm -rf ./*/.libs
	cd ../
	make distclean
	rm gemglutwindow.pd_linux
	rm Gem.pd_linux
	cd ../packages/linux_make
	make distclean
199
200
201
	cd ../../
	gitfolder=`basename $PWD`
	cd ../
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
202
203
	rm -f pd-l2ork-dev-`date +%Y%m%d`.tar.bz2 2> /dev/null
	echo "tar dev installer..."
204
205
	tar -jcf pd-l2ork-dev-`date +%Y%m%d`.tar.bz2 $gitfolder
	cd $gitfolder
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
206
207
fi

208
if [ $full -gt 0 -o $deb -gt 0 -o $inno -gt 0 ]
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
209
then
210
211
	echo "Pd-L2Ork full installer... IMPORTANT! To ensure you have the most up-to-date submodules, this process requires internet connection to pull sources from various repositories..."

212
213
214
	if [ -d .git ]; then
		# check if Gem submodule is empty, and if so do first init
		if [ "$(ls -A Gem)" ]; then
215
216
			git submodule update
			#git submodule foreach git pull origin master
217
		else
218
			# init all submodules (only necessary the first time)
219
			git submodule init
220
221
			git submodule update
			#git submodule foreach git pull origin master
222
		fi
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
223
224
225
	fi


226
	if [ $full -eq 2 -o $deb -eq 2 -o $inno -eq 2 ]
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
227
228
229
230
231
232
	then
	#	echo "Since we are doing a complete recompile we are assuming we will need to install l2ork version of the cwiid library. You will need to remove any existing cwiid libraries manually as they will clash with this one. L2Ork version is fully backwards compatible while also offering unique features like full extension support including the passthrough mode. YOU SHOULD REMOVE EXISTING CWIID LIBRARIES PRIOR TO RUNNING THIS INSTALL... You will also have to enter sudo password to install these... Press any key to continue or CTRL+C to cancel install..."
	#	read dummy
		# clean files that may remain stuck even after doing global make clean (if any)
		cd externals/miXed
		make clean
233
234
235
		cd ../
		make gem_clean
		cd ../Gem/src/
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
236
237
238
239
240
241
242
243
244
		make distclean
		rm -rf ./.libs
		rm -rf ./*/.libs
		cd ../
		make distclean
		rm gemglutwindow.pd_linux
		rm Gem.pd_linux
		aclocal
		./autogen.sh
245
		export INCREMENTAL=""
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
246
247
	else
		cd Gem/
248
		export INCREMENTAL="yes"
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
249
	fi
250
	cd ../pd/src && aclocal && autoconf
251
252
253
254
255
256
	if [[ $os == "win" ]]; then
		cd ../../packages/win32_inno
	else
		cd ../../packages/linux_make
	fi
	if [ $full -gt 1 -o $deb -eq 2 -o $inno -eq 2 ]
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
257
258
	then
		make distclean
259
260
261
262
263
264
265
		cp ../../pd/src/g_all_guis.h ../../externals/build/include
		cp ../../pd/src/g_canvas.h ../../externals/build/include
		cp ../../pd/src/m_imp.h ../../externals/build/include
		cp ../../pd/src/m_pd.h ../../externals/build/include
		cp ../../pd/src/s_stuff.h ../../externals/build/include
		cp ../../pd/src/t_tk.h ../../externals/build/include
		cp ../../pd/src/g_all_guis.h ../../externals/build/include								
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
266
267
		rm -rf build/
	fi
Ivica Bukvic's avatar
Ivica Bukvic committed
268
269
270
271
	if [ $rpi -eq 0 ]
	then
		echo "installing desktop version..."
		cp -f debian/control.desktop debian/control
272
		cp -f ../../l2ork_addons/flext/config-lnx-pd-gcc.txt.intel ../../externals/grill/trunk/flext/buildsys/config-lnx-pd-gcc.txt
Ivica Bukvic's avatar
Ivica Bukvic committed
273
274
275
	else
		echo "installing raspbian version..."
		cp -f debian/control.raspbian debian/control
276
		cp -f ../../l2ork_addons/flext/config-lnx-pd-gcc.txt.rpi ../../externals/grill/trunk/flext/buildsys/config-lnx-pd-gcc.txt
Ivica Bukvic's avatar
Ivica Bukvic committed
277
278
		cat ../../externals/OSCx/src/Makefile | sed -e s/-lpd//g > ../../externals/OSCx/src/Makefile
	fi
279
280
281
282
283
284
285
	if [[ $os == "win" ]]; then
		echo "Making Windows package..."
		echo `pwd`
		make install && make package
	else
		make install prefix=$inst_dir
	fi
286
	echo "copying pd-l2ork-specific externals..."
287
288
	# create images folder
	mkdir -p ../../packages/linux_make/build$inst_dir/lib/pd-l2ork/extra/images
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
289
290
	# patch_name
	# spectdelay
291
292
293
294
295
296
297
298
299
300
301
	if [[ $os == "win" ]]; then
		cd ../../l2ork_addons
	else
		cd ../../l2ork_addons/spectdelay/spectdelay~
		./linux-install.sh
		cp -f spectdelay~.pd_linux ../../../packages/linux_make/build$inst_dir/lib/pd-l2ork/extra
		cp -f spectdelay~-help.pd ../../../packages/linux_make/build$inst_dir/lib/pd-l2ork/extra
		cp -f array* ../../../packages/linux_make/build$inst_dir/lib/pd-l2ork/extra
		# return to l2ork_addons folder
		cd ../../
	fi
Ivica Bukvic's avatar
Ivica Bukvic committed
302
	# install raspberry pi externals (if applicable)
303
	if [ $inno -eq 0 ]; then
304
305
306
307
308
309
310
311
		cd raspberry_pi
		./makeall.sh
		cp -f disis_gpio/disis_gpio.pd_linux ../../packages/linux_make/build$inst_dir/lib/pd-l2ork/extra
		cp -f disis_gpio/disis_gpio-help.pd ../../packages/linux_make/build$inst_dir/lib/pd-l2ork/extra
		cp -f disis_spi/disis_spi.pd_linux ../../packages/linux_make/build$inst_dir/lib/pd-l2ork/extra
		cp -f disis_spi/disis_spi-help.pd ../../packages/linux_make/build$inst_dir/lib/pd-l2ork/extra
		cd ../
	fi
312

313
	echo "done with l2ork addons."
314
	cd ../
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
	# finish install for deb
	if [ $inno -eq 0 ]; then
		cd packages/linux_make
		rm -f build/usr/local/lib/pd
		if [ $pkg -gt 0 ]; then
		echo "tar full installer..."
		if [ $deb -gt 0 ]
		then
			cd build/
			rm -rf DEBIAN/ etc/
			cd ../
			make deb prefix=$inst_dir
		else
			make tarbz2 prefix=$inst_dir
		fi
		echo "move full installer..."
		if [ $deb -gt 0 ]
		then
			mv *.deb ../../../
		else
			#rm -f ../../../Pd-l2ork-full-`uname -m`-`date +%Y%m%d`.tar.bz2 2> /dev/null
			#mv build/Pd*bz2 ../../../Pd-l2ork-full-`uname -m`-`date +%Y%m%d`.tar.bz2
			mv -f build/pd*bz2 ../../..
		fi
		elif [ $deb -gt 0 ]; then
			make debstage prefix=$inst_dir
		fi
		cd ../../
343
	fi
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
344
345
346
347
348
fi

if [ $addon -eq 1 ]
then
	echo "l2ork addons..."
349
	rm -f ../l2ork_addons-`uname -m`-`date +%Y%m%d`.tar.bz2 2> /dev/null
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
350
	#cp -rf /usr/local/lib/pd/* l2ork_addons/externals/
351
	tar -jcf ../l2ork_addons-`uname -m`-`date +%Y%m%d`.tar.bz2 l2ork_addons
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
352
353
354
355
356
357
358
fi

cd l2ork_addons/

echo "done."

exit 0