tar_em_up.sh 9.38 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
	echo "     -c    core Pd source tarball"
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
14
15
16
	echo "     -e    everything"
	echo "     -f    full installer (incremental)"
	echo "     -F    full installer (complete recompile)"
17
	echo "     -n    skip package creation (-bB, -fF)"
Ivica Bukvic's avatar
Ivica Bukvic committed
18
19
20
	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"
21
	echo "     -X    build an OSX installer (dmg)"
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
	exit 1
fi

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

43
44
45
46
47
48
49
# 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
50
51
52
if [[ $os == "darwin" ]]; then
	os=osx
fi
53

54
55
56
57
58
59
60
61
62
# 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
63

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

69
	if [[ $os == "win" || $os == "osx" ]]; then
70
		ext="zip"
71
72
73
74
75
	else
		ext="tar.gz"
	fi

	if [[ $os == "win" ]]; then
76
77
78
79
		# 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
80
		# temporary kluge for rpi-- only 0.15.1 is available atm
81
		if [ `uname -m` == "armv7l" ]; then
82
83
			nwjs_version="v0.15.1"
		else
84
			nwjs_version="v0.18.4"
85
		fi
86
87
	fi

88
89
90
	nwjs="nwjs-sdk"
	nwjs_dirname=${nwjs}-${nwjs_version}-${os}-${arch}
	nwjs_filename=${nwjs_dirname}.${ext}
91
92
	nwjs_url=https://git.purrdata.net/jwilkes/nwjs-binaries/raw/master
	nwjs_url=${nwjs_url}/$nwjs_filename
93
94
95
	echo "Fetching the nwjs binary from"
	echo "$nwjs_url"
	wget $nwjs_url
96
97
98
99
100
	if [[ $os == "win" ]]; then
		unzip $nwjs_filename
	else
		tar -xf $nwjs_filename
	fi
101
102
103
104
105
106
	# Special case for arm binary's inconsistent directory name
	# (It's not the same as the `uname -m` output)
	if [ `uname -m` == "armv7l" ]; then
		nwjs_dirname=`echo $nwjs_dirname | sed 's/armv7l/arm/'`
	fi
        mv $nwjs_dirname ../pd/nw/nw
107
108
	# make sure the nw binary is executable on GNU/Linux
	if [[ $os != "win" && $dmg == 0 ]]; then
109
110
		chmod 755 ../pd/nw/nw/nw
	fi
111
112
113
	rm $nwjs_filename
fi

114
115
116
117
118
119
120
121
122
123
124
# 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


125
while getopts ":abBcdefFnRruwXzZ" Option
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
126
127
128
129
do case $Option in
		a)		addon=1;;

		b)		deb=1
130
				inst_dir=${inst_dir:-/usr};;
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
131
132

		B)		deb=2
133
				inst_dir=${inst_dir:-/usr};;
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
134
135
136
137
138
139
140
141
142
143
144

		c)		core=1;;

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

		f)		full=1;;

		F)		full=2;;

145
146
		n)		pkg=0;;

147
148
149
150
151
152
153
154
		R)		deb=2
				inst_dir=/usr
				rpi=1;;

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

Ivica Bukvic's avatar
Ivica Bukvic committed
155
		w)		sys_cwiid=1
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
156
157
				;;

158
159
160
		X)		dmg=1
				inst_dir=/usr;;

161
162
163
164
165
166
		z)		inno=1
				inst_dir=/usr;;

		Z)		inno=2
				inst_dir=/usr;;

Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
167
168
169
170
		*)		echo "Error: unknown option";;
	esac
done

171
172
inst_dir=${inst_dir:-/usr/local}

173
174
export TAR_EM_UP_PREFIX=$inst_dir

Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
175
176
177
178
179
180
181
182
183
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 ../../
184
	tar -jcf ./Pd-l2ork-`date +%Y%m%d`.tar.bz2 pd
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
185
186
fi

187
if [ $full -gt 0 -o $deb -gt 0 -o $inno -gt 0 -o $dmg -gt 0 ]
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
188
then
189
190
	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..."

