diff --git a/scheme-venv b/scheme-venv index 9f7d735..e5096d2 100755 --- a/scheme-venv +++ b/scheme-venv @@ -68,6 +68,7 @@ docker_tag="${venvname}-${implementation}-${rnrs}" scheme_cmd="" scheme_compile_cmd="" scheme_repl_cmd="" +scheme_version_cmd="echo 0.0.0" scheme_type="interpreter" echo "scheme-venv version 1.0.0, scheme: ${implementation}, rnrs: ${rnrs}" @@ -133,24 +134,29 @@ if [ "${rnrs}" = "r6rs" ]; then case "${implementation}" in "capyscheme") scheme_cmd="capy --r6rs -L \"${venvpath}/lib\" VENV_CAPYSCHEME_ARGS --script \"\${IF}\"" + scheme_version_cmd="capy --help | head -n 1 | awk '{print(\$2);}'" scheme_repl_cmd="capy --r6rs -L \"${venvpath}/lib\"" ;; "chezscheme") if command -v chezscheme >/dev/null 2>&1 then scheme_cmd="chezscheme --libdirs ${venvpath}/lib/.akku/lib --program \"\${IF}\"" + scheme_version_cmd="chezscheme --version" scheme_repl_cmd="chezscheme --libdirs ${venvpath}/lib/.akku/lib" else scheme_cmd="scheme --libdirs ${venvpath}/lib/.akku/lib --program \"\${IF}\"" + scheme_version_cmd="scheme --version" scheme_repl_cmd="scheme --libdirs ${venvpath}/lib/.akku/lib" fi ;; "guile") scheme_cmd="guile --r6rs -x .sls -L \"${venvpath}/lib/.akku/lib\" -s \"\${IF}\"" + scheme_version_cmd="guile --version | head -n 1 | awk '{print($4);}'" scheme_repl_cmd="guile --r6rs -x .sls -L \"${venvpath}/lib/.akku/lib\"" ;; "ikarus") scheme_cmd="IKARUS_LIBRARY_PATH=\"${venvpath}/lib/.akku/lib\" ikarus --r6rs-script \"\${IF}\"" + scheme_version_cmd="ikarus -v 2>&1 | head -n 1 | awk '{print($4);}' | sed 's/,//'" scheme_repl_cmd="IKARUS_LIBRARY_PATH=\"${venvpath}/lib/.akku/lib\" ikarus" ;; "ironscheme") @@ -159,6 +165,7 @@ if [ "${rnrs}" = "r6rs" ]; then ;; "larceny") scheme_cmd="larceny -nobanner -quiet -utf8 -r6 -I \"${venvpath}/lib/.akku/lib\" \"\${IF}\"" + scheme_version_cmd="larceny --version | awk '{print($2);}'" scheme_repl_cmd="larceny -nobanner -quiet -utf8 -r6 -I \"${venvpath}/lib/.akku/lib\"" ;; "loko") @@ -168,18 +175,22 @@ if [ "${rnrs}" = "r6rs" ]; then ;; "mosh") scheme_cmd="mosh --loadpath=\"${venvpath}/lib/.akku/lib\" \"\${IF}\"" + scheme_version_cmd="mosh -v | head -n 1 | awk '{print(\$8);}'" scheme_repl_cmd="mosh --loadpath=\"${venvpath}/lib/.akku/lib\"" ;; "racket") scheme_cmd="PLTCOLLECTS=\"${venvpath}/lib/.akku/lib\" racket -I scheme/init -l r6rs/run.rkt -S \"${venvpath}/lib/.akku/lib\" \"\${IF}\"" + scheme_version_cmd="racket --version | awk '{print(\$4);}'" scheme_repl_cmd="PLTCOLLECTS=\"${venvpath}/lib/.akku/lib\" racket -I scheme/init -l r6rs/run.rkt -S \"${venvpath}/lib/.akku/lib\"" ;; "sagittarius") scheme_cmd="sash -r6 -L \"${venvpath}/lib/.akku/lib\" \"\${IF}\"" + scheme_version_cmd="sash -v | awk '{print(\$5);}'" scheme_repl_cmd="sash -r6 -L \"${venvpath}/lib/.akku/lib\"" ;; "ypsilon") scheme_cmd="ypsilon --r6rs --sitelib \"${venvpath}/lib/.akku/lib\" --top-level-program \"\${IF}\"" + scheme_version_cmd="ypsilon --version | awk '{print(\$1);}' | sed 's/ypsilon-//'" scheme_repl_cmd="ypsilon --r6rs --sitelib \"${venvpath}/lib/.akku/lib\"" ;; *) @@ -192,10 +203,12 @@ else case "${implementation}" in "capyscheme") scheme_cmd="capy --r7rs -L \"${venvpath}/lib\" --script \"\${IF}\"" + scheme_version_cmd="capy --help | head -n 1 | awk '{print(\$2);}'" scheme_repl_cmd="capy --r7rs -L \"${venvpath}/lib\"" ;; "chibi") scheme_cmd="chibi-scheme -I \"${venvpath}/lib\" \"\${IF}\"" + scheme_version_cmd="chibi-scheme -V | awk '{print(\$2);}'" scheme_repl_cmd="chibi-scheme -I \"${venvpath}/lib\"" ;; "chicken") @@ -211,37 +224,45 @@ else scheme_repl_cmd="echo \"Chicken repl not supported\" && exit 1" scheme_compile_cmd="cd \"${venvpath}/lib\" && csc -static -r7rs-syntax -I${venvpath}/include -L${venvpath}/lib -o \"\${OF}\" \"\${IF}\"" fi + scheme_version_cmd="csc -version | grep Version | awk '{print(\$2);}'" ;; "cyclone") scheme_cmd="CYCLONE_LIBRARY_PATH=\"${venvpath}/lib\" icyc -I \"${venvpath}/lib\" \"\${IF}\"" scheme_repl_cmd="CYCLONE_LIBRARY_PATH=\"${venvpath}/lib\" icyc -I \"${venvpath}/lib\"" + scheme_version_cmd="cyclone -v | grep Version | awk '{print(\$4);}'" scheme_compile_cmd="CYCLONE_LIBRARY_PATH=\"${venvpath}/lib\" cyclone -I \"${venvpath}/lib\" \"\${IF}\"" ;; "foment") scheme_cmd="foment -I \"${venvpath}/lib\" \"\${IF}\"" + scheme_version_cmd="foment --version | grep version | head -n 1 | awk '{print(\$2);}' | sed 's/[\")]//g'" scheme_repl_cmd="foment -I \"${venvpath}/lib\"" ;; "gambit") scheme_cmd="gsi -:r7rs \"${venvpath}/lib/\" \"\${IF}\"" scheme_repl_cmd="gsi -:r7rs \"${venvpath}/lib/\"" + scheme_version_cmd="gsc -v | awk '{print(\$1);}'" scheme_compile_cmd="gsc -:r7rs -o \"\${OF}\" -exe -nopreload \"${venvpath}/lib/\" \"\${IF}\"" ;; "gauche") scheme_cmd="gosh -r7 -I \"${venvpath}/lib\" \"\${IF}\"" + scheme_version_cdm="gsc -v | awk '{print(\$1);}'" scheme_repl_cmd="gosh -r7 -I \"${venvpath}/lib\"" ;; "guile") scheme_cmd="guile --r7rs -x .sld -C \"${venvpath}/lib\" -L \"${venvpath}/lib\" -s \"\${IF}\"" scheme_repl_cmd="guile --r7rs -x .sld -C \"${venvpath}/lib\" -L \"${venvpath}/lib\"" + scheme_version_cmd="guile --version | head -n 1 | awk '{print(\$4);}'" scheme_compile_cmd="echo \"Guile compiler not supported\" && exit 1" ;; "kawa") kawa_library_path=$(kawa -e "(display (get-environment-variable \"CLASSPATH\"))" | awk -F'kawa.jar' '{print $1}') scheme_cmd="kawa -J--add-exports=java.base/jdk.internal.foreign.abi=ALL-UNNAMED -J--add-exports=java.base/jdk.internal.foreign.layout=ALL-UNNAMED -J--add-exports=java.base/jdk.internal.foreign=ALL-UNNAMED -J--enable-native-access=ALL-UNNAMED -Dkawa.import.path=\"${venvpath}/lib/*.sld:${kawa_library_path}/*.sld\" --r7rs --full-tailcalls -f \"\${IF}\"" + scheme_version_cmd="kawa --version | head -n 1 | awk '{print(\$2);}'" scheme_repl_cmd="kawa -J--add-exports=java.base/jdk.internal.foreign.abi=ALL-UNNAMED -J--add-exports=java.base/jdk.internal.foreign.layout=ALL-UNNAMED -J--add-exports=java.base/jdk.internal.foreign=ALL-UNNAMED -J--enable-native-access=ALL-UNNAMED -Dkawa.import.path=\"${venvpath}/lib/*.sld:${kawa_library_path}/*.sld\" --r7rs --full-tailcalls" ;; "larceny") scheme_cmd="larceny -nobanner -quiet -utf8 -r7 -I \"${venvpath}/lib\" \"\${IF}\"" + scheme_version_cmd="larceny --version | awk '{print($2);}'" scheme_repl_cmd="larceny -nobanner -quiet -utf8 -r7 -I \"${venvpath}/lib\"" ;; "loko") @@ -251,6 +272,7 @@ else ;; "meevax") scheme_cmd="meevax -I \"${venvpath}/lib\" \"\${IF}\"" + scheme_version_cmd="meevax --version" scheme_repl_cmd="meevax -I \"${venvpath}/lib\"" ;; "mit-scheme") @@ -260,30 +282,37 @@ else ;; "mosh") scheme_cmd="mosh --loadpath=\"${venvpath}/lib\" \"\${IF}\"" + scheme_version_cmd="mosh -v | head -n 1 | awk '{print(\$8);}'" scheme_repl_cmd="mosh --loadpath=\"${venvpath}/lib\"" ;; "racket") scheme_cmd="PLTCOLLECTS=\"${venvpath}/lib\" racket -I r7rs -S \"${venvpath}/lib\" --script \"\${IF}\"" + scheme_version_cmd="racket --version | awk '{print(\$4);}'" scheme_repl_cmd="PLTCOLLECTS=\"${venvpath}/lib\" racket -I r7rs -S \"${venvpath}/lib\"" ;; "sagittarius") scheme_cmd="sash -r7 -L \"${venvpath}/lib\" \"\${IF}\"" + scheme_version_cmd="sash -v | awk '{print(\$5);}'" scheme_repl_cmd="sash -r7 -L \"${venvpath}/lib\"" ;; "skint") scheme_cmd="skint -I \"${venvpath}/lib\" \"\${IF}\"" + scheme_version_cmd="skint --version | grep version | awk '{print(\$2);}' | sed 's/[\")]//g'" scheme_repl_cmd="skint -I \"${venvpath}/lib\"" ;; "stklos") scheme_cmd="stklos -I \"${venvpath}/lib\" \"\${IF}\"" + scheme_version_cmd="stklos --version | head -n 1 | awk '{print(\$2);}'" scheme_repl_cmd="stklos -I \"${venvpath}/lib\"" ;; "tr7") scheme_cmd="TR7_LIB_PATH=\"${venvpath}/lib:\${TR7_LIB_PATH}\" tr7i -1 \"\${IF}\"" + scheme_version_cmd="printf '(exit)\n' | tr7i | head -n 1 | awk '{print(\$5);}'" scheme_repl_cmd="TR7_LIB_PATH=\"${venvpath}/lib:\${TR7_LIB_PATH}\" tr7i -1" ;; "ypsilon") scheme_cmd="ypsilon --r7rs --sitelib \"${venvpath}/lib\" --top-level-program \"\${IF}\"" + scheme_version_cmd="ypsilon --version | awk '{print(\$1);}' | sed 's/ypsilon-//'" scheme_repl_cmd="ypsilon --r7rs --sitelib \"${venvpath}/lib\"" ;; *) @@ -383,4 +412,14 @@ EOF } > "${venvpath}/bin/scheme-venv-info" chmod +x "${venvpath}/bin/scheme-venv-info" +## /bin/scheme-version +{ +cat << EOF +#!/bin/sh +if [ ! "\${VENV_DEBUG}" = "" ]; then set -x; fi +${scheme_version_cmd} +EOF +} > "${venvpath}/bin/scheme-version" +chmod +x "${venvpath}/bin/scheme-version" + echo "Initialized scheme-venv ${venvpath}, with ${implementation} and ${rnrs}"