diff --git a/CMakeLists.txt b/CMakeLists.txt index b424686..cd7fb81 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -72,6 +72,12 @@ if (NOT DEFINED LAPACK_LIBRARIES) endif () list (APPEND OPENTURNS_PRIVATE_LIBRARIES ${LAPACK_LIBRARIES}) +find_package(kissfft CONFIG REQUIRED) +list(APPEND OPENTURNS_PRIVATE_LIBRARIES kissfft::kissfft-double) + +find_path(RAPIDCSV_INCLUDE_DIRS "rapidcsv.h" REQUIRED) +list(APPEND OPENTURNS_PRIVATE_INCLUDE_DIRS ${RAPIDCSV_INCLUDE_DIRS}) + if (USE_SPECTRA) find_package (Spectra 1.0 CONFIG) endif () @@ -147,6 +153,8 @@ if (muparser_FOUND) endif () if (USE_EXPRTK) + find_path(EXPRTK_INCLUDE_DIRS "exprtk.hpp" REQUIRED) + list(APPEND OPENTURNS_PRIVATE_INCLUDE_DIRS ${EXPRTK_INCLUDE_DIRS}) set (OPENTURNS_HAVE_EXPRTK TRUE) set (OPENTURNS_HAVE_ANALYTICAL_PARSER TRUE) set (SYMBOLICPARSER_DEFAULT_BACKEND ExprTk) @@ -211,7 +219,9 @@ if (USE_BOOST) endif () endif () if (USE_MPFR) - find_package (MPFR) + find_package(PkgConfig REQUIRED) + pkg_check_modules(MPFR mpfr REQUIRED) + set(MPFR_LIBRARIES "${MPFR_LINK_LIBRARIES}") if (MPFR_FOUND) set (OPENTURNS_HAVE_MPFR TRUE) list (APPEND OPENTURNS_PRIVATE_INCLUDE_DIRS ${MPFR_INCLUDE_DIRS}) @@ -260,8 +270,8 @@ if (USE_CERES) set (Ceres_FOUND FALSE) endif () if (Ceres_FOUND AND "SuiteSparse" IN_LIST CERES_COMPILED_COMPONENTS) - message (STATUS "Ceres was built with SuiteSparse GPL components, disabling.") - set (Ceres_FOUND FALSE) + # https://github.com/openturns/openturns/issues/3170 + message (WARNING "Ceres was built with SuiteSparse GPL components.") endif () if (Ceres_FOUND) set (OPENTURNS_HAVE_CERES TRUE) @@ -547,6 +557,36 @@ set (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) set (OPENTURNS_SWIG_INCLUDE_DIRS ${INCLUDE_PATH}/openturns/swig) +# Subdirs and OpenTURNSConfig.cmake.in rely on _FOUND variables. +# Force strict control of *direct* dependencies via USE_ +# *and* catch new USE_ variables during port updates. +get_directory_property(vars_to_check CACHE_VARIABLES) +list(FILTER vars_to_check INCLUDE REGEX "^USE_") +list(REMOVE_ITEM vars_to_check + USE_EXPRTK # find_path + USE_EXTERNAL_LIBS # special + USE_MPFR # pkgconfig + USE_SPHINX # find_program + USE_OPENBLAS # disables OpenBLAS threading when TBB is active and LAPACK uses OpenBLAS +) +foreach(package IN ITEMS Bonmin Boost Ceres CMinpack Cuba dlib Eigen3 HDF5 highs HMAT Ipopt LibXml2 + MPC muparser nanoflann NLopt OpenMP Pagmo primesieve Spectra TBB) + set(package_found_var "${package}_FOUND") + string(TOUPPER "USE_${package}" use_package_var) + string(REPLACE "USE_EIGEN3" "USE_SPECTRA" use_package_var "${use_package_var}") + if(NOT "${${use_package_var}}") + set("${package_found_var}" FALSE) # no accidental use + elseif(NOT DEFINED "${package_found_var}") + message(SEND_ERROR "${use_package_var} was set to ${${use_package_var}}, but ${package_found_var} is not set.") + elseif(NOT "${${package_found_var}}") + message(SEND_ERROR "${use_package_var} was set to ${${use_package_var}}, but ${package} was not found.") + endif() + list(REMOVE_ITEM vars_to_check "${use_package_var}") +endforeach() +if(vars_to_check) + message(SEND_ERROR "New input variables must be integrated into the check: ${vars_to_check}") +endif() + add_subdirectory (lib) if (Python_FOUND AND SWIG_FOUND) diff --git a/LICENSE b/LICENSE index 2bd2cde..3148f78 100644 --- a/LICENSE +++ b/LICENSE @@ -4,11 +4,8 @@ This library bundles several third-party codes with various licenses compatible - COBYLA optimization solver (lib/src/Base/Optim/algocobyla.*) under Expat license, see COPYING.cobyla - Mersenne twister RNG (lib/src/Base/Stat/dsfmt.*) under BSD license, see COPYING.dsfmt - Ev3 symbolic library (lib/src/Base/Diff/Ev3/*) under LGPL license, see COPYING.ev3 -- ExprTk symbolic parser (lib/src/Base/Func/openturns/exprtk.hpp) under Expat license, see COPYING.exprtk - Faddeeva function (lib/src/Base/Func/SpecFunc/Faddeeva.*) under Expat license, see COPYING.faddeeva - Kendall Tau (lib/src/Base/Stat/kendall.c) under BSL license, see COPYING.kendall -- KissFFT (lib/src/Base/Algo/kissfft.hh), under BSD license, see COPYING.kissfft - KS distribution from Cephes library (lib/src/Uncertainty/Distribution/cephes/*) under BSD license, see COPYING.cephes - TNC optimization solver (lib/src/Base/Optim/algotnc.*) under Expat license, see COPYING.tnc - Gauss Legendre quadrature from FastGL library (lib/src/Base/Algo/fastgl*) under BSD license, see COPYING.fastGL -- Rapidcsv parser library (lib/src/Base/Stat/rapidcsv.h) under BSD license, see COPYING.rapidcsv diff --git a/lib/OpenTURNSConfig.cmake.in b/lib/OpenTURNSConfig.cmake.in index bce893e..a74da31 100644 --- a/lib/OpenTURNSConfig.cmake.in +++ b/lib/OpenTURNSConfig.cmake.in @@ -44,7 +44,7 @@ set_and_check (OPENTURNS_INCLUDE_DIR "@PACKAGE_OPENTURNS_INCLUDE_DIR@") set (OPENTURNS_INCLUDE_DIRS "@PACKAGE_OPENTURNS_INCLUDE_DIRS@") set (OPENTURNS_LIBRARY "@OPENTURNS_LIBRARY@") set (OPENTURNS_LIBRARIES "@OPENTURNS_LIBRARIES@") -set (OPENTURNS_LIBRARY_DIRS "@PACKAGE_OPENTURNS_LIBRARY_DIRS@") +set (OPENTURNS_LIBRARY_DIRS "") set_and_check (OPENTURNS_ROOT_DIR "@PACKAGE_OPENTURNS_ROOT_DIR@") set (OPENTURNS_VERSION_STRING "@OPENTURNS_VERSION_STRING@") @@ -59,6 +59,7 @@ set (OPENTURNS_PYTHON_MODULE_PATH "@PACKAGE_PYTHON_MODULE_PATH@") # static libraries dependencies are transitive so imported targets must be defined if (NOT @BUILD_SHARED_LIBS@) include (CMakeFindDependencyMacro) + find_dependency(kissfft CONFIG) if ("@Boost_FOUND@") find_dependency (Boost CONFIG QUIET) diff --git a/lib/src/Base/Func/SymbolicParserExprTk.cxx b/lib/src/Base/Func/SymbolicParserExprTk.cxx index bb8b95d..19427f6 100644 --- a/lib/src/Base/Func/SymbolicParserExprTk.cxx +++ b/lib/src/Base/Func/SymbolicParserExprTk.cxx @@ -27,7 +27,7 @@ #include "openturns/OTwindows.h" // exprtk includes windows.h #define exprtk_disable_caseinsensitivity -#include "openturns/exprtk.hpp" +#include BEGIN_NAMESPACE_OPENTURNS