Add version, deb building and update readme

This commit is contained in:
retropikzel 2026-02-07 10:40:39 +02:00
parent c54520928d
commit 6c3978792c
4 changed files with 71 additions and 23 deletions

2
.gitignore vendored
View File

@ -2,3 +2,5 @@ venv
compile-test compile-test
*.link *.link
test test
*.deb
deb

View File

@ -1,3 +1,5 @@
VERSION=1.0.0
DEB=scheme-venv-${VERSION}.deb
PREFIX=/usr/local PREFIX=/usr/local
SCHEME=chibi SCHEME=chibi
RNRS=r7rs RNRS=r7rs
@ -32,6 +34,16 @@ test-script-docker: build-docker-image
test-compile-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" 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 <retropikzel@iki.fi>\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: install:
@mkdir -p ${PREFIX}/bin @mkdir -p ${PREFIX}/bin
@install scheme-venv ${PREFIX}/bin/scheme-venv @install scheme-venv ${PREFIX}/bin/scheme-venv

View File

@ -1,10 +1,47 @@
Tool to create Scheme virtual environments 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 - Before compilation the directory is changed to be venv/lib so libraries will be found
- venv/include - venv/include

View File

@ -47,10 +47,12 @@ if [ "${3}" = "" ]; then
fi fi
if [ -d "${3}" ]; then if [ -d "${3}" ]; then
if [ -f "${3}/bin/scheme-venv-info" ]; then if [ -f "${3}" ]; then
echo "Directory is already venv, reiniting..." echo "Path exists"
else exit 1
echo "Path already exists, and is not scheme-venv (no /bin/scheme-venv-info)" fi
if [ -d "${3}" ]; then
echo "Path exists"
exit 1 exit 1
fi fi
fi fi
@ -166,8 +168,8 @@ if [ "${rnrs}" = "r6rs" ]; then
scheme_repl_cmd="mosh --loadpath=\"${venvpath}/lib/.akku/lib\"" scheme_repl_cmd="mosh --loadpath=\"${venvpath}/lib/.akku/lib\""
;; ;;
"racket") "racket")
scheme_cmd="racket -I scheme/init -l r6rs/run.rkt -S \"${venvpath}/lib/.akku/lib\" \"\${IF}\"" scheme_cmd="PLTCOLLECTS=\"${venvpath}/lib/.akku/lib\" 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_repl_cmd="PLTCOLLECTS=\"${venvpath}/lib/.akku/lib\" racket -I scheme/init -l r6rs/run.rkt -S \"${venvpath}/lib/.akku/lib\""
;; ;;
"sagittarius") "sagittarius")
scheme_cmd="sash -r6 -L \"${venvpath}/lib/.akku/lib\" \"\${IF}\"" scheme_cmd="sash -r6 -L \"${venvpath}/lib/.akku/lib\" \"\${IF}\""
@ -217,10 +219,9 @@ else
scheme_repl_cmd="foment -I \"${venvpath}/lib\"" scheme_repl_cmd="foment -I \"${venvpath}/lib\""
;; ;;
"gambit") "gambit")
scheme_cmd="gsi \"${venvpath}/lib/\" \"\${IF}\"" scheme_cmd="gsi -:r7rs \"${venvpath}/lib/\" \"\${IF}\""
scheme_repl_cmd="gsi \"${venvpath}/lib/\"" scheme_repl_cmd="gsi -:r7rs \"${venvpath}/lib/\""
#scheme_compile_cmd="gsc -o \"\${OF}\" -exe -nopreload \"${venvpath}/lib/\" \"\${IF}\"" scheme_compile_cmd="gsc -:r7rs -o \"\${OF}\" -exe -nopreload \"${venvpath}/lib/\" \"\${IF}\""
scheme_compile_cmd="echo \"Gambit compiler not supported\" && exit 1"
;; ;;
"gauche") "gauche")
scheme_cmd="gosh -r7 -I \"${venvpath}/lib\" \"\${IF}\"" scheme_cmd="gosh -r7 -I \"${venvpath}/lib\" \"\${IF}\""
@ -232,8 +233,9 @@ else
scheme_compile_cmd="echo \"Guile compiler not supported\" && exit 1" scheme_compile_cmd="echo \"Guile compiler not supported\" && exit 1"
;; ;;
"kawa") "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}\"" kawa_library_path=$(kawa -e "(display (get-environment-variable \"CLASSPATH\"))" | awk -F'kawa.jar' '{print $1}')
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\"" 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") "larceny")
scheme_cmd="larceny -nobanner -quiet -utf8 -r7 -I \"${venvpath}/lib\" \"\${IF}\"" scheme_cmd="larceny -nobanner -quiet -utf8 -r7 -I \"${venvpath}/lib\" \"\${IF}\""
@ -258,8 +260,8 @@ else
scheme_repl_cmd="mosh --loadpath=\"${venvpath}/lib\"" scheme_repl_cmd="mosh --loadpath=\"${venvpath}/lib\""
;; ;;
"racket") "racket")
scheme_cmd="racket -I r7rs -S \"${venvpath}/lib\" --script \"\${IF}\"" scheme_cmd="PLTCOLLECTS=\"${venvpath}/lib\" racket -I r7rs -S \"${venvpath}/lib\" --script \"\${IF}\""
scheme_repl_cmd="racket -I r7rs -S \"${venvpath}/lib\"" scheme_repl_cmd="PLTCOLLECTS=\"${venvpath}/lib\" racket -I r7rs -S \"${venvpath}/lib\""
;; ;;
"sagittarius") "sagittarius")
scheme_cmd="sash -r7 -L \"${venvpath}/lib\" \"\${IF}\"" scheme_cmd="sash -r7 -L \"${venvpath}/lib\" \"\${IF}\""
@ -333,11 +335,6 @@ else
chmod +x "${venvpath}/bin/scheme-compile" chmod +x "${venvpath}/bin/scheme-compile"
fi fi
impls="${implementation}"
if [ "${RNRS}" = "" ]; then
impls=generic
fi
## bin/snow-chibi ## bin/snow-chibi
{ {
cat << EOF cat << EOF
@ -347,7 +344,7 @@ if [ "\${1}" = "install" ]; then
shift shift
snow-chibi \ snow-chibi \
install \ install \
--impls=${impls} \ --impls=${implementation} \
--install-source-dir=${venvpath}/lib \ --install-source-dir=${venvpath}/lib \
--install-library-dir=${venvpath}/lib \ --install-library-dir=${venvpath}/lib \
--install-data-dir=${venvpath}/lib \ --install-data-dir=${venvpath}/lib \
@ -365,7 +362,7 @@ chmod +x "${venvpath}/bin/snow-chibi"
cat << EOF cat << EOF
#!/bin/sh #!/bin/sh
if [ ! "\${VENV_DEBUG}" = "" ]; then set -x; fi if [ ! "\${VENV_DEBUG}" = "" ]; then set -x; fi
cd "${venvpath}/lib" cd "${venvpath}/lib" || exit 1
akku \$@ akku \$@
EOF EOF
} > "${venvpath}/bin/akku" } > "${venvpath}/bin/akku"