151 lines
7.1 KiB
Bash
151 lines
7.1 KiB
Bash
#!/bin/sh
|
|
# vi: ft=bash
|
|
set -eu
|
|
if [ "${COMPILE_R7RS:-}" = "" ]; then
|
|
echo "COMPILE_R7RS not set, possible values:"
|
|
echo "capyscheme chezscheme chibi chicken cyclone foment gauche gambit goldfish guile ikarus ironscheme kawa larceny loko meevax mit-scheme mosh racket sagittarius skint stklos tr7 ypsilon"
|
|
exit 1
|
|
fi
|
|
|
|
## Parse arguments
|
|
prepend_dirs=""
|
|
append_dirs=""
|
|
output_file=a.out
|
|
while :; do
|
|
case ${1:-} in
|
|
*.sps) input_file="$1"; rnrs=R6RS; shift ;;
|
|
*.ss) input_file="$1"; rnrs=R6RS; shift ;;
|
|
*.scm) input_file="$1"; rnrs=R7RS; shift ;;
|
|
-o) output_file="$2"; shift; shift ;;
|
|
-D) echo "Warning: -D not supported, so \"$1 $2\" is ignored"; shift; shift ;;
|
|
-I) case $COMPILE_R7RS in
|
|
chicken) prepend_dirs="" ;;
|
|
chezscheme|ikarus|loko|mosh|tr7) prepend_dirs="$prepend_dirs:$2" ;;
|
|
capyscheme|guile|sagittarius) prepend_dirs="$prepend_dirs -L $2" ;;
|
|
gambit|mit-scheme) prepend_dirs="$prepend_dirs $2/" ;;
|
|
goldfish) echo "Warning: Goldfish does not have way to add to loadpath, -I $2 ignored" ;;
|
|
kawa) prepend_dirs="$prepend_dirs:$2/*.sld";;
|
|
racket) prepend_dirs="$prepend_dirs -S $2" ;;
|
|
ypsilon) prepend_dirs="$prepend_dirs --sitelib=$2" ;;
|
|
*) prepend_dirs="$prepend_dirs -I $2" ;;
|
|
esac
|
|
shift; shift ;;
|
|
-A) case $COMPILE_R7RS in
|
|
chicken) append_dirs="" ;;
|
|
chezscheme|ikarus|loko|mosh|tr7) append_dirs="$append_dirs:$2" ;;
|
|
gambit|mit-scheme) append_dirs="$append_dirs $2/" ;;
|
|
goldfish) echo "Warning: Goldfish does not have way to add to loadpath, -A $2 ignored" ;;
|
|
guile) append_dirs="$append_dirs -L $2" ;;
|
|
ironscheme) append_dirs="$append_dirs -I $2" ;;
|
|
kawa) append_dirs="$append_dirs:$2/*.sld";;
|
|
racket) append_dirs="$append_dirs -S $2" ;;
|
|
ypsilon) append_dirs="$append_dirs --sitelib=$2" ;;
|
|
*) append_dirs="$append_dirs -A $2" ;;
|
|
esac
|
|
shift; shift ;;
|
|
*) break ;;
|
|
esac
|
|
done
|
|
|
|
prepend_dirs="${prepend_dirs#:}"
|
|
append_dirs="${append_dirs#:}"
|
|
prepend_dirs="${prepend_dirs#,}"
|
|
append_dirs="${append_dirs#,}"
|
|
|
|
if [ "$input_file" = "" ]; then
|
|
echo "Please give input file of either .sps or .scm as argument"
|
|
exit 1
|
|
fi
|
|
case $rnrs in
|
|
R6RS)
|
|
case $COMPILE_R7RS in
|
|
capyscheme) cmd="capy --r6rs $prepend_dirs $append_dirs --script \"\$tmpfile\"";;
|
|
chezscheme) cmd="scheme --libdirs $prepend_dirs:$append_dirs --program \"\$tmpfile\"";;
|
|
guile) cmd="exec guile --r6rs $prepend_dirs $append_dirs \"\$0\" \"\$@\"";;
|
|
ikarus) cmd="IKARUS_LIBRARY_PATH=$prepend_dirs:$append_dirs ikarus --r6rs-script \"\$tmpfile\"";;
|
|
ironscheme) cmd="ironscheme $prepend_dirs $append_dirs \"\$tmpfile\"";;
|
|
larceny) cmd="larceny -r6rs -utf8 -quiet -nobanner $prepend_dirs $append_dirs -program \"\$tmpfile\"";;
|
|
loko) LOKO_LIBRARY_PATH="$prepend_dirs:$append_dirs" loko --compile "$input_file";
|
|
if [ ! "${input_file%.sps}" = "$output_file" ]; then mv -f "${input_file%.sps}" "$output_file"; fi;;
|
|
mosh) cmd="MOSH_LOADPATH=$prepend_dirs:$append_dirs mosh \"\$tmpfile\"";;
|
|
racket) cmd="racket -I scheme/init -l r6rs/run.rkt $prepend_dirs $append_dirs \"\$tmpfile\"";;
|
|
sagittarius) cmd="sash -r6 $prepend_dirs $append_dirs \"\$tmpfile\"";;
|
|
ypsilon) cmd="ypsilon $prepend_dirs $append_dirs --top-level-program \"\$tmpfile\"";;
|
|
*) echo "Unsupported implementation RNRS combination: $COMPILE_R7RS $rnrs"; exit 1;;
|
|
esac;;
|
|
R7RS)
|
|
case $COMPILE_R7RS in
|
|
capyscheme) cmd="capy --r7rs $prepend_dirs $append_dirs --script \"\$tmpfile\"";;
|
|
chicken) csc -R r7rs -X r7rs -o "$output_file" "$input_file";;
|
|
chibi) cmd="chibi-scheme $prepend_dirs $append_dirs \"\$tmpfile\"";;
|
|
cyclone) cyclone -o "$output_file" $prepend_dirs $append_dirs "$input_file";;
|
|
foment) cmd="foment $prepend_dirs $append_dirs -A /usr/local/share/snow \"\$tmpfile\"";;
|
|
gauche) cmd="gosh -r7 $prepend_dirs $append_dirs \"\$tmpfile\"";;
|
|
gambit) cmd="gsi -:r7rs $prepend_dirs $append_dirs \"\$tmpfile\"";;
|
|
goldfish) cmd="goldfish --mode r7rs \"\$tmpfile\"";;
|
|
guile) cmd="exec guile --r7rs $prepend_dirs $append_dirs \"\$0\" \"\$@\"";;
|
|
kawa) cmd="classpath=\$(kawa -e '(display (get-environment-variable \"CLASSPATH\"))')\nCLASSPATH=\${classpath%%kawa.jar} exec kawa -J--enable-native-access=ALL-UNNAMED -J--add-exports=java.base/jdk.internal.foreign.layout=ALL-UNNAMED -J--add-exports=java.base/jdk.internal.foreign.abi=ALL-UNNAMED -J--add-exports=java.base/jdk.internal.foreign=ALL-UNNAMED --r7rs --full-tailcalls -Dkawa.import.path=$prepend_dirs:$append_dirs:\${classpath%%kawa.jar}/*.sld --script1";;
|
|
larceny) cmd="larceny -r7rs -utf8 -quiet -nobanner $prepend_dirs $append_dirs -program \"\$tmpfile\"";;
|
|
loko) LOKO_LIBRARY_PATH="$prepend_dirs:$append_dirs" loko -std=r7rs --compile "$input_file";
|
|
if [ ! "${input_file%.scm}" = "$output_file" ]; then mv -f "${input_file%.sps}" "$output_file"; fi;;
|
|
meevax) cmd="meevax $prepend_dirs $append_dirs \"\$tmpfile\"";;
|
|
mit-scheme) cmd="mit-scheme --batch-mode --load \"\$tmpfile\" --eval \"(exit 0)\"";;
|
|
mosh) cmd="MOSH_LOADPATH=$prepend_dirs:$append_dirs mosh \"\$tmpfile\"";;
|
|
racket) cmd="racket -I r7rs $prepend_dirs $append_dirs --script \"\$tmpfile\"";;
|
|
sagittarius) cmd="exec sash -r7 $prepend_dirs $append_dirs";;
|
|
skint) cmd="skint $prepend_dirs $append_dirs --program \"\$tmpfile\"";;
|
|
stklos) cmd="stklos $prepend_dirs $append_dirs \"\$tmpfile\"";;
|
|
tr7) case "$prepend_dirs:$append_dirs" in
|
|
":") cmd="tr7i -1 \"\$tmpfile\"";;
|
|
*) cmd="TR7_LIB_PATH=$prepend_dirs:$append_dirs tr7i -1 \"\$tmpfile\"";;
|
|
esac;;
|
|
ypsilon) cmd="ypsilon $prepend_dirs $append_dirs --top-level-program \"\$tmpfile\"";;
|
|
*) echo "Unsupported implementation RNRS combination: $COMPILE_R7RS $rnrs"; exit 1;;
|
|
esac;;
|
|
esac
|
|
|
|
|
|
case $COMPILE_R7RS in
|
|
chicken|cyclone|loko) sleep 0;;
|
|
guile)
|
|
{
|
|
echo "#!/bin/sh"
|
|
printf "$cmd\n"
|
|
echo "!#"
|
|
cat "$input_file"
|
|
} > "$output_file"
|
|
;;
|
|
kawa)
|
|
{
|
|
echo "#!/bin/sh"
|
|
echo "#|"
|
|
printf "$cmd"
|
|
echo ' "$0" "$@"'
|
|
echo "|#"
|
|
cat "$input_file"
|
|
} > "$output_file"
|
|
;;
|
|
sagittarius)
|
|
{
|
|
echo "#!/bin/sh"
|
|
echo "#|"
|
|
printf "$cmd"
|
|
echo ' "$0" "$@"'
|
|
echo "|#"
|
|
cat "$input_file"
|
|
} > "$output_file"
|
|
;;
|
|
*)
|
|
{
|
|
echo "#!/bin/sh"
|
|
echo "tmpfile=\$(mktemp)"
|
|
echo "tail \"\$0\" -n +7 > \$tmpfile"
|
|
echo "$cmd"
|
|
echo "rm -f \$tmpfile"
|
|
echo "exit 0"
|
|
cat "$input_file"
|
|
} > "$output_file"
|
|
;;
|
|
esac
|
|
chmod +x "$output_file"
|