diff --git a/Jenkinsfile b/Jenkinsfile index 106d143..eef6490 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -32,7 +32,7 @@ pipeline { DOCKERIMG="${implementation}:head" } sh "docker build --build-arg IMAGE=${DOCKERIMG} --build-arg SCHEME=${implementation} --tag=foreign-c-test-${implementation} -f dockerfiles/Dockerfile.snow-chibi-install-test ." - sh "docker run -v ${WORKSPACE}:/workdir -w /workdir -t foreign-c-test-${implementation} sh -c \"timeout 120 make SCHEME=${implementation} clean force-install && cp tests/hello.scm /tmp/ && cd /tmp && COMPILE_R7RS=${implementation} printf \"\\n\" | timeout 120 compile-r7rs -o hello hello.scm && printf \"\\n\" | timeout 120 ./hello\"" + sh "docker run -v ${WORKSPACE}:/workdir -w /workdir -t foreign-c-test-${implementation} sh -c \"timeout 120 make SCHEME=${implementation} SNOW_CHIBI_ARGS=\"--always-yes\" clean install && cp tests/hello.scm /tmp/ && cd /tmp && COMPILE_R7RS=${implementation} printf \"\\n\" | timeout 120 compile-r7rs -o hello hello.scm && printf \"\\n\" | timeout 120 ./hello\"" } } tests.each { test -> diff --git a/Makefile b/Makefile index 8c3d4a9..0263d5c 100644 --- a/Makefile +++ b/Makefile @@ -5,18 +5,20 @@ VERSION=0.10.5 TEST=primitives SCHEME=chibi TMPDIR=tmp/${SCHEME} +SNOW_CHIBI_ARGS="" DOCKERIMG=${SCHEME}:head ifeq "${SCHEME}" "chicken" DOCKERIMG="chicken:5" endif -INCDIRS=-I . -I /usr/local/share/kawa/lib -ifeq "${SCHEME}" "ypsilon" -INCDIRS=-I . +GAUCHE_LIB_DIR="" +ifeq "${SCHEME}" "gauche" +GAUCHE_LIB_DIR=$(shell gauche-config --sitelibdir) endif +all: package + package: README.html - make ${SCHEME} snow-chibi package \ --version=${VERSION} \ --authors="Retropikzel" \ @@ -25,86 +27,32 @@ package: README.html --description="Portable foreign function interface for R7RS Schemes" \ foreign/c.sld -install: +install: package + snow-chibi --impls=${SCHEME} install foreign-c-${VERSION}.tgz; \ if [ "${SCHEME}" = "gauche" ]; then \ - cp -r foreign $(shell gauche-config --syslibdir)/; \ - mkdir -p $(shell gauche-config --sysarchdir)/foreign/c/lib; \ - cp -r foreign/c/lib/gauche.so $(shell gauche-config --sysarchdir)/foreign/c/lib/; \ - else \ - snow-chibi --impls=${SCHEME} install foreign-c-${VERSION}.tgz; \ + make gauche; \ + cp foreign/c/primitives/gauche.scm ${GAUCHE_LIB_DIR}/foreign/c/primitives/;\ + mkdir -p $(shell gauche-config --sitearchdir)/foreign/c/lib/; \ + cp -r foreign/c/lib/gauche.so $(shell gauche-config --sitearchdir)/foreign/c/lib/; \ + tree ${GAUCHE_LIB_DIR}/; \ fi uninstall: - snow-chibi --impls=${SCHEME} remove foreign.c - -force-install: - if [ "${SCHEME}" = "gauche" ]; then \ - cp -r foreign $(shell gauche-config --sitelibdir)/; \ - mkdir -p $(shell gauche-config --sysarchdir)/foreign/c/lib; \ - cp -r foreign/c/lib/gauche.so $(shell gauche-config --sysarchdir)/foreign/c/lib/; \ - else \ - printf "\n" | snow-chibi --impls=${SCHEME} --always-yes install foreign-c-${VERSION}.tgz; \ - fi - -test-java: ${TMPDIR}/test/libtest.o ${TMPDIR}/test/libtest.so ${TMPDIR}/test/libtest.a - mkdir -p ${TMPDIR}/test - cp kawa.jar ${TMPDIR}/test/ - cp -r foreign ${TMPDIR}/test/ - cp tests/*.scm ${TMPDIR}/test/ - cp tests/c-include/libtest.h ${TMPDIR}/test/ - cd ${TMPDIR}/test \ - && ${JAVA_HOME}/bin/java --add-exports java.base/jdk.internal.foreign.abi=ALL-UNNAMED --add-exports java.base/jdk.internal.foreign.layout=ALL-UNNAMED --add-exports java.base/jdk.internal.foreign=ALL-UNNAMED --enable-native-access=ALL-UNNAMED --enable-preview -jar kawa.jar --r7rs --full-tailcalls -Dkawa.import.path=*.sld:./snow/*.sld:./snow/retropikzel/*.sld ${TEST}.scm - -test-chibi: ${TMPDIR}/test/libtest.o ${TMPDIR}/test/libtest.so ${TMPDIR}/test/libtest.a - make chibi - mkdir -p ${TMPDIR}/test - cp kawa.jar ${TMPDIR}/test/ - cp -r foreign ${TMPDIR}/test/ - cp tests/*.scm ${TMPDIR}/test/ - cp tests/c-include/libtest.h ${TMPDIR}/test/ - cd ${TMPDIR}/test && chibi-scheme -I . ${TEST}.scm + snow-chibi --impls=${SCHEME} remove "(foreign c)" test: ${TMPDIR}/test/libtest.o ${TMPDIR}/test/libtest.so ${TMPDIR}/test/libtest.a - make ${SCHEME} cp -r foreign ${TMPDIR}/test/ cp tests/*.scm ${TMPDIR}/test/ cp tests/c-include/libtest.h ${TMPDIR}/test/ cd ${TMPDIR}/test && \ COMPILE_R7RS_CHICKEN="-L -ltest -I. -L." \ - COMPILE_R7RS_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" \ COMPILE_R7RS=${SCHEME} \ - compile-r7rs ${INCDIRS} -o ${TEST} ${TEST}.scm - cd ${TMPDIR}/test \ - && export LD_LIBRARY_PATH=. \ - && export GUILE_AUTO_COMPILE=0 \ - && timeout 60 printf "\n" | ./${TEST} - -test-compile-r7rs-snow: ${TMPDIR}/test/libtest.o ${TMPDIR}/test/libtest.so ${TMPDIR}/test/libtest.a - cp tests/*.scm ${TMPDIR}/test/ - cp tests/c-include/libtest.h ${TMPDIR}/test/ - cd ${TMPDIR}/test && \ - compile-r7rs -o hello hello.scm - cd ${TMPDIR}/test && ./hello - -test-compile-r7rs-wine: - cp -r foreign ${TMPDIR}/test/ - cp tests/*.scm ${TMPDIR}/test/ - cp tests/c-include/libtest.h ${TMPDIR}/test/ - cd ${TMPDIR}/test && \ - wine "${HOME}/.wine/drive_c/Program Files (x86)/compile-r7rs/compile-r7rs.bat" -I . -o ${TEST} ${TEST}.scm - cd ${TMPDIR}/test && \ - LD_LIBRARY_PATH=. \ - wine ./${TEST}.bat + compile-r7rs -o ${TEST} ${TEST}.scm + cd ${TMPDIR}/test \ && timeout 60 printf "\n" | LD_LIBRARY_PATH=. ./${TEST} test-docker: docker build --build-arg IMAGE=${DOCKERIMG} --build-arg SCHEME=${SCHEME} --tag=foreign-c-test-${SCHEME} -f dockerfiles/Dockerfile.test . - docker run -it -v "${PWD}:/workdir" -w /workdir -t foreign-c-test-${SCHEME} sh \ - -c "make SCHEME=${SCHEME} TEST=${TEST} test" - -test-install-docker: - docker build --build-arg IMAGE=${DOCKERIMG} --build-arg SCHEME=${SCHEME} --tag=foreign-c-test-${SCHEME} -f dockerfiles/Dockerfile.snow-chibi-install-test . - docker run -it -v "${PWD}:/workdir" -w /workdir -t foreign-c-test-${SCHEME} sh \ - -c "make SCHEME=${SCHEME} clean ${SCHEME} install && cp tests/hello.scm /tmp/ && cd /tmp && COMPILE_R7RS=${SCHEME} compile-r7rs -o hello hello.scm && ./hello" + docker run -it -v "${PWD}:/workdir" -w /workdir -t foreign-c-test-${SCHEME} sh -c "make SCHEME=${SCHEME} TEST=${TEST} install test" ${TMPDIR}/test/libtest.o: tests/c-src/libtest.c mkdir -p ${TMPDIR}/test @@ -117,7 +65,6 @@ ${TMPDIR}/test/libtest.so: tests/c-src/libtest.c ${TMPDIR}/test/libtest.a: ${TMPDIR}/test/libtest.o tests/c-src/libtest.c ar rcs ${TMPDIR}/test/libtest.a ${TMPDIR}/test/libtest.o - ${TMPDIR}: mkdir -p ${TMPDIR} @@ -137,18 +84,6 @@ chibi: foreign/c/primitives/chibi/foreign-c.stub -lffi \ -shared -chicken: - @echo "Nothing to build for Chicken" - -cyclone: - @echo "Nothing to build for Cyclone" - -foment: - @echo "Nothing to build for Foment" - -gambit: - @echo "Nothing to build for Gambit" - gauche: gauche-package compile \ --srcdir=foreign/c/primitives/gauche \ @@ -160,39 +95,6 @@ gauche: mv foreign-c-primitives-gauche.so foreign/c/lib/gauche.so mv foreign-c-primitives-gauche.o foreign/c/lib/gauche.o -guile: - @echo "Nothing to build for Guile" - -kawa: - @echo "Nothing to build for Kawa" - -mit-scheme: - @echo "Nothing to build for Kawa" - -larceny: - @echo "Nothing to build for Larceny" - -mosh: - @echo "Nothing to build for Mosh" - -racket: - @echo "Nothing to build for Racket" - -sagittarius: - @echo "Nothing to build for Sagittarius" - -skint: - @echo "Nothing to build for Skint" - -stklos: - @echo "Nothing to build for Stklos" - -tr7: - @echo "Nothing to build for tr7" - -ypsilon: - @echo "Nothing to build for Ypsilon" - clean: rm -rf ${TMPDIR} diff --git a/README.md b/README.md index b393694..b992103 100644 --- a/README.md +++ b/README.md @@ -185,21 +185,20 @@ You can test that library is found by your implementation like this: ### Manual system wide -Manual system wide installation requires snow-chibi for other implementations -than Gauche. +Manual system wide installation requires snow-chibi. Either download the latest release from [https://git.sr.ht/~retropikzel/foreign-c/refs](https://git.sr.ht/~retropikzel/foreign-c/refs) or git clone, tag, and copy the _foreign_ directory to your library directory. -Example installation for Gauche: +Example for how to install for Gauche: + git clone https://git.sr.ht/~retropikzel/foreign-c + cd foreign-c make SCHEME=gauche make SCHEME=gauche install -With most implementations the make command does not compile anything. When that -is the case it will say "Nothing to build on SCHEME\_IMPLEMENTATION\_NAME." ### Manual for project Either download the latest release from diff --git a/dockerfiles/Dockerfile.test b/dockerfiles/Dockerfile.test index a6af8db..d5ff4b5 100644 --- a/dockerfiles/Dockerfile.test +++ b/dockerfiles/Dockerfile.test @@ -1,6 +1,6 @@ ARG SCHEME=chibi ARG IMAGE=chibi:head -FROM schemers/${IMAGE} +FROM docker.io/schemers/${IMAGE} RUN apt-get update && apt-get install \ --no-install-suggests \ --no-install-recommends \ @@ -11,9 +11,14 @@ RUN apt-get update && apt-get install \ libffi-dev \ pandoc \ libmbedtls-dev \ - tree + tree \ + git \ + ca-certificates RUN mkdir -p ${HOME}/.snow && echo "()" > ${HOME}/.snow/config.scm -COPY --from=retropikzel1/compile-r7rs /opt/compile-r7rs /opt/compile-r7rs +#RUN git clone https://github.com/ashinn/chibi-scheme.git --depth=1 +RUN git clone https://github.com/Retropikzel/chibi-scheme.git --branch gauche-fixes +RUN cd chibi-scheme && make && make install +COPY --from=docker.io/retropikzel1/compile-r7rs /opt/compile-r7rs /opt/compile-r7rs ENV PATH=/opt/compile-r7rs/bin:${PATH} ARG SCHEME=chibi ENV COMPILE_R7RS=${SCHEME}