Compare commits

...

19 Commits

Author SHA1 Message Date
retropikzel cf5c702387 Switch to test-r7rs 2026-03-26 09:07:33 +02:00
retropikzel 7570aeab0f Switch to test-r7rs 2026-03-26 09:06:28 +02:00
retropikzel b7d7015005 Switch to test-r7rs 2026-03-26 09:05:09 +02:00
retropikzel e34987ae8c Switch to test-r7rs 2026-03-26 09:04:43 +02:00
retropikzel be0bd6f609 Improve testing 2026-03-21 13:57:43 +02:00
retropikzel e8f0cd374b Improve testing 2026-03-21 13:47:47 +02:00
retropikzel 7bf3b69fd3 Improve testing 2026-03-21 13:19:12 +02:00
retropikzel 4501ccac4b Improve testing 2026-03-21 13:17:14 +02:00
retropikzel 8492575a65 Improve testing 2026-03-21 12:38:43 +02:00
retropikzel 619dfb8ad6 Fixing testing 2026-03-12 10:52:28 +02:00
retropikzel 975b851e9e Fixing testing 2026-03-12 10:45:01 +02:00
retropikzel 1c60967772 Fixing testing 2026-03-12 08:13:05 +02:00
retropikzel f020fc525f Fixing testing 2026-03-12 08:07:29 +02:00
retropikzel 376ad49ded Fixing testing 2026-03-12 08:00:42 +02:00
retropikzel 41191af6cc Fixing testing 2026-03-12 07:56:44 +02:00
retropikzel 9eebd513d9 Fixing testing 2026-03-12 07:56:11 +02:00
retropikzel 0a16717d1d Fixing testing 2026-03-12 07:52:18 +02:00
retropikzel da149e080b Fixing testing 2026-03-12 07:50:59 +02:00
retropikzel 1adaa618ca Fixing testing 2026-03-12 07:47:44 +02:00
8 changed files with 88 additions and 202 deletions

1
.gitignore vendored
View File

@ -24,3 +24,4 @@ example.sps
example example
venv venv
foreign foreign
tmp

View File

@ -1,46 +0,0 @@
ARG SCHEME=chibi
ARG IMAGE=${SCHEME}:head
FROM debian:trixie AS build
RUN apt-get update && apt-get install -y \
git ca-certificates make gcc libffi-dev libffi-dev wget xz-utils libcurl4
RUN mkdir ${HOME}/.snow && echo "()" > ${HOME}/.snow/config.scm
WORKDIR /build
RUN wget https://gitlab.com/-/project/6808260/uploads/094ce726ce3c6cf8c14560f1e31aaea0/akku-1.1.0.amd64-linux.tar.xz \
&& tar -xf akku-1.1.0.amd64-linux.tar.xz \
&& mv akku-1.1.0.amd64-linux akku
RUN git clone https://github.com/ashinn/chibi-scheme.git --depth=1
RUN git clone https://codeberg.org/retropikzel/compile-scheme.git --depth=1
WORKDIR /build/chibi-scheme
RUN make
RUN make install
WORKDIR /build/compile-scheme
RUN make build-gauche
WORKDIR /build
RUN git clone https://codeberg.org/foreign-c/foreign-c.git --depth=2
ARG SCHEME=chibi
ARG IMAGE=${SCHEME}:head
FROM schemers/${IMAGE}
RUN apt-get update && apt-get install -y make gcc libffi-dev libcurl4 gauche
RUN mkdir ${HOME}/.snow && echo "()" > ${HOME}/.snow/config.scm
COPY --from=build /build /build
ARG SCHEME=chibi
WORKDIR /build/compile-scheme
RUN make install
WORKDIR /build/chibi-scheme
RUN make install
WORKDIR /build/chibi-scheme
RUN make install
WORKDIR /build/akku
RUN bash install.sh
ENV PATH=/root/.local/bin:${PATH}
RUN akku update
WORKDIR /build/foreign-c
RUN timeout 30 snow-chibi install --impls=${SCHEME} --always-yes "(srfi 64)" || true
RUN timeout 30 snow-chibi install --impls=${SCHEME} --always-yes "(foreign c)" || true
RUN make SCHEME=${SCHEME} build install
WORKDIR /workdir
RUN cp -r /build/foreign-c/foreign .
COPY Makefile .
COPY retropikzel retropikzel/

View File

@ -1,8 +1,5 @@
FROM debian:trixie-slim FROM alpine
RUN apt-get update && apt-get install -y \ RUN apk add make docker git
make ca-certificates git docker.io gauche time mit-scheme RUN git clone https://codeberg.org/retropikzel/test-r7rs.git --depth=1
WORKDIR /cache RUN cd test-r7rs && ./configure && make && make install
RUN git clone https://codeberg.org/retropikzel/compile-scheme.git --depth=1 COPY --from=schemers/chibi:alpine-head /usr/local /usr/local
WORKDIR /cache/compile-scheme
RUN make build-gauche
RUN make install

37
Jenkinsfile vendored
View File

@ -15,45 +15,33 @@ pipeline {
parameters { parameters {
string(name: 'R7RS_SCHEMES', defaultValue: 'chibi chicken gauche guile kawa mosh racket sagittarius stklos ypsilon', description: '') string(name: 'R7RS_SCHEMES', defaultValue: 'chibi chicken gauche guile kawa mosh racket sagittarius stklos ypsilon', description: '')
string(name: 'R6RS_SCHEMES', defaultValue: 'chezscheme guile ikarus ironscheme mosh racket sagittarius ypsilon', description: '') string(name: 'R6RS_SCHEMES', defaultValue: 'chezscheme guile ikarus ironscheme mosh racket sagittarius ypsilon', description: '')
string(name: 'LIBRARIES', defaultValue: 'system shell', description: '') string(name: 'LIBRARIES', defaultValue: 'system named-pipes shell requests', description: '')
} }
stages { stages {
stage('Tests') { stage('Test R6RS Debian') {
parallel {
stage('R6RS') {
steps { steps {
script { script {
params.LIBRARIES.split().each { LIBRARY -> params.LIBRARIES.split().each { LIBRARY ->
stage("${LIBRARY}") { params.R6RS_SCHEMES.split().each { SCHEME ->
parallel params.R6RS_SCHEMES.split().collectEntries { SCHEME -> stage("${SCHEME} ${LIBRARY}") {
[(SCHEME): {
def IMG="${SCHEME}:head"
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') { catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') {
sh "timeout 600 make SCHEME=${SCHEME} LIBRARY=${LIBRARY} test-r6rs-docker" sh "make SCHEME=${SCHEME} LIBRARY=${LIBRARY} RNRS=r6rs test-docker"
}
}]
} }
} }
} }
} }
} }
} }
stage('R7RS') { }
stage('Test R7RS Debian') {
steps { steps {
script { script {
params.LIBRARIES.split().each { LIBRARY -> params.LIBRARIES.split().each { LIBRARY ->
stage("${LIBRARY}") { params.R7RS_SCHEMESsplit().each { SCHEME ->
parallel params.R7RS_SCHEMES.split().collectEntries() { SCHEME -> stage("${SCHEME} ${LIBRARY}") {
[(SCHEME): {
def IMG="${SCHEME}:head"
if("${SCHEME}" == "chicken") {
IMG="${SCHEME}:5"
}
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') { catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') {
sh "timeout 600 make SCHEME=${SCHEME} LIBRARY=${LIBRARY} test-r7rs-docker" sh "make SCHEME=${SCHEME} LIBRARY=${LIBRARY} RNRS=r7rs test-docker"
}
}]
} }
} }
} }
@ -62,6 +50,9 @@ pipeline {
} }
} }
} }
post {
always {
cleanWs()
}
} }
} }

View File

