blob: e70c3cadc595fe3bbecade9fc876afcd30dcbabb [file] [log] [blame]
FROM debian:latest AS builder
LABEL maintainer="Liblouis Maintainers <liblouis-liblouisxml@freelists.org>"
# Fetch build dependencies
RUN apt-get update && apt-get install -y \
autoconf \
automake \
curl \
libtool \
make \
pkg-config \
texinfo \
zip \
patch \
&& rm -rf /var/lib/apt/lists/*
# install wine for 32-bit architecture
RUN apt-get update && dpkg --add-architecture i386 && apt-get update && apt-get install -y \
fonts-wine \
libc6-dev-i386-x32-cross \
mingw-w64 \
mingw-w64-i686-dev \
wine \
wine32 \
&& rm -rf /var/lib/apt/lists/*
ARG LIBYAML_VERSION=0.1.4
ENV HOST=i686-w64-mingw32 PREFIX=/usr/build/win32 SRCDIR=/usr/src/
# Build and install libyaml
WORKDIR ${SRCDIR}
RUN curl -L https://github.com/yaml/libyaml/archive/${LIBYAML_VERSION}.tar.gz | tar zx
WORKDIR ${SRCDIR}/libyaml-${LIBYAML_VERSION}
# Unfortunately we need to apply a patch to version 0.1.4 of libyaml. But regretfully we
# depend on 0.1.4 to have a statically linked version of libyaml. With newer versions of
# liblouis we haven't managed to produce a self-contained lou_checkyaml.exe so far.
ADD libyaml_mingw.patch .
RUN patch -p1 <libyaml_mingw.patch
RUN ./bootstrap && \
./configure --host ${HOST} --prefix=${PREFIX}/libyaml && \
make && \
make install
# Build release artifact, i.e. liblouis zip
ADD . ${SRCDIR}/liblouis
WORKDIR ${SRCDIR}/liblouis
RUN ./autogen.sh && \
./configure --host ${HOST} --enable-ucs4 \
--prefix=${PREFIX}/liblouis \
CFLAGS='-O0' \
CPPFLAGS="-I${PREFIX}/libyaml/include/" LDFLAGS="-L${PREFIX}/libyaml/lib/" && \
make LDFLAGS="-L${PREFIX}/libyaml/lib/ -avoid-version -Xcompiler -static-libgcc" && \
make check WINE=wine || cat tests/test-suite.log && \
make install && \
cd ${PREFIX}/liblouis && \
zip -r ${SRCDIR}/liblouis/liblouis.zip *
# Now we have all we really need namely the cross-compiled liblouis
# packaged neatly in a zip. But just to be extra sure we test the
# cross-compiled liblouis in a separate docker image with wine
FROM debian:latest
# install wine for 32-bit architecture
RUN apt-get update && dpkg --add-architecture i386 && apt-get update && apt-get install -y \
fonts-wine \
libc6-dev-i386-x32-cross \
mingw-w64 \
mingw-w64-i686-dev \
wine \
wine32 \
unzip \
&& rm -rf /var/lib/apt/lists/*
ENV SRCDIR=/usr/src/liblouis
WORKDIR ${SRCDIR}
COPY --from=builder ${SRCDIR}/liblouis.zip .
RUN unzip liblouis.zip
# just run any old self-contained yaml test that doesn't need any env setup
ADD tests/yaml/letterDefTest_harness.yaml .
RUN wine bin/lou_checkyaml.exe letterDefTest_harness.yaml