Compare commits
No commits in common. "76ffe790d30c63e3ddf7be8c5a822512c89359f6" and "e007dc1611ec475d59ee4f5648c474da0b94b4c5" have entirely different histories.
76ffe790d3
...
e007dc1611
|
|
@ -1,12 +0,0 @@
|
||||||
ARG SCHEME=chibi
|
|
||||||
ARG IMAGE=chibi:latest
|
|
||||||
FROM docker.io/schemers/${IMAGE}
|
|
||||||
ARG SCHEME=chibi
|
|
||||||
ENV COMPILE_R7RS=${SCHEME}
|
|
||||||
RUN apk add make
|
|
||||||
COPY configure .
|
|
||||||
COPY Makefile .
|
|
||||||
COPY compile-r7rs .
|
|
||||||
RUN ./configure
|
|
||||||
RUN make
|
|
||||||
RUN make install
|
|
||||||
41
Makefile
41
Makefile
|
|
@ -2,15 +2,9 @@
|
||||||
PREFIX=/usr/local
|
PREFIX=/usr/local
|
||||||
SCHEME=chibi
|
SCHEME=chibi
|
||||||
DOCKER_TAG=latest
|
DOCKER_TAG=latest
|
||||||
DEBIAN_IMAGE=${SCHEME}:${DOCKER_TAG}
|
IMAGE=${SCHEME}:${DOCKER_TAG}
|
||||||
ALPINE_IMAGE=${SCHEME}:alpine-${DOCKER_TAG}
|
|
||||||
RNRS=r7rs
|
RNRS=r7rs
|
||||||
|
|
||||||
SFX=sps
|
|
||||||
ifeq "${RNRS}" "r7rs"
|
|
||||||
SFX=scm
|
|
||||||
endif
|
|
||||||
|
|
||||||
all: build
|
all: build
|
||||||
|
|
||||||
build:
|
build:
|
||||||
|
|
@ -27,41 +21,30 @@ test:
|
||||||
mkdir -p .tmp/libs/foo
|
mkdir -p .tmp/libs/foo
|
||||||
mkdir -p .tmp/other_libs
|
mkdir -p .tmp/other_libs
|
||||||
# R6RS testfiles
|
# R6RS testfiles
|
||||||
printf "#!r6rs\n(import (rnrs))\n(display \"Hello main1\") (newline))\n" > .tmp/main1.sps
|
printf "#!r6rs\n(import (rnrs) (foo bar))\n(baz)" > .tmp/main.sps
|
||||||
printf "#!r6rs\n(import (rnrs) (foo bar))\n(baz)\n" > .tmp/main2.sps
|
|
||||||
printf "#!r6rs\n(library (foo bar) (export baz) (import (rnrs)) (define (baz) (display \"Hello from bar.sls\") (newline)))" > .tmp/libs/foo/bar.sls
|
printf "#!r6rs\n(library (foo bar) (export baz) (import (rnrs)) (define (baz) (display \"Hello from bar.sls\") (newline)))" > .tmp/libs/foo/bar.sls
|
||||||
# Racket compability testfiles
|
# Racket compability testfiles
|
||||||
printf "#lang r7rs (import (scheme base)) (include \"bar.sld\")" > .tmp/libs/foo/bar.rkt
|
printf "#lang r7rs (import (scheme base)) (include \"bar.sld\")" > .tmp/libs/foo/bar.rkt
|
||||||
# R7RS testfiles
|
# R7RS testfiles
|
||||||
printf "(import (scheme base) (scheme write))\n(display \"Hello main1\") (newline)" > .tmp/main1.scm
|
printf "(import (scheme base) (scheme write) (foo bar))\n(baz)" > .tmp/main.scm
|
||||||
printf "(import (scheme base) (scheme write) (foo bar))\n(baz)" > .tmp/main2.scm
|
|
||||||
printf "(define-library (foo bar) (import (scheme base) (scheme write)) (export baz) (include \"bar.scm\"))" > .tmp/libs/foo/bar.sld
|
printf "(define-library (foo bar) (import (scheme base) (scheme write)) (export baz) (include \"bar.scm\"))" > .tmp/libs/foo/bar.sld
|
||||||
printf "(define (baz) (display \"Hello from bar.scm\") (newline))" > .tmp/libs/foo/bar.scm
|
printf "(define (baz) (display \"Hello from bar.scm\") (newline))" > .tmp/libs/foo/bar.scm
|
||||||
# Tests
|
# Tests
|
||||||
rm -rf .tmp/a.out
|
rm -rf .tmp/main
|
||||||
cd .tmp && COMPILE_R7RS=${SCHEME} sh ../compile-r7rs main1.${SFX}
|
if [ "${RNRS}" = "r6rs" ]; then cd .tmp && COMPILE_R7RS=${SCHEME} sh ../compile-r7rs -o main -I libs main.sps; fi
|
||||||
cd .tmp && ./a.out
|
if [ "${RNRS}" = "r7rs" ]; then cd .tmp && COMPILE_R7RS=${SCHEME} sh ../compile-r7rs -o main -I libs main.scm; fi
|
||||||
rm -rf .tmp/a.out
|
|
||||||
cd .tmp && COMPILE_R7RS=${SCHEME} sh ../compile-r7rs -o main main1.${SFX}
|
|
||||||
cd .tmp && ./main
|
cd .tmp && ./main
|
||||||
rm -rf .tmp/main
|
rm -rf .tmp/main
|
||||||
cd .tmp && COMPILE_R7RS=${SCHEME} sh ../compile-r7rs -o main -I libs main2.${SFX}
|
if [ "${RNRS}" = "r6rs" ]; then cd .tmp && COMPILE_R7RS=${SCHEME} sh ../compile-r7rs -o main -A libs main.sps; fi
|
||||||
|
if [ "${RNRS}" = "r7rs" ]; then cd .tmp && COMPILE_R7RS=${SCHEME} sh ../compile-r7rs -o main -A libs main.scm; fi
|
||||||
cd .tmp && ./main
|
cd .tmp && ./main
|
||||||
cd .tmp && ./main
|
if [ "${RNRS}" = "r6rs" ]; then cd .tmp && COMPILE_R7RS=${SCHEME} sh ../compile-r7rs -o main -I libs -A libs main.sps; fi
|
||||||
rm -rf .tmp/main
|
if [ "${RNRS}" = "r7rs" ]; then cd .tmp && COMPILE_R7RS=${SCHEME} sh ../compile-r7rs -o main -I libs -A libs main.scm; fi
|
||||||
cd .tmp && COMPILE_R7RS=${SCHEME} sh ../compile-r7rs -o main -A libs main2.${SFX}
|
|
||||||
cd .tmp && ./main
|
|
||||||
cd .tmp && ./main
|
|
||||||
then cd .tmp && COMPILE_R7RS=${SCHEME} sh ../compile-r7rs -o main -I libs -A libs main2.${SFX}
|
|
||||||
cd .tmp && ./main
|
cd .tmp && ./main
|
||||||
|
|
||||||
test-docker-debian:
|
test-docker:
|
||||||
docker build --build-arg IMAGE=${DEBIAN_IMAGE} --build-arg SCHEME=${SCHEME} -f Dockerfile.test --tag=${SCHEME}-testing --quiet .
|
docker build --build-arg IMAGE=${IMAGE} --build-arg SCHEME=${SCHEME} -f Dockerfile.test --tag=${SCHEME}-testing .
|
||||||
docker run ${SCHEME}-testing sh -c "make SCHEME=${SCHEME} RNRS=${RNRS} test"
|
docker run ${SCHEME}-testing sh -c "make SCHEME=${SCHEME} RNRS=${RNRS} test"
|
||||||
|
|
||||||
test-docker-alpine:
|
|
||||||
docker build --build-arg IMAGE=${ALPINE_IMAGE} --build-arg SCHEME=${SCHEME} -f Dockerfile.alpine.test --tag=${SCHEME}-alpine-testing --quiet .
|
|
||||||
docker run ${SCHEME}-alpine-testing sh -c "make SCHEME=${SCHEME} RNRS=${RNRS} test"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
89
compile-r7rs
89
compile-r7rs
|
|
@ -52,54 +52,50 @@ append_dirs="${append_dirs#:}"
|
||||||
prepend_dirs="${prepend_dirs#,}"
|
prepend_dirs="${prepend_dirs#,}"
|
||||||
append_dirs="${append_dirs#,}"
|
append_dirs="${append_dirs#,}"
|
||||||
|
|
||||||
if [ "$input_file" = "" ]; then
|
|
||||||
echo "Please give input file of either .sps or .scm as argument"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
case $rnrs in
|
case $rnrs in
|
||||||
R6RS)
|
R6RS)
|
||||||
case $COMPILE_R7RS in
|
case $COMPILE_R7RS in
|
||||||
capyscheme) cmd="capy --r6rs $prepend_dirs $append_dirs --script \"\$tmpfile\"";;
|
capyscheme) cmd="exec capy --r6rs $prepend_dirs $append_dirs --script \"\$0\" \"\$@"\";;
|
||||||
chezscheme) cmd="scheme --libdirs $prepend_dirs:$append_dirs --program \"\$tmpfile\"";;
|
chezscheme) cmd="exec scheme --libdirs $prepend_dirs:$append_dirs --program \"\$0\" \"\$@\"";;
|
||||||
guile) cmd="exec guile --r6rs $prepend_dirs $append_dirs \"\$0\" \"\$@\"";;
|
guile) cmd="exec guile --r6rs $prepend_dirs $append_dirs \"\$0\" \"\$@\"";;
|
||||||
ikarus) cmd="IKARUS_LIBRARY_PATH=$prepend_dirs:$append_dirs ikarus --r6rs-script \"\$tmpfile\"";;
|
ikarus) cmd="IKARUS_LIBRARY_PATH=$prepend_dirs:$append_dirs exec ikarus --r6rs-script \"\$0\" \"$@\"";;
|
||||||
ironscheme) cmd="ironscheme $prepend_dirs $append_dirs \"\$tmpfile\"";;
|
ironscheme) cmd="exec ironscheme $prepend_dirs $append_dirs \"\$0\" \"$@\"";;
|
||||||
larceny) cmd="larceny -r6rs -utf8 -quiet -nobanner $prepend_dirs $append_dirs -program \"\$tmpfile\"";;
|
larceny) cmd="exec larceny -r6rs -utf8 -quiet -nobanner $prepend_dirs $append_dirs -program \"\$0\" -- \"\$@\"";;
|
||||||
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) cmd="MOSH_LOADPATH=$prepend_dirs:$append_dirs mosh \"\$tmpfile\"";;
|
mosh) cmd="MOSH_LOADPATH=$prepend_dirs:$append_dirs exec mosh \"\$0\" \"\$@\"";;
|
||||||
racket) cmd="racket -I scheme/init -l r6rs/run.rkt $prepend_dirs $append_dirs \"\$tmpfile\"";;
|
racket) cmd="exec racket -I scheme/init -l r6rs/run.rkt $prepend_dirs $append_dirs \"\$0\" -- \"\$@\"";;
|
||||||
sagittarius) cmd="sash -r6 $prepend_dirs $append_dirs \"\$tmpfile\"";;
|
sagittarius) cmd="exec sash -r6 $prepend_dirs $append_dirs \"\$0\" \"\$@\"";;
|
||||||
ypsilon) cmd="ypsilon $prepend_dirs $append_dirs --top-level-program \"\$tmpfile\"";;
|
ypsilon) cmd="exec ypsilon $prepend_dirs $append_dirs --top-level-program \"\$0\" \"\$@\"";;
|
||||||
*) 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) cmd="capy --r7rs $prepend_dirs $append_dirs --script \"\$tmpfile\"";;
|
capyscheme) cmd="exec capy --r7rs $prepend_dirs $append_dirs --script \"\$0\" \"\$@"\";;
|
||||||
chicken) csc -R r7rs -X r7rs -o "$output_file" "$input_file";;
|
chicken) csc -o "$output_file" "$input_file";;
|
||||||
chibi) cmd="chibi-scheme $prepend_dirs $append_dirs \"\$tmpfile\"";;
|
chibi) cmd="exec chibi-scheme $prepend_dirs $append_dirs \"\$0\" \"\$@\"";;
|
||||||
cyclone) cyclone -o "$output_file" $prepend_dirs $append_dirs "$input_file";;
|
cyclone) cyclone -o "$output_file" $prepend_dirs $append_dirs "$input_file";;
|
||||||
foment) cmd="foment $prepend_dirs $append_dirs -A /usr/local/share/snow \"\$tmpfile\"";;
|
foment) cmd="exec foment $prepend_dirs $append_dirs -A /usr/local/share/snow \"\$0\" \"\$@\"";;
|
||||||
gauche) cmd="gosh -r7 $prepend_dirs $append_dirs \"\$tmpfile\"";;
|
gauche) cmd="exec gosh -r7 $prepend_dirs $append_dirs \"\$0\" \"\$@\"";;
|
||||||
gambit) cmd="gsi -:r7rs $prepend_dirs $append_dirs \"\$tmpfile\"";;
|
gambit) cmd="exec gsi -:r7rs $prepend_dirs $append_dirs \"\$0\" \"\$@\"";;
|
||||||
goldfish) cmd="goldfish --mode r7rs \"\$tmpfile\"";;
|
goldfish) cmd="exec goldfish --mode r7rs \"\$0\" \"\$@\"";;
|
||||||
guile) cmd="exec guile --r7rs $prepend_dirs $append_dirs \"\$0\" \"\$@\"";;
|
guile) cmd="exec guile --r7rs $prepend_dirs $append_dirs \"\$0\" \"\$@\"";;
|
||||||
kawa) cmd="classpath=\$(kawa -e '(display (get-environment-variable \"CLASSPATH\"))')\nCLASSPATH=\${classpath%%kawa.jar} exec 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:\${classpath%%kawa.jar}/*.sld --script1";;
|
kawa) cmd="classpath=\$(kawa -e '(display (get-environment-variable \"CLASSPATH\"))')\nCLASSPATH=\${classpath%%kawa.jar} exec 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:\${classpath%%kawa.jar}/*.sld -f \"\$0\" \"\$@\"";;
|
||||||
larceny) cmd="larceny -r7rs -utf8 -quiet -nobanner $prepend_dirs $append_dirs -program \"\$tmpfile\"";;
|
larceny) cmd="exec larceny -r7rs -utf8 -quiet -nobanner $prepend_dirs $append_dirs -program \"\$0\" -- \"\$@\"";;
|
||||||
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) cmd="meevax $prepend_dirs $append_dirs \"\$tmpfile\"";;
|
meevax) cmd="exec meevax $prepend_dirs $append_dirs \"\$0\" \"\$@\"";;
|
||||||
mit-scheme) cmd="mit-scheme --batch-mode --load \"\$tmpfile\" --eval \"(exit 0)\"";;
|
mit-scheme) cmd="libs=\nfor dir in $prepend_dirs $append_dirs; do libs=\"\$libs \$(find \$dir -name *.sld -printf \"--load %%p \")\"; done; exec mit-scheme --batch-mode \$libs --load \$0 --eval \"(exit 0)\" -- \"$@\"";;
|
||||||
mosh) cmd="MOSH_LOADPATH=$prepend_dirs:$append_dirs mosh \"\$tmpfile\"";;
|
mosh) cmd="MOSH_LOADPATH=$prepend_dirs:$append_dirs exec mosh \"\$0\" \"\$@\"";;
|
||||||
racket) cmd="racket -I r7rs $prepend_dirs $append_dirs --script \"\$tmpfile\"";;
|
racket) cmd="exec racket -I r7rs $prepend_dirs $append_dirs --script \"\$0\" \"\$@\"";;
|
||||||
sagittarius) cmd="sash -r7 $prepend_dirs $append_dirs \"\$tmpfile\"";;
|
sagittarius) cmd="exec sash -r7 $prepend_dirs $append_dirs \"\$0\" \"\$@\"";;
|
||||||
skint) cmd="skint $prepend_dirs $append_dirs --program \"\$tmpfile\"";;
|
skint) cmd="exec skint $prepend_dirs $append_dirs --program \"\$0\" \"\$@\"";;
|
||||||
stklos) cmd="stklos $prepend_dirs $append_dirs \"\$tmpfile\"";;
|
stklos) cmd="exec stklos $prepend_dirs $append_dirs \"\$0\" \"\$@\"";;
|
||||||
tr7) case "$prepend_dirs:$append_dirs" in
|
tr7) case "$prepend_dirs:$append_dirs" in
|
||||||
":") cmd="tr7i -1 \"\$tmpfile\"";;
|
":") cmd="exec tr7i -1 \"\$0\" \"\$@\"";;
|
||||||
*) cmd="TR7_LIB_PATH=$prepend_dirs:$append_dirs tr7i -1 \"\$tmpfile\"";;
|
*) cmd="TR7_LIB_PATH=$prepend_dirs:$append_dirs exec tr7i -1 \"\$0\" \"$@\"";;
|
||||||
esac;;
|
esac;;
|
||||||
ypsilon) cmd="ypsilon $prepend_dirs $append_dirs --top-level-program \"\$tmpfile\"";;
|
ypsilon) cmd="exec ypsilon $prepend_dirs $append_dirs --top-level-program \"\$0\" \"\$@\"";;
|
||||||
*) echo "Unsupported implementation RNRS combination: $COMPILE_R7RS $rnrs"; exit 1;;
|
*) echo "Unsupported implementation RNRS combination: $COMPILE_R7RS $rnrs"; exit 1;;
|
||||||
esac;;
|
esac;;
|
||||||
esac
|
esac
|
||||||
|
|
@ -107,34 +103,9 @@ esac
|
||||||
|
|
||||||
case $COMPILE_R7RS in
|
case $COMPILE_R7RS in
|
||||||
chicken|cyclone|loko) sleep 0;;
|
chicken|cyclone|loko) sleep 0;;
|
||||||
guile)
|
|
||||||
{
|
|
||||||
echo "#!/bin/sh"
|
|
||||||
printf "$cmd\n"
|
|
||||||
echo "!#"
|
|
||||||
cat "$input_file"
|
|
||||||
} > "$output_file"
|
|
||||||
;;
|
|
||||||
kawa)
|
|
||||||
{
|
|
||||||
echo "#!/bin/sh"
|
|
||||||
echo "#|"
|
|
||||||
printf "$cmd"
|
|
||||||
echo ' "$0" "$@"'
|
|
||||||
echo "|#"
|
|
||||||
cat "$input_file"
|
|
||||||
} > "$output_file"
|
|
||||||
;;
|
|
||||||
*)
|
*)
|
||||||
{
|
printf "\n#|\n$cmd\n|#\n" > "$output_file"
|
||||||
echo "#!/bin/sh"
|
cat "$input_file" >> "$output_file"; echo "" >> "$output_file"
|
||||||
echo "tmpfile=\$(mktemp)"
|
|
||||||
echo "tail \"\$0\" -n +7 > \$tmpfile"
|
|
||||||
echo "$cmd"
|
|
||||||
echo "rm -f \$tmpfile"
|
|
||||||
echo "exit 0"
|
|
||||||
cat "$input_file"
|
|
||||||
} > "$output_file"
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
chmod +x "$output_file"
|
chmod +x "$output_file"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue