File: install.sh

package info (click to toggle)
sqsh 2.1.7-1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 3,480 kB
  • sloc: ansic: 22,015; sh: 3,089; makefile: 841; sql: 94
file content (402 lines) | stat: -rw-r--r-- 9,128 bytes parent folder | download | duplicates (2)
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
170
171
172
173
174
175
176
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
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
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
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
#!/bin/sh

VERSION=2.1

# Determine how to use echo without a carriage return.
# This is pretty much stolen from autoconf.

if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null
then
	if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null
	then
		ac_n= ac_c='
' ac_t=' '
	else
		ac_n=-n ac_c= ac_t=
	fi
else
	ac_n= ac_c='\c' ac_t=
fi         

#
# Create sub-directories if they don't exist.
#
make_subdirs () {
	path=""
	for dir in `echo $1 | sed -e 's,/, ,g'`; do
		path="$path/$dir"
		if [ ! -d $path ]; then
			mkdir $path
			if [ $? -ne 0 ]; then
				echo "Could not create $path." 1>&2
				exit 1
			fi
		fi
	done
}

#
# Prompt for a yes/no answer.
#
prompt_yn () {
	
	prompt=$1
	default=$2

	while true
	do
		echo $ac_n \
			"$prompt [$default] $ac_c" 1>&2

		read yn_flag

		if [ "$yn_flag" = "" ]; then
			yn_flag=$default
		fi

		yn_flag=`echo $yn_flag | tr '[a-z]' '[A-Z]'`

		if [ $yn_flag = "Y" -o $yn_flag = "YES" ]
		then
			return 0
		fi

		if [ $yn_flag = "N" -o $yn_flag = "NO" ]
		then
			return 1
		fi

		echo "Response must be y/n." 1>&2
	done

}


#
# Prompt path. Simple function to prompt user for the name
# of a path that is to be used for installation.
#
prompt_path () {

	var_name=$1
	prompt=$2
	default_path=$3

	path_done=0
	while [ $path_done = 0 ]
	do
		path_done=1

		echo $ac_n "$prompt [$default_path] $ac_c"
		read input_path

		if [ "$input_path" = "" ]; then
			input_path=$default_path
		fi

		if [ ! -d $input_path ]
		then
			echo $ac_n "   ==> Directory $input_path does not exist, create it? [y] $ac_c"
			read yn

			if [ "$yn" = "" -o "$yn" = "y" -o "$yn" = "Y" -o "$yn" = "yes" ]; then
				make_subdirs $input_path
			else
				path_done=0
			fi
		fi
	done

	eval "$var_name=$input_path"
}

# Startup installation banner...

echo "+============================================================+"
echo "|                                                            |"
echo "|             SQSH-$VERSION BINARY INSTALLATION SCRIPT            |"
echo "|                                                            |"
echo "+============================================================+"
echo
echo "The following shell script will prompt you for several"
echo "pieces of information required in order to properly install"
echo "sqsh.  At any time during the installation process you may"
echo "abort by hitting ^C at a prompt"
echo
echo $ac_n "Hit ENTER to continue: $ac_c"
read x

root_path=/usr/local
sqshrc_path=
man_path=
ld_path=

