diff --git a/CMakeLists.txt b/CMakeLists.txt index 87b8789d101..c49546e2f94 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -124,6 +124,7 @@ endmacro() if(OPENMC_USE_DAGMC) find_package(DAGMC REQUIRED PATH_SUFFIXES lib/cmake) + set(OPENMC_DAGMC_DIR ${DAGMC_DIR}) if (${DAGMC_VERSION} VERSION_LESS 3.2.0) message(FATAL_ERROR "Discovered DAGMC Version: ${DAGMC_VERSION}." "Please update DAGMC to version 3.2.0 or greater.") @@ -149,6 +150,7 @@ endif() #=============================================================================== find_package(PNG) +set(OPENMC_USE_PNG ${PNG_FOUND}) #=============================================================================== # HDF5 for binary output @@ -243,11 +245,18 @@ endif() if(OPENMC_FORCE_VENDORED_LIBS) add_subdirectory(vendor/pugixml) set_target_properties(pugixml PROPERTIES CXX_STANDARD 14 CXX_EXTENSIONS OFF) + set(OPENMC_USES_VENDORED_PUGIXML TRUE) + set(OPENMC_PUGIXML_DIR "") else() find_package_write_status(pugixml) if (NOT pugixml_FOUND) add_subdirectory(vendor/pugixml) set_target_properties(pugixml PROPERTIES CXX_STANDARD 14 CXX_EXTENSIONS OFF) + set(OPENMC_USES_VENDORED_PUGIXML TRUE) + set(OPENMC_PUGIXML_DIR "") + else() + set(OPENMC_USES_VENDORED_PUGIXML FALSE) + set(OPENMC_PUGIXML_DIR "${pugixml_DIR}") endif() endif() @@ -258,11 +267,18 @@ endif() if(OPENMC_FORCE_VENDORED_LIBS) set(FMT_INSTALL ON CACHE BOOL "Generate the install target.") add_subdirectory(vendor/fmt) + set(OPENMC_USES_VENDORED_FMT TRUE) + set(OPENMC_FMT_DIR "") else() find_package_write_status(fmt) if (NOT fmt_FOUND) set(FMT_INSTALL ON CACHE BOOL "Generate the install target.") add_subdirectory(vendor/fmt) + set(OPENMC_USES_VENDORED_FMT TRUE) + set(OPENMC_FMT_DIR "") + else() + set(OPENMC_USES_VENDORED_FMT FALSE) + set(OPENMC_FMT_DIR "${fmt_DIR}") endif() endif() @@ -274,12 +290,29 @@ if(OPENMC_FORCE_VENDORED_LIBS) add_subdirectory(vendor/xtl) set(xtl_DIR ${CMAKE_CURRENT_BINARY_DIR}/vendor/xtl) add_subdirectory(vendor/xtensor) + set(OPENMC_USES_VENDORED_XTENSOR TRUE) + set(OPENMC_XTENSOR_DIR "") + set(OPENMC_XTL_DIR "") else() find_package_write_status(xtensor) if (NOT xtensor_FOUND) add_subdirectory(vendor/xtl) set(xtl_DIR ${CMAKE_CURRENT_BINARY_DIR}/vendor/xtl) add_subdirectory(vendor/xtensor) + set(OPENMC_USES_VENDORED_XTENSOR TRUE) + set(OPENMC_XTENSOR_DIR "") + set(OPENMC_XTL_DIR "") + else() + set(OPENMC_USES_VENDORED_XTENSOR FALSE) + set(OPENMC_XTENSOR_DIR "${xtensor_DIR}") + # xtl is a dependency of xtensor, so its DIR should be available too + if(DEFINED xtl_DIR) + set(OPENMC_XTL_DIR "${xtl_DIR}") + else() + # If xtl_DIR isn't set, it's likely in the same prefix as xtensor. + # We'll rely on the xtensor hint to find it. + set(OPENMC_XTL_DIR "${xtensor_DIR}") + endif() endif() endif() @@ -580,9 +613,7 @@ add_custom_command(TARGET libopenmc POST_BUILD #=============================================================================== # Install executable, scripts, manpage, license #=============================================================================== - -configure_file(cmake/OpenMCConfig.cmake.in "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/OpenMCConfig.cmake" @ONLY) -configure_file(cmake/OpenMCConfigVersion.cmake.in "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/OpenMCConfigVersion.cmake" @ONLY) +include(CMakePackageConfigHelpers) set(INSTALL_CONFIGDIR ${CMAKE_INSTALL_LIBDIR}/cmake/OpenMC) install(TARGETS openmc libopenmc @@ -596,10 +627,24 @@ install(EXPORT openmc-targets NAMESPACE OpenMC:: DESTINATION ${INSTALL_CONFIGDIR}) +configure_package_config_file( + "cmake/OpenMCConfig.cmake.in" + "${CMAKE_BINARY_DIR}/${CMAKE_FILES_DIRECTORY}/OpenMCConfig.cmake" + INSTALL_DESTINATION ${INSTALL_CONFIGDIR} +) + +write_basic_package_version_file( + "${CMAKE_BINARY_DIR}/${CMAKE_FILES_DIRECTORY}/OpenMCConfigVersion.cmake" + VERSION ${OPENMC_VERSION} + COMPATIBILITY AnyNewerVersion +) + install(FILES - "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/OpenMCConfig.cmake" - "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/OpenMCConfigVersion.cmake" - DESTINATION ${INSTALL_CONFIGDIR}) + "${CMAKE_BINARY_DIR}/${CMAKE_FILES_DIRECTORY}/OpenMCConfig.cmake" + "${CMAKE_BINARY_DIR}/${CMAKE_FILES_DIRECTORY}/OpenMCConfigVersion.cmake" + DESTINATION "${INSTALL_CONFIGDIR}" +) + install(FILES man/man1/openmc.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) install(FILES LICENSE DESTINATION "${CMAKE_INSTALL_DOCDIR}" RENAME copyright) install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) diff --git a/cmake/OpenMCConfig.cmake.in b/cmake/OpenMCConfig.cmake.in index 837a39c7833..c6498676b3c 100644 --- a/cmake/OpenMCConfig.cmake.in +++ b/cmake/OpenMCConfig.cmake.in @@ -1,14 +1,30 @@ -get_filename_component(OpenMC_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" DIRECTORY) +@PACKAGE_INIT@ -# Compute the install prefix from this file's location -get_filename_component(_OPENMC_PREFIX "${OpenMC_CMAKE_DIR}/../../.." ABSOLUTE) +include("${CMAKE_CURRENT_LIST_DIR}/OpenMCConfigVersion.cmake") +include(CMakeFindDependencyMacro) -find_package(fmt CONFIG REQUIRED HINTS ${_OPENMC_PREFIX}) -find_package(pugixml CONFIG REQUIRED HINTS ${_OPENMC_PREFIX}) -find_package(xtl CONFIG REQUIRED HINTS ${_OPENMC_PREFIX}) -find_package(xtensor CONFIG REQUIRED HINTS ${_OPENMC_PREFIX}) +if (@OPENMC_USES_VENDORED_FMT@) + find_dependency(fmt CONFIG REQUIRED HINTS "${PACKAGE_PREFIX_DIR}") +else() + find_dependency(fmt CONFIG REQUIRED HINTS "@OPENMC_FMT_DIR@") +endif() +if (@OPENMC_USES_VENDORED_PUGIXML@) + find_dependency(pugixml CONFIG REQUIRED HINTS "${PACKAGE_PREFIX_DIR}") +else() + find_dependency(pugixml CONFIG REQUIRED HINTS "@OPENMC_PUGIXML_DIR@") +endif() +if (@OPENMC_USES_VENDORED_XTENSOR@) + find_dependency(xtl CONFIG REQUIRED HINTS "${PACKAGE_PREFIX_DIR}") +else() + find_dependency(xtl CONFIG REQUIRED HINTS "@OPENMC_XTL_DIR@") +endif() +if (@OPENMC_USES_VENDORED_XTENSOR@) + find_dependency(xtensor CONFIG REQUIRED HINTS "${PACKAGE_PREFIX_DIR}") +else() + find_dependency(xtensor CONFIG REQUIRED HINTS "@OPENMC_XTENSOR_DIR@") +endif() if(@OPENMC_USE_DAGMC@) - find_package(DAGMC REQUIRED HINTS @DAGMC_DIR@) + find_dependency(DAGMC REQUIRED HINTS @OPENMC_DAGMC_DIR@) endif() if(@OPENMC_USE_LIBMESH@) @@ -18,20 +34,24 @@ if(@OPENMC_USE_LIBMESH@) pkg_check_modules(LIBMESH REQUIRED @LIBMESH_PC_FILE@>=1.7.0 IMPORTED_TARGET) endif() -find_package(PNG) - -if(NOT TARGET OpenMC::libopenmc) - include("${OpenMC_CMAKE_DIR}/OpenMCTargets.cmake") +if(@OPENMC_USE_PNG@) + find_dependency(PNG) endif() if(@OPENMC_USE_MPI@) - find_package(MPI REQUIRED) + find_dependency(MPI REQUIRED) endif() if(@OPENMC_USE_OPENMP@) - find_package(OpenMP REQUIRED) + find_dependency(OpenMP REQUIRED) endif() if(@OPENMC_USE_UWUW@ AND NOT ${DAGMC_BUILD_UWUW}) message(FATAL_ERROR "UWUW is enabled in OpenMC but the DAGMC installation discovered was not configured with UWUW.") endif() + +include("${CMAKE_CURRENT_LIST_DIR}/OpenMCTargets.cmake") + +if(NOT OpenMC_FIND_QUIETLY) + message(STATUS "Found OpenMC: ${PACKAGE_VERSION} (found in ${PACKAGE_PREFIX_DIR})") +endif() \ No newline at end of file diff --git a/cmake/OpenMCConfigVersion.cmake.in b/cmake/OpenMCConfigVersion.cmake.in deleted file mode 100644 index 90d345de441..00000000000 --- a/cmake/OpenMCConfigVersion.cmake.in +++ /dev/null @@ -1,11 +0,0 @@ -set(PACKAGE_VERSION "@OPENMC_VERSION@") - -# Check whether the requested PACKAGE_FIND_VERSION is compatible -if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}") - set(PACKAGE_VERSION_COMPATIBLE FALSE) -else() - set(PACKAGE_VERSION_COMPATIBLE TRUE) - if ("${PACKAGE_VERSION}" VERSION_EQUAL "${PACKAGE_FIND_VERSION}") - set(PACKAGE_VERSION_EXACT TRUE) - endif() -endif()