| 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 |