Closed smanders closed 3 years ago
cmake >= 3.19 supports boost 1.75.0, but obviously there isn't a release of cmake that supports boost 1.76.0, yet -- so I'm going to go with boost 1.75.0 for now -- see buildpro issue for "cmake update" https://github.com/smanders/buildpro/issues/16
boost library dependencies (as of 1.75.0) https://github.com/Kitware/CMake/blob/v3.20.1/Modules/FindBoost.cmake#L1339-L1352
set(_Boost_CONTRACT_DEPENDENCIES thread chrono date_time)
set(_Boost_COROUTINE_DEPENDENCIES context)
set(_Boost_FIBER_DEPENDENCIES context)
set(_Boost_IOSTREAMS_DEPENDENCIES regex)
set(_Boost_JSON_DEPENDENCIES container)
set(_Boost_LOG_DEPENDENCIES date_time log_setup filesystem thread regex chrono atomic)
set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
set(_Boost_MPI_DEPENDENCIES serialization)
set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
set(_Boost_NUMPY_DEPENDENCIES python${component_python_version})
set(_Boost_THREAD_DEPENDENCIES chrono date_time atomic)
set(_Boost_TIMER_DEPENDENCIES chrono)
set(_Boost_WAVE_DEPENDENCIES filesystem serialization thread chrono date_time atomic)
set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
several of these libraries are currently excluded from the build https://github.com/smanders/externpro/blob/4faf27caa0af2a55fd71022162af53aff5ac02b8/projects/boost.cmake#L236-L239
created a boost.dot
digraph GG {
node [fontsize=12];
iostreams [shape=diamond];
json [shape=diamond];
log [shape=diamond];
thread [shape=diamond];
timer [shape=diamond];
wserialization [shape=diamond];
iostreams -> regex;
json -> container;
log -> date_time;
log -> log_setup;
log -> filesystem;
log -> thread;
log -> regex;
log -> chrono;
log -> atomic;
thread -> chrono;
thread -> date_time;
thread -> atomic;
timer -> chrono;
wserialization -> serialization
}
dot -Tpng -oboost.png boost.dot
which guided Boost_LIBS
list in use script https://github.com/smanders/externpro/blob/4faf27caa0af2a55fd71022162af53aff5ac02b8/projects/use/usexp-boost-config.cmake#L17-L43
boost asio patch https://github.com/boostorg/asio/compare/boost-1.67.0...smanders:xp1.67.0
boost gil/extension/numeric patch (from adobe)
previous boost patch justification
boost/gil/extension/numeric/ still is use palam
$ grep -r "boost/gil/extension/numeric"
image_files/src/DataSrc/DataSrcBands.cpp:#include <boost/gil/extension/numeric/resample.hpp>
image_files/src/DataSrc/DataSrcBands.cpp:#include <boost/gil/extension/numeric/sampler.hpp>
image_files/src/QuickFile/createQuickFile.cpp:#include "boost/gil/extension/numeric/resample.hpp"
image_files/src/QuickFile/createQuickFile.cpp:#include "boost/gil/extension/numeric/sampler.hpp"
image_files/src/QuickFile/createStandardizedQuickFile.cpp:#include "boost/gil/extension/numeric/convolve.hpp"
image_files/src/QuickFile/createStandardizedQuickFile.cpp:#include "boost/gil/extension/numeric/kernel.hpp"
image_files/src/QuickFile/createStandardizedQuickFile.cpp:#include "boost/gil/extension/numeric/resample.hpp"
image_files/src/QuickFile/createStandardizedQuickFile.cpp:#include "boost/gil/extension/numeric/sampler.hpp"
image_files/include/palam/image_files/Dsp/DWT/wtdefs.hpp:#include <boost/gil/extension/numeric/channel_numeric_operations.hpp>
VANTAGE
Nodejs/addons/NodeTranscoder/NodeTranscoder.cpp:#include <boost/gil/extension/numeric/resample.hpp>
Nodejs/addons/NodeTranscoder/NodeTranscoder.cpp:#include <boost/gil/extension/numeric/sampler.hpp>
Server/Services/ImageViewGenerator/Generators/makeNitfMsiTileset.cpp:#include <boost/gil/extension/numeric/resample.hpp>
Server/Services/ImageViewGenerator/Generators/makeNitfMsiTileset.cpp:#include <boost/gil/extension/numeric/sampler.hpp>
boost gil mods
previous boost patch justification
possible boost gil patches
boost mpl patch https://github.com/boostorg/mpl/compare/boost-1.67.0...smanders:xp1.67.0
boost/mpl/vector/vector100.hpp
any moreprevious boost patch justification
VANTAGE grep -r "boost/mpl/vector/vector100"
palam grep -r "boost/mpl/vector/vector100"
boost units patch https://github.com/boostorg/units/compare/boost-1.67.0...smanders:xp1.67.0
previous boost patch justification
VANTAGE grep -r include | grep boost/units/quantity.hpp
Clients/Sdvis/Shared/CoordinateTypes.hpp:#include <boost/units/quantity.hpp>
Clients/VideoScreener/CoordinateTypes.hpp:#include <boost/units/quantity.hpp>
palam grep -r include | grep boost/units/quantity.hpp
geometry/test/AlignedRegionTest.cpp:#include <boost/units/quantity.hpp>
geometry/test/ParallelogramTest.cpp:#include <boost/units/quantity.hpp>
geometry/test/Pt3Test.cpp:#include <boost/units/quantity.hpp>
geometry/test/Pt2Test.cpp:#include <boost/units/quantity.hpp>
geometry/test/QuadrilateralTest.cpp:#include <boost/units/quantity.hpp>
constrained/include/palam/constrained/units/detail/Q.hpp:#include <boost/units/quantity.hpp>
constrained/test/units/defs/us_inch_test.cpp:#include <boost/units/quantity.hpp>
constrained/test/units/defs/us_survey_foot_Test.cpp:#include <boost/units/quantity.hpp>
constrained/test/units/defs/us_foot_Test.cpp:#include <boost/units/quantity.hpp>
there have been changes in boost in building iostreams with bzip2 and zlib support
I'm getting a link error on Windows when building wxInclude's decompressor project (which links in Boost::iostreams) https://github.com/smanders/wxInclude/blob/652f05ad9ce5278e58ff79f69b35e3d2c18a1f25/CMakeLists.txt#L18-L19
add_executable(decompressor decompress.cpp)
target_link_libraries(decompressor PRIVATE Boost::filesystem Boost::iostreams)
https://github.com/smanders/wxInclude/blob/rel/decompress.cpp#L10-L12
#include <boost/iostreams/filter/bzip2.hpp>
#include <boost/iostreams/filter/gzip.hpp>
#include <boost/iostreams/filter/zlib.hpp>
Windows link error
LINK : fatal error LNK1181: cannot open input file 'bz2.lib'
Done building project "decompressor.vcxproj" -- FAILED.
when I add some cmake debugging statements to the boost use script
diff --git a/projects/use/usexp-boost-config.cmake b/projects/use/usexp-boost-config.cmake
index 96c35b0..43e16c6 100644
--- a/projects/use/usexp-boost-config.cmake
+++ b/projects/use/usexp-boost-config.cmake
@@ -141,6 +141,10 @@ if(UNIX)
else()
if(DEFINED ZLIB_LIBRARIES AND DEFINED BZIP2_LIBRARIES)
if(TARGET Boost::iostreams)
+ get_target_property(libs Boost::iostreams INTERFACE_LINK_LIBRARIES)
+ if(libs)
+ message(STATUS "boost::iostreams libs: ${libs}")
+ endif()
set(iodefs
BOOST_ZLIB_BINARY=$<TARGET_FILE:${ZLIB_LIBRARIES}>
BOOST_BZIP2_BINARY=$<TARGET_FILE:${BZIP2_LIBRARIES}>
I get the following
-- boost::iostreams libs: $<$<CONFIG:release>:bz2;z>;Boost::headers
I was seeing this same kind of thing on linux, which is why I hacked around it in the use script commit https://github.com/smanders/externpro/commit/532f9b932abe40b488fce642694e061eae04ace0
if(TARGET Boost::iostreams)
get_target_property(libs Boost::iostreams INTERFACE_LINK_LIBRARIES)
if(libs)
- list(APPEND libs ${ZLIB_LIBRARIES} ${BZIP2_LIBRARIES})
+ list(TRANSFORM libs REPLACE "^bz2$" ${BZIP2_LIBRARIES})
+ list(TRANSFORM libs REPLACE "^z$" ${ZLIB_LIBRARIES})
else()
set(libs
something is setting the bzip2 and zlib default library names and associating them with the Boost::iostreams library
it appears the bzip2 and zlib library names are hard-coded https://github.com/boostorg/boost_install/blob/boost-1.75.0/boost-install.jam#L65-L71
case "zlib" :
return "z" ;
case "bzip2" :
return "bz2" ;
when it seems it should be using the <name>
from user-config.jam
... https://github.com/smanders/externpro/blob/6b3e1dd98d09f3336c201db2a565d7dd8e97a943/projects/boost.cmake#L188-L195
externpro's boost build includes the following https://github.com/smanders/externpro/blob/21.03/projects/boost.cmake#L243-L259
# TRICKY: need zlib, bzip2 include directories at cmake-time (before they're built)
# so can't use xpGetPkgVar, xpFindPkg, etc - this complicates having multiple versions
# of zlib and bzip2 (boost will have to choose a version here)
xpGetArgValue(${PRO_ZLIB} ARG VER VALUE zlibVer)
xpGetArgValue(${PRO_BZIP2} ARG VER VALUE bzip2Ver)
set(zlibInc ${STAGE_DIR}/include/zlib_${zlibVer}/zlib)
set(bzip2Inc ${STAGE_DIR}/include/bzip2_${bzip2Ver}/bzip2)
list(APPEND boost_BUILD -s ZLIB_INCLUDE=${zlibInc} -s ZLIB_LIBPATH=${STAGE_DIR}/lib)
list(APPEND boost_BUILD -s BZIP2_INCLUDE=${bzip2Inc} -s BZIP2_LIBPATH=${STAGE_DIR}/lib)
if(WIN32)
include(${STAGE_DIR}/share/cmake/xpopts.cmake)
xpSetPostfix()
# TRICKY: BINARY (zlibstatic, bz2) needs to be the name of the binary,
# not including the file extension, or the "lib" prefix on UNIX
list(APPEND boost_BUILD -s ZLIB_BINARY=libz_${zlibVer}${CMAKE_RELEASE_POSTFIX})
list(APPEND boost_BUILD -s BZIP2_BINARY=bz2_${bzip2Ver}${CMAKE_RELEASE_POSTFIX})
endif()
going back to the boost 1.63.0 docs, these variables ([BZIP2|ZLIB]_BINARY
, [BZIP2|ZLIB]_INCLUDE
, [BZIP2|ZLIB]_LIBPATH
) were detailed https://www.boost.org/doc/libs/1_63_0/libs/iostreams/doc/installation.html#bjam -- but from 1.64.0 and on they disappeared from the docs -- they seemed to continue to work with boost 1.67.0 (the latest release externpro built until now moving to 1.75.0)
now the iostreams Installation docs https://www.boost.org/doc/libs/1_75_0/libs/iostreams/doc/installation.html#boost-build refer to Boost.Build docs (links broken on that page), but here's what I've found: https://www.boost.org/doc/libs/1_75_0/tools/build/doc/html/index.html#_third_party_libraries
the Boost.Build docs describe configuring bzip2 and zlib with a user-config.jam
file, or
If none of these options is specified, then the environmental variables
[BZIP2|ZLIB]_LIBRARY_PATH
,[BZIP2|ZLIB]_NAME
, and[BZIP2|ZLIB]_INCLUDE
will be used instead.
building a project that uses boost 1.75.0
In file included from /bpvol/workspace/externpro/_bld/externpro_21.03-24-g4491eb5-gcc731-64/include/boost-1_75/boost/graph/adjacency_iterator.hpp:13:0,
from /bpvol/workspace/externpro/_bld/externpro_21.03-24-g4491eb5-gcc731-64/include/boost-1_75/boost/graph/detail/adjacency_list.hpp:37,
from /bpvol/workspace/externpro/_bld/externpro_21.03-24-g4491eb5-gcc731-64/include/boost-1_75/boost/graph/adjacency_list.hpp:255,
from /bpvol/VantageSuper/Shared/SdbaseLIB/Sdbase/SingletonManager/SingletonManager.cpp:15:
/bpvol/workspace/externpro/_bld/externpro_21.03-24-g4491eb5-gcc731-64/include/boost-1_75/boost/detail/iterator.hpp:13:37: note: #pragma message: This header is deprecated. Use <iterator> instead.
BOOST_HEADER_DEPRECATED("<iterator>")
^
it appears this header was removed in boost 1.76.0...
edit: appears I was wrong - this wasn't removed in boost 1.76.0 (I'm still seeing the message above) - it's been removed in the develop
branch on 2020.05.11 https://github.com/boostorg/graph/commit/f364ee7be2bb1a44a2724d92f67490deaf19dc5e -- but that doesn't appear to have made it into a boost release, yet
it does appear this is now in boost 1.77.0 -- but probably not enough of a reason to start using boost 1.77.0 instead of 1.76.0, for now...
building a project that uses boost 1.75.0
2>makeBimapTest.cpp
2>C:\dev\extern\externpro-21.03-24-g4491eb5-vc142-64-win64\include\boost-1_75\boost/concept_check.hpp(355,12): error C2220: the following warning is treated as an error
2>C:\dev\extern\externpro-21.03-24-g4491eb5-vc142-64-win64\include\boost-1_75\boost/concept_check.hpp(354): message : while compiling class template member function 'void boost::BinaryFunction<Func,Return,First,Second>::test(boost::false_type)'
2> with
2> [
2> Func=std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>>>,
2> Return=bool,
2> First=std::basic_string<char,std::char_traits<char>,std::allocator<char>>,
2> Second=std::basic_string<char,std::char_traits<char>,std::allocator<char>>
2> ]
2>C:\dev\extern\externpro-21.03-24-g4491eb5-vc142-64-win64\include\boost-1_75\boost/concept_check.hpp(351): message : see reference to function template instantiation 'void boost::BinaryFunction<Func,Return,First,Second>::test(boost::false_type)' being compiled
2> with
2> [
2> Func=std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>>>,
2> Return=bool,
2> First=std::basic_string<char,std::char_traits<char>,std::allocator<char>>,
2> Second=std::basic_string<char,std::char_traits<char>,std::allocator<char>>
2> ]
2>C:\dev\extern\externpro-21.03-24-g4491eb5-vc142-64-win64\include\boost-1_75\boost/concept_check.hpp(349): message : see reference to class template instantiation 'boost::BinaryFunction<Func,Return,First,Second>' being compiled
2> with
2> [
2> Func=std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>>>,
2> Return=bool,
2> First=std::basic_string<char,std::char_traits<char>,std::allocator<char>>,
2> Second=std::basic_string<char,std::char_traits<char>,std::allocator<char>>
2> ]
2>C:\dev\extern\externpro-21.03-24-g4491eb5-vc142-64-win64\include\boost-1_75\boost/concept/detail/has_constraints.hpp(42): message : see reference to class template instantiation 'boost::BinaryFunctionConcept<std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>>>,bool,std::basic_string<char,std::char_traits<char>,std::allocator<char>>,std::basic_string<char,std::char_traits<char>,std::allocator<char>>>' being compiled
2>C:\dev\extern\externpro-21.03-24-g4491eb5-vc142-64-win64\include\boost-1_75\boost/concept/detail/has_constraints.hpp(32): message : see reference to function template instantiation 'boost::concepts::detail::yes boost::concepts::detail::has_constraints_(Model *,boost::concepts::detail::wrap_constraints<Model,&Model::constraints> *)' being compiled
2>C:\dev\extern\externpro-21.03-24-g4491eb5-vc142-64-win64\include\boost-1_75\boost/concept/detail/msvc.hpp(57): message : see reference to class template instantiation 'boost::concepts::not_satisfied<Model>' being compiled
2> with
2> [
2> Model=boost::BinaryFunctionConcept<std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>>>,bool,std::basic_string<char,std::char_traits<char>,std::allocator<char>>,std::basic_string<char,std::char_traits<char>,std::allocator<char>>>
2> ]
2>C:\dev\extern\externpro-21.03-24-g4491eb5-vc142-64-win64\include\boost-1_75\boost/bimap/set_of.hpp(132): message : see reference to class template instantiation 'boost::concepts::require<boost::BinaryFunctionConcept<std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>>>,bool,std::basic_string<char,std::char_traits<char>,std::allocator<char>>,std::basic_string<char,std::char_traits<char>,std::allocator<char>>>>' being compiled
2>C:\dev\extern\externpro-21.03-24-g4491eb5-vc142-64-win64\include\boost-1_75\boost/bimap/detail/manage_bimap_key.hpp(69): message : see reference to class template instantiation 'boost::bimaps::set_of<Type,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>>>>::lazy_concept_checked' being compiled
2> with
2> [
2> Type=std::string
2> ]
2>C:\dev\extern\externpro-21.03-24-g4491eb5-vc142-64-win64\include\boost-1_75\boost/bimap/detail/bimap_core.hpp(97): message : see reference to class template instantiation 'boost::bimaps::detail::manage_bimap_key<RightSetType>' being compiled
2> with
2> [
2> RightSetType=std::string
2> ]
2>C:\dev\extern\externpro-21.03-24-g4491eb5-vc142-64-win64\include\boost-1_75\boost/bimap/bimap.hpp(134): message : see reference to class template instantiation 'boost::bimaps::detail::bimap_core<KeyTypeA,KeyTypeB,AP1,AP2,AP3>' being compiled
2> with
2> [
2> KeyTypeA=int,
2> KeyTypeB=std::string,
2> AP1=boost::mpl::na,
2> AP2=boost::mpl::na,
2> AP3=boost::mpl::na
2> ]
2>C:\Users\smanders\src\palamdev\utils\test\makeBimapTest.cpp(15): message : see reference to class template instantiation 'boost::bimaps::bimap<int,std::string,boost::mpl::na,boost::mpl::na,boost::mpl::na>' being compiled
2>C:\dev\extern\externpro-21.03-24-g4491eb5-vc142-64-win64\include\boost-1_75\boost/concept_check.hpp(355,12): warning C4834: discarding return value of function with 'nodiscard' attribute
2>C:\dev\extern\externpro-21.03-24-g4491eb5-vc142-64-win64\include\boost-1_75\boost/concept_check.hpp(355,12): message : to simplify migration, consider the temporary use of /Wv:18 flag with the version of the compiler with which you used to build without warnings
it appears this is a known issue https://github.com/boostorg/concept_check/issues/31 that has been fixed https://github.com/boostorg/concept_check/commit/85fd1e434f3684ec2358af556ccf73d399dfa1fd in boost 1.76.0 https://github.com/boostorg/concept_check/blob/boost-1.76.0/include/boost/concept_check.hpp#L355
boost version history https://www.boost.org/users/history/
cmake >= 3.20.3 supports boost 1.76.0 -- see buildpro issue for "cmake update" https://github.com/smanders/buildpro/issues/16
boost library dependencies (as of 1.76.0) https://github.com/Kitware/CMake/blob/v3.20.3/Modules/FindBoost.cmake#L1339-L1352 -- which appear to match dependencies from 1.75.0
building a project that uses boost 1.76.0
10>C:\dev\src\palam\image_files\include\palam/image_files/ImageManip/Effects/estimateLine.hpp(251,21): error C2589: '(': illegal token on right side of '::' (compiling source file C:\dev\src\palam\image_files\src\ImageManip\Effects\Detail\alignBetweenSwaths.cpp)
10>C:\dev\src\palam\image_files\include\palam/image_files/ImageManip/Effects/estimateLine.hpp(251): error C2062: type 'unknown-type' unexpected (compiling source file C:\dev\src\palam\image_files\src\ImageManip\Effects\Detail\alignBetweenSwaths.cpp)
10>C:\dev\src\palam\image_files\include\palam/image_files/ImageManip/Effects/estimateLine.hpp(251,21): error C2059: syntax error: ')' (compiling source file C:\dev\src\palam\image_files\src\ImageManip\Effects\Detail\alignBetweenSwaths.cpp)
10>C:\dev\extern\externpro-21.03-26-g114bf3d-vc142-64-win64\include\boost-1_76\boost/regex/v5/w32_regex_traits.hpp(33,1): error C2220: the following warning is treated as an error (compiling source file C:\dev\src\palam\image_files\src\ImageFiles\Nitf\HSI\MS177MspFile.cpp)
10>C:\dev\extern\externpro-21.03-26-g114bf3d-vc142-64-win64\include\boost-1_76\boost/regex/v5/w32_regex_traits.hpp(33,1): warning C4005: 'WIN32_LEAN_AND_MEAN': macro redefinition (compiling source file C:\dev\src\palam\image_files\src\ImageFiles\Nitf\HSI\MS177MspFile.cpp)
10>C:\dev\src\palam\image_files\src\ImageFiles\Nitf\HSI\MS177MspFile.cpp : message : see previous definition of 'WIN32_LEAN_AND_MEAN'
for WIN32_LEAN_AND_MEAN macro redefinition, see boostorg/regex issues
for illegal token and unknown-type expected errors, should conditionally define NOMINMAX before including windows.h
project using boost 1.76.0
[ 19%] Building CXX object Shared/SdwsLIB/Sdws/CMakeFiles/Sdws.dir/impl/WebSocketClient.cpp.o
/bpvol/VantageSuper/Shared/SdwsLIB/Sdws/impl/WebSocketClient.cpp:37:17: error: 'multi_buffer' in namespace 'boost::beast' does not name a type
boost::beast::multi_buffer buffer;
^~~~~~~~~~~~
/bpvol/VantageSuper/Shared/SdwsLIB/Sdws/impl/WebSocketClient.cpp: In function 'void {anonymous}::handleAsyncReads(std::weak_ptr<palam::async::Mutexed<sdws::detail::WebSocketData> >, sdws::detail::WebSocketData&, std::shared_ptr<_Tp>)':
/bpvol/VantageSuper/Shared/SdwsLIB/Sdws/impl/WebSocketClient.cpp:109:32: error: 'struct sdws::detail::WebSocketData' has no member named 'buffer'
pClient->async_read(wsData.buffer, [
^~~~~~
/bpvol/VantageSuper/Shared/SdwsLIB/Sdws/impl/WebSocketClient.cpp: In lambda function:
/bpvol/VantageSuper/Shared/SdwsLIB/Sdws/impl/WebSocketClient.cpp:136:27: error: 'buffers' is not a member of 'boost::beast'
ss << boost::beast::buffers(lockedData.get().buffer.data());
^~~~~~~
/bpvol/VantageSuper/Shared/SdwsLIB/Sdws/impl/WebSocketClient.cpp:136:27: note: suggested alternative: 'buffers_cat'
ss << boost::beast::buffers(lockedData.get().buffer.data());
^~~~~~~
buffers_cat
/bpvol/VantageSuper/Shared/SdwsLIB/Sdws/impl/WebSocketClient.cpp:136:52: error: 'std::conditional<false, const sdws::detail::WebSocketData, sdws::detail::WebSocketData>::type {aka struct sdws::detail::WebSocketData}' has no member named 'buffer'
ss << boost::beast::buffers(lockedData.get().buffer.data());
^~~~~~
/bpvol/VantageSuper/Shared/SdwsLIB/Sdws/impl/WebSocketClient.cpp:138:24: error: 'std::conditional<false, const sdws::detail::WebSocketData, sdws::detail::WebSocketData>::type {aka struct sdws::detail::WebSocketData}' has no member named 'buffer'
lockedData.get().buffer.consume(bytes_transferred);
^~~~~~
/bpvol/VantageSuper/Shared/SdwsLIB/Sdws/impl/WebSocketClient.cpp: In function 'void {anonymous}::onResolveSecure(boost::system::error_code, boost::asio::ip::basic_resolver<boost::asio::ip::tcp>::results_type, std::weak_ptr<palam::async::Mutexed<sdws::detail::WebSocketData> >, sdws::detail::WebSocketData&, const palam::async::Promise<void>&)':
/bpvol/VantageSuper/Shared/SdwsLIB/Sdws/impl/WebSocketClient.cpp:158:29: error: 'using element_type = class boost::beast::websocket::stream<boost::asio::ssl::stream<boost::asio::basic_stream_socket<boost::asio::ip::tcp> > > {aka class boost::beast::websocket::stream<boost::asio::ssl::stream<boost::asio::basic_stream_socket<boost::asio::ip::tcp> > >}' has no member named 'lowest_layer'; did you mean 'next_layer'?
wsData.pSecureClient->lowest_layer(), res.begin(), res.end(), [
^~~~~~~~~~~~
next_layer
/bpvol/VantageSuper/Shared/SdwsLIB/Sdws/impl/WebSocketClient.cpp: In lambda function:
/bpvol/VantageSuper/Shared/SdwsLIB/Sdws/impl/WebSocketClient.cpp:190:45: error: 'using element_type = class boost::beast::websocket::stream<boost::asio::ssl::stream<boost::asio::basic_stream_socket<boost::asio::ip::tcp> > > {aka class boost::beast::websocket::stream<boost::asio::ssl::stream<boost::asio::basic_stream_socket<boost::asio::ip::tcp> > >}' has no member named 'async_handshake_ex'; did you mean 'async_handshake'?
lockedData.get().pSecureClient->async_handshake_ex(
^~~~~~~~~~~~~~~~~~
async_handshake
/bpvol/VantageSuper/Shared/SdwsLIB/Sdws/impl/WebSocketClient.cpp: In function 'void {anonymous}::onResolveInsecure(boost::system::error_code, boost::asio::ip::basic_resolver<boost::asio::ip::tcp>::results_type, std::weak_ptr<palam::async::Mutexed<sdws::detail::WebSocketData> >, sdws::detail::WebSocketData&, const palam::async::Promise<void>&)':
/bpvol/VantageSuper/Shared/SdwsLIB/Sdws/impl/WebSocketClient.cpp:237:31: error: 'using element_type = class boost::beast::websocket::stream<boost::asio::basic_stream_socket<boost::asio::ip::tcp> > {aka class boost::beast::websocket::stream<boost::asio::basic_stream_socket<boost::asio::ip::tcp> >}' has no member named 'lowest_layer'; did you mean 'next_layer'?
wsData.pInsecureClient->lowest_layer(), res.begin(), res.end(), [
^~~~~~~~~~~~
next_layer
/bpvol/VantageSuper/Shared/SdwsLIB/Sdws/impl/WebSocketClient.cpp: In lambda function:
/bpvol/VantageSuper/Shared/SdwsLIB/Sdws/impl/WebSocketClient.cpp:253:43: error: 'using element_type = class boost::beast::websocket::stream<boost::asio::basic_stream_socket<boost::asio::ip::tcp> > {aka class boost::beast::websocket::stream<boost::asio::basic_stream_socket<boost::asio::ip::tcp> >}' has no member named 'async_handshake_ex'; did you mean 'async_handshake'?
lockedData.get().pInsecureClient->async_handshake_ex(
^~~~~~~~~~~~~~~~~~
async_handshake
make[2]: *** [Shared/SdwsLIB/Sdws/CMakeFiles/Sdws.dir/impl/WebSocketClient.cpp.o] Error 1
make[2]: Target `Shared/SdwsLIB/Sdws/CMakeFiles/Sdws.dir/build' not remade because of errors.
make[1]: *** [Shared/SdwsLIB/Sdws/CMakeFiles/Sdws.dir/all] Error 2
Boost.Beast 1.76.0 docs https://www.boost.org/doc/libs/1_76_0/libs/beast/doc/html/index.html
it appears there are API changes in 1.70.0, 1.73.0, and 1.74.0 https://www.boost.org/doc/libs/1_76_0/libs/beast/doc/html/beast/release_notes.html
boost beast updates
commits that fix issues with projects updating to use boost 1.76.0
now that boost generates a bunch of cmake as part of it's build (in lib/cmake), we no longer need to use the FindBoost.cmake script that comes with cmake (Modules/FindBoost.cmake) and the use script can be significantly simplified!
using BoostConfig.cmake (from the boost build) introduces a new issue... at least one project that uses boost (azmq) requires an older version of cmake (2.8) and BoostConfig.cmake appears to require at least cmake 3.3
CMake Warning (dev) at /bpvol/externpro/_bldazmq/externpro_21.04-33-gfc86807-p-gcc731-64/lib/cmake/Boost-1.76.0/BoostConfig.cmake:240 (if):
Policy CMP0057 is not set: Support new IN_LIST if() operator. Run "cmake
--help-policy CMP0057" for policy details. Use the cmake_policy command to
set the policy and suppress this warning.
IN_LIST will be interpreted as an operator when the policy is set to NEW.
Since the policy is not set the OLD behavior will be used.
Call Stack (most recent call first):
/bpvol/externpro/_bldazmq/externpro_21.04-33-gfc86807-p-gcc731-64/share/cmake/usexp-boost-config.cmake:25 (find_package)
/bpvol/externpro/_bldazmq/externpro_21.04-33-gfc86807-p-gcc731-64/share/cmake/xpfunmac.cmake:1225 (find_package)
CMakeLists.txt:43 (xpFindPkg)
This warning is for project developers. Use -Wno-dev to suppress it.
CMake Error at /bpvol/externpro/_bldazmq/externpro_21.04-33-gfc86807-p-gcc731-64/lib/cmake/Boost-1.76.0/BoostConfig.cmake:240 (if):
if given arguments:
"ALL" "IN_LIST" "Boost_FIND_COMPONENTS"
Unknown arguments specified
Call Stack (most recent call first):
/bpvol/externpro/_bldazmq/externpro_21.04-33-gfc86807-p-gcc731-64/share/cmake/usexp-boost-config.cmake:25 (find_package)
/bpvol/externpro/_bldazmq/externpro_21.04-33-gfc86807-p-gcc731-64/share/cmake/xpfunmac.cmake:1225 (find_package)
CMakeLists.txt:43 (xpFindPkg)
here's how we know at least cmake 3.3 is required
$ cmake --help-policy CMP0057
CMP0057
-------
Support new ``if()`` IN_LIST operator.
CMake 3.3 adds support for the new IN_LIST operator.
The ``OLD`` behavior for this policy is to ignore the IN_LIST operator.
The ``NEW`` behavior is to interpret the IN_LIST operator.
This policy was introduced in CMake version 3.3.
CMake version 3.21.0 warns when the policy is not set and uses
``OLD`` behavior. Use the ``cmake_policy()`` command to set
it to ``OLD`` or ``NEW`` explicitly.
.. note::
The ``OLD`` behavior of a policy is
``deprecated by definition``
and may be removed in a future version of CMake.
also several projects issue this CMake Deprecation Warning (including azmq)
CMake Deprecation Warning at CMakeLists.txt:1 (cmake_minimum_required):
Compatibility with CMake < 2.8.12 will be removed from a future version of
CMake.
Update the VERSION argument <min> value or use a ...<max> suffix to tell
CMake that the project does not need compatibility with older versions.
Unfortunately it appears that the BoostConfig.cmake and other boost cmake-generated files do not properly specify other dependencies... a link error because boost interprocess depends on shmem_*
functions from the rt
library, but the cmake boost provides doesn't provide a way for these dependencies to be included in the link
../libPluginExecutorManager.a(SharedMemoryBuffer.cpp.o): In function `boost::interprocess::shared_memory_object::remove(char const*)':
SharedMemoryBuffer.cpp:(.text._ZN5boost12interprocess20shared_memory_object6removeEPKc[_ZN5boost12interprocess20shared_memory_object6removeEPKc]+0x6a): undefined reference to `shm_unlink'
../libPluginExecutorManager.a(SharedMemoryBuffer.cpp.o): In function `bool boost::interprocess::shared_memory_object::priv_open_or_create<char>(boost::interprocess::ipcdetail::create_enum_t, char const*, boost::interprocess::mode_t, boost::interprocess::permissions const&)':
SharedMemoryBuffer.cpp:(.text._ZN5boost12interprocess20shared_memory_object19priv_open_or_createIcEEbNS0_9ipcdetail13create_enum_tEPKT_NS0_6mode_tERKNS0_11permissionsE[_ZN5boost12interprocess20shared_memory_object19priv_open_or_createIcEEbNS0_9ipcdetail13create_enum_tEPKT_NS0_6mode_tERKNS0_11permissionsE]+0xc7): undefined reference to `shm_open'
SharedMemoryBuffer.cpp:(.text._ZN5boost12interprocess20shared_memory_object19priv_open_or_createIcEEbNS0_9ipcdetail13create_enum_tEPKT_NS0_6mode_tERKNS0_11permissionsE[_ZN5boost12interprocess20shared_memory_object19priv_open_or_createIcEEbNS0_9ipcdetail13create_enum_tEPKT_NS0_6mode_tERKNS0_11permissionsE]+0xfc): undefined reference to `shm_open'
SharedMemoryBuffer.cpp:(.text._ZN5boost12interprocess20shared_memory_object19priv_open_or_createIcEEbNS0_9ipcdetail13create_enum_tEPKT_NS0_6mode_tERKNS0_11permissionsE[_ZN5boost12interprocess20shared_memory_object19priv_open_or_createIcEEbNS0_9ipcdetail13create_enum_tEPKT_NS0_6mode_tERKNS0_11permissionsE]+0x219): undefined reference to `shm_open'
SharedMemoryBuffer.cpp:(.text._ZN5boost12interprocess20shared_memory_object19priv_open_or_createIcEEbNS0_9ipcdetail13create_enum_tEPKT_NS0_6mode_tERKNS0_11permissionsE[_ZN5boost12interprocess20shared_memory_object19priv_open_or_createIcEEbNS0_9ipcdetail13create_enum_tEPKT_NS0_6mode_tERKNS0_11permissionsE]+0x2ac): undefined reference to `shm_open'
../libPluginExecutorManager.a(QueueClientService.cpp.o): In function `sdl::pem::shmem::QueueClientService::~QueueClientService()':
QueueClientService.cpp:(.text+0x5fd): undefined reference to `shm_unlink'
../libPluginExecutorManager.a(QueueClientService.cpp.o): In function `std::_Sp_counted_ptr_inplace<sdl::shared_mem::MessageQueue<sdl::pem::shmem::msg::Hello, sdl::pem::shmem::msg::MessageBoardStreamBytes, sdl::pem::shmem::msg::AcknowledgeShuttingDownNotification, sdl::pem::shmem::msg::InterruptForShutdown>, std::allocator<sdl::shared_mem::MessageQueue<sdl::pem::shmem::msg::Hello, sdl::pem::shmem::msg::MessageBoardStreamBytes, sdl::pem::shmem::msg::AcknowledgeShuttingDownNotification, sdl::pem::shmem::msg::InterruptForShutdown> >, (__gnu_cxx::_Lock_policy)2>::_M_dispose()':
QueueClientService.cpp:(.text._ZNSt23_Sp_counted_ptr_inplaceIN3sdl10shared_mem12MessageQueueIJNS0_3pem5shmem3msg5HelloENS5_23MessageBoardStreamBytesENS5_35AcknowledgeShuttingDownNotificationENS5_20InterruptForShutdownEEEESaISA_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv[_ZNSt23_Sp_counted_ptr_inplaceIN3sdl10shared_mem12MessageQueueIJNS0_3pem5shmem3msg5HelloENS5_23MessageBoardStreamBytesENS5_35AcknowledgeShuttingDownNotificationENS5_20InterruptForShutdownEEEESaISA_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv]+0xea): undefined reference to `shm_unlink'
../libPluginExecutorManager.a(QueueClientService.cpp.o): In function `boost::interprocess::shared_memory_object::shared_memory_object(boost::interprocess::open_only_t, char const*, boost::interprocess::mode_t)':
QueueClientService.cpp:(.text._ZN5boost12interprocess20shared_memory_objectC2ENS0_11open_only_tEPKcNS0_6mode_tE[_ZN5boost12interprocess20shared_memory_objectC5ENS0_11open_only_tEPKcNS0_6mode_tE]+0x9d): undefined reference to `shm_open'
../libPluginExecutorManager.a(QueueClientService.cpp.o): In function `sdl::shared_mem::MessageQueue<sdl::pem::shmem::msg::AcknowledgeHello, sdl::pem::shmem::msg::MessageBoardStreamBytes, sdl::pem::shmem::msg::ShuttingDownNotification>::~MessageQueue()':
QueueClientService.cpp:(.text._ZN3sdl10shared_mem12MessageQueueIJNS_3pem5shmem3msg16AcknowledgeHelloENS4_23MessageBoardStreamBytesENS4_24ShuttingDownNotificationEEED2Ev[_ZN3sdl10shared_mem12MessageQueueIJNS_3pem5shmem3msg16AcknowledgeHelloENS4_23MessageBoardStreamBytesENS4_24ShuttingDownNotificationEEED5Ev]+0xe2): undefined reference to `shm_unlink'
../libPluginExecutorManager.a(QueueClientService.cpp.o): In function `void boost::interprocess::ipcdetail::managed_open_or_create_impl<boost::interprocess::shared_memory_object, 0ul, true, false>::priv_open_or_create<char const*, boost::interprocess::ipcdetail::msg_queue_initialization_func_t<boost::interprocess::offset_ptr<void, long, unsigned long, 0ul> > >(boost::interprocess::ipcdetail::create_enum_t, char const* const&, unsigned long, boost::interprocess::mode_t, void const*, boost::interprocess::permissions const&, boost::interprocess::ipcdetail::msg_queue_initialization_func_t<boost::interprocess::offset_ptr<void, long, unsigned long, 0ul> >)':
QueueClientService.cpp:(.text._ZN5boost12interprocess9ipcdetail27managed_open_or_create_implINS0_20shared_memory_objectELm0ELb1ELb0EE19priv_open_or_createIPKcNS1_31msg_queue_initialization_func_tINS0_10offset_ptrIvlmLm0EEEEEEEvNS1_13create_enum_tERKT_mNS0_6mode_tEPKvRKNS0_11permissionsET0_[_ZN5boost12interprocess9ipcdetail27managed_open_or_create_implINS0_20shared_memory_objectELm0ELb1ELb0EE19priv_open_or_createIPKcNS1_31msg_queue_initialization_func_tINS0_10offset_ptrIvlmLm0EEEEEEEvNS1_13create_enum_tERKT_mNS0_6mode_tEPKvRKNS0_11permissionsET0_]+0x151): undefined reference to `shm_open'
QueueClientService.cpp:(.text._ZN5boost12interprocess9ipcdetail27managed_open_or_create_implINS0_20shared_memory_objectELm0ELb1ELb0EE19priv_open_or_createIPKcNS1_31msg_queue_initialization_func_tINS0_10offset_ptrIvlmLm0EEEEEEEvNS1_13create_enum_tERKT_mNS0_6mode_tEPKvRKNS0_11permissionsET0_[_ZN5boost12interprocess9ipcdetail27managed_open_or_create_implINS0_20shared_memory_objectELm0ELb1ELb0EE19priv_open_or_createIPKcNS1_31msg_queue_initialization_func_tINS0_10offset_ptrIvlmLm0EEEEEEEvNS1_13create_enum_tERKT_mNS0_6mode_tEPKvRKNS0_11permissionsET0_]+0x4d0): undefined reference to `shm_open'
QueueClientService.cpp:(.text._ZN5boost12interprocess9ipcdetail27managed_open_or_create_implINS0_20shared_memory_objectELm0ELb1ELb0EE19priv_open_or_createIPKcNS1_31msg_queue_initialization_func_tINS0_10offset_ptrIvlmLm0EEEEEEEvNS1_13create_enum_tERKT_mNS0_6mode_tEPKvRKNS0_11permissionsET0_[_ZN5boost12interprocess9ipcdetail27managed_open_or_create_implINS0_20shared_memory_objectELm0ELb1ELb0EE19priv_open_or_createIPKcNS1_31msg_queue_initialization_func_tINS0_10offset_ptrIvlmLm0EEEEEEEvNS1_13create_enum_tERKT_mNS0_6mode_tEPKvRKNS0_11permissionsET0_]+0x6e0): undefined reference to `shm_open'
QueueClientService.cpp:(.text._ZN5boost12interprocess9ipcdetail27managed_open_or_create_implINS0_20shared_memory_objectELm0ELb1ELb0EE19priv_open_or_createIPKcNS1_31msg_queue_initialization_func_tINS0_10offset_ptrIvlmLm0EEEEEEEvNS1_13create_enum_tERKT_mNS0_6mode_tEPKvRKNS0_11permissionsET0_[_ZN5boost12interprocess9ipcdetail27managed_open_or_create_implINS0_20shared_memory_objectELm0ELb1ELb0EE19priv_open_or_createIPKcNS1_31msg_queue_initialization_func_tINS0_10offset_ptrIvlmLm0EEEEEEEvNS1_13create_enum_tERKT_mNS0_6mode_tEPKvRKNS0_11permissionsET0_]+0x1710): undefined reference to `shm_open'
QueueClientService.cpp:(.text._ZN5boost12interprocess9ipcdetail27managed_open_or_create_implINS0_20shared_memory_objectELm0ELb1ELb0EE19priv_open_or_createIPKcNS1_31msg_queue_initialization_func_tINS0_10offset_ptrIvlmLm0EEEEEEEvNS1_13create_enum_tERKT_mNS0_6mode_tEPKvRKNS0_11permissionsET0_[_ZN5boost12interprocess9ipcdetail27managed_open_or_create_implINS0_20shared_memory_objectELm0ELb1ELb0EE19priv_open_or_createIPKcNS1_31msg_queue_initialization_func_tINS0_10offset_ptrIvlmLm0EEEEEEEvNS1_13create_enum_tERKT_mNS0_6mode_tEPKvRKNS0_11permissionsET0_]+0x25fc): undefined reference to `shm_open'
../libPluginExecutorManager.a(QueueServerService.cpp.o): In function `sdl::pem::shmem::QueueServerService::~QueueServerService()':
QueueServerService.cpp:(.text+0x5fd): undefined reference to `shm_unlink'
../libPluginExecutorManager.a(QueueServerService.cpp.o): In function `sdl::pem::shmem::QueueServerService::QueueServerService(std::string const&, std::string const&, std::function<void ()> const&, std::function<void (boost::iterator_range<char const*>)> const&, std::string const&)':
QueueServerService.cpp:(.text+0x7f1): undefined reference to `shm_unlink'
QueueServerService.cpp:(.text+0x980): undefined reference to `shm_unlink'
../libPluginExecutorManager.a(QueueServerService.cpp.o): In function `std::_Sp_counted_ptr_inplace<sdl::shared_mem::MessageQueue<sdl::pem::shmem::msg::AcknowledgeHello, sdl::pem::shmem::msg::MessageBoardStreamBytes, sdl::pem::shmem::msg::ShuttingDownNotification, sdl::pem::shmem::msg::InterruptForShutdown>, std::allocator<sdl::shared_mem::MessageQueue<sdl::pem::shmem::msg::AcknowledgeHello, sdl::pem::shmem::msg::MessageBoardStreamBytes, sdl::pem::shmem::msg::ShuttingDownNotification, sdl::pem::shmem::msg::InterruptForShutdown> >, (__gnu_cxx::_Lock_policy)2>::_M_dispose()':
QueueServerService.cpp:(.text._ZNSt23_Sp_counted_ptr_inplaceIN3sdl10shared_mem12MessageQueueIJNS0_3pem5shmem3msg16AcknowledgeHelloENS5_23MessageBoardStreamBytesENS5_24ShuttingDownNotificationENS5_20InterruptForShutdownEEEESaISA_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv[_ZNSt23_Sp_counted_ptr_inplaceIN3sdl10shared_mem12MessageQueueIJNS0_3pem5shmem3msg16AcknowledgeHelloENS5_23MessageBoardStreamBytesENS5_24ShuttingDownNotificationENS5_20InterruptForShutdownEEEESaISA_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv]+0xea): undefined reference to `shm_unlink'
../libPluginExecutorManager.a(QueueServerService.cpp.o): In function `sdl::shared_mem::MessageQueue<sdl::pem::shmem::msg::Hello, sdl::pem::shmem::msg::MessageBoardStreamBytes, sdl::pem::shmem::msg::AcknowledgeShuttingDownNotification>::~MessageQueue()':
QueueServerService.cpp:(.text._ZN3sdl10shared_mem12MessageQueueIJNS_3pem5shmem3msg5HelloENS4_23MessageBoardStreamBytesENS4_35AcknowledgeShuttingDownNotificationEEED2Ev[_ZN3sdl10shared_mem12MessageQueueIJNS_3pem5shmem3msg5HelloENS4_23MessageBoardStreamBytesENS4_35AcknowledgeShuttingDownNotificationEEED5Ev]+0xe2): undefined reference to `shm_unlink'
there doesn't appear to be a Boost::interprocess
target, since this is a header-only library... so I will add cmake to the boost use script to associate the rt
library with the Boost::headers
target (see commit below)
completed with commits referenced above
externpro currently builds version 1.67.0 https://github.com/smanders/externpro/issues/198
boost version history https://www.boost.org/users/history/