@@ -29,24 +29,24 @@ if(ACTIVATE_LINTER)
2929    include (clang-tidy)
3030endif ()
3131
32- # Versionning  
33- # ===========  
32+ # Versioning  
33+ # ========== 
3434file (STRINGS  "${SPARROW_IPC_INCLUDE_DIR} /sparrow_ipc/config/sparrow_ipc_version.hpp"  sparrow_ipc_version_defines
3535    REGEX  "constexpr int SPARROW_IPC_VERSION_(MAJOR|MINOR|PATCH)" )
3636
3737foreach (ver ${sparrow_ipc_version_defines} )
38-     if (ver MATCHES  "constexpr int SPARROW_VERSION_ (MAJOR|MINOR|PATCH) = ([0-9]+);$" )
38+     if (ver MATCHES  "constexpr int SPARROW_IPC_VERSION_ (MAJOR|MINOR|PATCH) = ([0-9]+);$" )
3939        set (PROJECT_VERSION_${CMAKE_MATCH_1}  "${CMAKE_MATCH_2} "  CACHE  INTERNAL  "" )
4040    endif ()
4141endforeach ()
4242
4343set (CMAKE_PROJECT_VERSION
4444    ${PROJECT_VERSION_MAJOR} .${PROJECT_VERSION_MINOR} .${PROJECT_VERSION_PATCH} )
4545
46- message (STATUS  "Building sparrow_ipc  v${CMAKE_PROJECT_VERSION} " )
46+ message (STATUS  "Building sparrow-ipc  v${CMAKE_PROJECT_VERSION} " )
4747
4848# Binary version 
49- # See the following URL for explanations about  the binary versionning  
49+ # See the following URL for more info on  the binary versioning  
5050# https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html#Updating-version-info 
5151file (STRINGS  "${SPARROW_IPC_INCLUDE_DIR} /sparrow_ipc/config/sparrow_ipc_version.hpp"  sparrow_ipc_version_defines
5252    REGEX  "constexpr int SPARROW_IPC_BINARY_(CURRENT|REVISION|AGE)" )
@@ -60,7 +60,7 @@ endforeach()
6060set (SPARROW_IPC_BINARY_VERSION
6161    ${SPARROW_IPC_BINARY_CURRENT} .${SPARROW_IPC_BINARY_REVISION} .${SPARROW_IPC_BINARY_AGE} )
6262
63- message (STATUS  "sparrow_ipc  binary version: v${SPARROW_IPC_BINARY_VERSION} " )
63+ message (STATUS  "sparrow-ipc  binary version: v${SPARROW_IPC_BINARY_VERSION} " )
6464
6565# Build options 
6666# ============= 
@@ -101,6 +101,7 @@ set(SPARROW_IPC_HEADERS
101101    ${SPARROW_IPC_INCLUDE_DIR} /sparrow_ipc/arrow_interface/arrow_schema.hpp
102102    ${SPARROW_IPC_INCLUDE_DIR} /sparrow_ipc/arrow_interface/arrow_schema/private_data.hpp
103103    ${SPARROW_IPC_INCLUDE_DIR} /sparrow_ipc/config/config.hpp
104+     ${SPARROW_IPC_INCLUDE_DIR} /sparrow_ipc/config/sparrow_ipc_version.hpp
104105    ${SPARROW_IPC_INCLUDE_DIR} /sparrow_ipc/deserialize_variable_size_binary_array.hpp
105106    ${SPARROW_IPC_INCLUDE_DIR} /sparrow_ipc/deserialize_fixedsizebinary_array.hpp
106107    ${SPARROW_IPC_INCLUDE_DIR} /sparrow_ipc/deserialize_primitive_array.hpp
@@ -200,8 +201,26 @@ target_compile_definitions(sparrow-ipc
200201        ${SPARROW_IPC_COMPILE_DEFINITIONS} )
201202
202203if (UNIX )
204+     # CMake does not compute the version number of so files as libtool 
205+     # does on Linux. Strictly speaking, we should exclude FreeBSD and 
206+     # Apple from this, but that would require having different version 
207+     # numbers depending on the platform. We prefer to follow the 
208+     # libtool pattern everywhere. 
209+     math (EXPR  SPARROW_IPC_BINARY_COMPATIBLE "${SPARROW_IPC_BINARY_CURRENT}  - ${SPARROW_IPC_BINARY_AGE} " )
210+     set_target_properties (
211+         sparrow-ipc
212+         PROPERTIES
213+         VERSION  "${SPARROW_IPC_BINARY_COMPATIBLE} .${SPARROW_IPC_BINARY_REVISION} .${SPARROW_IPC_BINARY_AGE} " 
214+         SOVERSION  ${SPARROW_IPC_BINARY_COMPATIBLE} 
215+     )
203216    target_compile_options (sparrow-ipc PRIVATE  "-fvisibility=hidden" )
204217else ()
218+     set_target_properties (
219+         sparrow-ipc
220+         PROPERTIES
221+         VERSION  ${SPARROW_IPC_BINARY_VERSION} 
222+         SOVERSION  ${SPARROW_IPC_BINARY_CURRENT} 
223+     )
205224    target_compile_definitions (sparrow-ipc PRIVATE  SPARROW_IPC_EXPORTS)
206225endif ()
207226
@@ -235,3 +254,60 @@ if(SPARROW_IPC_BUILD_DOCS)
235254    message (STATUS  "📚 Create docs targets" )
236255    add_subdirectory (docs)
237256endif ()
257+ 
258+ # Installation 
259+ # ============ 
260+ include (GNUInstallDirs)
261+ include (CMakePackageConfigHelpers)
262+ 
263+ # Install CMake configuration files 
264+ set (SPARROW_IPC_CMAKECONFIG_INSTALL_DIR "${CMAKE_INSTALL_DATADIR} /cmake/${PROJECT_NAME} "  CACHE 
265+     STRING  "install path for sparrow-ipcConfig.cmake" )
266+ 
267+ configure_package_config_file(cmake/${PROJECT_NAME} Config.cmake.in
268+     "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} Config.cmake" 
269+     INSTALL_DESTINATION ${SPARROW_IPC_CMAKECONFIG_INSTALL_DIR} )
270+ 
271+ write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} ConfigVersion.cmake
272+     VERSION  ${CMAKE_PROJECT_VERSION} 
273+     COMPATIBILITY AnyNewerVersion)
274+ 
275+ install (FILES 
276+     ${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} Config.cmake
277+     ${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} ConfigVersion.cmake
278+     DESTINATION  ${SPARROW_IPC_CMAKECONFIG_INSTALL_DIR} )
279+ 
280+ # Install target 
281+ set (SPARROW_IPC_EXPORTED_TARGETS sparrow-ipc)
282+ if  (TARGET  flatbuffers)
283+     get_target_property (is_imported flatbuffers IMPORTED )
284+     if (NOT  is_imported)
285+         # This means `flatbuffers` was fetched using FetchContent 
286+         # We need to export `flatbuffers` target explicitly 
287+         list (APPEND  SPARROW_IPC_EXPORTED_TARGETS flatbuffers)
288+         if (TARGET  ProjectConfig)
289+             # This is an internal target from the flatbuffers build system 
290+             # that also needs to be exported 
291+             list (APPEND  SPARROW_IPC_EXPORTED_TARGETS ProjectConfig)
292+         endif ()
293+     endif ()
294+ endif ()
295+ 
296+ install (TARGETS ${SPARROW_IPC_EXPORTED_TARGETS} 
297+     EXPORT  ${PROJECT_NAME} -targets)
298+ 
299+ install (EXPORT ${PROJECT_NAME} -targets
300+     FILE  ${PROJECT_NAME} Targets.cmake
301+     NAMESPACE sparrow-ipc::
302+     DESTINATION  ${SPARROW_IPC_CMAKECONFIG_INSTALL_DIR} )
303+ 
304+ # Makes the project importable from the build directory 
305+ export (EXPORT ${PROJECT_NAME} -targets
306+     FILE  "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} Targets.cmake" 
307+     NAMESPACE sparrow-ipc::)
308+ 
309+ # Install headers 
310+ install (DIRECTORY  ${SPARROW_IPC_INCLUDE_DIR} 
311+     DESTINATION  ${CMAKE_INSTALL_INCLUDEDIR} 
312+     PATTERN ".clang-*"  EXCLUDE 
313+     PATTERN "README.md"  EXCLUDE )
0 commit comments