cmake_minimum_required ( VERSION 2.6 )
if ( POLICY CMP0037 )
cmake_policy ( SET CMP0037 NEW )
endif ( POLICY CMP0037 )
project ( LibVNCServer )
include ( CheckFunctionExists )
include ( CheckIncludeFile )
include ( CheckTypeSize )
include ( TestBigEndian )
include ( CheckCSourceCompiles )
include ( CheckCXXSourceCompiles )
include ( CheckCSourceRuns )
set ( PACKAGE_NAME "LibVNCServer" )
set ( FULL_PACKAGE_NAME "LibVNCServer" )
set ( VERSION_MAJOR "0" )
set ( VERSION_MINOR "9" )
set ( VERSION_PATCHLEVEL "11" )
set ( VERSION_SO "0" )
set ( PACKAGE_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCHLEVEL}" )
set ( PROJECT_BUGREPORT_PATH "http://sourceforge.net/projects/libvncserver" )
set ( CMAKE_C_FLAGS "-O2 -W -Wall -g" )
set ( LIBVNCSERVER_DIR ${ CMAKE_CURRENT_SOURCE_DIR } /libvncserver )
set ( COMMON_DIR ${ CMAKE_CURRENT_SOURCE_DIR } /common )
set ( LIBVNCCLIENT_DIR ${ CMAKE_CURRENT_SOURCE_DIR } /libvncclient )
set ( LIBVNCSRVTEST_DIR ${ CMAKE_CURRENT_SOURCE_DIR } /examples )
set ( LIBVNCCLITEST_DIR ${ CMAKE_CURRENT_SOURCE_DIR } /client_examples )
include_directories ( ${ CMAKE_CURRENT_SOURCE_DIR } ${ CMAKE_CURRENT_BINARY_DIR } ${ CMAKE_CURRENT_SOURCE_DIR } /libvncserver ${ CMAKE_CURRENT_SOURCE_DIR } /common )
find_package ( ZLIB )
find_package ( JPEG )
find_package ( PNG )
find_package ( SDL )
find_package ( GnuTLS )
find_package ( Threads )
find_package ( X11 )
find_package ( OpenSSL )
find_package ( PkgConfig )
find_library ( LIBGCRYPT_LIBRARIES gcrypt )
# Check whether the version of libjpeg we found was libjpeg-turbo and print a
# warning if not.
set ( CMAKE_REQUIRED_LIBRARIES ${ JPEG_LIBRARIES } )
set ( CMAKE_REQUIRED_FLAGS -I ${ JPEG_INCLUDE_DIR } )
set ( JPEG_TEST_SOURCE " \n
#include <stdio.h>\n
#include <jpeglib.h>\n
i n t main ( void ) { \ n
s t r u c t j p e g _ c o m p r e s s _ s t r u c t c i n f o ; \ n
s t r u c t j p e g _ e r r o r _ m g r j e r r ; \ n
c i n f o . e r r = jpeg_std_error ( &jerr ) ; \ n
jpeg_create_compress ( &cinfo ) ; \ n
c i n f o . i n p u t _ c o m p o n e n t s = 3 ; \ n
jpeg_set_defaults ( &cinfo ) ; \ n
c i n f o . i n _ c o l o r _ s p a c e = J C S _ E X T _ R G B ; \ n
jpeg_default_colorspace ( &cinfo ) ; \ n
r e t u r n 0 ; \ n
} " )
if ( CMAKE_CROSSCOMPILING )
check_c_source_compiles ( "${JPEG_TEST_SOURCE}" FOUND_LIBJPEG_TURBO )
else ( )
check_c_source_runs ( "${JPEG_TEST_SOURCE}" FOUND_LIBJPEG_TURBO )
endif ( )
set ( CMAKE_REQUIRED_LIBRARIES )
set ( CMAKE_REQUIRED_FLAGS )
set ( CMAKE_REQUIRED_DEFINITIONS )
if ( NOT FOUND_LIBJPEG_TURBO )
message ( WARNING "*** The libjpeg library you are building against is not libjpeg-turbo. Performance will be reduced. You can obtain libjpeg-turbo from: https://sourceforge.net/projects/libjpeg-turbo/files/ ***" )
endif ( )
# On systems such as GNU/Linux with glibc, __b64_ntop is defined in a
# separate library, libresolv. On some others, such as FreeBSD, it is
# part of libc itself. We first check if __b64_ntop is found without
# additional libraries, and then try looking for it with libresolv if
# the first test fails.
check_function_exists ( __b64_ntop HAVE_B64_IN_LIBC )
if ( NOT HAVE_B64_IN_LIBC )
set ( CMAKE_REQUIRED_LIBRARIES resolv )
check_function_exists ( __b64_ntop HAVE_B64_IN_LIBRESOLV )
set ( CMAKE_REQUIRED_LIBRARIES )
if ( HAVE_B64_IN_LIBRESOLV )
set ( RESOLV_LIB "resolv" )
endif ( HAVE_B64_IN_LIBRESOLV )
endif ( NOT HAVE_B64_IN_LIBC )
if ( Threads_FOUND )
option ( TIGHTVNC_FILETRANSFER "Enable filetransfer" ON )
endif ( Threads_FOUND )
if ( ZLIB_FOUND )
set ( LIBVNCSERVER_HAVE_LIBZ 1 )
endif ( ZLIB_FOUND )
if ( JPEG_FOUND )
set ( LIBVNCSERVER_HAVE_LIBJPEG 1 )
endif ( JPEG_FOUND )
if ( PNG_FOUND )
set ( LIBVNCSERVER_HAVE_LIBPNG 1 )
endif ( PNG_FOUND )
option ( LIBVNCSERVER_ALLOW24BPP "Allow 24 bpp" ON )
pkg_check_modules ( SYSTEMD "libsystemd" )
if ( SYSTEMD_FOUND )
option ( LIBVNCSERVER_WITH_SYSTEMD "Build with systemd socket activation support" ON )
endif ( SYSTEMD_FOUND )
if ( LIBVNCSERVER_WITH_SYSTEMD )
add_definitions ( -DLIBVNCSERVER_WITH_SYSTEMD )
include_directories ( ${ SYSTEMD_INCLUDE_DIRS } )
set ( ADDITIONAL_LIBS ${ ADDITIONAL_LIBS } ${ SYSTEMD_LIBRARIES } )
endif ( LIBVNCSERVER_WITH_SYSTEMD )
if ( GNUTLS_FOUND )
set ( LIBVNCSERVER_WITH_CLIENT_TLS 1 )
option ( LIBVNCSERVER_WITH_WEBSOCKETS "Build with websockets support (gnutls)" ON )
set ( WEBSOCKET_LIBRARIES ${ RESOLV_LIB } ${ GNUTLS_LIBRARIES } )
set ( WSSRCS ${ LIBVNCSERVER_DIR } /rfbssl_gnutls.c ${ LIBVNCSERVER_DIR } /rfbcrypto_gnutls.c )
include_directories ( ${ GNUTLS_INCLUDE_DIR } )
elseif ( OPENSSL_FOUND )
option ( LIBVNCSERVER_WITH_WEBSOCKETS "Build with websockets support (openssl)" ON )
set ( WEBSOCKET_LIBRARIES ${ RESOLV_LIB } ${ OPENSSL_LIBRARIES } )
set ( WSSRCS ${ LIBVNCSERVER_DIR } /rfbssl_openssl.c ${ LIBVNCSERVER_DIR } /rfbcrypto_openssl.c )
include_directories ( ${ OPENSSL_INCLUDE_DIR } )
else ( )
option ( LIBVNCSERVER_WITH_WEBSOCKETS "Build with websockets support (no ssl)" ON )
set ( WEBSOCKET_LIBRARIES ${ RESOLV_LIB } )
set ( WSSRCS ${ LIBVNCSERVER_DIR } /rfbssl_none.c ${ LIBVNCSERVER_DIR } /rfbcrypto_included.c ${ COMMON_DIR } /md5.c ${ COMMON_DIR } /sha1.c )
endif ( )
if ( LIBGCRYPT_LIBRARIES )
message ( STATUS "Found libgcrypt: ${LIBGCRYPT_LIBRARIES}" )
set ( LIBVNCSERVER_WITH_CLIENT_GCRYPT 1 )
set ( ADDITIONAL_LIBS ${ ADDITIONAL_LIBS } ${ LIBGCRYPT_LIBRARIES } )
endif ( LIBGCRYPT_LIBRARIES )
check_include_file ( "endian.h" LIBVNCSERVER_HAVE_ENDIAN_H )
check_include_file ( "fcntl.h" LIBVNCSERVER_HAVE_FCNTL_H )
check_include_file ( "netinet/in.h" LIBVNCSERVER_HAVE_NETINET_IN_H )
check_include_file ( "sys/endian.h" LIBVNCSERVER_HAVE_SYS_ENDIAN_H )
check_include_file ( "sys/socket.h" LIBVNCSERVER_HAVE_SYS_SOCKET_H )
check_include_file ( "sys/stat.h" LIBVNCSERVER_HAVE_SYS_STAT_H )
check_include_file ( "sys/time.h" LIBVNCSERVER_HAVE_SYS_TIME_H )
check_include_file ( "sys/types.h" LIBVNCSERVER_HAVE_SYS_TYPES_H )
check_include_file ( "sys/wait.h" LIBVNCSERVER_HAVE_SYS_WAIT_H )
check_include_file ( "unistd.h" LIBVNCSERVER_HAVE_UNISTD_H )
# headers needed for check_type_size()
check_include_file ( "vfork.h" LIBVNCSERVER_HAVE_VFORK_H )
check_include_file ( "ws2tcpip.h" LIBVNCSERVER_HAVE_WS2TCPIP_H )
check_include_file ( "arpa/inet.h" HAVE_ARPA_INET_H )
check_include_file ( "stdint.h" HAVE_STDINT_H )
check_include_file ( "stddef.h" HAVE_STDDEF_H )
check_include_file ( "sys/types.h" HAVE_SYS_TYPES_H )
check_function_exists ( gettimeofday LIBVNCSERVER_HAVE_GETTIMEOFDAY )
check_function_exists ( vfork LIBVNCSERVER_HAVE_VFORK )
check_function_exists ( vprintf LIBVNCSERVER_HAVE_VPRINTF )
if ( LIBVNCSERVER_HAVE_WS2TCPIP_H AND LIBVNCSERVER_HAVE_VPRINTF )
option ( LIBVNCSERVER_IPv6 "Enable IPv6 Support" ON )
endif ( )
if ( CMAKE_USE_PTHREADS_INIT )
set ( LIBVNCSERVER_HAVE_LIBPTHREAD 1 )
endif ( CMAKE_USE_PTHREADS_INIT )
if ( LIBVNCSERVER_HAVE_SYS_SOCKET_H )
# socklen_t
list ( APPEND CMAKE_EXTRA_INCLUDE_FILES "sys/socket.h" )
endif ( LIBVNCSERVER_HAVE_SYS_SOCKET_H )
if ( HAVE_ARPA_INET_H )
# in_addr_t
list ( APPEND CMAKE_EXTRA_INCLUDE_FILES "arpa/inet.h" )
endif ( HAVE_ARPA_INET_H )
check_type_size ( pid_t LIBVNCSERVER_PID_T )
check_type_size ( size_t LIBVNCSERVER_SIZE_T )
check_type_size ( socklen_t LIBVNCSERVER_SOCKLEN_T )
check_type_size ( in_addr_t LIBVNCSERVER_IN_ADDR_T )
if ( NOT HAVE_LIBVNCSERVER_IN_ADDR_T )
set ( LIBVNCSERVER_NEED_INADDR_T 1 )
endif ( NOT HAVE_LIBVNCSERVER_IN_ADDR_T )
TEST_BIG_ENDIAN ( LIBVNCSERVER_WORDS_BIGENDIAN )
# TODO:
# LIBVNCSERVER_ENOENT_WORKAROUND
# inline
configure_file ( ${ CMAKE_CURRENT_SOURCE_DIR } /rfb/rfbconfig.h.cmake ${ CMAKE_CURRENT_BINARY_DIR } /rfb/rfbconfig.h )
set ( LIBVNCSERVER_SOURCES
$ { L I B V N C S E R V E R _ D I R } / m a i n . c c
$ { L I B V N C S E R V E R _ D I R } / r f b s e r v e r . c
$ { L I B V N C S E R V E R _ D I R } / r f b r e g i o n . c
$ { L I B V N C S E R V E R _ D I R } / a u t h . c
$ { L I B V N C S E R V E R _ D I R } / s o c k e t s . c
$ { L I B V N C S E R V E R _ D I R } / s t a t s . c
$ { L I B V N C S E R V E R _ D I R } / c o r r e . c
$ { L I B V N C S E R V E R _ D I R } / h e x t i l e . c
$ { L I B V N C S E R V E R _ D I R } / r r e . c
$ { L I B V N C S E R V E R _ D I R } / t r a n s l a t e . c
$ { L I B V N C S E R V E R _ D I R } / c u t p a s t e . c
$ { L I B V N C S E R V E R _ D I R } / h t t p d . c
$ { L I B V N C S E R V E R _ D I R } / c u r s o r . c
$ { L I B V N C S E R V E R _ D I R } / f o n t . c
$ { L I B V N C S E R V E R _ D I R } / d r a w . c
$ { L I B V N C S E R V E R _ D I R } / s e l b o x . c
$ { C O M M O N _ D I R } / d 3 d e s . c
$ { C O M M O N _ D I R } / v n c a u t h . c
$ { L I B V N C S E R V E R _ D I R } / c a r g s . c
$ { C O M M O N _ D I R } / m i n i l z o . c
$ { L I B V N C S E R V E R _ D I R } / u l t r a . c
$ { L I B V N C S E R V E R _ D I R } / s c a l e . c
)
set ( LIBVNCCLIENT_SOURCES
$ { L I B V N C C L I E N T _ D I R } / c u r s o r . c
$ { L I B V N C C L I E N T _ D I R } / l i s t e n . c
$ { L I B V N C C L I E N T _ D I R } / r f b p r o t o . c
$ { L I B V N C C L I E N T _ D I R } / s o c k e t s . c
$ { L I B V N C C L I E N T _ D I R } / v n c v i e w e r . c
$ { C O M M O N _ D I R } / m i n i l z o . c
)
if ( GNUTLS_FOUND )
set ( LIBVNCCLIENT_SOURCES
$ { L I B V N C C L I E N T _ S O U R C E S }
$ { L I B V N C C L I E N T _ D I R } / t l s _ g n u t l s . c
)
elseif ( OPENSSL_FOUND )
set ( LIBVNCCLIENT_SOURCES
$ { L I B V N C C L I E N T _ S O U R C E S }
$ { L I B V N C C L I E N T _ D I R } / t l s _ o p e n s s l . c
)
else ( )
set ( LIBVNCCLIENT_SOURCES
$ { L I B V N C C L I E N T _ S O U R C E S }
$ { L I B V N C C L I E N T _ D I R } / t l s _ n o n e . c
)
endif ( )
if ( ZLIB_FOUND )
add_definitions ( -DLIBVNCSERVER_HAVE_LIBZ )
include_directories ( ${ ZLIB_INCLUDE_DIR } )
set ( LIBVNCSERVER_SOURCES
$ { L I B V N C S E R V E R _ S O U R C E S }
$ { L I B V N C S E R V E R _ D I R } / z l i b . c
$ { L I B V N C S E R V E R _ D I R } / z r l e . c
$ { L I B V N C S E R V E R _ D I R } / z r l e o u t s t r e a m . c
$ { L I B V N C S E R V E R _ D I R } / z r l e p a l e t t e h e l p e r . c
)
endif ( ZLIB_FOUND )
if ( JPEG_FOUND )
add_definitions ( -DLIBVNCSERVER_HAVE_LIBJPEG )
include_directories ( ${ JPEG_INCLUDE_DIR } )
set ( TIGHT_C ${ LIBVNCSERVER_DIR } /tight.c ${ COMMON_DIR } /turbojpeg.c )
endif ( JPEG_FOUND )
if ( PNG_FOUND )
add_definitions ( -DLIBVNCSERVER_HAVE_LIBPNG )
include_directories ( ${ PNG_INCLUDE_DIR } )
set ( TIGHT_C ${ LIBVNCSERVER_DIR } /tight.c ${ COMMON_DIR } /turbojpeg.c )
endif ( PNG_FOUND )
set ( LIBVNCSERVER_SOURCES
$ { L I B V N C S E R V E R _ S O U R C E S }
$ { T I G H T _ C }
)
if ( TIGHTVNC_FILETRANSFER )
set ( LIBVNCSERVER_SOURCES
$ { L I B V N C S E R V E R _ S O U R C E S }
$ { L I B V N C S E R V E R _ D I R } / t i g h t v n c - f i l e t r a n s f e r / r f b t i g h t s e r v e r . c
$ { L I B V N C S E R V E R _ D I R } / t i g h t v n c - f i l e t r a n s f e r / h a n d l e f i l e t r a n s f e r r e q u e s t . c
$ { L I B V N C S E R V E R _ D I R } / t i g h t v n c - f i l e t r a n s f e r / f i l e t r a n s f e r m s g . c
$ { L I B V N C S E R V E R _ D I R } / t i g h t v n c - f i l e t r a n s f e r / f i l e l i s t i n f o . c
)
endif ( TIGHTVNC_FILETRANSFER )
if ( LIBVNCSERVER_WITH_WEBSOCKETS )
add_definitions ( -DLIBVNCSERVER_WITH_WEBSOCKETS )
set ( LIBVNCSERVER_SOURCES
$ { L I B V N C S E R V E R _ S O U R C E S }
$ { L I B V N C S E R V E R _ D I R } / w e b s o c k e t s . c
$ { W S S R C S }
)
endif ( LIBVNCSERVER_WITH_WEBSOCKETS )
##### tdevncclient (static) ########################
tde_add_library ( tdevncclient STATIC_PIC AUTOMOC
S O U R C E S
$ { L I B V N C C L I E N T _ S O U R C E S }
L I N K
p t h r e a d $ { A D D I T I O N A L _ L I B S } $ { Z L I B _ L I B R A R I E S } $ { J P E G _ L I B R A R I E S } $ { G N U T L S _ L I B R A R I E S } $ { O P E N S S L _ L I B R A R I E S }
)
##### tdevncserver (static) ########################
tde_add_library ( tdevncserver STATIC_PIC AUTOMOC
S O U R C E S
$ { L I B V N C S E R V E R _ S O U R C E S }
L I N K
$ { A D D I T I O N A L _ L I B S } $ { Z L I B _ L I B R A R I E S } $ { J P E G _ L I B R A R I E S } $ { P N G _ L I B R A R I E S } $ { W E B S O C K E T _ L I B R A R I E S }
)