Сборка Poppler из исходного кода с нестандартными установками библиотеки - PullRequest
0 голосов
/ 02 августа 2020

Мне нужно собрать libvips с поддержкой Poppler для AWS Lambda, и я хочу, чтобы Poppler использовал пользовательские установки библиотек, таких как libtiff, libpng, fontconfig, et c.

Как я могу настроить сборку Poppler для использования моих пользовательских версий установленной библиотеки из /opt вместо предустановленной из \usr?

Я использую Docker образ lambci/lambda:build-go1.x для сборки Poppler и необходимых библиотек из исходников. Такие библиотеки, как libtiff, libpng и fontconfig, предварительно установлены на AWS Lambda, но их версии устарели и имеют известные проблемы с безопасностью. Я хочу добавить к слою последнюю версию и использовать эту версию вместо предустановленной. Я устанавливаю /opt, то есть использую ./configure --prefix=/opt или cmake .. -DCMAKE_INSTALL_PREFIX=/opt, так как слои извлекаются в /opt во время выполнения.

При сборке Poppler Poppler берет старые версии из /usr/lib64 вместо более новых из /opt/lib.

Вывод сборки Poppler:

-- Found Freetype: /usr/lib64/libfreetype.so (found version "2.3.11") 
-- Checking for module 'fontconfig'
--   Found fontconfig, version 2.13.1
-- Found Fontconfig: /usr/lib64/libfontconfig.so             <== should be /opt/lib/libfontconfig.so
-- Found JPEG: /usr/lib64/libjpeg.so (found version "62")
-- Found ZLIB: /usr/lib64/libz.so (found version "1.2.8") 
-- Found PNG: /usr/lib64/libpng.so (found version "1.2.49")  <== should be /opt/lib/libpng.so, "1.6.37"
-- Found TIFF: /usr/lib64/libtiff.so (found version "4.0.3")

Соответствующие части моего Dockerfile:

ENV BUILD_DIR="/tmp/build"
ENV INSTALL_DIR="/opt"

ENV PKG_CONFIG_PATH="${INSTALL_DIR}/lib64/pkgconfig:${INSTALL_DIR}/lib/pkgconfig" \
  PKG_CONFIG="/usr/bin/pkg-config" \
  PATH="${INSTALL_DIR}/bin:${PATH}"

ENV LD_LIBRARY_PATH="${INSTALL_DIR}/lib64:${INSTALL_DIR}/lib"

ENV LIBPNG_VERSION=1.6.37
ENV LIBPNG_BUILD_DIR=${BUILD_DIR}/libpng

RUN set -Eeuxo pipefail \
  && mkdir -p ${LIBPNG_BUILD_DIR} \
  && curl -L https://downloads.sourceforge.net/libpng/libpng-${LIBPNG_VERSION}.tar.xz \
  | tar xJC ${LIBPNG_BUILD_DIR} --strip-components=1

WORKDIR ${LIBPNG_BUILD_DIR}/

RUN set -Eeuxo pipefail \
  && ./configure  \
  --prefix=${INSTALL_DIR} \
  --disable-static \
  && make V=0 \
  && make install

ENV POPPLER_VERSION=0.89.0
ENV POPPLER_BUILD_DIR=${BUILD_DIR}/poppler

RUN set -Eeuxo pipefail \
  && mkdir -p ${POPPLER_BUILD_DIR}/build \
  && curl -L https://poppler.freedesktop.org/poppler-${POPPLER_VERSION}.tar.xz \
  | tar xJC ${POPPLER_BUILD_DIR} --strip-components=1

WORKDIR ${POPPLER_BUILD_DIR}/build/

RUN set -Eeuxo pipefail \
  && LDFLAGS="-L${INSTALL_DIR}/lib64 -L${INSTALL_DIR}/lib" \
  cmake .. \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} \
  -DENABLE_UNSTABLE_API_ABI_HEADERS=ON \
  -DENABLE_GLIB=ON \
  -DENABLE_CPP=OFF \
  -DENABLE_QT5=OFF \
  -DENABLE_SPLASH=OFF \
  -DPNG_INCLUDE_DIR=${INSTALL_DIR}/include \
  -DPNG_LIBRARIES=${INSTALL_DIR}/lib64 \
  && make V=0 \
  && make install

Мой полный Dockerfile может быть видно здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...