From 7b3298f8c6313b09472b4955de6b96a2c827fd3f Mon Sep 17 00:00:00 2001 From: Gabriel Studer <gabriel.studer@unibas.ch> Date: Thu, 10 Apr 2025 23:17:06 +0200 Subject: [PATCH] cmake boost refactor Remove custom boost setup code. Use preferred way of boost provided configuration files for newer cmake/boost versions. tested with cmake 3.31.6 and boost 1.70, needs testing with other configurations. --- CMakeLists.txt | 24 +++++++++++- cmake_support/OST.cmake | 58 ++-------------------------- modules/base/src/CMakeLists.txt | 3 +- modules/doc/install.rst | 2 +- modules/geom/src/CMakeLists.txt | 3 +- modules/gui/src/CMakeLists.txt | 4 +- modules/info/src/CMakeLists.txt | 2 +- modules/io/src/CMakeLists.txt | 11 ++++-- modules/mol/alg/src/CMakeLists.txt | 2 +- modules/mol/mm/src/CMakeLists.txt | 2 +- modules/mol/mm/tests/test.ff | Bin 1124 -> 1124 bytes modules/seq/base/src/CMakeLists.txt | 4 +- 12 files changed, 44 insertions(+), 71 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e07c53d6b..a50fff8e7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ # Author: Marco Biasini #------------------------------------------------------------------------------- -cmake_minimum_required(VERSION 3.12.1 FATAL_ERROR) +cmake_minimum_required(VERSION 3.25 FATAL_ERROR) # Set CMake policies # Behaviour of target_link_libraries, always link by full path. CMP0060 can @@ -22,6 +22,15 @@ if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.31.0") cmake_policy(SET CMP0177 NEW) endif() +if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.30.0") + # See CMP0167 for more information + # to summarize: Starting from boost 1.70, boost comes with a package + # configuration file BoostConfig.cmake. Starting from cmake 3.30, + # this is the way to go and users get warned if the old FindBoost module + # gets used. + cmake_policy(SET CMP0167 NEW) +endif() + project(OpenStructure CXX C) set (CMAKE_EXPORT_COMPILE_COMMANDS 1) set (OST_VERSION_MAJOR 2) @@ -194,11 +203,22 @@ find_package(Python 3.6 REQUIRED COMPONENTS Interpreter Development) # where Python modules live set(PYTHON_MODULE_PATH "python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages/") +set(_BOOST_MIN_VERSION 1.70) + if(BOOST_VERSION) message(STATUS "forcing boost to version ${BOOST_VERSION}") set(_BOOST_MIN_VERSION ${BOOST_VERSION}) endif() -setup_boost() +find_package(Boost ${_BOOST_MIN_VERSION} + COMPONENTS unit_test_framework + filesystem + system + iostreams + program_options + regex + thread + python + REQUIRED) if (WIN32) ADD_DEFINITIONS("-DBOOST_ALL_NO_LIB") endif() diff --git a/cmake_support/OST.cmake b/cmake_support/OST.cmake index 273cda3aa..840d0f6a0 100644 --- a/cmake_support/OST.cmake +++ b/cmake_support/OST.cmake @@ -542,7 +542,7 @@ macro(pymod) set(_PARENT_LIB_NAME "${_PARENT_NAME}") endif() target_link_libraries("_${_LIB_NAME}" ${_PARENT_LIB_NAME} - ${Python_LIBRARIES} ${BOOST_PYTHON_LIBRARIES}) + ${Python_LIBRARIES} Boost::python) set_target_properties("_${_LIB_NAME}" PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${PYMOD_STAGE_DIR}) @@ -657,7 +657,7 @@ macro(ost_unittest) set_target_properties(${_test_name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/tests" ) set_target_properties(${_test_name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/tests" ) - target_link_libraries(${_test_name} ${BOOST_UNIT_TEST_LIBRARIES} "${_ARG_PREFIX}_${_ARG_MODULE}") + target_link_libraries(${_test_name} Boost::unit_test_framework "${_ARG_PREFIX}_${_ARG_MODULE}") if (WIN32) set(TEST_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/${_test_name}.exe || echo) message(${TEST_COMMAND}) @@ -794,7 +794,7 @@ macro(ost_match_boost_python_version) # this variable may either be a simple library path or list that contains # different libraries for different build-options. For example: # optimized;<lib1>;debug;<lib2> - set(_BOOST_PYTHON_LIBRARY ${BOOST_PYTHON_LIBRARIES}) + set(_BOOST_PYTHON_LIBRARY Boost::python) list(LENGTH _BOOST_PYTHON_LIBRARY _BP_LENGTH) if (_BP_LENGTH GREATER 1) list(FIND _BOOST_PYTHON_LIBRARY optimized _OPTIMIZED_INDEX) @@ -903,58 +903,6 @@ macro(setup_compiler_flags) endif() endif() endmacro() -set(_BOOST_MIN_VERSION 1.31) - -macro(setup_boost) - #set (Boost_NO_BOOST_CMAKE TRUE) - # starting with CMake 3.11 we could use the following instead of the foreach - # find_package(Boost ${_BOOST_MIN_VERSION} COMPONENTS - # python${Python_VERSION_MAJOR}${Python_VERSION_MINOR} REQUIRED) - # set(BOOST_PYTHON_LIBRARIES ${Boost_LIBRARIES}) - # see https://cmake.org/cmake/help/v3.11/module/FindBoost.html - foreach(_python_lib_name python${Python_VERSION_MAJOR}${Python_VERSION_MINOR} - python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR} - python${Python_VERSION_MAJOR} - python) - find_package(Boost ${_BOOST_MIN_VERSION} COMPONENTS ${_python_lib_name} QUIET) - if(Boost_FOUND) - message(STATUS "Found Boost package: " ${_python_lib_name}) - set(BOOST_PYTHON_LIBRARIES ${Boost_LIBRARIES}) - break() - else() - message(STATUS "Boost package not found: " ${_python_lib_name} - ". Trying alternative names!") - endif() - endforeach(_python_lib_name) - if(NOT BOOST_PYTHON_LIBRARIES) - message(FATAL_ERROR "Failed to find any Boost Python library!") - endif() - set(Boost_LIBRARIES) - find_package(Boost ${_BOOST_MIN_VERSION} - COMPONENTS unit_test_framework REQUIRED) - set(BOOST_UNIT_TEST_LIBRARIES ${Boost_LIBRARIES}) - set(Boost_LIBRARIES) - if (ENABLE_STATIC) - set(Boost_USE_STATIC_LIBS ON) - endif() - find_package(Boost ${_BOOST_MIN_VERSION} - COMPONENTS filesystem system REQUIRED) - set(BOOST_LIBRARIES ${Boost_LIBRARIES}) - set(Boost_LIBRARIES) - find_package(Boost ${_BOOST_MIN_VERSION} COMPONENTS iostreams REQUIRED) - set(BOOST_IOSTREAM_LIBRARIES ${Boost_LIBRARIES}) - set(Boost_LIBRARIES) - find_package(Boost ${_BOOST_MIN_VERSION} COMPONENTS program_options REQUIRED) - set(BOOST_PROGRAM_OPTIONS ${Boost_LIBRARIES}) - set(Boost_LIBRARIES) - find_package(Boost ${_BOOST_MIN_VERSION} COMPONENTS regex REQUIRED) - set(BOOST_REGEX_LIBRARIES ${Boost_LIBRARIES}) - set(Boost_LIBRARIES) - find_package(Boost ${_BOOST_MIN_VERSION} COMPONENTS thread REQUIRED) - set(BOOST_THREAD ${Boost_LIBRARIES}) - set(Boost_LIBRARIES) -endmacro() - #------------------------------------------------------------------------------- # Synopsis: diff --git a/modules/base/src/CMakeLists.txt b/modules/base/src/CMakeLists.txt index 2ad8088a2..c027225ef 100644 --- a/modules/base/src/CMakeLists.txt +++ b/modules/base/src/CMakeLists.txt @@ -44,5 +44,6 @@ module(NAME base SOURCES ${OST_BASE_SOURCES} HEADERS ${OST_EXPORT_HELPERS} IN_DIR export_helper compare_files.hh IN_DIR test_utils ${OST_BASE_HEADERS} DEPENDS_ON ost_geom - HEADER_OUTPUT_DIR ost) + HEADER_OUTPUT_DIR ost + LINK Boost::filesystem) diff --git a/modules/doc/install.rst b/modules/doc/install.rst index 3bc926de8..2ccfb04e8 100644 --- a/modules/doc/install.rst +++ b/modules/doc/install.rst @@ -30,7 +30,7 @@ a bunch of open-source libraries. If you haven't already installed them, please install them now! Where appropriate, the preferred version is given in parentheses. -* `CMake <http://cmake.org>`_ (3.23.1) +* `CMake <http://cmake.org>`_ (3.25) * `Python3 <http://python.org>`_ (3.9.5) * `Boost <http://boost.org>`_ (1.76.0) * `zlib <https://zlib.net/>`_ (usually comes with Boost or system) diff --git a/modules/geom/src/CMakeLists.txt b/modules/geom/src/CMakeLists.txt index 40f33282a..87d474949 100644 --- a/modules/geom/src/CMakeLists.txt +++ b/modules/geom/src/CMakeLists.txt @@ -54,7 +54,6 @@ vector.hh module(NAME geom HEADERS ${OST_GEOM_EXPORT_HELPERS} IN_DIR export_helper ${OST_GEOM_HEADERS} - SOURCES ${OST_GEOM_SOURCES} - LINK ${BOOST_LIBRARIES}) + SOURCES ${OST_GEOM_SOURCES}) add_dependencies(ost_geom ost_config) diff --git a/modules/gui/src/CMakeLists.txt b/modules/gui/src/CMakeLists.txt index e475fbdde..5c2fd044e 100644 --- a/modules/gui/src/CMakeLists.txt +++ b/modules/gui/src/CMakeLists.txt @@ -453,7 +453,7 @@ module(NAME gui SOURCES ${OST_GUI_MOCS} ${OST_GUI_SOURCES} DEPENDS_ON ost_gfx ost_io ost_mol_alg ost_seq_alg LINK ${QT_LIBRARIES} ${Python_LIBRARIES} - ${BOOST_PYTHON_LIBRARIES} + Boost::python ${SPNAV_LIBRARIES} NO_STATIC) @@ -469,7 +469,7 @@ qt5_wrap_cpp(OST_GOSTY_MOC "gosty.hh" OPTIONS -DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED -DBOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) -set(LINK LINK ${QT_LIBRARIES} ${BOOST_PROGRAM_OPTIONS_LIBRARIES}) +set(LINK LINK ${QT_LIBRARIES} Boost::program_options) executable_libexec(NAME gosty SOURCES gosty.cc ${OST_GOSTY_MOC} ${OST_QT_RESOURCE} DEPENDS_ON ost_gui ${LINK}) diff --git a/modules/info/src/CMakeLists.txt b/modules/info/src/CMakeLists.txt index 9242a005d..208b0d5e1 100644 --- a/modules/info/src/CMakeLists.txt +++ b/modules/info/src/CMakeLists.txt @@ -31,5 +31,5 @@ set(QT_USE_QTXML 1) module(NAME info SOURCES ${OST_INFO_SOURCES} HEADERS ${OST_INFO_HEADERS} - DEPENDS_ON ost_base LINK ${BOOST_REGEX_LIBRARIES} ${QT_LIBRARIES}) + DEPENDS_ON ost_base LINK Boost::regex ${QT_LIBRARIES}) diff --git a/modules/io/src/CMakeLists.txt b/modules/io/src/CMakeLists.txt index 40edd5ce7..23c3c657b 100644 --- a/modules/io/src/CMakeLists.txt +++ b/modules/io/src/CMakeLists.txt @@ -67,7 +67,12 @@ module(NAME io SOURCES "${OST_IO_SOURCES}" ${OST_IO_IMG_HEADERS} IN_DIR img ${OST_IO_SEQ_HEADERS} IN_DIR seq ${OST_IO_HEADERS} - DEPENDS_ON ${OST_IO_DEPENDENCIES}) -target_link_libraries(ost_io ${BOOST_IOSTREAM_LIBRARIES}) -target_link_libraries(ost_io ${TIFF_LIBRARIES} ${PNG_LIBRARIES}) + DEPENDS_ON ${OST_IO_DEPENDENCIES} + LINK Boost::filesystem + Boost::iostreams + ${TIFF_LIBRARIES} + ${PNG_LIBRARIES}) +#target_link_libraries(ost_io Boost::filesystem) +#target_link_libraries(ost_io Boost::iostreams) +#target_link_libraries(ost_io ${TIFF_LIBRARIES} ${PNG_LIBRARIES}) diff --git a/modules/mol/alg/src/CMakeLists.txt b/modules/mol/alg/src/CMakeLists.txt index 20d016175..065853de4 100644 --- a/modules/mol/alg/src/CMakeLists.txt +++ b/modules/mol/alg/src/CMakeLists.txt @@ -66,7 +66,7 @@ module(NAME mol_alg SOURCES ${OST_MOL_ALG_SOURCES} HEADERS ${OST_MOL_ALG_HEADERS} HEADER_OUTPUT_DIR ost/mol/alg DEPENDS_ON ${MOL_ALG_DEPS} - LINK ${BOOST_PROGRAM_OPTIONS} ${BOOST_THREAD}) + LINK Boost::program_options Boost::thread) copy_if_different("${CMAKE_CURRENT_SOURCE_DIR}" "${STAGE_DIR}/share/openstructure" "atom_scattering_properties.txt" "ATOM_SCATTERING_PROPS" diff --git a/modules/mol/mm/src/CMakeLists.txt b/modules/mol/mm/src/CMakeLists.txt index 21da03119..51083bd8c 100644 --- a/modules/mol/mm/src/CMakeLists.txt +++ b/modules/mol/mm/src/CMakeLists.txt @@ -48,7 +48,7 @@ module(NAME mol_mm SOURCES ${OST_MOL_MM_SOURCES} HEADERS ${OST_MOL_MM_HEADERS} HEADER_OUTPUT_DIR ost/mol/mm DEPENDS_ON ${MOL_MM_DEPS} - LINK ${BOOST_PROGRAM_OPTIONS}) + LINK Boost::program_options) target_link_libraries(ost_mol_mm ${OPEN_MM_LIBRARIES}) diff --git a/modules/mol/mm/tests/test.ff b/modules/mol/mm/tests/test.ff index a9dfffe15ebe5915d3daba9c199e01cef5645e0c..adc824ba50b8e6c3a58c3a1afcc9b94e02396b07 100644 GIT binary patch delta 65 zcmaFD@q}Z7m{@*k5d%Ym12Y2z<maU_Ff`at)Kw5*frv1qWtOEfFf4G`81tWLawD_m N<Y;EK$*Y)m0RZ>25Q+c* delta 65 zcmaFD@q}Z7n0RJcDg(m;2NnhhNXsuRVqj=+n5d(`&kPY_$j?h<U}&)481tWLatpKC N<Y;Ei$*Y)m0RaE)5R3o- diff --git a/modules/seq/base/src/CMakeLists.txt b/modules/seq/base/src/CMakeLists.txt index ff359c8ad..d722d8e06 100644 --- a/modules/seq/base/src/CMakeLists.txt +++ b/modules/seq/base/src/CMakeLists.txt @@ -40,5 +40,5 @@ endif() module(NAME seq SOURCES ${OST_SEQ_SOURCES} HEADERS ${OST_SEQ_IMPL_HEADERS} IN_DIR impl ${OST_SEQ_HEADERS} - LINK ${BOOST_IOSTREAM_LIBRARIES} - DEPENDS_ON ost_mol ${INFO_DEPS}) \ No newline at end of file + LINK Boost::iostreams + DEPENDS_ON ost_mol ${INFO_DEPS}) -- GitLab