config_done=0
while [ $config_done = 0 ]
do
	config_done=1

	echo "=================[ ROOT DIRECTORY ]======================"
	echo
	echo "Please input root directory in which the sqsh binary is to be"
	echo "installed. Typical locations are /usr, /usr/local, or /opt/sqsh."
	echo

	prompt_path root_path "==> Root installation directory" $root_path

	if [ ! -d $root_path/bin ]; then
		make_subdirs $root_path/bin
	fi

	echo
	echo "=================[ GLOBAL CONFIGURATION ]======================"
	echo
	echo "With this release, sqsh allows a global sqshrc file to be"
	echo "installed to set default configuration values for all users."
	echo "By default this file will be processed prior to each user's"
	echo "personal \$HOME/.sqshrc file.  The global sqshrc file will"
	echo "be placed in the following directory."
	echo

	if [ "$sqshrc_path" = "" ]; then
		sqshrc_path=$root_path/etc
	fi

	prompt_path sqshrc_path \
		"==> Global sqshrc installation directory" $sqshrc_path

	echo
	echo "======================[ MANUAL PAGE ]=========================="
	echo
	echo "The following provides the location for the sqsh manual page."
	echo "This page will be installed under the name sqsh.1 in the"
	echo "supplied location.  Note that any user wanting to read this"
	echo "manual should have this directory in their MANPATH environment"
	echo "variable"
	echo

	if [ "$man_path" = "" ]; then
		man_path=$root_path/man/man1
	fi
	
	prompt_path man_path \
		"==> Manual installation directory" $man_path

	echo
	echo "======================[ WRAPPER SET-UP ]=========================="
	echo
	echo "With the binary only installation, a shell-script wrapper for"
	echo "sqsh is installed.  This wrapper does things such as set the"
	echo "\$SQSHRC environment variable with the global sqshrc path"
	echo "supplied previously ($sqshrc_path). For the sake of less"
	echo "knowledgable individuals (or the sake the sanity of your"
	echo "system administrator), this script may also set your"
	echo "LD_LIBRARY_PATH or SHLIB_PATH environment variables."
	echo "If you don't know what these variables do, answer 'y', below."
	echo
	
	if prompt_yn "==> Set LD_LIBRARY_PATH or SHLIB_PATH in wrapper?" y
	then
		do_ld_path="yes"
	else
		do_ld_path="no"
	fi

	if [ "$do_ld_path" = "yes" ]
	then
		if [ "$ld_path" = "" ]; then
			#
			# See if the X11 path used to compile the sqsh binary on
			# the source machine matches that of the machine we are
			# install on.
			#
			x11_path=""
			if [ "no" = "yes" ]
			then
				x11_path=""
				for dir in \
					`echo # -L/usr/X11R6/lib | sed -e 's,-L,,g'` \
					/usr/lib/X11 \
					/usr/openwin/lib \
					/usr/local/lib \
					/usr/local/lib/X11 \
					/usr/X11R6/lib \
					/usr/X11R5/lib
				do
					if [ -f $dir/libXt.a -o \
						  -f $dir/libXt.so -o \
						  -f $dir/libXt.sl ]
					then
						x11_path="$dir"
						break;
					fi
				done
			fi

			motif_path=""
			if [ "no" = "yes" ]
			then
				motif_path=""
				for dir in \
					`echo  | sed -e 's,-L,,g'` \
					/usr/lib/X11 \
					/usr/openwin/lib \
					/usr/local/lib \
					/usr/local/lib/X11 \
					/usr/X11R6/lib \
					/usr/X11R5/lib
				do
					if [ -f $dir/libXm.a -o \
						  -f $dir/libXm.so -o \
						  -f $dir/libXm.sl ]
					then
						motif_path="$dir"
						break;
					fi
				done
			fi

			readline_path=""
			if [ "yes" = "yes" ]
			then
				for dir in `echo # -L/lib | sed -e 's,^-L,,g'` \
					/usr/local/lib /usr/lib
				do
					if [ -f $dir/libreadline.a -o \
						-f $dir/libreadline.so -o \
						-f $dir/libreadline.sl ]
					then
						readline_path="$dir"
					fi
				done
			fi

			#
			# Attempt to track down where open client is installed.
			#
			for dir in $SYBASE $SYBASE/OCS $SYBASE/OCS-[0-9]*
			do
				if [ -f $dir/lib/libct.a -o \
					  -f $dir/lib/libct.so -o \
					  -f $dir/lib/libct.sl ]; then
					sybase_path="$dir/lib"
					break
				fi
			done

			ld_path="$sybase_path"

			if [ "$x11_path" != "" ]; then
				ld_path="$ld_path:$x11_path"
			fi

			if [ "$motif_path" != "" -a "$motif_path" != "$x11_path" ]; then
				ld_path="$ld_path:$motif_path"
			fi

			if [ "$readline_path" != "" ]; then
				ld_path="$ld_path:$readline_path"
			fi

			#
			# I hate useless entries.
			#
			ld_path=`echo $ld_path | sed -e 's,::,:,g'`
		fi

		echo
		echo "The following LD_LIBRARY_PATH has been selected for you"
		echo "by examining your current operating environment for the"
		echo "libraries required to use the features that are currently"
		echo "compiled into your sqsh binary. If you wish to leave it "
		echo "unchanged, simply hit enter, otherwise, enter an updated "
		echo "path you wish to use instead."

		ld_done="no"
		while [ "$ld_done" = "no" ]; do
			ld_done="yes"

			echo
			echo "LD_LIBRARY_PATH = $ld_path"
			echo $ac_n "==> New path: $ac_c " 1>&2
			read path

			if [ "$path" = "" ]; then
				path=$ld_path
			else
				ld_path=$path
			fi

			for dir in `echo $ld_path | sed -e 's,:, ,g'`
			do
				if [ ! -d $dir ]; then
					echo "   *** Directory $dir does not exist." 1>&2
					ld_done="no"
				fi
			done
		done
	else
		ld_path="<not set>"
	fi

	echo
	echo "======================[ VERIFICATION ]=========================="
	echo "Root directory:             $root_path"
	echo "Global sqshrc installation: $sqshrc_path/sqshrc"
	echo "Manual installation:        $man_path/sqsh.1"
	echo "Library Path:               $ld_path"
	echo

	if prompt_yn "==> Are these settings correct?" y
	then
		echo "Here we go!"
	else
		config_done=0
	fi
done

# First, install the binary

echo "Installing binary..."
cp sqsh $root_path/bin/sqsh
if [ $? -ne 0 ]; then
	echo "Unable to copy binary into $root_path/bin. Aborting" 1>&2
	exit 1
fi
chmod gou+rx $root_path/bin/sqsh

# Next, install the global sqshrc

echo "Installing global sqshrc..."
cp doc/global.sqshrc $sqshrc_path/sqshrc
if [ $? -ne 0 ]; then
	echo "Unable to copy global sqshrc into $sqshrc_path. Aborting" 1>&2
	exit 1
fi
chmod gou+r $sqshrc_path/sqshrc

# Install the man page script

echo "Installing manual..."
cp doc/sqsh.1 $man_path/sqsh.1
if [ $? -ne 0 ]; then
	echo "Unable to copy manual into $man_path. Aborting" 1>&2
	exit 1
fi
chmod gou+r $man_path/sqsh.1

echo "Installing wrapper script..."
mv $root_path/bin/sqsh $root_path/bin/sqsh.bin && \
sed -e "s,%SYBASE%,$SYBASE,g" \
	 -e "s,%LD_LIBRARY_PATH%,$ld_path,g" \
	 -e "s,%BIN_DIR%,$root_path/bin,g" \
	 -e "s,%SQSHRC%,$sqshrc_path/sqshrc:\${HOME}/.sqshrc,g" \
	 scripts/wrapper.sh.in > $root_path/bin/sqsh
chmod gou+rx $root_path/bin/sqsh

if [ $? -ne 0 ]; then
	echo "Error creating wrapper in $root_path/bin. Aborting" 1>&2
	exit 1
fi

echo "Done."