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 name script)
add_test(NAME ${name}
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/${script} ${ARGN}
)
set_property(TEST ${name} PROPERTY
ENVIRONMENT "PYTHONPATH=${ADIOS2_BINARY_DIR}/${CMAKE_INSTALL_PYTHONDIR}:$ENV{PYTHONPATH}"
)
endfunction()
function(GenerateADIOSHeaderConfig)
foreach(OPT IN LISTS ARGN)
string(TOUPPER ${OPT} 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
)
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()
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
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
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()