# syntax=docker/dockerfile:1 # # ReadStat (Evan Miller, MIT) compiled to WebAssembly for johnmcm.com's # /spss-viewer: SPSS .sav/.zsav/.por, SAS .sas7bdat/.sas7bcat/.xpt and Stata # .dta readers, with zlib for .zsav. The Emscripten image is pinned by # version and digest, ReadStat by commit (see README.md). # # ./build.ps1 (or) docker build --target export --output type=local,dest=dist . ARG EMSDK_IMAGE=emscripten/emsdk:6.0.10@sha256:e077d54e2b8970575ebc4f185ac1de0b95c05f2b266134d4ba27449af7aebf65 FROM ${EMSDK_IMAGE} AS build ARG READSTAT_COMMIT=835b88c8c79d00fcd028c9cfa1226de2fd18be20 RUN git clone -q https://github.com/WizardMac/ReadStat /readstat \ && git -C /readstat checkout -q ${READSTAT_COMMIT} \ && test "$(git -C /readstat rev-parse HEAD)" = "${READSTAT_COMMIT}" RUN embuilder build zlib WORKDIR /build COPY src/wrapper.c . # The readers only: writers, the command-line tools, text schemas, tests and fuzzers are left out. RUN mkdir -p /out \ && SRCS="wrapper.c $(ls /readstat/src/*.c /readstat/src/spss/*.c /readstat/src/sas/*.c /readstat/src/stata/*.c | grep -v -e '_write\.c$' -e 'readstat_writer\.c$')" \ && emcc -O2 -DHAVE_ZLIB=1 -sUSE_ZLIB=1 -I/readstat/src $SRCS -o /out/readstat.mjs \ -sMODULARIZE=1 -sEXPORT_ES6=1 -sEXPORT_NAME=createReadStat \ -sENVIRONMENT=web,worker,node \ -sALLOW_MEMORY_GROWTH=1 \ -sMAXIMUM_MEMORY=4294967296 \ -sFILESYSTEM=0 \ -sDYNAMIC_EXECUTION=0 \ -sINCOMING_MODULE_JS_API=print,printErr,locateFile \ -sEXPORTED_FUNCTIONS=_rs_input,_rs_reset,_rs_parse_catalog,_rs_parse,_rs_meta,_rs_rows,_rs_is_string,_rs_numbers,_rs_missing,_rs_offsets,_rs_text,_rs_text_length,_malloc,_free \ -sEXPORTED_RUNTIME_METHODS=HEAPU8,HEAPF64,HEAPU32,UTF8ToString,stringToUTF8,lengthBytesUTF8 FROM scratch AS export COPY --from=build /out/ /