diff --git a/CMakeLists.txt b/CMakeLists.txt index e07c53d6b51fecf1fb22a25ed10dec2cb1a9eb33..a50fff8e7004f5255bdaaf9b1555b3bc3150691b 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 273cda3aa3a77ce2e3e4932553d5a75b5a074717..840d0f6a0717054d1388bd2412a779855b6f60cc 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 2ad8088a217df565ea8ec83e52fbc0b53e7c5c68..c027225ef850e08d10c411b45a2b8d2cb306fba8 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 3bc926de82a785a530659a0f7797812c5227ab94..2ccfb04e83c74b33b0268a5ed247b424fb4e20f9 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 40f33282a196138eda009046a886606702360a9f..87d4749499dc9055058870eda6c132fba566ea15 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 e475fbdde390af650934b2ca89714911ecfd13c0..5c2fd044ee6e83ae5ac20a358af83cc91cab2b06 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 9242a005d85b2b483bcd8fc2a15070088341d88b..208b0d5e156e2637eeca394ebe4c8ca965b2aea3 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 40edd5ce7d53c42594254fbc7679fbc3abce1dae..23c3c657bf29af3b9a802db865022b9ab8058d9f 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 20d0161758fc440787ca4f2a2ac9504dc60b5b65..065853de4fac203929fa665641240c498314c6de 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 21da031198800411cc09856a2978bb243c97cccd..51083bd8cd15d9e5f2c1862f2c49ce4e31cf9425 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 Binary files a/modules/mol/mm/tests/test.ff and b/modules/mol/mm/tests/test.ff differ diff --git a/modules/seq/base/src/CMakeLists.txt b/modules/seq/base/src/CMakeLists.txt index ff359c8ad8dba949f3f0bfbf1aab122b973d4bd9..d722d8e06d0f6ddf8f02fb171dddd3eb75c4d446 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})