Сборка libpng без PNG_READ_eXIf_SUPPORTED для Linux - PullRequest
0 голосов
/ 04 июня 2019

Мне нужно собрать libpng, но без #define PNG_READ_eXIf_SUPPORTED в pnglibconf.h Я прочитал комментарии от pnglibconf.dfa, и вот несколько способов отключить функции, однако мне не удалось сделать то, что я хочу, используя их. Проблема в том, что процесс сборки выполняется на сервере сборки, поэтому я не могу изменить какие-либо файлы внутри подмодуля libpng. Вот как работает сервер:

  1. Загрузка источников клонов из git
  2. Создать make-файл, запустив cmake ..
  3. Выполнить команду make.

Таким образом, у меня есть libnpg, но с включенной опцией PNG_READ_eXIf_SUPPORTED. Libpng - это подмодуль моего проекта, поэтому он автоматически проверяется сервером сборки, поэтому я не могу изменить pnglibconf вручную. Как сказано в pnglibconf.dfa файле:

Существует три способа отключения функций в произвольном порядке:

1) Создайте 'pngusr.h', введите необходимую частную информацию о сборке подробно описано ниже и #define PNG_NO_

для каждого варианта, который вы не хочу в этом файле в этом файле. Вы также можете включить параметры используя PNG_ _SUPPORTED. Когда вы закончили повторный запуск сконфигурируйте и перестройте файл pnglibconf.h с -DPNG_USER_CONFIG:

почистить
CPPFLAGS = '- DPNG_USER_CONFIG' ./configure
make pnglibconf.h

pngusr.h используется только при создании pnglibconf.h, но это безопаснее убедиться, что -DPNG_USER_CONFIG указан во всем сборка путем изменения CPPFLAGS передается в исходную ./configure

Я пытался сделать то, что здесь написано. Я запускаю cmake .. -DCMAKE_C_FLAGS="-DPNG_USER_CONFIG -I/home/me/dev/include", где /home/me/dev/include - это путь к pngusr.h файлу

Затем я запускаю команду make. Однако PNG_READ_eXIf_SUPPORTED все еще присутствует в сгенерированном (make команда pnglibconf.h файл). Так что мой главный вопрос - как сделать libpng без опции PNG_READ_eXIf_SUPPORTED?

1 Ответ

0 голосов
/ 04 июня 2019

Мне остается неясным, работает ли и в какой степени конкретный механизм настройки, который вы пытаетесь использовать, в той версии libpng, которую вы пытаетесь использовать. Но похоже, что есть более простой способ. Чуть ниже выложенной вами выдержки в том же файле находится второй (из трех) вариантов:

2) Добавить определения настроек, которые вы хотите изменить на CPPFLAGS; например:

-DPNG_DEFAULT_READ_MACROS=0

(слегка отформатированный). Я не в состоянии проверить это в системе сборки на основе CMake, но в системе сборки Autotools она работает как прелесть. Из изучения и сравнения двух, я думаю, что это будет работать и для CMake. В частности, вы бы хотели запустить

cmake .. -DCMAKE_CPP_FLAGS="-DPNG_NO_READ_eXIf"

для вашего конкретного случая.

Кстати, обратите внимание, что флаги CPP (то есть препроцессор) являются подходящим местом для параметра, который вы указали (для -DPNG_USR_CONFIG также в вашей первоначальной попытке). Однако на практике они, вероятно, все еще работают с флагами компилятора C.

...