Add mit-scheme support

This commit is contained in:
retropikzel 2026-03-21 10:26:49 +02:00
parent 00a3337c53
commit 0d9eb45b61
1 changed files with 38 additions and 31 deletions

View File

@ -3,7 +3,7 @@
set -eu set -eu
if [ "${COMPILE_R7RS:-}" = "" ]; then if [ "${COMPILE_R7RS:-}" = "" ]; then
echo "COMPILE_R7RS not set, possible values:" echo "COMPILE_R7RS not set, possible values:"
echo "capyscheme chezscheme chibi chicken cyclone foment gauche gambit guile ikarus ironscheme kawa larceny loko meevax mosh racket sagittarius skint stklos tr7 ypsilon" echo "capyscheme chezscheme chibi chicken cyclone foment gauche gambit guile ikarus ironscheme kawa larceny loko meevax mit-scheme mosh racket sagittarius skint stklos tr7 ypsilon"
exit 1 exit 1
fi fi
@ -21,7 +21,7 @@ case ${1:-} in
chicken) prepend_dirs="" ;; chicken) prepend_dirs="" ;;
chezscheme|ikarus|loko|mosh|tr7) prepend_dirs="$prepend_dirs:$2" ;; chezscheme|ikarus|loko|mosh|tr7) prepend_dirs="$prepend_dirs:$2" ;;
capyscheme|guile|sagittarius) prepend_dirs="$prepend_dirs -L $2" ;; capyscheme|guile|sagittarius) prepend_dirs="$prepend_dirs -L $2" ;;
gambit) prepend_dirs="$prepend_dirs $2/" ;; gambit|mit-scheme) prepend_dirs="$prepend_dirs $2/" ;;
kawa) prepend_dirs="$prepend_dirs:$2/*.sld";; kawa) prepend_dirs="$prepend_dirs:$2/*.sld";;
racket) prepend_dirs="$prepend_dirs -S $2" ;; racket) prepend_dirs="$prepend_dirs -S $2" ;;
ypsilon) prepend_dirs="$prepend_dirs --sitelib=$2" ;; ypsilon) prepend_dirs="$prepend_dirs --sitelib=$2" ;;
@ -31,7 +31,7 @@ case ${1:-} in
-A) case $COMPILE_R7RS in -A) case $COMPILE_R7RS in
chicken) append_dirs="" ;; chicken) append_dirs="" ;;
chezscheme|ikarus|loko|mosh|tr7) append_dirs="$append_dirs:$2" ;; chezscheme|ikarus|loko|mosh|tr7) append_dirs="$append_dirs:$2" ;;
gambit) append_dirs="$append_dirs $2/" ;; gambit|mit-scheme) append_dirs="$append_dirs $2/" ;;
guile) append_dirs="$append_dirs -L $2" ;; guile) append_dirs="$append_dirs -L $2" ;;
ironscheme) append_dirs="$append_dirs -I $2" ;; ironscheme) append_dirs="$append_dirs -I $2" ;;
kawa) append_dirs="$append_dirs:$2/*.sld";; kawa) append_dirs="$append_dirs:$2/*.sld";;
@ -59,51 +59,58 @@ prefix="#!/usr/bin/env -S"
case $rnrs in case $rnrs in
R6RS) R6RS)
case $COMPILE_R7RS in case $COMPILE_R7RS in
capyscheme) printf "\n#|\nexec capy --r6rs $prepend_dirs $append_dirs --script \$0\n|#\n" >> "$output_file";; capyscheme) printf "\n#|\nexec capy --r6rs $prepend_dirs $append_dirs --script \$0\n|#\n" > "$output_file";;
chezscheme) echo "$prefix scheme --libdirs $prepend_dirs:$append_dirs --program" >> "$output_file";; chezscheme) echo "$prefix scheme --libdirs $prepend_dirs:$append_dirs --program" > "$output_file";;
guile) printf "$prefix guile --r6rs $prepend_dirs $append_dirs\n!#\n" >> "$output_file";; guile) printf "$prefix guile --r6rs $prepend_dirs $append_dirs\n!#\n" > "$output_file";;
ikarus) echo "$prefix IKARUS_LIBRARY_PATH=$prepend_dirs:$append_dirs ikarus --r6rs-script" >> "$output_file";; ikarus) echo "$prefix IKARUS_LIBRARY_PATH=$prepend_dirs:$append_dirs ikarus --r6rs-script" > "$output_file";;
ironscheme) echo "$prefix ironscheme $prepend_dirs $append_dirs" >> "$output_file";; ironscheme) echo "$prefix ironscheme $prepend_dirs $append_dirs" > "$output_file";;
larceny) printf "\n#|\nexec larceny -r6rs -utf8 -quiet -nobanner $prepend_dirs $append_dirs -program \$0 --\n|#\n" >> "$output_file";; larceny) printf "\n#|\nexec larceny -r6rs -utf8 -quiet -nobanner $prepend_dirs $append_dirs -program \$0 --\n|#\n" > "$output_file";;
loko) LOKO_LIBRARY_PATH="$prepend_dirs:$append_dirs" loko --compile "$input_file"; 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;; if [ ! "${input_file%.sps}" = "$output_file" ]; then mv -f "${input_file%.sps}" "$output_file"; fi;;
mosh) echo "$prefix MOSH_LOADPATH=$prepend_dirs:$append_dirs mosh" >> "$output_file";; mosh) echo "$prefix MOSH_LOADPATH=$prepend_dirs:$append_dirs mosh" > "$output_file";;
racket) printf "\n#|\nexec racket -I scheme/init -l r6rs/run.rkt $prepend_dirs $append_dirs \$0 --\n|#\n" >> "$output_file";; racket) printf "\n#|\nexec racket -I scheme/init -l r6rs/run.rkt $prepend_dirs $append_dirs \$0 --\n|#\n" > "$output_file";;
sagittarius) echo "$prefix sash -r6 $prepend_dirs $append_dirs" >> "$output_file";; sagittarius) echo "$prefix sash -r6 $prepend_dirs $append_dirs" > "$output_file";;
ypsilon) echo "$prefix ypsilon $prepend_dirs $append_dirs --top-level-program" >> "$output_file";; ypsilon) echo "$prefix ypsilon $prepend_dirs $append_dirs --top-level-program" > "$output_file";;
*) echo "Unsupported implementation RNRS combination: $COMPILE_R7RS $rnrs"; exit 1;; *) echo "Unsupported implementation RNRS combination: $COMPILE_R7RS $rnrs"; exit 1;;
esac;; esac;;
R7RS) R7RS)
case $COMPILE_R7RS in case $COMPILE_R7RS in
capyscheme) printf "\n#|\nexec capy --r7rs $prepend_dirs $append_dirs --script \$0\n|#\n" >> "$output_file";; capyscheme) printf "\n#|\nexec capy --r7rs $prepend_dirs $append_dirs --script \$0\n|#\n" > "$output_file";;
chicken) csc -o "$output_file" "$input_file";; chicken) csc -o "$output_file" "$input_file";;
chibi) echo "$prefix chibi-scheme $prepend_dirs $append_dirs" >> "$output_file";; chibi) echo "$prefix chibi-scheme $prepend_dirs $append_dirs" > "$output_file";;
cyclone) cyclone -o "$output_file" $prepend_dirs $append_dirs "$input_file";; cyclone) cyclone -o "$output_file" $prepend_dirs $append_dirs "$input_file";;
foment) echo "$prefix foment $prepend_dirs $append_dirs -A /usr/local/share/snow" >> "$output_file";; foment) echo "$prefix foment $prepend_dirs $append_dirs -A /usr/local/share/snow" > "$output_file";;
gauche) echo "$prefix gosh -r7 $prepend_dirs $append_dirs" >> "$output_file";; gauche) echo "$prefix gosh -r7 $prepend_dirs $append_dirs" > "$output_file";;
gambit) echo "$prefix gsi -:r7rs $prepend_dirs $append_dirs" >> "$output_file";; gambit) echo "$prefix gsi -:r7rs $prepend_dirs $append_dirs" > "$output_file";;
guile) printf "$prefix guile --r7rs $prepend_dirs $append_dirs\n!#\n" >> "$output_file";; guile) printf "$prefix guile --r7rs $prepend_dirs $append_dirs\n!#\n" > "$output_file";;
kawa) printf "\n#|\nexec 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:/usr/local/share/kawa/lib/*.sld -f \$0\n|#" >> "$output_file";; kawa) printf "\n#|\nexec 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:/usr/local/share/kawa/lib/*.sld -f \$0\n|#" > "$output_file";;
larceny) printf "\n#|\nexec larceny -r7rs -utf8 -quiet -nobanner $prepend_dirs $append_dirs -program \$0 --\n|#\n" >> "$output_file";; larceny) printf "\n#|\nexec larceny -r7rs -utf8 -quiet -nobanner $prepend_dirs $append_dirs -program \$0 --\n|#\n" > "$output_file";;
loko) LOKO_LIBRARY_PATH="$prepend_dirs:$append_dirs" loko -std=r7rs --compile "$input_file"; 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;; if [ ! "${input_file%.scm}" = "$output_file" ]; then mv -f "${input_file%.sps}" "$output_file"; fi;;
meevax) echo "$prefix meevax $prepend_dirs $append_dirs" >> "$output_file";; meevax) echo "$prefix meevax $prepend_dirs $append_dirs" > "$output_file";;
mosh) echo "$prefix MOSH_LOADPATH=$prepend_dirs:$append_dirs mosh" >> "$output_file";; mit-scheme) {
racket) echo "$prefix racket -I r7rs $prepend_dirs $append_dirs --script" >> "$output_file";; printf "\n#|\n"
sagittarius) echo "$prefix sash -r7 $prepend_dirs $append_dirs" >> "$output_file";; echo 'libs=""'
skint) printf "\n#|\nexec skint $prepend_dirs $append_dirs --program \$0 \n|#\n" >> "$output_file";; echo "for dir in $prepend_dirs $append_dirs; do libs=\"\$libs \$(find \$dir -name *.sld -printf \"--load %p \")\"; done"
stklos) echo "$prefix stklos $prepend_dirs $append_dirs" >> "$output_file";; echo "exec mit-scheme --batch-mode \$libs --load \$0 --eval \"(exit 0)\" -- \"$@\""
echo "|#"
} > "$output_file";;
mosh) echo "$prefix MOSH_LOADPATH=$prepend_dirs:$append_dirs mosh" > "$output_file";;
racket) echo "$prefix racket -I r7rs $prepend_dirs $append_dirs --script" > "$output_file";;
sagittarius) echo "$prefix sash -r7 $prepend_dirs $append_dirs" > "$output_file";;
skint) printf "\n#|\nexec skint $prepend_dirs $append_dirs --program \$0 \n|#\n" > "$output_file";;
stklos) echo "$prefix stklos $prepend_dirs $append_dirs" > "$output_file";;
tr7) case "$prepend_dirs:$append_dirs" in tr7) case "$prepend_dirs:$append_dirs" in
":") echo "$prefix tr7i -1" >> "$output_file";; ":") echo "$prefix tr7i -1" > "$output_file";;
*) echo "$prefix TR7_LIB_PATH=$prepend_dirs:$append_dirs tr7i -1" >> "$output_file";; *) echo "$prefix TR7_LIB_PATH=$prepend_dirs:$append_dirs tr7i -1" > "$output_file";;
esac;; esac;;
ypsilon) echo "$prefix ypsilon $prepend_dirs $append_dirs --top-level-program" >> "$output_file";; ypsilon) echo "$prefix ypsilon $prepend_dirs $append_dirs --top-level-program" > "$output_file";;
*) echo "Unsupported implementation RNRS combination: $COMPILE_R7RS $rnrs"; exit 1;; *) echo "Unsupported implementation RNRS combination: $COMPILE_R7RS $rnrs"; exit 1;;
esac;; esac;;
esac esac
case $COMPILE_R7RS in case $COMPILE_R7RS in
chicken|cyclone|loko) sleep 0;; chicken|cyclone|loko) sleep 0;;
*) cat "$input_file" >> "$output_file";; *) cat "$input_file" >> "$output_file"; echo "" >> "$output_file";;
esac esac
chmod +x "$output_file" chmod +x "$output_file"