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
*.link
test
*.deb
deb

View File

@ -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 <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:
@mkdir -p ${PREFIX}/bin
@install scheme-venv ${PREFIX}/bin/scheme-venv

View File

@ -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

View File

@ -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"