diff --git a/CMakeLists.txt b/CMakeLists.txt index b5b585e0d..d61964990 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,3 +1,4 @@ +# Note: we need >= v3.23 in order to make use of file sets for header installation cmake_minimum_required(VERSION 3.23 FATAL_ERROR) set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") @@ -103,10 +104,7 @@ set(SOCI_DEBUG_POSTFIX "${CMAKE_DEBUG_POSTFIX}" CACHE STRING "Specifies suffix f include(soci_compiler_options) - -include(GNUInstallDirs) - -set(SOCI_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/soci-${PROJECT_VERSION}") +include(soci_install_dirs) add_subdirectory(src) diff --git a/cmake/soci_install_dirs.cmake b/cmake/soci_install_dirs.cmake new file mode 100644 index 000000000..95ba35d8b --- /dev/null +++ b/cmake/soci_install_dirs.cmake @@ -0,0 +1,15 @@ +include(GNUInstallDirs) + +set(SOCI_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/soci-${PROJECT_VERSION}" + CACHE FILEPATH "Directory into which cmake related files (e.g. SOCIConfig.cmake) are installed") + +set(SOCI_INSTALL_BINDIR "${CMAKE_INSTALL_BINDIR}" + CACHE FILEPATH "Directory into which to install any SOCI executables") + +set(SOCI_INSTALL_LIBDIR "${CMAKE_INSTALL_LIBDIR}/soci" + CACHE FILEPATH "Directory into which any SOCI libraries (except DLLs on Windows) are installed") + +# Note that our headers are installed via a file set that already has the headers +# in a dedicated "soci" subdirectory (which will be part of the installation) +set(SOCI_INSTALL_INCLUDEDIR "${CMAKE_INSTALL_INCLUDEDIR}" + CACHE FILEPATH "Directory into which the 'soci' directory with all SOCI header files is installed") diff --git a/src/backends/db2/CMakeLists.txt b/src/backends/db2/CMakeLists.txt index d05db8e13..08c857834 100644 --- a/src/backends/db2/CMakeLists.txt +++ b/src/backends/db2/CMakeLists.txt @@ -59,14 +59,14 @@ target_link_libraries(soci_interface INTERFACE SOCI::DB2) install( TARGETS soci_db2 EXPORT SOCIDB2Targets - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}/soci" + RUNTIME DESTINATION "${SOCI_INSTALL_BINDIR}" COMPONENT soci_runtime - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}/soci" + LIBRARY DESTINATION "${SOCI_INSTALL_LIBDIR}" COMPONENT soci_runtime NAMELINK_COMPONENT soci_development - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}/soci" + ARCHIVE DESTINATION "${SOCI_INSTALL_LIBDIR}" COMPONENT soci_development - FILE_SET headers DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/soci" + FILE_SET headers DESTINATION "${SOCI_INSTALL_INCLUDEDIR}" COMPONENT soci_development ) # Generate and install a targets file diff --git a/src/backends/empty/CMakeLists.txt b/src/backends/empty/CMakeLists.txt index 1a11af1d1..473b35402 100644 --- a/src/backends/empty/CMakeLists.txt +++ b/src/backends/empty/CMakeLists.txt @@ -39,14 +39,14 @@ target_link_libraries(soci_interface INTERFACE SOCI::Empty) install( TARGETS soci_empty EXPORT SOCIEmptyTargets - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}/soci" + RUNTIME DESTINATION "${SOCI_INSTALL_BINDIR}" COMPONENT soci_runtime - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}/soci" + LIBRARY DESTINATION "${SOCI_INSTALL_LIBDIR}" COMPONENT soci_runtime NAMELINK_COMPONENT soci_development - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}/soci" + ARCHIVE DESTINATION "${SOCI_INSTALL_LIBDIR}" COMPONENT soci_development - FILE_SET headers DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/soci" + FILE_SET headers DESTINATION "${SOCI_INSTALL_INCLUDEDIR}" COMPONENT soci_development ) # Generate and install a targets file diff --git a/src/backends/firebird/CMakeLists.txt b/src/backends/firebird/CMakeLists.txt index e22ea74e4..a069e9b2f 100644 --- a/src/backends/firebird/CMakeLists.txt +++ b/src/backends/firebird/CMakeLists.txt @@ -66,14 +66,14 @@ target_link_libraries(soci_interface INTERFACE SOCI::Firebird) install( TARGETS soci_firebird EXPORT SOCIFirebirdTargets - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}/soci" + RUNTIME DESTINATION "${SOCI_INSTALL_BINDIR}" COMPONENT soci_runtime - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}/soci" + LIBRARY DESTINATION "${SOCI_INSTALL_LIBDIR}" COMPONENT soci_runtime NAMELINK_COMPONENT soci_development - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}/soci" + ARCHIVE DESTINATION "${SOCI_INSTALL_LIBDIR}" COMPONENT soci_development - FILE_SET headers DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/soci" + FILE_SET headers DESTINATION "${SOCI_INSTALL_INCLUDEDIR}" COMPONENT soci_development ) # Generate and install a targets file diff --git a/src/backends/mysql/CMakeLists.txt b/src/backends/mysql/CMakeLists.txt index 865757ea8..b06c4b88a 100644 --- a/src/backends/mysql/CMakeLists.txt +++ b/src/backends/mysql/CMakeLists.txt @@ -61,14 +61,14 @@ target_link_libraries(soci_interface INTERFACE SOCI::MySQL) install( TARGETS soci_mysql EXPORT SOCIMySQLTargets - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}/soci" + RUNTIME DESTINATION "${SOCI_INSTALL_BINDIR}" COMPONENT soci_runtime - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}/soci" + LIBRARY DESTINATION "${SOCI_INSTALL_LIBDIR}" COMPONENT soci_runtime NAMELINK_COMPONENT soci_development - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}/soci" + ARCHIVE DESTINATION "${SOCI_INSTALL_LIBDIR}" COMPONENT soci_development - FILE_SET headers DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/soci" + FILE_SET headers DESTINATION "${SOCI_INSTALL_INCLUDEDIR}" COMPONENT soci_development ) # Generate and install a targets file diff --git a/src/backends/odbc/CMakeLists.txt b/src/backends/odbc/CMakeLists.txt index be8873518..a02c08274 100644 --- a/src/backends/odbc/CMakeLists.txt +++ b/src/backends/odbc/CMakeLists.txt @@ -60,14 +60,14 @@ target_link_libraries(soci_interface INTERFACE SOCI::ODBC) install( TARGETS soci_odbc EXPORT SOCIODBCTargets - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}/soci" + RUNTIME DESTINATION "${SOCI_INSTALL_BINDIR}" COMPONENT soci_runtime - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}/soci" + LIBRARY DESTINATION "${SOCI_INSTALL_LIBDIR}" COMPONENT soci_runtime NAMELINK_COMPONENT soci_development - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}/soci" + ARCHIVE DESTINATION "${SOCI_INSTALL_LIBDIR}" COMPONENT soci_development - FILE_SET headers DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/soci" + FILE_SET headers DESTINATION "${SOCI_INSTALL_INCLUDEDIR}" COMPONENT soci_development ) # Generate and install a targets file diff --git a/src/backends/oracle/CMakeLists.txt b/src/backends/oracle/CMakeLists.txt index 4aa48571a..84b62e8f9 100644 --- a/src/backends/oracle/CMakeLists.txt +++ b/src/backends/oracle/CMakeLists.txt @@ -61,14 +61,14 @@ target_link_libraries(soci_interface INTERFACE SOCI::Oracle) install( TARGETS soci_oracle EXPORT SOCIOracleTargets - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}/soci" + RUNTIME DESTINATION "${SOCI_INSTALL_BINDIR}" COMPONENT soci_runtime - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}/soci" + LIBRARY DESTINATION "${SOCI_INSTALL_LIBDIR}" COMPONENT soci_runtime NAMELINK_COMPONENT soci_development - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}/soci" + ARCHIVE DESTINATION "${SOCI_INSTALL_LIBDIR}" COMPONENT soci_development - FILE_SET headers DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/soci" + FILE_SET headers DESTINATION "${SOCI_INSTALL_INCLUDEDIR}" COMPONENT soci_development ) # Generate and install a targets file diff --git a/src/backends/postgresql/CMakeLists.txt b/src/backends/postgresql/CMakeLists.txt index 7a2e1cdfd..40f3e84bd 100644 --- a/src/backends/postgresql/CMakeLists.txt +++ b/src/backends/postgresql/CMakeLists.txt @@ -71,14 +71,14 @@ target_link_libraries(soci_interface INTERFACE SOCI::PostgreSQL) install( TARGETS soci_postgresql EXPORT SOCIPostgreSQLTargets - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}/soci" + RUNTIME DESTINATION "${SOCI_INSTALL_BINDIR}" COMPONENT soci_runtime - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}/soci" + LIBRARY DESTINATION "${SOCI_INSTALL_LIBDIR}" COMPONENT soci_runtime NAMELINK_COMPONENT soci_development - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}/soci" + ARCHIVE DESTINATION "${SOCI_INSTALL_LIBDIR}" COMPONENT soci_development - FILE_SET headers DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/soci" + FILE_SET headers DESTINATION "${SOCI_INSTALL_INCLUDEDIR}" COMPONENT soci_development ) # Generate and install a targets file diff --git a/src/backends/sqlite3/CMakeLists.txt b/src/backends/sqlite3/CMakeLists.txt index 9ee81a024..520e17815 100644 --- a/src/backends/sqlite3/CMakeLists.txt +++ b/src/backends/sqlite3/CMakeLists.txt @@ -60,14 +60,14 @@ target_link_libraries(soci_interface INTERFACE SOCI::SQLite3) install( TARGETS soci_sqlite3 EXPORT SOCISQLite3Targets - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}/soci" + RUNTIME DESTINATION "${SOCI_INSTALL_BINDIR}" COMPONENT soci_runtime - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}/soci" + LIBRARY DESTINATION "${SOCI_INSTALL_LIBDIR}" COMPONENT soci_runtime NAMELINK_COMPONENT soci_development - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}/soci" + ARCHIVE DESTINATION "${SOCI_INSTALL_LIBDIR}" COMPONENT soci_development - FILE_SET headers DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/soci" + FILE_SET headers DESTINATION "${SOCI_INSTALL_INCLUDEDIR}" COMPONENT soci_development ) # Generate and install a targets file diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index bb1a21015..46c389c31 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -159,14 +159,14 @@ endif() install( TARGETS soci_core EXPORT SOCICoreTargets - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}/soci" + RUNTIME DESTINATION "${SOCI_INSTALL_BINDIR}" COMPONENT soci_runtime - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}/soci" + LIBRARY DESTINATION "${SOCI_INSTALL_LIBDIR}" COMPONENT soci_runtime NAMELINK_COMPONENT soci_development - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}/soci" + ARCHIVE DESTINATION "${SOCI_INSTALL_LIBDIR}" COMPONENT soci_development - FILE_SET headers DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/soci" + FILE_SET headers DESTINATION "${SOCI_INSTALL_INCLUDEDIR}" COMPONENT soci_development ) # Generate and install a targets file