aboutsummaryrefslogtreecommitdiffstats
path: root/slib.sh
blob: fd0ef04bbab3d17c38d91defcbffd2ef707dad94 (plain)
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

##"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', 'gosh', 'guile', 'slib48', 'larceny', 'scmlit', 'elk',
  'sisc', 'kawa', or 'mzscheme'."

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 gosh>/dev/null 2>&1; then
	command=gosh; implementation=gch
    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
    elif type mzscheme>/dev/null 2>&1; then
	command=mzscheme; implementation=plt
    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 'larceny'   >/dev/null 2>&1; then implementation=lar
  elif echo ${SPEW} | grep 'Guile'     >/dev/null 2>&1; then implementation=gui
  elif echo ${SPEW} | grep 'gosh'      >/dev/null 2>&1; then implementation=gch
  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
  elif echo ${SPEW} | grep 'MzScheme'  >/dev/null 2>&1; then implementation=plt
  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 - "$@";;
    gch) exec $command -l ${SCHEME_LIBRARY_PATH}gosh.init "$@";;
    ssc) exec $command -e "(load \"${SCHEME_LIBRARY_PATH}sisc.init\")" -- "$@";;
    kwa) exec $command -f ${SCHEME_LIBRARY_PATH}kawa.init -- "$@";;
    gui) if [ -f ${SCHEME_LIBRARY_PATH}guile.use ]; then
	exec $command -l ${SCHEME_LIBRARY_PATH}guile.init -l ${SCHEME_LIBRARY_PATH}guile.use "$@"
	else
	exec $command -l ${SCHEME_LIBRARY_PATH}guile.init "$@"
	fi;;
    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;;
    plt) exec $command -f ${SCHEME_LIBRARY_PATH}mzscheme.init "$@";;
    umb) echo "umb-scheme vicinities are too wedged to run slib"; exit 1;;
    *)   exit 1;;
esac