summaryrefslogtreecommitdiffstats
path: root/slib.sh
blob: e88a2bca8c1cca4338880bbf69a81a87d531367a (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

##"slib" script; Find a Scheme implementation and initialize SLIB in it.
#Copyright (C) 2003 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 'scheme', 'scm',
  'mzscheme', 'guile', 'gsi' or 'slib48'."

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 type $command>/dev/null 2>&1; then
  SPEW="`$command --version < /dev/null 2>&1`"
  if echo ${SPEW} | grep -q 'Initialize load-path (colon-list of directories)' \
					   ; then implementation=elk
  elif echo ${SPEW} | grep -q 'MIT Scheme' ; then implementation=mit
  elif echo ${SPEW} | grep -q 'UMB Scheme' ; then implementation=umb
  elif echo ${SPEW} | grep -q 'scheme48'   ; then implementation=s48
  elif echo ${SPEW} | grep -q 'MzScheme'   ; then implementation=plt
  elif echo ${SPEW} | grep -q 'Guile'      ; then implementation=gui
  elif echo ${SPEW} | grep -q 'gambc'      ; then implementation=gam
  elif echo ${SPEW} | grep -q 'SCM'        ; then implementation=scm
  else implementation=
  fi
elif [ ! -z "$command" ]; then
  echo "Program '$command' not found."
  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
    else
	echo No Scheme implementation found.
	exit 1
    fi
fi

case $implementation in
  scm);;
  s48);;
  *) if [ -z "${SCHEME_LIBRARY_PATH}" ]; then
	export SCHEME_LIBRARY_PATH=`rpm -ql slib 2>/dev/null \
	   | grep require.scm | sed 's%require.scm%%'`
     fi
     if [ -z "${SCHEME_LIBRARY_PATH}" ]; then
       if [ -d /usr/local/lib/slib/ ]; then
	  export SCHEME_LIBRARY_PATH=/usr/local/lib/slib/
       elif [ -d /usr/share/slib/ ]; then
	  export SCHEME_LIBRARY_PATH=/usr/share/slib/
       fi
     fi;;
esac

# for gambit
case $implementation in
  gam) if [ -z "${LD_LIBRARY_PATH}" ]; then
	export LD_LIBRARY_PATH=/usr/local/lib
	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 - $*;;
    plt) exec $command -f ${SCHEME_LIBRARY_PATH}DrScheme.init $*;;
    gui) exec $command -l ${SCHEME_LIBRARY_PATH}guile.init $*;;
    mit) exec $command -load ${SCHEME_LIBRARY_PATH}mitscheme.init $*;;
    s48) exec $command $*;;
    umb) echo "umb-scheme vicinities are too wedged to run slib"; exit 1;;
    *)   exit 1;;
esac