tar_em_up.sh 11.4 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"
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
22
	echo
23
24
25
26
27
	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
28
29
30
31
32
33
34
35
	exit 1
fi

addon=0
deb=0
core=0
dev=0
full=0
Ivica Bukvic's avatar
Ivica Bukvic committed
36
sys_cwiid=0
Ivica Bukvic's avatar
Ivica Bukvic committed
37
rpi=0
38
pkg=1
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
39

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

42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# 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
	# fetch the nw.js binary (unfortunately over http...)
	os=`uname | tr '[:upper:]' '[:lower:]'`
	arch=""
	if [ `getconf LONG_BIT` -eq 32 ]; then
		arch="ia32"
	else
		arch="x64"
	fi
	ext="tar.gz"
	nwjs="nwjs-sdk"
	nwjs_version="v0.16.0"
	nwjs_dirname=${nwjs}-${nwjs_version}-${os}-${arch}
	nwjs_filename=${nwjs_dirname}.${ext}
59
60
	nwjs_url=https://git.purrdata.net/jwilkes/nwjs-binaries/raw/master
	nwjs_url=${nwjs_url}/$nwjs_filename
61
62
63
64
65
66
67
68
	echo "Fetching the nwjs binary from"
	echo "$nwjs_url"
	wget $nwjs_url
	tar -xf $nwjs_filename
	mv $nwjs_dirname ../pd/nw/nw
	rm $nwjs_filename
fi

69
while getopts ":abBcdefFnRruw" Option
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
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;;

92
93
		n)		pkg=0;;

94
95
96
97
98
99
100
101
		R)		deb=2
				inst_dir=/usr
				rpi=1;;

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

Ivica Bukvic's avatar
Ivica Bukvic committed
102
		w)		sys_cwiid=1
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
103
104
105
106
107
108
				;;

		*)		echo "Error: unknown option";;
	esac
done

109
110
export TAR_EM_UP_PREFIX=$inst_dir

Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
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
126
	#cd doc/
127
	#svn checkout https://pure-data.svn.sourceforge.net/svnroot/pure-data/trunk/doc .
Ivica Bukvic's avatar
Ivica Bukvic committed
128
129
	#cp -f ../l2ork_addons/doc/Makefile .
	#cd ..
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
	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
146
147
148
	cd ../../
	gitfolder=`basename $PWD`
	cd ../
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
149
150
	rm -f pd-l2ork-dev-`date +%Y%m%d`.tar.bz2 2> /dev/null
	echo "tar dev installer..."
151
152
	tar -jcf pd-l2ork-dev-`date +%Y%m%d`.tar.bz2 $gitfolder
	cd $gitfolder
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
153
154
155
156
fi

if [ $full -gt 0 -o $deb -gt 0 ]
then
157
158
	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..."

159
160
161
	if [ -d .git ]; then
		# check if Gem submodule is empty, and if so do first init
		if [ "$(ls -A Gem)" ]; then
162
163
			git submodule update
			#git submodule foreach git pull origin master
164
		else
165
			# init all submodules (only necessary the first time)
166
			git submodule init
167
168
			git submodule update
			#git submodule foreach git pull origin master
169
		fi
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
170
171
	fi

172
173
174
175
176
	# update the include files to be safe
	#if [ ! -d "/usr/local/include/pdl2ork" ]; then
	#	sudo mkdir /usr/local/include/pdl2ork
	#fi

Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
	#if [ $full -eq 3 ]
	#then
	#	echo "IMPORTANT! If you are already running vanilla Pd or Pd-extended, or have a custom installation of Pd-l2ork at a location other than /usr/local/lib/pd-l2ork, you will want to EITHER uninstall all older versions of Pd-l2ork and/or other versions of pd OR manually pre-install Pd-l2ork includes in order to ensure that any third-party externals that rely on the global Pd-l2ork includes reference the right versions of the said files. Failing to do so may result in incorrectly compiled externals that will definitely crash Pd-l2ork. You can install the includes into their default dir /usr/local/include by typing following commands:"
	#	echo
	#	echo "sudo cp -f -v pd/src/g_all_guis.h /usr/local/include/pdl2ork/"
	#	echo "sudo cp -f -v pd/src/g_canvas.h /usr/local/include/pdl2ork/"
	#	echo "sudo cp -f -v pd/src/m_imp.h /usr/local/include/pdl2ork/"
	#	echo "sudo cp -f -v pd/src/m_pd.h /usr/local/include/pdl2ork/"
	#	echo "sudo cp -f -v pd/src/s_stuff.h /usr/local/include/pdl2ork/"
	#	echo
	#	echo "If you don't have sudo enabled, replace sudo commands with the appropraite alternative before pasting aforesaid lines in the terminal.
