@@ -46,6 +46,7 @@ option(WITH_JPEG "Search for the libjpeg compression library to support addition
4646option (WITH_PNG "Search for the PNG compression library to support additional encodings" ON )
4747option (WITH_SDL "Search for the Simple Direct Media Layer library to build an example SDL vnc client" ON )
4848option (WITH_GTK "Search for the GTK library to build an example GTK vnc client" ON )
49+ option (WITH_LIBSSH2 "Search for libssh2 to build an example ssh-tunneled client" ON )
4950option (WITH_THREADS "Search for a threading library to build with multithreading support" ON )
5051option (PREFER_WIN32THREADS "When searching for a threading library, prefer win32 threads if they are found" OFF )
5152option (WITH_GNUTLS "Search for the GnuTLS secure communications library to support TLS" ON )
@@ -58,6 +59,8 @@ option(WITH_24BPP "Allow 24 bpp" ON)
5859option (WITH_IPv6 "Enable IPv6 Support" ON )
5960option (WITH_WEBSOCKETS "Build with websockets support" ON )
6061option (WITH_SASL "Build with SASL support" ON )
62+ option (WITH_EXAMPLES "Build examples" ON )
63+ option (WITH_TESTS "Build tests" ON )
6164
6265
6366if (WITH_ZLIB)
@@ -131,6 +134,10 @@ if(WITH_GTK)
131134 find_package (GTK2 )
132135endif (WITH_GTK )
133136
137+ if (WITH_LIBSSH2)
138+ find_package (LibSSH2 )
139+ endif (WITH_LIBSSH2 )
140+
134141if (WITH_THREADS)
135142 find_package (Threads )
136143endif (WITH_THREADS )
@@ -209,6 +216,7 @@ check_function_exists(strerror LIBVNCSERVER_HAVE_STRERROR)
209216check_function_exists (strstr LIBVNCSERVER_HAVE_STRSTR )
210217
211218check_symbol_exists (htobe64 "endian.h" LIBVNCSERVER_HAVE_HTOBE64 )
219+ check_symbol_exists (htobe64 "sys/endian.h" LIBVNCSERVER_HAVE_HTOBE64 )
212220check_symbol_exists (OSSwapHostToBigInt64 "libkern/OSByteOrder.h" LIBVNCSERVER_HAVE_OSSWAPHOSTTOBIGINT64 )
213221
214222if (WITH_THREADS AND Threads_FOUND)
@@ -247,11 +255,11 @@ endif(SYSTEMD_FOUND)
247255if (WITH_GCRYPT AND LIBGCRYPT_LIBRARIES)
248256 message (STATUS "Building crypto with Libgcrypt" )
249257 set (CRYPTO_LIBRARIES ${LIBGCRYPT_LIBRARIES} )
250- set (CRYPTO_SOURCES ${COMMON_DIR} /crypto_libgcrypt)
258+ set (CRYPTO_SOURCES ${COMMON_DIR} /crypto_libgcrypt.c )
251259elseif (OPENSSL_FOUND)
252260 message (STATUS "Building crypto with OpenSSL" )
253261 set (CRYPTO_LIBRARIES ${OPENSSL_LIBRARIES} )
254- set (CRYPTO_SOURCES ${COMMON_DIR} /crypto_openssl)
262+ set (CRYPTO_SOURCES ${COMMON_DIR} /crypto_openssl.c )
255263else ()
256264 message (STATUS "Building crypto with builtin functions, only including SHA1 and D3DES" )
257265 set (CRYPTO_SOURCES ${COMMON_DIR} /crypto_included.c ${COMMON_DIR} /sha1.c ${COMMON_DIR} /d3des.c)
@@ -598,6 +606,17 @@ if(GTK2_FOUND)
598606 )
599607endif (GTK2_FOUND )
600608
609+ if (LIBSSH2_FOUND AND (CMAKE_USE_PTHREADS_INIT OR CMAKE_USE_WIN32_THREADS_INIT))
610+ include_directories (${LIBSSH2_INCLUDE_DIR} )
611+ set (LIBVNCCLIENT_EXAMPLES
612+ ${LIBVNCCLIENT_EXAMPLES}
613+ sshtunnel
614+ )
615+ endif ()
616+ # if not found, set lib var to empty, otherwise CMake complains
617+ if (NOT LIBSSH2_FOUND)
618+ set (LIBSSH2_LIBRARY "" )
619+ endif ()
601620
602621if (FFMPEG_FOUND)
603622 set (LIBVNCCLIENT_EXAMPLES
@@ -606,26 +625,28 @@ if(FFMPEG_FOUND)
606625 )
607626endif (FFMPEG_FOUND )
608627
609-
610- foreach (e ${LIBVNCSERVER_EXAMPLES} )
611- add_executable (examples_${e} ${LIBVNCSRVEXAMPLE_DIR} /${e}.c )
612- set_target_properties (examples_${e} PROPERTIES OUTPUT_NAME ${e} )
613- set_target_properties (examples_${e} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /examples )
614- target_link_libraries (examples_${e} vncserver ${CMAKE_THREAD_LIBS_INIT} ${CARBON_LIBRARY} ${IOKIT_LIBRARY} ${IOSURFACE_LIBRARY} )
615- endforeach (e ${LIBVNCSERVER_EXAMPLES} )
616-
617- foreach (e ${LIBVNCCLIENT_EXAMPLES} )
618- add_executable (client_examples_${e} ${LIBVNCCLIEXAMPLE_DIR} /${e}.c ${LIBVNCCLIEXAMPLE_DIR} /${${e}_EXTRA_SOURCES} )
619- set_target_properties (client_examples_${e} PROPERTIES OUTPUT_NAME ${e} )
620- set_target_properties (client_examples_${e} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /client_examples )
621- target_link_libraries (client_examples_${e} vncclient ${CMAKE_THREAD_LIBS_INIT} ${SDL2_LIBRARY} ${GTK2_LIBRARIES} ${FFMPEG_LIBRARIES} )
622- endforeach (e ${LIBVNCCLIENT_EXAMPLES} )
623-
628+ if (WITH_EXAMPLES)
629+ foreach (e ${LIBVNCSERVER_EXAMPLES} )
630+ add_executable (examples_${e} ${LIBVNCSRVEXAMPLE_DIR} /${e}.c )
631+ set_target_properties (examples_${e} PROPERTIES OUTPUT_NAME ${e} )
632+ set_target_properties (examples_${e} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /examples )
633+ target_link_libraries (examples_${e} vncserver ${CMAKE_THREAD_LIBS_INIT} ${CARBON_LIBRARY} ${IOKIT_LIBRARY} ${IOSURFACE_LIBRARY} )
634+ endforeach (e ${LIBVNCSERVER_EXAMPLES} )
635+
636+ foreach (e ${LIBVNCCLIENT_EXAMPLES} )
637+ add_executable (client_examples_${e} ${LIBVNCCLIEXAMPLE_DIR} /${e}.c ${LIBVNCCLIEXAMPLE_DIR} /${${e}_EXTRA_SOURCES} )
638+ set_target_properties (client_examples_${e} PROPERTIES OUTPUT_NAME ${e} )
639+ set_target_properties (client_examples_${e} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /client_examples )
640+ target_link_libraries (client_examples_${e} vncclient ${CMAKE_THREAD_LIBS_INIT} ${SDL2_LIBRARY} ${GTK2_LIBRARIES} ${FFMPEG_LIBRARIES} ${LIBSSH2_LIBRARY } )
641+ endforeach (e ${LIBVNCCLIENT_EXAMPLES} )
642+ endif ( WITH_EXAMPLES )
624643
625644#
626645# them tests
627646#
628647
648+ if (WITH_TESTS)
649+
629650if (UNIX )
630651 set (ADDITIONAL_TEST_LIBS m)
631652endif (UNIX )
@@ -697,6 +718,8 @@ if(LIBVNCSERVER_WITH_WEBSOCKETS)
697718 add_test (NAME wstest COMMAND test_wstest )
698719endif (LIBVNCSERVER_WITH_WEBSOCKETS )
699720
721+ endif (WITH_TESTS )
722+
700723#
701724# this gets the libraries needed by TARGET in "-libx -liby ..." form
702725#
@@ -726,22 +749,65 @@ get_link_libraries(PRIVATE_LIBS vncclient)
726749configure_file (${CMAKE_CURRENT_SOURCE_DIR} /libvncclient.pc.cmakein ${CMAKE_CURRENT_BINARY_DIR} /libvncclient.pc @ONLY )
727750
728751if (LIBVNCSERVER_INSTALL)
729- install (TARGETS vncserver DESTINATION ${CMAKE_INSTALL_LIBDIR} )
730- install (TARGETS vncclient DESTINATION ${CMAKE_INSTALL_LIBDIR} )
731- install (FILES
732- rfb/keysym.h
733- rfb/threading.h
734- rfb/rfb.h
735- rfb/rfbclient.h
736- ${CMAKE_CURRENT_BINARY_DIR} /rfb/rfbconfig.h
737- rfb/rfbproto.h
738- rfb/rfbregion.h
739- DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} /rfb
740- )
741-
742- install (FILES
743- ${CMAKE_CURRENT_BINARY_DIR} /libvncserver.pc
744- ${CMAKE_CURRENT_BINARY_DIR} /libvncclient.pc
745- DESTINATION ${CMAKE_INSTALL_LIBDIR} /pkgconfig
746- )
752+ set (INSTALL_HEADER_FILES
753+ rfb/keysym.h
754+ rfb/threading.h
755+ rfb/rfb.h
756+ rfb/rfbclient.h
757+ ${CMAKE_CURRENT_BINARY_DIR} /rfb/rfbconfig.h
758+ rfb/rfbproto.h
759+ rfb/rfbregion.h
760+ )
761+
762+ set_property (TARGET vncclient PROPERTY PUBLIC_HEADER ${INSTALL_HEADER_FILES} )
763+ set_property (TARGET vncserver PROPERTY PUBLIC_HEADER ${INSTALL_HEADER_FILES} )
764+ if (WIN32 )
765+ INSTALL (TARGETS vncclient vncserver
766+ EXPORT LibVNCServerTargets
767+ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR} "
768+ LIBRARY DESTINATION "${CMAKE_INSTALL_BINDIR} "
769+ ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR} "
770+ PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} /rfb
771+ INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
772+ )
773+ else ()
774+ INSTALL (TARGETS vncclient vncserver
775+ EXPORT LibVNCServerTargets
776+ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR} "
777+ LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR} "
778+ ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR} "
779+ PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} /rfb
780+ INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
781+ )
782+ endif ()
783+
784+ # Install cmake configure files
785+ install (EXPORT LibVNCServerTargets
786+ NAMESPACE
787+ "LibVNCServer::"
788+ DESTINATION "${CMAKE_INSTALL_LIBDIR} /cmake/LibVNCServer"
789+ )
790+
791+ include (CMakePackageConfigHelpers )
792+ configure_package_config_file (
793+ ${PROJECT_SOURCE_DIR} /cmake/Modules/LibVNCServerConfig.cmake.in
794+ ${CMAKE_BINARY_DIR} /LibVNCServerConfig.cmake
795+ INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR} /cmake/LibVNCServer"
796+ )
797+ # Install cmake version configure file
798+ write_basic_package_version_file (
799+ "${CMAKE_BINARY_DIR} /LibVNCServerConfigVersion.cmake"
800+ VERSION ${PARA_VERSION}
801+ COMPATIBILITY AnyNewerVersion )
802+ install (FILES
803+ "${CMAKE_BINARY_DIR} /LibVNCServerConfigVersion.cmake"
804+ "${CMAKE_BINARY_DIR} /LibVNCServerConfig.cmake"
805+ DESTINATION "${CMAKE_INSTALL_LIBDIR} /cmake/LibVNCServer" )
806+
807+
808+ install (FILES
809+ ${CMAKE_CURRENT_BINARY_DIR} /libvncserver.pc
810+ ${CMAKE_CURRENT_BINARY_DIR} /libvncclient.pc
811+ DESTINATION ${CMAKE_INSTALL_LIBDIR} /pkgconfig
812+ )
747813endif ()
0 commit comments