Newer
Older
#------------------------------------------------------------------------------#
# 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()
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
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()