|
Packit Service |
31306d |
cmake_minimum_required(VERSION 3.3.0)
|
|
Packit Service |
31306d |
cmake_policy(SET CMP0048 NEW)
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
# Specify search path for CMake modules to be loaded by include()
|
|
Packit Service |
31306d |
# and find_package()
|
|
Packit Service |
31306d |
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules")
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
# Add defaults for cmake
|
|
Packit Service |
31306d |
# Those need to be set before the project() call.
|
|
Packit Service |
31306d |
include(DefineCMakeDefaults)
|
|
Packit Service |
31306d |
include(DefineCompilerFlags)
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
project(libssh VERSION 0.9.4 LANGUAGES C)
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
# global needed variable
|
|
Packit Service |
31306d |
set(APPLICATION_NAME ${PROJECT_NAME})
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
# SOVERSION scheme: CURRENT.AGE.REVISION
|
|
Packit Service |
31306d |
# If there was an incompatible interface change:
|
|
Packit Service |
31306d |
# Increment CURRENT. Set AGE and REVISION to 0
|
|
Packit Service |
31306d |
# If there was a compatible interface change:
|
|
Packit Service |
31306d |
# Increment AGE. Set REVISION to 0
|
|
Packit Service |
31306d |
# If the source code was changed, but there were no interface changes:
|
|
Packit Service |
31306d |
# Increment REVISION.
|
|
Packit Service |
31306d |
set(LIBRARY_VERSION "4.8.5")
|
|
Packit Service |
31306d |
set(LIBRARY_SOVERSION "4")
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
# where to look first for cmake modules, before ${CMAKE_ROOT}/Modules/ is checked
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
# add definitions
|
|
Packit Service |
31306d |
include(DefinePlatformDefaults)
|
|
Packit Service |
31306d |
include(DefineOptions.cmake)
|
|
Packit Service |
31306d |
include(CPackConfig.cmake)
|
|
Packit Service |
31306d |
include(GNUInstallDirs)
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
include(CompilerChecks.cmake)
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
# disallow in-source build
|
|
Packit Service |
31306d |
include(MacroEnsureOutOfSourceBuild)
|
|
Packit Service |
31306d |
macro_ensure_out_of_source_build("${PROJECT_NAME} requires an out of source build. Please create a separate build directory and run 'cmake /path/to/${PROJECT_NAME} [options]' there.")
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
# Copy library files to a lib sub-directory
|
|
Packit Service |
31306d |
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
# search for libraries
|
|
Packit Service |
31306d |
if (WITH_ZLIB)
|
|
Packit Service |
31306d |
find_package(ZLIB REQUIRED)
|
|
Packit Service |
31306d |
endif (WITH_ZLIB)
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
if (WITH_GCRYPT)
|
|
Packit Service |
31306d |
find_package(GCrypt 1.5.0 REQUIRED)
|
|
Packit Service |
31306d |
if (NOT GCRYPT_FOUND)
|
|
Packit Service |
31306d |
message(FATAL_ERROR "Could not find GCrypt")
|
|
Packit Service |
31306d |
endif (NOT GCRYPT_FOUND)
|
|
Packit Service |
31306d |
elseif(WITH_MBEDTLS)
|
|
Packit Service |
31306d |
find_package(MbedTLS REQUIRED)
|
|
Packit Service |
31306d |
if (NOT MBEDTLS_FOUND)
|
|
Packit Service |
31306d |
message(FATAL_ERROR "Could not find mbedTLS")
|
|
Packit Service |
31306d |
endif (NOT MBEDTLS_FOUND)
|
|
Packit Service |
31306d |
else (WITH_GCRYPT)
|
|
Packit Service |
31306d |
find_package(OpenSSL)
|
|
Packit Service |
31306d |
if (NOT OPENSSL_FOUND)
|
|
Packit Service |
31306d |
find_package(GCrypt)
|
|
Packit Service |
31306d |
if (NOT GCRYPT_FOUND)
|
|
Packit Service |
31306d |
find_package(MbedTLS)
|
|
Packit Service |
31306d |
if (NOT MBEDTLS_FOUND)
|
|
Packit Service |
31306d |
message(FATAL_ERROR "Could not find OpenSSL, GCrypt or mbedTLS")
|
|
Packit Service |
31306d |
endif (NOT MBEDTLS_FOUND)
|
|
Packit Service |
31306d |
endif (NOT GCRYPT_FOUND)
|
|
Packit Service |
31306d |
endif (NOT OPENSSL_FOUND)
|
|
Packit Service |
31306d |
endif(WITH_GCRYPT)
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
if (UNIT_TESTING)
|
|
Packit Service |
31306d |
find_package(CMocka REQUIRED)
|
|
Packit Service |
31306d |
endif ()
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
# Find out if we have threading available
|
|
Packit Service |
31306d |
set(CMAKE_THREAD_PREFER_PTHREADS ON)
|
|
Packit Service |
31306d |
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
|
Packit Service |
31306d |
find_package(Threads)
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
if (WITH_GSSAPI)
|
|
Packit Service |
31306d |
find_package(GSSAPI)
|
|
Packit Service |
31306d |
endif (WITH_GSSAPI)
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
if (WITH_NACL)
|
|
Packit Service |
31306d |
find_package(NaCl)
|
|
Packit Service |
31306d |
if (NOT NACL_FOUND)
|
|
Packit Service |
31306d |
set(WITH_NACL OFF)
|
|
Packit Service |
31306d |
endif (NOT NACL_FOUND)
|
|
Packit Service |
31306d |
endif (WITH_NACL)
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
if (BSD OR SOLARIS OR OSX)
|
|
Packit Service |
31306d |
find_package(Argp)
|
|
Packit Service |
31306d |
endif (BSD OR SOLARIS OR OSX)
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
# Disable symbol versioning in non UNIX platforms
|
|
Packit Service |
31306d |
if (UNIX)
|
|
Packit Service |
31306d |
find_package(ABIMap 0.3.1)
|
|
Packit Service |
31306d |
else (UNIX)
|
|
Packit Service |
31306d |
set(WITH_SYMBOL_VERSIONING OFF)
|
|
Packit Service |
31306d |
endif (UNIX)
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
# config.h checks
|
|
Packit Service |
31306d |
include(ConfigureChecks.cmake)
|
|
Packit Service |
31306d |
configure_file(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
# check subdirectories
|
|
Packit Service |
31306d |
add_subdirectory(doc)
|
|
Packit Service |
31306d |
add_subdirectory(include)
|
|
Packit Service |
31306d |
add_subdirectory(src)
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
# pkg-config file
|
|
Packit Service |
31306d |
if (UNIX)
|
|
Packit Service |
31306d |
configure_file(libssh.pc.cmake ${CMAKE_CURRENT_BINARY_DIR}/libssh.pc)
|
|
Packit Service |
31306d |
install(
|
|
Packit Service |
31306d |
FILES
|
|
Packit Service |
31306d |
${CMAKE_CURRENT_BINARY_DIR}/libssh.pc
|
|
Packit Service |
31306d |
DESTINATION
|
|
Packit Service |
31306d |
${CMAKE_INSTALL_LIBDIR}/pkgconfig
|
|
Packit Service |
31306d |
COMPONENT
|
|
Packit Service |
31306d |
pkgconfig
|
|
Packit Service |
31306d |
)
|
|
Packit Service |
31306d |
endif (UNIX)
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
# CMake config files
|
|
Packit Service |
31306d |
include(CMakePackageConfigHelpers)
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
set(LIBSSH_LIBRARY_NAME ${CMAKE_SHARED_LIBRARY_PREFIX}ssh${CMAKE_SHARED_LIBRARY_SUFFIX})
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
# libssh-config-version.cmake
|
|
Packit Service |
31306d |
write_basic_package_version_file(libssh-config-version.cmake
|
|
Packit Service |
31306d |
VERSION ${PROJECT_VERSION}
|
|
Packit Service |
31306d |
COMPATIBILITY SameMajorVersion)
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
install(
|
|
Packit Service |
31306d |
FILES
|
|
Packit Service |
31306d |
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake
|
|
Packit Service |
31306d |
DESTINATION
|
|
Packit Service |
31306d |
${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
|
|
Packit Service |
31306d |
COMPONENT
|
|
Packit Service |
31306d |
devel)
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
if (WITH_EXAMPLES)
|
|
Packit Service |
31306d |
add_subdirectory(examples)
|
|
Packit Service |
31306d |
endif (WITH_EXAMPLES)
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
if (UNIT_TESTING)
|
|
Packit Service |
31306d |
include(AddCMockaTest)
|
|
Packit Service |
31306d |
add_subdirectory(tests)
|
|
Packit Service |
31306d |
endif (UNIT_TESTING)
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
### SOURCE PACKAGE
|
|
Packit Service |
31306d |
if (WITH_SYMBOL_VERSIONING AND ABIMAP_FOUND)
|
|
Packit Service |
31306d |
# Get the current ABI version from source
|
|
Packit Service |
31306d |
get_filename_component(current_abi_path
|
|
Packit Service |
31306d |
"${CMAKE_SOURCE_DIR}/src/ABI/current"
|
|
Packit Service |
31306d |
ABSOLUTE)
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
# Check if the ABI version should be updated
|
|
Packit Service |
31306d |
file(READ ${current_abi_path} CURRENT_ABI_CONTENT)
|
|
Packit Service |
31306d |
string(STRIP "${CURRENT_ABI_CONTENT}" CURRENT_ABI_VERSION)
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
if (LIBRARY_VERSION VERSION_GREATER CURRENT_ABI_VERSION)
|
|
Packit Service |
31306d |
set(UPDATE_ABI TRUE)
|
|
Packit Service |
31306d |
endif ()
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
if (UPDATE_ABI)
|
|
Packit Service |
31306d |
message(STATUS "Library version bumped to ${LIBRARY_VERSION}: Updating ABI")
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
# Get the list of header files
|
|
Packit Service |
31306d |
get_file_list(${PROJECT_NAME}_header_list
|
|
Packit Service |
31306d |
DIRECTORIES "${CMAKE_SOURCE_DIR}/include/libssh"
|
|
Packit Service |
31306d |
FILES_PATTERNS "*.h")
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
# Extract the symbols marked as "LIBSSH_API" from the header files
|
|
Packit Service |
31306d |
extract_symbols(${PROJECT_NAME}.symbols
|
|
Packit Service |
31306d |
HEADERS_LIST ${PROJECT_NAME}_header_list
|
|
Packit Service |
31306d |
FILTER_PATTERN "LIBSSH_API"
|
|
Packit Service |
31306d |
COPY_TO "${CMAKE_SOURCE_DIR}/src/ABI/${PROJECT_NAME}-${LIBRARY_VERSION}.symbols")
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
if (WITH_ABI_BREAK)
|
|
Packit Service |
31306d |
set(ALLOW_ABI_BREAK "BREAK_ABI")
|
|
Packit Service |
31306d |
endif()
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
# Target we can depend on in 'make dist'
|
|
Packit Service |
31306d |
set(_SYMBOL_TARGET "${PROJECT_NAME}.map")
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
# Set the path to the current map file
|
|
Packit Service |
31306d |
set(MAP_PATH "${CMAKE_SOURCE_DIR}/src/${_SYMBOL_TARGET}")
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
# Generate the symbol version map file
|
|
Packit Service |
31306d |
generate_map_file(${_SYMBOL_TARGET}
|
|
Packit Service |
31306d |
SYMBOLS ${PROJECT_NAME}.symbols
|
|
Packit Service |
31306d |
RELEASE_NAME_VERSION ${PROJECT_NAME}_${LIBRARY_VERSION}
|
|
Packit Service |
31306d |
CURRENT_MAP ${MAP_PATH}
|
|
Packit Service |
31306d |
COPY_TO ${MAP_PATH}
|
|
Packit Service |
31306d |
FINAL
|
|
Packit Service |
31306d |
${ALLOW_ABI_BREAK})
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
# Write the current version to the source
|
|
Packit Service |
31306d |
file(WRITE ${current_abi_path} ${LIBRARY_VERSION})
|
|
Packit Service |
31306d |
endif(UPDATE_ABI)
|
|
Packit Service |
31306d |
endif (WITH_SYMBOL_VERSIONING AND ABIMAP_FOUND)
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
add_custom_target(dist COMMAND ${CMAKE_MAKE_PROGRAM} package_source DEPENDS ${_SYMBOL_TARGET})
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
# Link compile database for clangd
|
|
Packit Service |
31306d |
execute_process(COMMAND cmake -E create_symlink
|
|
Packit Service |
31306d |
"${CMAKE_BINARY_DIR}/compile_commands.json"
|
|
Packit Service |
31306d |
"${CMAKE_SOURCE_DIR}/compile_commands.json")
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
message(STATUS "********************************************")
|
|
Packit Service |
31306d |
message(STATUS "********** ${PROJECT_NAME} build options : **********")
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
message(STATUS "zlib support: ${WITH_ZLIB}")
|
|
Packit Service |
31306d |
message(STATUS "libgcrypt support: ${WITH_GCRYPT}")
|
|
Packit Service |
31306d |
message(STATUS "libmbedTLS support: ${WITH_MBEDTLS}")
|
|
Packit Service |
31306d |
message(STATUS "libnacl support: ${WITH_NACL}")
|
|
Packit Service |
31306d |
message(STATUS "SFTP support: ${WITH_SFTP}")
|
|
Packit Service |
31306d |
message(STATUS "Server support : ${WITH_SERVER}")
|
|
Packit Service |
31306d |
message(STATUS "GSSAPI support : ${WITH_GSSAPI}")
|
|
Packit Service |
31306d |
message(STATUS "GEX support : ${WITH_GEX}")
|
|
Packit Service |
31306d |
message(STATUS "Pcap debugging support : ${WITH_PCAP}")
|
|
Packit Service |
31306d |
message(STATUS "Build shared library: ${BUILD_SHARED_LIBS}")
|
|
Packit Service |
31306d |
message(STATUS "Unit testing: ${UNIT_TESTING}")
|
|
Packit Service |
31306d |
message(STATUS "Client code testing: ${CLIENT_TESTING}")
|
|
Packit Service |
31306d |
message(STATUS "Blowfish cipher support: ${WITH_BLOWFISH_CIPHER}")
|
|
Packit Service |
31306d |
set(_SERVER_TESTING OFF)
|
|
Packit Service |
31306d |
if (WITH_SERVER)
|
|
Packit Service |
31306d |
set(_SERVER_TESTING ${SERVER_TESTING})
|
|
Packit Service |
31306d |
endif()
|
|
Packit Service |
31306d |
message(STATUS "Server code testing: ${_SERVER_TESTING}")
|
|
Packit Service |
31306d |
if (WITH_INTERNAL_DOC)
|
|
Packit Service |
31306d |
message(STATUS "Internal documentation generation")
|
|
Packit Service |
31306d |
else (WITH_INTERNAL_DOC)
|
|
Packit Service |
31306d |
message(STATUS "Public API documentation generation")
|
|
Packit Service |
31306d |
endif (WITH_INTERNAL_DOC)
|
|
Packit Service |
31306d |
message(STATUS "Benchmarks: ${WITH_BENCHMARKS}")
|
|
Packit Service |
31306d |
message(STATUS "Symbol versioning: ${WITH_SYMBOL_VERSIONING}")
|
|
Packit Service |
31306d |
message(STATUS "Allow ABI break: ${WITH_ABI_BREAK}")
|
|
Packit Service |
31306d |
message(STATUS "Release is final: ${WITH_FINAL}")
|
|
Packit Service |
31306d |
message(STATUS "Global client config: ${GLOBAL_CLIENT_CONFIG}")
|
|
Packit Service |
31306d |
if (WITH_SERVER)
|
|
Packit Service |
31306d |
message(STATUS "Global bind config: ${GLOBAL_BIND_CONFIG}")
|
|
Packit Service |
31306d |
endif()
|
|
Packit Service |
31306d |
message(STATUS "********************************************")
|
|
Packit Service |
31306d |
|