File 0001-cmake-set-correct-soname.patch of Package adios2
From 68c68d27da3ad59083af2b596f1e3aa5491b3cbc Mon Sep 17 00:00:00 2001
From: Vicente Adolfo Bolea Sanchez <vicente.bolea@kitware.com>
Date: Tue, 11 Apr 2023 13:22:10 -0400
Subject: [PATCH] cmake: set correct soname
---
bindings/C/CMakeLists.txt | 2 +-
bindings/CXX11/CMakeLists.txt | 2 +-
bindings/Fortran/CMakeLists.txt | 4 ++--
cmake/ADIOSFunctions.cmake | 19 +++++++++++++++++++
source/adios2/CMakeLists.txt | 2 +-
source/adios2/toolkit/sst/CMakeLists.txt | 2 +-
thirdparty/EVPath/CMakeLists.txt | 1 +
thirdparty/atl/CMakeLists.txt | 1 +
thirdparty/dill/CMakeLists.txt | 1 +
thirdparty/enet/CMakeLists.txt | 1 +
thirdparty/ffs/CMakeLists.txt | 1 +
thirdparty/perfstubs/perfstubs/CMakeLists.txt | 6 +++++-
12 files changed, 35 insertions(+), 7 deletions(-)
diff --git a/bindings/C/CMakeLists.txt b/bindings/C/CMakeLists.txt
index 24cf7102e..52eba4f1e 100644
--- a/bindings/C/CMakeLists.txt
+++ b/bindings/C/CMakeLists.txt
@@ -46,7 +46,7 @@ set_target_properties(
adios2_c ${maybe_adios2_c_mpi}
PROPERTIES
VERSION ${ADIOS2_LIBRARY_VERSION}
- SOVERSION ${ADIOS2_VERSION_MAJOR}
+ SOVERSION ${ADIOS2_LIBRARY_SOVERSION}
)
install(TARGETS adios2_c ${maybe_adios2_c_mpi} EXPORT adios2CExports
diff --git a/bindings/CXX11/CMakeLists.txt b/bindings/CXX11/CMakeLists.txt
index 8eef3b6a5..2be90fb64 100644
--- a/bindings/CXX11/CMakeLists.txt
+++ b/bindings/CXX11/CMakeLists.txt
@@ -58,7 +58,7 @@ set_target_properties(
adios2_cxx11 ${maybe_adios2_cxx11_mpi}
PROPERTIES
VERSION ${ADIOS2_LIBRARY_VERSION}
- SOVERSION ${ADIOS2_VERSION_MAJOR}
+ SOVERSION ${ADIOS2_LIBRARY_SOVERSION}
)
install(TARGETS adios2_cxx11 ${maybe_adios2_cxx11_mpi} EXPORT adios2CXX11Exports
diff --git a/bindings/Fortran/CMakeLists.txt b/bindings/Fortran/CMakeLists.txt
index a9fd9b825..2e0cb2c1b 100644
--- a/bindings/Fortran/CMakeLists.txt
+++ b/bindings/Fortran/CMakeLists.txt
@@ -78,7 +78,7 @@ endif()
# Set library version information
set_target_properties(adios2_fortran PROPERTIES
VERSION ${ADIOS2_LIBRARY_VERSION}
- SOVERSION ${ADIOS2_VERSION_MAJOR}
+ SOVERSION ${ADIOS2_LIBRARY_SOVERSION}
)
add_library(adios2::fortran ALIAS adios2_fortran)
@@ -109,7 +109,7 @@ if(ADIOS2_HAVE_MPI)
target_compile_definitions(adios2_fortran_mpi PRIVATE "$<$<COMPILE_LANGUAGE:Fortran>:ADIOS2_HAVE_FORTRAN_SUBMODULES;ADIOS2_HAVE_MPI_F>")
set_target_properties(adios2_fortran_mpi PROPERTIES
VERSION ${ADIOS2_LIBRARY_VERSION}
- SOVERSION ${ADIOS2_VERSION_MAJOR}
+ SOVERSION ${ADIOS2_LIBRARY_SOVERSION}
)
set_property(TARGET adios2_fortran_mpi PROPERTY OUTPUT_NAME adios2${ADIOS2_LIBRARY_SUFFIX}_fortran_mpi)
else()
diff --git a/cmake/ADIOSFunctions.cmake b/cmake/ADIOSFunctions.cmake
index 6e5332cc5..36257e34d 100644
--- a/cmake/ADIOSFunctions.cmake
+++ b/cmake/ADIOSFunctions.cmake
@@ -38,6 +38,9 @@ function(setup_version BASE)
endif()
set(ADIOS2_LIBRARY_VERSION ${BASE} PARENT_SCOPE)
+
+ string(REGEX MATCH "^([0-9]+\.[0-9]+)" ignore ${BASE})
+ set(ADIOS2_LIBRARY_SOVERSION ${CMAKE_MATCH_1} PARENT_SCOPE)
endfunction()
function(adios_option name description default)
@@ -224,3 +227,19 @@ program main
end program
]] ${var} SRC_EXT F90)
endmacro()
+
+# Set VERSION/SOVERSION of every shared library target in the given directory
+# to be the same as the ADIOS VERSION/SOVERSION. This is important for the
+# third-party libraries bundled with ADIOS2.
+function(setup_libversion_dir dir)
+ get_directory_property(DIR_TARGETS DIRECTORY "${dir}" BUILDSYSTEM_TARGETS)
+ foreach(target ${DIR_TARGETS})
+ get_target_property(type ${target} TYPE)
+ if (${type} STREQUAL "SHARED_LIBRARY")
+ set_target_properties(${target} PROPERTIES
+ VERSION ${ADIOS2_LIBRARY_VERSION}
+ SOVERSION ${ADIOS2_LIBRARY_SOVERSION}
+ )
+ endif()
+ endforeach()
+endfunction()
diff --git a/source/adios2/CMakeLists.txt b/source/adios2/CMakeLists.txt
index 9cf7da7dc..f0f9ade5e 100644
--- a/source/adios2/CMakeLists.txt
+++ b/source/adios2/CMakeLists.txt
@@ -408,7 +408,7 @@ set_target_properties(
adios2_core ${maybe_adios2_core_mpi}
PROPERTIES
VERSION ${ADIOS2_LIBRARY_VERSION}
- SOVERSION ${ADIOS2_VERSION_MAJOR}
+ SOVERSION ${ADIOS2_LIBRARY_SOVERSION}
)
install(FILES common/ADIOSMacros.h common/ADIOSTypes.h common/ADIOSTypes.inl
diff --git a/source/adios2/toolkit/sst/CMakeLists.txt b/source/adios2/toolkit/sst/CMakeLists.txt
index 5f6a1875e..070c8f41a 100644
--- a/source/adios2/toolkit/sst/CMakeLists.txt
+++ b/source/adios2/toolkit/sst/CMakeLists.txt
@@ -54,7 +54,7 @@ endif()
set_target_properties(sst PROPERTIES
OUTPUT_NAME adios2${ADIOS2_LIBRARY_SUFFIX}_sst
VERSION ${ADIOS2_LIBRARY_VERSION}
- SOVERSION ${ADIOS2_VERSION_MAJOR}
+ SOVERSION ${ADIOS2_LIBRARY_SOVERSION}
)
#------------------------------------------------------------------------------#
diff --git a/thirdparty/EVPath/CMakeLists.txt b/thirdparty/EVPath/CMakeLists.txt
index fbf8369ce..27fb73c74 100644
--- a/thirdparty/EVPath/CMakeLists.txt
+++ b/thirdparty/EVPath/CMakeLists.txt
@@ -18,5 +18,6 @@ set(EVPATH_HEADER_COMPONENT adios2_evpath-development)
add_subdirectory(EVPath)
set(EVPath_DIR ${CMAKE_CURRENT_BINARY_DIR}/EVPath CACHE INTERNAL "")
+setup_libversion_dir(EVPath)
message_end_thirdparty()
diff --git a/thirdparty/atl/CMakeLists.txt b/thirdparty/atl/CMakeLists.txt
index b84d29550..e15be092d 100644
--- a/thirdparty/atl/CMakeLists.txt
+++ b/thirdparty/atl/CMakeLists.txt
@@ -15,5 +15,6 @@ set(ATL_HEADER_COMPONENT adios2_atl-development)
add_subdirectory(atl)
set(atl_DIR ${CMAKE_CURRENT_BINARY_DIR}/atl CACHE INTERNAL "")
+setup_libversion_dir(atl)
message_end_thirdparty()
diff --git a/thirdparty/dill/CMakeLists.txt b/thirdparty/dill/CMakeLists.txt
index 7f649a0af..dd89f46bb 100644
--- a/thirdparty/dill/CMakeLists.txt
+++ b/thirdparty/dill/CMakeLists.txt
@@ -14,5 +14,6 @@ set(DILL_HEADER_COMPONENT adios2_dill-development)
add_subdirectory(dill)
set(dill_DIR ${CMAKE_CURRENT_BINARY_DIR}/dill CACHE INTERNAL "")
+setup_libversion_dir(dill)
message_end_thirdparty()
diff --git a/thirdparty/enet/CMakeLists.txt b/thirdparty/enet/CMakeLists.txt
index 8b6a04cb1..5034e2e53 100644
--- a/thirdparty/enet/CMakeLists.txt
+++ b/thirdparty/enet/CMakeLists.txt
@@ -13,5 +13,6 @@ set(BUILD_DOCS OFF)
add_subdirectory(enet)
set(enet_DIR ${CMAKE_CURRENT_BINARY_DIR}/enet CACHE INTERNAL "")
+setup_libversion_dir(enet)
message_end_thirdparty()
diff --git a/thirdparty/ffs/CMakeLists.txt b/thirdparty/ffs/CMakeLists.txt
index 0a36a8d8b..e47512f58 100644
--- a/thirdparty/ffs/CMakeLists.txt
+++ b/thirdparty/ffs/CMakeLists.txt
@@ -18,5 +18,6 @@ set(FFS_HEADER_COMPONENT adios2_ffs-development)
add_subdirectory(ffs)
set(ffs_DIR ${CMAKE_CURRENT_BINARY_DIR}/ffs CACHE INTERNAL "")
+setup_libversion_dir(ffs)
message_end_thirdparty()
diff --git a/thirdparty/perfstubs/perfstubs/CMakeLists.txt b/thirdparty/perfstubs/perfstubs/CMakeLists.txt
index 734a8c89d..3276a7c06 100644
--- a/thirdparty/perfstubs/perfstubs/CMakeLists.txt
+++ b/thirdparty/perfstubs/perfstubs/CMakeLists.txt
@@ -5,7 +5,11 @@ configure_file(
add_library(perfstubs perfstubs_api/timer.c)
-set_property(TARGET perfstubs PROPERTY OUTPUT_NAME adios2${ADIOS2_LIBRARY_SUFFIX}_perfstubs)
+set_target_properties(perfstubs PROPERTIES
+ OUTPUT_NAME adios2${ADIOS2_LIBRARY_SUFFIX}_perfstubs
+ VERSION ${ADIOS2_LIBRARY_VERSION}
+ SOVERSION ${ADIOS2_LIBRARY_SOVERSION}
+)
target_link_libraries(perfstubs INTERFACE dl m)
--
2.35.3