@ -1,4 +1,6 @@
SCHEME=chibi SCHEME=chibi
DOCKER_TAG=latest
IMAGE=${SCHEME}:${DOCKER_TAG}
RNRS=r7rs RNRS=r7rs
LIBRARY=system LIBRARY=system
EXAMPLE=editor EXAMPLE=editor
@ -13,84 +15,47 @@ TESTFILE=retropikzel/${LIBRARY}/test.scm
PKG=retropikzel-${LIBRARY}-${VERSION}.tgz PKG=retropikzel-${LIBRARY}-${VERSION}.tgz
DOCKERIMG=${SCHEME}:head SFX=scm
ifeq "${SCHEME}" "chicken" SNOW=snow-chibi --impls=${SCHEME} install --always-yes
DOCKERIMG="chicken:5" LIB_PATHS=
ifeq "${RNRS}" "r6rs"
SNOW=snow-chibi --impls=${SCHEME} install --always-yes --install-source-dir=. --install-library-dir=.
SFX=sps
LIB_PATHS=-I .akku/lib
endif endif
all: build all: build
build: retropikzel/${LIBRARY}/LICENSE retropikzel/${LIBRARY}/VERSION build: retropikzel/${LIBRARY}/LICENSE retropikzel/${LIBRARY}/VERSION
rm -rf *.tgz
echo "<pre>$$(cat retropikzel/${LIBRARY}/README.md)</pre>" > ${README} echo "<pre>$$(cat retropikzel/${LIBRARY}/README.md)</pre>" > ${README}
snow-chibi package --version=${VERSION} --authors=${AUTHOR} --doc=${README} --description="${DESCRIPTION}" ${LIBRARY_FILE} snow-chibi package \
--always-yes \
--version=${VERSION} \
--authors=${AUTHOR} \
--doc=${README} \
--description="${DESCRIPTION}" \
${LIBRARY_FILE}
install: install:
snow-chibi install --impls=${SCHEME} ${SNOW_CHIBI_ARGS} ${PKG} snow-chibi install --impls=${SCHEME} --always-yes ${PKG}
uninstall: testfiles: build
-snow-chibi remove --impls=${SCHEME} ${PKG} rm -rf .tmp
mkdir -p .tmp
cp ${PKG} .tmp/
# R6RS testfiles
printf "#!r6rs\n(import (except (rnrs) remove) (srfi :64) (retropikzel ${LIBRARY}))" > .tmp/test.sps
cat ${TESTFILE} >> .tmp/test.sps
# R7RS testfiles
echo "(import (scheme base) (scheme write) (scheme read) (scheme char) (scheme file) (scheme process-context) (srfi 64) (retropikzel ${LIBRARY}))" > .tmp/test.scm
cat ${TESTFILE} >> .tmp/test.scm
init-venv: build test: testfiles
rm -rf venv cd .tmp && COMPILE_R7RS=${SCHEME} compile-r7rs -o test-program test.${SFX}
scheme-venv ${SCHEME} ${RNRS} venv cd .tmp && ./test-program
echo "(import (scheme base) (scheme write) (scheme read) (scheme char) (scheme file) (scheme process-context) (srfi 64) (retropikzel ${LIBRARY}))" > venv/test.scm
printf "#!r6rs\n(import (except (rnrs) remove) (srfi :64) (retropikzel ${LIBRARY}))" > venv/test.sps
cat ${TESTFILE} >> venv/test.scm
cat ${TESTFILE} >> venv/test.sps
if [ "${RNRS}" = "r6rs" ]; then if [ -d ../foreign-c ]; then cp -r ../foreign-c/foreign venv/lib/; fi; fi
if [ "${RNRS}" = "r6rs" ]; then cp -r retropikzel venv/lib/; fi
#if [ "${SCHEME}" = "chezscheme" ]; then ./venv/bin/akku install akku-r7rs chez-srfi; fi
#if [ "${SCHEME}" = "ikarus" ]; then ./venv/bin/akku install akku-r7rs chez-srfi; fi
#if [ "${SCHEME}" = "ironscheme" ]; then ./venv/bin/akku install akku-r7rs chez-srfi; fi
#if [ "${SCHEME}" = "racket" ]; then ./venv/bin/akku install akku-r7rs chez-srfi; fi
if [ "${RNRS}" = "r6rs" ]; then ./venv/bin/akku install akku-r7rs chez-srfi; fi
if [ "${SCHEME}" = "chicken" ]; then ./venv/bin/snow-chibi install --always-yes srfi.64; fi
if [ "${SCHEME}-${RNRS}" = "mosh-r7rs" ]; then ./venv/bin/snow-chibi install --always-yes srfi.64; fi
if [ "${RNRS}" = "r7rs" ]; then ./venv/bin/snow-chibi install ${PKG}; fi
run-test: init-venv test-docker: testfiles
if [ "${RNRS}" = "r6rs" ]; then ./venv/bin/scheme-compile venv/test.sps; fi cd .tmp && SNOW_PACKAGES="srfi.64 foreign.c" COMPILE_R7RS=${SCHEME} test-r7rs -o test-program test.${SFX} ${PKG}
if [ "${RNRS}" = "r7rs" ]; then CSC_OPTIONS="-L -lcurl -L -lSDL2 -L -lSDL2_image" ./venv/bin/scheme-compile venv/test.scm; fi
./venv/test
test-r7rs:
echo "(import (scheme base) (scheme write) (scheme file) (scheme process-context) (foreign c) (retropikzel ${LIBRARY}) (srfi 64))" > test-r7rs.scm
cat retropikzel/${LIBRARY}/test.scm >> test-r7rs.scm
COMPILE_R7RS=${SCHEME} timeout 60 compile-scheme -I . -o test-r7rs test-r7rs.scm
printf "\n" | timeout 60 ./test-r7rs
test-r7rs-docker:
echo "Building docker image..."
docker build --build-arg IMAGE=${DOCKERIMG} --build-arg SCHEME=${SCHEME} --tag=foreign-c-library-test-${SCHEME} --quiet .
docker run -t foreign-c-library-test-${SCHEME} sh -c "make SCHEME=${SCHEME} LIBRARY=${LIBRARY} SNOW_CHIBI_ARGS=--always-yes build install test-r7rs"
example.scm: ${EXAMPLE_FILE}.scm
cp ${EXAMPLE_FILE}.scm example.scm
example-r7rs: example.scm
COMPILE_R7RS=${SCHEME} compile-scheme -I . -o example example.scm
./example
test-r6rs:
echo "(import (except (rnrs) remove) (foreign c) (retropikzel ${LIBRARY}) (srfi :64))" > test-r6rs.sps
cat retropikzel/${LIBRARY}/test.scm >> test-r6rs.sps
akku install chez-srfi akku-r7rs
COMPILE_R7RS=${SCHEME} timeout 60 compile-scheme -I .akku/lib -o test-r6rs test-r6rs.sps
timeout 60 ./test-r6rs
test-r6rs-docker:
echo "Building docker image..."
docker build --build-arg IMAGE=${DOCKERIMG} --build-arg SCHEME=${SCHEME} --tag=foreign-c-library-test-${SCHEME} --quiet .
docker run -t foreign-c-library-test-${SCHEME} sh -c "make SCHEME=${SCHEME} LIBRARY=${LIBRARY} test-r6rs"
example.sps: ${EXAMPLE_FILE}.sps
cp ${EXAMPLE_FILE}.scm example.sps
example-r6rs: example.sps
akku install akku-r7rs "(foreign c)"
COMPILE_R7RS=${SCHEME} compile-scheme -I .akku/lib -o example example.sps
./example
clean: clean:
git clean -X -f git clean -X -f