191
192
193
	if [ -d .git ]; then
		# check if Gem submodule is empty, and if so do first init
		if [ "$(ls -A Gem)" ]; then
194
195
			git submodule update
			#git submodule foreach git pull origin master
196
		else
197
			# init all submodules (only necessary the first time)
198
			git submodule init
199
200
			git submodule update
			#git submodule foreach git pull origin master
201
		fi
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
202
203
204
	fi


205
	if [ $full -eq 2 -o $deb -eq 2 -o $inno -eq 2 -o $dmg -eq 2 ]
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
206
207
208
209
210
211
	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
212
213
214
		cd ../
		make gem_clean
		cd ../Gem/src/
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
215
216
217
218
219
220
221
222
223
		make distclean
		rm -rf ./.libs
		rm -rf ./*/.libs
		cd ../
		make distclean
		rm gemglutwindow.pd_linux
		rm Gem.pd_linux
		aclocal
		./autogen.sh
224
		export INCREMENTAL=""
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
225
226
	else
		cd Gem/
227
		export INCREMENTAL="yes"
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
228
	fi
229
	cd ../pd/src && aclocal && autoconf
230
231
	if [[ $os == "win" ]]; then
		cd ../../packages/win32_inno
Jonathan Wilkes's avatar
Jonathan Wilkes committed
232
	elif [[ $os == "osx" ]]; then
233
		cd ../../packages/darwin_app
234
235
236
	else
		cd ../../packages/linux_make
	fi
237
	if [ $full -gt 1 -o $deb -eq 2 -o $inno -eq 2 -o $dmg -eq 2 ]
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
238
239
	then
		make distclean
240
241
242
243
244
245
246
		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
247
248
		rm -rf build/
	fi
Ivica Bukvic's avatar
Ivica Bukvic committed
249
250
251
252
	if [ $rpi -eq 0 ]
	then
		echo "installing desktop version..."
		cp -f debian/control.desktop debian/control
253
		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
254
255
256
	else
		echo "installing raspbian version..."
		cp -f debian/control.raspbian debian/control
257
		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
258
259
		cat ../../externals/OSCx/src/Makefile | sed -e s/-lpd//g > ../../externals/OSCx/src/Makefile
	fi
260
261
262
263
	if [[ $os == "win" ]]; then
		echo "Making Windows package..."
		echo `pwd`
		make install && make package
Jonathan Wilkes's avatar
Jonathan Wilkes committed
264
	elif [[ $os == "osx" ]]; then
265
266
267
		echo "Making OSX package (dmg)..."
		echo `pwd`
		make install && make package
268
269
270
	else
		make install prefix=$inst_dir
	fi
271
	echo "copying pd-l2ork-specific externals..."
272
273
	# 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
274
275
	# patch_name
	# spectdelay
276
277
	if [[ $os == "win" ]]; then
		cd ../../l2ork_addons
Jonathan Wilkes's avatar
Jonathan Wilkes committed
278
	elif [[ $os == "osx" ]]; then
279
		cd ../../l2ork_addons
280
281
282
283
284
285
286
287
288
	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
289
	# install raspberry pi externals (if applicable)
290
	if [ $inno -eq 0 -a $dmg -eq 0 ]; then
291
292
293
294
295
296
297
298
		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
299

300
	echo "done with l2ork addons."
301
	cd ../
302
	# finish install for deb
303
	if [ $inno -eq 0 -a $dmg -eq 0 ]; then
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
		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
320
			mv *.deb ../../
321
322
323
		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
324
			mv -f build/pd*bz2 ../..
325
326
327
328
329
		fi
		elif [ $deb -gt 0 ]; then
			make debstage prefix=$inst_dir
		fi
		cd ../../
330
331
332
	# move OSX dmg installer
	elif [ $dmg -gt 0 ]; then
		mv packages/darwin_app/Pd*.dmg .
333
	fi
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
334
335
336
337
338
fi

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

cd l2ork_addons/

echo "done."

exit 0