Выходные данные openssl version -a
упоминаются в строке, которая начинается с copmpiler:
-DENGINESDIR="\"/usr/lib/x86_64-linux-gnu/engines-1.1\""
Это то же самое, что и у вас, но с двойными двойными кавычками вокруг него, внутренние отступили.
Чтобы добиться этого в вашем config
скрипте, вам нужно будет избегать двойных кавычек и обратной косой черты, так как они будут раскрыты, как только вы вызовете скрипт.Это должно сработать при вызове config
:
-DENGINESDIR=\"\\\"/usr/lib/x86_64-linux-gnu/engines-1.1\\\"\"
Обновление
После замечаний ОП в его собственном ответе я потратил немного большевремя, глядя на эту проблему, пробуя разные вещи сам.Подход, предложенный выше, устраняет ошибку компиляции и позволяет завершить сборку.Однако это не правильное решение.
Чтобы углубиться в это, я использовал следующую команду, чтобы настроить Makefile
.
$ ./config --prefix=/tmp/openssl -DENGINESDIR=\"\\\"/tmp/openssl-engines\\\"\"
Результирующий вывод при выполнении make install
после этого содержит много строк, подобных этим:
gcc -I. -Icrypto/include -Iinclude -DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG
-DOPENSSL_THREADS -DOPENSSL_NO_STATIC_ENGINE -DOPENSSL_PIC
-DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5
-DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DRC4_ASM
-DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM
-DECP_NISTZ256_ASM -DPADLOCK_ASM -DPOLY1305_ASM
-DENGINESDIR="\"/tmp/openssl-engines\"" -DOPENSSLDIR="\"/tmp/openssl/ssl\""
-DENGINESDIR="\"/tmp/openssl/lib/engines-1.1\"" -Wall -O3 -pthread -m64
-DL_ENDIAN -Wa,--noexecstack -fPIC -DOPENSSL_USE_NODELETE
-MMD -MF crypto/bn/bn_div.d.tmp -MT crypto/bn/bn_div.o -c
-o crypto/bn/bn_div.o crypto/bn/bn_div.c
<command-line>:0:0: warning: "ENGINESDIR" redefined
<command-line>:0:0: note: this is the location of the previous definiti
Обратите внимание, что -DENGINESDIR
появляется дважды, отсюда и предупреждение.Последний отменяет первый, так что это не приводит к желаемому результату.
Дальнейшее расследование показывает, что, как и ОП, указанный в его ответе, Makefile
имеет «жестко закодированную» строку ENGINESDIR=$(libdir)/engines-1.1
это не может быть отменено и мешает настройке этого аспекта.Поэтому бесполезно использовать значение -DENGINES
с Configure
.
Не вдаваясь в подробности: для настройки значения ENGINESDIR
необходимо изменить файл Configurations/unix-Makefile.tmpl
, чтобы он содержалследующие строки, аналогичные настройкам openssldir
:
ENGINESDIR={- use File::Spec::Functions;
our $enginesdir =
$config{enginesdir} ?
(file_name_is_absolute($config{enginesdir}) ?
$config{enginesdir}
: catdir($prefix, $config{enginesdir}))
: catdir($prefix, "engines");
$enginesdir -}
и несколько строк необходимо добавить в файл Configure
, чтобы ввести действительный параметр --enginesdir
.
После этого следующая последовательность команд сработала так, как и ожидалось:
$ ./config --prefix=/tmp/openssl --enginesdir=/tmp/openssl-engines
$ make && make install && make install_engines
Это далеко за пределы того, о чем просил OP, и я бросил несколько часов в черную дыру под названием OpenSSL, ноэто все равно было познавательно.