1
0
mirror of https://github.com/libssh2/libssh2.git synced 2025-10-26 02:17:35 +03:00

cmake: add LIBSSH2_DISABLE_INSTALL option

To disable all installation targets.

Closes #1638
This commit is contained in:
trustytrojan
2025-08-07 08:35:20 -04:00
committed by Viktor Szakats
parent 0ec6b3e842
commit dd50a41152
3 changed files with 229 additions and 222 deletions

View File

@@ -172,12 +172,15 @@ if(NOT LIBSSH2_VERSION OR
message(FATAL_ERROR "Unable to parse version from ${PROJECT_SOURCE_DIR}/include/libssh2.h") message(FATAL_ERROR "Unable to parse version from ${PROJECT_SOURCE_DIR}/include/libssh2.h")
endif() endif()
include(GNUInstallDirs) option(LIBSSH2_DISABLE_INSTALL "Disable installation targets" OFF)
install( if(NOT LIBSSH2_DISABLE_INSTALL)
include(GNUInstallDirs)
install(
FILES FILES
COPYING NEWS README RELEASE-NOTES COPYING NEWS README RELEASE-NOTES
docs/AUTHORS docs/BINDINGS.md docs/HACKING.md docs/AUTHORS docs/BINDINGS.md docs/HACKING.md
DESTINATION ${CMAKE_INSTALL_DOCDIR}) DESTINATION ${CMAKE_INSTALL_DOCDIR})
endif()
include(PickyWarnings) include(PickyWarnings)

View File

@@ -40,5 +40,7 @@ libssh2_transform_makefile_inc("Makefile.am" "${CMAKE_CURRENT_BINARY_DIR}/Makefi
# Get dist_man_MANS variable # Get dist_man_MANS variable
include("${CMAKE_CURRENT_BINARY_DIR}/Makefile.am.cmake") include("${CMAKE_CURRENT_BINARY_DIR}/Makefile.am.cmake")
include(GNUInstallDirs) if(NOT LIBSSH2_DISABLE_INSTALL)
install(FILES ${dist_man_MANS} DESTINATION "${CMAKE_INSTALL_MANDIR}/man3") include(GNUInstallDirs)
install(FILES ${dist_man_MANS} DESTINATION "${CMAKE_INSTALL_MANDIR}/man3")
endif()

View File

@@ -177,20 +177,21 @@ add_library(${LIB_NAME} ALIAS ${LIB_SELECTED})
## Installation ## Installation
install(FILES if(NOT LIBSSH2_DISABLE_INSTALL)
install(FILES
"${PROJECT_SOURCE_DIR}/include/libssh2.h" "${PROJECT_SOURCE_DIR}/include/libssh2.h"
"${PROJECT_SOURCE_DIR}/include/libssh2_publickey.h" "${PROJECT_SOURCE_DIR}/include/libssh2_publickey.h"
"${PROJECT_SOURCE_DIR}/include/libssh2_sftp.h" "${PROJECT_SOURCE_DIR}/include/libssh2_sftp.h"
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
if(BUILD_STATIC_LIBS) if(BUILD_STATIC_LIBS)
install(TARGETS ${LIB_STATIC} install(TARGETS ${LIB_STATIC}
EXPORT "${PROJECT_NAME}-targets" EXPORT "${PROJECT_NAME}-targets"
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
endif() endif()
if(BUILD_SHARED_LIBS) if(BUILD_SHARED_LIBS)
install(TARGETS ${LIB_SHARED} install(TARGETS ${LIB_SHARED}
EXPORT "${PROJECT_NAME}-targets" EXPORT "${PROJECT_NAME}-targets"
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
@@ -198,26 +199,26 @@ if(BUILD_SHARED_LIBS)
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
list(APPEND __runtime_dependencies $<TARGET_FILE:${LIB_SHARED}>) list(APPEND __runtime_dependencies $<TARGET_FILE:${LIB_SHARED}>)
endif() endif()
set(_runtime_dependencies ${__runtime_dependencies} CACHE INTERNAL set(_runtime_dependencies ${__runtime_dependencies} CACHE INTERNAL
"Files that must be in the same directory as the executables at runtime.") "Files that must be in the same directory as the executables at runtime.")
# Package config # Package config
## During package installation, install libssh2-targets.cmake ## During package installation, install libssh2-targets.cmake
install(EXPORT "${PROJECT_NAME}-targets" install(EXPORT "${PROJECT_NAME}-targets"
NAMESPACE "${PROJECT_NAME}::" NAMESPACE "${PROJECT_NAME}::"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}") DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}")
## During build, register directly from build tree ## During build, register directly from build tree
# create libssh2-targets.cmake # create libssh2-targets.cmake
export(TARGETS ${_libssh2_export} NAMESPACE "${PROJECT_NAME}::" FILE "${PROJECT_NAME}-targets.cmake") export(TARGETS ${_libssh2_export} NAMESPACE "${PROJECT_NAME}::" FILE "${PROJECT_NAME}-targets.cmake")
export(PACKAGE ${PROJECT_NAME}) # register it export(PACKAGE ${PROJECT_NAME}) # register it
# Generate libssh2-config.cmake into build tree and install it with dependencies # Generate libssh2-config.cmake into build tree and install it with dependencies
configure_file("${PROJECT_SOURCE_DIR}/cmake/libssh2-config.cmake.in" "${PROJECT_NAME}-config.cmake" @ONLY) configure_file("${PROJECT_SOURCE_DIR}/cmake/libssh2-config.cmake.in" "${PROJECT_NAME}-config.cmake" @ONLY)
install( install(
FILES FILES
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake" "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
"${PROJECT_SOURCE_DIR}/cmake/FindLibgcrypt.cmake" "${PROJECT_SOURCE_DIR}/cmake/FindLibgcrypt.cmake"
@@ -225,14 +226,14 @@ install(
"${PROJECT_SOURCE_DIR}/cmake/FindWolfSSL.cmake" "${PROJECT_SOURCE_DIR}/cmake/FindWolfSSL.cmake"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}") DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}")
# Calculate variables for pkg-config # Calculate variables for pkg-config
set(LIBSSH2_PC_LIBS_PRIVATE "") set(LIBSSH2_PC_LIBS_PRIVATE "")
set(_ldflags "") set(_ldflags "")
# Avoid getting unnecessary -L options for known system directories. # Avoid getting unnecessary -L options for known system directories.
set(_sys_libdirs "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}") set(_sys_libdirs "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}")
foreach(_libdir IN LISTS CMAKE_SYSTEM_PREFIX_PATH) foreach(_libdir IN LISTS CMAKE_SYSTEM_PREFIX_PATH)
if(_libdir MATCHES "/$") if(_libdir MATCHES "/$")
string(APPEND _libdir "lib") string(APPEND _libdir "lib")
else() else()
@@ -247,16 +248,16 @@ foreach(_libdir IN LISTS CMAKE_SYSTEM_PREFIX_PATH)
list(APPEND _sys_libdirs "${_libdir}") list(APPEND _sys_libdirs "${_libdir}")
endif() endif()
endif() endif()
endforeach() endforeach()
set(_implicit_libs "") set(_implicit_libs "")
if(NOT MINGW AND NOT UNIX) if(NOT MINGW AND NOT UNIX)
set(_implicit_libs "${CMAKE_C_IMPLICIT_LINK_LIBRARIES}") set(_implicit_libs "${CMAKE_C_IMPLICIT_LINK_LIBRARIES}")
endif() endif()
set(_explicit_libdirs "") set(_explicit_libdirs "")
set(LIBSSH2_PC_REQUIRES_PRIVATE "") set(LIBSSH2_PC_REQUIRES_PRIVATE "")
foreach(_lib IN LISTS LIBSSH2_LIBS _implicit_libs) foreach(_lib IN LISTS LIBSSH2_LIBS _implicit_libs)
if(TARGET "${_lib}") if(TARGET "${_lib}")
set(_explicit_libs "") set(_explicit_libs "")
get_target_property(_imported "${_lib}" IMPORTED) get_target_property(_imported "${_lib}" IMPORTED)
@@ -314,9 +315,9 @@ foreach(_lib IN LISTS LIBSSH2_LIBS _implicit_libs)
else() else()
list(APPEND LIBSSH2_PC_LIBS_PRIVATE "-l${_lib}") list(APPEND LIBSSH2_PC_LIBS_PRIVATE "-l${_lib}")
endif() endif()
endforeach() endforeach()
foreach(_libdir IN LISTS _explicit_libdirs) foreach(_libdir IN LISTS _explicit_libdirs)
if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.20) if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.20)
cmake_path(SET _libdir NORMALIZE "${_libdir}") cmake_path(SET _libdir NORMALIZE "${_libdir}")
endif() endif()
@@ -324,13 +325,13 @@ foreach(_libdir IN LISTS _explicit_libdirs)
if(_libdir_index LESS 0) if(_libdir_index LESS 0)
list(APPEND _ldflags "-L${_libdir}") list(APPEND _ldflags "-L${_libdir}")
endif() endif()
endforeach() endforeach()
if(LIBSSH2_PC_REQUIRES_PRIVATE) if(LIBSSH2_PC_REQUIRES_PRIVATE)
list(REMOVE_DUPLICATES LIBSSH2_PC_REQUIRES_PRIVATE) list(REMOVE_DUPLICATES LIBSSH2_PC_REQUIRES_PRIVATE)
string(REPLACE ";" "," LIBSSH2_PC_REQUIRES_PRIVATE "${LIBSSH2_PC_REQUIRES_PRIVATE}") string(REPLACE ";" "," LIBSSH2_PC_REQUIRES_PRIVATE "${LIBSSH2_PC_REQUIRES_PRIVATE}")
endif() endif()
if(LIBSSH2_PC_LIBS_PRIVATE) if(LIBSSH2_PC_LIBS_PRIVATE)
# Remove duplicates listed next to each other # Remove duplicates listed next to each other
set(_libs "") set(_libs "")
set(_prev "") set(_prev "")
@@ -343,65 +344,66 @@ if(LIBSSH2_PC_LIBS_PRIVATE)
set(LIBSSH2_PC_LIBS_PRIVATE "${_libs}") set(LIBSSH2_PC_LIBS_PRIVATE "${_libs}")
string(REPLACE ";" " " LIBSSH2_PC_LIBS_PRIVATE "${LIBSSH2_PC_LIBS_PRIVATE}") string(REPLACE ";" " " LIBSSH2_PC_LIBS_PRIVATE "${LIBSSH2_PC_LIBS_PRIVATE}")
endif() endif()
if(_ldflags) if(_ldflags)
list(REMOVE_DUPLICATES _ldflags) list(REMOVE_DUPLICATES _ldflags)
string(REPLACE ";" " " _ldflags "${_ldflags}") string(REPLACE ";" " " _ldflags "${_ldflags}")
set(LIBSSH2_PC_LIBS_PRIVATE "${_ldflags} ${LIBSSH2_PC_LIBS_PRIVATE}") set(LIBSSH2_PC_LIBS_PRIVATE "${_ldflags} ${LIBSSH2_PC_LIBS_PRIVATE}")
string(STRIP "${LIBSSH2_PC_LIBS_PRIVATE}" LIBSSH2_PC_LIBS_PRIVATE) string(STRIP "${LIBSSH2_PC_LIBS_PRIVATE}" LIBSSH2_PC_LIBS_PRIVATE)
endif() endif()
# Merge pkg-config private fields into public ones when static-only # Merge pkg-config private fields into public ones when static-only
if(BUILD_SHARED_LIBS) if(BUILD_SHARED_LIBS)
set(LIBSSH2_PC_REQUIRES "") set(LIBSSH2_PC_REQUIRES "")
set(LIBSSH2_PC_LIBS "") set(LIBSSH2_PC_LIBS "")
else() else()
set(LIBSSH2_PC_REQUIRES "${LIBSSH2_PC_REQUIRES_PRIVATE}") set(LIBSSH2_PC_REQUIRES "${LIBSSH2_PC_REQUIRES_PRIVATE}")
set(LIBSSH2_PC_LIBS "${LIBSSH2_PC_LIBS_PRIVATE}") set(LIBSSH2_PC_LIBS "${LIBSSH2_PC_LIBS_PRIVATE}")
endif() endif()
set(prefix "${CMAKE_INSTALL_PREFIX}") set(prefix "${CMAKE_INSTALL_PREFIX}")
set(exec_prefix "\${prefix}") set(exec_prefix "\${prefix}")
if(IS_ABSOLUTE ${CMAKE_INSTALL_INCLUDEDIR}) if(IS_ABSOLUTE ${CMAKE_INSTALL_INCLUDEDIR})
set(includedir "${CMAKE_INSTALL_INCLUDEDIR}") set(includedir "${CMAKE_INSTALL_INCLUDEDIR}")
else() else()
set(includedir "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}") set(includedir "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}")
endif() endif()
if(IS_ABSOLUTE ${CMAKE_INSTALL_LIBDIR}) if(IS_ABSOLUTE ${CMAKE_INSTALL_LIBDIR})
set(libdir "${CMAKE_INSTALL_LIBDIR}") set(libdir "${CMAKE_INSTALL_LIBDIR}")
else() else()
set(libdir "\${exec_prefix}/${CMAKE_INSTALL_LIBDIR}") set(libdir "\${exec_prefix}/${CMAKE_INSTALL_LIBDIR}")
endif() endif()
# Generate a pkg-config file for client projects not using CMake. # Generate a pkg-config file for client projects not using CMake.
# Consumed variables: # Consumed variables:
# exec_prefix # exec_prefix
# includedir # includedir
# LIBSSH2_PC_LIBS # LIBSSH2_PC_LIBS
# LIBSSH2_PC_LIBS_PRIVATE # LIBSSH2_PC_LIBS_PRIVATE
# LIBSSH2_PC_REQUIRES # LIBSSH2_PC_REQUIRES
# LIBSSH2_PC_REQUIRES_PRIVATE # LIBSSH2_PC_REQUIRES_PRIVATE
# LIBSSH2_VERSION # LIBSSH2_VERSION
# libdir # libdir
# prefix # prefix
configure_file("${PROJECT_SOURCE_DIR}/libssh2.pc.in" "libssh2.pc" @ONLY) configure_file("${PROJECT_SOURCE_DIR}/libssh2.pc.in" "libssh2.pc" @ONLY)
install( install(
FILES "${CMAKE_CURRENT_BINARY_DIR}/libssh2.pc" FILES "${CMAKE_CURRENT_BINARY_DIR}/libssh2.pc"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
# Consumed variables: # Consumed variables:
# CRYPTO_BACKEND # CRYPTO_BACKEND
# LIB_NAME # LIB_NAME
# LIB_SELECTED # LIB_SELECTED
# LIB_SHARED # LIB_SHARED
# LIB_STATIC # LIB_STATIC
# LIBSSH2_USE_PKGCONFIG # LIBSSH2_USE_PKGCONFIG
# ZLIB_FOUND # ZLIB_FOUND
include(CMakePackageConfigHelpers) include(CMakePackageConfigHelpers)
write_basic_package_version_file( write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake" "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
VERSION "${LIBSSH2_VERSION_MAJOR}.${LIBSSH2_VERSION_MINOR}.${LIBSSH2_VERSION_PATCH}" VERSION "${LIBSSH2_VERSION_MAJOR}.${LIBSSH2_VERSION_MINOR}.${LIBSSH2_VERSION_PATCH}"
COMPATIBILITY SameMajorVersion) COMPATIBILITY SameMajorVersion)
install( install(
FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake" FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}") DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}")
endif()