2009-02-02 17:44:46 +03:00
project ( libssh C )
# Required cmake version
2015-04-10 15:35:29 +03:00
cmake_minimum_required ( VERSION 2.8.5 )
2009-02-02 17:44:46 +03:00
# global needed variables
set ( APPLICATION_NAME ${ PROJECT_NAME } )
set ( APPLICATION_VERSION_MAJOR "0" )
2014-05-20 01:41:30 +04:00
set ( APPLICATION_VERSION_MINOR "7" )
set ( APPLICATION_VERSION_PATCH "0" )
2009-02-02 17:44:46 +03:00
2009-12-21 17:56:21 +03:00
set ( APPLICATION_VERSION "${APPLICATION_VERSION_MAJOR}.${APPLICATION_VERSION_MINOR}.${APPLICATION_VERSION_PATCH}" )
2010-05-12 21:01:25 +04:00
# SOVERSION scheme: CURRENT.AGE.REVISION
2010-03-25 15:24:59 +03:00
# If there was an incompatible interface change:
# Increment CURRENT. Set AGE and REVISION to 0
2010-05-12 21:01:25 +04:00
# If there was a compatible interface change:
# Increment AGE. Set REVISION to 0
# If the source code was changed, but there were no interface changes:
# Increment REVISION.
2015-05-06 12:01:33 +03:00
set ( LIBRARY_VERSION "4.4.0" )
2010-08-19 01:18:57 +04:00
set ( LIBRARY_SOVERSION "4" )
2009-02-02 17:44:46 +03:00
# where to look first for cmake modules, before ${CMAKE_ROOT}/Modules/ is checked
set ( CMAKE_MODULE_PATH
2015-06-24 19:04:26 +03:00
$ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / c m a k e / M o d u l e s
2009-02-02 17:44:46 +03:00
)
# add definitions
include ( DefineCMakeDefaults )
2010-09-08 13:19:22 +04:00
include ( DefinePlatformDefaults )
2009-02-02 17:44:46 +03:00
include ( DefineCompilerFlags )
include ( DefineInstallationPaths )
include ( DefineOptions.cmake )
include ( CPackConfig.cmake )
# disallow in-source build
include ( MacroEnsureOutOfSourceBuild )
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." )
# search for libraries
2011-09-23 10:00:25 +04:00
if ( WITH_ZLIB )
2010-06-11 12:43:02 +04:00
find_package ( ZLIB REQUIRED )
2011-09-23 10:00:25 +04:00
endif ( WITH_ZLIB )
2009-02-02 17:44:46 +03:00
2009-09-26 01:31:48 +04:00
if ( WITH_GCRYPT )
2012-02-04 23:10:04 +04:00
find_package ( GCrypt 1.5.0 REQUIRED )
2009-05-07 19:07:54 +04:00
if ( NOT GCRYPT_FOUND )
2009-09-26 01:31:48 +04:00
message ( FATAL_ERROR "Could not find GCrypt" )
2009-05-07 19:07:54 +04:00
endif ( NOT GCRYPT_FOUND )
2009-09-26 01:31:48 +04:00
else ( WITH_GCRYPT )
find_package ( OpenSSL )
2010-04-20 15:25:46 +04:00
if ( NOT OPENSSL_FOUND )
2009-09-26 01:31:48 +04:00
find_package ( GCrypt )
if ( NOT GCRYPT_FOUND )
message ( FATAL_ERROR "Could not find OpenSSL or GCrypt" )
endif ( NOT GCRYPT_FOUND )
2010-04-20 15:25:46 +04:00
endif ( NOT OPENSSL_FOUND )
2009-09-26 01:31:48 +04:00
endif ( WITH_GCRYPT )
2009-02-02 17:44:46 +03:00
2010-09-01 17:15:17 +04:00
# Find out if we have threading available
set ( CMAKE_THREAD_PREFER_PTHREADS ON )
find_package ( Threads )
2013-07-13 17:46:23 +04:00
if ( WITH_GSSAPI )
2013-07-13 17:50:57 +04:00
find_package ( GSSAPI )
2013-07-13 17:46:23 +04:00
endif ( WITH_GSSAPI )
2013-02-21 02:14:59 +04:00
2013-09-22 01:32:51 +04:00
if ( WITH_NACL )
find_package ( NaCl )
if ( NOT NACL_FOUND )
set ( WITH_NACL OFF )
endif ( NOT NACL_FOUND )
endif ( WITH_NACL )
2016-03-15 00:27:06 +03:00
if ( BSD OR SOLARIS OR OSX )
find_package ( Argp )
endif ( BSD OR SOLARIS OR OSX )
2009-02-02 17:44:46 +03:00
# config.h checks
include ( ConfigureChecks.cmake )
configure_file ( config.h.cmake ${ CMAKE_CURRENT_BINARY_DIR } /config.h )
# check subdirectories
2009-02-03 13:43:45 +03:00
add_subdirectory ( doc )
2009-02-02 17:44:46 +03:00
add_subdirectory ( include )
2010-09-06 16:28:38 +04:00
add_subdirectory ( src )
2009-02-02 17:44:46 +03:00
2009-12-30 08:34:17 +03:00
# pkg-config file
2015-09-07 08:46:11 +03:00
if ( UNIX )
2009-12-30 08:34:17 +03:00
configure_file ( libssh.pc.cmake ${ CMAKE_CURRENT_BINARY_DIR } /libssh.pc )
install (
F I L E S
$ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / l i b s s h . p c
2011-06-14 15:47:04 +04:00
$ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / l i b s s h _ t h r e a d s . p c
2009-12-30 08:34:17 +03:00
D E S T I N A T I O N
$ { L I B _ I N S T A L L _ D I R } / p k g c o n f i g
C O M P O N E N T
p k g c o n f i g
)
2015-09-07 08:46:11 +03:00
if ( LIBSSH_THREADS )
configure_file ( libssh_threads.pc.cmake ${ CMAKE_CURRENT_BINARY_DIR } /libssh_threads.pc )
install (
F I L E S
$ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / l i b s s h . p c
$ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / l i b s s h _ t h r e a d s . p c
D E S T I N A T I O N
$ { L I B _ I N S T A L L _ D I R } / p k g c o n f i g
C O M P O N E N T
p k g c o n f i g
)
endif ( LIBSSH_THREADS )
endif ( UNIX )
2013-02-12 16:31:42 +04:00
# cmake config files
2014-12-17 12:38:56 +03:00
set ( LIBSSH_LIBRARY_NAME ${ CMAKE_SHARED_LIBRARY_PREFIX } ssh ${ CMAKE_SHARED_LIBRARY_SUFFIX } )
set ( LIBSSH_THREADS_LIBRARY_NAME ${ CMAKE_SHARED_LIBRARY_PREFIX } ssh ${ CMAKE_SHARED_LIBRARY_SUFFIX } )
2014-05-22 16:52:52 +04:00
configure_file ( ${ PROJECT_NAME } -config.cmake.in ${ CMAKE_CURRENT_BINARY_DIR } / ${ PROJECT_NAME } -config.cmake @ONLY )
configure_file ( ${ PROJECT_NAME } -config-version.cmake.in ${ CMAKE_CURRENT_BINARY_DIR } / ${ PROJECT_NAME } -config-version.cmake @ONLY )
2013-02-12 16:31:42 +04:00
install (
F I L E S
2014-05-22 16:52:52 +04:00
$ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / $ { P R O J E C T _ N A M E } - c o n f i g . c m a k e
$ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / $ { P R O J E C T _ N A M E } - c o n f i g - v e r s i o n . c m a k e
2013-02-12 16:31:42 +04:00
D E S T I N A T I O N
2014-05-22 16:52:52 +04:00
$ { C M A K E _ I N S T A L L _ D I R } / $ { P R O J E C T _ N A M E }
2013-02-12 16:31:42 +04:00
C O M P O N E N T
d e v e l
)
2014-05-22 16:52:52 +04:00
2013-02-12 16:31:42 +04:00
# in tree build settings
configure_file ( libssh-build-tree-settings.cmake.in ${ CMAKE_CURRENT_BINARY_DIR } /libssh-build-tree-settings.cmake @ONLY )
2013-09-16 10:21:12 +04:00
if ( WITH_EXAMPLES )
add_subdirectory ( examples )
endif ( WITH_EXAMPLES )
2010-03-02 15:47:14 +03:00
2010-03-15 18:09:16 +03:00
if ( WITH_TESTING )
2012-10-07 13:10:27 +04:00
find_package ( CMocka REQUIRED )
include ( AddCMockaTest )
2010-03-02 15:47:14 +03:00
add_subdirectory ( tests )
2010-03-15 18:09:16 +03:00
endif ( WITH_TESTING )
2010-03-02 15:47:14 +03:00
2010-12-19 19:29:17 +03:00
2010-03-03 01:37:49 +03:00
message ( STATUS "********************************************" )
message ( STATUS "********** ${PROJECT_NAME} build options : **********" )
2010-02-08 18:55:03 +03:00
2011-09-23 10:00:25 +04:00
message ( STATUS "zlib support: ${WITH_ZLIB}" )
2010-03-03 01:37:49 +03:00
message ( STATUS "libgcrypt support: ${WITH_GCRYPT}" )
2013-09-22 01:32:51 +04:00
message ( STATUS "libnacl support: ${WITH_NACL}" )
2010-03-03 01:37:49 +03:00
message ( STATUS "SSH-1 support: ${WITH_SSH1}" )
message ( STATUS "SFTP support: ${WITH_SFTP}" )
message ( STATUS "Server support : ${WITH_SERVER}" )
2013-02-21 02:14:59 +04:00
message ( STATUS "GSSAPI support : ${WITH_GSSAPI}" )
2010-03-03 01:37:49 +03:00
message ( STATUS "Pcap debugging support : ${WITH_PCAP}" )
2012-10-15 13:55:42 +04:00
message ( STATUS "With static library: ${WITH_STATIC_LIB}" )
2010-03-03 01:37:49 +03:00
message ( STATUS "Unit testing: ${WITH_TESTING}" )
2010-07-23 13:04:09 +04:00
message ( STATUS "Client code Unit testing: ${WITH_CLIENT_TESTING}" )
2010-02-08 18:55:03 +03:00
if ( WITH_INTERNAL_DOC )
2010-03-03 01:37:49 +03:00
message ( STATUS "Internal documentation generation" )
2010-02-08 18:55:03 +03:00
else ( WITH_INTERNAL_DOC )
2010-03-03 01:37:49 +03:00
message ( STATUS "Public API documentation generation" )
2010-02-08 18:55:03 +03:00
endif ( WITH_INTERNAL_DOC )
2010-12-19 19:29:17 +03:00
message ( STATUS "Benchmarks: ${WITH_BENCHMARKS}" )
2010-03-03 01:37:49 +03:00
message ( STATUS "********************************************" )
2010-02-08 18:55:03 +03:00