-
Atkins, Charles Vernon authored
Use a 2-pass approach to generate ADIOS2.config. The first pass generates the configurable options in the header and the second pass configures them. This allows for consistency in the options used and thier ordering with respect to where they're used elsewhere.
Atkins, Charles Vernon authoredUse a 2-pass approach to generate ADIOS2.config. The first pass generates the configurable options in the header and the second pass configures them. This allows for consistency in the options used and thier ordering with respect to where they're used elsewhere.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
ADIOSFunctions.cmake 6.60 KiB
#------------------------------------------------------------------------------#
# Distributed under the OSI-approved Apache License, Version 2.0. See
# accompanying file Copyright.txt for details.
#------------------------------------------------------------------------------#
function(adios_option name description default)
set(ADIOS2_USE_${name} ${default} CACHE STRING "${description}")
set_property(CACHE ADIOS2_USE_${name} PROPERTY
STRINGS "ON;TRUE;AUTO;OFF;FALSE"
)
endfunction()
function(message_pad msg out_len out_msg)
string(LENGTH "${msg}" msg_len)
if(NOT (msg_len LESS out_len))
set(${out_msg} "${msg}" PARENT_SCOPE)
else()
math(EXPR pad_len "${out_len} - ${msg_len}")
string(RANDOM LENGTH ${pad_len} pad)
string(REGEX REPLACE "." " " pad "${pad}")
set(${out_msg} "${msg}${pad}" PARENT_SCOPE)
endif()
endfunction()
function(python_add_test)
set(options)
set(oneValueArgs
NAME
)
# EXEC_WRAPPER: Any extra arguments to pass on the command line before test case
# SCRIPT: Script name and corresponding comand line inputs
set(multiValueArgs EXEC_WRAPPER SCRIPT)
cmake_parse_arguments(ARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" "${ARGN}")
add_test(NAME ${ARGS_NAME}
COMMAND ${ARGS_EXEC_WRAPPER} ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/${ARGS_SCRIPT}
)
set_property(TEST ${ARGS_NAME} PROPERTY
ENVIRONMENT "PYTHONPATH=${ADIOS2_BINARY_DIR}/${CMAKE_INSTALL_PYTHONDIR}:$ENV{PYTHONPATH}"
)
endfunction()
function(GenerateADIOSHeaderConfig)
set(ADIOS2_CONFIG_DEFINES)
foreach(OPT IN LISTS ARGN)
string(TOUPPER ${OPT} OPT_UPPER)
string(APPEND ADIOS2_CONFIG_DEFINES "
/* CMake Option: ADIOS_USE_${OPT}=OFF */
#cmakedefine ADIOS2_HAVE_${OPT_UPPER}
")
if(ADIOS2_HAVE_${OPT})
set(ADIOS2_HAVE_${OPT_UPPER} 1)
else()
set(ADIOS2_HAVE_${OPT_UPPER})
endif()
endforeach()
configure_file(
${ADIOS2_SOURCE_DIR}/source/adios2/ADIOSConfig.h.in
${ADIOS2_BINARY_DIR}/source/adios2/ADIOSConfig.h.in
)
configure_file(
${ADIOS2_BINARY_DIR}/source/adios2/ADIOSConfig.h.in
${ADIOS2_BINARY_DIR}/source/adios2/ADIOSConfig.h
)
endfunction()
macro(__adios2_list_cleanup_for_bash var)
if(${var})
list(REMOVE_DUPLICATES ${var})
endif()
string(REPLACE ";" " " ${var} "${${var}}")
endmacro()
function(__adios2_list_make_link_args var)
set(prefixes)
foreach(lib IN LISTS ${var})
if(lib MATCHES "^/")
get_filename_component(lib_dir "${lib}" DIRECTORY)
list(APPEND prefixes "${lib_dir}")
endif()
endforeach()
set(var_new)
foreach(prefix IN LISTS prefixes)
list(APPEND var_new "-L${prefix}")
endforeach()
foreach(lib IN LISTS ${var})
if(lib MATCHES "^/.*/?(${CMAKE_SHARED_LIBRARY_PREFIX}|${CMAKE_STATIC_LIBRARY_PREFIX})(.*)(${CMAKE_SHARED_LIBRARY_SUFFIX}|${CMAKE_STATIC_LIBRARY_SUFFIX})")
list(APPEND var_new "-l${CMAKE_MATCH_2}")
else()
list(APPEND var_new "${lib}")
endif()
endforeach()
set(${var} ${var_new} PARENT_SCOPE)
endfunction()
function(GenerateADIOSPackageConfig)
include(CMakePackageConfigHelpers)
# Build interface configs
write_basic_package_version_file(
${ADIOS2_BINARY_DIR}/ADIOS2ConfigVersion.cmake
COMPATIBILITY AnyNewerVersion
)
export(EXPORT adios2Exports
FILE ${ADIOS2_BINARY_DIR}/ADIOS2Targets.cmake
NAMESPACE adios2::
)
configure_file(
${ADIOS2_SOURCE_DIR}/cmake/ADIOS2ConfigCommon.cmake.in
${ADIOS2_BINARY_DIR}/ADIOS2ConfigCommon.cmake
@ONLY
)
configure_file(
${ADIOS2_SOURCE_DIR}/cmake/ADIOS2Config.cmake.in
${ADIOS2_BINARY_DIR}/ADIOS2Config.cmake
@ONLY
)
# Install interface configs
install(
FILES
${ADIOS2_BINARY_DIR}/ADIOS2ConfigVersion.cmake
${ADIOS2_BINARY_DIR}/ADIOS2ConfigCommon.cmake
DESTINATION ${CMAKE_INSTALL_CMAKEDIR}
)
install(EXPORT adios2Exports
FILE ADIOS2Targets.cmake
NAMESPACE adios2::
DESTINATION ${CMAKE_INSTALL_CMAKEDIR}
)
configure_file(
${ADIOS2_SOURCE_DIR}/cmake/ADIOS2ConfigInstall.cmake.in
${ADIOS2_BINARY_DIR}/ADIOS2ConfigInstall.cmake
@ONLY
)
install(FILES ${ADIOS2_BINARY_DIR}/ADIOS2ConfigInstall.cmake
RENAME ADIOS2Config.cmake
DESTINATION ${CMAKE_INSTALL_CMAKEDIR}
)
# Install helper find modules if needed
# Also build flags needed for non-cmake config generation
set(ADIOS2_CXX_LIBS ${CMAKE_THREAD_LIBS_INIT})
set(ADIOS2_CXX_OPTS ${CMAKE_CXX11_EXTENSION_COMPILE_OPTION})
set(ADIOS2_CXX_DEFS)
set(ADIOS2_CXX_INCS)
if(ADIOS2_HAVE_MPI)
list(APPEND ADIOS2_CXX_LIBS ${MPI_C_LIBRARIES})
list(APPEND ADIOS2_CXX_INCS ${MPI_C_INCLUDE_PATH})
endif()
if(NOT BUILD_SHARED_LIBS)
if(ADIOS2_HAVE_DataMan)
list(APPEND ADIOS2_CXX_LIBS -ldataman)
endif()
if(ADIOS2_HAVE_BZip2)
install(FILES cmake/FindBZip2.cmake
DESTINATION ${CMAKE_INSTALL_CMAKEDIR}/Modules
)
install(FILES cmake/upstream/FindBZip2.cmake
DESTINATION ${CMAKE_INSTALL_CMAKEDIR}/Modules/upstream
)
list(APPEND ADIOS2_CXX_LIBS ${BZIP2_LIBRARIES})
list(APPEND ADIOS2_CXX_INCS ${BZIP2_INCLUDE_DIR})
endif()
if(ADIOS2_HAVE_ZFP)
install(FILES cmake/FindZFP.cmake
DESTINATION ${CMAKE_INSTALL_CMAKEDIR}/Modules
)
list(APPEND ADIOS2_CXX_LIBS ${ZFP_LIBRARIES})
list(APPEND ADIOS2_CXX_INCS ${ZFP_INCLUDE_DIRS})
endif()
if(ADIOS2_HAVE_ZeroMQ)
install(FILES cmake/FindZeroMQ.cmake
DESTINATION ${CMAKE_INSTALL_CMAKEDIR}/Modules
)
list(APPEND ADIOS2_CXX_LIBS ${ZeroMQ_LIBRARIES})
list(APPEND ADIOS2_CXX_INCS ${ZeroMQ_INCLUDE_DIRS})
endif()
if(ADIOS2_HAVE_ADIOS1)
install(FILES cmake/FindADIOS1.cmake
DESTINATION ${CMAKE_INSTALL_CMAKEDIR}/Modules
)
list(APPEND ADIOS2_CXX_LIBS ${ADIOS1_LIBRARIES})
list(APPEND ADIOS2_CXX_INCS ${ADIOS1_INCLUDE_DIRS})
endif()
if(ADIOS2_HAVE_HDF5)
list(APPEND ADIOS2_CXX_LIBS ${HDF5_C_LIBRARIES})
if(HDF5_C_INCLUDE_DIRS)
list(APPEND ADIOS2_CXX_INCS ${HDF5_C_INCLUDE_DIRS})
else()
list(APPEND ADIOS2_CXX_INCS ${HDF5_INCLUDE_DIRS})
endif()
endif()
endif()
# Build the non-cmake config script
__adios2_list_make_link_args(ADIOS2_CXX_LIBS)
__adios2_list_cleanup_for_bash(ADIOS2_CXX_LIBS)
__adios2_list_cleanup_for_bash(ADIOS2_CXX_OPTS)
__adios2_list_cleanup_for_bash(ADIOS2_CXX_DEFS)
__adios2_list_cleanup_for_bash(ADIOS2_CXX_INCS)
configure_file(
${ADIOS2_SOURCE_DIR}/cmake/adios2-config.in
${ADIOS2_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}/adios2-config
@ONLY
)
install(PROGRAMS ${ADIOS2_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}/adios2-config
DESTINATION ${CMAKE_INSTALL_BINDIR}
)
endfunction()