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
|
#!/bin/sh
##"slib" script; Find a Scheme implementation and initialize SLIB in it.
#Copyright (C) 2003, 2004 Aubrey Jaffer
#
#Permission to copy this software, to modify it, to redistribute it,
#to distribute modified versions, and to use it for any purpose is
#granted, subject to the following restrictions and understandings.
#
#1. Any copy made of this software must include this copyright notice
#in full.
#
#2. I have made no warranty or representation that the operation of
#this software will be error-free, and I am under no obligation to
#provide any services, by way of maintenance, update, or otherwise.
#
#3. In conjunction with products arising from the use of this
#material, there shall be no use of my name in any advertising,
#promotional, or sales literature without prior written consent in
#each case.
usage="Usage: slib [--version | -v]
Display version information and exit successfully.
Usage: slib SCHEME
Initialize SLIB in Scheme implementation SCHEME.
Usage: slib
Initialize SLIB session using executable (MIT) 'scheme', 'scm',
'gsi', 'mzscheme', 'guile', 'slib48', 'larceny', 'scmlit', 'elk',
'sisc', or 'kawa'."
case "$1" in
-v | --ver*) echo slib "$VERSION"; exit 0;;
"") if type scheme>/dev/null 2>&1; then
command=scheme
fi;;
-*) echo "$usage"; exit 1;;
*) command="$1"
shift
esac
# If more arguments are supplied, then err out.
if [ ! -z "$1" ]; then
echo "$usage"; exit 1
fi
if [ -z "$command" ]; then
if type scm>/dev/null 2>&1; then
command=scm; implementation=scm
elif type gsi>/dev/null 2>&1; then
command=gsi; implementation=gam
elif type mzscheme>/dev/null 2>&1; then
command=mzscheme; implementation=plt
elif type guile>/dev/null 2>&1; then
command=guile; implementation=gui
elif type slib48>/dev/null 2>&1; then
command=slib48; implementation=s48
elif type larceny>/dev/null 2>&1; then
command=larceny; implementation=lar
elif type scmlit>/dev/null 2>&1; then
command=scmlit; implementation=scm
elif type elk>/dev/null 2>&1; then
command=elk; implementation=elk
elif type sisc>/dev/null 2>&1; then
command=sisc; implementation=ssc
elif type kawa>/dev/null 2>&1; then
command=kawa; implementation=kwa
else
echo No Scheme implementation found.
exit 1
fi
# Gambit 4.0 doesn't allow input redirection; foils --version test.
elif [ "$command" == "gsi" ]; then implementation=gam
elif type $command>/dev/null 2>&1; then
SPEW="`$command --version < /dev/null 2>&1`"
if echo ${SPEW} | grep 'Initialize load-path (colon-list of directories)'\
>/dev/null 2>&1; then implementation=elk
elif echo ${SPEW} | grep 'MIT' >/dev/null 2>&1; then implementation=mit
elif echo ${SPEW} | grep 'UMB Scheme'>/dev/null 2>&1; then implementation=umb
elif echo ${SPEW} | grep 'scheme48' >/dev/null 2>&1; then implementation=s48
elif echo ${SPEW} | grep 'MzScheme' >/dev/null 2>&1; then implementation=plt
elif echo ${SPEW} | grep 'larceny' >/dev/null 2>&1; then implementation=lar
elif echo ${SPEW} | grep 'Guile' >/dev/null 2>&1; then implementation=gui
elif echo ${SPEW} | grep 'SCM' >/dev/null 2>&1; then implementation=scm
elif echo ${SPEW} | grep 'SISC' >/dev/null 2>&1; then implementation=ssc
elif echo ${SPEW} | grep 'Kawa' >/dev/null 2>&1; then implementation=kwa
else implementation=
fi
else
echo "Program '$command' not found."
exit 1
fi
case $implementation in
scm);;
s48);;
*) if [ -z "${SCHEME_LIBRARY_PATH}" ]; then
if type rpm>/dev/null 2>&1; then
SCHEME_LIBRARY_PATH=`rpm -ql slib 2>/dev/null \
| grep require.scm | sed 's%require.scm%%'`
fi
fi
if [ -z "${SCHEME_LIBRARY_PATH}" ]; then
if [ -d /usr/local/lib/slib/ ]; then
SCHEME_LIBRARY_PATH=/usr/local/lib/slib/
elif [ -d /usr/share/slib/ ]; then
SCHEME_LIBRARY_PATH=/usr/share/slib/
fi
export SCHEME_LIBRARY_PATH
fi;;
esac
# for gambit
case $implementation in
gam) if [ -z "${LD_LIBRARY_PATH}" ]; then
LD_LIBRARY_PATH=/usr/local/lib
export LD_LIBRARY_PATH
fi;;
esac
case $implementation in
scm) exec $command -ip1 -l ${SCHEME_LIBRARY_PATH}scm.init "$@";;
elk) exec $command -i -l ${SCHEME_LIBRARY_PATH}elk.init "$@";;
gam) exec $command -:s ${SCHEME_LIBRARY_PATH}gambit.init - "$@";;
ssc) exec $command -e "(load \"${SCHEME_LIBRARY_PATH}sisc.init\")" -- "$@";;
kwa) exec $command -f ${SCHEME_LIBRARY_PATH}kawa.init -- "$@";;
plt) exec $command -f ${SCHEME_LIBRARY_PATH}mzscheme.init "$@";;
gui) exec $command -l ${SCHEME_LIBRARY_PATH}guile.init "$@";;
lar) exec $command -- -e "(require 'srfi-96)" "$@";;
mit) exec $command -load ${SCHEME_LIBRARY_PATH}mitscheme.init "$@";;
s48) if [ -f "${S48_VICINITY}slib.image" ]; then
exec scheme48 -h 4000000 -i ${S48_VICINITY}slib.image
else
echo "scheme48 found; in slib directory do: 'make slib48 && make install48'";
fi
exit 1;;
umb) echo "umb-scheme vicinities are too wedged to run slib"; exit 1;;
*) exit 1;;
esac
|