diff --git a/.gitignore b/.gitignore index cfd13a5..83af198 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ venv compile-test *.link test +*.deb +deb diff --git a/Makefile b/Makefile index 030d1ce..7914f24 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,5 @@ +VERSION=1.0.0 +DEB=scheme-venv-${VERSION}.deb PREFIX=/usr/local SCHEME=chibi RNRS=r7rs @@ -32,6 +34,16 @@ test-script-docker: build-docker-image test-compile-docker: build-docker-image docker run -v ${PWD}:${PWD} -w ${PWD} ${DOCKERTAG} sh -c "make SCHEME=${SCHEME} RNRS=${RNRS} test-compile" +deb: + mkdir -p deb/usr/local/bin + cp scheme-venv deb/usr/local/bin/ + mkdir -p deb/DEBIAN + printf "Package: scheme-venv\nArchitecture: amd64\nVersion: ${VERSION}\nSection: misc\nMaintainer: Retropikzel \nDescription: Tool to create Scheme virtual environments\n" \ + > deb/DEBIAN/control + dpkg-deb -b deb + cp deb.deb scheme-venv-latest.deb + mv deb.deb scheme-venv-${VERSION}.deb + install: @mkdir -p ${PREFIX}/bin @install scheme-venv ${PREFIX}/bin/scheme-venv diff --git a/README.md b/README.md index 4eea95d..3a143dc 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,47 @@ Tool to create Scheme virtual environments +## Installation -## scheme-compile + make + make install -## Chicken +## Usage + + scheme-venv chibi r7rs venv + + +First argument is Scheme, second is RnRS and third is path to directory. The +directory must not exist. + +After the virtual environment is created you can activate is with: + + source venv/bin/activate + + +After activation you can install packages with either snow-chibi or akku and +they will be installed inside the virtual environment. To run your Scheme code +use either scheme-script or scheme-compile, executables. + + +R6RS: + + akku install chez-srfi + scheme-script main.sps + scheme-compile main.sps + ./main + +R7RS: + + snow-chibi install srfi.64 + scheme-script main.scm + scheme-compile main.scm + ./main + + +## Implementation specific notes + +### Chicken - Before compilation the directory is changed to be venv/lib so libraries will be found - venv/include diff --git a/scheme-venv b/scheme-venv index bfff850..3487745 100755 --- a/scheme-venv +++ b/scheme-venv @@ -47,10 +47,12 @@ if [ "${3}" = "" ]; then fi if [ -d "${3}" ]; then - if [ -f "${3}/bin/scheme-venv-info" ]; then - echo "Directory is already venv, reiniting..." - else - echo "Path already exists, and is not scheme-venv (no /bin/scheme-venv-info)" + if [ -f "${3}" ]; then + echo "Path exists" + exit 1 + fi + if [ -d "${3}" ]; then + echo "Path exists" exit 1 fi fi @@ -166,8 +168,8 @@ if [ "${rnrs}" = "r6rs" ]; then scheme_repl_cmd="mosh --loadpath=\"${venvpath}/lib/.akku/lib\"" ;; "racket") - scheme_cmd="racket -I scheme/init -l r6rs/run.rkt -S \"${venvpath}/lib/.akku/lib\" \"\${IF}\"" - scheme_repl_cmd="racket -I scheme/init -l r6rs/run.rkt -S \"${venvpath}/lib/.akku/lib\"" + scheme_cmd="PLTCOLLECTS=\"${venvpath}/lib/.akku/lib\" racket -I scheme/init -l r6rs/run.rkt -S \"${venvpath}/lib/.akku/lib\" \"\${IF}\"" + 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}\"" @@ -217,10 +219,9 @@ else scheme_repl_cmd="foment -I \"${venvpath}/lib\"" ;; "gambit") - scheme_cmd="gsi \"${venvpath}/lib/\" \"\${IF}\"" - scheme_repl_cmd="gsi \"${venvpath}/lib/\"" - #scheme_compile_cmd="gsc -o \"\${OF}\" -exe -nopreload \"${venvpath}/lib/\" \"\${IF}\"" - scheme_compile_cmd="echo \"Gambit compiler not supported\" && exit 1" + scheme_cmd="gsi -:r7rs \"${venvpath}/lib/\" \"\${IF}\"" + scheme_repl_cmd="gsi -:r7rs \"${venvpath}/lib/\"" + scheme_compile_cmd="gsc -:r7rs -o \"\${OF}\" -exe -nopreload \"${venvpath}/lib/\" \"\${IF}\"" ;; "gauche") scheme_cmd="gosh -r7 -I \"${venvpath}/lib\" \"\${IF}\"" @@ -232,8 +233,9 @@ else scheme_compile_cmd="echo \"Guile compiler not supported\" && exit 1" ;; "kawa") - 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 -J--enable-preview --r7rs --full-tailcalls -Dkawa.import.path=\"${venvpath}/lib/*.sld\" \"\${IF}\"" - 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 -J--enable-preview --r7rs --full-tailcalls -Dkawa.import.path=\"${venvpath}/lib/*.sld\"" + 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_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}\"" @@ -258,8 +260,8 @@ else scheme_repl_cmd="mosh --loadpath=\"${venvpath}/lib\"" ;; "racket") - scheme_cmd="racket -I r7rs -S \"${venvpath}/lib\" --script \"\${IF}\"" - scheme_repl_cmd="racket -I r7rs -S \"${venvpath}/lib\"" + scheme_cmd="PLTCOLLECTS=\"${venvpath}/lib\" racket -I r7rs -S \"${venvpath}/lib\" --script \"\${IF}\"" + scheme_repl_cmd="PLTCOLLECTS=\"${venvpath}/lib\" racket -I r7rs -S \"${venvpath}/lib\"" ;; "sagittarius") scheme_cmd="sash -r7 -L \"${venvpath}/lib\" \"\${IF}\"" @@ -333,11 +335,6 @@ else chmod +x "${venvpath}/bin/scheme-compile" fi -impls="${implementation}" -if [ "${RNRS}" = "" ]; then - impls=generic -fi - ## bin/snow-chibi { cat << EOF @@ -347,7 +344,7 @@ if [ "\${1}" = "install" ]; then shift snow-chibi \ install \ - --impls=${impls} \ + --impls=${implementation} \ --install-source-dir=${venvpath}/lib \ --install-library-dir=${venvpath}/lib \ --install-data-dir=${venvpath}/lib \ @@ -365,7 +362,7 @@ chmod +x "${venvpath}/bin/snow-chibi" cat << EOF #!/bin/sh if [ ! "\${VENV_DEBUG}" = "" ]; then set -x; fi -cd "${venvpath}/lib" +cd "${venvpath}/lib" || exit 1 akku \$@ EOF } > "${venvpath}/bin/akku"