#
#PLEASE NOTE that because both Pd and Pd-l2ork use the includes with the same name, depending on your system's setup, skipping this step may result in a failed build. Press any key to continue or CTRL+C to cancel install and manually copy the said files first (or use -f or -F options to have these steps performed automatically)..."
	#	read dummy
	#else
	#	echo "First we will copy updated includes... You may have to enter your sudo password..."
	#	sudo mkdir $inst_dir/include/pdl2ork/
	#	sudo cp -f -v pd/src/g_all_guis.h $inst_dir/include/pdl2ork/
	#	sudo cp -f -v pd/src/g_canvas.h $inst_dir/include/pdl2ork/
	#	sudo cp -f -v pd/src/m_imp.h $inst_dir/include/pdl2ork/
	#	sudo cp -f -v pd/src/m_pd.h $inst_dir/include/pdl2ork/
	#	sudo cp -f -v pd/src/s_stuff.h $inst_dir/include/pdl2ork/
	#fi

	# update docs
Ivica Bukvic's avatar
Ivica Bukvic committed
202
	#cd doc/
203
	#svn checkout https://pure-data.svn.sourceforge.net/svnroot/pure-data/trunk/doc .
Ivica Bukvic's avatar
Ivica Bukvic committed
204
205
	#cp -f ../l2ork_addons/doc/Makefile .
	#cd ..
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
206

Ivica Bukvic's avatar
Ivica Bukvic committed
207
	if [ $full -eq 2 -o $deb -eq 2 ]
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
208
209
210
211
212
213
	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
214
215
216
		cd ../
		make gem_clean
		cd ../Gem/src/
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
217
218
219
220
221
222
223
224
225
		make distclean
		rm -rf ./.libs
		rm -rf ./*/.libs
		cd ../
		make distclean
		rm gemglutwindow.pd_linux
		rm Gem.pd_linux
		aclocal
		./autogen.sh
226
		export INCREMENTAL=""
227
228
229
230
231
232
233
234
235
236
	#elif [ $full -eq 3 ]
	#then
	#	echo "Since pd-l2ork relies on a unique version of cwiid library, we will need to install it to make disis_wiimote external work properly. YOU SHOULD REMOVE EXISTING CWIID LIBRARIES PRIOR TO RUNNING THIS INSTALL... No worries though, L2Ork version is fully backwards compatible while also offering unique features like full extension support including the passthrough mode. To install cwiid library go to <pd-l2ork-root-git-folder>/l2ork-addons/cwiid/ folder and install it using the usual:"
	#	echo
	#	echo "./configure"
	#	echo "make"
	#	echo "sudo make install"
	#	echo
	#	echo "As an alternative, you can also use the -f or -F options instead of an -u option to have this performed automatically. Please note that options -f and -F require that your system has sudo enabled. Press any key to continue or CTRL+C to cancel install..."
	#	read dummy
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
237
		# clean files that may remain stuck even after doing global make clean (if any)
238
239
240
241
242
243
244
245
246
247
248
249
	#	cd externals/miXed
	#	make clean
	#	cd ../../Gem/src/
	#	make distclean
	#	rm -rf ./.libs
	#	rm -rf ./*/.libs
	#	cd ../
	#	make distclean
	#	rm gemglutwindow.pd_linux
	#	rm Gem.pd_linux
	#	aclocal
	#	./autogen.sh
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
250
251
	else
		cd Gem/
252
		export INCREMENTAL="yes"
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
253
	fi
254
255
	cd ../pd/src && aclocal && autoconf
	cd ../../packages/linux_make
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
256
257
258
	if [ $full -gt 1 -o $deb -eq 2 ]
	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
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
279
	make install prefix=$inst_dir
280
	echo "copying pd-l2ork-specific externals..."
281
282
	# 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
283
284
	# patch_name
	cd ../../l2ork_addons/patch_name
285
	cp -f patch_name.pd ../../packages/linux_make/build$inst_dir/lib/pd-l2ork/extra
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
286
287
288
289
290
291
292
	cp -f patch_name-help.pd ../../packages/linux_make/build$inst_dir/lib/pd-l2ork/extra
	# spectdelay
	cd ../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
Ivica Bukvic's avatar
Ivica Bukvic committed
293
294
295
	# return to l2ork_addons folder
	cd ../../
	# install raspberry pi externals (if applicable)
296
297
298
299
300
301
302
303
304
305
	#if [ $rpi -eq 1 ]
	#then
	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
306

307
	echo "done with l2ork addons."
308
	cd ../
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
309
	# finish install
310
	cd packages/linux_make
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
311
	rm -f build/usr/local/lib/pd
312
313
	if [ $pkg -gt 0 ]; then
	echo "tar full installer..."
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
314
315
316
317
318
319
320
321
322
323
324
325
326
327
	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
328
329
		#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
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
330
331
		mv -f build/pd*bz2 ../../..
	fi
332
333
	elif [ $deb -gt 0 ]; then
		make debstage prefix=$inst_dir
334
	fi
335
	cd ../../ 
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
336
337
338
339
340
fi

if [ $addon -eq 1 ]
then
	echo "l2ork addons..."
341
	rm -f ../l2ork_addons-`uname -m`-`date +%Y%m%d`.tar.bz2 2> /dev/null
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
342
	#cp -rf /usr/local/lib/pd/* l2ork_addons/externals/
343
	tar -jcf ../l2ork_addons-`uname -m`-`date +%Y%m%d`.tar.bz2 l2ork_addons
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
344
345
346
347
348
349
350
fi

cd l2ork_addons/

echo "done."

exit 0