Skip to content

Commit

Permalink
When using -DH5PP_PACKAGE_MANAGER=cmake, use variables `H5PP_DEPS_B…
Browse files Browse the repository at this point in the history
…UILD_DIR` and `H5PP_DEPS_INSTALL_DIR` to control the dependency build/install locations
  • Loading branch information
DavidAce committed May 31, 2021
1 parent 61f35a0 commit bcb89e7
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 20 deletions.
2 changes: 1 addition & 1 deletion cmake/BuildDependency.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ cmake_minimum_required(VERSION 3.14)
# by setting the flags manually.

function(build_dependency dep_name install_dir extra_flags)
set(build_dir ${CMAKE_BINARY_DIR}/h5pp-deps-build/${dep_name})
set(build_dir ${H5PP_DEPS_BUILD_DIR}/${dep_name})
if (H5PP_DEPS_IN_SUBDIR)
set(install_dir ${install_dir}/${dep_name})
mark_as_advanced(install_dir)
Expand Down
75 changes: 56 additions & 19 deletions cmake/SetupDependenciesCMake.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,20 @@ if(H5PP_PACKAGE_MANAGER MATCHES "cmake")
# Here we use find_package in config-mode, intended to find <packagename>Config.cmake
# that is bundled with source installs of these packages.


# Setup build and install directories for dependencies
if(NOT H5PP_DEPS_BUILD_DIR)
set(H5PP_DEPS_BUILD_DIR ${CMAKE_BINARY_DIR}/h5pp-deps-build)
endif()
if(NOT H5PP_DEPS_INSTALL_DIR)
set(H5PP_DEPS_INSTALL_DIR ${CMAKE_BINARY_DIR}/h5pp-deps-install)
endif()

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
set(CMAKE_CXX_EXTENSIONS FALSE)


# Download fmt
if (H5PP_ENABLE_FMT AND NOT TARGET fmt::fmt)
# fmt is a dependency of spdlog
Expand All @@ -12,16 +26,19 @@ if(H5PP_PACKAGE_MANAGER MATCHES "cmake")
# Note that spdlog may already have been found in if H5PP_PACKAGE_MANAGER=find|cmake
# then we can assume that spdlog already knows how and where to get fmt.
find_package(fmt 6.2.1
HINTS ${fmt_ROOT} ${CMAKE_INSTALL_PREFIX}
NO_DEFAULT_PATH)
HINTS ${H5PP_DEPS_INSTALL_DIR}
NO_SYSTEM_ENVIRONMENT_PATH
NO_CMAKE_PACKAGE_REGISTRY
NO_CMAKE_SYSTEM_PATH
NO_CMAKE_SYSTEM_PACKAGE_REGISTRY)
if(NOT TARGET fmt::fmt)
message(STATUS "fmt will be installed into ${CMAKE_INSTALL_PREFIX}")
message(STATUS "fmt will be installed into ${H5PP_DEPS_INSTALL_DIR}")
list(APPEND FMT_CMAKE_OPTIONS "-DFMT_TEST:BOOL=OFF")
list(APPEND FMT_CMAKE_OPTIONS "-DFMT_DOC:BOOL=OFF")
include(${PROJECT_SOURCE_DIR}/cmake/BuildDependency.cmake)
build_dependency(fmt "${CMAKE_INSTALL_PREFIX}" "${FMT_CMAKE_OPTIONS}")
build_dependency(fmt "${H5PP_DEPS_INSTALL_DIR}" "${FMT_CMAKE_OPTIONS}")
find_package(fmt 6.2.1
HINTS ${fmt_ROOT} ${CMAKE_INSTALL_PREFIX}
HINTS ${H5PP_DEPS_INSTALL_DIR}
NO_DEFAULT_PATH
REQUIRED)
if(TARGET fmt::fmt)
Expand All @@ -39,10 +56,13 @@ if(H5PP_PACKAGE_MANAGER MATCHES "cmake")
# Download spdlog
if (H5PP_ENABLE_SPDLOG AND NOT TARGET spdlog::spdlog)
find_package(spdlog 1.3
HINTS ${spdlog_ROOT} ${CMAKE_INSTALL_PREFIX}
NO_DEFAULT_PATH)
HINTS ${H5PP_DEPS_INSTALL_DIR}
NO_SYSTEM_ENVIRONMENT_PATH
NO_CMAKE_PACKAGE_REGISTRY
NO_CMAKE_SYSTEM_PATH
NO_CMAKE_SYSTEM_PACKAGE_REGISTRY)
if(NOT TARGET spdlog::spdlog)
message(STATUS "Spdlog will be installed into ${CMAKE_INSTALL_PREFIX}")
message(STATUS "Spdlog will be installed into ${H5PP_DEPS_INSTALL_DIR}")
if(TARGET fmt::fmt)
get_target_property(FMT_INC fmt::fmt INTERFACE_INCLUDE_DIRECTORIES)
get_target_property(FMT_LOC fmt::fmt LOCATION)
Expand All @@ -53,9 +73,9 @@ if(H5PP_PACKAGE_MANAGER MATCHES "cmake")
list(APPEND SPDLOG_CMAKE_OPTIONS "-Dfmt_ROOT:PATH=${fmt_ROOT}")
endif()
include(${PROJECT_SOURCE_DIR}/cmake/BuildDependency.cmake)
build_dependency(spdlog "${CMAKE_INSTALL_PREFIX}" "${SPDLOG_CMAKE_OPTIONS}")
build_dependency(spdlog "${H5PP_DEPS_INSTALL_DIR}" "${SPDLOG_CMAKE_OPTIONS}")
find_package(spdlog 1.3
HINTS ${spdlog_ROOT} ${CMAKE_INSTALL_PREFIX}
HINTS ${H5PP_DEPS_INSTALL_DIR}
NO_DEFAULT_PATH
REQUIRED)
if(TARGET spdlog::spdlog)
Expand All @@ -78,14 +98,18 @@ if(H5PP_PACKAGE_MANAGER MATCHES "cmake")
# Download Eigen3
if (H5PP_ENABLE_EIGEN3 AND NOT TARGET Eigen3::Eigen)
find_package(Eigen3 3.3.7
HINTS ${Eigen3_ROOT} ${CMAKE_INSTALL_PREFIX} ${EIGEN3_DIRECTORY_HINTS} ${EIGEN3_INCLUDE_DIR}
NO_DEFAULT_PATH)
HINTS ${H5PP_DEPS_INSTALL_DIR} ${EIGEN3_INCLUDE_DIR}
NO_SYSTEM_ENVIRONMENT_PATH
NO_CMAKE_PACKAGE_REGISTRY
NO_CMAKE_SYSTEM_PATH
NO_CMAKE_SYSTEM_PACKAGE_REGISTRY
)
if(NOT TARGET Eigen3::Eigen)
message(STATUS "Eigen3 will be installed into ${CMAKE_INSTALL_PREFIX}")
message(STATUS "Eigen3 will be installed into ${H5PP_DEPS_INSTALL_DIR}")
include(${PROJECT_SOURCE_DIR}/cmake/BuildDependency.cmake)
build_dependency(Eigen3 "${CMAKE_INSTALL_PREFIX}" "")
build_dependency(Eigen3 "${H5PP_DEPS_INSTALL_DIR}" "")
find_package(Eigen3 3.3.7
HINTS ${CMAKE_INSTALL_PREFIX}
HINTS ${H5PP_DEPS_INSTALL_DIR}
NO_DEFAULT_PATH
REQUIRED)
if(TARGET Eigen3::Eigen)
Expand All @@ -103,14 +127,27 @@ if(H5PP_PACKAGE_MANAGER MATCHES "cmake")

