smanders / externpro

build external projects with cmake
MIT License
13 stars 12 forks source link

update the boost version #308

Closed smanders closed 3 years ago

smanders commented 3 years ago

externpro currently builds version 1.67.0 https://github.com/smanders/externpro/issues/198

boost version history https://www.boost.org/users/history/

smanders commented 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

smanders commented 3 years ago

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 boost

which guided Boost_LIBS list in use script https://github.com/smanders/externpro/blob/4faf27caa0af2a55fd71022162af53aff5ac02b8/projects/use/usexp-boost-config.cmake#L17-L43

smanders commented 3 years ago

boost asio patch https://github.com/boostorg/asio/compare/boost-1.67.0...smanders:xp1.67.0

smanders commented 3 years ago

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>
smanders commented 3 years ago

boost gil mods

previous boost patch justification

possible boost gil patches

smanders commented 3 years ago

boost mpl patch https://github.com/boostorg/mpl/compare/boost-1.67.0...smanders:xp1.67.0

previous boost patch justification

VANTAGE grep -r "boost/mpl/vector/vector100"

palam grep -r "boost/mpl/vector/vector100"

smanders commented 3 years ago

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>
smanders commented 3 years ago

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.
smanders commented 3 years ago

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

smanders commented 3 years ago

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.

smanders commented 3 years ago

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...

smanders commented 3 years ago

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

smanders commented 3 years ago

boost version history https://www.boost.org/users/history/

smanders commented 3 years ago

boost 1.75.0 patches

boost 1.76.0 patches

smanders commented 3 years ago

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

smanders commented 3 years ago

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

smanders commented 3 years ago

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

smanders commented 3 years ago

commits that fix issues with projects updating to use boost 1.76.0

smanders commented 3 years ago

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!

smanders commented 3 years ago

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.
smanders commented 3 years ago

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.
smanders commented 3 years ago

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'
smanders commented 3 years ago

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)

smanders commented 3 years ago

completed with commits referenced above