Не получается собрать

Пытаюсь собрать Manticore 3.5.2 (да и 3.5.1 тоже пробовал) на Ubuntu 20.04 и Arch Linux, но cmake пишет странные ошибки (одинаковые и в убунте, и в арче):

-- Could NOT find Boost: missing: context (found /usr/lib/x86_64-linux-gnu/cmake/Boost-1.71.0/BoostConfig.cmake (found suitable version "1.71.0", minimum required is "1.61.0"))
[...]
-- Could NOT find Boost: missing: system (found /usr/lib/x86_64-linux-gnu/cmake/Boost-1.71.0/BoostConfig.cmake (found version "1.71.0"))
-- Checking for std::shared_ptr is usable ...
-- Performing Test HAVE_STD_SHARED_PTR__res_
-- Performing Test HAVE_STD_SHARED_PTR__res_ - Failed
-- Checking for std::tr1::shared_ptr ...
-- Performing Test HAVE_BOOST_SHARED_PTR_HPP__res_
-- Performing Test HAVE_BOOST_SHARED_PTR_HPP__res_ - Failed
-- Looking for C++ include boost/shared_ptr.hpp
-- Looking for C++ include boost/shared_ptr.hpp - not found
CMake Error at /home/andreymal/tmp/cache/galera-cmake-3.x-5.7-src/CMakeLists.txt:171 (message):
  No shared ptr available

Но Boost естественно установлен, и все требуемые либы стоят (копировал apt-get install из документации), все нужные исходники в /usr/include/boost лежат.

Что не так?

может выставить BOOST ROOT переменную окружения - которая будет указывать в boost?

какая версия cmake у вас? бывает что ставится из пакета старая версия cmake и она не находит нуэный буст - попробуйте собрать \ поставить самый свежий cmake

Попробовал с разными комбинациями BOOST_ROOT, BOOST_INCLUDEDIR, BOOST_LIBRARYDIR — ничего не изменилось.

Но спасибо за наводку: погуглив в этом направлении, я обнаружил, что:

  • с опцией -DBoost_NO_BOOST_CMAKE=ON cmake успешно отрабатывает;

  • если запустить cmake с переменной окружения CXXFLAGS="-Wno-error=deprecated-copy", то после этого Manticore успешно собирается в убунте;

  • а с CXXFLAGS="-Wno-error=deprecated-copy -Wno-error=stringop-truncation" почти собирается в арче, но на 89% сборки начинает писать какие-то странные ошибки про secondaryindex.cpp.

В принципе можно считать, что цель достигнута и Manticore в убунте успешно собран (с арчем я потом ещё поиграюсь), правда, остаётся интересно, почему без опции Boost_NO_BOOST_CMAKE собираться не хочет

попробуйте собрать \ поставить самый свежий cmake

В убунте 3.16.3, в арче 3.18.3, вроде свежее особо и некуда

там есть такая проблема что cmake не видит буст новее чем тот когда был собран cmake

Ну те например cmake 3.16 может найти только буст до 164 но все более свежие версии не найдёт

Помогает если сам cmake собрать из самых свежих сорцов и инсталлировать в систему

Снёс в убунте буст 1.72, поставил 1.67 — хоть и не 1.64, но таки собирается, спасибо за инфу

В исходниках есть папочка dist, а в ней build_dockers под все актуальные системы.
В целом - начиная с bionic можно собирать с бустом, который есть в репозитории.
Но мы, ради унификации, собираем буст сами, и в докерфайлах это отражено.

в gentoo ~amd64 удалось пройти cmake -DWITH_MYSQL=1 -DWITH_RE2=1 …
после правки line 489 : manticoresearch/build/boost-context-src/tools/build/src/build/feature.jam
# import errors ;
# errors.error “$(values[1])” is not a known value of feature
# $(feature) : legal “values:” “$($(feature).values)” ;
но далее make валится где-то на 43%

в gentoo ~x86 cmake -DWITH_MYSQL=1 -DWITH_RE2=1 -DBoost_NO_BOOST_CMAKE=ON …
проходит без правки feature.jam, но при сборке тоже в районе галеры валится
в gentoo она свежая как и на https://galeracluster.com

Проще просто поставить буст. Ровно две команды: ./bootstrap.sh && ./b2 install --with-context --with-system runtime-link=static
После этого конфигурация будет просто его использовать, все скачивания/клонирования в процессе станут не нужными и не будут вызываться.

А что касается галеры - там история чуть иная. На гитхабе зоопарк разных версий, но нам важно совпадение версии API. В файле wsrep_api.h есть строчка "#define WSREP_INTERFACE_VERSION “31"” - вот именно 31-я версия нужна. Насколько она “свежая” в рамках gentoo - совершенно неважно, если не совпадёт то просто не взлетит.
(оригинальная галера билдится просто как блоб, версию по бинарю узнать невозможно, можно лишь попробовать её загрузить. Мы в своей сборке кладём эту версию в soversion - чтобы лишний раз не гадать. Оригинальная галера билдится скунсом, у нас сборка через cmake, сборка портирована из скунса. Ну и если взять галеру от mysql/maria - она тупо не подойдёт по версии (у них там что-то вроде 24 или 28; нужного нам 31 просто так нет)).
Однако наличие галеры критично только для репликации. Если её нет - всё остальное работать по-прежнему будет!