View File

@ -1,7 +1,4 @@
(define-c-library libc (define-c-library libc '("stdlib.h") #f '())
'("stdlib.h")
libc-name
'((additional-versions ("6"))))
(define-c-library c-gi (define-c-library c-gi
'("girepository/girepository.h") '("girepository/girepository.h")
"girepository-2.0" "girepository-2.0"

View File

@ -1,7 +1,4 @@
# requests Scheme library to make https requests. Built with (foreign c) and libcurl.
Scheme library to make https requests. Built with
[foreign c](https://sr.ht/~retropikzel/foreign-c/) and libcurl.
[Repository](https://git.sr.ht/~retropikzel/foreign-c-requests) [Repository](https://git.sr.ht/~retropikzel/foreign-c-requests)
@ -9,15 +6,11 @@ Scheme library to make https requests. Built with
[Jenkins](https://jenkins.scheme.org/job/foreign_c/job/foreign-c-requests/) [Jenkins](https://jenkins.scheme.org/job/foreign_c/job/foreign-c-requests/)
## Caveats ## Caveats
- Not yet working on Mosh - Not yet working on Mosh
- No cookie reading support yet - No cookie reading support yet
## Dependencies ## Dependencies
Depends on libcurl, on Debian/Ubuntu: Depends on libcurl, on Debian/Ubuntu:

View File

@ -3,7 +3,7 @@
(define exit? #f) (define exit? #f)
(define scale-x 1.0) (define scale-x 1.0)
(define scale-y 1.0) (define scale-y 1.0)
(define events (list)) (define events '())
(define current-bitmap-font #f) (define current-bitmap-font #f)
(define current-line-size 1) (define current-line-size 1)
(define draw-color-r 0) (define draw-color-r 0)
@ -51,31 +51,21 @@
(define event* (make-c-bytevector 4000)) (define event* (make-c-bytevector 4000))
(define draw-rect* (make-c-bytevector (* (c-type-size 'int) 4))) (define draw-rect* (make-c-bytevector (* (c-type-size 'int) 4)))
(define draw-slice-rect* (make-c-bytevector (* (c-type-size 'int) 4))) (define draw-slice-rect* (make-c-bytevector (* (c-type-size 'int) 4)))
(define fill-triangle-vertex-size 128) ;(+ (* (c-type-size 'int) 6) (* (c-type-size 'float) 2)) (define fill-triangle-vertex-size (+ (* (c-type-size 'int) 6) (* (c-type-size 'float) 2)))
(define fill-triangle-vertex1* (make-c-bytevector fill-triangle-vertex-size 0)) (define fill-triangle-vertex1* (make-c-bytevector fill-triangle-vertex-size 0))
(define fill-triangle-vertex2* (make-c-bytevector fill-triangle-vertex-size 0)) (define fill-triangle-vertex2* (make-c-bytevector fill-triangle-vertex-size 0))
(define fill-triangle-vertex3* (make-c-bytevector fill-triangle-vertex-size 0)) (define fill-triangle-vertex3* (make-c-bytevector fill-triangle-vertex-size 0))
(define fill-triangle-vertexes* (make-c-bytevector (* fill-triangle-vertex-size 3 0))) (define fill-triangle-vertexes* (make-c-bytevector (* fill-triangle-vertex-size 3 0)))
(c-bytevector-set! fill-triangle-vertexes* (c-bytevector-set!
'pointer fill-triangle-vertexes* 'pointer (* fill-triangle-vertex-size 0) fill-triangle-vertex1*)
(* fill-triangle-vertex-size 0) (c-bytevector-set!
fill-triangle-vertex1*) fill-triangle-vertexes* 'pointer (* fill-triangle-vertex-size 1) fill-triangle-vertex2*)
(c-bytevector-set! fill-triangle-vertexes* (c-bytevector-set!
'pointer fill-triangle-vertexes* 'pointer (* fill-triangle-vertex-size 2) fill-triangle-vertex3*)
(* fill-triangle-vertex-size 1)
fill-triangle-vertex2*)
(c-bytevector-set! fill-triangle-vertexes*
'pointer
(* fill-triangle-vertex-size 2)
fill-triangle-vertex3*)
(define update-procedure #f)
(define draw-procedure #f)
(define main-loop-start-time 0) (define main-loop-start-time 0)
(define delta-time 0) (define delta-time 0)
(define main-loop (define (main-loop update-procedure draw-procedure)
(lambda ()
(set! main-loop-start-time (current-jiffy)) (set! main-loop-start-time (current-jiffy))
(sdl2-events-get) (sdl2-events-get)
(update-procedure delta-time (poll-events!)) (update-procedure delta-time (poll-events!))
@ -83,7 +73,7 @@
(draw-procedure) (draw-procedure)
(render-present) (render-present)
(set! delta-time (/ (- (current-jiffy) main-loop-start-time) (jiffies-per-second))) (set! delta-time (/ (- (current-jiffy) main-loop-start-time) (jiffies-per-second)))
(unless exit? (main-loop)))) (unless exit? (main-loop update-procedure draw-procedure)))
(define sdl2-event->spite-event (define sdl2-event->spite-event
(lambda (event) (lambda (event)
@ -304,13 +294,11 @@
(cons 'y (c-bytevector-ref y 'float 0)))))) (cons 'y (c-bytevector-ref y 'float 0))))))
(define spite-start (define spite-start
(lambda (new-update-procedure new-draw-procedure) (lambda (update-procedure draw-procedure)
(set! update-procedure new-update-procedure)
(set! draw-procedure new-draw-procedure)
(cond (cond
((not started?) ((not started?)
(set! started? #t) (set! started? #t)
(main-loop))))) (main-loop update-procedure draw-procedure)))))
(define spite-init (define spite-init
(lambda (title width height) (lambda (title width height)