diff --git a/CMakeLists.txt b/CMakeLists.txt index 12bfa6665..e079de176 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -797,19 +797,15 @@ set(BOOST_COMPONENTS atomic chrono date_time serialization system thread) if(NOT ${FILESYSTEM_FOUND}) set(BOOST_COMPONENTS ${BOOST_COMPONENTS} filesystem) endif() -if(CMAKE_VERSION VERSION_LESS 3.30) - find_package(Boost ${GNSSSDR_BOOST_MIN_VERSION} COMPONENTS ${BOOST_COMPONENTS} REQUIRED) +find_package(Boost ${GNSSSDR_BOOST_MIN_VERSION} COMPONENTS ${BOOST_COMPONENTS}) +if(Boost_FOUND) + get_filename_component(BOOST_PREFIX ${Boost_INCLUDE_DIRS} DIRECTORY) + message(STATUS "Found Boost v${Boost_VERSION_STRING} at ${BOOST_PREFIX}") else() - find_package(Boost ${GNSSSDR_BOOST_MIN_VERSION} COMPONENTS ${BOOST_COMPONENTS}) - if(Boost_FOUND) - get_filename_component(BOOST_PREFIX ${Boost_INCLUDE_DIRS} DIRECTORY) - message(STATUS "Found Boost v${Boost_VERSION_STRING} at ${BOOST_PREFIX}") - else() - message(STATUS "Trying deprecated FindBoost Module ...") - if(POLICY CMP0167) - cmake_policy(SET CMP0167 OLD) - find_package(Boost ${GNSSSDR_BOOST_MIN_VERSION} REQUIRED COMPONENTS ${BOOST_COMPONENTS}) - endif() + message(STATUS "Trying deprecated FindBoost Module ...") + if(POLICY CMP0167) + cmake_policy(SET CMP0167 OLD) + find_package(Boost ${GNSSSDR_BOOST_MIN_VERSION} REQUIRED COMPONENTS ${BOOST_COMPONENTS}) endif() endif() if(NOT Boost_FOUND) @@ -914,45 +910,47 @@ endif() # Provide package descriptions if Boost >= 1.71.00 if(Boost_VERSION_STRING VERSION_GREATER 1.70.99) + set(boost_version_string "${Boost_VERSION_STRING}") + string(REPLACE "." "_" boost_version_underscored "${boost_version_string}") set_package_properties(boost_headers PROPERTIES - URL "https://www.boost.org/" + URL "https://www.boost.org/libraries/${Boost_VERSION_STRING}/grid/" DESCRIPTION "Header files of Boost libraries" PURPOSE "Used widely across the source code." TYPE REQUIRED ) set_package_properties(boost_atomic PROPERTIES - URL "https://www.boost.org/doc/libs/latest/libs/atomic/doc/html/index.html" + URL "https://www.boost.org/doc/libs/${boost_version_underscored}/doc/html/index.html" DESCRIPTION "Provides atomic data types and operations on those types" PURPOSE "Required by Boost Thread." TYPE REQUIRED ) set_package_properties(boost_chrono PROPERTIES - URL "https://www.boost.org/doc/libs/latest/doc/html/chrono.html" + URL "https://www.boost.org/doc/libs/${boost_version_underscored}/doc/html/chrono.html" DESCRIPTION "Useful time utilities" PURPOSE "Required by Boost Thread." TYPE REQUIRED ) set_package_properties(boost_date_time PROPERTIES - URL "https://www.boost.org/doc/libs/latest/doc/html/date_time.html" + URL "https://www.boost.org/doc/libs/${boost_version_underscored}/doc/html/date_time.html" DESCRIPTION "A set of date-time libraries" PURPOSE "Required by Boost Thread." TYPE REQUIRED ) set_package_properties(boost_serialization PROPERTIES - URL "https://www.boost.org/doc/libs/latest/libs/serialization/doc/index.html" + URL "https://www.boost.org/doc/libs/${boost_version_underscored}/libs/serialization/doc/index.html" DESCRIPTION "Reversible deconstruction of C++ data structures to sequences of bytes" PURPOSE "Used for serializing data." TYPE REQUIRED ) set_package_properties(boost_thread PROPERTIES - URL "https://www.boost.org/doc/libs/latest/doc/html/thread.html" + URL "https://www.boost.org/doc/libs/${boost_version_underscored}/doc/html/thread.html" DESCRIPTION "Portable C++ multi-threading" PURPOSE "Used by GNU Radio multi-threading system." TYPE REQUIRED ) if(Boost_VERSION_STRING VERSION_LESS 1.88.99) set_package_properties(boost_system PROPERTIES - URL "https://www.boost.org/doc/libs/latest/libs/system/doc/html/system.html" + URL "https://www.boost.org/doc/libs/${boost_version_underscored}/libs/system/doc/html/system.html" DESCRIPTION "Extensible error reporting library" PURPOSE "Used for error reporting." TYPE REQUIRED @@ -960,7 +958,7 @@ if(Boost_VERSION_STRING VERSION_GREATER 1.70.99) endif() if(NOT ${FILESYSTEM_FOUND}) set_package_properties(boost_filesystem PROPERTIES - URL "https://www.boost.org/doc/libs/release/libs/filesystem/doc/index.htm" + URL "https://www.boost.org/doc/libs/${boost_version_underscored}/libs/filesystem/doc/index.htm" DESCRIPTION "Portable facilities to manipulate paths and files" PURPOSE "Used for output file handling." TYPE REQUIRED @@ -1023,8 +1021,10 @@ if(Boost_VERSION_STRING VERSION_GREATER 1.72.99) endif() # Fix for Boost >= 1.89 - Boost::system becomes header-only -if(Boost_VERSION_STRING VERSION_GREATER 1.88.99) - add_library(Boost::system ALIAS Boost::headers) +if(Boost_VERSION_STRING VERSION_LESS 1.89.0) + set(NEED_BOOST_SYSTEM ON) +else() + set(NEED_BOOST_SYSTEM OFF) endif() diff --git a/src/algorithms/libs/CMakeLists.txt b/src/algorithms/libs/CMakeLists.txt index bd56fdfa1..bf46193d3 100644 --- a/src/algorithms/libs/CMakeLists.txt +++ b/src/algorithms/libs/CMakeLists.txt @@ -149,7 +149,7 @@ if(FILESYSTEM_FOUND) endif() target_link_libraries(algorithms_libs PUBLIC std::filesystem) else() - target_link_libraries(algorithms_libs PUBLIC Boost::filesystem Boost::system) + target_link_libraries(algorithms_libs PUBLIC Boost::filesystem $<$:Boost::system>) endif() if(has_span) @@ -228,7 +228,12 @@ if(FILESYSTEM_FOUND) endif() target_link_libraries(gnss_sdr_flags PRIVATE std::filesystem) else() - target_link_libraries(gnss_sdr_flags PRIVATE Boost::filesystem Boost::system) + target_link_libraries(gnss_sdr_flags + PRIVATE + Boost::filesystem + $<$:Boost::system> + $<$>:Boost::headers> + ) endif() if(ENABLE_GLOG_AND_GFLAGS) diff --git a/src/algorithms/libs/rtklib/CMakeLists.txt b/src/algorithms/libs/rtklib/CMakeLists.txt index e308f102c..bd62c20e8 100644 --- a/src/algorithms/libs/rtklib/CMakeLists.txt +++ b/src/algorithms/libs/rtklib/CMakeLists.txt @@ -94,7 +94,12 @@ if(FILESYSTEM_FOUND) endif() target_link_libraries(algorithms_libs_rtklib PUBLIC std::filesystem) else() - target_link_libraries(algorithms_libs_rtklib PUBLIC Boost::filesystem Boost::system) + target_link_libraries(algorithms_libs_rtklib + PUBLIC + Boost::filesystem + $<$:Boost::system> + $<$>:Boost::headers> + ) endif() set_property(TARGET algorithms_libs_rtklib diff --git a/src/core/libs/CMakeLists.txt b/src/core/libs/CMakeLists.txt index 5b6ba902f..56030d4aa 100644 --- a/src/core/libs/CMakeLists.txt +++ b/src/core/libs/CMakeLists.txt @@ -102,7 +102,7 @@ target_link_libraries(core_libs PRIVATE algorithms_libs Boost::serialization - Boost::system + $<$:Boost::system> Pugixml::pugixml ) diff --git a/src/core/monitor/CMakeLists.txt b/src/core/monitor/CMakeLists.txt index 8ac8045d1..32369c4ae 100644 --- a/src/core/monitor/CMakeLists.txt +++ b/src/core/monitor/CMakeLists.txt @@ -44,7 +44,7 @@ endif() target_link_libraries(core_monitor PUBLIC Boost::headers - Boost::system + $<$:Boost::system> Gnuradio::runtime protobuf::libprotobuf core_system_parameters diff --git a/utils/nav-listener/CMakeLists.txt b/utils/nav-listener/CMakeLists.txt index ea9c5d36e..4b514c0e2 100644 --- a/utils/nav-listener/CMakeLists.txt +++ b/utils/nav-listener/CMakeLists.txt @@ -4,7 +4,7 @@ # SPDX-FileCopyrightText: 2021 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause -cmake_minimum_required(VERSION 3.9...3.30) +cmake_minimum_required(VERSION 3.9...4.0) project(nav-msg-listener CXX) set(CMAKE_CXX_STANDARD 11) @@ -12,8 +12,45 @@ set(CMAKE_CXX_STANDARD 11) set(NAVLISTENER_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) # allows this to be a sub-project set(NAVLISTENER_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}) +if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + # Workaround for Macports + if(NOT BOOST_ROOT) + set(MACOS_PACKAGES_PREFIX "") + # Detect if MacPorts is installed on this system; if so, return base path and version + execute_process(COMMAND which port RESULT_VARIABLE DETECT_MACPORTS OUTPUT_VARIABLE MACPORTS_PREFIX ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) + if(${DETECT_MACPORTS} EQUAL 0) + # "/opt/local/bin/port", so we get the parent directory + get_filename_component(MACPORTS_PREFIX ${MACPORTS_PREFIX} DIRECTORY) + # "/opt/local/bin", so we get the parent directory + get_filename_component(MACPORTS_PREFIX ${MACPORTS_PREFIX} DIRECTORY) + execute_process(COMMAND port version RESULT_VARIABLE DETECT_MACPORTS_VERSION OUTPUT_VARIABLE MACPORTS_VERSION ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) + string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" MACPORTS_VERSION "${MACPORTS_VERSION}") + set(MACOS_PACKAGES_PREFIX ${MACPORTS_PREFIX}) + endif() + if(EXISTS "${MACPORTS_PREFIX}/libexec/boost/1.88") + set(BOOST_ROOT "${MACPORTS_PREFIX}/libexec/boost/1.88") + elseif(EXISTS "${MACPORTS_PREFIX}/libexec/boost/1.87") + set(BOOST_ROOT "${MACPORTS_PREFIX}/libexec/boost/1.87") + elseif(EXISTS "${MACPORTS_PREFIX}/libexec/boost/1.81") + set(BOOST_ROOT "${MACPORTS_PREFIX}/libexec/boost/1.81") + elseif(EXISTS "${MACPORTS_PREFIX}/libexec/boost/1.78") + set(BOOST_ROOT "${MACPORTS_PREFIX}/libexec/boost/1.78") + elseif(EXISTS "${MACPORTS_PREFIX}/libexec/boost/1.76") + set(BOOST_ROOT "${MACPORTS_PREFIX}/libexec/boost/1.76") + elseif(EXISTS "${MACPORTS_PREFIX}/libexec/boost/1.71") + set(BOOST_ROOT "${MACPORTS_PREFIX}/libexec/boost/1.71") + endif() + endif() +endif() + set(Boost_USE_STATIC_LIBS OFF) -find_package(Boost COMPONENTS system REQUIRED) +find_package(Boost COMPONENTS system) + +if(Boost_VERSION_STRING VERSION_GREATER "1.88.99") + set(NEED_BOOST_SYSTEM OFF) +else() + set(NEED_BOOST_SYSTEM ON) +endif() find_package(Protobuf REQUIRED) if(${Protobuf_VERSION} VERSION_LESS "3.0.0") @@ -26,8 +63,8 @@ add_library(navmsg_lib ${NAVLISTENER_SOURCE_DIR}/nav_msg_udp_listener.cc ${PROTO target_link_libraries(navmsg_lib PUBLIC - Boost::boost - Boost::system + Boost::headers + $<$:Boost::system> protobuf::libprotobuf )