# Download HDF5
if(NOT TARGET hdf5::all)
list(APPEND HDF5_ROOT ${CMAKE_INSTALL_PREFIX})
set(HDF5_NO_DEFAULT_PATH ON)
list(APPEND HDF5_ROOT ${H5PP_DEPS_INSTALL_DIR})
set(HDF5_NO_SYSTEM_ENVIRONMENT_PATH ON)
set(HDF5_NO_CMAKE_PACKAGE_REGISTRY ON)
set(HDF5_NO_CMAKE_SYSTEM_PATH ON)
set(HDF5_NO_CMAKE_SYSTEM_PACKAGE_REGISTRY ON)
set(HDF5_FIND_VERBOSE OFF)
set(HDF5_FIND_DEBUG OFF)
mark_as_advanced(HDF5_NO_SYSTEM_ENVIRONMENT_PATH)
mark_as_advanced(HDF5_NO_CMAKE_PACKAGE_REGISTRY)
mark_as_advanced(HDF5_NO_CMAKE_SYSTEM_PATH)
mark_as_advanced(HDF5_NO_CMAKE_SYSTEM_PACKAGE_REGISTRY)
mark_as_advanced(HDF5_FIND_VERBOSE)
mark_as_advanced(HDF5_FIND_DEBUG)


find_package(HDF5 1.8 COMPONENTS C HL)
if(NOT TARGET hdf5::all)
message(STATUS "HDF5 will be installed into ${CMAKE_INSTALL_PREFIX}")
message(STATUS "HDF5 will be installed into ${H5PP_DEPS_INSTALL_DIR}")
include(${PROJECT_SOURCE_DIR}/cmake/BuildDependency.cmake)
list(APPEND H5PP_HDF5_OPTIONS "-DHDF5_ENABLE_PARALLEL:BOOL=${H5PP_ENABLE_MPI}")
build_dependency(hdf5 "${CMAKE_INSTALL_PREFIX}" "${H5PP_HDF5_OPTIONS}")
build_dependency(hdf5 "${H5PP_DEPS_INSTALL_DIR}" "${H5PP_HDF5_OPTIONS}")
# This one uses our own module though, but will call the config-mode internally first.
find_package(HDF5 1.12 COMPONENTS C HL REQUIRED)
if(TARGET hdf5::all)
Expand Down

0 comments on commit bcb89e7

Please sign in to comment.